
    (ph_.                        S SK Jr  S SKrS SKJrJr  S SKrS SKJ	r	J
r
  S SKJrJr  S rS rS rS	 rS
 rS rS rS rS rS rS r\R2                  R5                  S/ SQ5      S 5       r\R2                  R5                  S/ SQ/ SQ/ SQ// SQ/ SQ/ SQ// SQ/ SQ/ SQ// SQ/ SQ// SQ/ SQ/SS /SS /S S ///5      S! 5       rS" r\R2                  R<                  S# 5       rS$ r \" S%S// S&Q/ S'Q/ S(Q// S)Q4/ S*Q/ S+Q/ S,Q// S-Q4/ S.Q/ S/Q/ S0Q// S1Q4/ S2Q/ S3Q/ S4Q// S5Q4S6\!" S75      \!" S75      /\!" S75      \!" S75      S/\!" S75      S8\!" S75      /// S1Q4/5      r"\R2                  R5                  S9\"5      S: 5       r#g);    )productN)assert_array_equalassert_equal)	csr_arraydiags_array)maximum_bipartite_matching"min_weight_full_bipartite_matchingc                      [         R                  " [        5         [        R                  " SS/SS//5      n [        U 5        S S S 5        g ! , (       d  f       g = f)Nr      )pytestraises	TypeErrornparrayr   )graphs    [/var/www/html/venv/lib/python3.13/site-packages/scipy/sparse/csgraph/tests/test_matching.py5test_maximum_bipartite_matching_raises_on_dense_inputr      s=    	y	!1a&1a&)*"5) 
"	!	!s   (A
Ac                      [        S5      n [        U SS9n[        U SS9n[        R                  " / 5      n[	        X15        [	        X25        g )Nr   r   row	perm_typecolumnr   r   r   r   r   r   xyexpected_matchings       r   +test_maximum_bipartite_matching_empty_graphr      sD    fE"5E:A"5H=A(,(,    c                      [        S5      n [        U SS9n[        U SS9n[        [        R                  " / 5      U5        [        [        R                  " SS/5      U5        g )N   r   r   r   r   r   r   r   r   r   r   r   r   s      r   4test_maximum_bipartite_matching_empty_left_partitionr'      sM    fE"5E:A"5H=Arxx|Q'rxxR)1-r    c                      [        S5      n [        U SS9n[        U SS9n[        [        R                  " / SQ5      U5        [        [        R                  " / 5      U5        g )Nr      r   r   r   )r$   r$   r$   r%   r&   s      r   5test_maximum_bipartite_matching_empty_right_partitionr+   $   sI    fE"5E:A"5H=Arxx-q1rxx|Q'r    c                      [        S5      n [        U SS9n[        U SS9n[        [        R                  " SS/5      U5        [        [        R                  " SS/5      U5        g )Nr#   r#   r   r   r   r$   r%   r&   s      r   3test_maximum_bipartite_matching_graph_with_no_edgesr.   ,   sR    fE"5E:A"5H=ArxxR)1-rxxR)1-r    c                      [        SS/SS//5      n [        U SS9n[        U SS9n[        R                  " SS/5      n[	        X15        [	        X25        g )Nr   r   r   r   r   r   r   s       r   >test_maximum_bipartite_matching_graph_that_causes_augmentationr0   4   sX     1v1v&'E"5H=A"5E:A!Q((,(,r    c                      [        SS/SS/SS//5      n [        U SS9n[        U SS9n[        [        R                  " / SQ5      U5        [        [        R                  " SS/5      U5        g )Nr   r   r   r   r   r   r$   r   r#   r%   r&   s      r   Atest_maximum_bipartite_matching_graph_with_more_rows_than_columnsr3   ?   sa    1v1v1v./E"5H=A"5E:Arxx
+Q/rxxA'+r    c                      [        / SQ/ SQ/5      n [        U SS9n[        U SS9n[        [        R                  " SS/5      U5        [        [        R                  " / SQ5      U5        g )	N)r   r   r   r   r   r   r   r   r   r   r#   r2   r%   r&   s      r   Atest_maximum_bipartite_matching_graph_with_more_columns_than_rowsr6   G   sS    y),-E"5H=A"5E:ArxxA'+rxx
+Q/r    c                      SS/n SS/n/ SQn[        XU4SS9n[        USS9n[        USS9n[        R                  " SS/5      n[	        Xd5        [	        Xe5        g )	Nr   r   )r   r   r#   r-   shaper   r   r   r   )dataindicesindptrr   r   r   r   s          r   =test_maximum_bipartite_matching_explicit_zeros_count_as_edgesr=   O   sg    q6D!fGFtf-V<E"5E:A"5H=A!Q((,(,r    c                     [         R                  " S[        S9n / SQn/ SQn[        XU4SS9n[	        USS9n[	        US	S9nUS
:g  R                  5       S:X  d   eUS
:g  R                  5       S:X  d   e[        [        UR                  S   5      U5       H  u  pgUS
:w  d  M  X6U4   (       a  M   e   [        U[        UR                  S   5      5       H  u  pgUS
:w  d  M  X6U4   (       a  M   e   g )N2   dtype)2                  rE   r*      
   rG      rB   rC      rG   rK         rE   r*      r*   rK   rL   rB   rC   rD   rE   rF   rG   rE   r*   rH   rI   rG   rJ   rB   rC   rK   rG   rK   rL   rM   rE   r*   rN   r*   rK   rL   )r   rG      rI   rI   rN   rM   rE   rE   rF             #   rS   (   -   /   rV   0   r?   )rM   rP   r8   r   r   r   r$   rK   r   r   )	r   onesintr   r   sumzipranger9   )r:   r;   r<   r   r   r   uvs           r   5test_maximum_bipartite_matching_feasibility_of_resultr_   [   s    772S!DJGFtf-X>E"5E:A"5H=AG==?b   G==?b   E%++a.)1-7A;;; . AuU[[^,-7A;;; .r    c                     [         R                  R                  S5        [        [         R                  " S5      SSS9n [         R                  R                  S5      n[         R                  R                  S5      n[         R                  " S5      nUn[         R                  " S[        S9n[        XSU445      nUn[         R                  " S5      n[         R                  " S[        S9n	[        XU445      n
X`-  U
-  n[        USS9n[         R                  " S5      nUn[         R                  " S[        S9n[        XSU445      nXk-  n[        US	S9nUn[         R                  " S5      n[         R                  " S[        S9n	[        XU445      n
X-  n[        [        UR                  5       S:H  5      S
5        [        [        UR                  5       S:H  5      S
5        g )N*   rP   r   csr)offsetsformatr@   r   r   r   F)r   randomseedr   rX   permutationarangerY   r   r   r   anydiagonal)A	rand_perm
rand_perm2RrowRcolRdataRmatCrowCcolCdataCmatBpermC1perm2C2s                   r   Ftest_matching_large_random_graph_with_one_edge_incident_to_each_vertexr{   q   s   IINN2BGGBK59A		%%b)I&&r*J99R=DDGGBc"EeD\*+DD99R=DGGBc"EeD\*+D4A &a59D99R=DDGGBc"EeD\*+D	B 'qH=ED99R=DGGBc"EeD\*+D	
B R[[]a'(%0R[[]a'(%0r    znum_rows,num_cols)r   r"   r)   c                 z    [        X45      n[        U5      u  p4[        U5      S:X  d   e[        U5      S:X  d   eg )Nr   )r   r	   len)num_rowsnum_colsbiadjacencyrow_indcol_inds        r   +test_min_weight_full_matching_trivial_graphr      s@    X01K9+FGw<1w<1r    r   )r   r   r   )r   r   r   r5   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r#   r   r   )r   r   r   )r   r#   r   r   r#   rG   c                     [         R                  " [        5         [        [	        U 5      5        S S S 5        g ! , (       d  f       g = fN)r   r   
ValueErrorr	   r   r   s    r   1test_min_weight_full_matching_infeasible_problemsr      s)     
z	"*9[+AB 
#	"	"s	   9
Ac                  B   [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n [        R                  " [        SS9   [        [        U 5      5        S S S 5        g ! , (       d  f       g = f)N)        r   r   r   r   r   r   r   r   r   r   r   r   MbP?r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   g|{?r   r   gCw}?gNRDD9?r   r   r   gp?r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   g<(@?r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   gI} 7?r   r   r   r   g	v?r   r   r   r   r   r   r   r   r   r   r   r   )r   gV?r   r   r   gY\?r   r   r   g!?r   r   r   r   r   r   r   r   r   r   r   r   )gj]8J=?r   g$]}?r   r   r   r   r   g⦫\H?r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   gYI!?r   r   r   r   r   g$?r   r   r   r   r   r   r   r   r   r   r   r   r   )g- O?r   r   r   r   r   r   r   g-J;?r   r   r   r   r   r   r   r   r   r   r   r   r   )r   gzm)Ի?r   r   r   gz{!.?r   r   r   goFI%?r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   g-en?r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   g?r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   g7?r   r   gqfb?g]!?r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   gk?r   r   gT#P?g:w?r   r   r   r   r   r   r   r   r   r   )gvC?r   r   r   r   r   r   r   g8?r   r   r   r   r   r   r   r   r   r   r   r   r   zno full matching exists)match)r   asarrayr   r   r   r	   r   )as    r   .test_min_weight_full_matching_large_infeasibler      s    


	B	B	B	B	B	B	B	B	B	"	E	E		J	J	J	E	B	E	F	G	E[/
 /	A` 
z)B	C*9Q<8 
D	C	Cs   2B
Bc                      [         R                  " [        5         [        S5      n [	        U 5        S S S 5        g ! , (       d  f       g = f)N))r#   r   r*   )r   r   r   )r   r#   r*   )r   warnsUserWarningr   r	   r   s    r   !test_explicit_zero_causes_warningr      s-    	k	" AB*;7 
#	"	"s	   ;
A	c           
      ,   Uu  pEUS:H  nX!" U5      -  nU[         R                  " U5      -  nU " XFS9u  px[        U[         R                  " U5      5        [        U[         R                  " XGU4   5      R	                  5       5        UR
                  nU " XFS9u  px[        U[         R                  " U5      5        [        [         R                  " U5      [         R                  " [         R                  " XGU4   5      5      R	                  5       5        g )Nr$   )maximize)r   r   r   sortflattenT)	solver
array_typesign	test_casecost_matrixexpected_costr   r   r   s	            r    linear_sum_assignment_assertionsr      s     "+KrzHK00K288M22Mk=Gw 01}xxW,< =>FFHJ --Kk=Gw 01rww}-wwrxx&'78 : ;;B79Fr    r$   )     r   )r     X  ),     r   )r   r   r   )r   r   r   r   )r   r   r   r#   )r   r   r   r*   )r   r#   r   )rI   rI   rH   )	   rH   r   )r   rO      )rI   r   rO   )rI   rI   rH   rB   )r   rH   r   r   )r   rO   r   rI   )rI   r   r   rI   infrO   zsign,test_casec                 .    [        [        [        X5        g r   )r   r	   r   )r   r   s     r   *test_min_weight_full_matching_small_inputsr   $  s    $*ItHr    )$	itertoolsr   numpyr   numpy.testingr   r   r   scipy.sparser   r   scipy.sparse.csgraphr   r	   r   r   r'   r+   r.   r0   r3   r6   r=   r_   r{   markparametrizer   r   r   thread_unsafer   r   float linear_sum_assignment_test_casesr    r    r   <module>r      s     :  /
*-.(.-,0	-,$1N ,.FG H &	9=&	9=)<F&	2&	2VaVaV4CC
39l 8 8F* $+G 


 
	 


 
	
 


 
	 


 
	 uU|U5\
*<uq
)<E%L
)
+ 
	3$  D )+KLH MHr    