o
    Ö­j_.  ã                   @   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   úe/var/www/html/CropPilot/venv/lib/python3.10/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©Ú	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 )Né2   ©Ú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{   gCðÏw}‹?gN•RDD9³?r{   r{   r{   g½­p¢ÈÀç?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{   gÛY‰³\½?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{   gËz{!.Šì?r{   r{   r{   güoFI%°?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{   gýqÒfbÛÇ?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{   )gvÁCÅöâÒ?r{   r{   r{   r{   r{   r{   r{   gŽŒ8»¾¸?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
þýþýþýþýþýçþ"