o
    g?                     @   s   d dl Z d dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZ dd ZG dd dZG d	d
 d
eZG dd deZG dd dZdd ZdddZdS )    N)quadratic_assignmentOptimizeWarning)_calc_score)assert_equalassert_assert_warnsc                  C   s   g dg dg dg dg dg dg dg dg d	g d
g dg dg} g dg dg dg dg dg dg dg dg dg dg dg dg}t | t |} }| jd }t g ddg|  }| ||fS )N)r   Z   
   r   r   r   r   r   r   r   r   r   )r   r   r      r   r   r   r   r   r   r   r   )r	   r   r   r   +   r   r   r   r   r   r   r   )r   r
   r   r   r   X   r   r   r   r   r   r   )r   r   r   r   r   r      r   r   r   r   r   )r   r   r   r   r   r   r      r   r   r   r   )r   r   r   r   r   r   r   r      r   r   r   )r   r   r   r   r   r   r   r   r   `   r   r   )r   r   r   r   r   r   r   r   r   r      r   )r   r   r   r   r   r   r   r   r   r   r   %   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )r   $   6   r   ;   H   	   "   O      .   _   )r   r   I   #   r   :      N   r   ,   r   r   )r   r   r      r	   a   r   B   E   =   r   ?   )r   r   r#   r   ]      r   (   r   0   D   U   )r   r   r	   r)   r   @      r   L   r   r0   r1   )r   r   r$   r*   r/   r   r   7   &   r   r   r   )r   r    r   r   r0   r   r   S   r      8   r   )r   r!   r%   r+   r   r2   r4   r   r"   r*      P   )r   r   r&   r   r1   r3   r   r"   r   r/   '   !   )r   r"   r'   r,   r   r   r5   r*   r/   r   F   V   )r   r   r   r-   r0   r   r6   r7   r9   r;   r      )r   r   r(   r.   r1   r   r   r8   r:   r<   r=   r   r   )   r0   r      r	            r   r5      r*   r   )nparrayshape)ABnopt_perm rK   l/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_quadratic_assignment.pychr12c   s<   

rM   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )QAPCommonTestsz6
    Base class for `quadratic_assignment` tests.
    c                 C      t jd d S Nr   rD   randomseedselfrK   rK   rL   setup_method5      zQAPCommonTests.setup_methodc                 C   s   g dg dg dg dg}g dg dg dg dg}t ||| jdd	d
d}t|jd t|jtg d t ||| jddd
d}| jdkr\t|jd t|jtg d nt|jd t|jtg d t ||| jddd
d}d S )N)r   r?   r@   rC   )r   r   r   rC   )r   r   r   r   )r   r   r   r   )r   r@   rC   r@   )r   rC   r   rC   )r   r   rC   r   r   Frngmaximizemethodoptionsr	   r   rC   r?   r   Tfaqr   )r   rC   r?   r   r+   )r   r?   r   rC   )r   r\   r   funcol_indrD   rE   rU   rG   rH   resrK   rK   rL   test_accuracy_1<   s4   




zQAPCommonTests.test_accuracy_1c                 C   s   t g dg dg dg dg}t g dg dg dg dg}t||| jd	d
dd}| jdkrEt|jd t|jt g d nt|jd t|jt g d t||| jd	ddd}t|jd t|jt g d d S )N)r   r0   rA   rB   )r0   r   r0   r   )rA   r0   r   rC   )rB   r   rC   r   )r   r   rA   r@   )r   r   r0   rC   )rA   r0   r   r0   )r@   rC   r0   r   r   FrX   r[   r_      )r   r   r?   rC      r^   Ti  )rC   r?   r   r   )rD   rE   r   r\   r   r`   ra   rb   rK   rK   rL   test_accuracy_2_   s.   




zQAPCommonTests.test_accuracy_2c                 C   s  t  \}}}t||| jddid}td|j  kodk n   t|jt|||j t||| jdddd}td|j  koBd	k n   t|jt|||j t	g d
}t
||| gj}t||| jd|id}td|j  koxdk n   t|j| ||  t
tt||gj}t||| jd|id}t|j|d d df j t|jd t|jd td}t||| jddid}t|jd t|jd d S )NrY   r   r[   +  R  TrX   i! iL )r@   rA   r	   partial_matchr   )r   r   )rM   r   r\   r   r`   r   _scorera   rD   rE   asarrayTarangelennitempty)rU   rG   rH   rJ   rc   	seed_costrS   rq   rK   rK   rL   test_accuracy_3z   s>   





zQAPCommonTests.test_accuracy_3c                    s*   t  \ } fdd}tt| d S )Nc                      s   t  jddid d S )Nz	ekki-ekkiTr[   )r   r\   rK   rG   rH   rU   rK   rL   f   s   

z.QAPCommonTests.test_unknown_options.<locals>.f)rM   r   r   )rU   rJ   ru   rK   rt   rL   test_unknown_options   s   z#QAPCommonTests.test_unknown_optionsN)	__name__
__module____qualname____doc__rV   rd   rg   rs   rv   rK   rK   rK   rL   rN   1   s    #'rN   c                   @   s    e Zd ZdZdd Zdd ZdS )TestFAQr_   c                 C   s   t  \}}}t|}t||ddid}t|jd t||ddid}td|j  ko-dk n   t||dd	d
d}td|j  koFdk n   t||ft	| }t
|}t||d|id}td|j  kopdk  d S    d S )Nmaxiterr0   r]   shuffle_inputTrh   ri   r   
randomized)rY   P0r   )rM   ro   r   r   rp   r   r`   rD   onesfloat_doubly_stochastic)rU   rG   rH   rJ   rI   rc   KrK   rK   rL   test_options   s(   (zTestFAQ.test_optionsc                 C   s  t d}|}tjtdd t||ddid W d    n1 s"w   Y  tjtdd t||dd	id W d    n1 sBw   Y  tjtd
d t||dd	id W d    n1 sbw   Y  tt t||ddid W d    n1 sw   Y  tjtdd tt dt ddt did W d    n1 sw   Y  g dg dg dg}tjtdd tt dt dd|id W d    d S 1 sw   Y  d S )NrC   zInvalid 'P0' parametermatchr   rR   r}   z$'maxiter' must be a positive integerr|   z'tol' must be a positive floattolg      ?z1`P0` matrix must have shape m' x m', where m'=n-mr@   r?   r?   )g?皙?333333?)r   g333333?r   )r   r   gffffff?z%`P0` matrix must be doubly stochasticr?   )rD   identitypytestraises
ValueErrorr   	TypeErrorr   )rU   rG   rH   r   rK   rK   rL   test_specific_input_validation   sH   
"z&TestFAQ.test_specific_input_validationN)rw   rx   ry   r\   r   r   rK   rK   rK   rL   r{      s    r{   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	Test2opt2optc                 C   sz   d}t j||}t j||}t||| jd}t jd t j||}t j||}t||| jd}t|j|j d S )N   )r\   r   )rD   rR   randr   r\   rS   r   rp   )rU   rI   rG   rH   res1res2rK   rK   rL   test_deterministic   s   zTest2opt.test_deterministicc           
      C   s   d}t j||}t j||}t||| jddid}t t d|jgj}t||| jd|dd}ddg}t t d| |j| gj}t||| jd||dd}	t	|j
||d	  d k t|j
||d	  d  t|	j
|d |d	  d  d S )
Nr0   rY   r   r[   )rY   partial_guessrC   r@   )rY   r   rj   r   )rD   rR   r   r   r\   rE   rn   ra   rm   r   rp   r   )
rU   rI   rG   rH   r   guessr   fixr   res3rK   rK   rL   test_partial_guess  s(   

 
 zTest2opt.test_partial_guessc                 C   s  t }tjtdd ttdtd| jd|ddid W d    n1 s(w   Y  tjtdd ttdtd| jdt ddid W d    n1 sSw   Y  tjtd	d ttdtd| jdtj	dddid W d    n1 sw   Y  tjtd
d ttdtd| jddt dd id W d    n1 sw   Y  tjtdd ttdtd| jddt dd id W d    n1 sw   Y  tjtdd ttdtd| jdt
did W d    d S 1 sw   Y  d S )Nz0`partial_guess` can have only as many entries asr   r?   r   r0   rC   r[   z%`partial_guess` must have two columnsz%`partial_guess` must have exactly twoz%`partial_guess` must contain only posr   z0`partial_guess` entries must be less than numberr@   z-`partial_guess` column entries must be uniquerC   rC   )_range_matrixr   r   r   r   rD   r   r\   rR   r   r   rU   _rmrK   rK   rL   r     sh   $z'Test2opt.test_specific_input_validationN)rw   rx   ry   r\   r   r   r   rK   rK   rK   rL   r      s
    r   c                   @   s   e Zd Zdd Zdd ZdS )TestQAPOncec                 C   rO   rP   rQ   rT   rK   rK   rL   rV   I  rW   zTestQAPOnce.setup_methodc              
   C   s,  t jtdd ttjdtjd W d    n1 sw   Y  t jtdd ttjdtjd W d    n1 sCw   Y  t jtdd ttjdtjd W d    n1 sgw   Y  t jtdd ttjdtjd	 W d    n1 sw   Y  t}t jtd
d ttdtdd|ddid W d    n1 sw   Y  t jtdd ttdtddtddid W d    n1 sw   Y  t jtdd ttdtddtjdddid W d    n	1 sw   Y  t jtdd ttdtdddtdd id W d    n	1 s8w   Y  t jtdd ttdtdddtdd id W d    n	1 sdw   Y  t jtdd ttdtddt	did W d    d S 1 sw   Y  d S )Nz`A` must be squarer   )r?   r@   r   z`B` must be squarez!`A` and `B` must have exactly two)r?   r?   r?   z*`A` and `B` matrices must be of equal size)r@   r@   z.`partial_match` can have only as many seeds asr?   rj   r0   rC   r}   z%`partial_match` must have two columnsz%`partial_match` must have exactly twoz%`partial_match` must contain only posr   z0`partial_match` entries must be less than numberr@   z-`partial_match` column entries must be uniquer   )
r   r   r   r   rD   rR   r   r   r   r   r   rK   rK   rL   test_common_input_validationM  s   







$z(TestQAPOnce.test_common_input_validationN)rw   rx   ry   rV   r   rK   rK   rK   rL   r   H  s    r   c                 C   s6   t | |f}t|D ]}t | |d d |f< q|S )N)rD   zerosrangern   )abmatirK   rK   rL   r     s   r   MbP?c                 C   s   d}d| j dd }d| |  }| }t|D ];}t|j ddd |k  r9t|j ddd |k  r9 |S d||   }d| |  }|d d d f |  | }q|S )Ni  r   r   )axis)sumr   rD   absall)Pr   max_itercrP_epsitrK   rK   rL   r     s   r   )r   )r   numpyrD   scipy.optimizer   r   scipy.optimize._qapr   rk   numpy.testingr   r   r   rM   rN   r{   r   r   r   r   rK   rK   rK   rL   <module>   s    %yHVN