Ë
    D^(hS  ã                   ód   — d Z ddlmZ ddlZddlZddlmZ ddlm	Z	  G d„ d«      Z
 G d„ d	«      Zy)
z>Unit tests for the :mod:`networkx.algorithms.boundary` module.é    )ÚcombinationsN)Úconvert_node_labels_to_integers)Úedges_equalc                   ó:   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚTestNodeBoundaryz<Unit tests for the :func:`~networkx.node_boundary` function.c                 ó¤  — t        j                  «       }t        j                  |g «      t        «       k(  sJ ‚t        j                  |g g «      t        «       k(  sJ ‚t        j                  |g d¢«      t        «       k(  sJ ‚t        j                  |g d¢g d¢«      t        «       k(  sJ ‚t        j                  |g d¢g d¢«      t        «       k(  sJ ‚y)z4Tests that the null graph has empty node boundaries.©é   é   é   ©é   é   é   ©r   r   r   N)ÚnxÚ
null_graphÚnode_boundaryÚset©ÚselfÚnulls     úe/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_boundary.pyÚtest_null_graphz TestNodeBoundary.test_null_graph   s¤   € ä�}‰}‹ˆÜ×Ñ  bÓ)¬S«UÒ2Ð2Ð2Ü×Ñ  b¨"Ó-´³Ò6Ð6Ð6Ü×Ñ ¢iÓ0´C³EÒ9Ð9Ð9Ü×Ñ ¢i²Ó;¼s»uÒDÐDÐDÜ×Ñ ¢i²Ó;¼s»uÒDÐDÑDó    c                 ó  — t        t        j                  d«      d¬«      }t        j                  |g «      t	        «       k(  sJ ‚t        j                  |g g «      t	        «       k(  sJ ‚t        j                  |g d¢«      dhk(  sJ ‚t        j                  |g d¢«      ddhk(  sJ ‚t        j                  |g d	¢«      d
dhk(  sJ ‚t        j                  |g d¢«      dhk(  sJ ‚t        j                  |g d¢ddg«      t	        «       k(  sJ ‚y )Né
   r
   ©Úfirst_labelr	   r   r   r   é   ©r   r   r   r   r    r   é   ©r"   é	   r   r$   )Úcnltir   Ú
path_graphr   r   ©r   ÚP10s     r   Útest_path_graphz TestNodeBoundary.test_path_graph   sî   € Ü”B—M‘M "Ó%°1Ô5ˆÜ×Ñ  RÓ(¬C«EÒ1Ð1Ð1Ü×Ñ  R¨Ó,´³Ò5Ð5Ð5Ü×Ñ ¢YÓ/°A°3Ò6Ð6Ð6Ü×Ñ ¢YÓ/°A°q°6Ò9Ð9Ð9Ü×Ñ ¢_Ó5¸!¸Q¸Ò?Ð?Ð?Ü×Ñ ¢ZÓ0°Q°CÒ7Ð7Ð7Ü×Ñ ¢Y°°B°Ó8¼C»EÒAÐAÑAr   c                 ób  — t        t        j                  d«      d¬«      }t        j                  |g «      t	        «       k(  sJ ‚t        j                  |g g «      t	        «       k(  sJ ‚t        j                  |g d¢«      h d£k(  sJ ‚t        j                  |g d¢«      h d£k(  sJ ‚t        j                  |g d¢«      h d	£k(  sJ ‚t        j                  |g d¢g «      t	        «       k(  sJ ‚t        j                  ||«      t	        «       k(  sJ ‚t        j                  |g d¢g d
¢«      ddhk(  sJ ‚y )Nr   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   Úcomplete_graphr   r   )r   ÚK10s     r   Útest_complete_graphz$TestNodeBoundary.test_complete_graph"   s  € Ü”B×%Ñ% bÓ)°qÔ9ˆÜ×Ñ  RÓ(¬C«EÒ1Ð1Ð1Ü×Ñ  R¨Ó,´³Ò5Ð5Ð5Ü×Ñ ¢YÓ/Ò3IÒIÐIÐIÜ×Ñ ¢YÓ/Ò3IÒIÐIÐIÜ×Ñ ¢_Ó5Ò9IÒIÐIÐIÜ×Ñ ¢Y°Ó3´s³uÒ<Ð<Ð<Ü×Ñ  SÓ)¬S«UÒ2Ð2Ð2Ü×Ñ ¢Y²	Ó:¸qÀ!¸fÒDÐDÑDr   c                 ó�  — d„ }t        j                  «       } ||d«      t        j                  dd¬«      k(  sJ ‚ ||d«      t        j                  dd¬«      k(  sJ ‚ ||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)zqCheck boundaries in the petersen graph

        cheeger(G,k)=min(|bdy(S)|/|S| for |S|=k, 0<k<=|V(G)|/2)

        c                 óD   ‡ ‡— t        ˆ ˆfd„t        ‰ ‰«      D «       «      S )Nc              3   ób   •K  — | ]&  }t        t        j                  ‰|«      «      ‰z  –— Œ( y ­w)N)Úlenr   r   )Ú.0ÚnnÚGÚks     €€r   ú	<genexpr>zBTestNodeBoundary.test_petersen.<locals>.cheeger.<locals>.<genexpr>5   s(   øè ø€ ÒU¸B”sœ2×+Ñ+¨A¨rÓ2Ó3°aÕ7ÑUùs   ƒ,/)Úminr   )r4   r5   s   ``r   Úcheegerz/TestNodeBoundary.test_petersen.<locals>.cheeger4   s   ù€ ÜÔUÄ,ÈqÐRSÓBTÔUÓUÐUr   r
   g      @g{®Gáz„?)Úabsr   g       @r   g¸…ëQ¸ú?r   g      ð?r   gš™™™™™é?N)r   Úpetersen_graphÚpytestÚapprox)r   r8   ÚPs      r   Útest_petersenzTestNodeBoundary.test_petersen-   s³   € ò	Vô ×ÑÓˆÙ�q˜!‹}¤§¡¨d¸Ô =Ò=Ð=Ð=Ù�q˜!‹}¤§¡¨d¸Ô =Ò=Ð=Ð=Ù�q˜!‹}¤§¡¨d¸Ô =Ò=Ð=Ð=Ù�q˜!‹}¤§¡¨d¸Ô =Ò=Ð=Ð=Ù�q˜!‹}¤§¡¨d¸Ô =Ò=Ð=Ñ=r   c                 óz   — t        j                  g d¢«      }ddh}t        j                  ||«      }dh}||k(  sJ ‚y)z,Tests the node boundary of a directed graph.©)r   r
   ©r
   r   ©r   r   ©r   r   )r   r   r   r
   r   N)r   ÚDiGraphr   ©r   r4   ÚSÚboundaryÚexpecteds        r   Útest_directedzTestNodeBoundary.test_directed>   sA   € ä�J‰JÒ?Ó@ˆØ�ˆFˆÜ×#Ñ# A qÓ)ˆØ�3ˆØ˜8Ò#Ð#Ñ#r   c                 óÒ   — t        j                  t        t        j                  d«      j	                  «       «      dz  «      }ddh}t        j
                  ||«      }ddh}||k(  sJ ‚y)z(Tests the node boundary of a multigraph.r   r   r   r
   r   N)r   Ú
MultiGraphÚlistÚcycle_graphÚedgesr   rE   s        r   Útest_multigraphz TestNodeBoundary.test_multigraphF   s^   € ä�M‰Mœ$œrŸ~™~¨aÓ0×6Ñ6Ó8Ó9¸AÑ=Ó>ˆØ�ˆFˆÜ×#Ñ# A qÓ)ˆØ�q�6ˆØ˜8Ò#Ð#Ñ#r   c                 ó„   — g d¢}t        j                  |dz  «      }ddh}t        j                  ||«      }dh}||k(  sJ ‚y)ú*Tests the edge boundary of a multidigraph.r@   r   r   r
   N)r   ÚMultiDiGraphr   ©r   rN   r4   rF   rG   rH   s         r   Útest_multidigraphz"TestNodeBoundary.test_multidigraphN   sI   € â8ˆÜ�O‰O˜E A™IÓ&ˆØ�ˆFˆÜ×#Ñ# A qÓ)ˆØ�3ˆØ˜8Ò#Ð#Ñ#r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r)   r-   r>   rI   rO   rT   © r   r   r   r      s+   „ ÙFòEòBò	Eò>ò"$ò$ó$r   r   c                   ó4   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚTestEdgeBoundaryz<Unit tests for the :func:`~networkx.edge_boundary` function.c                 ó®  — t        j                  «       }t        t        j                  |g «      «      g k(  sJ ‚t        t        j                  |g g «      «      g k(  sJ ‚t        t        j                  |g d¢«      «      g k(  sJ ‚t        t        j                  |g d¢g d¢«      «      g k(  sJ ‚t        t        j                  |g d¢g d¢«      «      g k(  sJ ‚y )Nr	   r   r   )r   r   rL   Úedge_boundaryr   s     r   r   z TestEdgeBoundary.test_null_graph[   s³   € Ü�}‰}‹ˆÜ”B×$Ñ$ T¨2Ó.Ó/°2Ò5Ð5Ð5Ü”B×$Ñ$ T¨2¨rÓ2Ó3°rÒ9Ð9Ð9Ü”B×$Ñ$ Tª9Ó5Ó6¸"Ò<Ð<Ð<Ü”B×$Ñ$ Tª9²iÓ@ÓAÀRÒGÐGÐGÜ”B×$Ñ$ Tª9²iÓ@ÓAÀRÒGÐGÑGr   c                 óº  — t        t        j                  d«      d¬«      }t        t        j                  |g «      «      g k(  sJ ‚t        t        j                  |g g «      «      g k(  sJ ‚t        t        j                  |g d¢«      «      dgk(  sJ ‚t        t        j                  |g d¢«      «      ddgk(  sJ ‚t        t        j                  |g d	¢«      «      d
dgk(  sJ ‚t        t        j                  |g d¢«      «      dgk(  sJ ‚t        t        j                  |g d¢ddg«      «      g k(  sJ ‚t        t        j                  |g d¢g d¢«      «      ddgk(  sJ ‚y )Nr   r
   r   r	   rC   r   )r   r   )r   r    r!   )r   r   )r    r"   r#   )r"   r    r$   r   rB   )r%   r   r&   rL   r]   Úsortedr'   s     r   r)   z TestEdgeBoundary.test_path_graphc   s4  € Ü”B—M‘M "Ó%°1Ô5ˆÜ”B×$Ñ$ S¨"Ó-Ó.°"Ò4Ð4Ð4Ü”B×$Ñ$ S¨"¨bÓ1Ó2°bÒ8Ð8Ð8Ü”B×$Ñ$ Sª)Ó4Ó5¸&¸ÒAÐAÐAÜ”b×&Ñ& sªIÓ6Ó7¸FÀFÐ;KÒKÐKÐKÜ”b×&Ñ& sªOÓ<Ó=À&È&ÐAQÒQÐQÐQÜ”B×$Ñ$ Sª*Ó5Ó6¸6¸(ÒBÐBÐBÜ”b×&Ñ& sªI¸¸2°wÓ?Ó@ÀBÒFÐFÐFÜ”B×$Ñ$ Sª)²YÓ?Ó@ÀVÈVÐDTÒTÐTÑTr   c                 ó˜  — t        t        j                  d«      d¬«      }d„ }t        t        j                  |g «      «      g k(  sJ ‚t        t        j                  |g g «      «      g k(  sJ ‚ |t        j                  |g d¢«      «      dk(  sJ ‚ |t        j                  |g d¢«      «      dk(  sJ ‚ |t        j                  |g d	¢«      «      d
k(  sJ ‚ |t        j                  |g d¢«      «      dk(  sJ ‚t        t        j                  |g d¢ddg«      g d¢«      sJ ‚t        t        j                  |g d¢g d¢«      g d¢«      sJ ‚y )Nr   r
   r   c                 ó&   — t        d„ | D «       «      S )Nc              3   ó    K  — | ]  }d –— Œ y­w)r
   NrY   )r2   Úis     r   r6   zETestEdgeBoundary.test_complete_graph.<locals>.ilen.<locals>.<genexpr>r   s   è ø€ Ò+˜Q”qÑ+ùs   ‚)Úsum)Úiterables    r   Úilenz2TestEdgeBoundary.test_complete_graph.<locals>.ilenq   s   € ÜÑ+ (Ô+Ó+Ð+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   rB   )r   r   )r   r   rC   )r   r   )r%   r   r+   rL   r]   r   )r   r,   rf   s      r   r-   z$TestEdgeBoundary.test_complete_graphn   s6  € Ü”B×%Ñ% bÓ)°qÔ9ˆò	,ô ”B×$Ñ$ S¨"Ó-Ó.°"Ò4Ð4Ð4Ü”B×$Ñ$ S¨"¨bÓ1Ó2°bÒ8Ð8Ð8Ù”B×$Ñ$ Sª)Ó4Ó5¸Ò;Ð;Ð;Ù”B×$Ñ$ Sª,Ó7Ó8¸BÒ>Ð>Ð>Ù”B×$Ñ$ Sª/Ó:Ó;¸rÒAÐAÐAÙ”B×$Ñ$ Sª*Ó5Ó6¸"Ò<Ð<Ð<ÜÜ×Ñ˜S¢)¨a°¨WÓ5Ú?ô
ð 	
ð 
ô Ü×Ñ˜S¢)ªYÓ7ÚLô
ð 	
ñ 
r   c                 óŒ   — t        j                  g d¢«      }ddh}t        t        j                  ||«      «      }dg}||k(  sJ ‚y)z,Tests the edge boundary of a directed graph.r@   r   r
   rA   N)r   rD   rL   r]   rE   s        r   rI   zTestEdgeBoundary.test_directedƒ   sF   € ä�J‰JÒ?Ó@ˆØ�ˆFˆÜœ×(Ñ(¨¨AÓ.Ó/ˆØ�8ˆØ˜8Ò#Ð#Ñ#r   c                 óä   — t        j                  t        t        j                  d«      j	                  «       «      dz  «      }ddh}t        t        j
                  ||«      «      }g d¢}||k(  sJ ‚y)z(Tests the edge boundary of a multigraph.r   r   r   r
   )©r   r   rl   rA   rA   N)r   rK   rL   rM   rN   r]   rE   s        r   rO   z TestEdgeBoundary.test_multigraph‹   s_   € ä�M‰Mœ$œrŸ~™~¨aÓ0×6Ñ6Ó8Ó9¸AÑ=Ó>ˆØ�ˆFˆÜœ×(Ñ(¨¨AÓ.Ó/ˆÚ3ˆØ˜8Ò#Ð#Ñ#r   c                 ó˜   — g d¢}t        j                  |dz  «      }ddh}t        t        j                  ||«      «      }ddg}||k(  sJ ‚y)rQ   r@   r   r   r
   rA   N)r   rR   rL   r]   rS   s         r   rT   z"TestEdgeBoundary.test_multidigraph“   sQ   € â8ˆÜ�O‰O˜E A™IÓ&ˆØ�ˆFˆÜœ×(Ñ(¨¨AÓ.Ó/ˆØ˜FÐ#ˆØ˜8Ò#Ð#Ñ#r   N)
rU   rV   rW   rX   r   r)   r-   rI   rO   rT   rY   r   r   r[   r[   X   s%   „ ÙFòHò	Uò
ò*$ò$ó$r   r[   )rX   Ú	itertoolsr   r;   Únetworkxr   r   r%   Únetworkx.utilsr   r   r[   rY   r   r   ú<module>rq      s0   ðÙ Då "ã ã Ý =Ý &÷I$ñ I$÷XB$ò B$r   