U
    »mœdµ?  ã                   @   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Î  ddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddd	dddgdddddddddd
ddgddddddd	dddddgdddddddd
ddddgddddddddddddgddddddddddddgg} ddddddddddddgddddddddddddgddddddddd d!dd"gddddd#d$dd%dd&d'd(gdddd#dd)d*dd+dd*d+gdddd$d)dd
d,d-dddgddddd*d
dd.dd/d0dgdddd%dd,d.ddd$d1d2gddd dd+d-dddd)d3d4gddd!d&ddd/d$d)dd5d6gdddd'd*dd0d1d3d5dd7gddd"d(d+ddd2d4d6d7dgg}t  | ¡t  |¡ } }| jd }t  d8d*d	d9dd:d;d<dd/d=d$g¡d	g|  }| ||fS )>Nr   éZ   é
   é   é+   éX   é   é   é   é`   é   é%   é$   é6   é;   éH   é	   é"   éO   é   é.   é_   éI   é#   é:   é   éN   é,   é   éa   éB   éE   é=   é?   é]   é   é(   é0   éD   éU   é@   é   éL   é7   é&   éS   é   é8   é   éP   é'   é!   éF   éV   é   é   é   é   é   é   é   )ÚnpÚarrayÚshape)ÚAÚBÚnÚopt_perm© rK   úg/home/sam/Atlas/atlas_env/lib/python3.8/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   s   t j d¡ d S ©Nr   ©rD   ÚrandomÚseed©ÚselfrK   rK   rL   Úsetup_method5   s    zQAPCommonTests.setup_methodc                 C   s"  ddddgddddgddddgddddgg}ddddgddddgddddgddddgg}t ||| jdddœd�}t|jd	ƒ t|jt ddddg¡ƒ t ||| jdd
dœd�}| jdkràt|jdƒ t|jt ddddg¡ƒ n&t|jdƒ t|jt ddddg¡ƒ t ||| jdd
dœd�}d S )Nr   r?   r@   rC   r   F©ÚrngZmaximize©ÚmethodÚoptionsr	   TÚfaqr   r+   )r   rY   r   ÚfunÚcol_indrD   rE   ©rT   rG   rH   ÚresrK   rK   rL   Útest_accuracy_1<   s4    



ý



ý
ÿ
ÿ

ÿzQAPCommonTests.test_accuracy_1c              	   C   s  t  ddddgddddgddddgddddgg¡}t  ddddgddddgddddgddddgg¡}t||| jddd	œd
�}| jdkr®t|jdƒ t|jt  ddddg¡ƒ n&t|jdƒ t|jt  ddddg¡ƒ t||| jddd	œd
�}t|jdƒ t|jt  ddddg¡ƒ d S )Nr   r0   rA   rB   r   rC   r@   FrV   rX   r[   é²   r?   é°   Ti  )rD   rE   r   rY   r   r\   r]   r^   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o8dk n  ƒ t|jt|||jƒƒ t||| jdddœd�}td|j  ko„d	k n  ƒ t|jt|||jƒƒ t 	d
ddg¡}t 
||| g¡j}t||| jd|id�}td|j  koòd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 )NrW   r   rX   é”+  éR  TrV   i! iL r@   rA   r	   Úpartial_matchr   )r   r   )rM   r   rY   r   r\   r   Ú_scorer]   rD   rE   ZasarrayÚTÚarangeÚlenÚnitÚempty)rT   rG   rH   rJ   r_   Z	seed_costrR   rl   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-ekkiTrX   )r   rY   rK   ©rG   rH   rT   rK   rL   Úf¤   s    
ÿz.QAPCommonTests.test_unknown_options.<locals>.f)rM   r   r   )rT   rJ   ro   rK   rn   rL   Útest_unknown_options¡   s    z#QAPCommonTests.test_unknown_optionsN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rU   r`   rc   rm   rp   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oZdk n  ƒ t||dd	d
œd�}td|j  koŒdk n  ƒ t ||f¡t	|ƒ }t
|ƒ}t||d|id�}td|j  koÚdk n  ƒ d S )NÚmaxiterr0   ©rZ   Zshuffle_inputTrd   re   r   Z
randomized)rW   ÚP0rx   )rM   rj   r   r   rk   r   r\   rD   ÚonesÚfloatÚ_doubly_stochastic)rT   rG   rH   rJ   rI   r_   ÚKrK   rK   rL   Útest_options­   s(    ÿÿÿÿzTestFAQ.test_optionsc              	   C   sP  t  d¡}|}tjtdd�� t||ddid� W 5 Q R X tjtdd�� t||dd	id� W 5 Q R X tjtd
d�� t||dd	id� W 5 Q R X t t¡� t||ddid� W 5 Q R X tjtdd��* tt  d¡t  d¡dt  d¡id� W 5 Q R X dddgdddgdddgg}tjtdd��$ tt  d¡t  d¡d|id� W 5 Q R X d S )NrC   zInvalid 'P0' parameter©Úmatchrx   rQ   rw   z$'maxiter' must be a positive integerrv   éÿÿÿÿz'tol' must be a positive floatÚtolg      ø?z1`P0` matrix must have shape m' x m', where m'=n-mr@   ©r?   r?   gš™™™™™Ù?gš™™™™™É?g333333Ó?g333333ã?gffffffæ?z%`P0` matrix must be doubly stochasticr?   )rD   ÚidentityÚpytestÚraisesÚ
ValueErrorr   Ú	TypeErrorry   )rT   rG   rH   r|   rK   rK   rL   Útest_specific_input_validationÈ   sF    
 ÿþ þþ ÿ  ÿz&TestFAQ.test_specific_input_validationN)rq   rr   rs   rY   r}   rˆ   rK   rK   rK   rL   ru   ª   s   ru   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTest2optZ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é   )rY   r   )rD   rQ   Úrandr   rY   rR   r   rk   )rT   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   rW   r   rX   )rW   Úpartial_guessrC   r@   )rW   r�   rf   r   )rD   rQ   r‹   r   rY   rE   ri   r]   rh   r   rk   r   )
rT   rI   rG   rH   rŒ   Úguessr�   Zfixr   Z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 5 Q R X tjtdd��. tt d¡t d¡| jdt ddƒid� W 5 Q R X tjtd	d��4 tt d¡t d¡| jdtj 	ddd¡id� W 5 Q R X tjtd
d��2 tt d¡t d¡| jddt ddƒ id� W 5 Q R X tjtdd��2 tt d¡t d¡| jddt ddƒ id� W 5 Q R X tjtdd��. tt d¡t d¡| jdt 
d¡id� W 5 Q R X d S )Nz0`partial_guess` can have only as many entries asr~   r?   r�   r0   rC   rX   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ƒ   rY   rQ   r‹   ry   ©rT   Z_rmrK   rK   rL   rˆ     sv    þþ ÿ  þ ÿ  þ ÿ  þþ  þþ  þz'Test2opt.test_specific_input_validationN)rq   rr   rs   rY   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   s   t j d¡ d S rO   rP   rS   rK   rK   rL   rU   I  s    zTestQAPOnce.setup_methodc              
   C   sZ  t jtdd��  ttj d¡tj d¡ƒ W 5 Q R X t jtdd��  ttj d¡tj d¡ƒ W 5 Q R X t jtdd��  ttj d¡tj d¡ƒ W 5 Q R X t jtdd��  ttj d¡tj d	¡ƒ W 5 Q R X t}t jtd
d��* tt d¡t d¡d|ddƒid� W 5 Q R X t jtdd��* tt d¡t d¡dtddƒid� W 5 Q R X t jtdd��0 tt d¡t d¡dtj ddd¡id� W 5 Q R X t jtdd��. tt d¡t d¡ddtddƒ id� W 5 Q R X t jtdd��. tt d¡t d¡ddtddƒ id� W 5 Q R X t jtdd��* tt d¡t d¡dt 	d¡id� W 5 Q R X 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?   rf   r0   rC   rw   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   rQ   r“   rƒ   r‹   ry   r”   rK   rK   rL   Útest_common_input_validationM  sž    

þ

þ ÿ

þþ

þþÿ ÿ þ ÿ þ ÿ þþ þþ þz(TestQAPOnce.test_common_input_validationN)rq   rr   rs   rU   r–   rK   rK   rK   rL   r•   H  s   r•   c                 C   s6   t  | |f¡}t|ƒD ]}t  | ¡|d d …|f< q|S )N)rD   ZzerosÚrangeri   )ÚaÚbÚmatÚirK   rK   rL   r“   –  s    r“   çü©ñÒMbP?c                 C   s¦   d}d| j dd� }d| |  }| }t|ƒD ]t}t |j dd�d ¡|k  ¡ rpt |j dd�d ¡|k  ¡ rp q¢d||   }d| |  }|d d …d f |  | }q,|S )Niè  r   r   )Zaxis)Úsumr—   rD   ÚabsÚall)ÚPr�   Zmax_iterÚcÚrZP_epsÚitrK   rK   rL   r{   �  s    ÿr{   )rœ   )r„   ÚnumpyrD   Zscipy.optimizer   r   Zscipy.optimize._qapr   rg   Znumpy.testingr   r   r   rM   rN   ru   r‰   r•   r“   r{   rK   rK   rK   rL   Ú<module>   s   %yHVN