
    sh\                        S r SSKrSSKr\R                  " S5      r\R                  " S5         " S S5      rS rS rS	 r	\R                  R                  S
\" SS5      5      S 5       rS rS rS rS r\R                  R                  S\R$                  \R&                  \R(                  \R*                  \R,                  \R.                  \R0                  \R2                  \R4                  /	5      S 5       r\R                  R                  SSS/5      \R                  R                  S0 SS0S/S.SS0/5      S 5       5       rg)z Unit tests for layout functions.    Nnumpyscipyc                       \ rS rSr\S 5       rS rS rS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S  r#S! r$S" r%S# r&S$ r'S% r(S&r)g')(
TestLayout   c                     [         R                  " SS5      U l        [         R                  " 5       U l        [         R
                  " U R                  S5        [         R                  " SS5      U l        g )N   abcdef   )nxgrid_2d_graphGiGraphGsadd_pathbigG)clss    v/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/networkx/drawing/tests/test_layout.pysetup_classTestLayout.setup_class   sI    !!!Q'
CFFH%##B+    c                   ^^ [         R                  " S5      n[        R                  " [        SS9   [         R
                  " US/S9  S S S 5        SSS.m[        R                  " [        SS9   [         R
                  " USS	/TS
9  S S S 5        [         R
                  " USS/TS
9m[        UU4S jS 5       5      (       d   eg ! , (       d  f       N= f! , (       d  f       NU= f)N   z!nodes are fixed without positionsmatchr   )fixed   r   r   r   r      r   )r   posr!   c              3   \   >#    U  H!  n[         R                  TU   TU   5      v   M#     g 7fN)nparray_equal).0noutr"   s     r   	<genexpr>;TestLayout.test_spring_fixed_without_pos.<locals>.<genexpr>    s'     B6a2>>#a&#a&116s   ),)r   
path_graphpytestraises
ValueErrorspring_layoutall)selfGr)   r"   s     @@r   test_spring_fixed_without_pos(TestLayout.test_spring_fixed_without_pos   s    MM!]]:-PQQqc* R V$]]:-PQQq!f#6 R qAC8B6BBBBB RQ
 RQs   C/C
C
C%c                    ^ SS K m[        R                  " 5       nUR                  / SQ5        SS0nS/n[        R                  " XUS9n[        U4S jUR                  5        5       5      nU(       a   S5       eg )Nr   )r   r   r   r!   )r!   r   )r!              r;   r"   r   c              3   X   >#    U  H  o  H  nTR                  U5      v   M     M!     g 7fr$   )isnan)r'   coordscmaths      r   r*   2TestLayout.test_spring_init_pos.<locals>.<genexpr>,   s#     O,1djjmmm,s   '*zvalues should not be nan)rA   r   r   add_edges_fromfruchterman_reingold_layoutanyvalues)r2   r3   init_pos	fixed_posr"   has_nanrA   s         @r   test_spring_init_posTestLayout.test_spring_init_pos"   sh    HHJ	9:z?C	,,QINO#**,OO666{7r   c                    / n[         R                  " U5        [         R                  " U5        [         R                  " U5        [         R                  " U5        [         R
                  " U5        [         R                  " U5        [         R                  " U5        [         R                  " X5        [         R                  " U5        [         R                  " U5        [         R                  " U5        g r$   )r   random_layoutcircular_layoutplanar_layoutr0   rD   spectral_layoutshell_layoutbipartite_layoutspiral_layoutmultipartite_layoutkamada_kawai_layoutr2   r3   s     r   test_smoke_empty_graph!TestLayout.test_smoke_empty_graph/   s    

1


&&q)
1

A!

q!
q!r   c                 x   U R                   n[        R                  " U5        [        R                  " U5        [        R                  " U5        [        R
                  " U5        [        R                  " U5        [        R                  " U5        [        R                  " U R                  5        [        R                  " U5        [        R                  " UR                  5       5        [        R                  " U R                  5        [        R                  " U R                  R                  5       5        [        R                  " U5        [        R                  " U5        [        R                  " U5        [        R                  " USS9  [        R                  " USS9  [        R                  " U5        g Nr   dimr9   )r   r   rM   rN   rO   r0   forceatlas2_layoutrD   r   rP   to_directedrQ   rS   rU   
arf_layoutrV   s     r   test_smoke_intTestLayout.test_smoke_int=   s   GG

1


a 
&&q)
&&tyy1
1
1==?+
499%
4990023


q!
qa(
qa(
ar   c                 T   U R                   n[        R                  " U5        [        R                  " U5        [        R                  " U5        [        R
                  " U5        [        R                  " U5        [        R                  " U5        [        R                  " U5        [        R                  " U5        [        R                  " U5        [        R                  " U5        [        R                  " USS9  [        R                  " USS9  [        R                  " U5        g rZ   )r   r   rM   rN   rO   r0   r]   rD   rP   rQ   rS   rU   r_   rV   s     r   test_smoke_stringTestLayout.test_smoke_stringQ   s    GG

1


a 
&&q)
1


q!
qa(
qa(
ar   c                 z   [         R                  U5      nX2-
  nX2-   n[         R                  [        UR                  5       5      5      nUR	                  S5      UR                  S5      -
  nUSU-  :*  R                  5       (       d   eXd:  R                  5       (       d   eXe:*  R                  5       (       d   eg )Nr   r!   )r%   arraylistrF   maxminr1   )r2   r"   scalecenterlowhivposlengths           r   check_scale_and_center!TestLayout.check_scale_and_centera   s    &!n^xxSZZ\*+!txx{*!e)#((****  """"
!!!!r   c           	      0   U R                   nSn[        R                  " S5      nUR                  S5        U" [        R                  " X2S9SSS9  U" [        R
                  " USUS9SUS9  U" [        R                  " USUS9SUS9  U" [        R                  " USUS9SUS9  U" [        R                  " USUS9SUS9  U" [        R                  " USUS9SUS9  U" [        R                  " USUS9SUS9  SnU" [        R                  " US	SUS
9SUS9  g )N)r   r	   	   rk         ?)g      @g      @rj   rk   r!   )r!   r9   r	   r9   )r\   rj   rk   rp   r   complete_graphadd_noderM   r0   rP   rN   rQ   rS   rU   r2   scr@   r3   s       r   test_scale_and_center_arg$TestLayout.test_scale_and_center_argk   s   ((a 	

1
2A(JG
2AQq11E
2aq31QG
2aq31QG
2??1Aa0!D
2AQq11E
2!!!1Q7qK
2!!!!A>aPQRr   c                     [         R                  " S5      n[        R                  " [         R                  [         R
                  U5        g )Nrs   )r   rx   r-   r.   NetworkXExceptionrO   rV   s     r   #test_planar_layout_non_planar_input.TestLayout.test_planar_layout_non_planar_input|   s.    a b**B,<,<a@r   c                     [         R                  " 5       nUR                  SS/SS/SS/S.5        [         R                  " U5        g )Nr   r!   r   r   r   r!   )r   PlanarEmbeddingset_datarO   )r2   	embeddings     r   (test_smoke_planar_layout_embedding_input3TestLayout.test_smoke_planar_layout_embedding_input   s?    &&(	1v1a&aV<=
#r   c                 0   U R                   nSn[        R                  " S5      nUR                  S5        U" [        R                  " U5      SSS9  U" [        R
                  " U5      SUS9  U" [        R                  " U5      SUS9  U" [        R                  " U5      SUS9  U" [        R                  " U5      SUS9  U" [        R                  " U5      SUS9  U" [        R                  " U5      SUS9  SnU" [        R                  " USS	9SUS9  g )
Nr   rs   ru   ru   ru   rv   r   )r   r   r   r9   r[   rw   rz   s       r   test_default_scale_and_center(TestLayout.test_default_scale_and_center   s    ((a 	

1
2Ac*=
2Aa2
2a !4
2a !4
2??1Qq1
2Aa2
2!!!$Aa8
2!!!+1Q?r   c                    [         R                  " S5      n[        R                  " [        [         R
                  USS9  [        R                  " [        [         R                  USS9  [        R                  " [        [         R                  USS9  [        R                  " [        [         R                  USS9  [        R                  " [        [         R                  USS9  g )Nr   r   r[   r9   )r   r,   r-   r.   r/   rN   rQ   rO   rV   s     r   (test_circular_planar_and_shell_dim_error3TestLayout.test_circular_planar_and_shell_dim_error   s    MM!j""4"4aQ?j"//1!<j"//1!<j""2"2A1=j""2"2A1=r   c                    [         R                  " U R                  5      n[         R                  R                  R                  U5      nUR                  S:X  d   e[         R                  R                  R                  USS9nUR                  S:X  d   e[         R                  R                  R                  U5      nUR                  S:X  d   eg )N   r!   r9   r[   r   r9   )r   to_numpy_arrayr   drawinglayout_fruchterman_reingoldshape_sparse_fruchterman_reingoldr2   Ar"   s      r   test_adjacency_interface_numpy)TestLayout.test_adjacency_interface_numpy   s    dgg&jj55a8yyF"""jj55aQ5?yyF"""jj<<Q?yyF"""r   c                    [         R                  " U R                  SS9n[         R                  R                  R                  U5      nUR                  S:X  d   e[         R                  R                  R                  U5      nUR                  S:X  d   e[         R                  R                  R                  USS9nUR                  S:X  d   eg )Nd)dtyper   r9   r[   r   )r   to_scipy_sparse_arrayr   r   r   r   r   _sparse_spectralr   s      r   test_adjacency_interface_scipy)TestLayout.test_adjacency_interface_scipy   s    $$TWWC8jj<<Q?yyF"""jj003yyF"""jj<<QA<FyyF"""r   c                 :   [         R                  " S5      n[         R                  " U5      nUS   R                  5       (       a   e[         R                  " S5      n[         R                  " US/SS/S//5      nUS   R                  5       (       a   eUS   R                  5       (       d   e[        R
                  R                  US   5      S::  d   e[         R                  " US/SS/S//SS9n[        R
                  R                  US   5      S::  d   eg )Nr   r   r   r!   r9   )rotate)r   r,   rQ   rE   r%   linalgnormr2   r3   rn   s      r   test_single_nodesTestLayout.test_single_nodes   s    MM!q!7;;==  MM!qA3A"457;;==  Aw{{}}}yy~~d1g&!+++qA3A"4Q?yy~~d1g&!+++r   c                     [         R                  " U R                  5      n[         R                  " U R                  US9ng Nr"   )r   rN   r   r]   r2   r"   nposs      r   "test_smoke_initial_pos_forceatlas2-TestLayout.test_smoke_initial_pos_forceatlas2   s,      )$$TWW#6r   c                     [         R                  " U R                  5      n[         R                  " U R                  US9ng r   )r   rN   r   rD   r   s      r   +test_smoke_initial_pos_fruchterman_reingold6TestLayout.test_smoke_initial_pos_fruchterman_reingold   s,      )--dgg3?r   c                     [         R                  " U R                  5      n[         R                  " U R                  US9ng r   )r   rN   r   r_   r   s      r   test_smoke_initial_pos_arf%TestLayout.test_smoke_initial_pos_arf   s*      )}}TWW#.r   c                    [         R                  " U R                  5      n[         R                  " U R                  US/S9n[	        US   5      [	        US   5      :X  d   e[         R                  " U R
                  5      n[         R                  " U R
                  US/S9n[        S5       H*  nUS   U   [        R                  " US   U   SS9:X  a  M*   e   g )Nr   r<   r!   Hz>abs)	r   rN   r   r0   tupler   ranger-   approx)r2   r"   r   axiss       r   $test_fixed_node_fruchterman_reingold/TestLayout.test_fixed_node_fruchterman_reingold   s      )SAS[!U4<%8888  +		s6(C!HDv;t$d6l46Hd(SSSS r   c                    [         R                  " S5      n[         R                  " USS9  [         R                  " USS9n[	        US   5      S:X  d   e[         R
                  " USS9n[	        US   5      S:X  d   e[         R                  " USS9n[	        US   5      S:X  d   e[         R                  " USS9n[	        US   5      S:X  d   e[         R                  " USS9n[	        US   5      S:X  d   e[         R                  " USS9n[	        US   5      S:X  d   e[         R                  " USS9n[	        US   5      S:X  d   eg )Nr   r   rt   r   )r   r,   rM   rN   r   rO   r0   rD   rP   rQ   rS   r   s      r   test_center_parameter TestLayout.test_center_parameter   s6   MM!
6*!!!F3T!W~'''&1T!W~'''&1T!W~'''--a?T!W~'''!!!F3T!W~'''q0T!W~'''&1T!W~'''r   c                    [         R                  " S5      n[        [         R                  5      [        [         R                  5      :X  d   e[
        R                  " [        [         R                  USS9  [
        R                  " [        [         R                  USS9  [
        R                  " [        [         R                  USS9  [
        R                  " [        [         R                  USS9  [
        R                  " [        [         R                  USSS9  [
        R                  " [        [         R                  USS9  [
        R                  " [        [         R                  USSS9  [
        R                  " [        [         R                  USS9  [
        R                  " [        [         R                  USS9  [
        R                  " [        [         R                  USS9  g )Nr   )r   r   r   rt   r9   r   )r\   rk   )r   r,   idr0   rD   r-   r.   r/   rM   rN   rO   rP   rQ   rS   rU   rV   s     r   test_center_wrong_dimensions'TestLayout.test_center_wrong_dimensions   s&   MM!"""#r"*H*H'IIIIj""2"2AiHj""4"4a	Jj""2"2AiHj""2"2AiHj""2"2A1VLj""4"4a	Jj""4"4aQvNj"//1YGj""2"2AiHj""8"8!INr   c                 &   [         R                  " 5       n[         R                  " USS9nU0 :X  d   e[         R                  " USS9nU0 :X  d   e[         R                  " USS9nU0 :X  d   e[         R
                  " X5      nU0 :X  d   e[         R                  " USS9nU0 :X  d   e[         R                  " USS9nU0 :X  d   e[         R                  " USS9nU0 :X  d   e[         R                  " USS9nU0 :X  d   e[         R                  " USS9nU0 :X  d   e[         R                  " USS9nU0 :X  d   e[         R                  " USS9nU0 :X  d   e[         R                  " U5      nU0 :X  d   e[         R                  " U5      nU0 :X  d   eg )Nr   rt   )r   empty_graphrM   rN   rO   rR   r0   rD   rP   rQ   rS   rT   rU   r]   r_   r   s      r   test_empty_graphTestLayout.test_empty_graph   s   NN&1rzz!!!F3rzz&1rzz""1(rzz&1rzz--a?rzz!!!F3rzzq0rzz&1rzz%%a7rzz%%a7rzz$$Q'rzz}}Qrzzr   c           	         [         R                  " SS5      n[         R                  R                  U5      u  p#[         R                  " X5      n[        U5      [        U5      :X  d   eU[        U5      S      S   nU[        U5      S      S   nU H  nXG   S   U:X  a  M   e   U H  nXG   S   U:X  a  M   e   [         R                  " XSSSSS9n[        U5      [        U5      :X  d   eU[        U5      S      S   nU[        U5      S      S   n	U H  nXG   S   U:X  a  M   e   U H  nXG   S   U	:X  a  M   e   [        R                  " [        [         R                  XS	S
9  g )Nr9   r	   r   
horizontalr!   r!   r!   r   )alignrk   rj   aspect_ratiofoor   )
r   complete_bipartite_graph	bipartitesetsrR   lenrg   r-   r.   r/   )
r2   r3   topbottomrn   top_xbottom_xnodetop_ybottom_ys
             r   test_bipartite_layout TestLayout.test_bipartite_layout  ss   ''1-ll''*""1*4yCF"""T#Yq\"1%VQ(+D:a=E))) D:a=H,,,  "",vQQ
 4yCF"""T#Yq\"1%VQ(+D:a=E))) D:a=H,,,  	j""5"5qUKr   c                 B  ^^ Sn[         R                  " U6 n[         R                  " U5      m[        T5      [        U5      :X  d   eSmU H7  nTU-   n[	        UU4S j[        TS-   U5       5       5      (       d   eTU-  mM9     [         R                  " USSSS9m[        T5      [        U5      :X  d   eSmU H7  nTU-   n[	        UU4S	 j[        TS-   U5       5       5      (       d   eTU-  mM9     [        R                  " [        [         R                  US
S9  g )N)r   r	      r!      r   c              3   F   >#    U  H  nTT   S    TU   S    :H  v   M     g7fr   N r'   istartrn   s     r   r*   6TestLayout.test_multipartite_layout.<locals>.<genexpr>5  (     S=RtE{1~a3=R   !r   r   r!   r   )r   rj   rk   c              3   F   >#    U  H  nTT   S    TU   S    :H  v   M     g7f)r   Nr   r   s     r   r*   r   >  r   r   r   r   )	r   complete_multipartite_graphrT   r   r1   r   r-   r.   r/   )r2   sizesr3   r(   endr   rn   s        @@r   test_multipartite_layout#TestLayout.test_multipartite_layout+  s   **E2%%a(4yCF"""A!)CSU519c=RSSSSSQJE 
 %%a|1VT4yCF"""A!)CSU519c=RSSSSSQJE 
 	j""8"8!5Ir   c                    [         R                  R                  R                  n[        R                  SS/5      nS[        R                  SS/SS//5      -  nU" U[        USSS9u  pEU[        R                  " S	S
S9:X  d   eUS   [        R                  " SS
S9:X  d   eUS   [        R                  " SS
S9:X  d   eg )Ng      @g      @r   皙?g       @333333?r   
meanweightr\   g      ?r   r         ru   )r   r   r   _kamada_kawai_costfnr%   rf   r-   r   )r2   costfnr"   invdistcostgrads         r   test_kamada_kawai_costfn_1d&TestLayout.test_kamada_kawai_costfn_1dC  s    ""77hhSz"bhhc
S#J788CWB
v}}&8tDDDDAw&--D9999Aw&--6666r   c           
         [         R                  R                  R                  nU" UR	                  5       [
        X#US9u  pgSU-  [
        R                  [
        R                  USS9S-  5      -  n[        UR                  S   5       H^  n	[        U	S-   UR                  S   5       H;  n
[
        R                  R                  X   X   -
  5      nXX)   U
   -  S-
  S-  -  nM=     M`     U[        R                  " USS	9:X  d   eS
n[        UR                  S   5       H  n[        UR                  S   5       H  nXR                  S   -  U-   nUR                  5       nUU==   U-  ss'   U" U[
        X#UR                  S   S9S   nUU==   SU-  -  ss'   U" U[
        X#UR                  S   S9S   nX   [        R                  " UU-
  SU-  -  SS	9:X  a  M   e   M     g )Nr   ru   r   r   r!   r         ?r   r   g-C6?h㈵>)r   r   r   r   ravelr%   sumr   r   r   r   r-   r   flatten)r2   r"   r   meanwtr\   r   r   r   expected_costr   jdiffdxnddmidxpscpluscminuss                      r   check_kamada_kawai_costfn$TestLayout.check_kamada_kawai_costfnO  s   ""77CIIKWSQ
frvvbffSqf.AQ.F'GGsyy|$A1q5#))A,/yy~~cfsvo6A"6"<!BB 0 %
 v}}]====		!%BCIIaL)99Q<'",[[]32r2wsyyQR|TUVW31r6!B		RSUVWXyFMM56>a"f2MSW$XXXX * &r   c                    S[         R                  / SQ/ SQ/ SQ/5      -  nSn[         R                  SS/SS	/S
S//5      nU R                  X1US5        [         R                  / SQ/ SQ/ SQ/5      nU R                  X1US5        g )Nr   )r    @333333?)r  g?333333?)r  r  r   r   g?g	g@g333333ӿgffffff@g      @r!   )g?g333333!@gffffff!)ir   gffffff)g333333"@g333333 g?r9   )r%   rf   r  )r2   r   r  r"   s       r   test_kamada_kawai_costfn#TestLayout.test_kamada_kawai_costfnj  s    bhh/RSS hhdc4[3*=>&&sVQ? hh(*;=MNO&&sVQ?r   c           	         U R                   n[        R                  [        [        R
                  " USS9R                  5       5      5      n[        R                  [        [        R
                  " USS9R                  5       5      5      n[        R                  R                  US S USS  -
  SS9n[        R                  R                  US S USS  -
  SS9n[        U5      [        U5      :  d   e[        R                  [        [        R
                  " USS9R                  5       5      5      n[        R                  R                  US S USS  -
  SS9n[        R                  USS  US   S	S
9(       d   eg )Ngffffff?)
resolutiong(\?r   r  T)equidistantg{Gz?atol)r   r%   rf   rg   r   rS   rF   r   r   r  allclose)r2   r3   pos_standardpos_tighter	distancesdistances_tighterpos_equidistantdistances_equidistants           r   test_spiral_layoutTestLayout.test_spiral_layoutx  sV   GG xxR%5%5aD%I%P%P%R SThhtB$4$4Q4$H$O$O$QRSIINN<#4|AB7G#GaNP	IINN;s+;k!"o+MTUNV9~$5 6666 ((4(8(8(M(T(T(V#WX "		CR ?12#66Q !/ !
 {{!!"%'<R'@t  
 	
 
r   c                    [         R                  " S5      n[         R                  " USSS9  [         R                  " US5      n[        R                  [        UR                  5       5      5      n[        R                  R                  USS  US S -
  SS9n[        R                  [        R                  U5      SS	S
9(       d   eg )N
   Tr"   )r  store_pos_asr   r  r  r   gMbP?r  )r   r,   rS   get_node_attributesr%   rf   rg   rF   r   r   r!  r  )r2   r3   r"   pdists        r   test_spiral_layout_equidistant)TestLayout.test_spiral_layout_equidistant  s    MM"
5A$$Q.HHT#**,'(yy~~aeafn1~5{{2774=!${777r   c                     U R                   n[        R                  R                  U5      n[        R                  " U5      nX2	 [        R
                  " XS9n[        U5      [        U5      :X  d   eg r   )r   r   utilsarbitrary_elementrN   r]   r   r2   r3   r   r"   s       r   *test_forceatlas2_layout_partial_input_test5TestLayout.test_forceatlas2_layout_partial_input_test  sZ    GGxx))!,  #I##A/3x3q6!!!r   c                     [         R                  " 5       n[         R                  " USS9n[         R                  " U5      0 :X  d   e[         R                  " S5      nSSS.n[         R                  " U5      n[        R
                  R                  [        UR                  5       6  Vs/ s H  n[        U5      PM     sn5      S:  d   e[         R                  " S5      nS	SS
S.n[         R                  " U5      n[        R                  S5      [        R                  S5      [        R                  S	5      S.nUR                  5        H!  u  pgX6   U:H  R                  5       (       a  M!   e   [         R                  " USS9n[        R                  S5      [        R                  S5      [        R                  S	5      S.nUR                  5        H!  u  pgX6   U:H  R                  5       (       a  M!   e   g s  snf )Nr   rt   r!   r:   )r  r  r7   gư>r9   r   r   r   )r  r  )rj   )r9  r   )r   r   rM   rescale_layout_dictr%   r   r   ziprF   r  rf   itemsr1   )r2   r3   rn   s_vposxexpectationkvs           r   test_rescale_layout_dict#TestLayout.test_rescale_layout_dict  s   NN&1%%d+r111NN1*-''-yy~~sFMMO/DE/D!s1v/DEFMMMNN1f4''- xx!xxxx

  %%'DAIN'')))) (''A6xx!xxxx

  %%'DAIN'')))) (' Fs   )G;c                     U R                   n[        R                  R                  U5      n[        R                  " U5      nX2	 [        R
                  " XS9n[        U5      [        U5      :X  d   eg r   )r   r   r3  r4  rN   r_   r   r5  s       r   "test_arf_layout_partial_input_test-TestLayout.test_arf_layout_partial_input_test  sX    GGxx))!,  #ImmA'3x3q6!!!r   c                 n    U R                   n[        R                  " [        [        R
                  USS9  g)z\
Checks input parameters correctly raises errors. For example,  `a` should be larger than 1
r  )r3   aN)r   r-   r.   r/   r   r_   rV   s     r    test_arf_layout_negative_a_check+TestLayout.test_arf_layout_negative_a_check  s#     GGj"--1;r   c                     U R                   n[        R                  " USS9  [        R                  " USS9  [        R                  " USS9  [        R
                  " USS9  g )N*   )seed)r   r   rM   r0   r_   r]   rV   s     r   test_smoke_seed_input TestLayout.test_smoke_seed_input  sI    GG
$
$
ab!
ab)r   c                     [         R                  " S5      n[        S5       Vs0 s H
  o"US-
  S/_M     nn[         R                  " XS9ng s  snf )Nr9   r   r;   r   r   r,   r   r]   r2   r3   r   orig_posnew_poss        r   test_node_at_centerTestLayout.test_node_at_center  sG    MM!-21X6XAs|OX6''8 7s   Ac                     [         R                  " S5      n[        S5       Vs0 s H
  o"US-
  S/_M     nn[         R                  " XSS9ng s  snf )Nr9   r!   r   r;   rL  )r"   rM  rQ  rR  s        r   test_initial_only_some_pos%TestLayout.test_initial_only_some_pos  sI    MM!-21X6XAs|OX6''bA 7s   Ar   N)*__name__
__module____qualname____firstlineno__classmethodr   r4   rJ   rW   r`   rc   rp   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r(  r0  r6  rB  rE  rI  rN  rU  rX  __static_attributes__r   r   r   r   r      s    , ,C7"( "S"A$
@ >##
,7@/	T($O:L8J0
7Y6@
,8"*<"<*9Br   r   c                  4   [         R                  " 5       n U R                  SSS9  U R                  SSS9  U R                  SSS9  U R                  SSS9  U R                  / SQ5        [         R                  " U 5      n[        U5      [        U 5      :X  d   eg	)
zSee gh-5123.r   s0subsetr   r!   s1r9   )r    )r   r9   r8   N)r   r   ry   rC   rT   r   r3   r"   s     r   4test_multipartite_layout_nonnumeric_partition_labelsrf    s    

AJJqJJJqJJJqJJJqJ-.

 
 
#Cs8s1vr   c                     [         R                  " 5       n [        [        SS5      5      nUR	                  5        H  u  p#U R                  X#S9  M     [         R                  " U SS9n[         R                  R                  U5      n[         R                  " U SUS9n[        UR	                  5       UR	                  5       5       H(  u  u  pxu  pXy:X  a  X:H  R                  5       (       a  M(   e   US   S   US	   S   :X  d   eUS
   S   US   S   s=:  a  US   S   s=:  a  US   S   :  d   e   eSU R                  S   S'   [         R                  " U 5      nUR                  5       UR                  5       :X  d   eg)zcReturn the layers in sorted order if the layers of the multipartite
graph are sortable. See gh-5691)rH  br@   r   e)r!   r9   r   r!   r   rb  r   r   )r   
subset_keyrH  r  r   r@   rh  ri  layer_0rc  N)r   r   dictr;  r<  ry   rT   r3  groupsr1   nodeskeys)r3   
node_groupr   layerr"   layerspos_from_layersn1p1n2p2
pos_nosorts               r   $test_multipartite_layout_layer_orderry    s^    	
Ac3_EFJ!'')	

4
& * 
 
 ,
7CXX__Z(F,,QlvVO!#))+/D/D/FG(2xRXNN,,,, H s8B<3s8B<'''s8B<#c(2,DS"DCDDDDD 'AGGCL''*J??
***r   c                     [         R                  [        U R                  5       5      5      SS2S4   n[         R	                  USS9u  p#U$ )zJHelper function to extract the number of nodes in each layer of bfs_layoutNr   T)return_counts)r%   rf   rg   rF   unique)r"   r>  _layer_counts       r   _num_nodes_per_bfs_layerr  	  s>    
cjjl#$QT*AYYqY5NAr   r(   r!   r   c                     [         R                  " U 5      n[         R                  " USSS9  [         R                  " US5      n[        R                  [        U5      SU S-
  /5      (       d   eg)znThe complete graph should result in two layers: the starting node and
a second layer containing all neighbors.r   r"   )r   r,  r   N)r   rx   
bfs_layoutr-  r%   r&   r  )r(   r3   r"   s      r   test_bfs_layout_complete_graphr    s[     	!AMM!151

 
 E
*C>>237!QUDDDDr   c                     [         R                  " SS5      n [         R                  " U SS9n/ SQn[        R	                  [        U5      U5      (       d   e[         R                  " U SS9n[        R	                  [        U5      U5      (       d   e[         R                  " U SS9n/ SQn[        R	                  [        U5      U5      (       d   eg )	Nr	   r9   r   r   )r   r   r   r   r   r   r      r   )r   r!   r!   r   )r   barbell_graphr  r%   r&   r  )r3   r"   expected_nodes_per_layers      r   test_bfs_layout_barbellr    s    
AA
--
#C4>>2379QRRRR
--
$C>>2379QRRRR
--
#C+>>2379QRRRRr   c                      [         R                  " S5      n U R                  SS/5        [        R                  " [         R
                  SS9   [         R                  " U SS9  S S S 5        g ! , (       d  f       g = f)Nr	   )r+  r   )r   r  z#bfs_layout didn't include all nodesr   r   r  )r   rx   rC   r-   r.   NetworkXErrorr  )r3   s    r   test_bfs_layout_disconnectedr  +  sU    
!Ah)*	r''/T	U
aq! 
V	U	Us   A,,
A:c                     [         R                  " S5      n [        R                  " [         R                  SS9   [         R
                  " U 5        S S S 5        [         R
                  " U SS/S9ng ! , (       d  f       N&= f)Nr	   zGraph is not bipartiter   r!   r9   )rn  )r   rx   r-   r.   r  rR   re  s     r   >test_bipartite_layout_default_nodes_raises_non_bipartite_inputr  2  s]    
!A	r''/G	H
A 
I 

a1v
.C 
I	Hs   A11
A?c                    ^ [         R                  " SS5      n [         R                  " U 5      n[         R                  R	                  U 5       H7  nU Vs/ s H
  o1U   S   PM     snm[        U4S jT 5       5      (       a  M7   e   g s  snf )Nr9   r   c              3   Z   >#    U  H   o[         R                  " TS    5      :H  v   M"     g7fr   )r-   r   )r'   r>  xss     r   r*   6test_bipartite_layout_default_nodes.<locals>.<genexpr>@  s!     9bbe,,bs   (+)r   r   rR   r   r   r1   )r3   r"   nodesetr@  r  s       @r   #test_bipartite_layout_default_nodesr  :  sr    
##Aq)A


a
 C<<$$Q'!()A!fQi)9b99999 ()s   B
r   c                     [         R                  " S5      nSR                  / SQ5      n[        R                  " [
        US9   U " USS9  SSS5        g! , (       d  f       g= f)z>Test all layouts that support dim kwarg handle invalid inputs.r   |)z negative dimensions.*not allowedzcan only handle 2zcannot handle.*2r   r  r[   N)r   r,   joinr-   r.   r/   )r   r3   valid_err_msgss      r   test_layouts_negative_dimr  C  sK      	aAXX	
N 
z	8qb 
9	8	8s   A
A")	num_nodesexpected_method)d   force)i  energyextra_layout_kwargsr   r<   r\   r9   c                 .   [         R                  " U 5      nSn[         R                  " U4XS.UD6n[         R                  " U4SUS.UD6n[        R	                  [        UR                  5       5      [        UR                  5       5      SS9(       d   eg)z;Expect 'force' layout for n < 500 and 'energy' for n >= 500ix	)methodrM  autor  r  N)r   cycle_graphr0   r%   r!  rg   rF   )r  r  r  r3   rM  expectedactuals          r   'test_spring_layout_graph_size_heuristicr  _  s     	y!AD 	!0CH aQTQ=PQF;;tHOO-.V]]_0ED;QQQr   )__doc__r-   networkxr   importorskipr%   r   rf  ry  r  markparametrizer   r  r  r  r  r  rM   rN   rQ   r0   rU   rP   rO   rS   r]   r  r  r   r   r   <module>r     sn   &  !   G TB TBn	+6 eAqk*E +ES""/: 









 $~&G 
Fqc*	
RRr   