ó
    ™“,j�G  ã            	       óF  • S SK r S SKJr  S SKrS SKrS SKJr  \R                  R                  S\R                  \R                  \R                  45      \R                  R                  SS1S1SS1S	S145      S
 5       5       r\R                  R                  S\R                  \R                  \R                  45      \R                  R                  SSS1SS145      S 5       5       r\R                  R                  S\R                  \R                   \R"                  45      \R                  R                  S\R$                  \R&                  \R(                  45      S 5       5       r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      rg)é    N)Úpermutations)Úedges_equalÚfnÚedgeset)r   é   )r   r   ©é   é   )r   r   c                 óº   • [         R                  " S5      n[        R                  " [         R                  SS9   U " X!5        SSS5        g! , (       d  f       g= f)zOAll is_*matching functions have consistent exception message for node
not in G.é   zmatching.*with node not in G©ÚmatchN©ÚnxÚ
path_graphÚpytestÚraisesÚNetworkXError©r   r   ÚGs      ÚµC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\networkx/algorithms/tests/test_matching.pyÚtest_is_matching_node_not_in_Gr   
   s;   € ô 	�Š�aÓ€AÜ	�Š”r×'Ñ'Ð/MÓ	NÙ
ˆ1Œ÷ 
O×	NÖ	Núó   º	AÁ
A)r   é   r	   )r   c                 óº   • [         R                  " S5      n[        R                  " [         R                  SS9   U " X!5        SSS5        g! , (       d  f       g= f)z[All is_*matching functions have consistent exception message for invalid
edges in matching.r   z.*non-2-tuple edge.*r   Nr   r   s      r   Útest_is_matching_invalid_edger      s;   € ô 	�Š�aÓ€AÜ	�Š”r×'Ñ'Ð/EÓ	FÙ
ˆ1Œ÷ 
G×	FÖ	Fúr   Ú
graph_typec                 óž   • U" 5       n[         R                  " [        R                  5         U " U5        S S S 5        g ! , (       d  f       g = f©N)r   r   r   ÚNetworkXNotImplemented)r   r   r   s      r   Útest_wrong_graph_typer!   0   s0   € ñ
 	‹€AÜ	�Š”r×0Ñ0Õ	1Ù
ˆ1Œ÷ 
2×	1Ö	1ús	   ¬	>¾
Ac                   óœ   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)ÚTestMaxWeightMatchingé:   zXUnit tests for the
:func:`~networkx.algorithms.matching.max_weight_matching` function.

c                 ó¾   • [         R                  " 5       n[         R                  " U5      [        5       :X  d   e[         R                  " U5      [        5       :X  d   eg)zEmpty graphN)r   ÚGraphÚmax_weight_matchingÚsetÚmin_weight_matching©Úselfr   s     r   Útest_trivial1Ú#TestMaxWeightMatching.test_trivial1@   sC   € ä�HŠH‹JˆÜ×%Ò% aÓ(¬C«EÓ1Ð1Ð1Ü×%Ò% aÓ(¬C«EÓ1Ð1Ñ1ó    c                 óà   • [         R                  " 5       nUR                  SSSS9  [         R                  " U5      [	        5       :X  d   e[         R
                  " U5      [	        5       :X  d   eg )Nr   éd   ©Úweight)r   r&   Úadd_edger'   r(   r)   r*   s     r   Útest_selfloopÚ#TestMaxWeightMatching.test_selfloopF   sU   € Ü�HŠH‹JˆØ	�
‰
�1�a ˆ
Ñ$Ü×%Ò% aÓ(¬C«EÓ1Ð1Ð1Ü×%Ò% aÓ(¬C«EÓ1Ð1Ñ1r.   c                 óò   • [         R                  " 5       nUR                  SS5        [        [         R                  " U5      S15      (       d   e[        [         R
                  " U5      S15      (       d   eg )Nr   r   ©r   r   ©r   r&   r3   r   r'   r)   r*   s     r   Útest_single_edgeÚ&TestMaxWeightMatching.test_single_edgeL   s[   € Ü�HŠH‹JˆØ	�
‰
�1�aÔÜœ2×1Ò1°!Ó4°v°h×?Ñ?Ð?Ð?Üœ2×1Ò1°!Ó4°v°h×?Ñ?Ð?Ñ?r.   c                 ó  • [         R                  " 5       nUR                  SSSS9  UR                  SSSS9  [        [         R                  " U5      S15      (       d   e[        [         R
                  " U5      S15      (       d   eg )	NÚoneÚtwoé
   r1   Úthreeé   ©r=   r?   ©r<   r=   r8   r*   s     r   Útest_two_pathÚ#TestMaxWeightMatching.test_two_pathR   st   € Ü�HŠH‹JˆØ	�
‰
�5˜%¨ˆ
Ñ+Ø	�
‰
�5˜'¨"ˆ
Ñ-Üœ2×1Ò1°!Ó4Ð7GÐ6H×IÑIÐIÐIÜœ2×1Ò1°!Ó4°~Ð6F×GÑGÐGÑGr.   c                 óÖ  • [         R                  " 5       nUR                  SSSS9  UR                  SSSS9  UR                  SSSS9  [        [         R                  " U5      S15      (       d   e[        [         R                  " US S9S	S
15      (       d   e[        [         R
                  " U5      S	S
15      (       d   e[        [         R
                  " US S9S	S
15      (       d   eg )Nr   r	   r   r1   r
   r@   r   r   ©r   r	   ©r
   r   r8   r*   s     r   Ú	test_pathÚTestMaxWeightMatching.test_pathY   sÐ   € Ü�HŠH‹JˆØ	�
‰
�1�a ˆ
Ñ"Ø	�
‰
�1�a ˆ
Ñ#Ø	�
‰
�1�a ˆ
Ñ"Üœ2×1Ò1°!Ó4°v°h×?Ñ?Ð?Ð?Üœ2×1Ò1°!¸DÑAÀFÈFÐCS×TÑTÐTÐTÜœ2×1Ò1°!Ó4°v¸vÐ6F×GÑGÐGÐGÜœ2×1Ò1°!¸DÑAÀFÈFÐCS×TÑTÐTÑTr.   c                 óZ  • [         R                  " 5       nUR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  [        [         R                  " U5      SS15      (       d   e[        [         R
                  " U5      SS	15      (       d   eg )
Nr   r   r	   r1   r
   rF   rG   ©r   r   r   r8   r*   s     r   Útest_squareÚ!TestMaxWeightMatching.test_squarec   s›   € Ü�HŠH‹JˆØ	�
‰
�1�a ˆ
Ñ"Ø	�
‰
�1�a ˆ
Ñ"Ø	�
‰
�1�a ˆ
Ñ"Ø	�
‰
�1�a ˆ
Ñ"Üœ2×1Ò1°!Ó4°v¸vÐ6F×GÑGÐGÐGÜœ2×1Ò1°!Ó4°v¸vÐ6F×GÑGÐGÑGr.   c                 ó  • [         R                  " 5       nUR                  SSSSS9  UR                  SSSSS9  [        [         R                  " USS9S	15      (       d   e[        [         R
                  " USS9S
15      (       d   eg )Nr<   r=   r>   r@   )r2   Úabcdr?   rO   r1   rB   rA   r8   r*   s     r   Útest_edge_attribute_nameÚ.TestMaxWeightMatching.test_edge_attribute_namel   s|   € Ü�HŠH‹JˆØ	�
‰
�5˜%¨°ˆ
Ñ4Ø	�
‰
�5˜'¨"°2ˆ
Ñ6Üœ2×1Ò1°!¸FÑCÀnÐEU×VÑVÐVÐVÜœ2×1Ò1°!¸FÑCÐFVÐEW×XÑXÐXÑXr.   c                 óÆ  • [         R                  " 5       nUR                  SS[        R                  S9  UR                  SS[        R
                  " S5      S9  UR                  SSSS9  UR                  SS[        R                  " S5      S9  [        [         R                  " U5      SS	15      (       d   e[        [         R                  " U5      SS	15      (       d   eg )
Nr   r	   r1   r
   g      @r   g       @rK   r   )
r   r&   r3   ÚmathÚpiÚexpÚsqrtr   r'   r)   r*   s     r   Útest_floating_point_weightsÚ1TestMaxWeightMatching.test_floating_point_weightss   s¯   € Ü�HŠH‹JˆØ	�
‰
�1�a¤§¡ˆ
Ñ(Ø	�
‰
�1�a¤§¢¨£ˆ
Ñ,Ø	�
‰
�1�a ˆ
Ñ$Ø	�
‰
�1�a¤§	¢	¨#£ˆ
Ñ/Üœ2×1Ò1°!Ó4°v¸vÐ6F×GÑGÐGÐGÜœ2×1Ò1°!Ó4°v¸vÐ6F×GÑGÐGÑGr.   c                 óÊ  • [         R                  " 5       nUR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  [        [         R                  " U5      S	15      (       d   e[        [         R                  " US
S9SS15      (       d   e[        [         R
                  " U5      S	S15      (       d   eg )Nr   r	   r1   r
   éþÿÿÿr   éÿÿÿÿiúÿÿÿrF   T)Úmaxcardinality©r   r
   ©r	   r   rG   r8   r*   s     r   Útest_negative_weightsÚ+TestMaxWeightMatching.test_negative_weights|   sÚ   € Ü�HŠH‹JˆØ	�
‰
�1�a ˆ
Ñ"Ø	�
‰
�1�a ˆ
Ñ#Ø	�
‰
�1�a ˆ
Ñ"Ø	�
‰
�1�a ˆ
Ñ#Ø	�
‰
�1�a ˆ
Ñ#Üœ2×1Ò1°!Ó4°v°h×?Ñ?Ð?Ð?ÜÜ×"Ò" 1°TÑ:¸VÀVÐ<L÷
ñ 
ð 	
ð 
ô œ2×1Ò1°!Ó4°v¸vÐ6F×GÑGÐGÑGr.   c                 óÂ  • [         R                  " 5       nUR                  / SQ5        SS1n[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eUR                  SS/5        1 Skn[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eg)z-Create S-blossom and use it for augmentation:)©r   r	   é   ©r   r
   é	   ©r	   r
   r>   )r
   r   é   rF   rG   )r   é   r   )r   r   rh   ¾   ©r   rh   r   ©r   r   N©r   r&   Úadd_weighted_edges_fromr   r'   r)   ©r+   r   Úanswers      r   Útest_s_blossomÚ$TestMaxWeightMatching.test_s_blossom‰   s¶   € ä�HŠH‹JˆØ	×!Ñ!Ò"OÔPØ˜&Ð!ˆÜœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=à	×!Ñ! 9¨iÐ"8Ô9Ú)ˆÜœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ñ=r.   c                 óÂ  • [         R                  " 5       nUR                  / SQ5        1 Skn[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eUR                  SSSS9  UR                  SSSS9  [        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eUR                  SS5        UR                  SSSS9  1 S	kn[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eg
)z=Create S-blossom, relabel as T-blossom, use for augmentation:)©r   r	   re   ©r   r
   rc   rf   )r   r   r   )r   r   r   )r   rh   r
   ri   r   r   r
   r1   r   rh   >   rF   ©r
   rh   rk   N)r   r&   rm   r   r'   r)   r3   Úremove_edgern   s      r   Útest_s_t_blossomÚ&TestMaxWeightMatching.test_s_t_blossom–   s"  € ä�HŠH‹JˆØ	×!Ñ!ÚOô	
ò *ˆÜœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=à	�
‰
�1�a ˆ
Ñ"Ø	�
‰
�1�a ˆ
Ñ"Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=à	�‰�a˜ÔØ	�
‰
�1�a ˆ
Ñ"Ú)ˆÜœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ñ=r.   c                 óˆ  • [         R                  " 5       nUR                  / SQ5        1 SknU Vs1 s H  n[        U5      iM     nn[         R                  " U5       Vs1 s H  n[        U5      iM     nnXT:X  d   e[         R
                  " U5       Vs1 s H  n[        U5      iM     nnXT:X  d   egs  snf s  snf s  snf )z.Create nested S-blossom, use for augmentation:)rs   rd   rf   )r	   r   rc   )r
   r   rc   )r   r   r>   )r   rh   rh   >   r]   r^   ©r   rh   N)r   r&   rm   Ú	frozensetr'   r)   )r+   r   Úexpected_edgesetÚeÚexpectedro   s         r   Útest_nested_s_blossomÚ+TestMaxWeightMatching.test_nested_s_blossom«   s±   € ô �HŠH‹JˆØ	×!Ñ!òô
	
ò 4ÐÙ*:Ó;Ò*: Q”I˜a–LÑ*:ˆÐ;Ü(*×(>Ò(>¸qÔ(AÓBÒ(A 1”)˜A–,Ñ(AˆÐBØÓ!Ð!Ð!Ü(*×(>Ò(>¸qÔ(AÓBÒ(A 1”)˜A–,Ñ(AˆÐBØÓ!Ð!Ñ!ùò	 <ùÚBùâBs   ±B5Á B:ÂB?c                 óø   • [         R                  " 5       nUR                  / SQ5        1 Skn[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eg)z<Create S-blossom, relabel as S, include in nested S-blossom:)	)r   r	   r>   )r   rg   r>   )r	   r
   é   )r
   r   é   )r
   r   rƒ   ©r   r   é   )r   rh   r>   )rh   rg   r>   )rg   rc   rc   >   rF   rG   rz   ©rg   rc   Nrl   rn   s      r   Útest_nested_s_blossom_relabelÚ3TestMaxWeightMatching.test_nested_s_blossom_relabelÁ   óc   € ä�HŠH‹JˆØ	×!Ñ!ò
ô	
ò 2ˆÜœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ñ=r.   c                 óø   • [         R                  " 5       nUR                  / SQ5        1 Skn[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eg)z5Create nested S-blossom, augment, expand recursively:)
rb   rt   rf   )r	   r   r‚   )r
   r   r‚   )r   r   é   )r   rh   r‚   )r   rg   r‚   )rh   rg   r‹   )rg   rc   r‚   >   rF   ©r
   r   ©r   rh   r†   Nrl   rn   s      r   Útest_nested_s_blossom_expandÚ2TestMaxWeightMatching.test_nested_s_blossom_expandÕ   sc   € ä�HŠH‹JˆØ	×!Ñ!òô	
ò 2ˆÜœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ñ=r.   c                 óø   • [         R                  " 5       nUR                  / SQ5        1 Skn[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eg)z'Create S-blossom, relabel as T, expand:))r   r	   é   )r   r   é   )r   rh   é   ©r	   r
   r…   )r
   r   r’   r„   )r   rc   r‹   )r   rg   é   >   rj   r   ©r   rc   ©r   rg   Nrl   rn   s      r   Útest_s_blossom_relabel_expandÚ3TestMaxWeightMatching.test_s_blossom_relabel_expandê   sc   € ä�HŠH‹JˆØ	×!Ñ!ò	ô	
ò 2ˆÜœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ñ=r.   c                 óø   • [         R                  " 5       nUR                  / SQ5        1 Skn[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eg)z.Create nested S-blossom, relabel as T, expand:)	)r   r	   é   )r   r
   rƒ   )r   rc   rc   r”   )r	   r   é   )r
   r   rœ   )r   r   r•   )r   rg   rg   )r   rh   rg   >   ©r   rc   r   ©r   rg   rz   Nrl   rn   s      r   Ú$test_nested_s_blossom_relabel_expandÚ:TestMaxWeightMatching.test_nested_s_blossom_relabel_expandý   r‰   r.   c                 óø   • [         R                  " 5       nUR                  / SQ5        1 Skn[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eg)zDCreate blossom, relabel as T in more than one way, expand,
augment:
)
©r   r	   é-   ©r   r   r£   ©r	   r
   é2   ©r
   r   r£   ©r   r   r¦   ©r   rh   é   ©r
   re   é#   )r   rc   r¬   ©r   rg   é   ©re   r>   r   ¾   rj   r   r–   r—   ©re   r>   Nrl   rn   s      r   Útest_nasty_blossom1Ú)TestMaxWeightMatching.test_nasty_blossom1  óe   € ô �HŠH‹JˆØ	×!Ñ!òô	
ò ;ˆÜœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ñ=r.   c                 óø   • [         R                  " 5       nUR                  / SQ5        1 Skn[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eg)zAgain but slightly different:)
r¢   r¤   r¥   r§   r¨   r©   r«   )r   rc   r®   )r   rg   é(   r¯   r°   Nrl   rn   s      r   Útest_nasty_blossom2Ú)TestMaxWeightMatching.test_nasty_blossom2(  sc   € ä�HŠH‹JˆØ	×!Ñ!òô	
ò ;ˆÜœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ñ=r.   c                 óø   • [         R                  " 5       nUR                  / SQ5        1 Skn[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eg)zeCreate blossom, relabel as T, expand such that a new
least-slack S-to-free dge is produced, augment:
)
r¢   r¤   r¥   r§   r¨   r©   r«   )r   rc   é   r­   r¯   r°   Nrl   rn   s      r   Útest_nasty_blossom_least_slackÚ4TestMaxWeightMatching.test_nasty_blossom_least_slack=  r´   r.   c                 óø   • [         R                  " 5       nUR                  / SQ5        1 Skn[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eg)z8Create nested blossom, relabel as T in more than one way)r¢   )r   rg   r£   r¥   r§   )r   r   é_   )r   rh   é^   )r   rh   r¿   )rh   rg   r¦   )r   rc   rª   )r
   r@   r¬   )r   re   é$   )rg   r>   r®   )r@   r‚   r   >   r�   r   r�   ©r   re   ©rg   r>   ©r@   r‚   Nrl   rn   s      r   Útest_nasty_blossom_augmentingÚ3TestMaxWeightMatching.test_nasty_blossom_augmentingT  sf   € ô �HŠH‹JˆØ	×!Ñ!òô	
ò" EˆÜœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ñ=r.   c                 óø   • [         R                  " 5       nUR                  / SQ5        1 Skn[        [         R                  " U5      U5      (       d   e[        [         R
                  " U5      U5      (       d   eg)z:Create nested S-blossom, relabel as S, expand recursively:))r   r	   r¶   )r   r
   r¶   )r	   r
   é<   )r	   r   é7   )r
   r   rÈ   r¨   )r   rc   r“   )r   rg   rª   )rg   rh   r>   )rc   r>   r>   )r   re   rª   >   rF   rŒ   ©r   re   ©rh   rg   ©rc   r>   Nrl   rn   s      r   Ú%test_nasty_blossom_expand_recursivelyÚ;TestMaxWeightMatching.test_nasty_blossom_expand_recursivelyn  sc   € ä�HŠH‹JˆØ	×!Ñ!òô	
ò ;ˆÜœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ð=Üœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ñ=r.   c                 óª   • [         R                  " 5       nUR                  / SQ5        SS1n[        [         R                  " U5      U5      (       d   eg )N))r   r	   iè  )r	   r
   r	   )r
   r   i¸  rF   rG   )r   r&   rm   r   r)   rn   s      r   Ú(test_min_weight_matching_max_cardinalityÚ>TestMaxWeightMatching.test_min_weight_matching_max_cardinality„  sF   € Ü�HŠH‹JˆØ	×!Ñ!Ò"IÔJð ˜&Ð!ˆÜœ2×1Ò1°!Ó4°f×=Ñ=Ð=Ñ=r.   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r,   r4   r9   rC   rH   rL   rP   rW   r_   rp   rw   r   r‡   rŽ   r˜   rŸ   r²   r·   r»   rÄ   rÌ   rÏ   Ú__static_attributes__rÑ   r.   r   r#   r#   :   s|   † ñò
2ò2ò@òHòUòHòYòHòHò>ò>ò*"ò,>ò(>ò*>ò&>ò(>ò.>ò*>ò.>ò4>õ,>r.   r#   c                   óH   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)ÚTestIsMatchingi�  zPUnit tests for the
:func:`~networkx.algorithms.matching.is_matching` function.

c                 óv   • [         R                  " S5      n[         R                  " USSSSS.5      (       d   eg ©Nr   r   r   r
   r	   )r   r   r	   r
   ©r   r   Úis_matchingr*   s     r   Ú	test_dictÚTestIsMatching.test_dict“  s0   € Ü�MŠM˜!ÓˆÜ�~Š~˜a Q¨1°°qÑ!9×:Ñ:Ð:Ñ:r.   c                 ó|   • [         R                  " S5      n[         R                  " U[        5       5      (       d   eg )Nr   )r   r   rÝ   r(   r*   s     r   Útest_empty_matchingÚ"TestIsMatching.test_empty_matching—  s)   € Ü�MŠM˜!ÓˆÜ�~Š~˜a¤£×'Ñ'Ð'Ñ'r.   c                 ón   • [         R                  " S5      n[         R                  " US15      (       d   eg )Nr   rF   rÜ   r*   s     r   r9   ÚTestIsMatching.test_single_edge›  s)   € Ü�MŠM˜!ÓˆÜ�~Š~˜a & ×*Ñ*Ð*Ñ*r.   c                 ó0  • [         R                  " S5      n[         R                  " USS15      (       d   e[         R                  " USS15      (       d   e[         R                  " USS15      (       d   e[         R                  " USS15      (       d   eg )Nr   r7   r   ©r   r   )r
   r	   rÜ   r*   s     r   Útest_edge_orderÚTestIsMatching.test_edge_orderŸ  s€   € Ü�MŠM˜!ÓˆÜ�~Š~˜a &¨&Ð!1×2Ñ2Ð2Ð2Ü�~Š~˜a &¨&Ð!1×2Ñ2Ð2Ð2Ü�~Š~˜a &¨&Ð!1×2Ñ2Ð2Ð2Ü�~Š~˜a &¨&Ð!1×2Ñ2Ð2Ñ2r.   c                 óp   • [         R                  " S5      n[         R                  " USS15      (       d   eg ©Nr   r7   r   rÜ   r*   s     r   Útest_valid_matchingÚ"TestIsMatching.test_valid_matching¦  s,   € Ü�MŠM˜!ÓˆÜ�~Š~˜a &¨&Ð!1×2Ñ2Ð2Ñ2r.   c                 óÔ   • [         R                  " S5      n[         R                  " U1 Sk5      (       a   eUR                  SS5        [         R                  " USS15      (       a   eg ©Nr   >   ©r   r   rF   r   r   rï   rF   )r   r   rÝ   r3   r*   s     r   Útest_selfloopsÚTestIsMatching.test_selfloopsª  sU   € Ü�MŠM˜!Óˆä—>’> !Ò%=×>Ñ>Ð>Ð>à	�
‰
�1�aÔÜ—>’> ! f¨fÐ%5×6Ñ6Ð6Ð6Ð6r.   c                 óp   • [         R                  " S5      n[         R                  " U1 Sk5      (       a   eg )Nr   ¾   r7   rF   r   rÜ   r*   s     r   Útest_invalid_matchingÚ$TestIsMatching.test_invalid_matching²  s+   € Ü�MŠM˜!ÓˆÜ—>’> !Ò%=×>Ñ>Ð>Ð>Ð>r.   c                 ó,  • [         R                  " S5      n[         R                  " USS15      (       a   e[         R                  " UR                  5      n[         R                  " US15      (       d   e[         R                  " US15      (       a   eg )Nr   ©r   r
   rF   r7   ræ   )r   r   rÝ   ÚDiGraphÚedgesr*   s     r   Útest_invalid_edgeÚ TestIsMatching.test_invalid_edge¶  ss   € Ü�MŠM˜!ÓˆÜ—>’> ! f¨fÐ%5×6Ñ6Ð6Ð6ä�JŠJ�q—w‘wÓˆÜ�~Š~˜a & ×*Ñ*Ð*Ð*Ü—>’> ! f X×.Ñ.Ð.Ð.Ð.r.   rÑ   N)rÒ   rÓ   rÔ   rÕ   rÖ   rÞ   rá   r9   rç   rë   rð   rô   rú   r×   rÑ   r.   r   rÙ   rÙ   �  s/   † ñò
;ò(ò+ò3ò3ò7ò?õ/r.   rÙ   c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚTestIsMaximalMatchingi¿  zXUnit tests for the
:func:`~networkx.algorithms.matching.is_maximal_matching` function.

c                 óv   • [         R                  " S5      n[         R                  " USSSSS.5      (       d   eg rÛ   ©r   r   Úis_maximal_matchingr*   s     r   rÞ   ÚTestIsMaximalMatching.test_dictÅ  ó2   € Ü�MŠM˜!ÓˆÜ×%Ò% a¨Q°1¸¸qÑ)A×BÑBÐBÑBr.   c                 óp   • [         R                  " S5      n[         R                  " USS15      (       d   eg rê   rÿ   r*   s     r   Ú
test_validÚ TestIsMaximalMatching.test_validÉ  ó.   € Ü�MŠM˜!ÓˆÜ×%Ò% a¨&°&Ð)9×:Ñ:Ð:Ñ:r.   c                 ó  • [         R                  " S5      n[         R                  " U1 Sk5      (       a   e[         R                  " US15      (       a   eUR                  SS5        [         R                  " US15      (       a   eg )Nr   ró   r÷   r   rï   )r   r   r   r3   r*   s     r   Útest_not_matchingÚ'TestIsMaximalMatching.test_not_matchingÍ  sq   € Ü�MŠM˜!ÓˆÜ×)Ò)¨!Ò-E×FÑFÐFÐFÜ×)Ò)¨!¨f¨X×6Ñ6Ð6Ð6Ø	�
‰
�1�aÔÜ×)Ò)¨!¨f¨X×6Ñ6Ð6Ð6Ð6r.   c                 ón   • [         R                  " S5      n[         R                  " US15      (       a   eg )Nr   r7   rÿ   r*   s     r   Útest_not_maximalÚ&TestIsMaximalMatching.test_not_maximalÔ  s.   € Ü�MŠM˜!ÓˆÜ×)Ò)¨!¨f¨X×6Ñ6Ð6Ð6Ð6r.   rÑ   N)
rÒ   rÓ   rÔ   rÕ   rÖ   rÞ   r  r  r  r×   rÑ   r.   r   rý   rý   ¿  s   † ñò
Cò;ò7õ7r.   rý   c                   ó<   • \ rS rSrSrS rS rS rS rS r	S r
S	rg
)ÚTestIsPerfectMatchingiÙ  zXUnit tests for the
:func:`~networkx.algorithms.matching.is_perfect_matching` function.

c                 óv   • [         R                  " S5      n[         R                  " USSSSS.5      (       d   eg rÛ   ©r   r   Úis_perfect_matchingr*   s     r   rÞ   ÚTestIsPerfectMatching.test_dictß  r  r.   c                 óp   • [         R                  " S5      n[         R                  " USS15      (       d   eg rê   r  r*   s     r   r  Ú TestIsPerfectMatching.test_validã  r  r.   c                 óÜ   • [         R                  " S5      nUR                  SS5        UR                  SS5        UR                  SS5        [         R                  " U1 Sk5      (       d   eg )Nr   r   r   r   r	   >   r÷   rK   ©r   r	   ©r   Úcycle_graphr3   r  r*   s     r   Útest_valid_not_pathÚ)TestIsPerfectMatching.test_valid_not_pathç  sT   € Ü�NŠN˜1ÓˆØ	�
‰
�1�aÔØ	�
‰
�1�aÔØ	�
‰
�1�aÔä×%Ò% aÒ)A×BÑBÐBÑBr.   c                 óÔ   • [         R                  " S5      n[         R                  " U1 Sk5      (       a   eUR                  SS5        [         R                  " USS15      (       a   eg rî   )r   r   r  r3   r*   s     r   rð   Ú$TestIsPerfectMatching.test_selfloopsï  sY   € Ü�MŠM˜!Óˆä×)Ò)¨!Ò-E×FÑFÐFÐFà	�
‰
�1�aÔÜ×)Ò)¨!¨f°fÐ-=×>Ñ>Ð>Ð>Ð>r.   c                 ó®   • [         R                  " S5      n[         R                  " US15      (       a   e[         R                  " U1 Sk5      (       a   eg )Nr   r÷   ró   r  r*   s     r   r  Ú'TestIsPerfectMatching.test_not_matching÷  sH   € Ü�MŠM˜!ÓˆÜ×)Ò)¨!¨f¨X×6Ñ6Ð6Ð6Ü×)Ò)¨!Ò-E×FÑFÐFÐFÐFr.   c                 ó¸   • [         R                  " S5      nUR                  SS5        UR                  SS5        [         R                  " USS15      (       a   eg )Nr   r   r   rK   r÷   r  r*   s     r   Útest_maximal_but_not_perfectÚ2TestIsPerfectMatching.test_maximal_but_not_perfectü  sM   € Ü�NŠN˜1ÓˆØ	�
‰
�1�aÔØ	�
‰
�1�aÔä×)Ò)¨!¨f°fÐ-=×>Ñ>Ð>Ð>Ð>r.   rÑ   N)rÒ   rÓ   rÔ   rÕ   rÖ   rÞ   r  r  rð   r  r   r×   rÑ   r.   r   r  r  Ù  s(   † ñò
Cò;òCò?òGõ
?r.   r  c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚTestMaximalMatchingi  zLUnit tests for the
:func:`~networkx.algorithms.matching.maximal_matching`.

c                 óž   • / SQn[         R                  " U5      n[         R                  " U5      n[         R                  " X#5      (       d   eg )N)rF   )r   r   r   )r	   r   rG   ru   rz   )r   r&   Úmaximal_matchingr   )r+   rù   r   Úmatchings       r   rë   Ú'TestMaximalMatching.test_valid_matching
  s;   € ÚHˆÜ�HŠH�U‹OˆÜ×&Ò& qÓ)ˆÜ×%Ò% a×2Ñ2Ð2Ñ2r.   c                 ó¸   • [         R                  " S5      n[         R                  " U5      nS[        U5      :X  d   e[         R                  " X5      (       d   eg )Nr   r   )r   Ú
star_graphr%  Úlenr   ©r+   r   r&  s      r   Útest_single_edge_matchingÚ-TestMaximalMatching.test_single_edge_matching  sI   € ä�MŠM˜!ÓˆÜ×&Ò& qÓ)ˆØ”C˜“MÓ!Ð!Ð!Ü×%Ò% a×2Ñ2Ð2Ñ2r.   c                 ó  • [         R                  " S5      nUR                  SS/5        [         R                  " U5      n[	        U5      S:X  d   e[        S U 5       5      (       a   e[         R                  " X5      (       d   eg )Nr
   rï   )r   r   r   c              3   ó.   #   • U  H  u  pX:H  v •  M     g 7fr   rÑ   )Ú.0ÚuÚvs      r   Ú	<genexpr>Ú6TestMaximalMatching.test_self_loops.<locals>.<genexpr>  s   é € Ð3ª(¡$ !�q–vª(ùs   ‚)r   r   Úadd_edges_fromr%  r*  Úanyr   r+  s      r   Útest_self_loopsÚ#TestMaximalMatching.test_self_loops  ss   € ä�MŠM˜!ÓˆØ	×Ñ˜& &Ð)Ô*Ü×&Ò& qÓ)ˆÜ�8‹} Ó!Ð!Ð!äÑ3©(Ó3×3Ñ3Ð3Ð3Ü×%Ò% a×2Ñ2Ð2Ñ2r.   c                 ó4  • [        [        S5      5       H€  n[        R                  " 5       nUR	                  U5        UR                  SS/5        [        R                  " U5      n[        U5      S:X  d   e[        R                  " X#5      (       a  M€   e   g)ztTests that a maximal matching is computed correctly
regardless of the order in which nodes are added to the graph.

r
   r7   )r   r	   r   N)	r   Úranger   r&   Úadd_nodes_fromr5  r%  r*  r   )r+   Únodesr   r&  s       r   Útest_orderingÚ!TestMaximalMatching.test_ordering!  s|   € ô
 "¤%¨£(Ö+ˆEÜ—’“
ˆAØ×Ñ˜UÔ#Ø×Ñ˜f fÐ-Ô.Ü×*Ò*¨1Ó-ˆHÜ�x“= AÓ%Ð%Ð%Ü×)Ò)¨!×6Ó6Ð6Ð6ò ,r.   rÑ   N)
rÒ   rÓ   rÔ   rÕ   rÖ   rë   r,  r7  r=  r×   rÑ   r.   r   r#  r#    s   † ñò
3ò3ò3õ7r.   r#  )rS   Ú	itertoolsr   r   Únetworkxr   Únetworkx.utilsr   ÚmarkÚparametrizerÝ   r   r  r   r   Ú
MultiGraphrø   ÚMultiDiGraphr'   r)   r%  r!   r#   rÙ   rý   r  r#  rÑ   r.   r   Ú<module>rF     s¢  ðÛ Ý "ã ã Ý &ð ‡�×ÑØˆ2�>‰>˜2×1Ñ1°2×3IÑ3IÐ
Jóð ‡�×ÑØà	ˆØ	ˆØ	�ÐØ	�Ðð	óñóóðð ‡�×ÑØˆ2�>‰>˜2×1Ñ1°2×3IÑ3IÐ
Jóð ‡�×ÑØà	�FÐØ	ˆvˆðóñóóðð ‡�×Ñ˜¨¯©°r·z±zÀ2Ç?Á?Ð'SÓTØ‡�×ÑØˆ2×!Ñ! 2×#9Ñ#9¸2×;NÑ;NÐ
Oóñóó Uð÷P>ñ P>÷f
//ñ //÷d7ñ 7÷4(?ñ (?÷V(7ò (7r.   