Ë
    D^(h@  ã                   ó\   — d dl Z d dlZd dlmZmZmZ  G d„ d«      Zd„ Zd„ Z	 G d„ d«      Z
y)	é    N)Úcheck_planarity_recursiveÚget_counterexampleÚget_counterexample_recursivec                   ó¦   — e Zd ZdZed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)ÚTestLRPlanaritya`  Nose Unit tests for the :mod:`networkx.algorithms.planarity` module.

    Tests three things:
    1. Check that the result is correct
        (returns planar if and only if the graph is actually planar)
    2. In case a counter example is returned: Check if it is correct
    3. In case an embedding is returned: Check if its actually an embedding
    Nc                 óü   — t        j                  | d«      \  }}t        | d«      \  }}|�|rd}nd}||k(  sJ |«       ‚||k(  sJ |«       ‚|rt        | |«       t        | |«       yt	        | |«       t	        | |«       y)a,  Raises an exception if the lr_planarity check returns a wrong result

        Parameters
        ----------
        G : NetworkX graph
        is_planar : bool
            The expected result of the planarity check.
            If set to None only counter example or embedding are verified.

        TNz/Wrong planarity check result. Should be planar.z3Wrong planarity check result. Should be non-planar.)ÚnxÚcheck_planarityr   Úcheck_embeddingÚcheck_counterexample)ÚGÚ	is_planarÚis_planar_lrÚresultÚis_planar_lr_recÚ
result_recÚmsgs          úf/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_planarity.pyÚcheck_graphzTestLRPlanarity.check_graph   s–   € ô  "×1Ñ1°!°TÓ:Ñˆ�fÜ'@ÀÀDÓ'IÑ$Ð˜*àÐ áØG‘àK�ð  Ò,Ð1¨cÓ1Ð,ØÐ 0Ò0Ð5°#Ó5Ð0áä˜A˜vÔ&Ü˜A˜zÕ*ô !  FÔ+Ü   JÕ/ó    c                 óX   — g d¢}| j                  t        j                  |«      d¬«       y )N)©é   é   ©r   é   ©r   é   ©r   é   ©r    é   )r"   r   ©r   é   )r$   r   ©r   r   ©r   r$   ©r$   r"   T©r   ©r   r	   ÚGraph©ÚselfÚes     r   Útest_simple_planar_graphz(TestLRPlanarity.test_simple_planar_graph:   s&   € ò
ˆð 	×ÑœŸ™ !›°ÐÕ5r   c                 óX   — g d¢}| j                  t        j                  |«      d¬«       y )N))r   r   ©r   r   )r   r   )r   r   )r$   r$   r   ©r   r   r#   )r   r$   r%   r   ©r   r$   r&   Tr(   r)   r+   s     r   Útest_planar_with_selfloopz)TestLRPlanarity.test_planar_with_selfloopJ   s&   € ò
ˆð 	×ÑœŸ™ !›°ÐÕ5r   c                 óR   — | j                  t        j                  dd«      d¬«       y )Nr   Fr(   )r   r	   Úcomplete_bipartite_graph©r,   s    r   Ú	test_k3_3zTestLRPlanarity.test_k3_3\   s"   € Ø×Ñœ×4Ñ4°Q¸Ó:ÀeÐÕLr   c                 óP   — | j                  t        j                  d«      d¬«       y ©Nr$   Fr(   )r   r	   Úcomplete_graphr6   s    r   Útest_k5zTestLRPlanarity.test_k5_   s    € Ø×Ñœ×*Ñ*¨1Ó-¸ÐÕ?r   c                 óX   — g d¢}| j                  t        j                  |«      d¬«       y )N)r   r   ©r   r   r&   ©r$   r    )r    r   Tr(   r)   r+   s     r   Útest_multiple_components_planarz/TestLRPlanarity.test_multiple_components_planarb   s"   € Ú<ˆØ×ÑœŸ™ !›°ÐÕ5r   c                 óz   — t        j                  d«      }|j                  g d¢«       | j                  |d¬«       y )Nr$   )r!   ©r"   é   )rB   r    Fr(   )r	   r:   Úadd_edges_fromr   ©r,   r   s     r   Ú#test_multiple_components_non_planarz3TestLRPlanarity.test_multiple_components_non_planarf   s6   € Ü×Ñ˜aÓ ˆð 	
×ÑÒ1Ô2Ø×Ñ˜ eÐÕ,r   c                 ó˜   — t        j                  d«      }t        d«      D ]  }|j                  ||«       Œ | j	                  |d¬«       y r9   )r	   r:   ÚrangeÚadd_edger   )r,   r   Úis      r   Útest_non_planar_with_selfloopz-TestLRPlanarity.test_non_planar_with_selfloopm   sF   € Ü×Ñ˜aÓ ˆä�q“ò 	ˆAØ�J‰J�q˜!Õð	à×Ñ˜ eÐÕ,r   c                 óX   — g d¢}| j                  t        j                  |«      d¬«       y )N)
r#   )r   r    ©r   r"   ©r   r    r   r2   )r   r"   r&   r   ©r   r"   Fr(   r)   r+   s     r   Útest_non_planar1z TestLRPlanarity.test_non_planar1t   s&   € ò
ˆð 	×ÑœŸ™ !›°ÐÕ6r   c                 ó\   — ddg}t        j                  |«      }| j                  |d¬«       y )Nr   r0   Tr(   ©r	   r*   r   ©r,   r-   r   s      r   Ú	test_loopzTestLRPlanarity.test_loop„   s,   € à�VÐˆÜ�H‰H�Q‹KˆØ×Ñ˜ dÐÕ+r   c                 ó€   — ddg}t        j                  |«      }|j                  dd«       | j                  |d¬«       y )Nr   r   r   r   Tr(   )r	   r*   Úremove_edger   rR   s      r   Ú	test_compzTestLRPlanarity.test_compŠ   s:   € à�VÐˆÜ�H‰H�Q‹KˆØ	�‰�a˜ÔØ×Ñ˜ dÐÕ+r   c                 ó\   — g d¢}t        j                  |«      }| j                  |d¬«       y )N)r   r1   ©r   r   r#   rL   )r   rB   )r   é
   ©r   é   r   r%   rM   )r   r"   )r   é	   )r   rY   )r   r[   r   r&   r   rN   r'   r!   rA   )r"   r\   ©r"   rY   )rB   rY   )r\   rY   )rY   r[   Tr(   rQ   rR   s      r   Útest_goldner_hararyz#TestLRPlanarity.test_goldner_harary‘   s+   € ò
ˆô: �H‰H�Q‹KˆØ×Ñ˜ dÐÕ+r   c                 óX   — t        j                  g d¢«      }| j                  |d¬«       y )N)r   r   r   r   r   r=   Tr(   )r	   Ú
MultiGraphr   rD   s     r   Útest_planar_multigraphz&TestLRPlanarity.test_planar_multigraph³   s$   € Ü�M‰MÒJÓKˆØ×Ñ˜ dÐÕ+r   c                 ó¤   — t        j                  t        j                  d«      «      }|j                  dgdz  «       | j	                  |d¬«       y )Nr$   r   Fr(   )r	   r`   r:   rC   r   rD   s     r   Útest_non_planar_multigraphz*TestLRPlanarity.test_non_planar_multigraph·   sB   € Ü�M‰Mœ"×+Ñ+¨AÓ.Ó/ˆØ	×Ñ˜&˜ A™Ô&Ø×Ñ˜ eÐÕ,r   c                 óX   — t        j                  g d¢«      }| j                  |d¬«       y )N)r   r   r%   )r   r   )r   r   rX   )r   r   Tr(   )r	   ÚDiGraphr   rD   s     r   Útest_planar_digraphz#TestLRPlanarity.test_planar_digraph¼   s$   € Ü�J‰JÒOÓPˆØ×Ñ˜ dÐÕ+r   c                 óÂ   — t        j                  t        j                  d«      «      }|j                  dd«       |j                  dd«       | j	                  |d¬«       y )Nr$   r   r   r   Fr(   )r	   re   r:   rU   r   rD   s     r   Útest_non_planar_digraphz'TestLRPlanarity.test_non_planar_digraphÀ   sJ   € Ü�J‰J”r×(Ñ(¨Ó+Ó,ˆØ	�‰�a˜ÔØ	�‰�a˜ÔØ×Ñ˜ eÐÕ,r   c                 ót   — t        j                  «       }|j                  d«       | j                  |d¬«       y )Nr   Tr(   )r	   r*   Úadd_noder   rD   s     r   Útest_single_componentz%TestLRPlanarity.test_single_componentÆ   s+   € ä�H‰H‹JˆØ	�
‰
�1ŒØ×Ñ˜ dÐÕ+r   c                 óX   — t        j                  g d¢«      }| j                  |d¬«       y )N)
)r   rY   ©r   é   ©r   rn   )r"   r[   ©r   rB   )rB   rn   ©r   r   ©r   r"   )r   rY   rL   Tr(   rQ   rD   s     r   Útest_graph1zTestLRPlanarity.test_graph1Ì   s*   € Ü�H‰Hòó
ˆð 	×Ñ˜ dÐÕ+r   c                 óX   — t        j                  g d¢«      }| j                  |d¬«       y )N)r   )r   rn   )r   rn   r&   r]   rL   ©r   r   rM   r>   )r"   rn   )r   rB   rp   )r   r\   rm   r!   )r   r    )r   rB   Fr(   rQ   rD   s     r   Útest_graph2zTestLRPlanarity.test_graph2Ý   s*   € Ü�H‰Hòó
ˆð* 	×Ñ˜ eÐÕ,r   c                 óX   — t        j                  g d¢«      }| j                  |d¬«       y )N)rr   )r   r[   r   )rB   r\   )r   r[   rL   ro   rZ   r2   r'   r1   )r   r   )r$   r[   )r$   rn   Fr(   rQ   rD   s     r   Útest_graph3zTestLRPlanarity.test_graph3õ   s*   € Ü�H‰Hòó
ˆð$ 	×Ñ˜ eÐÕ,r   c                 óÔ   — t        j                  t        j                  «      5  t        j                  «       }|j                  d«       t        |«       d d d «       y # 1 sw Y   y xY w©Nr   )ÚpytestÚraisesr	   ÚNetworkXExceptionr*   rj   r   rD   s     r   Útest_counterexample_planarz*TestLRPlanarity.test_counterexample_planar
  sG   € Ü�]‰]œ2×/Ñ/Ó0ñ 	"ä—‘“
ˆAØ�J‰J�qŒMÜ˜qÔ!÷		"÷ 	"ñ 	"úó   ¤1AÁA'c                 óÔ   — t        j                  t        j                  «      5  t        j                  «       }|j                  d«       t        |«       d d d «       y # 1 sw Y   y xY wrz   )r{   r|   r	   r}   r*   rj   r   rD   s     r   Ú$test_counterexample_planar_recursivez4TestLRPlanarity.test_counterexample_planar_recursive  sG   € Ü�]‰]œ2×/Ñ/Ó0ñ 	,ä—‘“
ˆAØ�J‰J�qŒMÜ(¨Ô+÷		,÷ 	,ñ 	,úr   c                 ór  — d}t        j                  |«      }t        j                  |«      \  }}|du sJ ‚|j                  dd«       | j	                  |d¬«       |j                  ddd«       |j                  ddd«       | j	                  |d¬«       |j                  d«       | j	                  |d¬«       y )	N))r   r   r   r   r   )r   r   rq   ru   Tr   r   r(   r   r   )ru   r1   )r	   r*   r
   rU   r   Úadd_half_edge_ccwÚadd_half_edge_cwÚremove_edges_from)r,   Úedgesr   ÚcertÚPs        r   Ú'test_edge_removal_from_planar_embeddingz7TestLRPlanarity.test_edge_removal_from_planar_embedding  s®   € àHˆÜ�H‰H�U‹OˆÜ×$Ñ$ QÓ'‰ˆˆaØ�t‰|Ðˆ|Ø	�‰�a˜ÔØ×Ñ˜ dÐÔ+Ø	×Ñ˜A˜q !Ô$Ø	×Ñ˜1˜a Ô#Ø×Ñ˜ dÐÔ+Ø	×ÑÐ,Ô-Ø×Ñ˜ dÐÕ+r   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   r.   r3   r7   r;   r?   rE   rJ   rO   rS   rV   r^   ra   rc   rf   rh   rk   rs   rv   rx   r~   r�   r‰   © r   r   r   r      s�   „ ñð ò"0ó ð"0òH6ò 6ò$Mò@ò6ò-ò-ò7ò ,ò,ò ,òD,ò-ò
,ò-ò,ò,ò"-ò0-ò*"ò,ó,r   r   c                 óÖ  — t        |t        j                  «      st        j                  d«      ‚|j	                  «        t        | j                  «      t        |j                  «      k(  sJ d«       ‚t        «       }| j                  D ]@  }|d   |d   k7  sŒ|j                  |d   |d   f«       |j                  |d   |d   f«       ŒB |t        |j                  «      k(  sJ d«       ‚y)a;  Raises an exception if the combinatorial embedding is not correct

    Parameters
    ----------
    G : NetworkX graph
    embedding : a dict mapping nodes to a list of edges
        This specifies the ordering of the outgoing edges from a node for
        a combinatorial embedding

    Notes
    -----
    Checks the following things:
        - The type of the embedding is correct
        - The nodes and edges match the original graph
        - Every half edge has its matching opposite half edge
        - No intersections of edges (checked by Euler's formula)
    z-Bad embedding. Not of type nx.PlanarEmbeddingz4Bad embedding. Nodes don't match the original graph.r   r   z4Bad embedding. Edges don't match the original graph.N)	Ú
isinstancer	   ÚPlanarEmbeddingr}   Úcheck_structureÚsetÚnodesr†   Úadd)r   Ú	embeddingÚg_edgesÚedges       r   r   r   '  sî   € ô& �i¤×!3Ñ!3Ô4Ü×"Ñ"Ð#RÓSÐSð ×ÑÔô ˆq�w‰w‹<œ3Ø�‰óò ð >à=ó>ð ô
 ‹e€GØ—‘ò ,ˆØ�‰7�d˜1‘gÓØ�K‰K˜˜a™ $ q¡'Ð*Ô+Ø�K‰K˜˜a™ $ q¡'Ð*Õ+ð,ð ”cØ�‰óò ð >à=ó>ñ r   c                 óX  — t        j                  |«      }|D ]'  }|j                  ||«      sŒ|j                  ||«       Œ) t	        |«      }t        |«      dkD  r¡|j                  «       }||vrŒ#|j                  |   }|dk(  rit        ||   «      }t        |«      }t        |«      }|j                  |«       |j                  |«       |j                  |«       |j                  ||«       t        |«      dkD  rŒ¡t        |«      dk(  r?t        j                  t        j                  d«      |«      st        j                  d«      ‚yt        |«      dk(  r@t        j                  t        j                   dd«      |«      st        j                  d«      ‚yt        j                  d«      ‚)zÉRaises an exception if the counterexample is wrong.

    Parameters
    ----------
    G : NetworkX graph
    subdivision_nodes : set
        A set of nodes inducing a subgraph as a counterexample
    r   r   r$   zBad counter example.r    r   N)r	   r*   Úhas_edgerU   ÚlistÚlenÚpopÚdegreeÚiterÚnextÚappendÚremove_noderH   Úis_isomorphicr:   r}   r5   )r   Ú	sub_graphÚuÚcontractÚcontract_noderŸ   Ú	neighborsÚvs           r   r   r   Q  s„  € ô —‘˜Ó#€Ið ò (ˆØ×Ñ˜a Õ#Ø×!Ñ! ! QÕ'ð(ô
 �I‹€Hô ˆh‹-˜!Ò
Ø Ÿ™›ˆØ 	Ñ)àØ×!Ñ! -Ñ0ˆà�QŠ;ä˜Y }Ñ5Ó6ˆIÜ�Y“ˆAÜ�Y“ˆAà�O‰O˜AÔØ�O‰O˜AÔà×!Ñ! -Ô0Ø×Ñ˜q !Ô$ô# ˆh‹-˜!Ó
ô( ˆ9ƒ~˜ÒÜ×Ñ¤× 1Ñ 1°!Ó 4°iÔ@Ü×&Ñ&Ð'=Ó>Ð>ð Aä	ˆY‹˜1Ò	Ü×Ñ¤× ;Ñ ;¸A¸qÓ AÀ9ÔMÜ×&Ñ&Ð'=Ó>Ð>ð Nô ×"Ñ"Ð#9Ó:Ð:r   c                   ód   — e 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ed„ «       Zy)ÚTestPlanarEmbeddingClassc                 óz  — t        j                  «       }|j                  dd«       t        j                  t         j
                  d¬«      5  |j                  ddd¬«       d d d «       t        j                  t         j
                  d¬«      5  |j                  ddd¬	«       d d d «       t        j                  t         j
                  d
¬«      5  |j                  dddd¬«       d d d «       t        j                  t         j
                  d¬«      5  |j                  dd«       d d d «       |j                  ddd¬«       |j                  ddd¬	«       t        |j                  d¬«      «      dddddœfdddddœfdddddœfgk(  sJ ‚y # 1 sw Y   �Œ-xY w# 1 sw Y   Œ÷xY w# 1 sw Y   ŒÀxY w# 1 sw Y   ŒŒxY w)Nr   r   z!Invalid clockwise reference node.©Úmatchr   r   ©Úcwz(Invalid counterclockwise reference node.©Úccwz$Only one of cw/ccw can be specified.©r±   r³   zNNode already has out-half-edge\(s\), either cw or ccw reference node required.T)Údata)r³   r±   )r	   r’   Úadd_half_edger{   r|   r}   Úsortedr†   ©r,   r—   s     r   Útest_add_half_edgez+TestPlanarEmbeddingClass.test_add_half_edge…  sµ  € Ü×&Ñ&Ó(ˆ	Ø×Ñ  1Ô%Ü�]‰]Ü× Ñ Ð(Kô
ñ 	0ð ×#Ñ# A q¨QÐ#Ô/÷	0ô �]‰]Ü× Ñ Ð(Rô
ñ 	1ð ×#Ñ# A q¨aÐ#Ô0÷	1ô �]‰]Ü× Ñ Ð(Nô
ñ 	7ð ×#Ñ# A q¨Q°AÐ#Ô6÷	7ô �]‰]Ü× Ñ ð6ô
ñ 	*ð ×#Ñ# A qÔ)÷	*ð 	×Ñ  1¨ÐÔ+Ø×Ñ  1¨!ÐÔ,Ü�i—o‘o¨4�oÓ0Ó1Ø�˜1 AÑ&Ð'Ø�˜! AÑ&Ð'Ø�˜! AÑ&Ð'ð6
ò 
ð 	
ñ 
÷/	0ñ 	0ú÷	1ð 	1ú÷	7ð 	7ú÷	*ð 	*ús0   ÁFÂFÃF%ÄF1ÆFÆF"Æ%F.Æ1F:c                 ól   — | j                  d«      }|j                  «       }g d¢dgdgdgdœ}||k(  sJ ‚y )Nr   )r   r   r   r   )r   r   r   r   )Úget_star_embeddingÚget_data)r,   r—   rµ   Údata_cmps       r   Útest_get_dataz&TestPlanarEmbeddingClass.test_get_data¥  sB   € Ø×+Ñ+¨AÓ.ˆ	Ø×!Ñ!Ó#ˆÚ  a S¨a¨S°a°SÑ9ˆØ�xÒÐÑr   c           
      óv  — t        j                  «       }|j                  g d¢g d¢ddgg d¢g d¢ddgg d¢d	œ«       |j                  d
«       |j	                  «        t        j                  «       }|j                  ddgg d¢ddgg d¢ddgddgg d¢d	œ«       t         j
                  j                  ||«      sJ ‚y )N)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    r"   ))r$   r   r#   )r   r    r   )r	   r’   Úset_datar…   r“   ÚutilsÚgraphs_equal)r,   r—   Úembedding_expecteds      r   Útest_edge_removalz*TestPlanarEmbeddingClass.test_edge_removal«  sÁ   € Ü×&Ñ&Ó(ˆ	Ø×ÑâÚØ�q�6ÚÚØ�q�6Úñô
	
ð 	×#Ñ#Ð$4Ô5Ø×!Ñ!Ô#Ü×/Ñ/Ó1ÐØ×#Ñ#à�q�6ÚØ�q�6ÚØ�q�6Ø�q�6Úñô
	
ô �x‰x×$Ñ$ YÐ0BÔCÐCÑCr   c                 óÌ   — t        j                  di idi idœ«      }t        j                  t         j                  «      5  |j                  «        d d d «       y # 1 sw Y   y xY w)Nr   r   r   ©r	   r’   r{   r|   r}   r“   r¸   s     r   Útest_missing_edge_orientationz6TestPlanarEmbeddingClass.test_missing_edge_orientationÉ  sR   € Ü×&Ñ&¨A¨r¨7¸¸2°wÑ'?Ó@ˆ	Ü�]‰]œ2×/Ñ/Ó0ñ 	(à×%Ñ%Ô'÷	(÷ 	(ñ 	(ús   Á AÁA#c                 óä   — t        j                  ddddœiddddœidi idi idœ«      }t        j                  t         j                  «      5  |j                  «        d d d «       y # 1 sw Y   y xY w)Nr   r´   r   r   )r   r   r   r   rÆ   r¸   s     r   Útest_invalid_edge_orientationz6TestPlanarEmbeddingClass.test_invalid_edge_orientationÏ  st   € Ü×&Ñ&à˜a¨Ñ*Ð+Ø˜a¨Ñ*Ð+Ø�r�7Ø�r�7ñ	ó
ˆ	ô �]‰]œ2×/Ñ/Ó0ñ 	(Ø×%Ñ%Ô'÷	(÷ 	(ñ 	(ús   ÁA&Á&A/c                 óà   — t        j                  «       }|j                  dd«       t        j                  t         j
                  «      5  |j                  «        d d d «       y # 1 sw Y   y xY w©Nr   r   )r	   r’   r¶   r{   r|   r}   r“   r¸   s     r   Útest_missing_half_edgez/TestPlanarEmbeddingClass.test_missing_half_edgeÛ  sS   € Ü×&Ñ&Ó(ˆ	Ø×Ñ  1Ô%Ü�]‰]œ2×/Ñ/Ó0ñ 	(à×%Ñ%Ô'÷	(÷ 	(ñ 	(ús   Á
A$Á$A-c                 ó8  — t        j                  «       }t        d«      D ]0  }d }t        d«      D ]  }||k7  sŒ	|j                  |||¬«       |}Œ  Œ2 t	        j
                  t         j                  «      5  |j                  «        d d d «       y # 1 sw Y   y xY w)Nr$   r°   )r	   r’   rG   r¶   r{   r|   r}   r“   )r,   r—   rI   ÚrefÚjs        r   Ú!test_not_fulfilling_euler_formulaz:TestPlanarEmbeddingClass.test_not_fulfilling_euler_formulaâ  s‘   € Ü×&Ñ&Ó(ˆ	Ü�q“ò 	ˆAØˆCÜ˜1“Xò �Ø˜“6Ø×+Ñ+¨A¨q°SÐ+Ô9Ø‘Cñð	ô �]‰]œ2×/Ñ/Ó0ñ 	(Ø×%Ñ%Ô'÷	(÷ 	(ñ 	(ús   Á6BÂBc                 óÈ   — t        j                  «       }t        j                  t         j                  d¬«      5  |j                  ddd¬«       d d d «       y # 1 sw Y   y xY w)NzInvalid reference node.r®   r   r   r   r²   )r	   r’   r{   r|   r}   r¶   r¸   s     r   Útest_missing_referencez/TestPlanarEmbeddingClass.test_missing_referenceí  sO   € Ü×&Ñ&Ó(ˆ	Ü�]‰]œ2×/Ñ/Ð7PÔQñ 	1Ø×#Ñ# A q¨aÐ#Ô0÷	1÷ 	1ñ 	1ús   ºAÁA!c                 óP   — t        j                  «       }|j                  dd«       y rË   )r	   r’   Úconnect_componentsr¸   s     r   Útest_connect_componentsz0TestPlanarEmbeddingClass.test_connect_componentsò  s    € Ü×&Ñ&Ó(ˆ	Ø×$Ñ$ Q¨Õ*r   c                 óª   — t        j                  «       }|j                  dd«       |j                  dd«       |j                  dd«      }|ddgk(  sJ ‚y rË   )r	   r’   r¶   Útraverse_face)r,   r—   Úfaces      r   Útest_successful_face_traversalz7TestPlanarEmbeddingClass.test_successful_face_traversalö  sR   € Ü×&Ñ&Ó(ˆ	Ø×Ñ  1Ô%Ø×Ñ  1Ô%Ø×&Ñ& q¨!Ó,ˆØ˜˜1�vŠ~Ð‰~r   c                 óÜ   — t        j                  ddddœiddddœidœ«      }t        j                  t         j                  «      5  |j                  dd«       d d d «       y # 1 sw Y   y xY w)Nr   r   r´   r   r   )r	   r’   r{   r|   r}   r×   r¸   s     r   Ú test_unsuccessful_face_traversalz9TestPlanarEmbeddingClass.test_unsuccessful_face_traversalý  sg   € Ü×&Ñ&Ø˜1 QÑ'Ð(¨a¸À!Ñ1DÐ-EÑFó
ˆ	ô �]‰]œ2×/Ñ/Ó0ñ 	*Ø×#Ñ# A qÔ)÷	*÷ 	*ñ 	*ús   ÁA"Á"A+c                 óö  — t        j                  «       }|j                  d«       |j                  dg«       t	        j
                  t        «      5  |j                  dd«       d d d «       t	        j
                  t        «      5  |j                  ddg«       d d d «       t	        j
                  t        «      5  |j                  ddg«       d d d «       y # 1 sw Y   ŒtxY w# 1 sw Y   ŒKxY w# 1 sw Y   y xY w)	Né*   )é   é   r   r   rq   rX   )r   r   i^  )r   r   é}   )
r	   r’   rj   Úadd_nodes_fromr{   r|   ÚNotImplementedErrorrH   rC   Úadd_weighted_edges_fromr¸   s     r   Útest_forbidden_methodsz/TestPlanarEmbeddingClass.test_forbidden_methods  sÔ   € Ü×&Ñ&Ó(ˆ	Ø×Ñ˜2ÔØ× Ñ  ( Ô,Ü�]‰]Ô.Ó/ñ 	%Ø×Ñ˜q !Ô$÷	%ä�]‰]Ô.Ó/ñ 	7Ø×$Ñ$ f¨fÐ%5Ô6÷	7ä�]‰]Ô.Ó/ñ 	JØ×-Ñ-¨{¸KÐ.HÔI÷	Jð 	J÷		%ð 	%ú÷	7ð 	7ú÷	Jð 	Jús$   ÁCÂC#Â:C/ÃC Ã#C,Ã/C8c                 ó¤   — t        j                  «       }d }t        d| «      D ]*  }|j                  d||¬«       |}|j                  |d«       Œ, |S )Nr   r   r°   )r	   r’   rG   r¶   )Únr—   rÎ   rI   s       r   r»   z+TestPlanarEmbeddingClass.get_star_embedding  s\   € ä×&Ñ&Ó(ˆ	ØˆÜ�q˜!“ò 	*ˆAØ×#Ñ# A q¨SÐ#Ô1ØˆCØ×#Ñ# A qÕ)ð	*ð Ðr   N)rŠ   r‹   rŒ   r¹   r¾   rÄ   rÇ   rÉ   rÌ   rÐ   rÒ   rÕ   rÙ   rÛ   rä   rŽ   r»   r�   r   r   r¬   r¬   „  sU   „ ò
ò@ òDò<(ò
(ò(ò	(ò1ò
+òò*ò	Jð ñó ñr   r¬   )r{   Únetworkxr	   Únetworkx.algorithms.planarityr   r   r   r   r   r   r¬   r�   r   r   ú<module>ré      s:   ðÛ ã ÷ñ ÷Y,ñ Y,òx'>òT0;÷fSò Sr   