
    tKg                     "   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 Zd	 Zd
 Zd Zd Zd Zd Zd Zej0                  j3                  dg d      d        Zej0                  j3                  de      d        Zd Zy)    )assert_array_equalN)linear_sum_assignment)random)matrix)"min_weight_full_bipartite_matching) linear_sum_assignment_assertions linear_sum_assignment_test_casesc                  ~    t        j                  t        d      5  t        g d       d d d        y # 1 sw Y   y xY w)Nzexpected a matrixmatch         )pytestraises
ValueErrorr        o/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/optimize/tests/test_linear_assignment.py&test_linear_sum_assignment_input_shaper      s%    	z)<	=i( 
>	=	=s   3<c                      g dg dg} t        t        |       t        t        j                  |                    t        t        |       t        t	        |                    y )Nr   )         )r   r   npasarrayr   )Cs    r   'test_linear_sum_assignment_input_objectr      sH    	IA,Q/,RZZ];=,Q/,VAY79r   c                      t        j                  d      } t        t        | j	                  t         j
                              t        |              y )Nr   )r   identityr   r   astypebool_Is    r   %test_linear_sum_assignment_input_boolr&      s4    
AA,QXXbhh-?@,Q/1r   c                      t        j                  d      } t        j                  t        d      5  t        | j                  t                     d d d        y # 1 sw Y   y xY w)Nr   zCannot cast array datar   )r   r!   r   r   	TypeErrorr   r"   strr$   s    r   'test_linear_sum_assignment_input_stringr*   %   s;    
AA	y(@	Aahhsm, 
B	A	As   AA"c                      t        j                  t         j                  ddg      } t        j                  t
        d      5  t        |        d d d        y # 1 sw Y   y xY wNr   z contains invalid numeric entriesr   )r   diagnanr   r   r   r   r$   s    r   $test_linear_sum_assignment_input_nanr/   +   s>    
AA	z)K	La  
M	L	Ls   AA c                      t        j                  dt         j                   dg      } t        j                  t
        d      5  t        |        d d d        y # 1 sw Y   y xY wr,   )r   r-   infr   r   r   r   r$   s    r   'test_linear_sum_assignment_input_neginfr2   1   s@    
RVVGQ A	z)K	La  
M	L	Ls   AA!c                      t        j                  d      } t         j                  | d d df<   t        j                  t
        d      5  t        |        d d d        y # 1 sw Y   y xY w)Nr   r   zcost matrix is infeasibler   )r   r!   r1   r   r   r   r   r$   s    r   $test_linear_sum_assignment_input_infr4   7   sD    
AAffAadG	z)D	Ea  
F	E	Es   AA&c                      d} t        j                  | | f      }t        |      \  }}t        |t        j                  |              t        |t        j                  |              y )N   )r   onesr   r   arange)nr   row_indcol_inds       r   test_constant_cost_matrixr<   >   sK    	A
AA,Q/GWw		!-w		!-r   znum_rows,num_cols))r   r   )r   r   )r   r   c                     t        j                  || f      }t        |      \  }}t        |      dk(  sJ t        |      dk(  sJ y )N)shaper   )r   emptyr   len)num_rowsnum_colsr   r:   r;   s        r   'test_linear_sum_assignment_trivial_costrC   G   sH    
(+,A,Q/GWw<1w<1r   zsign,test_casec                 D    t        t        t        j                  | |       y )N)r   r   r   array)sign	test_cases     r   'test_linear_sum_assignment_small_inputsrH   O   s    $rxxy:r   c                  F   t         j                  j                  d       t        d      D ]  } d}d}t        dddd       }t        j                  |j
                  t         j                        }|j                  ||j                  |j                  f<   |j                         }	 t        |      \  }}|||f   j                         }	 t        |      \  }}|||f   j                         }||k(  sJ |rk(  rJ  y # t        $ r d}Y Ew xY w# t        $ r d}Y 2w xY w)Ni  d   FgQ?c                 D    t         j                  j                  dd|       S )Nr   rJ   )r   r   randint)sizes    r   <lambda>zItest_two_methods_give_same_result_on_many_sparse_inputs.<locals>.<lambda>a   s    bii.?.?3.Mr   )densitydata_rvsT)r   r   seedrangefullr>   r1   datarowcoltocsrr   sumr   r   )	_
lsa_raisesmwfbm_raisessparsedenser:   r;   lsa_cost
mwfbm_costs	            r   7test_two_methods_give_same_result_on_many_sparse_inputsr`   W   s$   
 IINN43Z
S$!MO bff-(.fjj&**$%	4U;GWWg-.224H	 A&IGW 01557J \)))z)))/   	J	
  	 L	 s$   &#D
#DDDD D )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/   r2   r4   r<   markparametrizerC   rH   r`   r   r   r   <module>rj      s    -   0  ( C
)
91-!!!. ,.FG H )+KL: M:*r   