
    \Mh\                     R   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
                            d
 edd                    d             Zd Zd Zd Zd Zej
                            dej        ej        ej        ej        ej        ej        ej        ej        ej        g	          d             Zej
                            dddg          ej
                            di ddidgdddig          d                         ZdS )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%d# Z&d$ Z'd%S )&
TestLayoutc                     t          j        dd          | _        t          j                    | _        t          j        | j        d           t          j        dd          | _        d S )N   abcdef   )nxgrid_2d_graphGiGraphGsadd_pathbigG)clss    b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/networkx/drawing/tests/test_layout.pysetup_classzTestLayout.setup_class   sO    !!Q''
CFH%%%#B++    c                    t          j        d          }t          j        t          d          5  t          j        |dg           d d d            n# 1 swxY w Y   dddt          j        t          d          5  t          j        |dd	g
           d d d            n# 1 swxY w Y   t          j        |ddg
          t          fddD                       sJ d S )N   z!nodes are fixed without positionsmatchr   )fixed   r   r   r   r      r   )r   posr   c              3   f   K   | ]+}t                               |         |                   V  ,d S N)nparray_equal).0noutr    s     r   	<genexpr>z;TestLayout.test_spring_fixed_without_pos.<locals>.<genexpr>    s9      BBa2>>#a&#a&11BBBBBBr   )r   
path_graphpytestraises
ValueErrorspring_layoutall)selfGr'   r    s     @@r   test_spring_fixed_without_posz(TestLayout.test_spring_fixed_without_pos   s{   M!]:-PQQQ 	+ 	+Qqc****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ V$$]:-PQQQ 	7 	7Qq!f#6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 qAC888BBBBB6BBBBBBBBBBs#   AAAB''B+.B+c                    dd l t          j                    }|                    g d           ddi}dg}t          j        |||          }t          fd|                                D                       }|r
J d            d S )Nr   )r   r   r   r   )r   r   )r              r7   r    r   c              3   L   K   | ]}|D ]}                     |          V  d S r"   )isnan)r%   coordscmaths      r   r(   z2TestLayout.test_spring_init_pos.<locals>.<genexpr>,   s:      OOOO1djjmmOOOOOOOr   zvalues should not be nan)r=   r   r   add_edges_fromfruchterman_reingold_layoutanyvalues)r/   r0   init_pos	fixed_posr    has_nanr=   s         @r   test_spring_init_poszTestLayout.test_spring_init_pos"   s    HJJ	999:::z?C	,QHINNNOOOO#**,,OOOOO66666666r   c                    g }t          j        |           t          j        |           t          j        |           t          j        |           t          j        |           t          j        |           t          j        |           t          j        ||           t          j	        |           t          j
        |           t          j        |           d S r"   )r   random_layoutcircular_layoutplanar_layoutr-   r?   spectral_layoutshell_layoutbipartite_layoutspiral_layoutmultipartite_layoutkamada_kawai_layoutr/   r0   s     r   test_smoke_empty_graphz!TestLayout.test_smoke_empty_graph/   s    

1


&q)))
1

Aq!!!

q!!!
q!!!!!r   c                 *   | j         }t          j        |           t          j        |           t          j        |           t          j        |           t          j        |           t          j        |           t          j        | j                   t          j	        |           t          j	        |
                                           t          j	        | j                   t          j	        | j        
                                           t          j        |           t          j        |           t          j        |           t          j        |d           t          j        |d           t          j        |           d S Nr   dimr5   )r   r   rG   rH   rI   r-   forceatlas2_layoutr?   r   rJ   to_directedrK   rM   rO   
arf_layoutrP   s     r   test_smoke_intzTestLayout.test_smoke_int=   sR   G

1


a   
&q)))
&ty111
1
1==??+++
49%%%
490022333


q!!!
qa((((
qa((((
ar   c                 $   | 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        |           d S rS   )r   r   rG   rH   rI   r-   rV   r?   rJ   rK   rM   rO   rX   rP   s     r   test_smoke_stringzTestLayout.test_smoke_stringQ   s    G

1


a   
&q)))
1


q!!!
qa((((
qa((((
ar   c                    t                               |          }||z
  }||z   }t                               t          |                                                    }|                    d          |                    d          z
  }|d|z  k                                    sJ ||k                                    sJ ||k                                    sJ d S )Nr   r   )r#   arraylistrA   maxminr.   )r/   r    scalecenterlowhivposlengths           r   check_scale_and_centerz!TestLayout.check_scale_and_centera   s    &!!une^xxSZZ\\**++!txx{{*!e)#((*****  """""
!!!!!!!r   c                    | 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|            |t          j
        |d|          d|           d} |t          j
        |d	d|
          d|           d S )N)r   r   	   rb         ?)g      @g      @ra   rb   r   )r   r5   r   r5   )rU   ra   rb   rg   r   complete_graphadd_noderG   r-   rJ   rH   rK   rM   rO   r/   scr<   r0   s       r   test_scale_and_center_argz$TestLayout.test_scale_and_center_argk   s   (a  	

1
2Aa(((JGGGG
2AQq1111EEEE
2aq3331QGGGG
2aq3331QGGGG
2?1Aa000!DDDD
2AQq1111EEEE
2!!1Q777qKKKK
2!!!A>>>aPQRRRRRRr   c                     t          j        d          }t          j        t           j        t           j        |           d S )Nri   )r   rn   r*   r+   NetworkXExceptionrI   rP   s     r   #test_planar_layout_non_planar_inputz.TestLayout.test_planar_layout_non_planar_input|   s2    a  b*B,<a@@@@@r   c                     t          j                    }|                    ddgddgddgd           t          j        |           d S )Nr   r   r   r   r   r   )r   PlanarEmbeddingset_datarI   )r/   	embeddings     r   (test_smoke_planar_layout_embedding_inputz3TestLayout.test_smoke_planar_layout_embedding_input   sQ    &((	1v1a&aV<<===
#####r   c                 r   | j         }d}t          j        d          }|                    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|           d S )
Nr   ri   rk   rk   rk   rl   r   )r   r   r   r5   rT   rm   rp   s       r   test_default_scale_and_centerz(TestLayout.test_default_scale_and_center   sM   (a  	

1
2Ac*====
2Aa2222
2a  !4444
2a  !4444
2?1Qq1111
2Aa2222
2!!$$Aa888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           d S )Nr   r   rT   r5   )r   r)   r*   r+   r,   rH   rK   rI   rP   s     r   (test_circular_planar_and_shell_dim_errorz3TestLayout.test_circular_planar_and_shell_dim_error   s    M!j""4aQ????j"/1!<<<<j"/1!<<<<j""2A1====j""2A1======r   c                 b   t          j        | j                  }t           j        j                            |          }|j        dk    sJ t           j        j                            |d          }|j        dk    sJ t           j        j                            |          }|j        dk    sJ d S )N   r   r5   rT   r   r5   )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    dg&&j55a88yF""""j55aQ5??yF""""j<<Q??yF""""""r   c                 f   t          j        | j        d          }t           j        j                            |          }|j        dk    sJ t           j        j                            |          }|j        dk    sJ t           j        j                            |d          }|j        dk    sJ d S )Nd)dtyper   r5   rT   r   )r   to_scipy_sparse_arrayr   r   r   r   r   _sparse_spectralr   s      r   test_adjacency_interface_scipyz)TestLayout.test_adjacency_interface_scipy   s    $TWC888j<<Q??yF""""j0033yF""""j<<QA<FFyF""""""r   c                 F   t          j        d          }t          j        |          }|d                                         rJ t          j        d          }t          j        |dgddgdgg          }|d                                         rJ |d                                         sJ t          j                            |d                   dk    sJ t          j        |dgddgdggd          }t          j                            |d                   dk    sJ d S )Nr   r   r   r   r5   )rotate)r   r)   rK   r@   r#   linalgnormr/   r0   re   s      r   test_single_nodeszTestLayout.test_single_nodes   s   M!q!!7;;==   M!qA3A"4557;;==   Aw{{}}y~~d1g&&!++++qA3A"4Q???y~~d1g&&!++++++r   c                 n    t          j        | j                  }t          j        | j        |          }d S Nr    )r   rH   r   rV   r/   r    nposs      r   "test_smoke_initial_pos_forceatlas2z-TestLayout.test_smoke_initial_pos_forceatlas2   s/     ))$TW#666r   c                 n    t          j        | j                  }t          j        | j        |          }d S r   )r   rH   r   r?   r   s      r   +test_smoke_initial_pos_fruchterman_reingoldz6TestLayout.test_smoke_initial_pos_fruchterman_reingold   s/     ))-dg3???r   c                 n    t          j        | j                  }t          j        | j        |          }d S r   )r   rH   r   rX   r   s      r   test_smoke_initial_pos_arfz%TestLayout.test_smoke_initial_pos_arf   s.     ))}TW#...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 ]6}|d         |         t          j        |d         |         d          k    sJ 7d S )Nr   r8   r   Hz>abs)	r   rH   r   r-   tupler   ranger*   approx)r/   r    r   axiss       r   $test_fixed_node_fruchterman_reingoldz/TestLayout.test_fixed_node_fruchterman_reingold   s     ))SAAAS[!!U4<%8%88888 ++	s6(CCC!HH 	T 	TDv;t$d6l46Hd(S(S(SSSSSS	T 	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 d S )Nr   r   rj   r   )r   r)   rG   rH   r   rI   r-   r?   rJ   rK   rM   r   s      r   test_center_parameterz TestLayout.test_center_parameter   s|   M!
6****!!F333T!W~~''''&111T!W~~''''&111T!W~~''''-a???T!W~~''''!!F333T!W~~''''q000T!W~~''''&11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           d S )Nr   )r   r   r   rj   r5   r   )rU   rb   )r   r)   idr-   r?   r*   r+   r,   rG   rH   rI   rJ   rK   rM   rO   rP   s     r   test_center_wrong_dimensionsz'TestLayout.test_center_wrong_dimensions   sY   M!""##r"*H'I'IIIIIj""2AiHHHHj""4a	JJJJj""2AiHHHHj""2AiHHHHj""2A1VLLLLj""4a	JJJJj""4aQvNNNNj"/1YGGGGj""2AiHHHHj""8!INNNNN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 d S )Nr   rj   )r   empty_graphrG   rH   rI   rL   r-   r?   rJ   rK   rM   rN   rO   rV   rX   r   s      r   test_empty_graphzTestLayout.test_empty_graph   s   N&111rzzzz!!F333rzzzz&111rzzzz"1a((rzzzz&111rzzzz-a???rzzzz!!F333rzzzzq000rzzzz&111rzzzz%a777rzzzz%a777rzzzz$Q''rzzzz}Qrzzzzzzr   c                 z   t          j        dd          }t           j                            |          \  }}t          j        ||          }t          |          t          |          k    sJ |t          |          d                  d         }|t          |          d                  d         }|D ]}||         d         |k    sJ |D ]}||         d         |k    sJ t          j        ||dddd          }t          |          t          |          k    sJ |t          |          d                  d         }|t          |          d                  d         }	|D ]}||         d         |k    sJ |D ]}||         d         |	k    sJ t          j        t          t           j        ||d	
           d S )Nr5   r   r   
horizontalr   r   r   r   )alignrb   ra   aspect_ratiofoor   )
r   complete_bipartite_graph	bipartitesetsrL   lenr^   r*   r+   r,   )
r/   r0   topbottomre   top_xbottom_xnodetop_ybottom_ys
             r   test_bipartite_layoutz TestLayout.test_bipartite_layout  s   '1--l''**V"1c**4yyCFF""""T#YYq\"1%VQ(+ 	* 	*D:a=E))))) 	- 	-D:a=H,,,,,"s,vQQ
 
 
 4yyCFF""""T#YYq\"1%VQ(+ 	* 	*D:a=E))))) 	- 	-D:a=H,,,,,j""5q#UKKKKKKr   c                 X   d}t          j        | }t          j        |          t                    t          |          k    sJ d|D ];}|z   }t	          fdt          dz   |          D                       sJ |z  <t          j        |ddd          t                    t          |          k    sJ d|D ];}|z   }t	          fd	t          dz   |          D                       sJ |z  <t          j        t          t           j        |d
           d S )N)r   r      r      r   c              3   T   K   | ]"}         d          |         d          k    V  #dS r   N r%   istartre   s     r   r(   z6TestLayout.test_multipartite_layout.<locals>.<genexpr>5  8      SStE{1~a3SSSSSSr   r   r   r   r   )r   ra   rb   c              3   T   K   | ]"}         d          |         d          k    V  #dS )r   Nr   r   s     r   r(   z6TestLayout.test_multipartite_layout.<locals>.<genexpr>>  r   r   r   r   )	r   complete_multipartite_graphrN   r   r.   r   r*   r+   r,   )r/   sizesr0   r&   endr   re   s        @@r   test_multipartite_layoutz#TestLayout.test_multipartite_layout+  s_   *E2%a((4yyCFF"""" 	 	A!)CSSSSSU519c=R=RSSSSSSSSQJEE%a|1VTTT4yyCFF"""" 	 	A!)CSSSSSU519c=R=RSSSSSSSSQJEEj""8!5IIIIIIr   c                    t           j        j        j        }t                              ddg          }dt                              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 d S )Ng      @g      @r   皙?g       @333333?r   
meanweightrU   g      ?r   r         rk   )r   r   r   _kamada_kawai_costfnr#   r]   r*   r   )r/   costfnr    invdistcostgrads         r   test_kamada_kawai_costfn_1dz&TestLayout.test_kamada_kawai_costfn_1dC  s    "7hhSz""bhhc
S#J7888VCWBBB
dv}&8tDDDDDDDAw&-D9999999Aw&-666666666r   c           
      >   t           j        j        j        } ||                                t
          |||          \  }}d|z  t
                              t
                              |d          dz            z  }t          |j        d                   D ]k}	t          |	dz   |j        d                   D ]J}
t
          j	        
                    ||	         ||
         z
            }||||	         |
         z  dz
  dz  z  }Kl|t          j        |d	          k    sJ d
}t          |j        d                   D ]}t          |j        d                   D ]}||j        d         z  |z   }|                                }||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    sJ Čd S )Nr   rk   r   r   r   r         ?r   r   g-C6?h㈵>)r   r   r   r   ravelr#   sumr   r   r   r   r*   r   flatten)r/   r    r   meanwtrU   r   r   r   expected_costr   jdiffdxnddmidxpscpluscminuss                      r   check_kamada_kawai_costfnz$TestLayout.check_kamada_kawai_costfnO  s;   "7VCIIKKWSQQQ
dfrvvbffSqf.A.AQ.F'G'GGsy|$$ 	C 	CA1q5#)A,// C Cy~~c!fs1vo66$A"6"<!BBC v}]=======	!%% 	Y 	YBCIaL)) 
Y 
Y39Q<'",[[]]32r2w6syQR|TTTUVW31r6!BF	RSUUUVWXCyFM56>a"f2MSW$X$X$XXXXXX
Y	Y 	Yr   c                 B   dt                               g dg dg dg          z  }d}t                               ddgdd	gd
dgg          }|                     |||d           t                               g dg dg dg          }|                     |||d           d S )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?r5   )r#   r]   r   )r/   r   r   r    s       r   test_kamada_kawai_costfnz#TestLayout.test_kamada_kawai_costfnj  s    bhh///RSSS hhdc4[3*=>>&&sGVQ??? hh(((*;*;*;=M=M=MNOO&&sGVQ?????r   c                    | j         }t                              t          t	          j        |d                                                              }t                              t          t	          j        |d                                                              }t          j                            |d d         |dd          z
  d          }t          j                            |d d         |dd          z
  d          }t          |          t          |          k    sJ t                              t          t	          j        |d                                                              }t          j                            |d d         |dd          z
  d          }t          
                    |dd          |d         d	
          sJ d S )Ngffffff?)
resolutiong(\?r   r   T)equidistantg{Gz?atol)r   r#   r]   r^   r   rM   rA   r   r   r   allclose)r/   r0   pos_standardpos_tighter	distancesdistances_tighterpos_equidistantdistances_equidistants           r   test_spiral_layoutzTestLayout.test_spiral_layoutx  s   G xxR%5aD%I%I%I%P%P%R%R S STThhtB$4Q4$H$H$H$O$O$Q$QRRSSINN<#4|ABB7G#GaNPP	INN;ss+;k!""o+MTUNVV9~~$5 6 66666 ((4(8(M(M(M(T(T(V(V#W#WXX "	CRC ?122#66Q !/ !
 !
 {{!!""%'<R'@t  
 
 	
 	
 	
 	
 	
r   c                    t          j        d          }t          j        |dd           t          j        |d          }t                              t          |                                                    }t          j        	                    |dd          |d d         z
  d          }t          
                    t                              |          dd	
          sJ d S )N
   Tr    )r   store_pos_asr   r   r   r   gMbP?r   )r   r)   rM   get_node_attributesr#   r]   r^   rA   r   r   r  r   )r/   r0   r    pdists        r   test_spiral_layout_equidistantz)TestLayout.test_spiral_layout_equidistant  s    M"
5AAAA$Q..HHT#**,,''((y~~aeafn1~55{{2774==!${7777777r   c                     | j         }t          j                            |          }t          j        |          }||= t          j        ||          }t          |          t          |          k    sJ d S r   )r   r   utilsarbitrary_elementrH   rV   r   r/   r0   r   r    s       r   *test_forceatlas2_layout_partial_input_testz5TestLayout.test_forceatlas2_layout_partial_input_test  sm    Gx))!,, ##I#A3///3xx3q66!!!!!!r   c                    t          j                    }t          j        |d          }t          j        |          i k    sJ t          j        d          }ddd}t          j        |          }t          j                            d t          |                                 D                       dk     sJ t          j        d	          }d
ddd}t          j        |          }t          	                    d          t          	                    d          t          	                    d
          d}|
                                D ]%\  }}||         |k                                    sJ &t          j        |d          }t          	                    d          t          	                    d          t          	                    d
          d}|
                                D ]%\  }}||         |k                                    sJ &d S )Nr   rj   r   r6   )r   r   r3   c                 ,    g | ]}t          |          S r   )r   )r%   xs     r   
<listcomp>z7TestLayout.test_rescale_layout_dict.<locals>.<listcomp>  s    EEE!s1vvEEEr   gư>r5   r   r}   rw   )r   r   )ra   )r  r   )r   r   rG   rescale_layout_dictr#   r   r   ziprA   r]   itemsr.   )r/   r0   re   s_vposexpectationkvs          r   test_rescale_layout_dictz#TestLayout.test_rescale_layout_dict  s   N&111%d++r1111N1*--'--y~~EEsFMMOO/DEEEFFMMMMN1f44'-- xx!!xxxx
 

  %%'' 	* 	*DAq1IN''))))))'A666xx!!xxxx
 

  %%'' 	* 	*DAq1IN''))))))	* 	*r   c                     | j         }t          j                            |          }t          j        |          }||= t          j        ||          }t          |          t          |          k    sJ d S r   )r   r   r  r  rH   rX   r   r  s       r   "test_arf_layout_partial_input_testz-TestLayout.test_arf_layout_partial_input_test  sl    Gx))!,, ##ImA3'''3xx3q66!!!!!!r   c                 b    | j         }t          j        t          t          j        |d           dS )zl
        Checks input parameters correctly raises errors. For example,  `a` should be larger than 1
        r   )r0   aN)r   r*   r+   r,   r   rX   rP   s     r    test_arf_layout_negative_a_checkz+TestLayout.test_arf_layout_negative_a_check  s,     Gj"-1;;;;;;r   c                     | j         }t          j        |d           t          j        |d           t          j        |d           t          j        |d           d S )N*   )seed)r   r   rG   r-   rX   rV   rP   s     r   test_smoke_seed_inputz TestLayout.test_smoke_seed_input  sf    G
$$$$
$$$$
ab!!!!
ab))))))r   c                     t          j        d          }d t          d          D             }t          j        ||          }d S )Nr5   c                     i | ]
}||d z
  dgS r   r7   r   r%   r   s     r   
<dictcomp>z2TestLayout.test_node_at_center.<locals>.<dictcomp>  "    666AAs|666r   r   r   r)   r   rV   r/   r0   orig_posnew_poss       r   test_node_at_centerzTestLayout.test_node_at_center  sC    M!66U1XX666'x888r   c                     t          j        d          }d t          d          D             }t          j        ||d          }d S )Nr5   c                     i | ]
}||d z
  dgS r-  r   r.  s     r   r/  z9TestLayout.test_initial_only_some_pos.<locals>.<dictcomp>  r0  r   r   r(  )r    r)  r1  r2  s       r   test_initial_only_some_posz%TestLayout.test_initial_only_some_pos  sE    M!66U1XX666'xbAAAr   N)(__name__
__module____qualname__classmethodr   r1   rE   rQ   rY   r[   rg   rr   ru   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*  r5  r8  r   r   r   r   r      s`       , , [,C C C7 7 7" " "  (   " " "S S S"A A A$ $ $
@ @ @ > > ># # ## # #
, 
, 
,7 7 7@ @ @/ / /	T 	T 	T( ( ($O O O  :L L L8J J J0
7 
7 
7Y Y Y6@ @ @
 
 
,8 8 8" " "* * *<" " "< < <* * *9 9 9B B B B Br   r   c                  ~   t          j                    } |                     dd           |                     dd           |                     dd           |                     dd           |                     g d           t          j        |           }t          |          t          |           k    sJ d	S )
zSee gh-5123.r   s0subsetr   r   s1r5   )r   )r   r5   r4   N)r   r   ro   r>   rN   r   r0   r    s     r   4test_multipartite_layout_nonnumeric_partition_labelsrC    s    


AJJqJJJqJJJqJJJqJ---...

 
#
#Cs88s1vvr   c                     t          j                    } t          t          dd                    }|                                D ]\  }}|                     ||           t          j        | d          }t           j                            |          }t          j        | d|          }t          |                                |                                          D ]+\  \  }}\  }	}
||	k    r||
k    	                                s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n J d| j
        d         d<   t          j        |           }|                                |                                k    sJ dS )zgReturn the layers in sorted order if the layers of the multipartite
    graph are sortable. See gh-5691)r%  br<   r   e)r   r5   r   r   r   r?  r   r   )r   
subset_keyr%  r   r   r<   rE  rF  layer_0r@  N)r   r   dictr  r  ro   rN   r  groupsr.   nodeskeys)r0   
node_groupr   layerr    layerspos_from_layersn1p1n2p2
pos_nosorts               r   $test_multipartite_layout_layer_orderrV    s    	

Ac3_EEFFJ!'')) ' 'e	

4
&&&& 
 ,
7
7
7CX__Z((F,QlvVVVO!#))++/D/D/F/FGG - -R(2rRxxR2XNN,,xxxx s8B<3s8B<''''s8B<#c(2,DDDDS"DDDDCDDDDDD 'AGCL'**J??

******r   c                     t                               t          |                                                     dddf         }t                               |d          \  }}|S )zJHelper function to extract the number of nodes in each layer of bfs_layoutNr   T)return_counts)r#   r]   r^   rA   unique)r    r  _layer_counts       r   _num_nodes_per_bfs_layerr\  	  sO    
cjjll##$$QQQT*AYYqY55NA{r   r&   r   r   c                     t          j        |           }t          j        |dd           t          j        |d          }t                              t          |          d| dz
  g          sJ dS )zrThe complete graph should result in two layers: the starting node and
    a second layer containing all neighbors.r   r    )r   r  r   N)r   rn   
bfs_layoutr  r#   r$   r\  )r&   r0   r    s      r   test_bfs_layout_complete_graphr_    sn     	!AM!151111

 E
*
*C>>2377!QUDDDDDDDr   c                     t          j        dd          } t          j        | d          }g d}t                              t          |          |          sJ t          j        | d          }t                              t          |          |          sJ t          j        | d          }g d}t                              t          |          |          sJ d S )	Nr   r5   r   r   )r   r   r   r   r   r   r      r   )r   r   r   r   )r   barbell_graphr^  r#   r$   r\  )r0   r    expected_nodes_per_layers      r   test_bfs_layout_barbellre    s    
AA
-
#
#
#C444>>23779QRRRRR
-
$
$
$C>>23779QRRRRR
-
#
#
#C+||>>23779QRRRRRRRr   c                      t          j        d          } |                     ddg           t          j        t           j        d          5  t          j        | d           d d d            d S # 1 swxY w Y   d S )Nr   )r
     )rg  rb  z#bfs_layout didn't include all nodesr   r   ra  )r   rn   r>   r*   r+   NetworkXErrorr^  )r0   s    r   test_bfs_layout_disconnectedri  +  s    
!Ah)***	r'/T	U	U	U " "
aq!!!!" " " " " " " " " " " " " " " " " "s   A00A47A4c                      t          j        d          } t          j        t           j        d          5  t          j        |            d d d            n# 1 swxY w Y   t          j        | ddg          }d S )Nr   zGraph is not bipartiter   r   r5   )rK  )r   rn   r*   r+   rh  rL   rB  s     r   >test_bipartite_layout_default_nodes_raises_non_bipartite_inputrk  2  s    
!A	r'/G	H	H	H  
A               
a1v
.
.
.CCCs   AAAc                      t          j        dd          } t          j        |           t           j                            |           D ]-}fd|D             t          fdD                       sJ .d S )Nr5   c                 ,    g | ]}|         d          S )r   r   )r%   r  r    s     r   r  z7test_bipartite_layout_default_nodes.<locals>.<listcomp>?  s!    )))Ac!fQi)))r   c              3   T   K   | ]"}|t          j        d                    k    V  #dS r   )r*   r   )r%   r  xss     r   r(   z6test_bipartite_layout_default_nodes.<locals>.<genexpr>@  s6      991be,,,999999r   )r   r   rL   r   r   r.   )r0   nodesetr    ro  s     @@r   #test_bipartite_layout_default_nodesrq  :  s    
#Aq))A

a
 
 C<$$Q'' : :)))))))9999b999999999: :r   r   c                     t          j        d          }d                    g d          }t          j        t
          |          5   | |d           ddd           dS # 1 swxY w Y   dS )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   rT   N)r   r)   joinr*   r+   r,   )r   r0   valid_err_msgss      r   test_layouts_negative_dimrv  C  s      	aAXX	
 	
 	
 N 
z	8	8	8  qb                 s   A""A&)A&)	num_nodesexpected_method)d   force)i  energyextra_layout_kwargsr   r8   rU   r5   c                 @   t          j        |           }d}t          j        |f||d|}t          j        |fd|d|}t                              t          |                                          t          |                                          d          sJ dS )z;Expect 'force' layout for n < 500 and 'energy' for n >= 500ix	)methodr)  autor   r   N)r   cycle_graphr-   r#   r  r^   rA   )rw  rx  r|  r0   r)  expectedactuals          r   'test_spring_layout_graph_size_heuristicr  _  s     	y!!AD 	! 0C H aQTQQ=PQQF;;tHOO--..V]]__0E0ED;QQQQQQQr   )__doc__r*   networkxr   importorskipr#   r   rC  rV  r\  markparametrizer   r_  re  ri  rk  rq  rG   rH   rK   r-   rO   rJ   rI   rM   rV   rv  r  r   r   r   <module>r     s   & &     V!!  G   TB TB TB TB TB TB TB TBn	 	 	+ + +6   eeAqkk**E E +*ES S S"" " "/ / /: : : 









    $~&G  
Fqc**	
 R R  R R Rr   