o
    i_.                     @   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   b/home/kim/smarthome/.venv/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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   
r2   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   Zdtype)2                  r8   r$      
   r:      r5   r6      r:   r>         r8   r$      r$   r>   r?   r5   r6   r7   r8   r9   r:   r8   r$   r;   r<   r:   r=   r5   r6   r>   r:   r>   r?   r@   r8   r$   rA   r$   r>   r?   )r   r:      r<   r<   rA   r@   r8   r8   r9             #   rF   (   -   /   rI   0   r3   )r@   rC   r-   r   r   r   r   r>   r   r	   )	r   onesintr   r   sumzipranger.   )r/   r0   r1   r   r   r   uvr   r   r   5test_maximum_bipartite_matching_feasibility_of_result[   s"   rR   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*   rC   r   Zcsr)offsetsformatr4   r   r   r   F)r   randomseedr   rK   ZpermutationZarangerL   r   r   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sJ d S )Nr   )r   r   len)Znum_rowsZnum_colsbiadjacencyrow_indcol_indr   r   r   +test_min_weight_full_matching_trivial_graph   s   ra   r^   )r	   r	   r	   )r	   r   r   r+   )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   r^   r   r   r   1test_min_weight_full_matching_infeasible_problems   s   
"re   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)        rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   MbP?rf   rf   rf   rf   rf   rf   rf   rf   )rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rg   rf   rf   rf   rf   rf   rf   rf   )rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rg   rf   rf   rf   rf   rf   rf   )rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rg   rf   rf   rf   rf   rf   )rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rg   rf   rf   rf   rf   )rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rg   rf   rf   rf   )rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rg   rf   rf   )rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rg   rf   )rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rg   )rf   g|{?rf   rf   gCw}?gNRDD9?rf   rf   rf   gp?rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   )rf   rf   rf   g<(@?rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   )rf   rf   rf   rf   gI} 7?rf   rf   rf   rf   g	v?rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   )rf   gV?rf   rf   rf   gY\?rf   rf   rf   g!?rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   )gj]8J=?rf   g$]}?rf   rf   rf   rf   rf   g⦫\H?rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   )rf   rf   gYI!?rf   rf   rf   rf   rf   g$?rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   )g- O?rf   rf   rf   rf   rf   rf   rf   g-J;?rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   )rf   gzm)Ի?rf   rf   rf   gz{!.?rf   rf   rf   goFI%?rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   )rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   g-en?rf   rf   rf   rf   rf   rf   rf   rf   rf   )rf   rf   rf   rf   rf   rf   g?rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   )rf   rf   rf   rf   rf   rf   rf   g7?rf   rf   gqfb?g]!?rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   )rf   rf   rf   rf   rf   rf   rf   gk?rf   rf   gT#P?g:w?rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   )gvC?rf   rf   rf   rf   rf   rf   rf   g8?rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   rf   zno full matching exists)match)r   Zasarrayr
   r   rc   r   r   )ar   r   r   .test_min_weight_full_matching_large_infeasible   s6   0"rj   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
   ZwarnsUserWarningr   r   rd   r   r   r   !test_explicit_zero_causes_warning   s   
"rl   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_costrm   r_   r`   r   r   r    linear_sum_assignment_assertions   s$   

rs   r   )     rt   )rt     X  ),     rx   )ru   rt   rx   )rt   ru   rt   r	   )rt   rv   rw   r   )rx   ry   rx   r$   )ru   r   rx   )r<   r<   r;   )	   r;   r	   )rz   rB      )r<   r	   rB   )r<   r<   r;   r5   )rz   r;   r	   r	   )rz   rB   r{   r<   )r<   r	   r{   r<   infrB   zsign,test_casec                 C   s   t tt| | d S rb   )rs   r   r   )rq   rr   r   r   r   *test_min_weight_full_matching_small_inputs$  s   r}   )$	itertoolsr   numpyr   Znumpy.testingr   r   r
   Zscipy.sparser   r   Zscipy.sparse.csgraphr   r   r   r   r"   r%   r'   r(   r*   r,   r2   rR   r\   markZparametrizera   re   rj   Zthread_unsaferl   rs   floatZ linear_sum_assignment_test_casesr}   r   r   r   r   <module>   s    	'

	6
"