o
    	h_.                     @   s2  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
 d dlmZmZ dd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejdg d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-d. Zd/d0 Zejjd1d2 Zd3d4 Z ed5d*gg d6g d7g d8gg d9fg d:g d;g d<gg d=fg d>g d?g d@gg dAfg dBg dCg dDgg dEfdFe!dGe!dGge!dGe!dGd*ge!dGdHe!dGggg dAfgZ"ejdIe"dJdK Z#dS )L    )productN)assert_array_equalassert_equal)	csr_arraydiags_array)maximum_bipartite_matching"min_weight_full_bipartite_matchingc                  C   sN   t t tddgddgg} t|  W d    d S 1 s w   Y  d S )Nr      )pytestraises	TypeErrornparrayr   )graph r   \/var/www/vscode/kcb/lib/python3.10/site-packages/scipy/sparse/csgraph/tests/test_matching.py5test_maximum_bipartite_matching_raises_on_dense_input   s   
"r   c                  C   sB   t d} t| dd}t| dd}tg }t|| t|| d S )Nr   r   row	perm_typecolumnr   r   r   r   r   r   xyexpected_matchingr   r   r   +test_maximum_bipartite_matching_empty_graph   s   

r   c                  C   sH   t d} t| dd}t| dd}ttg | ttddg| d S )N   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   4test_maximum_bipartite_matching_empty_left_partition   s
   r#   c                  C   sH   t d} t| dd}t| dd}ttg d| ttg | d S )Nr      r   r   r   )r    r    r    r!   r"   r   r   r   5test_maximum_bipartite_matching_empty_right_partition$   s
   r&   c                  C   sL   t d} t| dd}t| dd}ttddg| ttddg| d S )Nr   r   r   r   r   r    r!   r"   r   r   r   3test_maximum_bipartite_matching_graph_with_no_edges,   s
   r(   c                  C   sR   t ddgddgg} t| dd}t| dd}tddg}t|| t|| d S )Nr	   r   r   r   r   r   r   r   r   r   >test_maximum_bipartite_matching_graph_that_causes_augmentation4   s   
r)   c                  C   s^   t ddgddgddgg} t| dd}t| dd}ttg d| ttddg| d S )Nr	   r   r   r   r   r   r    r	   r   r!   r"   r   r   r   Atest_maximum_bipartite_matching_graph_with_more_rows_than_columns?   s
   r+   c                  C   sX   t g dg dg} t| dd}t| dd}ttddg| ttg d| d S )	N)r	   r	   r   r   r   r	   r   r   r   r   r   r*   r!   r"   r   r   r   Atest_maximum_bipartite_matching_graph_with_more_columns_than_rowsG   s
   r-   c                  C   sh   ddg} ddg}g d}t | ||fdd}t|dd}t|dd}tddg}t|| t|| d S )	Nr   r	   )r   r	   r   r'   shaper   r   r   r   )dataindicesindptrr   r   r   r   r   r   r   =test_maximum_bipartite_matching_explicit_zeros_count_as_edgesO   s   
r3   c                  C   s   t jdtd} g d}g d}t| ||fdd}t|dd}t|d	d}|d
k dks.J |d
k dks8J tt|jd |D ]\}}|d
krR|||f sRJ qBt|t|jd D ]\}}|d
krm|||f smJ q]d S )N2   dtype)2                  r:   r%      
   r<      r7   r8      r<   r@         r:   r%      r%   r@   rA   r7   r8   r9   r:   r;   r<   r:   r%   r=   r>   r<   r?   r7   r8   r@   r<   r@   rA   rB   r:   r%   rC   r%   r@   rA   )r   r<      r>   r>   rC   rB   r:   r:   r;             #   rH   (   -   /   rK   0   r4   )rB   rE   r.   r   r   r   r    r@   r   r	   )	r   onesintr   r   sumzipranger/   )r0   r1   r2   r   r   r   uvr   r   r   5test_maximum_bipartite_matching_feasibility_of_result[   s"   rT   c                  C   sL  t jd tt dddd} t jd}t jd}t d}|}t jdtd}t|||ff}|}t d}t jdtd}	t|	||ff}
||  |
 }t	|dd}t d}|}t jdtd}t|||ff}|| }t	|d	d}|}t d}t jdtd}	t|	||ff}
||
 }t
t| dkd
 t
t| dkd
 d S )N*   rE   r   csr)offsetsformatr5   r   r   r   F)r   randomseedr   rM   permutationarangerN   r   r   r   anydiagonal)A	rand_perm
rand_perm2RrowRcolRdataRmatCrowCcolCdataCmatBpermC1perm2C2r   r   r   Ftest_matching_large_random_graph_with_one_edge_incident_to_each_vertexq   s6   



ro   znum_rows,num_cols)r   r   r$   c                 C   s<   t || f}t|\}}t|dksJ t|dksJ d S )Nr   )r   r   len)num_rowsnum_colsbiadjacencyrow_indcol_indr   r   r   +test_min_weight_full_matching_trivial_graph   s   rv   rs   )r	   r	   r	   )r	   r   r   r,   )r	   r   r   r	   )r	   r	   r   r	   )r   r   r   r   )r   r   r   )r   r	   r   )r   r   r   r	   r   r<   c                 C   s<   t t tt|  W d    d S 1 sw   Y  d S N)r
   r   
ValueErrorr   r   rs   r   r   r   1test_min_weight_full_matching_infeasible_problems   s   
"rz   c                  C   s   t 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d tt|  W d    d S 1 s`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   rx   r   r   )ar   r   r   .test_min_weight_full_matching_large_infeasible   s6   0"r   c                  C   s@   t t td} t|  W d    d S 1 sw   Y  d S )N))r   r   r%   )r   r	   r	   )r   r   r%   )r
   warnsUserWarningr   r   ry   r   r   r   !test_explicit_zero_causes_warning   s   
"r   c           	   	   C   s   |\}}|dk}||| }|t | }| ||d\}}t|t | t|t |||f   |j}| ||d\}}t|t | tt |t t |||f   d S )Nr    )maximize)r   r   r   sortflattenT)	solver
array_typesign	test_casecost_matrixexpected_costr   rt   ru   r   r   r    linear_sum_assignment_assertions   s$   

r   r    )     r   )r     X  ),     r   )r   r   r   )r   r   r   r	   )r   r   r   r   )r   r   r   r%   )r   r   r   )r>   r>   r=   )	   r=   r	   )r   rD      )r>   r	   rD   )r>   r>   r=   r7   )r   r=   r	   r	   )r   rD   r   r>   )r>   r	   r   r>   infrD   zsign,test_casec                 C   s   t tt| | d S rw   )r   r   r   )r   r   r   r   r   *test_min_weight_full_matching_small_inputs$  s   r   )$	itertoolsr   numpyr   numpy.testingr   r   r
   scipy.sparser   r   scipy.sparse.csgraphr   r   r   r   r#   r&   r(   r)   r+   r-   r3   rT   ro   markparametrizerv   rz   r   thread_unsafer   r   float linear_sum_assignment_test_casesr   r   r   r   r   <module>   s    	'

	6
"