
    hP                         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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'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    T/var/www/html/env/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                  " [        [         R
                  US/S9  SSS.n[        R                  " [        [         R
                  USS/US9  [         R
                  " USS	/US9  g )
N   r   )fixed   r   r   r   r      r   )r   posr   )r   
path_graphpytestraises
ValueErrorspring_layout)selfGr    s      r   test_spring_fixed_without_pos(TestLayout.test_spring_fixed_without_pos   sh    MM!j""2"2AaSAV$j""2"2AaVM
1a&c2r   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N)isnan).0coordscmaths      r   	<genexpr>2TestLayout.test_spring_init_pos.<locals>.<genexpr>$   s#     O,1djjmmm,s   '*zvalues should not be nan)r7   r   r   add_edges_fromfruchterman_reingold_layoutanyvalues)r&   r'   init_pos	fixed_posr    has_nanr7   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 r2   )r   random_layoutcircular_layoutplanar_layoutr%   r;   spectral_layoutshell_layoutbipartite_layoutspiral_layoutmultipartite_layoutkamada_kawai_layoutr&   r'   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   dimr-   )r   r   rD   rE   rF   r%   forceatlas2_layoutr;   r   rG   to_directedrH   rJ   rL   
arf_layoutrM   s     r   test_smoke_intTestLayout.test_smoke_int5   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 rQ   )r   r   rD   rE   rF   r%   rT   r;   rG   rH   rJ   rL   rV   rM   s     r   test_smoke_stringTestLayout.test_smoke_stringI   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   )nparraylistr=   maxminall)r&   r    scalecenterlowhivposlengths           r   check_scale_and_center!TestLayout.check_scale_and_centerY   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	   	   rd         ?)g      @g      @rc   rd   r   )r   r-   r	   r-   )rS   rc   rd   ri   r   complete_graphadd_noderD   r%   rG   rE   rH   rJ   rL   r&   scr6   r'   s       r   test_scale_and_center_arg$TestLayout.test_scale_and_center_argc   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 )Nrl   )r   rq   r"   r#   NetworkXExceptionrF   rM   s     r   #test_planar_layout_non_planar_input.TestLayout.test_planar_layout_non_planar_inputt   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_datarF   )r&   	embeddings     r   (test_smoke_planar_layout_embedding_input3TestLayout.test_smoke_planar_layout_embedding_inputx   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   rl   rn   rn   rn   ro   r   )r   r   r   r-   rR   rp   rs   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   rR   r-   )r   r!   r"   r#   r$   rE   rH   rF   rM   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   r-   rR   r   r-   )r   to_numpy_arrayr   drawinglayout_fruchterman_reingoldshape_sparse_fruchterman_reingoldr&   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   r-   rR   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   r-   )rotate)r   r!   rH   r<   r]   linalgnormr&   r'   rg   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   rE   r   rT   r&   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   rE   r   r;   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   rE   r   rV   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   r0   r   Hz>abs)	r   rE   r   r%   tupler   ranger"   approx)r&   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   rm   r   )r   r!   rD   rE   r   rF   r%   r;   rG   rH   rJ   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   rm   r-   r   )rS   rd   )r   r!   idr%   r;   r"   r#   r$   rD   rE   rF   rG   rH   rJ   rL   rM   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   rm   )r   empty_graphrD   rE   rF   rI   r%   r;   rG   rH   rJ   rK   rL   rT   rV   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 )Nr-   r	   r   
horizontalr   r   r   r   )alignrd   rc   aspect_ratiofoor   )
r   complete_bipartite_graph	bipartitesetsrI   lenr_   r"   r#   r$   )
r&   r'   topbottomrg   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 r4   istartrg   s     r   r8   6TestLayout.test_multipartite_layout.<locals>.<genexpr>-  (     S=RtE{1~a3=R   !r   r   r   r   )r   rc   rd   c              3   F   >#    U  H  nTT   S    TU   S    :H  v   M     g7f)r   Nr   r   s     r   r8   r   6  r   r   r   r   )	r   complete_multipartite_graphrK   r   rb   r   r"   r#   r$   )r&   sizesr'   nendr   rg   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   
meanweightrS   g      ?r   r         rn   )r   r   r   _kamada_kawai_costfnr]   r^   r"   r   )r&   costfnr    invdistcostgrads         r   test_kamada_kawai_costfn_1d&TestLayout.test_kamada_kawai_costfn_1d;  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   rn   r   r   r   r         ?r   r   g-C6?gh㈵>)r   r   r   r   ravelr]   sumr   r   r   r   r"   r   flatten)r&   r    r   meanwtrS   r   r   r   expected_costr   jdiffdxnddmidxpscpluscminuss                      r   check_kamada_kawai_costfn$TestLayout.check_kamada_kawai_costfnG  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?r-   )r]   r^   r
  )r&   r   r   r    s       r   test_kamada_kawai_costfn#TestLayout.test_kamada_kawai_costfnb  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]   r^   r_   r   rJ   r=   r   r   r   allclose)r&   r'   pos_standardpos_tighter	distancesdistances_tighterpos_equidistantdistances_equidistants           r   test_spiral_layoutTestLayout.test_spiral_layoutp  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9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   r  r   r   gMbP?r  )r   r!   rJ   r]   r^   r_   r=   r   r   r  r  )r&   r'   r    pdists        r   test_spiral_layout_equidistant)TestLayout.test_spiral_layout_equidistant  s    MM"qd3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_elementrE   rT   r   r&   r'   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   rm   r   r.   )r   r   r+   gư>r-   r   r   r|   )r  r  )rc   )r/  r   )r   r   rD   rescale_layout_dictr]   r   r   zipr=   r   r^   itemsrb   )r&   r'   rg   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   r)  r*  rE   rV   r   r+  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  )r'   aN)r   r"   r#   r$   r   rV   rM   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   rD   r%   rV   rT   rM   s     r   test_smoke_seed_input TestLayout.test_smoke_seed_input  sI    GG
$
$
ab!
ab)r   r   N)(__name__
__module____qualname____firstlineno__classmethodr   r(   rA   rN   rW   rZ   ri   ru   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r   r&  r,  r8  r;  r?  rD  __static_attributes__r   r   r   r   r      s    , ,37"( "S"A$
@ >##
,7@/	T($O:L8J0
7Y6@
,8"*<"<*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   s1r-   )r   )r   r-   r,   N)r   r   rr   r:   rK   r   )r'   r    s     r   4test_multipartite_layout_nonnumeric_partition_labelsrQ    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)r>  br6   r   e)r   r-   r   r   r   rN  r   r   )r   
subset_keyr>  r  r   r6   rS  rT  layer_0rO  N)r   r   dictr1  r2  rr   rK   r)  groupsrb   nodeskeys)r'   
node_groupr   layerr    layerspos_from_layersn1p1n2p2
pos_nosorts               r   $test_multipartite_layout_layer_orderrd    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]   r^   r_   r=   unique)r    r4  _layer_counts       r   _num_nodes_per_bfs_layerrj    s>    
cjjl#$QT*AYYqY5NAr   r   r   r   c                     [         R                  " U 5      n[         R                  " USS9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   N)r   rq   
bfs_layoutr]   array_equalrj  )r   r'   r    s      r   test_bfs_layout_complete_graphro    sI     	!A
--
#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	   r-   r   rl  )r   r   r   r   r   r   r      r   )r   r   r   r   )r   barbell_graphrm  r]   rn  rj  )r'   r    expected_nodes_per_layers      r   test_bfs_layout_barbellrt    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   rq  z#bfs_layout didn't include all nodes)matchr   rl  )r   rq   r:   r"   r#   NetworkXErrorrm  )r'   s    r   test_bfs_layout_disconnectedrx    sU    
!Ah)*	r''/T	U
aq! 
V	U	Us   A,,
A:)__doc__r"   networkxr   importorskipr]   r   rQ  rd  rj  markparametrizer   ro  rt  rx  r   r   r   <module>r~     s    &  !   G @* @*F	+6 eAqk*E +ES""r   