o
    Ö­j¾D  ã                   @   s¾   d dl Z d dlZd dlm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e j d¡G d	d
„ d
ƒƒZG dd„ deƒZG dd„ deƒZe j d¡G dd„ dƒƒZdd„ Zddd„ZdS )é    N)Údefault_rng)Ú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   r1   r2   )r   r    r%   r+   r0   r   r   é7   é&   r   r   r   )r   r!   r    r   r1   r   r   éS   r   é   é8   r   )r   r"   r&   r,   r   r3   r5   r   r#   r+   é   éP   )r   r   r'   r   r2   r4   r   r#   r   r0   é'   é!   )r   r#   r(   r-   r   r   r6   r+   r0   r   éF   éV   )r   r   r   r.   r1   r   r7   r8   r:   r<   r   é   )r   r   r)   r/   r2   r   r   r9   r;   r=   r>   r   r   )é   r1   r   é   r
   é   é   é   r   r6   é   r+   r   )ÚnpÚarrayÚshape)ÚAÚBÚnÚopt_perm© rL   úk/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_quadratic_assignment.pyÚchr12c   s<   ôô

rN   z1ignore:The NumPy global RNG was seeded by callingc                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zejj	dd	„ ƒZ
ejj	d
d„ ƒZdS )ÚQAPCommonTestsz6
    Base class for `quadratic_assignment` tests.
    c                 C   s  t j d¡}g d¢g d¢g d¢g d¢g}g d¢g d¢g d¢g d¢g}t||| j|d	d
œd�}t|jdƒ t|jt  g d¢¡ƒ t||| j|dd
œd�}| jdkrbt|jdƒ t|jt  g d¢¡ƒ nt|jdƒ t|jt  g d¢¡ƒ t||| j|dd
œd� d S )Nì   m«X)Eëc )r   r@   rA   rD   )r   r   r   rD   )r   r   r   r   )r   r   r   r   )r   rA   rD   rA   )r   rD   r   rD   )r   r   rD   r   F©ÚrngÚmaximize©ÚmethodÚoptionsr
   ©r   rD   r@   r   TÚfaqr   )r   rD   r@   r   r,   )r   r@   r   rD   )	rE   Úrandomr   r   rU   r   ÚfunÚcol_indrF   ©ÚselfrR   rH   rI   ÚresrL   rL   rM   Útest_accuracy_1;   s6   ýý
ÿ
ÿ


ÿzQAPCommonTests.test_accuracy_1c                 C   sö   t j d¡}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�}| jdkrKt|jdƒ t|jt  g d¢¡ƒ nt|jdƒ t|jt  g d¢¡ƒ t||| j|ddœd�}t|jdƒ t|jt  g d¢¡ƒ d S )NrP   )r   r1   rB   rC   )r1   r   r1   r   )rB   r1   r   rD   )rC   r   rD   r   )r   r   rB   rA   )r   r   r1   rD   )rB   r1   r   r1   )rA   rD   r1   r   FrQ   rT   rX   é²   )r   r   r@   rD   é°   rW   Ti  )rD   r@   r   r   )	rE   rY   r   rF   r   rU   r   rZ   r[   r\   rL   rL   rM   Útest_accuracy_2a   s0   
ý
ý
ÿ

ÿzQAPCommonTests.test_accuracy_2c           	      C   sº  t j d¡}tƒ \}}}t||| jd|id�}td|j  ko"dk n  ƒ t|jt	|||j
ƒƒ t||| j|ddœd�}td|j  koHd	k n  ƒ t|jt	|||j
ƒƒ t  g d
¢¡}t  ||| g¡j}t||| j||dœd�}td|j  kodk n  ƒ t|j
| || ƒ t  t  t|ƒ¡|g¡j}t||| j||dœd�}t|j
|d d …df jƒ t|jdƒ t|jdƒ t  d¡}t||| jd|id�}t|jdƒ t|jdƒ d S )NrP   rR   rT   é”+  éR  TrQ   i! iL )rA   rB   r
   )Úpartial_matchrR   r   r   )r   r   )rE   rY   r   rN   r   rU   r   rZ   r   Ú_scorer[   rF   ÚasarrayÚTÚarangeÚlenÚnitÚempty)	r]   rR   rH   rI   rK   r^   Ú	seed_costÚseedrl   rL   rL   rM   Útest_accuracy_3   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-ekkiTrT   )r   rU   rL   ©rH   rI   r]   rL   rM   Úfª   s   

ÿz.QAPCommonTests.test_unknown_options.<locals>.f)rN   r   r   )r]   rK   rq   rL   rp   rM   Útest_unknown_options¦   s   z#QAPCommonTests.test_unknown_optionsc                 C   s  t  d¡ d¡}t  d¡ d¡}tjtdd�� t j d¡}t||| j	|ddœd� W d   ƒ n1 s4w   Y  tjt
d	d�� t j d¡ t||| j	d
did� W d   ƒ n1 s\w   Y  tjt
dd�� t||| j	dddœd� W d   ƒ d S 1 s€w   Y  d S )Nr   ©rA   rA   zUse of `RandomState`*©Úmatchr   FrQ   rT   z The NumPy global RNG was seeded*rS   z!The behavior when the rng option*)rE   ri   ÚreshapeÚpytestÚwarnsÚDeprecationWarningrY   ÚRandomStater   rU   ÚFutureWarningrn   )r]   rH   rI   rR   rL   rL   rM   Ú test_deprecation_future_warnings¯   s&   
ÿþ
ÿþ
ÿ"ÿz/QAPCommonTests.test_deprecation_future_warningsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r_   rb   ro   rw   ÚmarkÚthread_unsaferr   r|   rL   rL   rL   rM   rO   2   s    &'
rO   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestFAQrX   c                 C   sø   t j d¡}tƒ \}}}t|ƒ}t||ddid�}t|jdƒ t||ddid�}td|j	  ko3dk n  ƒ t|||d	d
œd�}td|j	  koLdk n  ƒ t  
||f¡t|ƒ }t|ƒ}t||d|id�}td|j	  kovdk ƒ d S   ƒ d S )NrP   Úmaxiterr1   ©rV   Úshuffle_inputTrc   rd   Ú
randomized)rR   ÚP0rˆ   )rE   rY   r   rN   rj   r   r   rk   r   rZ   ÚonesÚfloatÚ_doubly_stochastic)r]   rR   rH   rI   rK   rJ   r^   ÚKrL   rL   rM   Ú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 s€w   Y  tjtdd�� tt  d¡t  d¡dt  d¡id� W d   ƒ n1 s©w   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 sÛw   Y  d S )NrD   zInvalid 'P0' parameterrt   rˆ   rY   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-mrA   ©r@   r@   )gš™™™™™Ù?çš™™™™™É?ç333333Ó?)r’   g333333ã?r‘   )r‘   r‘   gffffffæ?z%`P0` matrix must be doubly stochasticr@   )rE   Úidentityrw   ÚraisesÚ
ValueErrorr   Ú	TypeErrorr‰   )r]   rH   rI   rŒ   rL   rL   rM   Útest_specific_input_validationà   sH   
ÿÿþÿÿþþýþÿÿ"þz&TestFAQ.test_specific_input_validationN)r}   r~   r   rU   r�   r—   rL   rL   rL   rM   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   s’   d}t dƒ}|j||fd�}|j||fd�}t||| jd|id�}t dƒ}|j||fd�}|j||fd�}t||| jd|id�}t|j|jƒ d S )Né   i<2©ÚsizerR   rT   )r   rY   r   rU   r   rk   )r]   rJ   rR   rH   rI   Úres1Úres2rL   rL   rM   Útest_deterministic  s   zTest2opt.test_deterministicc                 C   s
  d}t j d¡}|j||fd�}|j||fd�}t||| jd|id�}t  t  d¡|jg¡j}t||| j||dœd�}ddg}t  t  d¡| |j| g¡j}	t||| j|||	d	œd�}
t	|j
||d
  d kƒ t|j
||d
  d ƒ t|
j
|d |d
  d ƒ d S )Nr1   rP   r›   rR   rT   )rR   Úpartial_guessrD   rA   )rR   r    re   r   )rE   rY   r   r   rU   rF   ri   r[   rh   r   rk   r   )r]   rJ   rR   rH   rI   r�   Úguessrž   Úfixru   Úres3rL   rL   rM   Ú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 s�w   Y  tjtd
d�� tt d¡t d¡| jddt ddƒ id� W d   ƒ n1 s®w   Y  tjtdd�� tt d¡t d¡| jddt 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¡id� W d   ƒ d S 1 �sw   Y  d S )Nz0`partial_guess` can have only as many entries asrt   r@   r    r1   rD   rT   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 numberrA   z-`partial_guess` column entries must be unique©rD   rD   )Ú_range_matrixrw   r”   r•   r   rE   r“   rU   rY   Úrandr‰   )r]   Ú_rmrL   rL   rM   r—   0  sh   þþýÿþþÿþþÿþþþþýþþ$ýz'Test2opt.test_specific_input_validationN)r}   r~   r   rU   rŸ   r¤   r—   rL   rL   rL   rM   r˜   
  s
    r˜   c                   @   s   e Zd Zdd„ ZdS )ÚTestQAPOncec              
   C   s$  t dƒ}tjtdd�� t| d¡| d¡ƒ W d   ƒ n1 s!w   Y  tjtdd�� t| d¡| d¡ƒ W d   ƒ n1 sCw   Y  tjtdd�� t| d¡| d¡ƒ W d   ƒ n1 sew   Y  tjtd	d�� t| d¡| d
¡ƒ W d   ƒ n1 s‡w   Y  t}tjtdd�� tt d¡t d¡d|ddƒid� W d   ƒ n1 s²w   Y  tjtdd�� tt d¡t d¡dtddƒid� W d   ƒ n1 sÛw   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 �s4w   Y  tjtdd�� tt d¡t d¡ddtddƒ id� W d   ƒ n	1 �s`w   Y  tjtdd�� tt d¡t d¡dt 
d¡id� W d   ƒ d S 1 �s‹w   Y  d S )Ninn¼ z`A` must be squarert   )r@   rA   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 sizers   z.`partial_match` can have only as many seeds asr@   re   r1   rD   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 numberrA   z-`partial_match` column entries must be uniquer¥   )r   rw   r”   r•   r   rY   r¦   rE   r“   r§   r‰   )r]   rR   r¨   rL   rL   rM   Útest_common_input_validationd  s¢   þÿþÿÿþþþþýþÿýÿþþÿþþÿþþþþýþþ$ýz(TestQAPOnce.test_common_input_validationN)r}   r~   r   rª   rL   rL   rL   rM   r©   `  s    r©   c                 C   s6   t  | |f¡}t|ƒD ]}t  | ¡|d d …|f< q|S )N)rE   ÚzerosÚrangeri   )ÚaÚbÚmatÚirL   rL   rM   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¬   rE   ÚabsÚall)ÚPr�   Úmax_iterÚcÚrÚP_epsÚitrL   rL   rM   r‹   µ  s   ÿür‹   )r±   )rw   ÚnumpyrE   Únumpy.randomr   Úscipy.optimizer   r   Úscipy.optimize._qapr   rf   Únumpy.testingr   r   r   rN   r�   ÚfilterwarningsrO   rƒ   r˜   r©   r¦   r‹   rL   rL   rL   rM   Ú<module>   s     
% F
VM