
    ިsgP                         d Z ddlZddlZ ej                  d      Z ej                  d        G d d      Zd Zd Zd	 Z	ej                  j                  d
 edd            d        Zd Zd Zy)z Unit tests for layout functions.    Nnumpyscipyc                       e Zd Zed        Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%y#)$
TestLayoutc                     t        j                  dd      | _        t        j                         | _        t        j
                  | j                  d       t        j                  dd      | _        y )N   abcdef   )nxgrid_2d_graphGiGraphGsadd_pathbigG)clss    U/var/www/html/venv/lib/python3.12/site-packages/networkx/drawing/tests/test_layout.pysetup_classzTestLayout.setup_class   sI    !!!Q'
CFFH%##B+    c                     t        j                  d      }t        j                  t        t         j
                  |dg       ddd}t        j                  t        t         j
                  |ddg|       t        j
                  |dd	g|       y )
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_posz(TestLayout.test_spring_fixed_without_pos   sh    MM!j""2"2AaSAV$j""2"2AaVM
1a&c2r   c                     dd l t        j                         }|j                  g d       ddi}dg}t        j                  |||      }t        fd|j                         D              }|rJ d       y )Nr   )r   r   r   r   )r   r   )r              r,   r   r   c              3   N   K   | ]  }|D ]  }j                  |         y wN)isnan).0coordscmaths      r   	<genexpr>z2TestLayout.test_spring_init_pos.<locals>.<genexpr>$   s%     OO1djjmOmOs   "%zvalues should not be nan)r4   r   r   add_edges_fromfruchterman_reingold_layoutanyvalues)r$   r%   init_pos	fixed_posr   has_nanr4   s         @r   test_spring_init_poszTestLayout.test_spring_init_pos   sj    HHJ	9:z?C	,,QHINO#**,OO666{7r   c                    g }t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j
                  |       t        j                  |       t        j                  |       t        j                  ||       t        j                  |       t        j                  |       t        j                  |       y r/   )r   random_layoutcircular_layoutplanar_layoutr#   r7   spectral_layoutshell_layoutbipartite_layoutspiral_layoutmultipartite_layoutkamada_kawai_layoutr$   r%   s     r   test_smoke_empty_graphz!TestLayout.test_smoke_empty_graph'   s    

1


&&q)
1

Aq!

q!
q!r   c                 b   | j                   }t        j                  |       t        j                  |       t        j                  |       t        j
                  |       t        j                  |       t        j                  |       t        j                  | j                         t        j                  |       t        j                  |j                                t        j                  | j                         t        j                  | j                  j                                t        j                  |       t        j                  |       t        j                  |       t        j                  |d       t        j                  |d       t        j                  |       y Nr   dimr*   )r   r   r?   r@   rA   r#   forceatlas2_layoutr7   r   rB   to_directedrC   rE   rG   
arf_layoutrH   s     r   test_smoke_intz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                 F   | j                   }t        j                  |       t        j                  |       t        j                  |       t        j
                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |d       t        j                  |d       t        j                  |       y rK   )r   r   r?   r@   rA   r#   rN   r7   rB   rC   rE   rG   rP   rH   s     r   test_smoke_stringzTestLayout.test_smoke_stringI   s    GG

1


a 
&&q)
1


q!
qa(
qa(
ar   c                 d   t         j                  |      }||z
  }||z   }t         j                  t        |j                                     }|j	                  d      |j                  d      z
  }|d|z  k  j                         sJ ||k\  j                         sJ ||k  j                         sJ y )Nr   r   )nparraylistr9   maxminall)r$   r   scalecenterlowhivposlengths           r   check_scale_and_centerz!TestLayout.check_scale_and_centerY   s    &!une^xxSZZ\*+!txx{*!e)#((***  """
!!!r   c                    | j                   }d}t        j                  d      }|j                  d        |t        j                  ||      dd        |t        j
                  |d|      d|        |t        j                  |d|      d|        |t        j                  |d|      d|        |t        j                  |d|      d|        |t        j                  |d|      d|        |t        j                  |d|      d|       d} |t        j                  |d	d|
      d|       y )N)r   r   	   r\         ?)g      @g      @r[   r\   r   )r   r*   r   r*   )rM   r[   r\   ra   r   complete_graphadd_noder?   r#   rB   r@   rC   rE   rG   r$   scr3   r%   s       r   test_scale_and_center_argz$TestLayout.test_scale_and_center_argc   s	   ((a 	

1
2Aa(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                     t        j                  d      }t        j                  t         j                  t         j
                  |       y )Nrc   )r   rh   r    r!   NetworkXExceptionrA   rH   s     r   #test_planar_layout_non_planar_inputz.TestLayout.test_planar_layout_non_planar_inputt   s.    a b**B,<,<a@r   c                     t        j                         }|j                  ddgddgddgd       t        j                  |       y )Nr   r   r   r   r   r   )r   PlanarEmbeddingset_datarA   )r$   	embeddings     r   (test_smoke_planar_layout_embedding_inputz3TestLayout.test_smoke_planar_layout_embedding_inputx   s?    &&(	1v1a&aV<=
#r   c                 T   | j                   }d}t        j                  d      }|j                  d        |t        j                  |      dd        |t        j
                  |      d|        |t        j                  |      d|        |t        j                  |      d|        |t        j                  |      d|        |t        j                  |      d|        |t        j                  |      d|       d} |t        j                  |d	      d|       y )
Nr   rc   re   re   re   rf   r   )r   r   r   r*   rL   rg   rj   s       r   test_default_scale_and_centerz(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                    t        j                  d      }t        j                  t        t         j
                  |d       t        j                  t        t         j                  |d       t        j                  t        t         j                  |d       t        j                  t        t         j                  |d       t        j                  t        t         j                  |d       y )Nr   r   rL   r*   )r   r   r    r!   r"   r@   rC   rA   rH   s     r   (test_circular_planar_and_shell_dim_errorz3TestLayout.test_circular_planar_and_shell_dim_error   s    MM!j""4"4aQ?j"//1!<j"//1!<j""2"2A1=j""2"2A1=r   c                    t        j                  | j                        }t         j                  j                  j                  |      }|j                  dk(  sJ t         j                  j                  j                  |d      }|j                  dk(  sJ t         j                  j                  j                  |      }|j                  dk(  sJ y )N   r   r*   rL   r}   r*   )r   to_numpy_arrayr   drawinglayout_fruchterman_reingoldshape_sparse_fruchterman_reingoldr$   Ar   s      r   test_adjacency_interface_numpyz)TestLayout.test_adjacency_interface_numpy   s    dgg&jj55a8yyF"""jj55aQ5?yyF"""jj<<Q?yyF"""r   c                    t        j                  | j                  d      }t         j                  j                  j                  |      }|j                  dk(  sJ t         j                  j                  j                  |      }|j                  dk(  sJ t         j                  j                  j                  |d      }|j                  dk(  sJ y )Nd)dtyper|   r*   rL   r~   )r   to_scipy_sparse_arrayr   r   r   r   r   _sparse_spectralr   s      r   test_adjacency_interface_scipyz)TestLayout.test_adjacency_interface_scipy   s    $$TWWC8jj<<Q?yyF"""jj003yyF"""jj<<QA<FyyF"""r   c                    t        j                  d      }t        j                  |      }|d   j                         rJ t        j                  d      }t        j                  |dgddgdgg      }|d   j                         rJ |d   j                         sJ t        j
                  j                  |d         dk  sJ t        j                  |dgddgdggd      }t        j
                  j                  |d         dk  sJ y )Nr   r   r   r   r*   )rotate)r   r   rC   r8   rU   linalgnormr$   r%   r_   s      r   test_single_nodeszTestLayout.test_single_nodes   s    MM!q!7;;=  MM!qA3A"457;;=  Aw{{}}yy~~d1g&!+++qA3A"4Q?yy~~d1g&!+++r   c                     t        j                  | j                        }t        j                  | j                  |      }y N)r   )r   r@   r   rN   r$   r   nposs      r   "test_smoke_initial_pos_forceatlas2z-TestLayout.test_smoke_initial_pos_forceatlas2   s,      )$$TWW#6r   c                     t        j                  | j                        }t        j                  | j                  |      }y r   )r   r@   r   r7   r   s      r   +test_smoke_initial_pos_fruchterman_reingoldz6TestLayout.test_smoke_initial_pos_fruchterman_reingold   s,      )--dgg3?r   c                     t        j                  | j                        }t        j                  | j                  |      }y r   )r   r@   r   rP   r   s      r   test_smoke_initial_pos_arfz%TestLayout.test_smoke_initial_pos_arf   s*      )}}TWW#.r   c                    t        j                  | j                        }t        j                  | j                  |dg      }t	        |d         t	        |d         k(  sJ t        j                  | j
                        }t        j                  | j
                  |dg      }t        d      D ]*  }|d   |   t        j                  |d   |   d      k(  r*J  y )Nr   r-   r   Hz>abs)	r   r@   r   r#   tupler   ranger    approx)r$   r   r   axiss       r   $test_fixed_node_fruchterman_reingoldz/TestLayout.test_fixed_node_fruchterman_reingold   s      )SAS[!U4<%8888  +		s6(C!H 	TDv;t$d6l46Hd(SSSS	Tr   c                    t        j                  d      }t        j                  |d       t        j                  |d      }t	        |d         dk(  sJ t        j
                  |d      }t	        |d         dk(  sJ t        j                  |d      }t	        |d         dk(  sJ t        j                  |d      }t	        |d         dk(  sJ t        j                  |d      }t	        |d         dk(  sJ t        j                  |d      }t	        |d         dk(  sJ t        j                  |d      }t	        |d         dk(  sJ y )Nr   r   rd   r   )r   r   r?   r@   r   rA   r#   r7   rB   rC   rE   r   s      r   test_center_parameterz 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                    t        j                  d      }t        t         j                        t        t         j                        k(  sJ t        j                  t        t         j                  |d       t        j                  t        t         j                  |d       t        j                  t        t         j                  |d       t        j                  t        t         j                  |d       t        j                  t        t         j                  |dd       t        j                  t        t         j                  |d       t        j                  t        t         j                  |dd       t        j                  t        t         j                  |d       t        j                  t        t         j                  |d       t        j                  t        t         j                  |d       y )Nr   )r   r   r   rd   r*   r   )rM   r\   )r   r   idr#   r7   r    r!   r"   r?   r@   rA   rB   rC   rE   rG   rH   s     r   test_center_wrong_dimensionsz'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                 .   t        j                         }t        j                  |d      }|i k(  sJ t        j                  |d      }|i k(  sJ t        j                  |d      }|i k(  sJ t        j
                  ||      }|i k(  sJ t        j                  |d      }|i k(  sJ t        j                  |d      }|i k(  sJ t        j                  |d      }|i k(  sJ t        j                  |d      }|i k(  sJ t        j                  |d      }|i k(  sJ t        j                  |d      }|i k(  sJ t        j                  |d      }|i k(  sJ t        j                  |      }|i k(  sJ t        j                  |      }|i k(  sJ y )Nr   rd   )r   empty_graphr?   r@   rA   rD   r#   r7   rB   rC   rE   rF   rG   rN   rP   r   s      r   test_empty_graphzTestLayout.test_empty_graph   s   NN&1rzz!!!F3rzz&1rzz""1a(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                    t        j                  dd      }t         j                  j                  |      \  }}t        j                  ||      }t        |      t        |      k(  sJ |t        |      d      d   }|t        |      d      d   }|D ]  }||   d   |k(  rJ  |D ]  }||   d   |k(  rJ  t        j                  ||dddd      }t        |      t        |      k(  sJ |t        |      d      d   }|t        |      d      d   }	|D ]  }||   d   |k(  rJ  |D ]  }||   d   |	k(  rJ  t        j                  t        t         j                  ||d	
       y )Nr*   r   r   
horizontalr   r   r   r   )alignr\   r[   aspect_ratiofoor   )
r   complete_bipartite_graph	bipartitesetsrD   lenrW   r    r!   r"   )
r$   r%   topbottomr_   top_xbottom_xnodetop_ybottom_ys
             r   test_bipartite_layoutz TestLayout.test_bipartite_layout  s   ''1-ll''*V""1c*4yCF"""T#Yq\"1%VQ(+ 	*D:a=E)))	* 	-D:a=H,,,	- ""s,vQQ
 4yCF"""T#Yq\"1%VQ(+ 	*D:a=E)))	* 	-D:a=H,,,	- 	j""5"5q#UKr   c                 "   d}t        j                  | }t        j                  |      t              t        |      k(  sJ d|D ]0  }|z   }t	        fdt        dz   |      D              sJ |z  2 t        j                  |ddd      t              t        |      k(  sJ d|D ]0  }|z   }t	        fd	t        dz   |      D              sJ |z  2 t        j                  t        t         j                  |d
       y )N)r   r      r      r   c              3   @   K   | ]  }   d    |   d    k(    yw)r   N r1   istartr_   s     r   r5   z6TestLayout.test_multipartite_layout.<locals>.<genexpr>-  &     StE{1~a3S   r   r   r   r   )r   r[   r\   c              3   @   K   | ]  }   d    |   d    k(    yw)r   Nr   r   s     r   r5   z6TestLayout.test_multipartite_layout.<locals>.<genexpr>6  r   r   r   r   )	r   complete_multipartite_graphrF   r   rZ   r   r    r!   r"   )r$   sizesr%   nendr   r_   s        @@r   test_multipartite_layoutz#TestLayout.test_multipartite_layout#  s   **E2%%a(4yCF""" 	A!)CSU519c=RSSSSQJE	
 %%a|1VT4yCF""" 	A!)CSU519c=RSSSSQJE	
 	j""8"8!5Ir   c                    t         j                  j                  j                  }t        j                  ddg      }dt        j                  ddgddgg      z  } ||t        |dd      \  }}|t        j                  d	d
      k(  sJ |d   t        j                  dd
      k(  sJ |d   t        j                  dd
      k(  sJ y )Ng      @g      @r   皙?g       @333333?r   
meanweightrM   g      ?r   r         re   )r   r   r   _kamada_kawai_costfnrU   rV   r    r   )r$   costfnr   invdistcostgrads         r   test_kamada_kawai_costfn_1dz&TestLayout.test_kamada_kawai_costfn_1d;  s    ""77hhSz"bhhc
S#J788CWB
dv}}&8tDDDDAw&--D9999Aw&--6666r   c           
         t         j                  j                  j                  } ||j	                         t
        |||      \  }}d|z  t
        j                  t
        j                  |d      dz        z  }t        |j                  d         D ]_  }	t        |	dz   |j                  d         D ]>  }
t
        j                  j                  ||	   ||
   z
        }||||	   |
   z  dz
  dz  z  }@ a |t        j                  |d	      k(  sJ d
}t        |j                  d         D ]  }t        |j                  d         D ]  }||j                  d   z  |z   }|j                         }||xx   |z  cc<    ||t
        |||j                  d         d   }||xx   d|z  z  cc<    ||t
        |||j                  d         d   }||   t        j                  ||z
  d|z  z  d	      k(  rJ   y )Nr   re   r   r   r   r         ?r   r   g-C6?gh㈵>)r   r   r   r   ravelrU   sumr   r   r   r   r    r   flatten)r$   r   r   meanwtrM   r   r   r   expected_costr   jdiffdxnddmidxpscpluscminuss                      r   check_kamada_kawai_costfnz$TestLayout.check_kamada_kawai_costfnG  s   ""77CIIKWSQ
dfrvvbffSqf.AQ.F'GGsyy|$ 	CA1q5#))A,/ Cyy~~c!fs1vo6$A"6"<!BBC	C
 v}}]====		!% 	YBCIIaL) 
Y399Q<'",[[]32r2w6syyQR|TUVW31r6!BF		RSUVWXCyFMM56>a"f2MSW$XXXX
Y	Yr   c                    dt         j                  g dg dg dg      z  }d}t         j                  ddgdd	gd
dgg      }| j                  |||d       t         j                  g dg dg dg      }| j                  |||d       y )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*   )rU   rV   r   )r$   r   r   r   s       r   test_kamada_kawai_costfnz#TestLayout.test_kamada_kawai_costfnb  s    bhh/RSS hhdc4[3*=>&&sGVQ? hh(*;=MNO&&sGVQ?r   c                    | j                   }t        j                  t        t	        j
                  |d      j                                     }t        j                  t        t	        j
                  |d      j                                     }t        j                  j                  |d d |dd  z
  d      }t        j                  j                  |d d |dd  z
  d      }t        |      t        |      kD  sJ t        j                  t        t	        j
                  |d      j                                     }t        j                  j                  |d d |dd  z
  d      }t        j                  |dd  |d   d	
      sJ y )Ngffffff?)
resolutiong(\?r   r   Tequidistantg{Gz?atol)r   rU   rV   rW   r   rE   r9   r   r   r   allclose)r$   r%   pos_standardpos_tighter	distancesdistances_tighterpos_equidistantdistances_equidistants           r   test_spiral_layoutz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                 b   t        j                  d      }t        j                  |d      }t        j	                  t        |j                                     }t        j                  j                  |dd  |d d z
  d      }t        j                  t        j                  |      dd	      sJ y )
N
   Tr   r   r   r   r   gMbP?r   )r   r   rE   rU   rV   rW   r9   r   r   r   r   )r$   r%   r   pdists        r   test_spiral_layout_equidistantz)TestLayout.test_spiral_layout_equidistant  s    MM"qd3HHT#**,'(yy~~aeafn1~5{{2774=!${777r   c                     | j                   }t        j                  j                  |      }t        j                  |      }||= t        j
                  ||      }t        |      t        |      k(  sJ y r   )r   r   utilsarbitrary_elementr@   rN   r   r$   r%   r   r   s       r   *test_forceatlas2_layout_partial_input_testz5TestLayout.test_forceatlas2_layout_partial_input_test  s^    GGxx))!,  #I##A3/3x3q6!!!r   c                    t        j                         }t        j                  |d      }t        j                  |      i k(  sJ t        j                  d      }ddd}t        j                  |      }t        j
                  j                  t        |j                          D cg c]  }t        |       c}      dk  sJ t        j                  d      }d	dd
d}t        j                  |      }t        j                  d      t        j                  d      t        j                  d	      d}|j                         D ]  \  }}||   |k(  j                         rJ  t        j                  |d      }t        j                  d      t        j                  d      t        j                  d	      d}|j                         D ]  \  }}||   |k(  j                         rJ  y c c}w )Nr   rd   r   r+   )r   r   r(   gư>r*   r   rw   rq   )r   r   )r[   )r  r   )r   r   r?   rescale_layout_dictrU   r   r   zipr9   r   rV   itemsrZ   )r$   r%   r_   s_vposxexpectationkvs           r   test_rescale_layout_dictz#TestLayout.test_rescale_layout_dict  s   NN&1%%d+r111NN1*-''-yy~~sFMMO/DE!s1vEFMMMNN1f4''- xx!xxxx

  %%' 	*DAq1IN'')))	*''A6xx!xxxx

  %%' 	*DAq1IN'')))	*' Fs   &G*c                     | j                   }t        j                  j                  |      }t        j                  |      }||= t        j
                  ||      }t        |      t        |      k(  sJ y r   )r   r   r	  r
  r@   rP   r   r  s       r   "test_arf_layout_partial_input_testz-TestLayout.test_arf_layout_partial_input_test  s\    GGxx))!,  #ImmA3'3x3q6!!!r   c                 r    | j                   }t        j                  t        t        j
                  |d       y)zl
        Checks input parameters correctly raises errors. For example,  `a` should be larger than 1
        r   )r%   aN)r   r    r!   r"   r   rP   rH   s     r    test_arf_layout_negative_a_checkz+TestLayout.test_arf_layout_negative_a_check  s#     GGj"--1;r   c                     | j                   }t        j                  |d       t        j                  |d       t        j                  |d       t        j
                  |d       y )N*   )seed)r   r   r?   r#   rP   rN   rH   s     r   test_smoke_seed_inputz TestLayout.test_smoke_seed_input  sI    GG
$
$
ab!
ab)r   N)&__name__
__module____qualname__classmethodr   r&   r=   rI   rQ   rS   ra   rl   ro   ru   rx   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r   r   r   r   r      s    , ,37"( "S"A$
@ >##
,7@/	T($O:L8J0
7Y6@
,8"*<"<*r   r   c                  F   t        j                         } | j                  dd       | j                  dd       | j                  dd       | j                  dd       | j                  g d       t        j                  |       }t        |      t        |       k(  sJ y	)
zSee gh-5123.r   s0subsetr   r   s1r*   )r   )r   r*   r)   N)r   r   ri   r6   rF   r   )r%   r   s     r   4test_multipartite_layout_nonnumeric_partition_labelsr*    s    

AJJqJJJqJJJqJJJqJ-.

 
 
#Cs8s1vr   c                     t        j                         } t        t        dd            }|j	                         D ]  \  }}| j                  ||        t        j                  | d      }t         j                  j                  |      }t        j                  | d|      }t        |j	                         |j	                               D ]%  \  \  }}\  }	}
||	k(  r||
k(  j                         r%J  |d   d   |d	   d   k(  sJ |d
   d   |d   d   cxk  r|d   d   cxk  r|d   d   k  sJ  J d| j                  d   d<   t        j                  |       }|j                         |j                         k(  sJ y)zgReturn the layers in sorted order if the layers of the multipartite
    graph are sortable. See gh-5691)r  br3   r   e)r   r*   r   r   r   r'  r   r   )r   
subset_keyr  r   r   r3   r,  r-  layer_0r(  N)r   r   dictr  r  ri   rF   r	  groupsrZ   nodeskeys)r%   
node_groupr   layerr   layerspos_from_layersn1p1n2p2
pos_nosorts               r   $test_multipartite_layout_layer_orderr=    sp    	
Ac3_EFJ!'') 'e	

4
&' 
 
 ,
7CXX__Z(F,,QlvVO!#))+/D/D/FG -R(2rRxR2XNN,,,- s8B<3s8B<'''s8B<#c(2,DS"DCDDDDD 'AGGCL''*J??
***r   c                     t         j                  t        | j                                     dddf   }t         j	                  |d      \  }}|S )zJHelper function to extract the number of nodes in each layer of bfs_layoutNr   T)return_counts)rU   rV   rW   r9   unique)r   r  _layer_counts       r   _num_nodes_per_bfs_layerrC    s@    
cjjl#$QT*AYYqY5NA{r   r   r   r   c                     t        j                  |       }t        j                  |d      }t        j	                  t        |      d| dz
  g      sJ y)zrThe complete graph should result in two layers: the starting node and
    a second layer containing all neighbors.r   r   r   N)r   rh   
bfs_layoutrU   array_equalrC  )r   r%   r   s      r   test_bfs_layout_complete_graphrH    sF     	!A
--
#C>>237!QUDDDr   c                     t        j                  dd      } t        j                  | d      }g d}t        j	                  t        |      |      sJ t        j                  | d      }t        j	                  t        |      |      sJ t        j                  | d      }g d}t        j	                  t        |      |      sJ y )	Nr   r*   r   rE  )r   r   r   r   r   r   r      r}   )r   r   r   r   )r   barbell_graphrF  rU   rG  rC  )r%   r   expected_nodes_per_layers      r   test_bfs_layout_barbellrM    s    
AA
--
#C4>>2379QRRR
--
$C>>2379QRRR
--
#C+>>2379QRRRr   c                      t        j                  d      } | j                  ddg       t        j                  t         j
                  d      5  t        j                  | d       d d d        y # 1 sw Y   y xY w)Nr   )r     )rO  rJ  z#bfs_layout didn't include all nodes)matchr   rE  )r   rh   r6   r    r!   NetworkXErrorrF  )r%   s    r   test_bfs_layout_disconnectedrR    s]    
!Ah)*	r''/T	U "
aq!" " "s   A//A8)__doc__r    networkxr   importorskiprU   r   r*  r=  rC  markparametrizer   rH  rM  rR  r   r   r   <module>rX     s    &  V!   G @* @*F	+6 eAqk*E +ES""r   