Ë
    Ìi�\  ã                   ó–  — 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d„ Zd„ Zej                  j                  dej$                  ej&                  ej(                  ej*                  ej,                  ej.                  ej0                  ej2                  ej4                  g	«      d„ «       Zej                  j                  dddg«      ej                  j                  di ddidgdœddig«      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%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    úc/var/www/html/strategist-ai/venv/lib/python3.12/site-packages/networkx/drawing/tests/test_layout.pyÚsetup_classzTestLayout.setup_class   sI   € ä×!Ñ! ! QÓ'ˆŒÜ—‘“ˆŒÜ
�‰�C—F‘F˜HÔ%Ü×#Ñ# B¨Ó+ˆ�ó    c                 óÂ  ‡‡— t        j                  d«      }t        j                  t        d¬«      5  t        j
                  |dg¬«       d d d «       dddœŠt        j                  t        d¬«      5  t        j
                  |dd	g‰¬
«       d d d «       t        j
                  |ddg‰¬
«      Št        ˆˆfd„dD «       «      sJ ‚y # 1 sw Y   Œ~xY w# 1 sw Y   ŒGxY w)Né   z!nodes are fixed without positions©Úmatchr   )Úfixed©é   r   ©r   r   ©r   é   r   )r   Úposr   c              3   óV   •K  — | ]   }t         j                  ‰|   ‰|   «      –— Œ" y ­w©N)ÚnpÚarray_equal)Ú.0ÚnÚoutr    s     €€r   ú	<genexpr>z;TestLayout.test_spring_fixed_without_pos.<locals>.<genexpr>    s$   øè ø€ ÒB°a”2—>‘> # a¡&¨#¨a©&×1ÑBùs   ƒ&))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‰M˜!Óˆä�]‰]œ:Ð-PÔQñ 	+Ü×Ñ˜Q q cÕ*÷	+ð ˜VÑ$ˆä�]‰]œ:Ð-PÔQñ 	7Ü×Ñ˜Q q¨! f°#Õ6÷	7ô ×Ñ˜q¨¨A¨°CÔ8ˆÜÔB¸6ÔBÔBÐBÑB÷	+ð 	+ú÷
	7ð 	7ús   ³C	Á4CÃ	CÃC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   é   ©ç        r7   ©r    r   c              3   óN   •K  — | ]  }|D ]  }‰j                  |«      –— Œ Œ y ­wr"   )Úisnan)r%   ÚcoordsÚcÚmaths      €r   r(   z2TestLayout.test_spring_init_pos.<locals>.<genexpr>,   s%   øè ø€ ÒO¨ÈÒOÀ1�d—j‘j —mÐO�mÑOùs   ƒ"%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"   sj   ø€ ãä�H‰H‹JˆØ	×ÑÒ9Ô:à�z�?ˆØ�Cˆ	Ü×,Ñ,¨Q°HÀIÔ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-   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ÔÜ
�‰˜ÔÜ
×Ñ˜A˜qÔ!Ü
×Ñ˜ÔÜ
×Ñ˜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   ©Ú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=   s  € Ø�G‰GˆÜ
×Ñ˜ÔÜ
×Ñ˜1ÔÜ
×Ñ˜ÔÜ
×Ñ˜ÔÜ
×Ñ˜aÔ Ü
×&Ñ& qÔ)Ü
×&Ñ& t§y¡yÔ1Ü
×Ñ˜1ÔÜ
×Ñ˜1Ÿ=™=›?Ô+Ü
×Ñ˜4Ÿ9™9Ô%Ü
×Ñ˜4Ÿ9™9×0Ñ0Ó2Ô3Ü
�‰˜ÔÜ
×Ñ˜ÔÜ
×Ñ˜qÔ!Ü
×Ñ˜q aÕ(Ü
×Ñ˜q aÕ(Ü
�‰�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 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‰GˆÜ
×Ñ˜ÔÜ
×Ñ˜1ÔÜ
×Ñ˜ÔÜ
×Ñ˜ÔÜ
×Ñ˜aÔ Ü
×&Ñ& qÔ)Ü
×Ñ˜1ÔÜ
�‰˜ÔÜ
×Ñ˜ÔÜ
×Ñ˜qÔ!Ü
×Ñ˜q aÕ(Ü
×Ñ˜q aÕ(Ü
�‰�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   )r#   ÚarrayÚlistrA   ÚmaxÚminr.   )r/   r    ÚscaleÚcenterÚlowÚhiÚvposÚlengths           r   Úcheck_scale_and_centerz!TestLayout.check_scale_and_centera   sœ   € Ü—‘˜&Ó!ˆØ�u‰nˆØ�e‰^ˆÜ�x‰xœ˜SŸZ™Z›\Ó*Ó+ˆØ—‘˜!“˜tŸx™x¨›{Ñ*ˆØ˜!˜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   é	   ©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×Ñ˜A aÔ(°¸JÕGá
Œ2×Ñ˜A Q¨qÔ1¸À1ÕEÙ
Œ2×Ñ˜a q°Ô3¸1ÀQÕGÙ
Œ2×Ñ˜a q°Ô3¸1ÀQÕGÙ
Œ2�?‰?˜1 A¨aÔ0¸À!ÕDÙ
Œ2×Ñ˜A Q¨qÔ1¸À1ÕEÙ
Œ2×!Ñ! !¨1°QÔ7¸qÈÕKàˆÙ
Œ2×!Ñ! !¨°!¸AÔ>ÀaÐPQÖRr   c                 ó”   — t        j                  d«      }t        j                  t         j                  t         j
                  |«       y )Nri   )r   rn   r*   r+   ÚNetworkXExceptionrI   rP   s     r   Ú#test_planar_layout_non_planar_inputz.TestLayout.test_planar_layout_non_planar_input|   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_datarI   )r/   Ú	embeddings     r   Ú(test_smoke_planar_layout_embedding_inputz3TestLayout.test_smoke_planar_layout_embedding_input€   s?   € Ü×&Ñ&Ó(ˆ	Ø×Ñ  1˜v¨1¨a¨&°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   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…   sê   € Ø×(Ñ(ˆØˆÜ×Ñ˜aÓ ˆØ	�
‰
�1ŒÙ
Œ2×Ñ˜AÓ c°*Õ=Ù
Œ2×Ñ˜AÓ a°Õ2Ù
Œ2×Ñ˜aÓ ¨°!Õ4Ù
Œ2×Ñ˜aÓ ¨°!Õ4Ù
Œ2�?‰?˜1Ó Q¨qÕ1Ù
Œ2×Ñ˜AÓ a°Õ2Ù
Œ2×!Ñ! !Ó$¨A°aÕ8àˆÙ
Œ2×!Ñ! !¨Ô+°1¸QÖ?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   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‰M˜!ÓˆÜ�‰”j¤"×"4Ñ"4°a¸QÕ?Ü�‰”j¤"§/¡/°1¸!Õ<Ü�‰”j¤"§/¡/°1¸!Õ<Ü�‰”j¤"×"2Ñ"2°A¸1Õ=Ü�‰”j¤"×"2Ñ"2°A¸1Ö=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   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Ÿ   € Ü×Ñ˜dŸg™gÓ&ˆÜ�j‰j×Ñ×5Ñ5°aÓ8ˆØ�y‰y˜FÒ"Ð"Ð"Ü�j‰j×Ñ×5Ñ5°a¸QÐ5Ó?ˆØ�y‰y˜FÒ"Ð"Ð"Ü�j‰j×Ñ×<Ñ<¸QÓ?ˆØ�y‰y˜FÒ"Ð"Ñ"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‚   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¡   € Ü×$Ñ$ T§W¡W°CÔ8ˆÜ�j‰j×Ñ×<Ñ<¸QÓ?ˆØ�y‰y˜FÒ"Ð"Ð"Ü�j‰j×Ñ×0Ñ0°Ó3ˆØ�y‰y˜FÒ"Ð"Ð"Ü�j‰j×Ñ×<Ñ<¸QÀAÐ<ÓFˆØ�y‰y˜FÒ"Ð"Ñ"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   r5   )Úrotate)r   r)   rK   r@   r#   ÚlinalgÚnorm©r/   r0   re   s      r   Útest_single_nodeszTestLayout.test_single_nodes¯   sâ   € Ü�M‰M˜!ÓˆÜ�‰˜qÓ!ˆØ˜‘7—;‘;”=Ð Ð Ü�M‰M˜!ÓˆÜ�‰˜q A 3¨¨A¨°°Ð"4Ó5ˆØ˜‘7—;‘;”=Ð Ð Ø�A‰w�{‰{Œ}Ðˆ}Ü�y‰y�~‰~˜d 1™gÓ&¨!Ò+Ð+Ð+Ü�‰˜q A 3¨¨A¨°°Ð"4¸QÔ?ˆÜ�y‰y�~‰~˜d 1™gÓ&¨!Ò+Ð+Ñ+r   c                 ó„   — t        j                  | j                  «      }t        j                  | j                  |¬«      }y ©N©r    )r   rH   r   rV   ©r/   r    Únposs      r   Ú"test_smoke_initial_pos_forceatlas2z-TestLayout.test_smoke_initial_pos_forceatlas2»   s,   € Ü× Ñ  §¡Ó)ˆÜ×$Ñ$ T§W¡W°#Ô6‰r   c                 ó„   — t        j                  | j                  «      }t        j                  | j                  |¬«      }y r›   )r   rH   r   r?   r�   s      r   Ú+test_smoke_initial_pos_fruchterman_reingoldz6TestLayout.test_smoke_initial_pos_fruchterman_reingold¿   s,   € Ü× Ñ  §¡Ó)ˆÜ×-Ñ-¨d¯g©g¸3Ô?‰r   c                 ó„   — t        j                  | j                  «      }t        j                  | j                  |¬«      }y r›   )r   rH   r   rX   r�   s      r   Útest_smoke_initial_pos_arfz%TestLayout.test_smoke_initial_pos_arfÃ   s*   € Ü× Ñ  §¡Ó)ˆÜ�}‰}˜TŸW™W¨#Ô.‰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   r8   r   çH¯¼šò×z>©Ú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ˆÜ�S˜‘[Ó!¤U¨4°©<Ó%8Ò8Ð8Ð8ä× Ñ  §¡Ó+ˆÜ×Ñ §	¡	¨s¸6¸(ÔCˆÜ˜!“Hò 	TˆDØ�v‘;˜tÑ$¬¯©°d¸6±lÀ4Ñ6HÈdÔ(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   rj   r   )r   r)   rG   rH   r¨   rI   r-   r?   rJ   rK   rM   r˜   s      r   Útest_center_parameterz TestLayout.test_center_parameterÒ   s6  € Ü�M‰M˜!ÓˆÜ
×Ñ˜ 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   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ä   s&  € Ü�M‰M˜!ÓˆÜ”"×"Ñ"Ó#¤r¬"×*HÑ*HÓ'IÒIÐIÐIÜ�‰”j¤"×"2Ñ"2°A¸iÕHÜ�‰”j¤"×"4Ñ"4°aÀ	ÕJÜ�‰”j¤"×"2Ñ"2°A¸iÕHÜ�‰”j¤"×"2Ñ"2°A¸iÕHÜ�‰”j¤"×"2Ñ"2°A¸1ÀVÕLÜ�‰”j¤"×"4Ñ"4°aÀ	ÕJÜ�‰”j¤"×"4Ñ"4°a¸QÀvÕNÜ�‰”j¤"§/¡/°1¸YÕGÜ�‰”j¤"×"2Ñ"2°A¸iÕ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   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‰NÓˆÜ×Ñ ¨&Ô1ˆØ�rŠzÐˆzÜ×!Ñ! !¨FÔ3ˆØ�rŠzÐˆzÜ×Ñ ¨&Ô1ˆØ�rŠzÐˆzÜ×"Ñ" 1 aÓ(ˆØ�rŠzÐˆzÜ×Ñ ¨&Ô1ˆØ�rŠzÐˆzÜ×-Ñ-¨a¸Ô?ˆØ�rŠzÐˆzÜ×!Ñ! !¨FÔ3ˆØ�rŠzÐˆzÜ�‰˜q¨Ô0ˆØ�rŠzÐˆzÜ×Ñ ¨&Ô1ˆØ�rŠzÐˆzÜ×%Ñ% a°Ô7ˆØ�rŠzÐˆzÜ×%Ñ% a°Ô7ˆØ�rŠzÐˆzÜ×$Ñ$ QÓ'ˆØ�rŠzÐˆzÜ�}‰}˜QÓˆØ�rŠzÐ‰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 )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‘l×'Ñ'¨Ó*‰ˆˆVä×"Ñ" 1 cÓ*ˆÜ�4‹yœC ›FÒ"Ð"Ð"à”T˜#“Y˜q‘\Ñ" 1Ñ%ˆØœ˜V› Q™Ñ(¨Ñ+ˆØò 	*ˆDØ˜‘:˜a‘= EÓ)Ð)Ð)ð	*àò 	-ˆDØ˜‘:˜a‘= HÓ,Ð,Ð,ð	-ô ×"Ñ"Øˆs˜,¨v¸QÈQô
ˆô �4‹yœC ›FÒ"Ð"Ð"à”T˜#“Y˜q‘\Ñ" 1Ñ%ˆØœ˜V› Q™Ñ(¨Ñ+ˆØò 	*ˆDØ˜‘:˜a‘= EÓ)Ð)Ð)ð	*àò 	-ˆDØ˜‘:˜a‘= HÓ,Ð,Ð,ð	-ô 	�‰”j¤"×"5Ñ"5°q¸#À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© ©r%   ÚiÚstartre   s     €€r   r(   z6TestLayout.test_multipartite_layout.<locals>.<genexpr>5  ó&   øè ø€ ÒS¸�t˜E‘{ 1‘~¨¨a©°©Õ3ÑSùó   ƒr   r¶   r   r·   )r¸   ra   rb   c              3   ó@   •K  — | ]  }‰‰   d    ‰|   d    k(  –— Œ y­w)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Ó(ˆÜ�4‹yœC ›FÒ"Ð"Ð"àˆØò 	ˆAØ˜!‘)ˆCÜÔS¼UÀ5È1Á9ÈcÓ=RÔSÔSÐSÐSØ�Q‰J‰Eð	ô
 ×%Ñ% a¨|À1ÈVÔTˆÜ�4‹yœC ›FÒ"Ð"Ð"àˆØò 	ˆAØ˜!‘)ˆCÜÔS¼UÀ5È1Á9ÈcÓ=RÔSÔSÐSÐSØ�Q‰J‰Eð	ô
 	�‰”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   ©Ú
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Ñ7ˆä�h‰h˜˜S�zÓ"ˆØ”b—h‘h  c 
¨S°#¨JÐ7Ó8Ñ8ˆá˜C¤ W¸ÀÔB‰
ˆˆdà”v—}‘}Ð&8¸tÔDÒDÐDÐDØ�A‰wœ&Ÿ-™-¨°DÔ9Ò9Ð9Ð9Ø�A‰wœ&Ÿ-™-¨°Ô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Û   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Ñ7ˆá˜CŸI™I›K¬¨WÀÈSÔQ‰
ˆˆdà˜f™¤r§v¡v¬b¯f©f°S¸q¨fÓ.AÀQÑ.FÓ'GÑGˆÜ�s—y‘y ‘|Ó$ò 	CˆAÜ˜1˜q™5 #§)¡)¨A¡,Ó/ò C�Ü—y‘y—~‘~ c¨!¡f¨s°1©v¡oÓ6�Ø $¨°©°A©Ñ"6¸Ñ"<ÀÑ!BÑB‘ñCð	Cð
 ”v—}‘} ]¸Ô=Ò=Ð=Ð=àˆÜ˜Ÿ	™	 !™Ó%ò 	YˆBÜ˜CŸI™I a™LÓ)ò 
Y�Ø˜3Ÿ9™9 Q™<Ñ'¨"Ñ,�Ø—[‘[“]�à�3“˜2‘“Ù˜r¤2 w¸6ÀsÇyÁyÐQRÁ|ÔTÐUVÑW�à�3“˜1˜r™6Ñ!“Ù ¤B¨¸FÈÏ	É	ÐRSÉÔUÐVWÑX�à˜C‘y¤F§M¡M°5¸6±>ÀaÈ"ÁfÑ2MÐSWÔ$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!À)iöÿÿÿrÝ   gffffffÀ)g333333"@g333333 Àgš™™™™™ù?r5   )r#   r]   rö   )r/   rà   rë   r    s       r   Útest_kamada_kawai_costfnz#TestLayout.test_kamada_kawai_costfnj  s†   € Ø”b—h‘h¢²Â/ÐRÓSÑSˆØˆô �h‰h˜˜d˜ c¨4 [°3¸°*Ð=Ó>ˆà×&Ñ& s¨G°V¸QÔ?ô �h‰hÒ(Ò*;Ò=MÐNÓOˆà×&Ñ& s¨G°V¸QÕ?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{®Gáz„?©Ú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  sV  € Ø�G‰Gˆô —x‘x¤¤R×%5Ñ%5°aÀDÔ%I×%PÑ%PÓ%RÓ SÓTˆÜ—h‘hœt¤B×$4Ñ$4°QÀ4Ô$H×$OÑ$OÓ$QÓRÓSˆÜ—I‘I—N‘N <°°Ð#4°|ÀAÀBÐ7GÑ#GÈa�NÓPˆ	ÜŸI™IŸN™N¨;°s¸Ð+;¸kÈ!È"¸oÑ+MÐTU˜NÓVÐÜ�9‹~¤Ð$5Ó 6Ò6Ð6Ð6ô Ÿ(™(¤4¬×(8Ñ(8¸ÈÔ(M×(TÑ(TÓ(VÓ#WÓXˆÜ "§	¡	§¡Ø˜C˜RÐ  ?°1°2Ð#6Ñ6¸Qð !/ó !
Ðô �{‰{Ø! ! "Ð%Ð'<¸RÑ'@Àtð ô 
ð 	
ñ 
r   c                 ó�  — t        j                  d«      }t        j                  |d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ÿ   Ústore_pos_asr   rþ   rå   r   gü©ñÒMbP?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‰M˜"ÓˆÜ
×Ñ˜¨¸5ÕAÜ×$Ñ$ Q¨Ó.ˆä�H‰H”T˜#Ÿ*™*›,Ó'Ó(ˆä�y‰y�~‰~˜a  ˜e a¨¨ f™n°1ˆ~Ó5ˆÜ�{‰{œ2Ÿ7™7 4›=¨!°$ˆ{Ô7Ð7Ñ7r   c                 óê   — | j                   }t        j                  j                  |«      }t        j                  |«      }||= t        j
                  ||¬«      }t        |«      t        |«      k(  sJ ‚y 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˜  s^   € à�G‰GˆÜ�x‰x×)Ñ)¨!Ó,ˆÜ× Ñ  Ó#ˆØ�ˆIÜ×#Ñ# A¨3Ô/ˆÜ�3‹xœ3˜q›6Ò!Ð!Ñ!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   rj   r   r6   )ræ   ræ   r3   g�íµ ÷Æ°>r5   r   r}   rw   )rþ   rþ   )ra   )éþÿÿÿr  r·   )r   r³   rG   Úrescale_layout_dictr#   r–   r—   ÚziprA   ré   r]   Úitemsr.   )r/   r0   re   Ús_vposÚxÚexpectationÚkÚvs           r   Útest_rescale_layout_dictz#TestLayout.test_rescale_layout_dict¡  s   € Ü�N‰NÓˆÜ×Ñ ¨&Ô1ˆÜ×%Ñ% dÓ+¨rÒ1Ð1Ð1ä�N‰N˜1ÓˆØ *Ñ-ˆÜ×'Ñ'¨Ó-ˆÜ�y‰y�~‰~¬s°F·M±M³OÐ/DÖE¨!œs 1�vÒEÓFÈÒMÐMÐMä�N‰N˜1ÓˆØ˜f¨Ñ4ˆÜ×'Ñ'¨Ó-ˆô �x‰x˜Ó!Ü�x‰x˜ÓÜ�x‰x˜Óñ
ˆð
  ×%Ñ%Ó'ò 	*‰DˆAˆqØ˜1‘I ‘N×'Ñ'Õ)Ð)Ð)ð	*ä×'Ñ'¨°AÔ6ˆä�x‰x˜Ó!Ü�x‰x˜ÓÜ�x‰x˜Óñ
ˆð
  ×%Ñ%Ó'ò 	*‰DˆAˆqØ˜1‘I ‘N×'Ñ'Õ)Ð)Ð)ñ	*ùò' Fs   Â&G*c                 óê   — | j                   }t        j                  j                  |«      }t        j                  |«      }||= t        j
                  ||¬«      }t        |«      t        |«      k(  sJ ‚y r›   )r   r   r  r  rH   rX   r¿   r  s       r   Ú"test_arf_layout_partial_input_testz-TestLayout.test_arf_layout_partial_input_test¿  s\   € à�G‰GˆÜ�x‰x×)Ñ)¨!Ó,ˆÜ× Ñ  Ó#ˆØ�ˆIÜ�m‰m˜A 3Ô'ˆÜ�3‹xœ3˜q›6Ò!Ð!Ñ!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þ   )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‰GˆÜ�‰”j¤"§-¡-°1¸Ö;r   c                 óÔ   — | j                   }t        j                  |d¬«       t        j                  |d¬«       t        j                  |d¬«       t        j
                  |d¬«       y )Né*   )Úseed)r   r   rG   r-   rX   rV   rP   s     r   Útest_smoke_seed_inputz TestLayout.test_smoke_seed_inputÏ  sI   € Ø�G‰GˆÜ
×Ñ˜ Õ$Ü
×Ñ˜ Õ$Ü
�‰�a˜bÕ!Ü
×Ñ˜a bÖ)r   c                 ó¢   — t        j                  d«      }t        d«      D �ci c]
  }||dz
  dg“Œ }}t        j                  ||¬«      }y c c}w )Nr5   r   r7   rœ   ©r   r)   r©   rV   ©r/   r0   rÏ   Úorig_posÚnew_poss        r   Útest_node_at_centerzTestLayout.test_node_at_centerÖ  sJ   € ä�M‰M˜!ÓˆÜ-2°1«XÖ6¨�A˜˜A™˜s�|‘OÐ6ˆÐ6Ü×'Ñ'¨¨xÔ8‰ùò 7s   £Ac                 ó¤   — t        j                  d«      }t        d«      D �ci c]
  }||dz
  dg“Œ }}t        j                  ||d¬«      }y c c}w )Nr5   r   r   r7   r'  )r    r(  r+  r,  s        r   Útest_initial_only_some_posz%TestLayout.test_initial_only_some_posÜ  sL   € Ü�M‰M˜!ÓˆÜ-2°1«XÖ6¨�A˜˜A™˜s�|‘OÐ6ˆÐ6Ü×'Ñ'¨¨x¸bÔA‰ùò 7s   £A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)  r/  r1  rÍ   r   r   r   r      sÏ   „ Øñ,ó ð,òCò7ò"òò(ò "òSò"Aò$ò
@ò >ò#ò#ò
,ò7ò@ò/ò	Tò(ò$Oòò:Lò8Jò0
7òYò6@ò
ò,8ò"ò*ò<"ò<ò*ò9óBr   r   c                  ó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   Ús1r5   )r   )r   r5   r4   N)r   r   ro   r>   rN   r¿   ©r0   r    s     r   Ú4test_multipartite_layout_nonnumeric_partition_labelsr<  â  s‚   € ä
�‰‹
€AØ‡J�Jˆq˜€JÔØ‡J�Jˆq˜€JÔØ‡J�Jˆq˜€JÔØ‡J�Jˆq˜€JÔØ×ÑÒ-Ô.Ü
×
 Ñ
  Ó
#€CÜˆs‹8”s˜1“vÒÐÑ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$  Úbr<   r�   Úe)r   r5   r   r   r   r8  r¶   r»   )r¸   Ú
subset_keyr$  rþ   r�   r<   r>  r?  Úlayer_0r9  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_orderrO  î  sp  € ô 	�‰‹
€AÜ”cÐ3°_ÓEÓF€JØ!×'Ñ'Ó)ò '‰ˆˆeØ	�
‰
�4 ˆ
Õ&ð'ô ×
 Ñ
  ¨,Ô
7€Cä�X‰X�_‰_˜ZÓ(€FÜ×,Ñ,¨Q°lÈvÔV€OÜ! #§)¡)£+¨×/DÑ/DÓ/FÓGò -Ñ‰ˆˆR‘(�2�rØ�RŠx˜R 2™XŸN™NÕ,Ð,Ð,ð-ð ˆs‰8�B‰<˜3˜s™8 B™<Ò'Ð'Ð'àˆs‰8�B‰<˜#˜c™( 2™,ÔD¨¨S©°"©ÔD¸¸C¹À¹ÒDÐDÑDÐDÐDð '€A‡G�GˆC�L�ÑÜ×'Ñ'¨Ó*€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)r#   r]   r^   rA   Úunique)r    r  Ú_Úlayer_counts       r   Ú_num_nodes_per_bfs_layerrU  	  s@   € ä
�‰”�c—j‘j“lÓ#Ó$¢Q¨ TÑ*€AÜ—Y‘Y˜q°�YÓ5�N€A€{ØÐr   r&   r   rÉ   c                 óÖ   — t        j                  | «      }t        j                  |dd¬«       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Ð   r  r   N)r   rn   Ú
bfs_layoutr  r#   r$   rU  )r&   r0   r    s      r   Útest_bfs_layout_complete_graphrX    sX   € ô 	×Ñ˜!Ó€AÜ‡M�M�!˜1¨5Õ1Ü
×
 Ñ
   EÓ
*€CÜ�>‰>Ô2°3Ó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   r5   r   ©rÐ   )r   r   r   r   r   r   r   é   rƒ   )r   r   r   rÊ   )r   Úbarbell_graphrW  r#   r$   rU  )r0   r    Úexpected_nodes_per_layers      r   Útest_bfs_layout_barbellr^    s¡   € Ü
×Ñ˜˜AÓ€Aä
�-‰-˜ Ô
#€Câ4ÐÜ�>‰>Ô2°3Ó7Ð9QÔRÐRÐRä
�-‰-˜ Ô
$€CÜ�>‰>Ô2°3Ó7Ð9QÔRÐRÐRä
�-‰-˜ Ô
#€Câ+ÐÜ�>‰>Ô2°3Ó7Ð9QÔ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  é   )r`  r[  z#bfs_layout didn't include all nodesr   r   rZ  )r   rn   r>   r*   r+   ÚNetworkXErrorrW  )r0   s    r   Útest_bfs_layout_disconnectedrb  +  s]   € Ü
×Ñ˜!Ó€AØ×Ñ�h Ð)Ô*Ü	�‰”r×'Ñ'Ð/TÔ	Uñ "Ü
�‰�a˜qÕ!÷"÷ "ñ "ús   ÁA/Á/A8c                  óþ   — t        j                  d«      } t        j                  t         j                  d¬«      5  t        j
                  | «       d d d «       t        j
                  | ddg¬«      }y # 1 sw Y   Œ#xY w)Nr   zGraph is not bipartiter   r   r5   )rD  )r   rn   r*   r+   ra  rL   r;  s     r   Ú>test_bipartite_layout_default_nodes_raises_non_bipartite_inputrd  2  sb   € Ü
×Ñ˜!Ó€AÜ	�‰”r×'Ñ'Ð/GÔ	Hñ Ü
×Ñ˜AÔ÷ô ×
Ñ
˜a¨¨1 vÔ
.�C÷ð ús   »A3Á3A<c                  ó  ‡— t        j                  dd«      } t        j                  | «      }t         j                  j	                  | «      D ].  }|D �cg c]
  }||   d   ‘Œ c}Št        ˆfd„‰D «       «      rŒ.J ‚ y c c}w )Nr5   r   c              3   óT   •K  — | ]  }|t        j                  ‰d    «      k(  –— Œ! y­wrÌ   )r*   rª   )r%   r  Úxss     €r   r(   z6test_bipartite_layout_default_nodes.<locals>.<genexpr>@  s#   øè ø€ Ò9°�1œŸ™ b¨¡eÓ,Õ,Ñ9ùs   ƒ%()r   r¼   rL   r½   r¾   r.   )r0   r    Únodesetr  rg  s       @r   Ú#test_bipartite_layout_default_nodesri  :  sr   ø€ Ü
×#Ñ# A qÓ)€AÜ
×
Ñ
˜aÓ
 €Cä—<‘<×$Ñ$ QÓ'ò :ˆØ!(Ö)˜Aˆc�!‰f�Q‹iÒ)ˆÜÓ9°bÔ9Õ9Ð9Ð9ñ:ùÚ)s   ÁA>r‡   c                 óÈ   — t        j                  d«      }dj                  g d¢«      }t        j                  t
        |¬«      5   | |d¬«       ddd«       y# 1 sw Y   yxY w)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_dimrn  C  sT   € ô  	�‰�aÓ€AØ—X‘Xò	
ó€Nô 
�‰”z¨Ô	8ñ Ùˆq�bÕ÷÷ ñ ús   Á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        j	                  t        |j                  «       «      t        |j                  «       «      d¬«      sJ ‚y)z;Expect 'force' layout for n < 500 and 'energy' for n >= 500iÏxÁ	)Úmethodr(  Úautorç   r   N)r   Úcycle_graphr-   r#   r  r^   rA   )ro  rp  rt  r0   r(  ÚexpectedÚactuals          r   Ú'test_spring_layout_graph_size_heuristicr{  _  sŒ   € ô 	�‰�yÓ!€Aà€Dô ×ÑØ	ðØ!¨ñØ0Cñ€Hô ×Ñ˜aÐQ¨°TÑQÐ=PÑQ€FÜ�;‰;”t˜HŸO™OÓ-Ó.´°V·]±]³_Ó0EÈDˆ;ÔQÐQÑQr   )Ú__doc__r*   Únetworkxr   Úimportorskipr#   r   r<  rO  rU  ÚmarkÚparametrizer©   rX  r^  rb  rd  ri  rG   rH   rK   r-   rO   rJ   rI   rM   rV   rn  r{  rÍ   r   r   ú<module>r�     sr  ðÙ &ã ã à€V×Ñ˜Ó!€Ø €× Ñ �GÔ ÷TBñ TBòn	ò+ò6ð ‡�×Ñ˜™e A q›kÓ*ñEó +ðEòSò""ò/ò:ð ‡�×ÑØà
×ÑØ
×ÑØ
�‰Ø
×ÑØ
×ÑØ
×ÑØ
×ÑØ
×ÑØ
×Ñð
óñóðð ‡�×ÑØ$ ~°Ð&Góð ‡�×ÑØà
Ø�F� q cÑ*Ø	�ˆ
ðóñRóóñRr   