
    Ug.                        d dl mZ d dlZd dlmZmZ d dlZd dlm	Z	m
Z
mZ d dlmZmZ d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zej                            dg d          d             Zej                            dg dg dg dgg dg dg dgg dg dg dgg dg dgg dg dgdd gdd gd d ggg          d!             Zd" Zd# Zd$ Z  ed%dgg d&g d'g d(gg d)fg d*g d+g d,gg d-fg d.g d/g d0gg d1fg d2g d3g d4gg d5fd6 e!d7           e!d7          g e!d7           e!d7          dg e!d7          d8 e!d7          ggg d1fg          Z"ej                            d9e"          d:             Z#dS );    )productN)assert_array_equalassert_equal)
csr_matrix
coo_matrixdiags)maximum_bipartite_matching"min_weight_full_bipartite_matchingc                      t          j        t                    5  t          j        ddgddgg          } t          |            d d d            d S # 1 swxY w Y   d S )Nr      )pytestraises	TypeErrornparrayr	   )graphs    g/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/sparse/csgraph/tests/test_matching.py5test_maximum_bipartite_matching_raises_on_dense_inputr      s    	y	!	! * *1a&1a&)**"5)))* * * * * * * * * * * * * * * * * *s   *AAAc                      t          d          } t          | d          }t          | d          }t          j        g           }t	          ||           t	          ||           d S )Nr   r   row	perm_typecolumnr   r	   r   r   r   r   xyexpected_matchings       r   +test_maximum_bipartite_matching_empty_graphr       si    vE"5E:::A"5H===A(!,,,(!,,,,,    c                      t          d          } t          | d          }t          | d          }t          t          j        g           |           t          t          j        ddg          |           d S )N   r   r   r   r   r   r	   r   r   r   r   r   r   s      r   4test_maximum_bipartite_matching_empty_left_partitionr(      so    vE"5E:::A"5H===Arx||Q'''rxR))1-----r!   c                      t          d          } t          | d          }t          | d          }t          t          j        g d          |           t          t          j        g           |           d S )Nr      r   r   r   )r%   r%   r%   r&   r'   s      r   5test_maximum_bipartite_matching_empty_right_partitionr,   $   so    vE"5E:::A"5H===Arx--q111rx||Q'''''r!   c                      t          d          } t          | d          }t          | d          }t          t          j        ddg          |           t          t          j        ddg          |           d S )Nr$   r$   r   r   r   r%   r&   r'   s      r   3test_maximum_bipartite_matching_graph_with_no_edgesr/   ,   su    vE"5E:::A"5H===ArxR))1---rxR))1-----r!   c                      t          ddgddgg          } t          | d          }t          | d          }t          j        ddg          }t	          ||           t	          ||           d S )Nr   r   r   r   r   r   r   s       r   >test_maximum_bipartite_matching_graph_that_causes_augmentationr1   4   s~     AA'((E"5H===A"5E:::A!Q(((!,,,(!,,,,,r!   c                  
   t          ddgddgddgg          } t          | d          }t          | d          }t          t          j        g d          |           t          t          j        ddg          |           d S )Nr   r   r   r   r   r   r%   r   r$   r&   r'   s      r   Atest_maximum_bipartite_matching_graph_with_more_rows_than_columnsr4   ?   s    AAA/00E"5H===A"5E:::Arx


++Q///rxA''+++++r!   c                     t          g dg dg          } t          | d          }t          | d          }t          t          j        ddg          |           t          t          j        g d          |           d S )	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   s    			999-..E"5H===A"5E:::ArxA''+++rx


++Q/////r!   c                      ddg} ddg}g d}t          | ||fd          }t          |d          }t          |d          }t          j        ddg          }t	          ||           t	          ||           d S )	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   s    q6D!fGYYFgv.f===E"5E:::A"5H===A!Q(((!,,,(!,,,,,r!   c                  0   t          j        dt                    } g d}g d}t          | ||fd          }t	          |d          }t	          |d	          }|d
k                                    dk    sJ |d
k                                    dk    sJ t          t          |j        d                   |          D ]\  }}|d
k    r|||f         sJ t          |t          |j        d                             D ]\  }}|d
k    r|||f         sJ d S )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`   [   sN   72S!!!DJ J JG  Fgv.h???E"5E:::A"5H===AG==??b    G==??b    E%+a.))1--  177A;AuU[^,,--  177A; r!   c                     t           j                            d           t          t          j        d          dd          } t           j                            d          }t           j                            d          }t          j        d          }|}t          j        dt                    }t          |||ff          	                                }|}t          j        d          }t          j        dt                    }	t          |	||ff          	                                }
|| z  |
z  }t          |d          }t          j        d          }|}t          j        dt                    }t          |||ff          	                                }||z  }t          |d	          }|}t          j        d          }t          j        dt                    }	t          |	||ff          	                                }
||
z  }t          t          |                                dk              d
           t          t          |                                dk              d
           d S )N*   rQ   r   csr)offsetsformatrA   r   r   r   F)r   randomseedr   rY   permutationarangerZ   r   tocsrr	   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   INN2bgbkk1U333A	%%b))I&&r**J9R==DDGBc"""EutTl+,,2244DD9R==DGBc"""EutTl+,,2244Dq4A &a5999D9R==DDGBc"""EutTl+,,2244D	B 'qH===ED9R==DGBc"""EutTl+,,2244D	
TB R[[]]a'((%000R[[]]a'((%00000r!   znum_rows,num_cols)r   r#   r*   c                     t          || f          }t          |          \  }}t          |          dk    sJ t          |          dk    sJ d S )Nr   )r   r
   len)num_rowsnum_colsbiadjacency_matrixrow_indcol_inds        r   +test_min_weight_full_matching_trivial_graphr      s\    #Xx$8999:LMMGWw<<1w<<1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                     t          j        t                    5  t          t	          |                      d d d            d S # 1 swxY w Y   d S N)r   r   
ValueErrorr
   r   r   s    r   1test_min_weight_full_matching_infeasible_problemsr      s     
z	"	" K K*:6H+I+IJJJK K K K K K K K K K K K K K K K K Ks   AAAc                  R   t          j        g dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg          } t          j        t          d          5  t          t          |                      d d d            d S # 1 swxY w Y   d S )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      s0   

	B 	B 	B	B 	B 	B	B 	B 	B	B 	B 	B	B 	B 	B	B 	B 	B	B 	B 	B	B 	B 	B	B 	B 	B	" 	" 	"	E 	E 	E	E 	E 	E	 	 		J 	J 	J	J 	J 	J	J 	J 	J	E 	E 	E	B 	B 	B	E 	E 	E	F 	F 	F	G 	G 	G	E 	E 	E[/
 /	 /	A` 
z)B	C	C	C : :*:a==999: : : : : : : : : : : : : : : : : :s   2BB #B c                      t          j        t                    5  t          d          } t	          |            d d d            d S # 1 swxY w Y   d S )N))r$   r   r+   )r   r   r   )r   r$   r+   )r   warnsUserWarningr   r
   r   s    r   !test_explicit_zero_causes_warningr      s    	k	"	" ? ?'(IJJ*+=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   AA
A
c           
      t   |\  }}|dk    }| ||          z  }|t          j        |          z  } | ||          \  }}t          |t          j        |                     t          |t          j        |||f                                                              |j        } | ||          \  }}t          |t          j        |                     t          t          j        |          t          j        t          j        |||f                                                                        d S )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      sH    "+KrzHK000K28M222MvkH===GWw 0 0111}xGW,< =>>FFHHJ J J -KvkH===GWw 0 0111rw}--wrx&w'78 :  : ; ;;B799F F F F 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                 >    t          t          t          | |           d S r   )r   r
   r   )r   r   s     r   *test_min_weight_full_matching_small_inputsr   #  s,    $*JiI I I I I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   r   r   float linear_sum_assignment_test_casesr    r!   r   <module>r      s             : : : : : : : :  6 6 6 6 6 6 6 6 6 6       
* * *- - -. . .( ( (. . .- - -, , ,0 0 0	- 	- 	-  ,$1 $1 $1N ,.F.F.FGG  HG -&YY			999=&YY			999=)\\<<<F&YY			2&YY			2VaVaV4 K K K
3: 3: 3:l? ? ?F F F* $+7G //
//
//
 
	 








 
	
 ++
))
))
 
	 //
,,
--
 
	 uuU||UU5\\
*5<<uq
)5<<EE%LL
)
+ 
	3$ $  D )+KLLI I MLI I Ir!   