Ë
    ©Ó^j�G  ã            	       óF  — d dl Z d dlmZ d dlZd dlZd dlmZ ej                  j                  dej                  ej                  ej                  f«      ej                  j                  ddhdhddhd	dhf«      d
„ «       «       Zej                  j                  dej                  ej                  ej                  f«      ej                  j                  dddhddhf«      d„ «       «       Zej                  j                  dej                  ej                   ej"                  f«      ej                  j                  dej$                  ej&                  ej(                  f«      d„ «       «       Z G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Zy)é    N)Úpermutations)Úedges_equalÚfnÚedgeset)r   é   )r   r   ©é   é   )r   r   c                 ó´   — t        j                  d«      }t        j                  t         j                  d¬«      5   | ||«       ddd«       y# 1 sw Y   yxY w)zSAll 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      úr/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_matching.pyÚtest_is_matching_node_not_in_Gr   
   sE   € ô 	�‰�aÓ€AÜ	�‰”r×'Ñ'Ð/MÔ	Nñ Ù
ˆ1ˆgŒ÷÷ ñ úó   »
AÁA)r   é   r	   )r   c                 ó´   — t        j                  d«      }t        j                  t         j                  d¬«      5   | ||«       ddd«       y# 1 sw Y   yxY w)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      sE   € ô 	�‰�aÓ€AÜ	�‰”r×'Ñ'Ð/EÔ	Fñ Ù
ˆ1ˆgŒ÷÷ ñ úr   Ú
graph_typec                 ó’   —  |«       }t        j                  t        j                  «      5   | |«       d d d «       y # 1 sw Y   y xY w©N)r   r   r   ÚNetworkXNotImplemented)r   r   r   s      r   Útest_wrong_graph_typer!   0   s9   € ñ
 	‹€AÜ	�‰”r×0Ñ0Ó	1ñ Ù
ˆ1Œ÷÷ ñ ús	   «	=½Ac                   ó”   — e 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d„ Zy)ÚTestMaxWeightMatchingz`Unit tests for the
    :func:`~networkx.algorithms.matching.max_weight_matching` function.

    c                 ó´   — t        j                  «       }t        j                  |«      t        «       k(  sJ ‚t        j                  |«      t        «       k(  sJ ‚y)zEmpty graphN)r   ÚGraphÚmax_weight_matchingÚsetÚmin_weight_matching©Úselfr   s     r   Útest_trivial1z#TestMaxWeightMatching.test_trivial1@   sC   € ä�H‰H‹JˆÜ×%Ñ% aÓ(¬C«EÒ1Ð1Ð1Ü×%Ñ% aÓ(¬C«EÒ1Ð1Ñ1ó    c                 óÜ   — t        j                  «       }|j                  ddd¬«       t        j                  |«      t	        «       k(  sJ ‚t        j
                  |«      t	        «       k(  sJ ‚y )Nr   éd   ©Úweight)r   r%   Úadd_edger&   r'   r(   r)   s     r   Útest_selfloopz#TestMaxWeightMatching.test_selfloopF   sU   € Ü�H‰H‹JˆØ	�
‰
�1�a ˆ
Ô$Ü×%Ñ% aÓ(¬C«EÒ1Ð1Ð1Ü×%Ñ% aÓ(¬C«EÒ1Ð1Ñ1r,   c                 óØ   — t        j                  «       }|j                  dd«       t        t        j                  |«      dh«      sJ ‚t        t        j
                  |«      dh«      sJ ‚y )Nr   r   ©r   r   ©r   r%   r1   r   r&   r(   r)   s     r   Útest_single_edgez&TestMaxWeightMatching.test_single_edgeL   sU   € Ü�H‰H‹JˆØ	�
‰
�1�aÔÜœ2×1Ñ1°!Ó4°v°hÔ?Ð?Ð?Üœ2×1Ñ1°!Ó4°v°hÔ?Ð?Ñ?r,   c                 ó  — t        j                  «       }|j                  ddd¬«       |j                  ddd¬«       t        t        j                  |«      dh«      sJ ‚t        t        j
                  |«      dh«      sJ ‚y )	NÚoneÚtwoé
   r/   Úthreeé   ©r9   r;   ©r8   r9   r5   r)   s     r   Útest_two_pathz#TestMaxWeightMatching.test_two_pathR   sn   € Ü�H‰H‹JˆØ	�
‰
�5˜%¨ˆ
Ô+Ø	�
‰
�5˜'¨"ˆ
Ô-Üœ2×1Ñ1°!Ó4Ð7GÐ6HÔIÐIÐIÜœ2×1Ñ1°!Ó4°~Ð6FÔGÐGÑGr,   c                 óÂ  — t        j                  «       }|j                  ddd¬«       |j                  ddd¬«       |j                  ddd¬«       t        t        j                  |«      dh«      sJ ‚t        t        j                  |d ¬«      d	d
h«      sJ ‚t        t        j
                  |«      d	d
h«      sJ ‚t        t        j
                  |d ¬«      d	d
h«      sJ ‚y )Nr   r	   r   r/   r
   r<   r   r   ©r   r	   ©r
   r   r5   r)   s     r   Ú	test_pathz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Üœ2×1Ñ1°!Ó4°v¸vÐ6FÔGÐGÐGÜœ2×1Ñ1°!¸DÔAÀFÈFÐCSÔTÐTÑTr,   c                 óX  — t        j                  «       }|j                  ddd¬«       |j                  ddd¬«       |j                  ddd¬«       |j                  ddd¬«       t        t        j                  |«      ddh«      sJ ‚t        t        j
                  |«      dd	h«      sJ ‚y )
Nr   r   r	   r/   r
   rA   rB   ©r   r   r   r5   r)   s     r   Útest_squarez!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Üœ2×1Ñ1°!Ó4°v¸vÐ6FÔGÐGÑGr,   c                 ó  — t        j                  «       }|j                  dddd¬«       |j                  dddd¬«       t        t        j                  |d¬«      d	h«      sJ ‚t        t        j
                  |d¬«      d
h«      sJ ‚y )Nr8   r9   r:   r<   )r0   Úabcdr;   rH   r/   r>   r=   r5   r)   s     r   Útest_edge_attribute_namez.TestMaxWeightMatching.test_edge_attribute_namel   sv   € Ü�H‰H‹JˆØ	�
‰
�5˜%¨°ˆ
Ô4Ø	�
‰
�5˜'¨"°2ˆ
Ô6Üœ2×1Ñ1°!¸FÔCÀnÐEUÔVÐVÐVÜœ2×1Ñ1°!¸FÔCÐFVÐEWÔXÐXÑXr,   c                 óÀ  — t        j                  «       }|j                  ddt        j                  ¬«       |j                  ddt        j
                  d«      ¬«       |j                  ddd¬«       |j                  ddt        j                  d«      ¬«       t        t        j                  |«      dd	h«      sJ ‚t        t        j                  |«      dd	h«      sJ ‚y )
Nr   r	   r/   r
   g      @r   g       @rE   r   )
r   r%   r1   ÚmathÚpiÚexpÚsqrtr   r&   r(   r)   s     r   Útest_floating_point_weightsz1TestMaxWeightMatching.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Üœ2×1Ñ1°!Ó4°v¸vÐ6FÔGÐGÑGr,   c                 óÈ  — t        j                  «       }|j                  ddd¬«       |j                  ddd¬«       |j                  ddd¬«       |j                  ddd¬«       |j                  ddd¬«       t        t        j                  |«      d	h«      sJ ‚t        t        j                  |d
¬«      ddh«      sJ ‚t        t        j
                  |«      d	dh«      sJ ‚y )Nr   r	   r/   r
   éþÿÿÿr   éÿÿÿÿiúÿÿÿrA   T)Úmaxcardinality©r   r
   ©r	   r   rB   r5   r)   s     r   Útest_negative_weightsz+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ÑGr,   c                 ó�  — t        j                  «       }|j                  g d¢«       ddh}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚|j                  ddg«       h d£}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚y)z-Create S-blossom and use it for augmentation:)©r   r	   é   ©r   r
   é	   ©r	   r
   r:   )r
   r   é   rA   rB   )r   é   r   )r   r   r^   ¾   ©r   r^   r   ©r   r   N©r   r%   Úadd_weighted_edges_fromr   r&   r(   ©r*   r   Úanswers      r   Útest_s_blossomz$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                 óŠ  — t        j                  «       }|j                  g d¢«       h d£}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚|j                  ddd¬«       |j                  ddd¬«       t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚|j                  dd«       |j                  ddd¬«       h d	£}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚y
)z=Create S-blossom, relabel as T-blossom, use for augmentation:)©r   r	   r[   ©r   r
   rY   r\   )r   r   r   )r   r   r   )r   r^   r
   r_   r   r   r
   r/   r   r^   >   rA   ©r
   r^   ra   N)r   r%   rc   r   r&   r(   r1   Úremove_edgerd   s      r   Útest_s_t_blossomz&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                 óp  — t        j                  «       }|j                  g d¢«       h d£}|D �ch c]  }t        |«      ’Œ }}t        j                  |«      D �ch c]  }t        |«      ’Œ }}||k(  sJ ‚t        j
                  |«      D �ch c]  }t        |«      ’Œ }}||k(  sJ ‚yc c}w c c}w c c}w )z.Create nested S-blossom, use for augmentation:)rh   rZ   r\   )r	   r   rY   )r
   r   rY   )r   r   r:   )r   r^   r^   >   rT   rU   ©r   r^   N)r   r%   rc   Ú	frozensetr&   r(   )r*   r   Úexpected_edgesetÚeÚexpectedre   s         r   Útest_nested_s_blossomz+TestMaxWeightMatching.test_nested_s_blossom«   s¬   € ô �H‰H‹JˆØ	×!Ñ!òô
	
ò 4ÐØ*:Ö; Q”I˜a•LÐ;ˆÐ;Ü(*×(>Ñ(>¸qÓ(AÖB 1”)˜A•,ÐBˆÐBØ˜Ò!Ð!Ð!Ü(*×(>Ñ(>¸qÓ(AÖB 1”)˜A•,ÐBˆÐBØ˜Ò!Ð!Ñ!ùò	 <ùÚBùâBs   °B)ÁB.ÂB3c                 óÞ   — t        j                  «       }|j                  g d¢«       h d£}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚y)z<Create S-blossom, relabel as S, include in nested S-blossom:)	)r   r	   r:   )r   r]   r:   )r	   r
   é   )r
   r   é   )r
   r   rv   ©r   r   é   )r   r^   r:   )r^   r]   r:   )r]   rY   rY   >   rA   rB   rn   ©r]   rY   Nrb   rd   s      r   Útest_nested_s_blossom_relabelz3TestMaxWeightMatching.test_nested_s_blossom_relabelÁ   ó]   € ä�H‰H‹JˆØ	×!Ñ!ò
ô	
ò 2ˆÜœ2×1Ñ1°!Ó4°fÔ=Ð=Ð=Üœ2×1Ñ1°!Ó4°fÔ=Ð=Ñ=r,   c                 óÞ   — t        j                  «       }|j                  g d¢«       h d£}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚y)z5Create nested S-blossom, augment, expand recursively:)
rX   ri   r\   )r	   r   ru   )r
   r   ru   )r   r   é   )r   r^   ru   )r   r]   ru   )r^   r]   r}   )r]   rY   ru   >   rA   ©r
   r   ©r   r^   ry   Nrb   rd   s      r   Útest_nested_s_blossom_expandz2TestMaxWeightMatching.test_nested_s_blossom_expandÕ   s]   € ä�H‰H‹JˆØ	×!Ñ!òô	
ò 2ˆÜœ2×1Ñ1°!Ó4°fÔ=Ð=Ð=Üœ2×1Ñ1°!Ó4°fÔ=Ð=Ñ=r,   c                 óÞ   — t        j                  «       }|j                  g d¢«       h d£}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚y)z'Create S-blossom, relabel as T, expand:))r   r	   é   )r   r   é   )r   r^   é   ©r	   r
   rx   )r
   r   rƒ   rw   )r   rY   r}   )r   r]   é   >   r`   r   ©r   rY   ©r   r]   Nrb   rd   s      r   Útest_s_blossom_relabel_expandz3TestMaxWeightMatching.test_s_blossom_relabel_expandê   s]   € ä�H‰H‹JˆØ	×!Ñ!ò	ô	
ò 2ˆÜœ2×1Ñ1°!Ó4°fÔ=Ð=Ð=Üœ2×1Ñ1°!Ó4°fÔ=Ð=Ñ=r,   c                 óÞ   — t        j                  «       }|j                  g d¢«       h d£}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚y)z.Create nested S-blossom, relabel as T, expand:)	)r   r	   é   )r   r
   rv   )r   rY   rY   r…   )r	   r   é   )r
   r   rŒ   )r   r   r†   )r   r]   r]   )r   r^   r]   >   ©r   r]   ©r   rY   r   rn   Nrb   rd   s      r   Ú$test_nested_s_blossom_relabel_expandz:TestMaxWeightMatching.test_nested_s_blossom_relabel_expandý   r{   r,   c                 óÞ   — t        j                  «       }|j                  g d¢«       h d£}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚y)zTCreate 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   r^   é   ©r
   r[   é#   )r   rY   r›   ©r   r]   é   ©r[   r:   r   ¾   ©r[   r:   r`   r   r‡   rˆ   Nrb   rd   s      r   Útest_nasty_blossom1z)TestMaxWeightMatching.test_nasty_blossom1  ó_   € ô �H‰H‹JˆØ	×!Ñ!òô	
ò ;ˆÜœ2×1Ñ1°!Ó4°fÔ=Ð=Ð=Üœ2×1Ñ1°!Ó4°fÔ=Ð=Ñ=r,   c                 óÞ   — t        j                  «       }|j                  g d¢«       h d£}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚y)zAgain but slightly different:)
r‘   r“   r”   r–   r—   r˜   rš   )r   rY   r�   )r   r]   é(   rž   rŸ   Nrb   rd   s      r   Útest_nasty_blossom2z)TestMaxWeightMatching.test_nasty_blossom2(  s]   € ä�H‰H‹JˆØ	×!Ñ!òô	
ò ;ˆÜœ2×1Ñ1°!Ó4°fÔ=Ð=Ð=Üœ2×1Ñ1°!Ó4°fÔ=Ð=Ñ=r,   c                 óÞ   — t        j                  «       }|j                  g d¢«       h d£}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚y)zuCreate 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   rY   é   rœ   rž   rŸ   Nrb   rd   s      r   Útest_nasty_blossom_least_slackz4TestMaxWeightMatching.test_nasty_blossom_least_slack=  r¢   r,   c                 óÞ   — t        j                  «       }|j                  g d¢«       h d£}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚y)z8Create nested blossom, relabel as T in more than one way)r‘   )r   r]   r’   r”   r–   )r   r   é_   )r   r^   é^   )r   r^   r«   )r^   r]   r•   )r   rY   r™   )r
   r<   r›   )r   r[   é$   )r]   r:   r�   )r<   ru   r   >   ©r   r[   ©r]   r:   ©r<   ru   rŽ   r   r   Nrb   rd   s      r   Útest_nasty_blossom_augmentingz3TestMaxWeightMatching.test_nasty_blossom_augmentingT  s`   € ô �H‰H‹JˆØ	×!Ñ!òô	
ò" EˆÜœ2×1Ñ1°!Ó4°fÔ=Ð=Ð=Üœ2×1Ñ1°!Ó4°fÔ=Ð=Ñ=r,   c                 óÞ   — t        j                  «       }|j                  g d¢«       h d£}t        t        j                  |«      |«      sJ ‚t        t        j
                  |«      |«      sJ ‚y)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   rY   r„   )r   r]   r™   )r]   r^   r:   )rY   r:   r:   )r   r[   r™   >   ©r   r[   ©r^   r]   ©rY   r:   rA   r~   Nrb   rd   s      r   Ú%test_nasty_blossom_expand_recursivelyz;TestMaxWeightMatching.test_nasty_blossom_expand_recursivelyn  s]   € ä�H‰H‹JˆØ	×!Ñ!òô	
ò ;ˆÜœ2×1Ñ1°!Ó4°fÔ=Ð=Ð=Üœ2×1Ñ1°!Ó4°fÔ=Ð=Ñ=r,   c                 óœ   — t        j                  «       }|j                  g d¢«       ddh}t        t        j                  |«      |«      sJ ‚y )N))r   r	   iè  )r	   r
   r	   )r
   r   i¸  rA   rB   )r   r%   rc   r   r(   rd   s      r   Ú(test_min_weight_matching_max_cardinalityz>TestMaxWeightMatching.test_min_weight_matching_max_cardinality„  sC   € Ü�H‰H‹JˆØ	×!Ñ!Ò"IÔJð ˜&Ð!ˆÜœ2×1Ñ1°!Ó4°fÔ=Ð=Ñ=r,   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r+   r2   r6   r?   rC   rF   rI   rO   rV   rf   rl   rs   rz   r€   r‰   r�   r¡   r¥   r¨   r°   r·   r¹   © r,   r   r#   r#   :   s|   „ ñò
2ò2ò@òHòUòHòYòHòHò>ò>ò*"ò,>ò(>ò*>ò&>ò(>ò.>ò*>ò.>ò4>ó,>r,   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
)ÚTestIsMatchingzXUnit tests for the
    :func:`~networkx.algorithms.matching.is_matching` function.

    c                 óh   — t        j                  d«      }t        j                  |dddddœ«      sJ ‚y ©Nr   r   r   r
   r	   )r   r   r	   r
   ©r   r   Úis_matchingr)   s     r   Ú	test_dictzTestIsMatching.test_dict“  s-   € Ü�M‰M˜!ÓˆÜ�~‰~˜a Q¨1°°qÑ!9Ô:Ð:Ñ:r,   c                 ón   — t        j                  d«      }t        j                  |t        «       «      sJ ‚y )Nr   )r   r   rÄ   r'   r)   s     r   Útest_empty_matchingz"TestIsMatching.test_empty_matching—  s&   € Ü�M‰M˜!ÓˆÜ�~‰~˜a¤£Ô'Ð'Ñ'r,   c                 ó`   — t        j                  d«      }t        j                  |dh«      sJ ‚y )Nr   rA   rÃ   r)   s     r   r6   zTestIsMatching.test_single_edge›  s&   € Ü�M‰M˜!ÓˆÜ�~‰~˜a & Ô*Ð*Ñ*r,   c                 óþ   — t        j                  d«      }t        j                  |ddh«      sJ ‚t        j                  |ddh«      sJ ‚t        j                  |ddh«      sJ ‚t        j                  |ddh«      sJ ‚y )Nr   r4   r   ©r   r   )r
   r	   rÃ   r)   s     r   Útest_edge_orderzTestIsMatching.test_edge_orderŸ  st   € Ü�M‰M˜!ÓˆÜ�~‰~˜a &¨&Ð!1Ô2Ð2Ð2Ü�~‰~˜a &¨&Ð!1Ô2Ð2Ð2Ü�~‰~˜a &¨&Ð!1Ô2Ð2Ð2Ü�~‰~˜a &¨&Ð!1Ô2Ð2Ñ2r,   c                 ób   — t        j                  d«      }t        j                  |ddh«      sJ ‚y ©Nr   r4   r   rÃ   r)   s     r   Útest_valid_matchingz"TestIsMatching.test_valid_matching¦  s)   € Ü�M‰M˜!ÓˆÜ�~‰~˜a &¨&Ð!1Ô2Ð2Ñ2r,   c                 óº   — t        j                  d«      }t        j                  |h d£«      rJ ‚|j                  dd«       t        j                  |ddh«      rJ ‚y ©Nr   >   ©r   r   rA   r   r   rÑ   rA   )r   r   rÄ   r1   r)   s     r   Útest_selfloopszTestIsMatching.test_selfloopsª  sO   € Ü�M‰M˜!Óˆä—>‘> !Ò%=Ô>Ð>Ð>à	�
‰
�1�aÔÜ—>‘> ! f¨fÐ%5Ô6Ð6Ð6Ð6r,   c                 ób   — t        j                  d«      }t        j                  |h d£«      rJ ‚y )Nr   ¾   r4   rA   r   rÃ   r)   s     r   Útest_invalid_matchingz$TestIsMatching.test_invalid_matching²  s(   € Ü�M‰M˜!ÓˆÜ—>‘> !Ò%=Ô>Ð>Ð>Ð>r,   c                 ó  — t        j                  d«      }t        j                  |ddh«      rJ ‚t        j                  |j                  «      }t        j                  |dh«      sJ ‚t        j                  |dh«      rJ ‚y )Nr   ©r   r
   rA   r4   rÊ   )r   r   rÄ   ÚDiGraphÚedgesr)   s     r   Útest_invalid_edgez TestIsMatching.test_invalid_edge¶  sj   € Ü�M‰M˜!ÓˆÜ—>‘> ! f¨fÐ%5Ô6Ð6Ð6ä�J‰J�q—w‘wÓˆÜ�~‰~˜a & Ô*Ð*Ð*Ü—>‘> ! f XÔ.Ð.Ð.Ð.r,   N)rº   r»   r¼   r½   rÅ   rÇ   r6   rË   rÎ   rÒ   rÕ   rÚ   r¾   r,   r   rÀ   rÀ   �  s/   „ ñò
;ò(ò+ò3ò3ò7ò?ó/r,   rÀ   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚTestIsMaximalMatchingz`Unit tests for the
    :func:`~networkx.algorithms.matching.is_maximal_matching` function.

    c                 óh   — t        j                  d«      }t        j                  |dddddœ«      sJ ‚y rÂ   ©r   r   Úis_maximal_matchingr)   s     r   rÅ   zTestIsMaximalMatching.test_dictÅ  ó/   € Ü�M‰M˜!ÓˆÜ×%Ñ% a¨Q°1¸¸qÑ)AÔBÐBÑBr,   c                 ób   — t        j                  d«      }t        j                  |ddh«      sJ ‚y rÍ   rÞ   r)   s     r   Ú
test_validz TestIsMaximalMatching.test_validÉ  ó+   € Ü�M‰M˜!ÓˆÜ×%Ñ% a¨&°&Ð)9Ô:Ð:Ñ:r,   c                 óê   — t        j                  d«      }t        j                  |h d£«      rJ ‚t        j                  |dh«      rJ ‚|j                  dd«       t        j                  |dh«      rJ ‚y )Nr   rÔ   r×   r   rÑ   )r   r   rß   r1   r)   s     r   Útest_not_matchingz'TestIsMaximalMatching.test_not_matchingÍ  sh   € Ü�M‰M˜!ÓˆÜ×)Ñ)¨!Ò-EÔFÐFÐFÜ×)Ñ)¨!¨f¨XÔ6Ð6Ð6Ø	�
‰
�1�aÔÜ×)Ñ)¨!¨f¨XÔ6Ð6Ð6Ð6r,   c                 ó`   — t        j                  d«      }t        j                  |dh«      rJ ‚y )Nr   r4   rÞ   r)   s     r   Útest_not_maximalz&TestIsMaximalMatching.test_not_maximalÔ  s+   € Ü�M‰M˜!ÓˆÜ×)Ñ)¨!¨f¨XÔ6Ð6Ð6Ð6r,   N)rº   r»   r¼   r½   rÅ   râ   rå   rç   r¾   r,   r   rÜ   rÜ   ¿  s   „ ñò
Cò;ò7ó7r,   rÜ   c                   ó4   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚTestIsPerfectMatchingz`Unit tests for the
    :func:`~networkx.algorithms.matching.is_perfect_matching` function.

    c                 óh   — t        j                  d«      }t        j                  |dddddœ«      sJ ‚y rÂ   ©r   r   Úis_perfect_matchingr)   s     r   rÅ   zTestIsPerfectMatching.test_dictß  rà   r,   c                 ób   — t        j                  d«      }t        j                  |ddh«      sJ ‚y rÍ   rë   r)   s     r   râ   z TestIsPerfectMatching.test_validã  rã   r,   c                 óÎ   — t        j                  d«      }|j                  dd«       |j                  dd«       |j                  dd«       t        j                  |h d£«      sJ ‚y )Nr   r   r   r   r	   >   ©r   r	   r×   rE   ©r   Úcycle_graphr1   rì   r)   s     r   Útest_valid_not_pathz)TestIsPerfectMatching.test_valid_not_pathç  sQ   € Ü�N‰N˜1ÓˆØ	�
‰
�1�aÔØ	�
‰
�1�aÔØ	�
‰
�1�aÔä×%Ñ% aÒ)AÔBÐBÑBr,   c                 óº   — t        j                  d«      }t        j                  |h d£«      rJ ‚|j                  dd«       t        j                  |ddh«      rJ ‚y rÐ   )r   r   rì   r1   r)   s     r   rÒ   z$TestIsPerfectMatching.test_selfloopsï  sS   € Ü�M‰M˜!Óˆä×)Ñ)¨!Ò-EÔFÐFÐFà	�
‰
�1�aÔÜ×)Ñ)¨!¨f°fÐ-=Ô>Ð>Ð>Ð>r,   c                 ó”   — t        j                  d«      }t        j                  |dh«      rJ ‚t        j                  |h d£«      rJ ‚y )Nr   r×   rÔ   rë   r)   s     r   rå   z'TestIsPerfectMatching.test_not_matching÷  sB   € Ü�M‰M˜!ÓˆÜ×)Ñ)¨!¨f¨XÔ6Ð6Ð6Ü×)Ñ)¨!Ò-EÔFÐFÐFÐFr,   c                 óª   — t        j                  d«      }|j                  dd«       |j                  dd«       t        j                  |ddh«      rJ ‚y )Nr   r   r   rE   r×   rð   r)   s     r   Útest_maximal_but_not_perfectz2TestIsPerfectMatching.test_maximal_but_not_perfectü  sJ   € Ü�N‰N˜1ÓˆØ	�
‰
�1�aÔØ	�
‰
�1�aÔä×)Ñ)¨!¨f°fÐ-=Ô>Ð>Ð>Ð>r,   N)
rº   r»   r¼   r½   rÅ   râ   rò   rÒ   rå   rö   r¾   r,   r   ré   ré   Ù  s(   „ ñò
Cò;òCò?òGó
?r,   ré   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚTestMaximalMatchingzTUnit tests for the
    :func:`~networkx.algorithms.matching.maximal_matching`.

    c                 ó�   — g d¢}t        j                  |«      }t        j                  |«      }t        j                  ||«      sJ ‚y )N)rA   )r   r   r   )r	   r   rB   rj   rn   )r   r%   Úmaximal_matchingrß   )r*   rÙ   r   Úmatchings       r   rÎ   z'TestMaximalMatching.test_valid_matching
  s:   € ÚHˆÜ�H‰H�U‹OˆÜ×&Ñ& qÓ)ˆÜ×%Ñ% a¨Ô2Ð2Ñ2r,   c                 ó¨   — t        j                  d«      }t        j                  |«      }dt        |«      k(  sJ ‚t        j                  ||«      sJ ‚y )Nr   r   )r   Ú
star_graphrú   Úlenrß   ©r*   r   rû   s      r   Útest_single_edge_matchingz-TestMaximalMatching.test_single_edge_matching  sH   € ä�M‰M˜!ÓˆÜ×&Ñ& qÓ)ˆØ”C˜“MÒ!Ð!Ð!Ü×%Ñ% a¨Ô2Ð2Ñ2r,   c                 óö   — t        j                  d«      }|j                  ddg«       t        j                  |«      }t	        |«      dk(  sJ ‚t        d„ |D «       «      rJ ‚t        j                  ||«      sJ ‚y )Nr
   rÑ   )r   r   r   c              3   ó,   K  — | ]  \  }}||k(  –— Œ y ­wr   r¾   )Ú.0ÚuÚvs      r   ú	<genexpr>z6TestMaximalMatching.test_self_loops.<locals>.<genexpr>  s   è ø€ Ò3¡$ ! Q�q˜A•vÑ3ùs   ‚)r   r   Úadd_edges_fromrú   rþ   Úanyrß   rÿ   s      r   Útest_self_loopsz#TestMaximalMatching.test_self_loops  so   € ä�M‰M˜!ÓˆØ	×Ñ˜& &Ð)Ô*Ü×&Ñ& qÓ)ˆÜ�8‹} Ò!Ð!Ð!äÑ3¨(Ô3Ô3Ð3Ð3Ü×%Ñ% a¨Ô2Ð2Ñ2r,   c                 ó   — t        t        d«      «      D ]w  }t        j                  «       }|j	                  |«       |j                  ddg«       t        j                  |«      }t        |«      dk(  sJ ‚t        j                  ||«      rŒwJ ‚ y)z„Tests that a maximal matching is computed correctly
        regardless of the order in which nodes are added to the graph.

        r
   r4   )r   r	   r   N)	r   Úranger   r%   Úadd_nodes_fromr  rú   rþ   rß   )r*   Únodesr   rû   s       r   Útest_orderingz!TestMaximalMatching.test_ordering!  s€   € ô
 "¤%¨£(Ó+ò 	7ˆEÜ—‘“
ˆAØ×Ñ˜UÔ#Ø×Ñ˜f fÐ-Ô.Ü×*Ñ*¨1Ó-ˆHÜ�x“= AÒ%Ð%Ð%Ü×)Ñ)¨!¨XÕ6Ð6Ð6ñ	7r,   N)rº   r»   r¼   r½   rÎ   r   r	  r  r¾   r,   r   rø   rø     s   „ ñò
3ò3ò3ó7r,   rø   )rK   Ú	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>r     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,   