Ë
    D^(h?  ã                   óÎ   — d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZm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)z@Unit tests for the :mod:`networkx.algorithms.tournament` module.é    )ÚcombinationsN)ÚDiGraph)Úhamiltonian_pathÚindex_satisfyingÚis_reachableÚis_strongly_connectedÚis_tournamentÚrandom_tournamentÚscore_sequenceÚtournament_matrixc                  ó2   — d„ } dg}t        || «      dk(  sJ ‚y )Nc                 ó   — | dkD  S ©Nr   © ©Úxs    úg/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_tournament.pyú<lambda>z.test_condition_not_satisfied.<locals>.<lambda>   ó
   € ˜!˜a™%€ ó    r   é   )r   )Ú	conditionÚiter_ins     r   Útest_condition_not_satisfiedr      s#   € Ù€IØˆc€GÜ˜G YÓ/°1Ò4Ð4Ñ4r   c                  ó~   — d„ } t        j                  t        «      5  t        g | «       d d d «       y # 1 sw Y   y xY w)Nc                 ó   — | dkD  S r   r   r   s    r   r   z%test_empty_iterable.<locals>.<lambda>   r   r   )ÚpytestÚraisesÚ
ValueErrorr   )r   s    r   Útest_empty_iterabler       s2   € Ù€IÜ	�‰”zÓ	"ñ (Ü˜˜YÔ'÷(÷ (ñ (ús   �3³<c                  óX   — t        «       } | j                  g d¢«       t        | «      sJ ‚y )N©©r   r   ©r   é   ©r%   é   ©r'   r   ©r   r'   ©r   r%   ©r   Úadd_edges_fromr	   ©ÚGs    r   Útest_is_tournamentr/       s&   € Ü‹	€AØ×ÑÒEÔFÜ˜ÔÐÑr   c                  ó|   — t        «       } | j                  g d¢«       | j                  dd«       t        | «      rJ ‚y)z%A tournament must have no self-loops.r"   r   N©r   r,   Úadd_edger	   r-   s    r   Útest_self_loopsr3   &   s7   € ä‹	€AØ×ÑÒEÔFØ‡J�Jˆq�!ÔÜ˜QÔÐÐÐr   c                  óX   — t        «       } | j                  g d¢«       t        | «      rJ ‚y)zbA tournament must not have any pair of nodes without at least
    one edge joining the pair.

    )r#   r$   r&   r(   r)   Nr+   r-   s    r   Útest_missing_edgesr5   .   s+   € ô
 	‹	€AØ×ÑÒ=Ô>Ü˜QÔÐÐÐr   c                  ó|   — t        «       } | j                  g d¢«       | j                  dd«       t        | «      rJ ‚y)zcA tournament must not have any pair of nodes with greater
    than one edge joining the pair.

    r"   r   r   Nr1   r-   s    r   Útest_bidirectional_edgesr7   8   s9   € ô
 	‹	€AØ×ÑÒEÔFØ‡J�Jˆq�!ÔÜ˜QÔÐÐÐr   c                  óT   — t        d«      D ]  } t        d«      }t        |«      rŒJ ‚ y )Né
   é   ©Úranger
   r	   ©Ú_r.   s     r   Útest_graph_is_tournamentr?   C   s-   € Ü�2‹Yò  ˆÜ˜aÓ ˆÜ˜QÕÐÐñ r   c                  óX   — t        d«      D ]  } t        dd¬«      }t        |«      rŒJ ‚ y )Nr9   r:   r   )Úseedr;   r=   s     r   Útest_graph_is_tournament_seedrB   I   s/   € Ü�2‹Yò  ˆÜ˜a aÔ(ˆÜ˜QÕÐÐñ r   c                  ó4   — t        d«      } t        | «      sJ ‚y )Nr   ©r
   r	   r-   s    r   Ú!test_graph_is_tournament_one_noderE   O   ó   € Ü˜!Ó€AÜ˜ÔÐÑr   c                  ó4   — t        d«      } t        | «      sJ ‚y r   rD   r-   s    r   Ú"test_graph_is_tournament_zero_noderH   T   rF   r   c                  óJ   — t        t        «       «      } t        | «      dk(  sJ ‚y r   )r   r   Úlen)Úpaths    r   Útest_hamiltonian_empty_graphrL   Y   s   € ÜœG›IÓ&€DÜˆt‹9˜Š>Ð‰>r   c            	      ó¼   ‡— t        «       Š‰j                  g d¢«       t        ‰«      } t        | «      dk(  sJ ‚t	        ˆfd„t        | | dd  «      D «       «      sJ ‚y )Nr"   é   c              3   ó2   •K  — | ]  \  }}|‰|   v –— Œ y ­w©Nr   ©Ú.0ÚuÚvr.   s      €r   ú	<genexpr>z+test_path_is_hamiltonian.<locals>.<genexpr>c   ó   øè ø€ Ò9™T˜Q ˆq�A�a‘DŒyÑ9ùó   ƒr   ©r   r,   r   rJ   ÚallÚzip©rK   r.   s    @r   Útest_path_is_hamiltonianr\   ^   sT   ø€ Ü‹	€AØ×ÑÒEÔFÜ˜AÓ€DÜˆt‹9˜Š>Ðˆ>ÜÓ9¤S¨¨t°A°B¨xÓ%8Ô9Ô9Ð9Ñ9r   c            	      óÚ   ‡— t        «       Š‰j                  g d¢«       t        ‰«      } t        | «      dk(  sJ ‚t	        ˆfd„t        | | dd «      D «       «      sJ ‚| d   ‰| d      v sJ ‚y)z�Tests that :func:`networkx.tournament.hamiltonian_path`
    returns a Hamiltonian cycle when provided a strongly connected
    tournament.

    r"   rN   c              3   ó2   •K  — | ]  \  }}|‰|   v –— Œ y ­wrP   r   rQ   s      €r   rU   z)test_hamiltonian_cycle.<locals>.<genexpr>p   rV   rW   r   Nr   éÿÿÿÿrX   r[   s    @r   Útest_hamiltonian_cycler`   f   sp   ø€ ô 	‹	€AØ×ÑÒEÔFÜ˜AÓ€DÜˆt‹9˜Š>Ðˆ>ÜÓ9¤S¨¨t°A°B¨xÓ%8Ô9Ô9Ð9Ð9Ø�‰7�a˜˜R™‘kÑ!Ð!Ñ!r   c                  ó@   — t        dg«      } t        | «      ddgk(  sJ ‚y )Nr#   r   r   ©r   r   r-   s    r   Útest_score_sequence_edgerc   t   s%   € Ü��Ó€AÜ˜!Ó  A Ò&Ð&Ñ&r   c                  óB   — t        g d¢«      } t        | «      g d¢k(  sJ ‚y )N©r#   r$   )r%   r   )r   r   r   rb   r-   s    r   Útest_score_sequence_trianglerf   y   s    € ÜÒ(Ó)€AÜ˜!Ó¢	Ò)Ð)Ñ)r   c                  ó  — t        j                  d«      } t        j                  d«       | j                  }t        dg«      }t	        |«      }|j                  |j                  «       | j                  ddgddgg«      «       y )NÚnumpyÚscipyr#   r   r   r_   )r   ÚimportorskipÚtestingr   r   Úassert_array_equalÚtodenseÚarray)ÚnpÚnptr.   Úms       r   Útest_tournament_matrixrr   ~   sk   € Ü	×	Ñ	˜WÓ	%€BÜ
×Ñ˜Ô Ø
�*‰*€CÜ��Ó€AÜ˜!Ó€AØ×Ñ˜1Ÿ9™9›;¨¯©°1°a°&¸2¸q¸'Ð1BÓ(CÕDr   c                  ó<   — t        g d¢«      } t        | dd«      sJ ‚y)z$Tests for a reachable pair of nodes.re   r   r%   N©r   r   r-   s    r   Útest_reachable_pairru   ‡   s   € äÒ(Ó)€AÜ˜˜1˜aÔ Ð Ñ r   c                  ó|   ‡ — t        d„ t        t        d«      d«      D «       «      Š t        ˆ fd„‰ D «       «      sJ ‚y)z.Tests that a node is always reachable from it.c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrP   )Úsorted)rR   Úps     r   rU   z.test_same_node_is_reachable.<locals>.<genexpr>�   s   è ø€ Ò>˜a”�q—	Ñ>ùs   ‚r9   r%   c              3   ó8   •K  — | ]  }t        ‰||«      –— Œ y ­wrP   )r   )rR   rT   r.   s     €r   rU   z.test_same_node_is_reachable.<locals>.<genexpr>‘   s   øè ø€ Ò0¨Œ|˜A˜q !×$Ñ0ùs   ƒN)r   r   r<   rY   r-   s   @r   Útest_same_node_is_reachabler{   �   s4   ø€ ô 	Ñ>¤<´°b³	¸1Ó#=Ô>Ó>€AÜÓ0¨aÔ0Ô0Ð0Ñ0r   c                  ó<   — t        g d¢«      } t        | dd«      rJ ‚y)z'Tests for an unreachable pair of nodes.©r#   r*   r$   r   r   Nrt   r-   s    r   Útest_unreachable_pairr~   ”   s"   € äÒ(Ó)€AÜ˜A˜q !Ô$Ð$Ð$Ð$r   c                  ó8   — t        g d¢«      } t        | «      sJ ‚y)z*Tests for a strongly connected tournament.re   N©r   r   r-   s    r   Útest_is_strongly_connectedr�   š   s   € äÒ(Ó)€AÜ  Ô#Ð#Ñ#r   c                  ó8   — t        g d¢«      } t        | «      rJ ‚y)z6Tests for a tournament that is not strongly connected.r}   Nr€   r-   s    r   Útest_not_strongly_connectedrƒ       s   € äÒ(Ó)€AÜ$ QÔ'Ð'Ð'Ð'r   )$Ú__doc__Ú	itertoolsr   r   Únetworkxr   Únetworkx.algorithms.tournamentr   r   r   r   r	   r
   r   r   r   r    r/   r3   r5   r7   r?   rB   rE   rH   rL   r\   r`   rc   rf   rr   ru   r{   r~   r�   rƒ   r   r   r   ú<module>rˆ      sŠ   ðÙ Få "ã å ÷	÷ 	ó 	ò5ò(òò ò ò ò ò òò
ò
ò
:ò"ò'ò
*ò
Eò!ò1ò%ò$ó(r   