a
    Re.                     @   s.  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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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_matrix
coo_matrixdiags)maximum_bipartite_matching"min_weight_full_bipartite_matchingc                  C   sL   t t. tddgddgg} t|  W d    n1 s>0    Y  d S )Nr      )pytestraises	TypeErrornparrayr   )graph r   \/var/www/sunrise/env/lib/python3.9/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Z	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spJ tt|jd |D ] \}}|d
kr|||f sJ qt|t|jd D ] \}}|d
kr|||f sJ qd S )N2   Zdtype)2                  r9   r%      
   r;      r6   r7      r;   r?         r9   r%      r%   r?   r@   r6   r7   r8   r9   r:   r;   r9   r%   r<   r=   r;   r>   r6   r7   r?   r;   r?   r@   rA   r9   r%   rB   r%   r?   r@   )r   r;      r=   r=   rB   rA   r9   r9   r:             #   rG   (   -   /   rJ   0   r4   )rA   rD   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    rS   c                  C   s\  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*   rD   r   Zcsr)offsetsformatr5   r   r   r   F)r   randomseedr   rL   ZpermutationZarangerM   r   Ztocsrr   r   anyZdiagonal)AZ	rand_permZ
rand_perm2ZRrowZRcolZRdataZRmatZCrowZCcolZCdataZCmatBpermZC1Zperm2ZC2r   r   r   Ftest_matching_large_random_graph_with_one_edge_incident_to_each_vertexq   s6    



r]   znum_rows,num_cols)r   r   r$   c                 C   s<   t || f}t|\}}t|dks(J t|dks8J d S )Nr   )r   r	   len)Znum_rowsZnum_colsbiadjacency_matrixrow_indcol_indr   r   r   +test_min_weight_full_matching_trivial_graph   s    rb   r_   )r
   r
   r
   )r
   r   r   r,   )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    n1 s,0    Y  d S N)r   r   
ValueErrorr	   r   r_   r   r   r   1test_min_weight_full_matching_infeasible_problems   s    
rf   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    n1 s0    Y  d S )N)        rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   MbP?rg   rg   rg   rg   rg   rg   rg   rg   )rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rh   rg   rg   rg   rg   rg   rg   rg   )rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rh   rg   rg   rg   rg   rg   rg   )rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rh   rg   rg   rg   rg   rg   )rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rh   rg   rg   rg   rg   )rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rh   rg   rg   rg   )rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rh   rg   rg   )rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rh   rg   )rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rh   )rg   g|{?rg   rg   gCw}?gNRDD9?rg   rg   rg   gp?rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   )rg   rg   rg   g<(@?rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   )rg   rg   rg   rg   gI} 7?rg   rg   rg   rg   g	v?rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   )rg   gV?rg   rg   rg   gY\?rg   rg   rg   g!?rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   )gj]8J=?rg   g$]}?rg   rg   rg   rg   rg   g⦫\H?rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   )rg   rg   gYI!?rg   rg   rg   rg   rg   g$?rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   )g- O?rg   rg   rg   rg   rg   rg   rg   g-J;?rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   )rg   gzm)Ի?rg   rg   rg   gz{!.?rg   rg   rg   goFI%?rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   )rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   g-en?rg   rg   rg   rg   rg   rg   rg   rg   rg   )rg   rg   rg   rg   rg   rg   g?rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   )rg   rg   rg   rg   rg   rg   rg   g7?rg   rg   gqfb?g]!?rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   )rg   rg   rg   rg   rg   rg   rg   gk?rg   rg   gT#P?g:w?rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   )gvC?rg   rg   rg   rg   rg   rg   rg   g8?rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   rg   zno full matching exists)match)r   Zasarrayr   r   rd   r	   r   )ar   r   r   .test_min_weight_full_matching_large_infeasible   s4    0rk   c                  C   s>   t t  td} t|  W d    n1 s00    Y  d S )N))r   r   r%   )r   r
   r
   )r   r   r%   )r   ZwarnsUserWarningr   r	   re   r   r   r   !test_explicit_zero_causes_warning   s    rm   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)	ZsolverZ
array_typesign	test_caseZcost_matrixZexpected_costrn   r`   ra   r   r   r    linear_sum_assignment_assertions   s"    

rt   r    )     ru   )ru     X  ),     ry   )rv   ru   ry   )ru   rv   ru   r
   )ru   rw   rx   r   )ry   rz   ry   r%   )rv   r   ry   )r=   r=   r<   )	   r<   r
   )r{   rC      )r=   r
   rC   )r=   r=   r<   r6   )r{   r<   r
   r
   )r{   rC   r|   r=   )r=   r
   r|   r=   infrC   zsign,test_casec                 C   s   t tt| | d S rc   )rt   r	   r   )rr   rs   r   r   r   *test_min_weight_full_matching_small_inputs#  s    r~   )$	itertoolsr   numpyr   Znumpy.testingr   r   r   Zscipy.sparser   r   r   Zscipy.sparse.csgraphr   r	   r   r   r#   r&   r(   r)   r+   r-   r3   rS   r]   markZparametrizerb   rf   rk   rm   rt   floatZ linear_sum_assignment_test_casesr~   r   r   r   r   <module>   s   	'
	
6"