+
    �°³j¦K  ã                   óp   € ^ RI Ht ^ RIt^ RIt^ RIHtHtHt  ! R R4      t	R t
R tR t ! R	 R
4      tR# )é    )ÚCounterN)Úcheck_planarity_recursiveÚget_counterexampleÚget_counterexample_recursivec                   ót  a € ] tR t^t o Rt]RR l4       tR tR tR t	R t
R tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t]P<                  P?                  R] PB                  ] PD                  34      R 4       t#]P<                  P?                  R. R O4      R 4       t$Rt%V t&R# )!ÚTestLRPlanarityaH  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                ó  € \         P                  ! V R4      w  r#\        V R4      w  rEVe(   V'       d   RpMRpW8X  g   Q V4       hW8X  g   Q V4       hV'       d   \        W4       \        W4       R# \	        W4       \	        W4       R# )zô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   &&     Úi/home/luca/screen-checking/.venv/lib/python3.14/site-packages/networkx/algorithms/tests/test_planarity.pyÚcheck_graphÚTestLRPlanarity.check_graph   s…   € ô  "×1Ò1°!°TÓ:ÑˆÜ'@ÀÀDÓ'IÑ$ÐàÒ çØG‘àK�ð Ô,Ð1¨cÓ1Ð,ØÔ0Ð5°#Ó5Ð0çä˜AÔ&Ü˜AÖ*ô ! Ô+Ü  Ö/ó    c                ó\   € . ROpV P                  \        P                  ! V4      RR7       R# )é   T©r   N)©r   é   ©r   é   ©r   é   ©r!   é   ©r#   é   )r%   r   ©r   é   )r'   r   ©r   r!   ©r!   r'   ©r'   r%   ©r   r
   ÚGraph©ÚselfÚes   & r   Útest_simple_planar_graphÚ(TestLRPlanarity.test_simple_planar_graph<   s&   € ò
ˆð 	×ÑœŸš !›°ÐÖ5r   c                ó\   € . ROpV P                  \        P                  ! V4      RR7       R# )r   Tr   N))r   r   ©r   r   )r   r   )r!   r!   )r'   r'   r   ©r   r   r&   )r   r'   r(   r    ©r   r'   r)   r+   r-   s   & r   Útest_planar_with_selfloopÚ)TestLRPlanarity.test_planar_with_selfloopL   s&   € ò
ˆð 	×ÑœŸš !›°ÐÖ5r   c                óV   € V P                  \        P                  ! ^^4      RR7       R# )r   Fr   N)r   r
   Úcomplete_bipartite_graph©r.   s   &r   Ú	test_k3_3ÚTestLRPlanarity.test_k3_3^   s"   € Ø×Ñœ×4Ò4°Q¸Ó:ÀeÐÖLr   c                óT   € V P                  \        P                  ! ^4      RR7       R# ©r'   Fr   N)r   r
   Úcomplete_graphr:   s   &r   Útest_k5ÚTestLRPlanarity.test_k5a   s    € Ø×Ñœ×*Ò*¨1Ó-¸ÐÖ?r   c                ó\   € . ROpV P                  \        P                  ! V4      RR7       R# )r   Tr   N)r   r   ©r   r   r)   ©r'   r#   )r#   r!   r+   r-   s   & r   Útest_multiple_components_planarÚ/TestLRPlanarity.test_multiple_components_planard   s"   € Ú<ˆØ×ÑœŸš !›°ÐÖ5r   c                ó~   € \         P                  ! ^4      pVP                  . RO4       V P                  VRR7       R# )r'   Fr   N)r$   ©r%   é   )rI   r#   )r
   r?   Úadd_edges_fromr   ©r.   r   s   & r   Ú#test_multiple_components_non_planarÚ3TestLRPlanarity.test_multiple_components_non_planarh   s6   € Ü×Ò˜aÓ ˆð 	
×ÑÒ1Ô2Ø×Ñ˜ eÐÖ,r   c                óž   € \         P                  ! ^4      p\        ^4       F  pVP                  W"4       K  	  V P	                  VRR7       R# r>   )r
   r?   ÚrangeÚadd_edger   )r.   r   Úis   &  r   Útest_non_planar_with_selfloopÚ-TestLRPlanarity.test_non_planar_with_selfloopo   s?   € Ü×Ò˜aÓ ˆä�q–ˆAØ�J‰J�qÖñ à×Ñ˜ eÐÖ,r   c                ó\   € . ROpV P                  \        P                  ! V4      RR7       R# )r   Fr   N)
r&   )r   r#   ©r   r%   ©r   r#   r   r5   )r   r%   r)   r"   ©r!   r%   r+   r-   s   & r   Útest_non_planar1Ú TestLRPlanarity.test_non_planar1v   s&   € ò
ˆð 	×ÑœŸš !›°ÐÖ6r   c                ó`   € RR.p\         P                  ! V4      pV P                  VRR7       R# )r   Tr   Nr   r3   ©r
   r,   r   ©r.   r/   r   s   &  r   Ú	test_loopÚTestLRPlanarity.test_loop†   s,   € à�VÐˆÜ�HŠH�Q‹KˆØ×Ñ˜ dÐÖ+r   c                ó„   € RR.p\         P                  ! V4      pVP                  ^^4       V P                  VRR7       R# )r   Tr   Nr   r    )r
   r,   Úremove_edger   r\   s   &  r   Ú	test_compÚTestLRPlanarity.test_compŒ   s:   € à�VÐˆÜ�HŠH�Q‹KˆØ	�‰�a˜ÔØ×Ñ˜ dÐÖ+r   c                ó`   € . ROp\         P                  ! V4      pV P                  VRR7       R# )r   Tr   N)r   r4   ©r   r!   r&   rU   )r   rI   )r   é
   ©r   é   r   r(   rV   )r   r%   )r   é	   )r   re   )r   rg   r    r)   r"   rW   r*   r$   rH   )r%   rh   ©r%   re   )rI   re   )rh   re   )re   rg   r[   r\   s   &  r   Útest_goldner_hararyÚ#TestLRPlanarity.test_goldner_harary“   s+   € ò
ˆô: �HŠH�Q‹KˆØ×Ñ˜ dÐÖ+r   c                ó\   € \         P                  ! . RO4      pV P                  VRR7       R# )r   Tr   N)r   r   r   r   r   rC   )r
   Ú
MultiGraphr   rK   s   & r   Útest_planar_multigraphÚ&TestLRPlanarity.test_planar_multigraphµ   s$   € Ü�MŠMÒJÓKˆØ×Ñ˜ dÐÖ+r   c                ó²   € \         P                  ! \         P                  ! ^4      4      pVP                  R.^,          4       V P	                  VRR7       R# )r'   Fr   Nr   )r
   rm   r?   rJ   r   rK   s   & r   Útest_non_planar_multigraphÚ*TestLRPlanarity.test_non_planar_multigraph¹   sB   € Ü�MŠMœ"×+Ò+¨AÓ.Ó/ˆØ	×Ñ˜&˜ A�Ô&Ø×Ñ˜ eÐÖ,r   c                ó\   € \         P                  ! . RO4      pV P                  VRR7       R# )r   Tr   N)r   r   r(   )r!   r   )r!   r   rd   )r   r   )r
   ÚDiGraphr   rK   s   & r   Útest_planar_digraphÚ#TestLRPlanarity.test_planar_digraph¾   s$   € Ü�JŠJÒOÓPˆØ×Ñ˜ dÐÖ+r   c                óÈ   € \         P                  ! \         P                  ! ^4      4      pVP                  ^^4       VP                  ^^4       V P	                  VRR7       R# r>   )r
   rt   r?   r`   r   rK   s   & r   Útest_non_planar_digraphÚ'TestLRPlanarity.test_non_planar_digraphÂ   sJ   € Ü�JŠJ”r×(Ò(¨Ó+Ó,ˆØ	�‰�a˜ÔØ	�‰�a˜ÔØ×Ñ˜ eÐÖ,r   c                óx   € \         P                  ! 4       pVP                  ^4       V P                  VRR7       R# )r   Tr   N)r
   r,   Úadd_noder   rK   s   & r   Útest_single_componentÚ%TestLRPlanarity.test_single_componentÈ   s+   € ä�HŠH‹JˆØ	�
‰
�1ŒØ×Ñ˜ dÐÖ+r   c                ó\   € \         P                  ! . RO4      pV P                  VRR7       R# )r   Tr   N)
)r   re   ©r   é   ©r   r€   )r%   rg   ©r   rI   )rI   r€   ©r   r   ©r   r%   )r   re   rU   r[   rK   s   & r   Útest_graph1ÚTestLRPlanarity.test_graph1Î   s*   € Ü�HŠHòó
ˆð 	×Ñ˜ dÐÖ+r   c                ó\   € \         P                  ! . RO4      pV P                  VRR7       R# )r   Fr   N)r   )r!   r€   )r   r€   r)   ri   rU   ©r   r   rV   rD   )r%   r€   )r!   rI   r‚   )r   rh   r   r$   )r   r#   )r   rI   r[   rK   s   & r   Útest_graph2ÚTestLRPlanarity.test_graph2ß   s*   € Ü�HŠHòó
ˆð* 	×Ñ˜ eÐÖ,r   c                ó\   € \         P                  ! . RO4      pV P                  VRR7       R# )r   Fr   N)r„   )r   rg   r    )rI   rh   )r!   rg   rU   r�   rf   r5   r*   r4   )r   r!   )r'   rg   )r'   r€   r[   rK   s   & r   Útest_graph3ÚTestLRPlanarity.test_graph3÷   s*   € Ü�HŠHòó
ˆð$ 	×Ñ˜ eÐÖ,r   c                óú   € \         P                  ! \        P                  4      ;_uu_ 4        \        P                  ! 4       pVP                  ^4       \        V4       RRR4       R#   + '       g   i     R# ; i©r   N)ÚpytestÚraisesr
   ÚNetworkXExceptionr,   r{   r   rK   s   & r   Útest_counterexample_planarÚ*TestLRPlanarity.test_counterexample_planar  sD   € Ü�]Š]œ2×/Ñ/×0Õ0ä—’“
ˆAØ�J‰J�qŒMÜ˜qÔ!÷	 1×0×0Ò0úó   ­2A)Á)A:	c                óú   € \         P                  ! \        P                  4      ;_uu_ 4        \        P                  ! 4       pVP                  ^4       \        V4       RRR4       R#   + '       g   i     R# ; ir�   )r�   r‘   r
   r’   r,   r{   r   rK   s   & r   Ú$test_counterexample_planar_recursiveÚ4TestLRPlanarity.test_counterexample_planar_recursive  sD   € Ü�]Š]œ2×/Ñ/×0Õ0ä—’“
ˆAØ�J‰J�qŒMÜ(¨Ô+÷	 1×0×0Ò0úr•   c                óz  € Rp\         P                  ! V4      p\         P                  ! V4      w  r4VRJ g   Q hVP                  ^ ^4       V P	                  VRR7       VP                  ^^^4       VP                  ^^^4       V P	                  VRR7       VP                  R4       V P	                  VRR7       R# )r   Tr   N)©r   r   r   r   r    )r!   r   rƒ   rˆ   )rˆ   r4   )r
   r,   r   r`   r   Úadd_half_edge_ccwÚadd_half_edge_cwÚremove_edges_from)r.   Úedgesr   ÚcertÚPs   &    r   Ú'test_edge_removal_from_planar_embeddingÚ7TestLRPlanarity.test_edge_removal_from_planar_embedding  s¬   € àHˆÜ�HŠH�U‹OˆÜ×$Ò$ QÓ'‰ˆØ�t‹|Ðˆ|Ø	�‰�a˜ÔØ×Ñ˜ dÐÔ+Ø	×Ñ˜A˜q !Ô$Ø	×Ñ˜1˜a Ô#Ø×Ñ˜ dÐÔ+Ø	×ÑÐ,Ô-Ø×Ñ˜ dÐÖ+r   Ú
graph_typec                óz  € V! . RO4      p\         P                  ! V4      w  r4V'       g   Q hVP                  4       p\        V\         P                  4      '       g   Q h\
        ;QJ d,    R VP                  RR7       4       F  '       d   K   RM!	  RM! R VP                  RR7       4       4      '       g   Q hR# )r   c              3   ó2   "  € T F  w   rV/ 8H  x € K  	  R # 5i©N© )Ú.0Ú_Úds   &  r   Ú	<genexpr>ÚLTestLRPlanarity.test_graph_planar_embedding_to_undirected.<locals>.<genexpr>/  s   é € Ð>Ñ+=¡  1�A˜–GÓ+=ùs   ‚T©ÚdataFN)rš   rš   r   r   ©r   r   rƒ   )r
   r   Úto_undirectedÚ
isinstancer,   Úallrž   )r.   r£   r   r   r    ÚUs   &&    r   Ú)test_graph_planar_embedding_to_undirectedÚ9TestLRPlanarity.test_graph_planar_embedding_to_undirected(  s‡   € áÒGÓHˆÜ×)Ò)¨!Ó,‰ˆ	ßÐˆyØ�O‰OÓˆÜ˜!œRŸX™X×&Ò&Ð&Ð&ß‹sÑ>¨1¯7©7¸¨7Ô+=Ó>�s�sŠsÑ>¨1¯7©7¸¨7Ô+=Ó>×?Ò?Ð?Ò?r   zreciprocal, as_viewc                ó   € \         P                  ! . RO4      p\         P                  ! V4      w  rEV'       g   Q h\        P                  ! \
        RR7      ;_uu_ 4        VP                  WR7       RRR4       R#   + '       g   i     R# ; i)r   z%is not supported for PlanarEmbedding.©Úmatch)Ú
reciprocalÚas_viewN)rš   r   r   r¯   rƒ   )r
   r,   r   r�   r‘   Ú
ValueErrorr°   )r.   r¹   rº   r   r   r    s   &&&   r   Ú6test_planar_embedding_to_undirected_invalid_parametersÚFTestLRPlanarity.test_planar_embedding_to_undirected_invalid_parameters1  s]   € ô �HŠHÒ=Ó>ˆÜ×)Ò)¨!Ó,‰ˆ	ßÐˆyÜ�]Š]œ:Ð-T×UÖUØ�O‰O zˆOÔC÷ V×U×UÒUús   ÁA<Á<B	r§   r¦   ))TT)TF)FT)'Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ústaticmethodr   r0   r6   r;   r@   rE   rL   rR   rX   r]   ra   rj   rn   rq   ru   rx   r|   r…   r‰   rŒ   r“   r—   r¡   r�   ÚmarkÚparametrizer
   r,   rm   r´   r¼   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @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                ó(  € \        V\        P                  4      '       g   \        P                  ! R4      hVP	                  4        \        V P                  4      \        VP                  4      8X  g   Q R4       h\        4       pV P                   F\  pV^ ,          V^,          8w  g   K  VP                  V^ ,          V^,          34       VP                  V^,          V^ ,          34       K^  	  V\        VP                  4      8X  g   Q R4       hR# )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.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Ò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                óž  € \         P                  ! V4      pV F-  pVP                  W"4      '       g   K  VP                  W"4       K/  	  \	        V4      p\        V4      ^ 8”  d¢   VP                  4       pWA9  d   K(  VP                  V,          pV^8X  g   KD  \        W,          4      p\        V4      p\        V4      pVP                  V4       VP                  V4       VP                  V4       VP                  W'4       K±  \        V4      ^8X  dJ   \         P                  ! \         P                  ! ^4      V4      '       g   \         P                  ! R4      hR# \        V4      ^8X  dK   \         P                  ! \         P                   ! ^^4      V4      '       g   \         P                  ! R4      hR# \         P                  ! R4      h)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
zBad counter example.N)r
   r,   Úhas_edger`   ÚlistÚlenÚpopÚdegreeÚiterÚnextÚappendÚremove_noderP   Úis_isomorphicr?   r’   r9   )r   Ú	sub_graphÚuÚcontractÚcontract_noderØ   Ú	neighborsÚvs   &&      r   r   r   h  sp  € ô —’˜Ó#€Ió ˆØ×Ñ˜a×#Ô#Ø×!Ñ! !Ö'ñ ô
 �I‹€Hô ˆh‹-˜!Ô
Ø Ÿ™›ˆØÔ)áØ×!Ñ! -Õ0ˆà�QŽ;ä˜YÕ5Ó6ˆIÜ�Y“ˆAÜ�Y“ˆAà�O‰O˜AÔØ�O‰O˜AÔà×!Ñ! -Ô0Ø×Ñ˜qÖ$ô ˆ9ƒ~˜ÔÜ×Ò¤× 1Ò 1°!Ó 4°i×@Ò@Ü×&Ò&Ð'=Ó>Ð>ñ Aä	ˆY‹˜1Ô	Ü×Ò¤× ;Ò ;¸A¸qÓ AÀ9×MÒMÜ×&Ò&Ð'=Ó>Ð>ñ Nô ×"Ò"Ð#9Ó:Ð:r   c                 ó<  a € V 3R  lS  4       pR V 4       p\        V4      \        V4      8X  g   Q h\        ;QJ d3    R \        V4      P                  4        4       F  '       d   K   RM(	  RM$! R \        V4      P                  4        4       4      '       g   Q hR# )c              3   óZ   <"  € T F   pSP                  V4       F  q!V3x € K
  	  K"  	  R # 5ir¦   )Úneighbors_cw_order)r¨   rß   rã   rÐ   s   &  €r   r«   Ú._assert_half_edge_partition.<locals>.<genexpr>œ  s*   øé € ð Ù!�1¨9×+GÑ+GÈÖ+J aˆA�Ñ+J‰›	ùs   ƒ(+c              3   ó’   "  € T F=  q'       g   K  \        V^4       F!  w  r#W1V\        V4      ,          ,          3x € K#  	  K?  	  R# 5ir�   )Ú	enumeraterÖ   )r¨   ÚfrQ   rß   s   &   r   r«   rç   Ÿ  s8   é € ð Ù$)˜q«QÔ¼9ÀQÈ¾?±4°1ˆˆa”#�a“&�j�MÕ¹?Ñ£Eùs
   ‚	A�7Ac              3   ó*   "  € T F	  q^8H  x € K  	  R# 5ir�   r§   )r¨   Úcounts   & r   r«   rç   £  s   é € ÐIÑ'H˜e˜ŽzÓ'Hùs   ‚FTN)r   r²   Úvalues)rÐ   ÚfacesÚface_half_edgesÚembedding_half_edgess   f&  r   Ú_assert_half_edge_partitionrñ   ›  s€   ø€ ôÙ!ó€OñÙ$)óÐô �?Ó#¤wÐ/CÓ'DÔDÐDÐDß‹3ÑI¤w¨Ó'?×'FÑ'FÔ'HÓI�3�3Š3ÑI¤w¨Ó'?×'FÑ'FÔ'HÓI×IÒIÐIÒIr   c                   ó–   a € ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
 tR tR tR tR tR tR tR tR t]R 4       tRtV tR# )ÚTestPlanarEmbeddingClassi¦  c           	     ó
  € \         P                  ! 4       pVP                  ^ ^4       \        P                  ! \         P
                  RR7      ;_uu_ 4        VP                  ^ ^^R7       RRR4       \        P                  ! \         P
                  RR7      ;_uu_ 4        VP                  ^ ^^R7       RRR4       \        P                  ! \         P
                  RR7      ;_uu_ 4        VP                  ^ ^^^R7       RRR4       \        P                  ! \         P
                  R	R7      ;_uu_ 4        VP                  ^ ^4       RRR4       VP                  ^ ^^R7       VP                  ^ ^^R7       \        VP                  R
R7      4      ^ ^R^R^/3^ ^R^R^/3^ ^R^R^/3.8X  g   Q hR#   + '       g   i     ELU; i  + '       g   i     EL; i  + '       g   i     Lå; i  + '       g   i     L¯; i)r   z!Invalid clockwise reference node.r·   ©ÚcwNz(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_edgeÚ+TestPlanarEmbeddingClass.test_add_half_edge§  sË  € Ü×&Ò&Ó(ˆ	Ø×Ñ  1Ô%Ü�]Š]Ü× Ñ Ð(K÷
ö 
ð ×#Ñ# A q¨QÐ#Ô/÷
ô �]Š]Ü× Ñ Ð(R÷
ö 
ð ×#Ñ# A q¨aÐ#Ô0÷
ô �]Š]Ü× Ñ Ð(N÷
ö 
ð ×#Ñ# A q¨Q°AÐ#Ô6÷
ô �]Š]Ü× Ñ ð6÷
ö 
ð ×#Ñ# A qÔ)÷
ð 	×Ñ  1¨ÐÔ+Ø×Ñ  1¨!ÐÔ,Ü�i—o‘o¨4�oÓ0Ó1Ø��E˜1˜d AÐ&Ð'Ø��D˜!˜U AÐ&Ð'Ø��D˜!˜U AÐ&Ð'ð6
ô 
ð 	
ò 
÷/
÷ 
ð 
ú÷
÷ 
ð 
ú÷
÷ 
ú÷
÷ 
ús0   ÁF7Â!GÃ,GÄ8G2Æ7G	ÇG	ÇG/	Ç2H	c                óv   € V P                  ^4      pVP                  4       p^ . RO^^ .^^ .^^ ./pW#8X  g   Q hR# )r!   N)r   r   r   )Úget_star_embeddingÚget_data)r.   rÐ   r®   Údata_cmps   &   r   Útest_get_dataÚ&TestPlanarEmbeddingClass.test_get_dataÇ  sH   € Ø×+Ñ+¨AÓ.ˆ	Ø×!Ñ!Ó#ˆØ’y ! a S¨!¨a¨S°!°a°SÐ9ˆØÔÐÒr   c                óž  € \         P                  ! 4       pVP                  ^. RO^. RO^^^.^. RO^. RO^^^.^. RO/4       VP                  R4       VP	                  4        \         P                  ! 4       pVP                  ^^^.^. RO^^^.^. RO^^^.^^^.^. RO/4       \         P
                  P                  W4      '       g   Q hR# )	r   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Ë   Úset_datar�   rÌ   ÚutilsÚgraphs_equal)r.   rÐ   Úembedding_expecteds   &  r   Útest_edge_removalÚ*TestPlanarEmbeddingClass.test_edge_removalÍ  sÝ   € Ü×&Ò&Ó(ˆ	Ø×Ñà’9Ø’<Ø�A�q�6Ø’<Ø’<Ø�A�q�6Ø’9ðô
	
ð 	×#Ñ#Ð$4Ô5Ø×!Ñ!Ô#Ü×/Ò/Ó1ÐØ×#Ñ#à�A�q�6Ø’<Ø�A�q�6Ø’9Ø�A�q�6Ø�A�q�6Ø’9ðô
	
ô �x‰x×$Ñ$ Y×CÒCÐCÒCr   c                óô   € \         P                  ! ^^/ /^^/ //4      p\        P                  ! \         P                  4      ;_uu_ 4        VP                  4        RRR4       R#   + '       g   i     R# ; ir�   ©r
   rË   r�   r‘   r’   rÌ   rû   s   & r   Útest_missing_edge_orientationÚ6TestPlanarEmbeddingClass.test_missing_edge_orientationë  sS   € Ü×&Ò&¨¨A¨r¨7°A¸¸2°wÐ'?Ó@ˆ	Ü�]Š]œ2×/Ñ/×0Õ0à×%Ñ%Ô'÷ 1×0×0Ò0ús   ÁA&Á&A7	c                ó  € \         P                  ! ^^R^R^//^^R^R^//^^/ /^^/ //4      p\        P                  ! \         P                  4      ;_uu_ 4        VP                  4        RRR4       R#   + '       g   i     R# ; i©r   rö   rø   Nr  rû   s   & r   Útest_invalid_edge_orientationÚ6TestPlanarEmbeddingClass.test_invalid_edge_orientationñ  s�   € Ü×&Ò&à�A˜˜a ¨Ð*Ð+Ø�A˜˜a ¨Ð*Ð+Ø�A�r�7Ø�A�r�7ð	ó
ˆ	ô �]Š]œ2×/Ñ/×0Õ0Ø×%Ñ%Ô'÷ 1×0×0Ò0ús   ÁA6Á6B	c                ó  € \         P                  ! 4       pVP                  ^^4       \        P                  ! \         P
                  4      ;_uu_ 4        VP                  4        RRR4       R#   + '       g   i     R# ; ir�   )r
   rË   rù   r�   r‘   r’   rÌ   rû   s   & r   Útest_missing_half_edgeÚ/TestPlanarEmbeddingClass.test_missing_half_edgeý  sP   € Ü×&Ò&Ó(ˆ	Ø×Ñ  1Ô%Ü�]Š]œ2×/Ñ/×0Õ0à×%Ñ%Ô'÷ 1×0×0Ò0ús   ÁA/Á/B 	c                óh  € \         P                  ! 4       p\        ^4       F4  pRp\        ^4       F   pW$8w  g   K  VP                  W$VR7       TpK"  	  K6  	  \        P
                  ! \         P                  4      ;_uu_ 4        VP                  4        RRR4       R#   + '       g   i     R# ; i)r'   Nrõ   )r
   rË   rO   rù   r�   r‘   r’   rÌ   )r.   rÐ   rQ   ÚrefÚjs   &    r   Ú!test_not_fulfilling_euler_formulaÚ:TestPlanarEmbeddingClass.test_not_fulfilling_euler_formula  s€   € Ü×&Ò&Ó(ˆ	Ü�q–ˆAØˆCÜ˜1–X�Ø–6Ø×+Ñ+¨A°SÐ+Ô9Ø’Có ñ ô �]Š]œ2×/Ñ/×0Õ0Ø×%Ñ%Ô'÷ 1×0×0Ò0ús   ÂB Â B1	c                óî   € \         P                  ! 4       p\        P                  ! \         P                  R R7      ;_uu_ 4        VP                  ^^^R7       RRR4       R#   + '       g   i     R# ; i)zInvalid reference node.r·   r÷   N)r
   rË   r�   r‘   r’   rù   rû   s   & r   Útest_missing_referenceÚ/TestPlanarEmbeddingClass.test_missing_reference  sM   € Ü×&Ò&Ó(ˆ	Ü�]Š]œ2×/Ñ/Ð7P×QÖQØ×#Ñ# A q¨aÐ#Ô0÷ R×Q×QÒQús   ÁA#Á#A4	c                óT   € \         P                  ! 4       pVP                  ^^4       R# r�   )r
   rË   Úconnect_componentsrû   s   & r   Útest_connect_componentsÚ0TestPlanarEmbeddingClass.test_connect_components  s    € Ü×&Ò&Ó(ˆ	Ø×$Ñ$ Q¨Ö*r   c                ó²   € \         P                  ! 4       pVP                  ^^4       VP                  ^^4       VP                  ^^4      pV^^.8X  g   Q hR# r�   )r
   rË   rù   Útraverse_face)r.   rÐ   Úfaces   &  r   Útest_successful_face_traversalÚ7TestPlanarEmbeddingClass.test_successful_face_traversal  sR   € Ü×&Ò&Ó(ˆ	Ø×Ñ  1Ô%Ø×Ñ  1Ô%Ø×&Ñ& q¨!Ó,ˆØ˜˜1�vŒ~ÐŠ~r   c           
     ó  € \         P                  ! ^^R^R^//^^R^R^///4      p\        P                  ! \         P                  4      ;_uu_ 4        VP                  ^^4       RRR4       R#   + '       g   i     R# ; ir  )r
   rË   r�   r‘   r’   r#  rû   s   & r   Ú test_unsuccessful_face_traversalÚ9TestPlanarEmbeddingClass.test_unsuccessful_face_traversal  sp   € Ü×&Ò&Ø��T˜1˜e QÐ'Ð(¨!¨a°$¸¸5À!Ð1DÐ-EÐFó
ˆ	ô �]Š]œ2×/Ñ/×0Õ0Ø×#Ñ# A qÔ)÷ 1×0×0Ò0ús   ÁA0Á0B	c                óÎ   € \         P                  ! ^4      p\         P                  ! V4      w  r#\        VP	                  4       4      p\        V4      ^8X  g   Q h\        W44       R# ©r!   N)r
   Úcycle_graphr   rÕ   rî   rÖ   rñ   ©r.   Úgraphr©   rÐ   rî   s   &    r   Ú.test_faces_cycle_graph_and_half_edge_partitionÚGTestPlanarEmbeddingClass.test_faces_cycle_graph_and_half_edge_partition&  sK   € Ü—’˜qÓ!ˆÜ×)Ò)¨%Ó0‰ˆä�Y—_‘_Ó&Ó'ˆä�5‹z˜QŒÐˆÜ# IÖ5r   c                óŽ  € \         P                  ! ^4      p\         P                  ! V4      w  r#\        VP	                  4       4      p\        V4      ^8X  g   Q h\        V^ ,          4      ^VP                  4       ,          8X  g   Q h\        \        V^ ,          4      4      \        V^ ,          4      8  g   Q h\        W44       R# r+  )	r
   Ú
path_graphr   rÕ   rî   rÖ   Únumber_of_edgesrÍ   rñ   r-  s   &    r   Ú;test_faces_tree_has_single_face_walk_with_repeated_verticesÚTTestPlanarEmbeddingClass.test_faces_tree_has_single_face_walk_with_repeated_vertices/  s’   € Ü—’˜aÓ ˆÜ×)Ò)¨%Ó0‰ˆä�Y—_‘_Ó&Ó'ˆä�5‹z˜QŒÐˆÜ�5˜•8‹}  E×$9Ñ$9Ó$;Õ ;Ô;Ð;Ð;Ü”3�u˜Q•x“=Ó!¤C¨¨a­£MÔ1Ð1Ð1Ü# IÖ5r   c                óX  € \         P                  ! ^4      p\         P                  ! V4      w  r#\        VP	                  4       4      p\        V4      VP                  4       VP                  4       ,
          ^,           8X  g   Q h\        R V 4       4      . RO8X  g   Q h\        W44       R# )r!   c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir¦   )rÖ   )r¨   r$  s   & r   r«   ÚMTestPlanarEmbeddingClass.test_faces_k4_match_euler_formula.<locals>.<genexpr>A  s   é € Ð2©E D”c˜$—i�i«Eùs   ‚N)r   r   r   r   )
r
   r?   r   rÕ   rî   rÖ   r3  Únumber_of_nodesrú   rñ   r-  s   &    r   Ú!test_faces_k4_match_euler_formulaÚ:TestPlanarEmbeddingClass.test_faces_k4_match_euler_formula:  s…   € Ü×!Ò! !Ó$ˆÜ×)Ò)¨%Ó0‰ˆä�Y—_‘_Ó&Ó'ˆä�5‹z˜U×2Ñ2Ó4°u×7LÑ7LÓ7NÕNÐQRÕRÔRÐRÐRÜÑ2©EÓ2Ó2²lÔBÐBÐBÜ# IÖ5r   c                ó   € \         P                  ! \         P                  ! ^4      \         P                  ! ^4      4      p\         P                  ! V4      w  r#\	        VP                  4       4      p\        V4      ^8X  g   Q h\        W44       R# )r   N)r
   Údisjoint_unionr,  r   rÕ   rî   rÖ   rñ   r-  s   &    r   ÚHtest_faces_disconnected_components_return_component_local_boundary_walksÚaTestPlanarEmbeddingClass.test_faces_disconnected_components_return_component_local_boundary_walksD  sc   € ô ×!Ò!¤"§.¢.°Ó"3´R·^²^ÀAÓ5FÓGˆÜ×)Ò)¨%Ó0‰ˆä�Y—_‘_Ó&Ó'ˆä�5‹z˜QŒÐˆÜ# IÖ5r   c                ó¦   € \         P                  ! ^4      p\         P                  ! V4      w  r#\        VP	                  4       4      pV. 8X  g   Q hR# )r'   N)r
   Úempty_graphr   rÕ   rî   r-  s   &    r   Ú'test_faces_isolated_nodes_have_no_facesÚ@TestPlanarEmbeddingClass.test_faces_isolated_nodes_have_no_facesO  s?   € Ü—’˜qÓ!ˆÜ×)Ò)¨%Ó0‰ˆä�Y—_‘_Ó&Ó'ˆà˜Œ{ÐŠ{r   c                ó\  € \         P                  ! 4       pVP                  ^*4       VP                  R.4       \        P
                  ! \        4      ;_uu_ 4        VP                  ^^4       RRR4       \        P
                  ! \        4      ;_uu_ 4        VP                  RR.4       RRR4       \        P
                  ! \        4      ;_uu_ 4        VP                  RR.4       RRR4       R#   + '       g   i     LŽ; i  + '       g   i     Lc; i  + '       g   i     R# ; i)é*   N)é   é   rƒ   rd   )r   r   i^  )r   r!   é}   )
r
   rË   r{   Úadd_nodes_fromr�   r‘   ÚNotImplementedErrorrP   rJ   Úadd_weighted_edges_fromrû   s   & r   Útest_forbidden_methodsÚ/TestPlanarEmbeddingClass.test_forbidden_methodsW  sÀ   € Ü×&Ò&Ó(ˆ	Ø×Ñ˜2ÔØ× Ñ  ( Ô,Ü�]Š]Ô.×/Õ/Ø×Ñ˜q !Ô$÷ 0ä�]Š]Ô.×/Õ/Ø×$Ñ$ f¨fÐ%5Ô6÷ 0ä�]Š]Ô.×/Õ/Ø×-Ñ-¨{¸KÐ.HÔI÷ 0Ñ/÷	 0×/úç/×/úç/×/Ð/ús$   ÁC4ÂDÃDÃ4D	ÄD	ÄD+	c                ó¨   € \         P                  ! 4       pR p\        ^V 4       F*  pVP                  ^ W2R7       TpVP                  V^ 4       K,  	  V# )Nrõ   )r
   rË   rO   rù   )ÚnrÐ   r  rQ   s   &   r   rÿ   Ú+TestPlanarEmbeddingClass.get_star_embeddingb  sU   € ä×&Ò&Ó(ˆ	ØˆÜ�q˜!–ˆAØ×#Ñ# A qÐ#Ô1ØˆCØ×#Ñ# A qÖ)ñ ð Ðr   r§   N)r¾   r¿   rÀ   rÁ   rü   r  r	  r  r  r  r  r  r   r%  r(  r/  r4  r:  r>  rB  rL  rÃ   rÿ   rÆ   rÇ   rÈ   s   @r   ró   ró   ¦  sq   ø‡ € ò
ò@ òDò<(ò
(ò(ò	(ò1ò
+òò*ò6ò	6ò6ò	6òò	Jð ñó ör   ró   )Úcollectionsr   r�   Únetworkxr
   Únetworkx.algorithms.planarityr   r   r   r   r   r   rñ   ró   r§   r   r   Ú<module>rT     sE   ðÝ ã ã ÷ñ ÷nDñ nDòb	'òT0;òfJ÷Dó Dr   