
    9ij0                        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
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\R4                  R7                  S/ SQ5      S 5       r\R4                  R7                  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\R4                  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#\R4                  R7                  S9\#5      S: 5       r$g);    )productN)assert_array_equalassert_equal)	csr_array	coo_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    h/var/www/html/land-doc-ocr/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_augmentationr1   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_columnsr4   ?   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$   r3   r&   r'   s      r   Atest_maximum_bipartite_matching_graph_with_more_columns_than_rowsr7   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                  rF   r+      
   rH      rC   rD      rH   rL         rF   r+      r+   rL   rM   rC   rD   rE   rF   rG   rH   rF   r+   rI   rJ   rH   rK   rC   rD   rL   rH   rL   rM   rN   rF   r+   rO   r+   rL   rM   )r   rH      rJ   rJ   rO   rN   rF   rF   rG             #   rT   (   -   /   rW   0   r@   )rN   rQ   r9   r   r   r   r%   rL   r   r   )	r   onesintr   r	   sumzipranger:   )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*   rQ   r   csr)offsetsformatrA   r   r   r   F)r   randomseedr   rY   permutationarangerZ   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                     [        X45      n[        X45      n[        U5      u  pE[        U5      S:X  d   e[        U5      S:X  d   e[        U5      u  pg[        U5      S:X  d   e[        U5      S:X  d   eg )Nr   )r   r   r
   len)num_rowsnum_colsbiadjacencybiadjacency1row_indcol_indrow_ind1col_ind1s           r   +test_min_weight_full_matching_trivial_graphr      s~    X01Kh12L9+FGw<1w<1;LIHx=Ax=Ar!   r   )r   r   r   )r   r   r   r6   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r$   r   r   )r   r   r   )r   r$   r   r   r$   rH   c                 $   [         R                  " [        5         [        [	        U 5      5        S S S 5        [         R                  " [        5         [        [        U 5      5        S S S 5        g ! , (       d  f       NF= f! , (       d  f       g = fN)r   r   
ValueErrorr
   r   r   r   s    r   1test_min_weight_full_matching_infeasible_problemsr      sS     
z	"*9[+AB 
#	z	"*9[+AB 
#	" 
#	"	"	"s   A0B0
A>
Bc                     [         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        [        R                  " [        SS9   [        [        U 5      5        S S S 5        g ! , (       d  f       NE= f! , (       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   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	z)B	C*9Q<8 
D	C 
D	C	C	Cs   2C(C
C
C%c                  2   [        S5      n [        R                  " [        5         [	        U 5        S S S 5        [        R                  " [        5         [	        U R                  5       5        S S S 5        g ! , (       d  f       NK= f! , (       d  f       g = f)N))r$   r   r+   )r   r   r   )r   r$   r+   )r   r   warnsUserWarningr
   tocoor   s    r   !test_explicit_zero_causes_warningr      s[    =>K	k	"*;7 
#	k	"*;+<+<+>? 
#	" 
#	"	"	"s   A7B7
B
B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   )rJ   rJ   rI   )	   rI   r   )r   rP      )rJ   r   rP   )rJ   rJ   rI   rC   )r   rI   r   r   )r   rP   r   rJ   )rJ   r   r   rJ   infrP   zsign,test_casec                 .    [        [        [        X5        g r   )r   r
   r   )r   r   s     r   *test_min_weight_full_matching_small_inputsr   0  s    $*ItHr!   )%	itertoolsr   numpyr   numpy.testingr   r   r   scipy.sparser   r   r   scipy.sparse.csgraphr	   r
   r   r    r(   r,   r/   r1   r4   r7   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59p @ @F* $+G 


 
	 


 
	
 


 
	 


 
	 uU|U5\
*<uq
)<E%L
)
+ 
	3$  D )+KLH MHr!   