U
    »mœdT!  ã                   @   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   úa/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/sparse/csgraph/tests/test_matching.pyÚ5test_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sât‚|d k ¡ dksöt‚tt|j	d ƒ|ƒD ]&\}}|d k�r
|||f �s
t‚�q
t|t|j	d! ƒƒD ]&\}}|d k�rF|||f �sFt‚�qFd S )"Né2   ©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   Ú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‚   	'
ûÿ
þý


þýþý


þýþýçþ"