U
    /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   O/tmp/pip-unpacked-wheel-9gxwnfpp/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st|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   Z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(   	

