a
    Re                     @   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g d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g d W d    n1 s00    Y  d S )Nzexpected a matrixmatch         )pytestraises
ValueErrorr    r   r   _/var/www/sunrise/env/lib/python3.9/site-packages/scipy/optimize/tests/test_linear_assignment.py&test_linear_sum_assignment_input_shape   s    r   c                  C   sB   g dg dg} t t| tt|  t t| tt|  d S )Nr   )         )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   sJ   t d} tjtdd t| t W d    n1 s<0    Y  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   sL   t t jddg} tjtdd t|  W d    n1 s>0    Y  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   sN   t dt j dg} tjtdd t|  W d    n1 s@0    Y  d S r#   )r   r$   infr   r   r   r   r   r   r   r   'test_linear_sum_assignment_input_neginf1   s    r(   c                  C   sV   t d} t j| d d df< tjtdd t|  W d    n1 sH0    Y  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,J t|dks<J d S )N)shaper   )r   emptyr   len)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y   d}Y n0 z t|\}}|||f  }W n ty   d}Y n0 ||ksJ |s||ksJ 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   )	_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(   	

