Ë
    ©Ó^j  ã                   óÎ   — 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                  ó.   — dg} t        | d„ «      dk(  sJ ‚y )Nr   c                 ó   — | dkD  S ©Nr   © ©Úxs    út/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_tournament.pyú<lambda>z.test_condition_not_satisfied.<locals>.<lambda>   s
   € ¨q°1©u€ ó    é   )r   )Úiter_ins    r   Útest_condition_not_satisfiedr      s   € Øˆc€GÜ˜G¡_Ó5¸Ò:Ð:Ñ:r   c                  óz   — t        j                  t        «      5  t        g d„ «       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>   s
   €  q¨1¡u€ r   )ÚpytestÚraisesÚ
ValueErrorr   r   r   r   Útest_empty_iterabler      s-   € Ü	�‰”zÓ	"ñ .Ü˜™_Ô-÷.÷ .ñ .ús   š1±: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_loopsr1   $   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_edgesr3   ,   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   Nr/   r+   s    r   Útest_bidirectional_edgesr5   6   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=   A   s-   € Ü�2‹Yò  ˆÜ˜aÓ ˆÜ˜QÕÐÐñ r   c                  óX   — t        d«      D ]  } t        dd¬«      }t        |«      rŒJ ‚ y )Nr7   r8   r   )Úseedr9   r;   s     r   Útest_graph_is_tournament_seedr@   G   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_noderC   M   ó   € Ü˜!Ó€AÜ˜ÔÐÑr   c                  ó4   — t        d«      } t        | «      sJ ‚y r   rB   r+   s    r   Ú"test_graph_is_tournament_zero_noderF   R   rD   r   c                  óJ   — t        t        «       «      } t        | «      dk(  sJ ‚y r   )r   r   Úlen)Úpaths    r   Útest_hamiltonian_empty_graphrJ   W   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>a   ó   øè ø€ Ò9™T˜Q ˆq�A�a‘DŒyÑ9ùó   ƒr   ©r   r*   r   rH   ÚallÚzip©rI   r,   s    @r   Útest_path_is_hamiltonianrZ   \   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    rL   c              3   ó2   •K  — | ]  \  }}|‰|   v –— Œ y ­wrN   r   rO   s      €r   rS   z)test_hamiltonian_cycle.<locals>.<genexpr>n   rT   rU   r   Nr   éÿÿÿÿrV   rY   s    @r   Útest_hamiltonian_cycler^   d   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_edgera   r   s%   € Ü��Ó€AÜ˜!Ó  A Ò&Ð&Ñ&r   c                  óB   — t        g d¢«      } t        | «      g d¢k(  sJ ‚y )N©r!   r"   )r#   r   )r   r   r   r`   r+   s    r   Útest_score_sequence_trianglerd   w   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_matrixrp   |   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.rc   r   r#   N©r   r   r+   s    r   Útest_reachable_pairrs   …   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rN   )Úsorted)rP   Úps     r   rS   z.test_same_node_is_reachable.<locals>.<genexpr>Ž   s   è ø€ Ò>˜a”�q—	Ñ>ùs   ‚r7   r#   c              3   ó8   •K  — | ]  }t        ‰||«      –— Œ y ­wrN   )r   )rP   rR   r,   s     €r   rS   z.test_same_node_is_reachable.<locals>.<genexpr>�   s   øè ø€ Ò0¨Œ|˜A˜q !×$Ñ0ùs   ƒN)r   r   r:   rW   r+   s   @r   Útest_same_node_is_reachablery   ‹   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   Nrr   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.rc   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-   r1   r3   r5   r=   r@   rC   rF   rJ   rZ   r^   ra   rd   rp   rs   ry   r|   r   r�   r   r   r   ú<module>r†      sŠ   ðÙ Få "ã å ÷	÷ 	ó 	ò;ò
.ò
ò ò ò ò ò òò
ò
ò
:ò"ò'ò
*ò
Eò!ò1ò%ò$ó(r   