o
    Ö­j1  ã                   @   s¨   d Z ddlZddlmZmZmZmZ ddlZddl	m
Z
mZmZmZmZ ddlmZmZmZmZmZmZmZ G dd„ dƒZG d	d
„ d
ƒZG dd„ dƒZG dd„ dƒZdS )z%
Unit test for constraint conversion
é    N)Úassert_array_almost_equalÚassert_allcloseÚassert_warnsÚsuppress_warnings)ÚNonlinearConstraintÚLinearConstraintÚOptimizeWarningÚminimizeÚBFGSé   )ÚMaratosÚHyperbolicIneqÚ
RosenbrockÚIneqRosenbrockÚEqIneqRosenbrockÚBoundedRosenbrockÚElecc                   @   s0   e Zd ZdZdZdZdd„ Zdd„ Zdd	„ Zd
S )ÚTestOldToNew)é   r   )©r   Nr   útrust-constrc                 C   s¢   dd„ }ddd„ dœddd„ dœddd„ dœf}t ƒ �}| td	¡ t|| j| j| j|d
�}W d   ƒ n1 s8w   Y  t|jddgdd� t|j	ddd� d S )Nc                 S   ó    | d d d | d d d  S ©Nr   r   r   ç      @© ©Úxr   r   úl/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_constraint_conversion.pyÚfun   ó    z6TestOldToNew.test_constraint_dictionary_1.<locals>.funÚineqc                 S   ó   | d d| d   d S ©Nr   r   r   r   r   r   r   r   Ú<lambda>   ó    z;TestOldToNew.test_constraint_dictionary_1.<locals>.<lambda>©Útyper   c                 S   s   | d  d| d   d S )Nr   r   r   é   r   r   r   r   r   r#      ó    c                 S   s   | d  d| d   d S r"   r   r   r   r   r   r#      r(   údelta_grad == 0.0©ÚmethodÚboundsÚconstraintsçffffffö?g333333û?ç-Cëâ6?©Úrtolçš™™™™™é?©
r   ÚfilterÚUserWarningr	   Úx0r+   Úbndsr   r   r   ©Úselfr   ÚconsÚsupÚresr   r   r   Útest_constraint_dictionary_1   s   þÿþz)TestOldToNew.test_constraint_dictionary_1c                 C   sˆ   dd„ }ddd„ ddd„ dœ}t ƒ �}| td	¡ t|| j| j| j|d
�}W d   ƒ n1 s/w   Y  t|jddgƒ t|j	dƒ d S )Nc                 S   r   r   r   r   r   r   r   r   $   r   z6TestOldToNew.test_constraint_dictionary_2.<locals>.funÚeqc                 S   s   || d  || d   S ©Nr   r   r   ©r   Úp1Úp2r   r   r   r#   '   r$   z;TestOldToNew.test_constraint_dictionary_2.<locals>.<lambda>)r   çš™™™™™ñ?c                 S   s   t  || gg¡S )N)ÚnpÚarrayr@   r   r   r   r#   )   s    )r&   r   ÚargsÚjacr)   r*   g>®²[p«ü?g¨r˜7ú?g£,¢,ö?r3   r8   r   r   r   Útest_constraint_dictionary_2#   s   ýÿþz)TestOldToNew.test_constraint_dictionary_2c                 C   s˜   dd„ }ddd„ dœt dd„ ddƒg}tƒ �}| td	¡ t|| j| j| j|d
�}W d   ƒ n1 s3w   Y  t|j	ddgdd� t|j
ddd� d S )Nc                 S   r   r   r   r   r   r   r   r   2   r   z6TestOldToNew.test_constraint_dictionary_3.<locals>.funr    c                 S   r!   r"   r   r   r   r   r   r#   4   r$   z;TestOldToNew.test_constraint_dictionary_3.<locals>.<lambda>r%   c                 S   ó   | d | d  S r?   r   r   r   r   r   r#   5   ó    r   r)   r*   g      ü?r/   r0   g      ò?)r   r   r4   r5   r	   r6   r+   r7   r   r   r   r8   r   r   r   Útest_constraint_dictionary_31   s   ÿÿþz)TestOldToNew.test_constraint_dictionary_3N)	Ú__name__Ú
__module__Ú__qualname__r6   r7   r+   r=   rH   rK   r   r   r   r   r      s    r   c                   @   s4   e Zd Zej d¡dd„ ƒZej d¡dd„ ƒZdS )ÚTestNewToOldr   c              
   C   s@  dd„ }g d¢}g }g d¢}|  ddd„ dœtd	d„ d
dƒg¡ |  tg d¢dtjƒtdd„ d
dƒg¡ |  tdd„ dtjƒtdd„ d
dƒg¡ |D ]S}i }|D ]'}tƒ �}	|	 t¡ t||||d�}
|
j	||< W d   ƒ n1 srw   Y  qPt
|d |d dd� t
|d |d dd� |dkr�t
|d |d dd� qJd S )Nc                 S   ó0   | d d d | d d d  | d d d  S ©Nr   r   r   r   g      è?r   r   r   r   r   r   B   ó   0z:TestNewToOld.test_multiple_constraint_objects.<locals>.fun©r   r   r   ©ÚslsqpÚcobylaÚcobyqar   r    c                 S   r!   r"   r   r   r   r   r   r#   I   r$   z?TestNewToOld.test_multiple_constraint_objects.<locals>.<lambda>r%   c                 S   rI   r?   r   r   r   r   r   r#   J   rJ   éÿÿÿÿr   )r   éþÿÿÿr   rY   c                 S   rI   r?   r   r   r   r   r   r#   M   rJ   c                 S   r!   r"   r   r   r   r   r   r#   O   r$   r   c                 S   rI   r?   r   r   r   r   r   r#   P   rJ   ©r+   r-   rU   r   r/   r0   rV   rW   )Úappendr   r   rD   Úinfr   r4   r5   r	   r   r   )r9   Únum_parallel_threadsr   r6   ÚconiÚmethodsÚconÚfunsr+   r;   Úresultr   r   r   Ú test_multiple_constraint_objects@   s<   ÿÿÿ
ý€ÿ€öz-TestNewToOld.test_multiple_constraint_objectsé   c              
   C   s   dd„ }g d¢}g }g }g d¢}|  tdd„ ddƒ¡ |  tdd„ d	gd	gƒ¡ |  td
d„ d	t d	g¡ƒ¡ |  tdd„ d	d	ƒ¡ |  tdd„ d	dgd	dgƒ¡ |  tdd„ d	d	gd	ƒ¡ |  tdd„ d	tj gd	tjgƒ¡ |  tdd„ d	tjƒ¡ |  tdd„ d	gtjƒ¡ |  tdd„ d	t tjg¡ƒ¡ |  tdd„ tj dƒ¡ |  tdd„ t tj ¡dƒ¡ |  tdd„ d	tjƒ¡ |  tdd„ d	tj gd	dgƒ¡ |  tdd„ ddgddgƒ¡ |  tdd„ ddgdd gƒ¡ |  tg d!¢d	d	ƒ¡ |  tg d!¢g d"¢gd	d	ƒ¡ |  tg d!¢g d"¢gd	tj gd	dgƒ¡ |D ]W}i }|D ])}	tƒ �}
|
 t¡ t	|||	|d#�}|j
||	< W d   ƒ n	1 �sKw   Y  �q(t|d$ |d% d&d'� t|d( |d% d&d'� |dk�rxt|d) |d% d&d'� �q"|D ]Q}i }d*d+„ |D ƒD ])}	tƒ �}
|
 t¡ t	|||	|d#�}|j
||	< W d   ƒ n	1 �sªw   Y  �q‡t|d$ |d% d&d'� |dk�rÌt|d) |d% d&d'� �q|d S ),Nc                 S   rP   rQ   r   r   r   r   r   r   a   rR   z<TestNewToOld.test_individual_constraint_objects.<locals>.funrS   rT   c                 S   rI   r?   r   r   r   r   r   r#   j   rJ   zATestNewToOld.test_individual_constraint_objects.<locals>.<lambda>r   c                 S   rI   r?   r   r   r   r   r   r#   k   rJ   g\�Âõ(\ó?c                 S   rI   r?   r   r   r   r   r   r#   l   rJ   c                 S   ó    | d | d  | d | d  gS ©Nr   r   r   r   r   r   r   r   r#   q   ó     c                 S   re   rf   r   r   r   r   r   r#   t   rg   r.   c                 S   re   rf   r   r   r   r   r   r#   w   rg   c                 S   re   rf   r   r   r   r   r   r#   z   rg   c                 S   rI   r?   r   r   r   r   r   r#   ~   rJ   c                 S   rI   r?   r   r   r   r   r   r#      rJ   c                 S   rI   r?   r   r   r   r   r   r#   €   rJ   c                 S   rI   r?   r   r   r   r   r   r#   ‚   rJ   éýÿÿÿc                 S   rI   r?   r   r   r   r   r   r#   ƒ   rJ   c                 S   re   rf   r   r   r   r   r   r#   ˆ   rg   c                 S   re   rf   r   r   r   r   r   r#   ‹   rg   c                 S   re   rf   r   r   r   r   r   r#   Ž   rg   rC   r2   g333333ó?c                 S   re   rf   r   r   r   r   r   r#   ‘   rg   g333333ó¿gffffffö¿gš™™™™™ñ¿gš™™™™™é¿)r   rX   r   )r   r   rX   rZ   rU   r   çü©ñÒMbP?r0   rV   rW   c                 S   s   g | ]}|d kr|‘qS )rV   r   )Ú.0r+   r   r   r   Ú
<listcomp>©   r$   zCTestNewToOld.test_individual_constraint_objects.<locals>.<listcomp>)r[   r   rD   rE   r\   r   r   r4   r5   r	   r   r   )r9   r]   r   r6   Úconer^   r_   r`   ra   r+   r;   rb   r   r   r   Ú"test_individual_constraint_objects_   s°   ÿþþþþÿÿþþþþÿ
ý€
ÿ€
ý€
ÿ€÷z/TestNewToOld.test_individual_constraint_objectsN)rL   rM   rN   ÚpytestÚmarkÚ	fail_slowrc   rm   r   r   r   r   rO   ?   s
    


rO   c                   @   s~   e Zd ZdZedd�Ze g d¢¡e_e	ƒ Z
ddge
_eƒ eƒ eƒ eƒ eƒ ee
gZdd„ Zejjdd	„ ƒZejjd
d„ ƒZdS )ÚTestNewToOldSLSQPrU   r   ©Ún_electrons)gE€G³â¿g”}_uG³â?g’oñ�ç?ghíSá�ç¿g©à	 )àÕ?g8M)àÕ¿r   c              	   C   sn   | j D ]1}tƒ �}| t¡ t|j|j| j|j|j	d�}W d   ƒ n1 s&w   Y  t
|j|jdd� qd S )Nr*   é   )Údecimal)Úlist_of_problemsr   r4   r5   r	   r   r6   r+   r,   Úconstrr   r   Úx_opt)r9   Úprobr;   rb   r   r   r   Útest_list_of_problemsÄ   s   


ýþ÷z'TestNewToOldSLSQP.test_list_of_problemsc              
   C   st   dd„ }t dd„ ddgddgƒ}d}tƒ �}| td	¡ ttt|d
| j||d� W d   ƒ d S 1 s3w   Y  d S )Nc                 S   rP   rQ   r   r   r   r   r   r   Ô   rR   z:TestNewToOldSLSQP.test_warn_mixed_constraints.<locals>.func                 S   s$   | d d | d  | d | d  gS r"   r   r   r   r   r   r#   Ö   s   $ z?TestNewToOldSLSQP.test_warn_mixed_constraints.<locals>.<lambda>rC   r2   r.   ©r   r   r   r)   rS   r*   )r   r   r4   r5   r   r   r	   r+   )r9   r   r:   r7   r;   r   r   r   Útest_warn_mixed_constraintsÑ   s   ÿ
ÿ"þz-TestNewToOldSLSQP.test_warn_mixed_constraintsc              
   C   s<  dd„ }d}| j dkrd}nd }tdd„ dtjƒ}t||| j ||d	�}t|jd
ƒ tg d¢dtjƒ}t||| j ||d	�}t|jd
ƒ g }| tdd„ dtjdd�¡ | tdd„ dtjt	ƒ d�¡ | tdd„ dtjdd�¡ | tdd„ dtjdd�¡ | tg d¢dtjdd�¡ |D ]}t
tt||| j ||d	� q�d S )Nc                 S   rP   rQ   r   r   r   r   r   r   á   rR   z8TestNewToOldSLSQP.test_warn_ignored_options.<locals>.funrS   rU   r{   c                 S   s   | d S )Nr   r   r   r   r   r   r#   ê   s    z=TestNewToOldSLSQP.test_warn_ignored_options.<locals>.<lambda>r   r*   r   )r   r   r   c                 S   ó   | d d S ©Nr   r   r   r   r   r   r   r#   ÷   ó    T)Úkeep_feasiblec                 S   r}   r~   r   r   r   r   r   r#   ù   r   )Úhessc                 S   r}   r~   r   r   r   r   r   r#   û   r   é*   )Úfinite_diff_jac_sparsityc                 S   r}   r~   r   r   r   r   r   r#   ý   r   )Úfinite_diff_rel_step)r+   r   rD   r\   r	   r   r   r   r[   r
   r   r   )r9   r   r6   r7   r:   r<   r`   r   r   r   Útest_warn_ignored_optionsÞ   sH   

ÿ
ÿÿÿÿÿÿ
ÿÿz+TestNewToOldSLSQP.test_warn_ignored_optionsN)rL   rM   rN   r+   r   ÚelecrD   rE   rx   r   Úbrockr   r   r   r   r   rv   rz   rn   ro   Úthread_unsafer|   r…   r   r   r   r   rq   ´   s&    

ú	
rq   c                   @   s4   e Zd ZdZedd�edd�gZejjdd„ ƒZ	dS )ÚTestNewToOldCobylarV   r   rr   é   c              	   C   sˆ   | j D ]>}tƒ �(}| t¡ t|j|jd|j|jd�}t|j|j| j	|j|jd�}W d   ƒ n1 s3w   Y  t
|j|jdd� qd S )Nr   r*   ri   r0   )rv   r   r4   r5   r	   r   r6   r,   rw   r+   r   )r9   ry   r;   Útruthrb   r   r   r   rz     s    


ý
ýúóz(TestNewToOldCobyla.test_list_of_problemsN)
rL   rM   rN   r+   r   rv   rn   ro   Úslowrz   r   r   r   r   r‰     s    þr‰   )Ú__doc__ÚnumpyrD   Únumpy.testingr   r   r   r   rn   Úscipy.optimizer   r   r   r	   r
   Útest_minimize_constrainedr   r   r   r   r   r   r   r   rO   rq   r‰   r   r   r   r   Ú<module>   s    $/uR