Ë
    ©Ó^j C  ã                   ó\   — 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ej:                  j=                  dej@                  ejB                  f«      d„ «       Z"ej:                  j=                  dg d¢«      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          ús/var/www/ramen.bs-engineer-server.com/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   Ú
graph_typec                 óð   —  |g d¢«      }t        j                  |«      \  }}|sJ ‚|j                  «       }t        |t         j                  «      sJ ‚t        d„ |j                  d¬«      D «       «      sJ ‚y )N)rƒ   rƒ   r   r   ©r   r   rq   c              3   ó.   K  — | ]  \  }}}|i k(  –— Œ y ­w©N© )Ú.0Ú_Úds      r   ú	<genexpr>zLTestLRPlanarity.test_graph_planar_embedding_to_undirected.<locals>.<genexpr>-  s   è ø€ Ò>¡  1 a�A˜•GÑ>ùs   ‚T©Údata)r	   r
   Úto_undirectedÚ
isinstancer*   Úallr‡   )r,   r‹   r   r   r‰   ÚUs         r   Ú)test_graph_planar_embedding_to_undirectedz9TestLRPlanarity.test_graph_planar_embedding_to_undirected&  sh   € áÒGÓHˆÜ×)Ñ)¨!Ó,‰ˆ	�1ÙÐˆyØ�O‰OÓˆÜ˜!œRŸX™XÔ&Ð&Ð&ÜÑ>¨1¯7©7¸¨7Ó+=Ô>Ô?Ð?Ñ?r   zreciprocal, as_view))TT)TF)FTc                 óð   — t        j                  g d¢«      }t        j                  |«      \  }}|sJ ‚t        j                  t
        d¬«      5  |j                  ||¬«       d d d «       y # 1 sw Y   y xY w)N)rƒ   r   r   r�   rq   z%is not supported for PlanarEmbedding.©Úmatch)Ú
reciprocalÚas_view)r	   r*   r
   r{   r|   Ú
ValueErrorr—   )r,   rŸ   r    r   r   r‰   s         r   Ú6test_planar_embedding_to_undirected_invalid_parameterszFTestLRPlanarity.test_planar_embedding_to_undirected_invalid_parameters/  sg   € ô �H‰HÒ=Ó>ˆÜ×)Ñ)¨!Ó,‰ˆ	�1ÙÐˆyÜ�]‰]œ:Ð-TÔUñ 	DØ�O‰O z¸7ˆOÔC÷	D÷ 	Dñ 	Dús   ÁA,Á,A5r�   )$Ú__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{   ÚmarkÚparametrizer	   r*   r`   r›   r¢   r�   r   r   r   r      sí   „ ñð ò"0ó ð"0òH6ò 6ò$Mò@ò6ò-ò-ò7ò ,ò,ò ,òD,ò-ò
,ò-ò,ò,ò"-ò0-ò*"ò,ò,ð ‡[�[×Ñ˜\¨B¯H©H°b·m±mÐ+DÓEñ@ó Fð@ð ‡[�[×ÑØÒKóñDóñD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)	r˜   r	   Ú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˜yŸ™Ó/Ò/ð Ø>óÐ/ô
 ‹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   f  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.r�   r   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.Tr•   )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<   ðÛ ã ÷ñ ÷nDñ nDòb	'òT0;÷fSò Sr   