
    hN                         S SK r S SKJr  S SKJr  S SKrS SKJr  S SK	J
r
   " S S5      r " S S	5      r " S
 S5      r " S S5      r " S S5      rg)    N)permutations)raises)matching_dict_to_set)edges_equalc                       \ 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)nxGraphmax_weight_matchingsetmin_weight_matchingselfGs     Y/var/www/html/env/lib/python3.13/site-packages/networkx/algorithms/tests/test_matching.pytest_trivial1#TestMaxWeightMatching.test_trivial1   sC    HHJ%%a(CE111%%a(CE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_selfloop   sU    HHJ	

1a
$%%a(CE111%%a(CE111r   c                    [         R                  " 5       nUR                  SS5        [        [         R                  " U5      [        SSS.5      5      (       d   e[        [         R                  " U5      [        SSS.5      5      (       d   eg )Nr      r   r   r   r   r   r   r   r   r   r   s     r   test_single_edge&TestMaxWeightMatching.test_single_edge   s    HHJ	

1a""1%';aL'I
 
 	
 
 ""1%';aL'I
 
 	
 
r   c                 >   [         R                  " 5       nUR                  SSSS9  UR                  SSSS9  [        [         R                  " U5      [        SSS.5      5      (       d   e[        [         R                  " U5      [        SSS.5      5      (       d   eg )	Nonetwo
   r   threer	   )r(   r&   r%   r&   r!   r   s     r   test_two_path#TestMaxWeightMatching.test_two_path'   s    HHJ	

5%
+	

5'"
-""1% 5!AB
 
 	
 
 ""1% u!=>
 
 	
 
r   c           
      4   [         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SS.5      5      (       d   e[        [         R                  " US5      [        SSSSS	.5      5      (       d   e[        [         R                  " U5      [        SSS
.5      5      (       d   e[        [         R                  " US5      [        SSS
.5      5      (       d   eg )Nr         r      r	      r-   r/   r   r-   r/   r0   r   r/   r!   r   s     r   	test_pathTestMaxWeightMatching.test_path4   s   HHJ	

1a
"	

1a
#	

1a
"""1%';aL'I
 
 	
 
 ""1a(*>1qUV?W*X
 
 	
 
 ""1%';aL'I
 
 	
 
 ""1a(*>1|*L
 
 	
 
r   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  [        [         R                  " U5      [        SSS.5      5      (       d   e[        [         R                  " U5      [        SSS.5      5      (       d   eg )Nr   r0   r-   r   r/   r3   r   r-   r!   r   s     r   test_square!TestMaxWeightMatching.test_squareF   s    HHJ	

1a
"	

1a
"	

1a
"	

1a
"""1%';aL'I
 
 	
 
 ""1%';aL'I
 
 	
 
r   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SS	.5      5      (       d   e[        [         R                  " USS9[        SS05      5      (       d   eg )
Nr%   r&   r'   r	   )r   abcdr(   r;   r   r)   r!   r   s     r   test_edge_attribute_name.TestMaxWeightMatching.test_edge_attribute_nameS   s    HHJ	

5%
4	

5'"2
6""1V4 u!=>
 
 	
 
 ""1V4 '5!12
 
 	
 
r   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SSS.5      5      (       d   e[        [         R                  " U5      [        SSSSS.5      5      (       d   eg )	Nr   r-   r   r/   g      @r0   g       @r2   )r   r   r   mathpiexpsqrtr   r   r   r   r   s     r   test_floating_point_weights1TestMaxWeightMatching.test_floating_point_weights`   s    HHJ	

1a
(	

1a
,	

1a
$	

1a		#
/""1%';aARS<T'U
 
 	
 
 ""1%';aARS<T'U
 
 	
 
r   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SS	.5      5      (       d   e[        [         R                  " US
S9[        SSSSS.5      5      (       d   e[        [         R                  " U5      [        SSS.5      5      (       d   eg )Nr   r-   r   r/   r0   ir7   T)maxcardinalityr2   r3   r!   r   s     r   test_negative_weights+TestMaxWeightMatching.test_negative_weightsm   s   HHJ	

1a
"	

1a
#	

1a
"	

1a
#	

1a
#""1%';aL'I
 
 	
 
 ""1T: Q1q!9:
 
 	
 
 ""1%';aL'I
 
 	
 
r   c           	         [         R                  " 5       nUR                  / SQ5        [        SSSSS.5      n[	        [         R
                  " U5      U5      (       d   e[	        [         R                  " U5      U5      (       d   eUR                  SS/5        [        S	SSS
SSS.5      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/   r0      r-   r   r0   r/   r2   )r      r.   )r0   r.   rR   rR   r.   r   r-   r/   r0   r.   rR   Nr   r   add_weighted_edges_fromr   r   r   r   r   r   answers      r   test_s_blossom$TestMaxWeightMatching.test_s_blossom   s    HHJ	!!"OP%!aA&>?211!4f====211!4f====	!!9i"89%!aA!&JK211!4f====211!4f====r   c           	         [         R                  " 5       nUR                  / SQ5        [        SSSSSSS.5      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  [        SSSSSSS.5      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-   rO   r   r/   rM   rP   )r   r0   r.   )r0   r.   r0   )r   rR   r/   rR   r/   r-   r.   r0   r   rS   r   N)	r   r   rU   r   r   r   r   r   remove_edgerV   s      r   test_s_t_blossom&TestMaxWeightMatching.test_s_t_blossom   sF   HHJ	!!O	
 &!aA!&JK211!4f====211!4f====	

1a
"	

1a
"211!4f====211!4f====	a	

1a
"%!aA!&JK211!4f====211!4f====r   c                    [         R                  " 5       nUR                  / SQ5        SSSSSSS.n[        U5       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:)r[   rN   rP   )r-   r0   rM   )r/   r.   rM   )r0   r.   r'   )r.   rR   rR   r/   r0   r   r-   rR   r.   rS   N)r   r   rU   r   	frozensetr   r   )r   r   dict_formateexpectedrW   s         r   test_nested_s_blossom+TestMaxWeightMatching.test_nested_s_blossom   s     HHJ	!!
	
 aA!:*>{*KL*KQIaL*KL(*(>(>q(AB(A1)A,(AB!!!(*(>(>q(AB(A1)A,(AB!!!	 MBBs   C.C$Cc                    [         R                  " 5       nUR                  / SQ5        [        SSSSSSSS	S
.5      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   rQ   r'   )r-   r/      )r/   r0      )r/   r.   ri   r0   r.      )r.   rR   r'   )rR   rQ   r'   )rQ   rM   rM   r-   r   r0   r/   rR   r.   rM   rQ   r   r-   r/   r0   r.   rR   rQ   rM   NrT   rV   s      r   test_nested_s_blossom_relabel3TestMaxWeightMatching.test_nested_s_blossom_relabel   z    HHJ	!!
	
 &!aA!aTU&VW211!4f====211!4f====r   c                    [         R                  " 5       nUR                  / SQ5        [        SSSSSSSS	S
.5      n[	        [         R
                  " U5      U5      (       d   e[	        [         R                  " U5      U5      (       d   eg)z5Create nested S-blossom, augment, expand recursively:)
rL   r\   rP   )r-   r0   rh   )r/   r.   rh   )r0   r.      )r0   rR   rh   )r.   rQ   rh   )rR   rQ   rq   )rQ   rM   rh   r-   r   r.   rR   r/   r0   rM   rQ   rl   NrT   rV   s      r   test_nested_s_blossom_expand2TestMaxWeightMatching.test_nested_s_blossom_expand   sz    HHJ	!!	
 &!aA!aTU&VW211!4f====211!4f====r   c                    [         R                  " 5       nUR                  / SQ5        [        SSSSSSSS	S
.5      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   rR      r-   r/   rk   )r/   r0   rv   rj   )r0   rM   rq   )r.   rQ      rR   r/   r-   rM   rQ   r   r.   r0   rl   NrT   rV   s      r   test_s_blossom_relabel_expand3TestMaxWeightMatching.test_s_blossom_relabel_expand   sz    HHJ	!!		
 &!aA!aTU&VW211!4f====211!4f====r   c                    [         R                  " 5       nUR                  / SQ5        [        SSSSSSSS	S
.5      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/   ri   )r   rM   rM   rx   )r-   r0      )r/   r.   r~   )r0   r.   ry   )r0   rQ   rQ   )r.   rR   rQ   rM   r/   r-   rQ   rR   r.   r0   r   rl   NrT   rV   s      r   $test_nested_s_blossom_relabel_expand:TestMaxWeightMatching.test_nested_s_blossom_relabel_expand   ro   r   c                     [         R                  " 5       nUR                  / SQ5        SSSSSSSS	S
SS.
n[        U5      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/   r0   r   r0   r.   r   r   rR      r/   rO   #   )r0   rM   r   r.   rQ      rO   r'   r.   rR   r/   r-   rM   rQ   r   r.   r0   r'   rO   
r   r-   r/   r0   r.   rR   rQ   rM   rO   r'   NrT   )r   r   ansdictrW   s       r   test_nasty_blossom1)TestMaxWeightMatching.test_nasty_blossom1  s     HHJ	!!	
 A!aA!baP%g.211!4f====211!4f====r   c                     [         R                  " 5       nUR                  / SQ5        SSSSSSSS	S
SS.
n[        U5      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   )r0   rM   r   )r.   rQ   (   r   rR   r/   r-   rM   rQ   r   r.   r0   r'   rO   r   NrT   r   r   ansrW   s       r   test_nasty_blossom2)TestMaxWeightMatching.test_nasty_blossom2  s    HHJ	!!	
 aA!aA"!L%c*211!4f====211!4f====r   c                     [         R                  " 5       nUR                  / SQ5        SSSSSSSS	S
SS.
n[        U5      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   )r0   rM      r   r   rR   r/   r-   rM   rQ   r   r.   r0   r'   rO   r   NrT   r   s       r   test_nasty_blossom_least_slack4TestMaxWeightMatching.test_nasty_blossom_least_slack5  s     HHJ	!!	
 aA!aA"!L%c*211!4f====211!4f====r   c                 $   [         R                  " 5       nUR                  / SQ5        SSSSSSSS	S
SSSS.n[        U5      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   rQ   r   r   r   )r0   r.   _   )r0   rR   ^   )r.   rR   r   )rR   rQ   r   )r   rM   r   )r/   r	   r   )r.   rO   $   )rQ   r'   r   )r	   rh   r.   rM   r/   r-   rR   rO   r0   r'   r   r.   rQ   rh   r	   )r   r-   r/   r0   r.   rR   rQ   rM   rO   r'   r	   rh   NrT   r   s       r   test_nasty_blossom_augmenting3TestMaxWeightMatching.test_nasty_blossom_augmentingM  s     HHJ	!!	
$ 
 &c*211!4f====211!4f====r   c                     [         R                  " 5       nUR                  / SQ5        SSSSSSSS	S
SS.
n[        U5      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-   r0   7   )r/   r.   r   r   )r   rM   rw   )r.   rQ   r   )rQ   rR   r'   )rM   r'   r'   )r0   rO   r   r-   r   r.   rO   r/   rQ   rR   r'   r0   rM   r   NrT   r   s       r   %test_nasty_blossom_expand_recursively;TestMaxWeightMatching.test_nasty_blossom_expand_recursivelyu  s    HHJ	!!	
 aA!aB1!L%c*211!4f====211!4f====r   c                    [         R                  n[        U[         R                  [         R                  " 5       5        [        U[         R                  [         R
                  " 5       5        [        U[         R                  [         R                  " 5       5        [        U[         R                  [         R                  " 5       5        g N)r   NetworkXNotImplementedr   r   
MultiGraphMultiDiGraphDiGraphr   r   errors     r   test_wrong_graph_type+TestMaxWeightMatching.test_wrong_graph_type  sn    ))ub,,bmmo>ub,,boo.?@ub,,bjjl;ub,,bjjl;r    N)__name__
__module____qualname____firstlineno____doc__r   r   r"   r*   r4   r8   r<   rC   rI   rX   r^   re   rm   rr   rz   r   r   r   r   r   r   r   __static_attributes__r   r   r   r   r      sv    
22


$



$>>*",>(>*>&>(>0>,>0&>P>.<r   r   c                   N    \ 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)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 Nr0   r   r   r/   r-   )r   r   r-   r/   r   
path_graphis_matchingr   s     r   	test_dictTestIsMatching.test_dict  s0    MM!~~aQ1q!9::::r   c                 |    [         R                  " S5      n[         R                  " U[        5       5      (       d   eg )Nr0   )r   r   r   r   r   s     r   test_empty_matching"TestIsMatching.test_empty_matching  s)    MM!~~a''''r   c                 n    [         R                  " S5      n[         R                  " US15      (       d   eg )Nr0   r7   r   r   s     r   r"   TestIsMatching.test_single_edge  s)    MM!~~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 )Nr0   r    r1   r   r   )r/   r-   r   r   s     r   test_edge_orderTestIsMatching.test_edge_order  s    MM!~~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 Nr0   r    r1   r   r   s     r   test_valid_matching"TestIsMatching.test_valid_matching  s,    MM!~~a&&!12222r   c                    [         R                  n[         R                  " S5      n[        U[         R                  USS15        [        U[         R                  USS15        [        U[         R                  USS15        g )Nr0   r   r.   r1   r   r   r-   r   )r   NetworkXErrorr   r   r   r   r   r   s      r   test_invalid_input!TestIsMatching.test_invalid_input  s_      MM!ubnna&&)9:ubnna)V)<=ubnna$8r   c                 0   [         R                  n[         R                  " S5      n[        U[         R                  USS15        [         R                  " U1 Sk5      (       a   eUR                  SS5        [         R                  " USS15      (       a   eg Nr0   )r.   r.   r1   >   r   r   r7   r1   r   r   r7   )r   r   r   r   r   r   r   s      r   test_selfloopsTestIsMatching.test_selfloops  sw      MM!ubnna&&)9:>>!%=>>>>	

1a>>!ff%566666r   c                 p    [         R                  " S5      n[         R                  " U1 Sk5      (       a   eg )Nr0      r    r7   r1   r   r   s     r   test_invalid_matching$TestIsMatching.test_invalid_matching  s+    MM!>>!%=>>>>>r   c                    [         R                  " S5      n[         R                  " USS15      (       a   e[        [         R                  [         R                  US15        [         R
                  " UR                  5      n[         R                  " US15      (       d   e[         R                  " US15      (       a   eg )Nr0   r   r/   r7   )r   r   r    r   )r   r   r   r   r   r   edgesr   s     r   test_invalid_edge TestIsMatching.test_invalid_edge  s    MM!>>!ff%56666rWI>JJqww~~a&****>>!fX.....r   r   N)r   r   r   r   r   r   r   r"   r   r   r   r   r   r   r   r   r   r   r   r     s4    
;(+339	7?/r   r   c                   6    \ rS 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    MM!%%aQ1q)ABBBBr   c                 <   [         R                  n[         R                  " S5      n[        U[         R                  US15        [        U[         R                  US15        [        U[         R                  USS15        [        U[         R                  USS15        g Nr0   r   )r.   r   r   r1   r   )r   r   r   r   r   r   s      r   r   (TestIsMaximalMatching.test_invalid_input  x      MM!ub,,a&:ub,,a&:ub,,a)V1DEub,,a$@r   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  .    MM!%%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 )Nr0   r   r   r   r   )r   r   r   r   r   s     r   test_not_matching'TestIsMaximalMatching.test_not_matching  sq    MM!))!-EFFFF))!fX6666	

1a))!fX66666r   c                 n    [         R                  " S5      n[         R                  " US15      (       a   eg )Nr0   r    r   r   s     r   test_not_maximal&TestIsMaximalMatching.test_not_maximal  s.    MM!))!fX66666r   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s"    
CA;77r   r   c                   B    \ rS 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 )Nr0   r   r   r.   r-   >   r   r   r0   r.   r-   r   cycle_graphr   r   r   s     r   test_valid_not_path)TestIsPerfectMatching.test_valid_not_path  sT    NN1	

1a	

1a	

1a%%a)ABBBBr   c                 <   [         R                  n[         R                  " S5      n[        U[         R                  US15        [        U[         R                  US15        [        U[         R                  USS15        [        U[         R                  USS15        g r   )r   r   r   r   r   r   s      r   r   (TestIsPerfectMatching.test_invalid_input  r   r   c                 0   [         R                  n[         R                  " S5      n[        U[         R                  USS15        [         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   r   r   r   r   s      r   r   $TestIsPerfectMatching.test_selfloops  s}      MM!ub,,a&&1AB))!-EFFFF	

1a))!ff-=>>>>>r   c                     [         R                  " S5      n[         R                  " US15      (       a   e[         R                  " U1 Sk5      (       a   eg )Nr0   r   r   r   r   s     r   r   'TestIsPerfectMatching.test_not_matching"  sH    MM!))!fX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 )Nr0   r   r   r  r   r  r   s     r   test_maximal_but_not_perfect2TestIsPerfectMatching.test_maximal_but_not_perfect'  sM    NN1	

1a	

1a))!ff-=>>>>>r   r   N)r   r   r   r   r   r   r   r  r   r   r   r  r   r   r   r   r   r     s.    
C;CA	?G
?r   r   c                   6    \ rS 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)r7   )r   r.   r1   )r-   r.   )r/   r0   )r/   rR   )r.   rR   )r   r   maximal_matchingr   )r   r   r   matchings       r   r   'TestMaximalMatching.test_valid_matching5  s;    HHHUO&&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    MM!&&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>I  s     3($!qv(s   )r   r   add_edges_fromr  r  anyr   r  s      r   test_self_loops#TestMaximalMatching.test_self_loopsB  ss    MM!	&&)*&&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/   r    )r   r-   r   N)	r   ranger   r   add_nodes_fromr&  r  r  r   )r   nodesr   r  s       r   test_ordering!TestMaximalMatching.test_orderingL  s|    
 "%(+E
AU#ff-.**1-Hx=A%%%))!6666 ,r   c                 8   [         R                  n[        U[         R                  [         R                  " 5       5        [        U[         R                  [         R
                  " 5       5        [        U[         R                  [         R                  " 5       5        g r   )r   r   r   r  r   r   r   r   s     r   r   )TestMaximalMatching.test_wrong_graph_typeY  sV    ))ub))2==?;ub))2??+<=ub))2::<8r   r   N)r   r   r   r   r   r   r  r(  r.  r   r   r   r   r   r  r  /  s     
33379r   r  )r?   	itertoolsr   pytestr   networkxr   networkx.algorithms.matchingr   networkx.utilsr   r   r   r   r   r  r   r   r   <module>r7     sO     "   = &F< F<R</ </~!7 !7H5? 5?p.9 .9r   