U
    GvfT!                     @   sV  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dddgd d! Zejd"d#d#d#gd#d d gd#d d ggd#d#d#gd d d#gd d d#ggd#d d gd$d d ggd d#d gd d$d ggd#d gd$d gd%d gggd&d' Zd(d) Zd*d+ Zed,d#gd-d.d-gd-d/d0gd1d2d1ggd.d-d1gfd-d.d-d#gd-d/d0d$gd1d2d1d3ggd.d$d1gfd4d4d5gd6d5d#gd6d7d8ggd4d#d7gfd4d4d5d9gd6d5d#d#gd6d7d8d4ggd4d#d8gfd4e d:e d:ge d:e d:d#ge d:d7e d:ggd4d#d7gfgZ!ejd;e!d<d= Z"dS )>    )productN)assert_array_equalassert_equal)
csr_matrix
coo_matrixdiags)maximum_bipartite_matching"min_weight_full_bipartite_matchingc               	   C   s8   t t$ tddgddgg} t|  W 5 Q R X d S )Nr      )pytestraises	TypeErrornparrayr   )graph r   L/tmp/pip-unpacked-wheel-96ln3f52/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   sJ   t d} t| dd}t| dd}ttdddg| ttg | d S )N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dddg| ttddg| d S )Nr
   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   s^   t dddgdddgg} t| dd}t| dd}ttddg| ttdddg| d S )Nr
   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   sj   ddg} ddg}dddg}t | ||fdd}t|dd}t|dd}tddg}t|| t|| d S )	Nr   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    

r1   c               2   C   sr  t jdtd} dddddddd	d
dddddddddddd	dd	dddddddddd	d
dddddddddddd	dd	ddg2}dddddddddddddddddddddg}t| ||fdd}t|dd}t|dd}|d k dkst|d k dksttt|j	d |D ]&\}}|d kr
|||f s
tq
t|t|j	d! D ]&\}}|d krF|||f sFtqFd S )"N2   Zdtype                  r%      
                  r                #   (   -   /   0   )r?   rB   r,   r   r   r   r    r
   )
r   onesintr   r   sumAssertionErrorzipranger-   )r.   r/   r0   r   r   r   uvr   r   r   5test_maximum_bipartite_matching_feasibility_of_result[   sj    "                               "   

rR   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*   rB   r   Zcsr)offsetsformatr3   r   r   r   F)r   randomseedr   rJ   ZpermutationZarangerK   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_colsr   r   r$   c                 C   s<   t || f}t|\}}t|dks(tt|dks8td S )Nr   )r   r	   lenrM   )Znum_rowsZnum_colsbiadjacency_matrixrow_indcol_indr   r   r   +test_min_weight_full_matching_trivial_graph   s    ra   r^   r
   r   r9   c              	   C   s&   t t tt|  W 5 Q R X d S N)r   r   
ValueErrorr	   r   r^   r   r   r   1test_min_weight_full_matching_infeasible_problems   s    	re   c               	   C   s*   t t td} t|  W 5 Q R X 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    rg   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_costrh   r_   r`   r   r   r    linear_sum_assignment_assertions   s"    

rn   r    i     i  iX  i,     r%   r;   r:   	   rA      r4   infzsign,test_casec                 C   s   t tt| | d S rb   )rn   r	   r   )rl   rm   r   r   r   *test_min_weight_full_matching_small_inputs   s       rt   )#	itertoolsr   Znumpyr   Znumpy.testingr   r   r   Zscipy.sparser   r   r   Zscipy.sparse.csgraphr   r	   r   r   r#   r&   r(   r)   r*   r+   r1   rR   r\   markZparametrizera   re   rg   rn   floatZ linear_sum_assignment_test_casesrt   r   r   r   r   <module>   s   	'







"