+
    /iO0                        ^ RI Ht ^ RIt^ RIHtHt ^ RIt^ RIH	t	H
t
Ht ^ RIHtHt R tR tR tR	 tR
 tR tR tR tR tR tR t]P4                  P7                  R. RO4      R 4       t]P4                  P7                  R. RO. RO. RO.. RO. RO. RO.. RO. R O. R!O.. RO. R"O.. R#O. R$O.^^ .^^ .^^ ...4      R 4       tR tR tR t ]! R%^.. R&O. R'O. R(O.. R)O3. R*O. R+O. R,O.. R-O3. R.O. R/O. R0O.. R1O3. R2O. R3O. R4O.. R5O3^
]!! R4      ]!! R4      .]!! R4      ]!! R4      ^.]!! R4      ^]!! R4      ... R1O3.4      t"]P4                  P7                  R]"4      R 4       t#R# )6    )productN)assert_array_equalassert_equal)	csr_array	coo_arraydiags_array)maximum_bipartite_matching"min_weight_full_bipartite_matchingc                      \         P                  ! \        4      ;_uu_ 4        \        P                  ! ^ ^.^ ^ ..4      p \        V 4       RRR4       R#   + '       g   i     R# ; ir   N)pytestraises	TypeErrornparrayr	   )graphs    f/var/www/html/photoedit/myenv/lib/python3.14/site-packages/scipy/sparse/csgraph/tests/test_matching.py5test_maximum_bipartite_matching_raises_on_dense_inputr      sC    	y	!	!1a&1a&)*"5) 
"	!	!	!s   (AA&	c                      \        R4      p \        V RR7      p\        V RR7      p\        P                  ! . 4      p\	        W14       \	        W24       R# )r   row	perm_typecolumnNr   r   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                      \        R4      p \        V RR7      p\        V RR7      p\        \        P                  ! . 4      V4       \        \        P                  ! RR.4      V4       R# )   r   r   r   N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                      \        R4      p \        V RR7      p\        V RR7      p\        \        P                  ! . RO4      V4       \        \        P                  ! . 4      V4       R# )r   r   r   r   N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                      \        R4      p \        V RR7      p\        V RR7      p\        \        P                  ! RR.4      V4       \        \        P                  ! RR.4      V4       R# )r#   r   r   r   N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                      \        ^^.^^ ..4      p \        V RR7      p\        V RR7      p\        P                  ! ^^ .4      p\	        W14       \	        W24       R# )   r   r   r   Nr   r   s       r   >test_maximum_bipartite_matching_graph_that_causes_augmentationr2   4   sX     1v1v&'E"5H=A"5E:A!Q((,(,r!   c                      \        ^^.^^ .^ ^..4      p \        V RR7      p\        V RR7      p\        \        P                  ! . RO4      V4       \        \        P                  ! ^ ^.4      V4       R# )r1   r   r   r   Nr   r%   r1   r&   r'   s      r   Atest_maximum_bipartite_matching_graph_with_more_rows_than_columnsr5   ?   sa    1v1v1v./E"5H=A"5E:Arxx
+Q/rxxA'+r!   c                      \        . RO. RO.4      p \        V RR7      p\        V RR7      p\        \        P                  ! ^ ^.4      V4       \        \        P                  ! . RO4      V4       R# )r1   r   r   r   N)r1   r1   r   r   r   r1   r4   r&   r'   s      r   Atest_maximum_bipartite_matching_graph_with_more_columns_than_rowsr8   G   sS    y),-E"5H=A"5E:ArxxA'+rxx
+Q/r!   c                      ^ ^ .p ^^ .p. ROp\        WV3RR7      p\        VRR7      p\        VRR7      p\        P                  ! ^^ .4      p\	        Wd4       \	        We4       R# )r   shaper   r   r   N)r   r1   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                     \         P                  ! ^2\        R7      p . ^N^N^N^N^N^N^N^N^N^
N^N^N^N^N^N^N^N^N^N^N^N^N^N^N^N^N^N^N^N^N^N^N^N^N^
N^N^N^N^N^N^N^N^N^N^N^N^N^N^N^Np. ROp\        WV3RR7      p\	        VRR7      p\	        VRR7      pVR	8g  P                  4       ^8X  g   Q hVR	8g  P                  4       ^8X  g   Q h\        \        VP                  ^ ,          4      V4       F   w  rgVR	8w  g   K  W6V3,          '       d   K   Q h	  \        V\        VP                  ^,          4      4       F   w  rgVR	8w  g   K  W6V3,          '       d   K   Q h	  R# )
2   dtyper:   r   r   r   N)r         
   rF            rI                #   rN   (   -   /   rQ   0   rA   )rH   rK   r%   )	r   onesintr   r	   sumzipranger;   )r<   r=   r>   r   r   r   uvs           r   5test_maximum_bipartite_matching_feasibility_of_resultrZ   [   s   772S!DJr J2 Jr J2 Jr J1 Jb J! JQ J JA Jq J" Jb J" Ja J JJJJJ J"#J%'J)+J-/J13J57J9;J=?JABJDFJHIJKLJJJJJJ!#J%&J(*J,.J02J46J89J;=J?@JBDJFHJGFtf-X>E"5E:A"5H=AG==?b   G==?b   E%++a.)1-7A;;; . AuU[[^,-7A;;; .r!   c                     \         P                  P                  ^*4       \        \         P                  ! ^4      ^ RR7      p \         P                  P                  ^4      p\         P                  P                  ^4      p\         P                  ! ^4      pTp\         P                  ! ^\        R7      p\        WSV334      pTp\         P                  ! ^4      p\         P                  ! ^\        R7      p	\        WV334      p
W`,          V
,          p\        VRR7      p\         P                  ! ^4      pTp\         P                  ! ^\        R7      p\        WSV334      pWk,          p\        VRR7      pTp\         P                  ! ^4      p\         P                  ! ^\        R7      p	\        WV334      p
W,          p\        \        VP                  4       ^ 8H  4      R4       \        \        VP                  4       ^ 8H  4      R4       R# )	*   csr)offsetsformatrB   r   r   r   FN)r   randomseedr   rS   permutationarangerT   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_vertexrv   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_colsc                     \        W34      p\        W34      p\        V4      w  rE\        V4      ^ 8X  g   Q h\        V4      ^ 8X  g   Q h\        V4      w  rg\        V4      ^ 8X  g   Q h\        V4      ^ 8X  g   Q hR# r   )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{   c                 P   \         P                  ! \        4      ;_uu_ 4        \        \	        V 4      4       R R R 4       \         P                  ! \        4      ;_uu_ 4        \        \        V 4      4       R R R 4       R #   + '       g   i     LQ; i  + '       g   i     R # ; iN)r   r   
ValueErrorr
   r   r   r{   s   &r   1test_min_weight_full_matching_infeasible_problemsr      s\     
z	"	"*9[+AB 
#	z	"	"*9[+AB 
#	" 
#	"	"	"	"s   B"BB	B%	c                     \         P                  ! . RO. RO. RO. RO. RO. R	O. R
O. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO. RO.4      p \        P                  ! \        RR7      ;_uu_ 4        \        \        V 4      4       RRR4       \        P                  ! \        RR7      ;_uu_ 4        \        \        V 4      4       RRR4       R#   + '       g   i     LS; i  + '       g   i     R# ; i)        zno full matching exists)matchN)r   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   )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	C*9Q<8 
D	z)B	C	C*9Q<8 
D	C 
D	C	C	C	Cs   =C>C0C-	0D	c                  ^   \        R4      p \        P                  ! \        4      ;_uu_ 4        \	        V 4       RRR4       \        P                  ! \        4      ;_uu_ 4        \	        V P                  4       4       RRR4       R#   + '       g   i     LV; i  + '       g   i     R# ; i)r#   N))r#   r   r+   )r   r1   r1   )r   r#   r+   )r   r   warnsUserWarningr
   tocoor   s    r   !test_explicit_zero_causes_warningr      sd    =>K	k	"	"*;7 
#	k	"	"*;+<+<+>? 
#	" 
#	"	"	"	"s   B$BB	B,	c           
      Z   Vw  rEVR8H  pW!! V4      ,          pV\         P                  ! V4      ,          pV ! WFR7      w  rx\        V\         P                  ! V4      4       \        V\         P                  ! WGV3,          4      P	                  4       4       VP
                  pV ! WFR7      w  rx\        V\         P                  ! V4      4       \        \         P                  ! V4      \         P                  ! \         P                  ! WGV3,          4      4      P	                  4       4       R# )r1   )maximizeNr%   )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!   infzsign,test_casec                 0    \        \        \        W4       R # r   )r   r
   r   )r   r   s   &&r   *test_min_weight_full_matching_small_inputsr   /  s    $*ItHr!   )r   r$   r*   )r1   r1   r1   )r1   r   r   r7   )r1   r   r   r1   )r1   r1   r   r1   )r   r   r   r   )r#   r   r   )r   r1   r   )r   r#   r   r%   )     r   )r     X  ),     r   )r   r   r   )r   r   r   r1   )r   r   r   r#   )r   r   r   r+   )r   r#   r   )rF   rF      )	   r   r1   )r   rE      )rF   r1   rE   )rF   rF   r      )r   r   r1   r1   )r   rE   r   rF   )rF   r1   r   )$	itertoolsr   numpyr   numpy.testingr   r   r   scipy.sparser   r   r   scipy.sparse.csgraphr	   r
   r   r    r(   r,   r/   r2   r5   r8   r?   rZ   rv   markparametrizer   r   r   r   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!   