U
    »mœdõ  ã                   @   sÚ   d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dl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ej ddddg¡dd„ ƒZej de¡dd „ ƒZd!d"„ ZdS )#é    )Úassert_array_equalN)Úlinear_sum_assignment)Úrandom)Úmatrix)Ú"min_weight_full_bipartite_matching)Ú linear_sum_assignment_assertionsÚ linear_sum_assignment_test_casesc                	   C   s,   t jtdd�� tdddgƒ W 5 Q R X d S )Nzexpected a matrix©Úmatché   é   é   )ÚpytestÚraisesÚ
ValueErrorr   © r   r   úd/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/optimize/tests/test_linear_assignment.pyÚ&test_linear_sum_assignment_input_shape   s    r   c                  C   sF   dddgdddgg} t t| ƒtt | ¡ƒƒ t t| ƒtt| ƒƒƒ d S )Nr   r   r   é   é   é   )r   r   ÚnpZasarrayr   )ÚCr   r   r   Ú'test_linear_sum_assignment_input_object   s    ÿ
ÿr   c                  C   s(   t  d¡} tt|  t j¡ƒt| ƒƒ d S )Nr   )r   Úidentityr   r   ÚastypeZbool_©ÚIr   r   r   Ú%test_linear_sum_assignment_input_bool   s    
ÿr   c               	   C   s6   t  d¡} tjtdd�� t|  t¡ƒ W 5 Q R X d S )Nr   zCannot cast array datar	   )r   r   r   r   Ú	TypeErrorr   r   Ústrr   r   r   r   Ú'test_linear_sum_assignment_input_string%   s    
r!   c               	   C   s8   t  t jddg¡} tjtdd�� t| ƒ W 5 Q R X d S ©Nr   z contains invalid numeric entriesr	   )r   ÚdiagÚnanr   r   r   r   r   r   r   r   Ú$test_linear_sum_assignment_input_nan+   s    r%   c               	   C   s:   t  dt j dg¡} tjtdd�� t| ƒ W 5 Q R X d S r"   )r   r#   Úinfr   r   r   r   r   r   r   r   Ú'test_linear_sum_assignment_input_neginf1   s    r'   c               	   C   sB   t  d¡} t j| d d …df< tjtdd�� t| ƒ W 5 Q R X d S )Nr   r   zcost matrix is infeasibler	   )r   r   r&   r   r   r   r   r   r   r   r   Ú$test_linear_sum_assignment_input_inf7   s    
r(   c                  C   sB   d} t  | | f¡}t|ƒ\}}t|t  | ¡ƒ t|t  | ¡ƒ d S )Né   )r   Zonesr   r   Zarange)Únr   Úrow_indÚcol_indr   r   r   Útest_constant_cost_matrix>   s
    r-   znum_rows,num_cols)r   r   )r   r   )r   r   c                 C   s@   t j|| fd�}t|ƒ\}}t|ƒdks,t‚t|ƒdks<t‚d S )N)Úshaper   )r   Úemptyr   ÚlenÚAssertionError)Znum_rowsZnum_colsr   r+   r,   r   r   r   Ú'test_linear_sum_assignment_trivial_costG   s    r2   zsign,test_casec                 C   s   t ttj| |ƒ d S )N)r   r   r   Úarray)ÚsignZ	test_caser   r   r   Ú'test_linear_sum_assignment_small_inputsO   s       ÿr5   c            	   	   C   sô   t j d¡ tdƒD ]Ú} d}d}tddddd„ d�}t  |jt j¡}|j||j|j	f< | 
¡ }z t|ƒ\}}|||f  ¡ }W n tk
r–   d}Y nX z t|ƒ\}}|||f  ¡ }W n tk
rÐ   d}Y nX ||ksÞt‚|s||kst‚qd S )	NiÒ  éd   Fg¸…ëQ¸®?c                 S   s   t j dd| ¡S )Nr   r6   )r   r   Úrandint)Úsizer   r   r   Ú<lambda>a   ó    zItest_two_methods_give_same_result_on_many_sparse_inputs.<locals>.<lambda>)ZdensityZdata_rvsT)r   r   ÚseedÚrangeÚfullr.   r&   ÚdataÚrowÚcolZtocsrr   Úsumr   r   r1   )	Ú_Z
lsa_raisesZmwfbm_raisesÚsparseZdenser+   r,   Zlsa_costZ
mwfbm_costr   r   r   Ú7test_two_methods_give_same_result_on_many_sparse_inputsW   s.    ÿ

rD   )Znumpy.testingr   r   Únumpyr   Zscipy.optimizer   Zscipy.sparser   Zscipy.sparse._sputilsr   Zscipy.sparse.csgraphr   Z(scipy.sparse.csgraph.tests.test_matchingr   r   r   r   r   r!   r%   r'   r(   r-   ÚmarkZparametrizer2   r5   rD   r   r   r   r   Ú<module>   s(   	

