Ë
    D^(hƒP  ã                   óä   — 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    ú`/var/www/skyplay_api_hub/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        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   € Ü�M‰M˜!ÓˆÜ�‰”j¤"×"2Ñ"2°A¸a¸SÕAØ˜VÑ$ˆÜ�‰”j¤"×"2Ñ"2°A¸aÀ¸VÈÕMÜ
×Ñ˜ 1 a &¨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¨ÈÒOÀ1�d—j‘j —mÐO�mÑOùs   ƒ"%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   ø€ ãä�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#   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ÔÜ
�‰˜ÔÜ
×Ñ˜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   ©Ú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  € Ø�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 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Á   € Ø�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   )Ú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œ   € Ü—‘˜&Ó!ˆØ�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   é	   ©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×Ñ˜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 )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?   € Ü×&Ñ&Ó(ˆ	Ø×Ñ  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   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Ó 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   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„   € Ü�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   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Ÿ   € Ü×Ñ˜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|   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¡   € Ü×$Ñ$ 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   r*   )Úrotate)r   r   rC   r8   rU   ÚlinalgÚnorm©r$   r%   r_   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   r@   r   rN   ©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   r@   r   r7   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   r@   r   rP   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   r-   r   çH¯¼šò×z>©Ú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˜‘[Ó!¤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   rd   r   )r   r   r?   r@   r¡   rA   r#   r7   rB   rC   rE   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   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&  € Ü�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   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Œ  € Ü�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 )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Ó-ˆÜ—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© ©r1   ÚiÚstartr_   s     €€r   r5   z6TestLayout.test_multipartite_layout.<locals>.<genexpr>-  ó&   øè ø€ ÒS¸�t˜E‘{ 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Ó(ˆÜ�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   ©Ú
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ˆä�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Ô   re   r   ©r¤   r   r   ç      ð?rž   rŸ   g-Cëâ6?gñhãˆµøä>)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ˆá˜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š™™™™™ù?r*   )rU   rV   rî   )r$   rÙ   rã   r   s       r   Útest_kamada_kawai_costfnz#TestLayout.test_kamada_kawai_costfnb  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   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  € Ø�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                 ó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   gü©ñÒMbP?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�   € Ü�M‰M˜"ÓˆÜ×Ñ˜q¨dÔ3ˆä�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_elementr@   rN   r¸   ©r$   r%   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   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   € Ü�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
  r@   rP   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ö   )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#   € ð �G‰GˆÜ�‰”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   € Ø�G‰GˆÜ
×Ñ˜ Õ$Ü
×Ñ˜ Õ$Ü
�‰�a˜bÕ!Ü
×Ñ˜a bÖ)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Ø‡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  Ú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Ó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)rU   rV   rW   r9   Úunique)r   r  Ú_Úlayer_counts       r   Ú_num_nodes_per_bfs_layerrC  õ  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¬«      }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Ü�>‰>Ô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   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ÐÜ�>‰>Ô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  é   )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ñ "Ü
�‰�a˜qÕ!÷"÷ "ñ "ú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ð ‡�×Ñ˜™e A q›kÓ*ñEó +ðEòSó""r   