o
    Ö­jõ  ã                   @   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   ƒ d S 1 sw   Y  d S )Nzexpected a matrix©Úmatch©é   é   é   )ÚpytestÚraisesÚ
ValueErrorr   © r   r   úh/var/www/html/CropPilot/venv/lib/python3.10/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   ÚnpÚ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   ÚastypeÚbool_©ÚIr   r   r   Ú%test_linear_sum_assignment_input_bool   s   
ÿr!   c                  C   sL   t  d¡} tjtdd�� t|  t¡ƒ W d   ƒ d S 1 sw   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   sN   t  t jddg¡} tjtdd�� t| ƒ W d   ƒ d S 1 s w   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   sP   t  dt j dg¡} tjtdd�� t| ƒ W d   ƒ d S 1 s!w   Y  d S r%   )r   r&   Úinfr   r   r   r   r   r   r   r   Ú'test_linear_sum_assignment_input_neginf1   s   
"ÿr*   c                  C   sX   t  d¡} t j| d d …df< tjtdd�� t| ƒ W d   ƒ d S 1 s%w   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   Úonesr   r   Úarange)Únr   Úrow_indÚcol_indr   r   r   Útest_constant_cost_matrix>   s
   r2   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)Únum_rowsÚnum_colsr   r0   r1   r   r   r   Ú'test_linear_sum_assignment_trivial_costG   s   r8   zsign,test_casec                 C   s   t ttj| |ƒ d S )N)r   r   r   Úarray)ÚsignÚ	test_caser   r   r   Ú'test_linear_sum_assignment_small_inputsO   s   
ÿr<   c            	   	   C   sð   t j d¡ tdƒD ]k} d}d}tddddd„ d�}t  |jt j¡}|j||j|j	f< | 
¡ }zt|ƒ\}}|||f  ¡ }W n tyJ   d}Y nw zt|ƒ\}}|||f  ¡ }W n tyf   d}Y nw ||ksmJ ‚|su||ksuJ ‚q
d S )	NiÒ  éd   Fg¸…ëQ¸®?c                 S   s   t j dd| ¡S )Nr   r=   )r   r   Úrandint)Úsizer   r   r   Ú<lambda>a   s    zItest_two_methods_give_same_result_on_many_sparse_inputs.<locals>.<lambda>)ÚdensityÚdata_rvsT)r   r   ÚseedÚrangeÚfullr3   r)   ÚdataÚrowÚcolÚtocsrr   Úsumr   r   )	Ú_Ú
lsa_raisesÚmwfbm_raisesÚsparseÚdenser0   r1   Úlsa_costÚ
mwfbm_costr   r   r   Ú7test_two_methods_give_same_result_on_many_sparse_inputsW   s6   ÿÿÿ€érR   )Únumpy.testingr   r   Únumpyr   Úscipy.optimizer   Úscipy.sparser   Úscipy.sparse._sputilsr   Úscipy.sparse.csgraphr   Ú(scipy.sparse.csgraph.tests.test_matchingr   r   r   r   r!   r$   r(   r*   r+   r2   ÚmarkÚparametrizer8   r<   rR   r   r   r   r   Ú<module>   s*   	

