Ë
    D^(hÉr  ã                   óÜ  — d dl mZ d dlmZmZ d dlZd dlZd dlm	Z	m
Z
 d„ Z G d„ d«      Z G d„ d	«      Z G 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 G d„ d«      Zd„ Zd„ Zd„ Z d„ Z!d „ Z"ejF                  jI                  d!g d"¢d#hfg d$¢d%hfg d&¢ e%«       ff«      d'„ «       Z&d(„ Z'ejF                  jI                  d!g d"¢d#hfg d$¢d%d)hff«      d*„ «       Z(y)+é    ©Údeque)ÚcombinationsÚpermutationsN)Úedges_equalÚpairwisec                 ó   — t        | d¬«       y)zConsume the iterator entirely.r   )ÚmaxlenNr   )Úiterators    ú`/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_dag.pyÚ_consumer      s   € ô 
ˆ(˜1Öó    c                   óF   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)ÚTestDagLongestPathzBUnit tests computing the longest path in a directed acyclic graph.c                 ó`   — t        j                  «       }t        j                  |«      g k(  sJ ‚y ©N©ÚnxÚDiGraphÚdag_longest_path©ÚselfÚGs     r   Ú
test_emptyzTestDagLongestPath.test_empty   s&   € Ü�J‰J‹LˆÜ×"Ñ" 1Ó%¨Ò+Ð+Ñ+r   c                 ón   — g d¢}t        j                  |«      }t        j                  |«      g d¢k(  sJ ‚y )N)©é   é   ©r   é   ©r   é   ©r    é   ©r$   é   )r    é   )r   r   r    r$   r&   r   ©r   Úedgesr   s      r   Útest_unweighted1z#TestDagLongestPath.test_unweighted1   s.   € Ú@ˆÜ�J‰J�uÓˆÜ×"Ñ" 1Ó%ªÒ8Ð8Ñ8r   c                 ón   — g d¢}t        j                  |«      }t        j                  |«      g d¢k(  sJ ‚y )N©r   r   ©r    r"   ©r"   r$   ©r   r    ©r   r$   r#   ©r   r   r    r"   r$   r   r(   s      r   Útest_unweighted2z#TestDagLongestPath.test_unweighted2   s.   € ÚHˆÜ�J‰J�uÓˆÜ×"Ñ" 1Ó%ªÒ8Ð8Ñ8r   c                 óŽ   — t        j                  «       }g d¢}|j                  |«       t        j                  |«      g d¢k(  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   Úadd_weighted_edges_fromr   ©r   r   r)   s      r   Útest_weightedz TestDagLongestPath.test_weighted"   s9   € Ü�J‰J‹LˆÚSˆØ	×!Ñ! %Ô(Ü×"Ñ" 1Ó%ªÒ2Ð2Ñ2r   c                 ó’   — t        j                  «       }t        j                  t         j                  t         j
                  |«       y r   )r   ÚGraphÚpytestÚraisesÚNetworkXNotImplementedr   r   s     r   Útest_undirected_not_implementedz2TestDagLongestPath.test_undirected_not_implemented(   s)   € Ü�H‰H‹JˆÜ�‰”b×/Ñ/´×1DÑ1DÀaÕHr   c                 ó`  — t        d«      D �cg c]  }t        «       ‘Œ }}t        j                  «       }|j	                  |d   |d   «       |j	                  |d   |d   «       |j	                  |d   |d   «       |j	                  |d   |d   «       t        j
                  |«       yc c}w )z‘Tests that computing the longest path does not depend on
        nodes being orderable.

        For more information, see issue #1989.

        r"   r   r   r   r    N)ÚrangeÚobjectr   r   Úadd_edger   )r   ÚnÚnodesr   s       r   Útest_unorderable_nodesz)TestDagLongestPath.test_unorderable_nodes,   s•   € ô $)¨£8Ö,˜a”•Ð,ˆÐ,Ü�J‰J‹LˆØ	�
‰
�5˜‘8˜U 1™XÔ&Ø	�
‰
�5˜‘8˜U 1™XÔ&Ø	�
‰
�5˜‘8˜U 1™XÔ&Ø	�
‰
�5˜‘8˜U 1™XÔ&ô 	×Ñ˜AÕùò -s   ŽB+c                 ón   — g d¢}t        j                  |«      }t        j                  |«      g d¢k(  sJ ‚y )N©r   r   r   r-   r.   r/   r0   r#   r1   )r   ÚMultiDiGraphr   r(   s      r   Útest_multigraph_unweightedz-TestDagLongestPath.test_multigraph_unweighted?   s.   € ÚPˆÜ�O‰O˜EÓ"ˆÜ×"Ñ" 1Ó%ªÒ8Ð8Ñ8r   c                 óŽ   — t        j                  «       }g d¢}|j                  |«       t        j                  |«      ddgk(  sJ ‚y )N©)r   r   r   )r   r    r   ©r   r    r   ©r   r    r$   ©r   r    r   r   r    ©r   rH   r6   r   r7   s      r   Útest_multigraph_weightedz+TestDagLongestPath.test_multigraph_weightedD   sB   € Ü�O‰OÓˆò
ˆð 	
×!Ñ! %Ô(Ü×"Ñ" 1Ó%¨!¨Q¨Ò/Ð/Ñ/r   c                 óÌ   — t        j                  ddg«      }|j                  g d¢«       t        j                  |«      ddgk(  sJ ‚t        j                  |d¬«      g d¢k(  sJ ‚y )Nr   r   )rL   rM   rN   r   r    )Údefault_weight©r   r   r    rO   r   s     r   Ú'test_multigraph_weighted_default_weightz:TestDagLongestPath.test_multigraph_weighted_default_weightP   s^   € Ü�O‰O˜V VÐ,Ó-ˆØ	×!Ñ!Ò"CÔDô ×"Ñ" 1Ó%¨!¨Q¨Ò/Ð/Ð/Ü×"Ñ" 1°QÔ7º9ÒDÐDÑDr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r*   r2   r8   r>   rE   rI   rP   rT   © r   r   r   r      s4   „ ÙLò,ò9ò
9ò
3òIòò&9ò

0óEr   r   c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestDagLongestPathLengthz\Unit tests for computing the length of a longest path in a
    directed acyclic graph.

    c                 óN  — g d¢}t        j                  |«      }t        j                  |«      dk(  sJ ‚g d¢}t        j                  |«      }t        j                  |«      dk(  sJ ‚t        j                  «       }|j                  d«       t        j                  |«      dk(  sJ ‚y )N©r   r   r!   r#   r%   )r$   r'   r"   r,   r   r   )r   r   Údag_longest_path_lengthÚadd_noder(   s      r   Útest_unweightedz(TestDagLongestPathLength.test_unweighted_   s‹   € Ú@ˆÜ�J‰J�uÓˆÜ×)Ñ)¨!Ó,°Ò1Ð1Ð1âHˆÜ�J‰J�uÓˆÜ×)Ñ)¨!Ó,°Ò1Ð1Ð1ô �J‰J‹LˆØ	�
‰
�1ŒÜ×)Ñ)¨!Ó,°Ò1Ð1Ñ1r   c                 ó’   — t        j                  «       }t        j                  t         j                  t         j
                  |«       y r   )r   r:   r;   r<   r=   r^   r   s     r   r>   z8TestDagLongestPathLength.test_undirected_not_implementedm   s)   € Ü�H‰H‹JˆÜ�‰”b×/Ñ/´×1KÑ1KÈQÕOr   c                 óŠ   — g d¢}t        j                  «       }|j                  |«       t        j                  |«      dk(  sJ ‚y )Nr4   r$   )r   r   r6   r^   r(   s      r   r8   z&TestDagLongestPathLength.test_weightedq   s9   € ÚSˆÜ�J‰J‹LˆØ	×!Ñ! %Ô(Ü×)Ñ)¨!Ó,°Ò1Ð1Ñ1r   c                 ój   — g d¢}t        j                  |«      }t        j                  |«      dk(  sJ ‚y )NrG   r"   )r   rH   r^   r(   s      r   rI   z3TestDagLongestPathLength.test_multigraph_unweightedw   s.   € ÚPˆÜ�O‰O˜EÓ"ˆÜ×)Ñ)¨!Ó,°Ò1Ð1Ñ1r   c                 óŠ   — t        j                  «       }g d¢}|j                  |«       t        j                  |«      dk(  sJ ‚y )NrK   r$   )r   rH   r6   r^   r7   s      r   rP   z1TestDagLongestPathLength.test_multigraph_weighted|   s>   € Ü�O‰OÓˆò
ˆð 	
×!Ñ! %Ô(Ü×)Ñ)¨!Ó,°Ò1Ð1Ñ1r   N)	rU   rV   rW   rX   r`   r>   r8   rI   rP   rY   r   r   r[   r[   Y   s!   „ ñò
2òPò2ò2ó

2r   r[   c                   ó¦   — e Zd Zed„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestDAGc                  ó   — y r   rY   )Úclss    r   Úsetup_classzTestDAG.setup_classŠ   s   € àr   c                 ó¼  — t        j                  g d¢«      }t         j                  t         j                  fD ]  }t	         ||«      «      dk(  rŒJ ‚ |j                  dd«       t         j                  t         j                  fD ]1  }t        j                  t         j                  t         ||«      «       Œ3 |j                  dd«       t         j                  t         j                  fD ]  }t	         ||«      «      dk(  rŒJ ‚ |j                  dd«       t	        t        j                  |«      «      dv sJ ‚t	        t        j                  |«      «      dk(  sJ ‚y )N)r   r/   r   rS   r    r   rN   >   rS   rN   )r   r   Útopological_sortÚ lexicographical_topological_sortÚtuplerB   r;   r<   ÚNetworkXUnfeasibler   Úremove_edge)r   ÚDGÚ	algorithms      r   Útest_topological_sort1zTestDAG.test_topological_sort1Ž   s(  € Ü�Z‰ZÒ0Ó1ˆä×-Ñ-¬r×/RÑ/RÐSò 	5ˆIÜ™ 2›Ó'¨9Ó4Ð4Ð4ð	5ð 	�‰�A�qÔä×-Ñ-¬r×/RÑ/RÐSò 	JˆIÜ�M‰Mœ"×/Ñ/´¹9ÀR»=ÕIð	Jð 	�‰�q˜!Ôä×-Ñ-¬r×/RÑ/RÐSò 	5ˆIÜ™ 2›Ó'¨9Ó4Ð4Ð4ð	5ð 	�‰�q˜!Ôä”R×(Ñ(¨Ó,Ó-Ð1GÑGÐGÐGÜ”R×8Ñ8¸Ó<Ó=ÀÒJÐJÑJr   c                 ój  — t         j                  j                  d«      }t        j                  |«      rJ ‚t        j                  |j	                  «       «      rJ ‚t        j                  t        j
                  ddg«      «      rJ ‚t        j                  t        j                  ddg«      «      sJ ‚y )Nr   r-   r.   )r   Ú
generatorsÚcomplete_graphÚis_directed_acyclic_graphÚto_directedr:   r   r   s     r   Útest_is_directed_acyclic_graphz&TestDAG.test_is_directed_acyclic_graph£   sˆ   € Ü�M‰M×(Ñ(¨Ó+ˆÜ×/Ñ/°Ô2Ð2Ð2Ü×/Ñ/°·±³Ô@Ð@Ð@Ü×/Ñ/´·±¸&À&Ð9IÓ0JÔKÐKÐKÜ×+Ñ+¬B¯J©J¸ÀÐ7GÓ,HÔIÐIÑIr   c                 óˆ  — t        j                  dgdgdgdgdgdgdgdgd	gd
œ	«      }t        j                  t         j                  t
        t        j                  |«      «       t        j                  |«      rJ ‚|j                  dd«       t        t        j                  |«      «       t        j                  |«      sJ ‚y )Nr   r    r"   r$   r   é   é   é   é   )	r   r   r    r"   r$   é   rz   r{   r|   )	r   r   r;   r<   rn   r   rk   rv   ro   ©r   rp   s     r   Útest_topological_sort2zTestDAG.test_topological_sort2ª   s®   € Ü�Z‰Zà�3Ø�3Ø�3Ø�3Ø�3Ø�DØ�DØ�DØ�Dñ
ó
ˆô 	�‰”b×+Ñ+¬X´r×7JÑ7JÈ2Ó7NÔOä×/Ñ/°Ô3Ð3Ð3à
�‰�q˜!ÔÜ”×$Ñ$ RÓ(Ô)Ü×+Ñ+¨BÔ/Ð/Ñ/r   c                 óœ  ‡— t        j                  «       Š‰j                  t        dd«      D �cg c]  }d|f‘Œ c}«       ‰j                  t        dd«      D �cg c]  }d|f‘Œ c}«       ‰j                  t        dd«      D �cg c]  }d|f‘Œ c}«       ‰j                  t        dd«      D �cg c]  }d|f‘Œ c}«       ˆfd	„} |t	        t        j
                  ‰«      «      «       ‰j                  d
d«       t        j                  t         j                  t        t        j
                  ‰«      «       y c c}w c c}w c c}w c c}w )Nr   r$   r   é	   rz   r&   r}   r"   c                 ó¶   •— t        | t        «      sJ ‚t        | «      t        ‰«      k(  sJ ‚t        | d«      D ]  \  }}t	        j
                  ‰||«      sŒJ ‚ y )Nr   )Ú
isinstanceÚlistÚsetr   r   Úhas_path)ÚorderÚuÚvrp   s      €r   Úvalidatez0TestDAG.test_topological_sort3.<locals>.validateÇ   sY   ø€ Ü˜e¤TÔ*Ð*Ð*Ü�u“:¤ R£Ò(Ð(Ð(Ü$ U¨AÓ.ò 1‘��1ÜŸ;™; r¨1¨aÕ0Ð0Ð0ñ1r   r|   )r   r   Úadd_edges_fromr@   r…   rk   rB   r;   r<   rn   r   )r   Úir‹   rp   s      @r   Útest_topological_sort3zTestDAG.test_topological_sort3À   sö   ø€ Ü�Z‰Z‹\ˆØ
×Ñ¬5°°A«;Ö7 a˜A˜qš6Ò7Ô8Ø
×Ñ¬5°°A«;Ö7 a˜A˜qš6Ò7Ô8Ø
×Ñ¬5°°B«<Ö8 a˜A˜qš6Ò8Ô9Ø
×Ñ¬5°°R«=Ö9 a˜A˜qš6Ò9Ô:ô	1ñ 	””b×)Ñ)¨"Ó-Ó.Ô/à
�‰�B˜ÔÜ�‰”b×+Ñ+¬X´r×7JÑ7JÈ2Ó7NÕOùò 8ùÚ7ùÚ8ùÚ9s   ¯D:ÁD?ÂEÂ0E	c                 óÈ   — t        j                  «       }|j                  dd«       t        j                  t         j
                  t        t        j                  |«      «       y )Nr   r   )r   r:   rB   r;   r<   ÚNetworkXErrorr   rk   r   s     r   Útest_topological_sort4zTestDAG.test_topological_sort4Ò   s<   € Ü�H‰H‹JˆØ	�
‰
�1�aÔä�‰”b×&Ñ&¬´"×2EÑ2EÀaÓ2HÕIr   c                 óš   — t        j                  «       }|j                  dd«       t        t        j                  |«      «      ddgk(  sJ ‚y )Nr   r   )r   r   rB   r…   rk   r   s     r   Útest_topological_sort5zTestDAG.test_topological_sort5Ø   s=   € Ü�J‰J‹LˆØ	�
‰
�1�aÔÜ”B×'Ñ'¨Ó*Ó+°°1¨vÒ5Ð5Ñ5r   c                 ó  ‡— t         j                  t         j                  fD ]i  Šˆfd„}ˆfd„}ˆfd„}t        j                  t
        |«       t        j                  t
        |«       t        j                  t         j                  |«       Œk y )Nc                  ó†   •— t        j                  g d¢«      } d} ‰| «      D ]  }|sŒd}| j                  d|z
  d«       Œ y )N©r   r   r-   TFr$   )r   r   rB   ©rp   ÚfirstÚxrq   s      €r   Úruntime_errorz5TestDAG.test_topological_sort6.<locals>.runtime_errorà   sD   ø€ Ü—Z‘ZÒ 8Ó9�Ø�Ù" 2›ò .�AÚØ %˜ØŸ™ A¨¡E¨1Õ-ñ.r   c                  ó~   •— t        j                  g d¢«      } d} ‰| «      D ]  }|sŒd}| j                  d«       Œ y )Nr–   TFr"   ©r   r   Úremove_noder—   s      €r   Úunfeasible_errorz8TestDAG.test_topological_sort6.<locals>.unfeasible_errorè   ó>   ø€ Ü—Z‘ZÒ 8Ó9�Ø�Ù" 2›ò *�AÚØ %˜ØŸ™ qÕ)ñ*r   c                  ó~   •— t        j                  g d¢«      } d} ‰| «      D ]  }|sŒd}| j                  d«       Œ y )Nr–   TFr   rœ   r—   s      €r   Úruntime_error2z6TestDAG.test_topological_sort6.<locals>.runtime_error2ð   rŸ   r   )r   rk   rl   r;   r<   ÚRuntimeErrorrn   )r   rš   rž   r¡   rq   s       @r   Útest_topological_sort6zTestDAG.test_topological_sort6Ý   sg   ø€ Ü×-Ñ-¬r×/RÑ/RÐSò 	CˆIô.ô*ô*ô �M‰Mœ,¨Ô6Ü�M‰Mœ,¨Ô7Ü�M‰Mœ"×/Ñ/Ð1AÕBñ9	Cr   c                 ó~   — t        j                  g d¢«      }t        t        j                  |«      «      g d¢gk(  sJ ‚y )N)r   r   r-   r.   r1   ©r   r   r…   Úall_topological_sortsr   s     r   Útest_all_topological_sorts_1z$TestDAG.test_all_topological_sorts_1ü   s2   € Ü�Z‰ZÒ8Ó9ˆÜ”B×,Ñ,¨RÓ0Ó1²oÐ5FÒFÐFÑFr   c                 ó–   — t        j                  g d¢«      }t        t        j                  |«      «      g d¢g d¢g d¢g d¢g d¢gk(  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   Úsortedr¦   r   s     r   Útest_all_topological_sorts_2z$TestDAG.test_all_topological_sorts_2   sG   € Ü�Z‰ZÒ@ÓAˆÜ”b×.Ñ.¨rÓ2Ó3ÚÚÚÚÚð8
ò 
ð 	
ñ 
r   c                 óî   — d„ }d„ }d„ }t        j                  t        j                  |«       t        j                  t        j                  |«       t        j                  t        j                  |«       y )Nc                  ón   — t        j                  g d¢«      } t        t        j                  | «      «       y )N)r   r   r-   ©r"   r   r.   r¥   )rp   s    r   Ú
unfeasiblez8TestDAG.test_all_topological_sorts_3.<locals>.unfeasible  s$   € Ü—‘ÒDÓEˆBä”×)Ñ)¨"Ó-Õ.r   c                  ón   — t        j                  ddg«      } t        t        j                  | «      «       y )Nr   r   )r   r:   r…   r¦   ©r   s    r   Únot_implementedz=TestDAG.test_all_topological_sorts_3.<locals>.not_implemented  s(   € Ü—‘˜& &Ð)Ó*ˆAä”×)Ñ)¨!Ó,Õ-r   c                  ón   — t        j                  g d¢«      } t        t        j                  | «      «       y )N)r   r   r   )r   Ú
MultiGraphr…   r¦   r²   s    r   Únot_implemented_2z?TestDAG.test_all_topological_sorts_3.<locals>.not_implemented_2  s$   € Ü—‘Ò6Ó7ˆAÜ”×)Ñ)¨!Ó,Õ-r   )r;   r<   r   rn   r=   )r   r°   r³   r¶   s       r   Útest_all_topological_sorts_3z$TestDAG.test_all_topological_sorts_3
  sP   € ò	/ò
	.ò
	.ô 	�‰”b×+Ñ+¨ZÔ8Ü�‰”b×/Ñ/°ÔAÜ�‰”b×/Ñ/Ð1BÕCr   c                 ó  — t        j                  «       }t        d«      D ]  }|j                  |«       Œ t	        t        t        t        |j                  «      «      «      t	        t        j                  |«      «      k(  sJ ‚y )Nr'   )
r   r   r@   r_   r«   Úmapr…   r   rD   r¦   )r   rp   r�   s      r   Útest_all_topological_sorts_4z$TestDAG.test_all_topological_sorts_4  sg   € Ü�Z‰Z‹\ˆÜ�q“ò 	ˆAØ�K‰K˜�Nð	ä”cœ$¤¨R¯X©XÓ 6Ó7Ó8¼FÜ×$Ñ$ RÓ(ó=
ò 
ð 	
ñ 
r   c                 ó–   — t        j                  g d¢«      }t        t        j                  |«      «      t        g d¢g d¢g«      k(  sJ ‚y )N)r   r   r   r-   r#   r#   r#   r1   )r   r   r    r$   r"   )r   rH   r«   r¦   r   s     r   Ú'test_all_topological_sorts_multigraph_1z/TestDAG.test_all_topological_sorts_multigraph_1%  sB   € Ü�_‰_ÒUÓVˆÜ”b×.Ñ.¨rÓ2Ó3´vÚšoÐ.ó8
ò 
ð 	
ñ 
r   c                 ó   — d}g }t        d|«      D ]  }|j                  ||dz   fg|z  «       Œ t        j                  |«      }t	        t        j
                  |«      «      t	        t        d|dz   «      «      gk(  sJ ‚y )Nr‚   r   )r@   Úextendr   rH   r…   r¦   )r   ÚNr)   r�   rp   s        r   Ú'test_all_topological_sorts_multigraph_2z/TestDAG.test_all_topological_sorts_multigraph_2+  sz   € ØˆØˆÜ�q˜!“ò 	+ˆAØ�L‰L˜1˜a !™e˜*˜¨Ñ)Õ*ð	+ä�_‰_˜UÓ#ˆÜ”B×,Ñ,¨RÓ0Ó1´d¼5ÀÀAÈÁE»?Ó6KÐ5LÒLÐLÑLr   c                 óR  — t        j                  «       }t         j                  j                  j                  }|j                  g d¢«        ||d«      h d£k(  sJ ‚ ||d«      ddhk(  sJ ‚ ||d«      t        «       k(  sJ ‚t        j                  t         j                  ||d«       y )N©r   r/   r¯   rª   r.   ©r   r&   r%   r&   >   r   r   r"   r$   r    r   r"   é   )
r   r   Ú
algorithmsÚdagÚ	ancestorsrŒ   r†   r;   r<   r�   )r   r   rÇ   s      r   Útest_ancestorszTestDAG.test_ancestors3  s‹   € Ü�J‰J‹LˆÜ—M‘M×%Ñ%×/Ñ/ˆ	Ø	×ÑÒQÔRÙ˜˜A‹¢,Ò.Ð.Ð.Ù˜˜A‹ 1 a &Ò(Ð(Ð(Ù˜˜A‹¤#£%Ò'Ð'Ð'Ü�‰”b×&Ñ&¨	°1°aÕ8r   c                 óR  — t        j                  «       }t         j                  j                  j                  }|j                  g d¢«        ||d«      h d£k(  sJ ‚ ||d«      h d£k(  sJ ‚ ||d«      t        «       k(  sJ ‚t        j                  t         j                  ||d«       y )NrÂ   r   >   r   r    r&   r"   >   r   r    r$   r&   r    rÄ   )
r   r   rÅ   rÆ   ÚdescendantsrŒ   r†   r;   r<   r�   )r   r   rÊ   s      r   Útest_descendantszTestDAG.test_descendants<  sŠ   € Ü�J‰J‹LˆÜ—m‘m×'Ñ'×3Ñ3ˆØ	×ÑÒQÔRÙ˜1˜aÓ ¢IÒ-Ð-Ð-Ù˜1˜aÓ ¢LÒ0Ð0Ð0Ù˜1˜aÓ ¤C£EÒ)Ð)Ð)Ü�‰”b×&Ñ&¨°Q¸Õ:r   c                 ó²  — t        j                  g d¢«      }g d¢}t        t        j                  |«      j	                  «       |«      sJ ‚t        j                  g d¢«      }g d¢}t        t        j                  |«      j	                  «       |«      sJ ‚t        j                  g d¢«      }g d¢}t        ||D �cg c]  }||f‘Œ c}z   «      }t        t        t        j                  |«      j	                  «       «      |«      sJ ‚t        j                  g d¢«      }g d¢}t        t        t        j                  |«      j	                  «       «      |«      sJ ‚t        j                  g d¢«      }g d¢}t        t        t        j                  |«      j	                  «       «      |«      sJ ‚t        j                  g d¢«      }g d¢}t        t        t        j                  |«      j	                  «       «      |«      sJ ‚t        j                  ddd	d
ifdd
ddifdg«      }t        j                  |«      }|j	                  «       D ],  \  }}|j                  ||«      |j                  ||«      k(  rŒ,J ‚ d}t        j                  d„ t        |«      D «       «      }t        j                  |«      }|j	                  «       D ],  \  }}|j                  ||«      |j                  ||«      k(  rŒ,J ‚ t        j                  «       }t        j                  t         j                  «      5  t        j                  |d¬«       d d d «       y c c}w # 1 sw Y   y xY w)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   Úar    Úbr   r-   é
   c              3   ó2   K  — | ]  }||d z   d|dœf–— Œ y­w)r   rÖ   )ÚfÚweightNrY   ©Ú.0r�   s     r   ú	<genexpr>z2TestDAG.test_transitive_closure.<locals>.<genexpr>d  s    è ø€ ÒM¸q˜˜1˜q™5¨°qÑ"9Ô:ÑMùó   ‚zwrong input)Ú	reflexive)r   r   r   Útransitive_closurer)   r«   r:   rµ   rH   Úget_edge_datar@   r;   r<   r�   )	r   r   ÚsolutionrC   ÚsolnÚHr‰   rŠ   Úks	            r   Útest_transitive_closurezTestDAG.test_transitive_closureE  s¼  € Ü�J‰JÒ/Ó0ˆÚCˆÜœ2×0Ñ0°Ó3×9Ñ9Ó;¸XÔFÐFÐFÜ�J‰JÒ/Ó0ˆÚ;ˆÜœ2×0Ñ0°Ó3×9Ñ9Ó;¸XÔFÐFÐFÜ�J‰JÒ/Ó0ˆÚCˆÜ�h°!Ö!4¨Q 1 a¢&Ò!4Ñ4Ó5ˆÜœ6¤"×"7Ñ"7¸Ó":×"@Ñ"@Ó"BÓCÀTÔJÐJÐJä�H‰HÒ-Ó.ˆÚCˆÜœ6¤"×"7Ñ"7¸Ó":×"@Ñ"@Ó"BÓCÀXÔNÐNÐNä�M‰MÒ2Ó3ˆÚCˆÜœ6¤"×"7Ñ"7¸Ó":×"@Ñ"@Ó"BÓCÀXÔNÐNÐNä�O‰OÒ4Ó5ˆÚCˆÜœ6¤"×"7Ñ"7¸Ó":×"@Ñ"@Ó"BÓCÀXÔNÐNÐNô �J‰J˜˜A  Q˜xÐ(¨1¨a°#°q°Ð*:¸FÐCÓDˆÜ×!Ñ! !Ó$ˆØ—G‘G“Iò 	B‰DˆAˆqØ—?‘? 1 aÓ(¨A¯O©O¸A¸qÓ,AÓAÐAÐAð	Bð ˆÜ�J‰JÑMÄEÈ!ÃHÔMÓMˆÜ×!Ñ! !Ó$ˆØ—G‘G“Iò 	B‰DˆAˆqØ—?‘? 1 aÓ(¨A¯O©O¸A¸qÓ,AÓAÐAÐAð	Bô �H‰H‹JˆÜ�]‰]œ2×+Ñ+Ó,ñ 	>Ü×!Ñ! !¨}Õ=÷	>ð 	>ùò9 "5÷8	>ð 	>ús   Â:M
Ì'MÍMc                 ó:  — t        j                  g d¢«      }g d¢}t        ||D �cg c]  }||f‘Œ c}z   «      }t        t        j                  |«      j                  «       |«      sJ ‚t        t        j                  |d«      j                  «       |«      sJ ‚t        t        j                  |d«      j                  «       |«      sJ ‚t        t        j                  |d «      j                  «       |«      sJ ‚t        j                  g d¢«      }g d¢}t        ||D �cg c]  }||f‘Œ c}z   «      }t        t        j                  |«      j                  «       |«      sJ ‚t        t        j                  |d«      j                  «       |«      sJ ‚t        t        j                  |d«      j                  «       |«      sJ ‚t        t        j                  |d «      j                  «       |«      sJ ‚t        j                  g d¢«      }t        g d¢«      }t        ||D �cg c]  }||f‘Œ c}z   «      }t        t        t        j                  |«      j                  «       «      |«      sJ ‚t        t        t        j                  |d«      j                  «       «      |«      sJ ‚t        t        t        j                  |d «      j                  «       «      |«      sJ ‚t        t        t        j                  |d«      j                  «       «      |«      sJ ‚t        j                  g d¢«      }g d¢}t        ||D �cg c]  }||f‘Œ c}z   «      }t        t        j                  |«      j                  «       |«      sJ ‚t        t        j                  |d«      j                  «       |«      sJ ‚t        t        j                  |d«      j                  «       |«      sJ ‚t        t        j                  |d «      j                  «       |«      sJ ‚t        j                  g d¢«      }g d¢}t        ||D �cg c]  }||f‘Œ c}z   «      }t        t        j                  |«      j                  «       |«      sJ ‚t        t        j                  |d«      j                  «       |«      sJ ‚t        t        j                  |d«      j                  «       |«      sJ ‚t        t        j                  |d «      j                  «       |«      sJ ‚t        j                  g d¢«      }g d¢}t        ||D �cg c]  }||f‘Œ c}z   «      }t        t        j                  |«      j                  «       |«      sJ ‚t        t        j                  |d«      j                  «       |«      sJ ‚t        t        j                  |d«      j                  «       |«      sJ ‚t        t        j                  |d «      j                  «       |«      sJ ‚y c c}w c c}w c c}w c c}w c c}w c c}w )	Nr–   rÍ   FTrÏ   rÐ   rÑ   rÓ   )	r   r   r«   r   rà   r)   r:   rµ   rH   )r   r   râ   rC   rã   s        r   Ú!test_reflexive_transitive_closurez)TestDAG.test_reflexive_transitive_closurem  së  € Ü�J‰JÒ/Ó0ˆÚCˆÜ�h°!Ö!4¨Q 1 a¢&Ò!4Ñ4Ó5ˆÜœ2×0Ñ0°Ó3×9Ñ9Ó;¸XÔFÐFÐFÜœ2×0Ñ0°°EÓ:×@Ñ@ÓBÀHÔMÐMÐMÜœ2×0Ñ0°°DÓ9×?Ñ?ÓAÀ4ÔHÐHÐHÜœ2×0Ñ0°°DÓ9×?Ñ?ÓAÀ8ÔLÐLÐLä�J‰JÒ/Ó0ˆÚ;ˆÜ�h°!Ö!4¨Q 1 a¢&Ò!4Ñ4Ó5ˆÜœ2×0Ñ0°Ó3×9Ñ9Ó;¸XÔFÐFÐFÜœ2×0Ñ0°°EÓ:×@Ñ@ÓBÀHÔMÐMÐMÜœ2×0Ñ0°°DÓ9×?Ñ?ÓAÀ4ÔHÐHÐHÜœ2×0Ñ0°°DÓ9×?Ñ?ÓAÀ8ÔLÐLÐLä�J‰JÒ/Ó0ˆÜÒJÓKˆÜ�h°!Ö!4¨Q 1 a¢&Ò!4Ñ4Ó5ˆÜœ6¤"×"7Ñ"7¸Ó":×"@Ñ"@Ó"BÓCÀTÔJÐJÐJÜœ6¤"×"7Ñ"7¸¸5Ó"A×"GÑ"GÓ"IÓJÈDÔQÐQÐQÜœ6¤"×"7Ñ"7¸¸4Ó"@×"FÑ"FÓ"HÓIÈ8ÔTÐTÐTÜœ6¤"×"7Ñ"7¸¸4Ó"@×"FÑ"FÓ"HÓIÈ4ÔPÐPÐPä�H‰HÒ-Ó.ˆÚCˆÜ�h°!Ö!4¨Q 1 a¢&Ò!4Ñ4Ó5ˆÜœ2×0Ñ0°Ó3×9Ñ9Ó;¸XÔFÐFÐFÜœ2×0Ñ0°°EÓ:×@Ñ@ÓBÀHÔMÐMÐMÜœ2×0Ñ0°°DÓ9×?Ñ?ÓAÀ4ÔHÐHÐHÜœ2×0Ñ0°°DÓ9×?Ñ?ÓAÀ8ÔLÐLÐLä�M‰MÒ2Ó3ˆÚCˆÜ�h°!Ö!4¨Q 1 a¢&Ò!4Ñ4Ó5ˆÜœ2×0Ñ0°Ó3×9Ñ9Ó;¸XÔFÐFÐFÜœ2×0Ñ0°°EÓ:×@Ñ@ÓBÀHÔMÐMÐMÜœ2×0Ñ0°°DÓ9×?Ñ?ÓAÀ4ÔHÐHÐHÜœ2×0Ñ0°°DÓ9×?Ñ?ÓAÀ8ÔLÐLÐLä�O‰OÒ4Ó5ˆÚCˆÜ�h°!Ö!4¨Q 1 a¢&Ò!4Ñ4Ó5ˆÜœ2×0Ñ0°Ó3×9Ñ9Ó;¸XÔFÐFÐFÜœ2×0Ñ0°°EÓ:×@Ñ@ÓBÀHÔMÐMÐMÜœ2×0Ñ0°°DÓ9×?Ñ?ÓAÀ4ÔHÐHÐHÜœ2×0Ñ0°°DÓ9×?Ñ?ÓAÀ8ÔLÐLÑLùòY "5ùò "5ùò "5ùò "5ùò "5ùò "5s#   ¦W?
ÄX
ÈX	
Ì;X
Ð3X
Ô+X
c                 óf  — t        j                  g d¢«      }t         j                  j                  j                  }g d¢}t         ||«      j                  «       |«      sJ ‚t        j                  g d¢«      }g d¢}t         ||«      j                  «       |«      sJ ‚t        j                  g d¢«      }t        j                  t         j                  ||«       t        j                  ddddifddd	d
ifdg«      } ||«      }|j                  «       D ],  \  }}|j                  ||«      |j                  ||«      k(  rŒ,J ‚ d}t        j                  d„ t        |«      D «       «      } ||«      }|j                  «       D ],  \  }}|j                  ||«      |j                  ||«      k(  rŒ,J ‚ y )Nr–   rÍ   rÏ   rÐ   r   r   rÕ   r    rÖ   r   r-   r×   c              3   ó2   K  — | ]  }||d z   d|dœf–— Œ y­w)r   Úbar)ÚfoorÚ   NrY   rÛ   s     r   rÝ   z6TestDAG.test_transitive_closure_dag.<locals>.<genexpr>°  s    è ø€ ÒQÀ1˜˜1˜q™5¨%¸1Ñ"=Ô>ÑQùrÞ   )r   r   rÅ   rÆ   Útransitive_closure_dagr   r)   r:   r;   r<   r=   rá   r@   )r   r   rà   râ   rä   r‰   rŠ   rå   s           r   Útest_transitive_closure_dagz#TestDAG.test_transitive_closure_dagž  s‚  € Ü�J‰JÒ/Ó0ˆÜŸ]™]×.Ñ.×EÑEÐÚCˆÜÑ-¨aÓ0×6Ñ6Ó8¸(ÔCÐCÐCÜ�J‰JÒ/Ó0ˆÚ;ˆÜÑ-¨aÓ0×6Ñ6Ó8¸(ÔCÐCÐCÜ�H‰HÒ-Ó.ˆÜ�‰”b×/Ñ/Ð1CÀQÔGô �J‰J˜˜A  Q˜xÐ(¨1¨a°#°q°Ð*:¸FÐCÓDˆÙ˜qÓ!ˆØ—G‘G“Iò 	B‰DˆAˆqØ—?‘? 1 aÓ(¨A¯O©O¸A¸qÓ,AÓAÐAÐAð	Bð ˆÜ�J‰JÑQÌÈaËÔQÓQˆÙ˜qÓ!ˆØ—G‘G“Iò 	B‰DˆAˆqØ—?‘? 1 aÓ(¨A¯O©O¸A¸qÓ,AÓAÐAÐAñ	Br   c                 ó   — t        j                  g d¢«      }t         j                  j                  j                  }g d¢}t         ||«      j                  «       |«      sJ ‚t        j                  g d¢«      }t         j                  j                  j                  }g d¢}t         ||«      j                  «       |«      sJ ‚t        j                  g d¢«      }t        j                  t         j                  ||«       y )NrÍ   r–   rÐ   rÏ   )r   r   rÅ   rÆ   Útransitive_reductionr   r)   r:   r;   r<   r=   )r   r   rð   râ   s       r   Útest_transitive_reductionz!TestDAG.test_transitive_reductionµ  sº   € Ü�J‰JÒGÓHˆÜ!Ÿ}™}×0Ñ0×EÑEÐÚ+ˆÜÑ/°Ó2×8Ñ8Ó:¸HÔEÐEÐEÜ�J‰JÒ?Ó@ˆÜ!Ÿ}™}×0Ñ0×EÑEÐÚ+ˆÜÑ/°Ó2×8Ñ8Ó:¸HÔEÐEÐEÜ�H‰HÒ-Ó.ˆÜ�‰”b×/Ñ/Ð1EÀqÕIr   c                 óª   — |D �cg c]  }t        |«      ‘Œ }}|D �cg c]  }t        |«      ‘Œ }}t        |«      t        |«      k(  sJ ‚y c c}w c c}w r   )Ú	frozensetr†   )r   râ   ÚresultrÕ   ÚsolÚress         r   Ú_check_antichainszTestDAG._check_antichainsÁ  sN   € Ø%-Ö. Œy˜�|Ð.ˆÐ.Ø%+Ö, Œy˜�|Ð,ˆÐ,Ü�3‹xœ3˜s›8Ò#Ð#Ñ#ùò /ùÚ,s
   …A�Ac                 ó  ‡— t         j                  j                  j                  Št        j                  g d¢«      }g dgdgdgdgg}| j                  t         ‰|«      «      |«       t        j                  g d¢«      }g dgdgddgdgddgddgg d	¢d
gd
dgdgddgdgdgg}| j                  t         ‰|«      «      |«       t        j                  g d¢«      }g dgd
gdgddgdd
gdgdgddgdd
gddgg d¢g d¢ddgdgg}| j                  t         ‰|«      «      |«       t        j                  ddgdgdgdgdœ«      }g dgdgdgdgddgddgdgg}| j                  t         ‰|«      «      |«       t        j                  «       }| j                  t         ‰|«      «      g g«       t        j                  «       }|j                  g d¢«       g dgdgddgdgddgddgg d¢g}| j                  t         ‰|«      «      |«       ˆfd„}t        j                  g d¢«      }t        j                  t         j                  ||«       t        j                  g d¢«      }t        j                  t         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   r   )r   r   r   c                 ó&   •— t         ‰| «      «      S r   )r…   )r™   Ú
antichainss    €r   rÙ   z"TestDAG.test_antichains.<locals>.fú  s   ø€ Ü™
 1›Ó&Ð&r   rÑ   )r   rÅ   rÆ   rû   r   r÷   r…   Úadd_nodes_fromr:   r;   r<   r=   rn   )r   r   râ   rÙ   rû   s       @r   Útest_antichainszTestDAG.test_antichainsÆ  sŠ  ø€ Ü—]‘]×&Ñ&×1Ñ1ˆ
Ü�J‰JÒ/Ó0ˆØ˜˜˜a˜S 1 #¨ sÐ+ˆØ×Ñœt¡J¨q£MÓ2°HÔ=Ü�J‰JÒGÓHˆàØˆCØˆCØ�ˆFØˆCØ�ˆFØ�ˆFÚØˆCØ�ˆFØˆCØ�ˆFØˆCØˆCð
ˆð  	×Ñœt¡J¨q£MÓ2°HÔ=Ü�J‰JÒ?Ó@ˆàØˆCØˆCØˆCØ�ˆFØ�ˆFØˆCØˆCØ�ˆFØ�ˆFØ�ˆFÚÚØ�ˆFØˆCð
ˆð" 	×Ñœt¡J¨q£MÓ2°HÔ=Ü�J‰J˜A˜q˜6 q c¨q¨c°q°cÑ:Ó;ˆØ˜˜˜a˜S 1 #¨ s¨Q°¨F°Q¸°F¸Q¸CÐ@ˆØ×Ñœt¡J¨q£MÓ2°HÔ=Ü�J‰J‹LˆØ×Ñœt¡J¨q£MÓ2°R°DÔ9Ü�J‰J‹LˆØ	×ÑšÔ#Ø˜˜˜a˜S 1 a &¨1¨#°°1¨v¸¸1°vºyÐIˆØ×Ñœt¡J¨q£MÓ2°HÔ=ô	'ô �H‰HÒ-Ó.ˆÜ�‰”b×/Ñ/°°AÔ6Ü�J‰JÒ/Ó0ˆÜ�‰”b×+Ñ+¨Q°Õ2r   c                 ó  — t        j                  g d¢«      }t        t        j                  |«      «      g d¢k(  sJ ‚t        t        j                  |d„ ¬«      «      g d¢k(  sJ ‚t        t        j                  |d„ ¬«      «      g d¢k(  sJ ‚y )N)r   r   rÎ   r0   rÃ   )r   r   r    r"   r$   r&   c                 ó   — | S r   rY   ©r™   s    r   ú<lambda>z?TestDAG.test_lexicographical_topological_sort.<locals>.<lambda>  s   € È€ r   ©Úkeyc                 ó   — |  S r   rY   r   s    r   r  z?TestDAG.test_lexicographical_topological_sort.<locals>.<lambda>  s   € È!È€ r   )r   r$   r"   r   r&   r    )r   r   r…   rl   r   s     r   Ú%test_lexicographical_topological_sortz-TestDAG.test_lexicographical_topological_sort  s†   € Ü�J‰JÒ?Ó@ˆÜ”B×7Ñ7¸Ó:Ó;Ò?QÒQÐQÐQÜ”B×7Ñ7¸¹{ÔKÓLò Q
ò 
ð 	
ð 
ô ”B×7Ñ7¸¹|ÔLÓMò R
ò 
ð 	
ñ 
r   c                 ó  ‡—  G d„ d«      }d„ }t        d«      D �cg c]
  } ||«      ‘Œ c}Št        j                  «       }g d¢}|j                  ˆfd„|D «       «       t	        t        j
                  ||¬«      «      }|‰k(  sJ ‚yc c}w )	zª
        Check the case of two or more nodes with same key value.
        Want to avoid exception raised due to comparing nodes directly.
        See Issue #3493
        c                   ó   — e Zd Zd„ Zd„ Zy)úATestDAG.test_lexicographical_topological_sort2.<locals>.Test_Nodec                 ó    — || _         d| _        y )Nr   )ÚlabelÚpriority)r   rC   s     r   Ú__init__zJTestDAG.test_lexicographical_topological_sort2.<locals>.Test_Node.__init__  s   € Ø�”
Ø !�•r   c                 ó"   — d| j                   › d�S )NzNode(ú))r
  ©r   s    r   Ú__repr__zJTestDAG.test_lexicographical_topological_sort2.<locals>.Test_Node.__repr__"  s   € Ø˜tŸz™z˜l¨!Ð,Ð,r   N)rU   rV   rW   r  r  rY   r   r   Ú	Test_Noder    s   „ ò"ó-r   r  c                 ó   — | j                   S r   )r  )Únodes    r   Úsorting_keyzCTestDAG.test_lexicographical_topological_sort2.<locals>.sorting_key%  s   € Ø—=‘=Ð r   r"   )©r   r   ©r   r   )r   r    r   c              3   ó8   •K  — | ]  \  }}‰|   ‰|   f–— Œ y ­wr   rY   )rÜ   rÕ   rÖ   Ú
test_nodess      €r   rÝ   zATestDAG.test_lexicographical_topological_sort2.<locals>.<genexpr>+  s"   øè ø€ ÒJ¹D¸A¸q˜* Q™-¨°A©Ô7ÑJùs   ƒr  N)r@   r   r   rŒ   r…   rl   )r   r  r  rC   r   r)   Úsortingr  s          @r   Ú&test_lexicographical_topological_sort2z.TestDAG.test_lexicographical_topological_sort2  sz   ø€ ÷	-ñ 	-ò	!ô -2°!«HÖ5 q‘i •lÒ5ˆ
Ü�J‰J‹LˆÚ0ˆØ	×ÑÓJÀEÔJÔJä”r×:Ñ:¸1À+ÔNÓOˆØ˜*Ò$Ð$Ñ$ùò 6s   œBN)rU   rV   rW   Úclassmethodri   rr   rx   r€   rŽ   r‘   r“   r£   r§   r¬   r·   rº   r¼   rÀ   rÈ   rË   ræ   rè   rî   rñ   r÷   rý   r  r  rY   r   r   rf   rf   ‰   s•   „ Øñó ðòKò*Jò0ò,Pò$Jò6ò
Cò>Gò
òDò&
ò
òMò9ò;ò&>òP/MòbBò.
Jò$ò
:3òx
ó(%r   rf   c            
      ó¾  — t        j                  ddgddgdgg ddgg g dœ«      j                  «       } t        j                  | «      D �cg c]  }t	        |«      ‘Œ }}g d¢ddgdgd	gg}||k(  sJ ‚t        j
                  | j                  «      }|j                  dd	«       t        j                  |«      D �cg c]  }t	        |«      ‘Œ }}||k(  sJ ‚y c c}w c c}w )
Nr   r    r"   r$   r'   r&   )r   r   r    r"   r$   r&   r'   )r"   r&   r'   r   )r   r   ÚreverseÚtopological_generationsr«   rH   r)   rB   )r   ÚgenÚgenerationsÚexpectedÚMGs        r   Útest_topological_generationsr#  1  sÞ   € Ü
�
‰
Ø�ˆF˜˜1�v 1 #¨"°!°Q°¸BÀ2ÑFó	ç�gƒið ô +-×*DÑ*DÀQÓ*GÖH 3”6˜#•;ÐH€KÐHÚ˜A˜q˜6 A 3¨¨Ð,€HØ˜(Ò"Ð"Ð"ä	�‰˜Ÿ™Ó	!€BØ‡K�K��1ÔÜ*,×*DÑ*DÀRÓ*HÖI 3”6˜#•;ÐI€KÐIØ˜(Ò"Ð"Ñ"ùò Iùò Js   Á
CÂ9Cc                  ór   — t        j                  «       } t        t        j                  | «      «      g k(  sJ ‚y r   )r   r   r…   r  r²   s    r   Ú"test_topological_generations_emptyr%  @  s+   € Ü
�
‰
‹€AÜ”×*Ñ*¨1Ó-Ó.°"Ò4Ð4Ñ4r   c                  óì   — t        j                  ddgddgddgg«      } t        j                  t         j                  «      5  t        t        j                  | «      «       d d d «       y # 1 sw Y   y xY w)Nr   r   r    )r   r   r;   r<   rn   r…   r  r²   s    r   Ú"test_topological_generations_cycler'  E  s]   € Ü
�
‰
�Q˜�F˜Q ˜F Q¨ FÐ+Ó,€AÜ	�‰”r×,Ñ,Ó	-ñ ,ÜŒR×'Ñ'¨Ó*Ô+÷,÷ ,ñ ,ús   ÁA*Á*A3c                  óŠ   — t        j                  «       } t        j                  | g d¢«       t        j                  | «      rJ ‚y )N©r   r   r    r"   ©r   r   Ú	add_cycleÚis_aperiodicr²   s    r   Útest_is_aperiodic_cycler-  K  s0   € Ü
�
‰
‹€AÜ‡L�L�’LÔ!Ü�‰˜qÔ!Ð!Ð!Ð!r   c                  óº   — t        j                  «       } t        j                  | g d¢«       t        j                  | g d¢«       t        j                  | «      sJ ‚y )Nr)  )r    r"   r$   r&   r'   r*  r²   s    r   Útest_is_aperiodic_cycle2r/  Q  s;   € Ü
�
‰
‹€AÜ‡L�L�’LÔ!Ü‡L�L�’OÔ$Ü�?‰?˜1ÔÐÑr   c                  óº   — t        j                  «       } t        j                  | g d¢«       t        j                  | g d¢«       t        j                  | «      rJ ‚y )Nr)  )r    r"   r$   r&   r*  r²   s    r   Útest_is_aperiodic_cycle3r1  X  s>   € Ü
�
‰
‹€AÜ‡L�L�’LÔ!Ü‡L�L�’LÔ!Ü�‰˜qÔ!Ð!Ð!Ð!r   c                  ó®   — t        j                  «       } t        j                  | g d¢«       | j                  dd«       t        j                  | «      sJ ‚y )Nr)  r   r    ©r   r   r+  rB   r,  r²   s    r   Útest_is_aperiodic_cycle4r4  _  ó;   € Ü
�
‰
‹€AÜ‡L�L�’LÔ!Ø‡J�Jˆq�!ÔÜ�?‰?˜1ÔÐÑr   c                  ó®   — t        j                  «       } t        j                  | g d¢«       | j                  dd«       t        j                  | «      sJ ‚y )Nr)  r   r3  r²   s    r   Útest_is_aperiodic_selfloopr7  f  r5  r   c                  ó’   — t        j                  «       } t        j                  t         j                  t         j
                  | «       y r   )r   r:   r;   r<   r�   r,  r²   s    r   Ú#test_is_aperiodic_undirected_raisesr9  m  s'   € Ü
�‰‹
€AÜ
‡M�M”"×"Ñ"¤B§O¡O°QÕ7r   c                  óê   — t        j                  t         j                  ¬«      } t        j                  t         j
                  d¬«      5  t        j                  | «       d d d «       y # 1 sw Y   y xY w)N©Úcreate_usingzGraph has no nodes.©Úmatch)r   Úempty_graphr   r;   r<   ÚNetworkXPointlessConceptr,  r²   s    r   Útest_is_aperiodic_empty_graphrA  r  sJ   € Ü
�‰¤B§J¡JÔ/€AÜ	�‰”r×2Ñ2Ð:OÔ	Pñ Ü
�‰˜Ô÷÷ ñ ús   Á
A)Á)A2c                  ó€   — t        j                  t        j                  «       «      } t        j                  | «      rJ ‚y r   )r   r   Údavis_southern_women_graphr,  r²   s    r   Útest_is_aperiodic_bipartiterD  x  s.   € ä
�
‰
”2×0Ñ0Ó2Ó3€AÜ�‰˜qÔ!Ð!Ð!Ð!r   c                  ó†   — t        j                  ddt        j                  «       ¬«      } t        j                  | «      rJ ‚y )Nr    é   r;  )r   Úfull_rary_treer   r,  r²   s    r   Útest_is_aperiodic_rary_treerH  ~  s1   € Ü
×Ñ˜!˜R¬b¯j©j«lÔ;€AÜ�‰˜qÔ!Ð!Ð!Ð!r   c                  ó0  — t        j                  «       } t        j                  | g d¢«       t        j                  | g d¢«       t        j                  | «      rJ ‚| j	                  dd«       | j	                  dd«       t        j                  | «      sJ ‚y )Nr)  )r$   r&   r'   rÄ   r   r    r$   r'   )r   r   r+  r,  rB   r²   s    r   Útest_is_aperiodic_disconnectedrJ  ƒ  si   € ä
�
‰
‹€AÜ‡L�L�’LÔ!Ü‡L�L�’LÔ!Ü�‰˜qÔ!Ð!Ð!Ø‡J�Jˆq�!ÔØ‡J�Jˆq�!ÔÜ�?‰?˜1ÔÐÑr   c                  ó®   — t        j                  «       } t        j                  | g d¢«       | j                  dd«       t        j                  | «      rJ ‚y )Nrù   r    r3  r²   s    r   Útest_is_aperiodic_disconnected2rL  Ž  s>   € Ü
�
‰
‹€AÜ‡L�L�’IÔØ‡J�Jˆq�!ÔÜ�‰˜qÔ!Ð!Ð!Ð!r   c                   ó@   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚTestDagToBranchingz>Unit tests for the :func:`networkx.dag_to_branching` function.c                 óè   — t        j                  g d¢«      }t        j                  |«      }t        j                  g d¢«      }t        j                  |«      sJ ‚t        j                  ||«      sJ ‚y)znTests that a directed acyclic graph with a single degree
        zero node produces an arborescence.

        )r  r  r/   r   )r  r/   r  r!   N)r   r   Údag_to_branchingÚis_arborescenceÚis_isomorphic©r   r   ÚBr!  s       r   Útest_single_rootz#TestDagToBranching.test_single_root˜  s\   € ô
 �J‰JÒ7Ó8ˆÜ×Ñ Ó"ˆÜ—:‘:Ò>Ó?ˆÜ×!Ñ! !Ô$Ð$Ð$Ü×Ñ  8Ô,Ð,Ñ,r   c                 ó  — t        j                  g d¢«      }t        j                  |«      }t        j                  g d¢«      }t        j                  |«      sJ ‚t        j                  |«      rJ ‚t        j
                  ||«      sJ ‚y)z¢Tests that a directed acyclic graph with multiple degree zero
        nodes creates an arborescence with multiple (weakly) connected
        components.

        )r  r  r/   r   )r$   r   )r  r/   r  r!   r%   )r&   r'   N)r   r   rP  Úis_branchingrQ  rR  rS  s       r   Útest_multiple_rootsz&TestDagToBranching.test_multiple_roots£  sn   € ô �J‰JÒ?Ó@ˆÜ×Ñ Ó"ˆÜ—:‘:ÒNÓOˆÜ�‰˜qÔ!Ð!Ð!Ü×%Ñ% aÔ(Ð(Ð(Ü×Ñ  8Ô,Ð,Ñ,r   c                 ó²   — t        j                  ddt        j                  «       ¬«      }t        j                  |«      }t        j                  ||«      sJ ‚y)z„Tests that a directed acyclic graph that is already an
        arborescence produces an isomorphic arborescence as output.

        r   r;  N)r   Úbalanced_treer   rP  rR  )r   ÚArT  s      r   Útest_already_arborescencez,TestDagToBranching.test_already_arborescenceË  sD   € ô
 ×Ñ˜Q ´·
±
³Ô=ˆÜ×Ñ Ó"ˆÜ×Ñ  1Ô%Ð%Ñ%r   c                 ó2  — t        j                  ddt        j                  «       ¬«      }t        j                  ddt        j                  «       ¬«      }t        j                  ||«      }t        j                  |«      }t        j
                  ||«      sJ ‚y)z}Tests that a directed acyclic graph that is already a
        branching produces an isomorphic branching as output.

        r   r;  N)r   rZ  r   Údisjoint_unionrP  rR  )r   ÚT1ÚT2r   rT  s        r   Útest_already_branchingz)TestDagToBranching.test_already_branchingÔ  sp   € ô
 ×Ñ˜a ´·±³Ô>ˆÜ×Ñ˜a ´·±³Ô>ˆÜ×Ñ˜b "Ó%ˆÜ×Ñ Ó"ˆÜ×Ñ  1Ô%Ð%Ñ%r   c                 óÞ   — t        j                  t        j                  «      5  t        j                  t        dd¬«      «      }t        j                  |«       ddd«       y# 1 sw Y   yxY w)z3Tests that a non-acyclic graph causes an exception.ÚabcT)ÚcyclicN)r;   r<   r   Ú	HasACycler   r   rP  r   s     r   Útest_not_acyclicz#TestDagToBranching.test_not_acyclicß  sJ   € ä�]‰]œ2Ÿ<™<Ó(ñ 	#Ü—
‘
œ8 E°$Ô7Ó8ˆAÜ×Ñ Ô"÷	#÷ 	#ñ 	#ús   ¤6A#Á#A,c                 óÂ   — t        j                  t        j                  «      5  t        j                  t        j
                  «       «       d d d «       y # 1 sw Y   y xY wr   )r;   r<   r   r=   rP  r:   r  s    r   Útest_undirectedz"TestDagToBranching.test_undirectedå  s=   € Ü�]‰]œ2×4Ñ4Ó5ñ 	,Ü×Ñ¤§¡£
Ô+÷	,÷ 	,ñ 	,úó   ¤(AÁAc                 óÂ   — t        j                  t        j                  «      5  t        j                  t        j
                  «       «       d d d «       y # 1 sw Y   y xY wr   )r;   r<   r   r=   rP  rµ   r  s    r   Útest_multigraphz"TestDagToBranching.test_multigraphé  s=   € Ü�]‰]œ2×4Ñ4Ó5ñ 	1Ü×Ñ¤§¡£Ô0÷	1÷ 	1ñ 	1úri  c                 óÂ   — t        j                  t        j                  «      5  t        j                  t        j
                  «       «       d d d «       y # 1 sw Y   y xY wr   )r;   r<   r   r=   rP  rH   r  s    r   Útest_multidigraphz$TestDagToBranching.test_multidigraphí  s>   € Ü�]‰]œ2×4Ñ4Ó5ñ 	3Ü×Ñ¤§¡Ó 1Ô2÷	3÷ 	3ñ 	3úri  N)rU   rV   rW   rX   rU  rX  r\  ra  rf  rh  rk  rm  rY   r   r   rN  rN  •  s.   „ ÙHò	-ò-òP&ò	&ò#ò,ò1ó3r   rN  c                  ó¤   — t        j                  d«      } t        j                  | d«      t        j                  | d«      cxk(  xr h d£k(   yc  y)z^Regression test to ensure ancestors and descendants work as expected on
    undirected graphs.r$   r   >   r   r   r    r"   N)r   Ú
path_graphrÇ   rÊ   r²   s    r   Ú%test_ancestors_descendants_undirectedrp  ò  s5   € ô 	�‰�aÓ€AÜ‡L�L��AÓœ"Ÿ.™.¨¨AÓ.Ö>²,×>r   c                  óÊ   — t        j                  «       } t        j                  t         j                  d¬«      5  t        j
                  | «       d d d «       y # 1 sw Y   y xY w©Nzfor undirected typer=  )r   r:   r;   r<   r=   Úcompute_v_structuresr²   s    r   Útest_compute_v_structures_raisert  ù  sE   € Ü
�‰‹
€AÜ	�‰”r×0Ñ0Ð8MÔ	Nñ #Ü
×Ñ Ô"÷#÷ #ñ #ús   ºAÁA"c                  ó,  — g d¢} t        j                  | «      }t        t        j                  |«      «      }t	        |«      dk(  sJ ‚d|v sJ ‚g d¢} t        j                  | «      }t        t        j                  |«      «      }t	        |«      dk(  sJ ‚y )N©r  r  rÔ   r   ©r   r   r    )©r[  rT  ©ÚCrT  )rT  ÚD©r{  ÚE©r   r}  r   )r   r   r†   rs  Úlen)r)   r   Ú	v_structss      r   Útest_compute_v_structuresr�  ÿ  s„   € Ú$€EÜ
�
‰
�5Ó€Aä”B×+Ñ+¨AÓ.Ó/€IÜˆy‹>˜QÒÐÐØ˜	Ñ!Ð!Ð!âH€EÜ
�
‰
�5Ó€AÜ”B×+Ñ+¨AÓ.Ó/€IÜˆy‹>˜QÒÐÑr   c                  ó¨   — t        j                  «       } t        j                  «       5  t        j                  | «       d d d «       y # 1 sw Y   y xY wr   )r   r   r;   Údeprecated_callrs  r²   s    r   Ú$test_compute_v_structures_deprecatedr„    s<   € Ü
�
‰
‹€AÜ	×	Ñ	Ó	!ñ #Ü
×Ñ Ô"÷#÷ #ñ #ús   ©AÁAc                  óÞ   — t        j                  «       } t        j                  t         j                  d¬«      5  t         j
                  j                  | «       d d d «       y # 1 sw Y   y xY wrr  )r   r:   r;   r<   r=   rÆ   Úv_structuresr²   s    r   Útest_v_structures_raiser‡    sI   € Ü
�‰‹
€AÜ	�‰”r×0Ñ0Ð8MÔ	Nñ Ü
�‰×Ñ˜AÔ÷÷ ñ úó   º A#Á#A,)Úedgelistr!  rv  rw  )rx  ry  )r{  r   r|  r~  )r[  rT  rz  )r  r©   r  c                 óŒ   — t        j                  | «      }t        t         j                  j	                  |«      «      }||k(  sJ ‚y r   )r   r   r†   rÆ   r†  )r‰  r!  r   r€  s       r   Útest_v_structuresr‹    s9   € ô 	�
‰
�8Ó€AÜ”B—F‘F×'Ñ'¨Ó*Ó+€IØ˜Ò Ð Ñ r   c                  óÞ   — t        j                  «       } t        j                  t         j                  d¬«      5  t         j
                  j                  | «       d d d «       y # 1 sw Y   y xY wrr  )r   r:   r;   r<   r=   rÆ   Ú	collidersr²   s    r   Útest_colliders_raiserŽ  -  sI   € Ü
�‰‹
€AÜ	�‰”r×0Ñ0Ð8MÔ	Nñ Ü
�‰×Ñ˜Ô÷÷ ñ úrˆ  )r{  r}  r   c                 óŒ   — t        j                  | «      }t        t         j                  j	                  |«      «      }||k(  sJ ‚y r   )r   r   r†   rÆ   r�  )r‰  r!  r   r�  s       r   Útest_collidersr�  3  s9   € ô 	�
‰
�8Ó€AÜ”B—F‘F×$Ñ$ QÓ'Ó(€IØ˜Ò Ð Ñ r   ))Úcollectionsr   Ú	itertoolsr   r   r;   Únetworkxr   Únetworkx.utilsr   r   r   r   r[   rf   r#  r%  r'  r-  r/  r1  r4  r7  r9  rA  rD  rH  rJ  rL  rN  rp  rt  r�  r„  r‡  ÚmarkÚparametrizer†   r‹  rŽ  r�  rY   r   r   ú<module>r—     sU  ðÝ ß 0ã ã ß 0ò÷EEñ EE÷P-2ñ -2÷`e%ñ e%òP#ò5ò
,ò"òò"òòò8ò
ò"ò"ò
ò"÷Z3ñ Z3òz?ò#òò#òð ‡�×ÑØò %ØˆKð	
ò
 IØÐð	
ò 
"¡3£5Ð)ð
óñ!óð!òð ‡�×ÑØò %ØˆKð	
ò
 IØ˜oÐ.ð	
ð	óñ!óñ!r   