U
    »mœdâ-  ã                   @   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 5 Q R X t|jd
dgdd� t|j	ddd� d S )Nc                 S   s    | d d d | d d d  S ©Nr   r   r   ç      @© ©Úxr   r   úh/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/optimize/tests/test_constraint_conversion.pyÚ<lambda>   ó    z;TestOldToNew.test_constraint_dictionary_1.<locals>.<lambda>Úineqc                 S   s   | d d| d   d S ©Nr   r   r   r   r   r   r   r   r      r   ©ÚtypeÚfunc                 S   s   | d  d| d   d S )Nr   r   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?©Z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   st   dd„ }ddd„ ddd„ dœ}t ƒ �*}| td¡ t|| j| j| j|d	�}W 5 Q R X t|jd
dgƒ t|j	dƒ d S )Nc                 S   s    | d d d | d d d  S r   r   r   r   r   r   r   #   r   z;TestOldToNew.test_constraint_dictionary_2.<locals>.<lambda>Úeqc                 S   s   || d  || d   S ©Nr   r   r   ©r   Úp1Úp2r   r   r   r   %   r   )r   çš™™™™™ñ?c                 S   s   t  || gg¡S )N)ÚnpÚarrayr;   r   r   r   r   '   r   )r"   r#   ÚargsZjacr%   r&   g>®²[p«ü?g¨r˜7ú?g£,¢,ö?r.   r3   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 5 Q R X t|j	d
d
gdd� t|j
ddd� d S )Nc                 S   s    | d d d | d d d  S r   r   r   r   r   r   r   0   r   z;TestOldToNew.test_constraint_dictionary_3.<locals>.<lambda>r   c                 S   s   | d d| d   d S r    r   r   r   r   r   r   1   r   r!   c                 S   s   | d | d  S r:   r   r   r   r   r   r   2   r   r   r%   r&   g      ü?r+   r,   g      ò?)r   r   r/   r0   r	   r1   r'   r2   r   r   r#   r3   r   r   r   Útest_constraint_dictionary_3/   s    ÿ ÿz)TestOldToNew.test_constraint_dictionary_3N)	Ú__name__Ú
__module__Ú__qualname__r1   r2   r'   r8   rB   rC   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestNewToOldc           
      C   s  dd„ }dddg}g }dddg}|  d	d
d„ dœtdd„ ddƒg¡ |  tdddgdtjƒtdd„ ddƒg¡ |  tdd„ dtjƒtdd„ ddƒg¡ |D ]t}i }|D ]:}tƒ �*}| t¡ t||||d�}	|	j	||< W 5 Q R X q¦t
|d |d dd� t
|d |d dd� qšd S )Nc                 S   s0   | d d d | d d d  | d d d  S ©Nr   r   r   r   g      è?r   r   r   r   r   r   ?   r   z?TestNewToOld.test_multiple_constraint_objects.<locals>.<lambda>r   r   r   ÚslsqpÚcobylar   r   c                 S   s   | d d| d   d S r    r   r   r   r   r   r   E   r   r!   c                 S   s   | d | d  S r:   r   r   r   r   r   r   F   r   éÿÿÿÿéþÿÿÿc                 S   s   | d | d  S r:   r   r   r   r   r   r   I   r   c                 S   s   | d d| d   d S r    r   r   r   r   r   r   K   r   c                 S   s   | d | d  S r:   r   r   r   r   r   r   L   r   ©r'   r)   r+   r,   )Úappendr   r   r?   Úinfr   r/   r0   r	   r#   r   )
r4   r#   r1   ÚconiÚmethodsÚconÚfunsr'   r6   Úresultr   r   r   Ú test_multiple_constraint_objects>   s,    

ÿÿÿ
z-TestNewToOld.test_multiple_constraint_objectsc                 C   sB  dd„ }dddg}g }g }dddg}|  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dd#dgddƒ¡ |  tdd#dgddd#ggddƒ¡ |  tdd#dgddd#ggdtj gddgƒ¡ |D ]x}i }|D ]<}tƒ �*}	|	 t¡ t	||||d$�}
|
j
||< W 5 Q R X �q^t|d |d d%d&� t|d |d d%d&� �qR|D ]l}i }|d d d… D ]<}tƒ �*}	|	 t¡ t	||||d$�}
|
j
||< W 5 Q R X �qæt|d |d d%d&� �qÐd S )'Nc                 S   s0   | d d d | d d d  | d d d  S rH   r   r   r   r   r   r   Y   r   zATestNewToOld.test_individual_constraint_objects.<locals>.<lambda>r   r   r   rI   rJ   r   c                 S   s   | d | d  S r:   r   r   r   r   r   r   a   r   c                 S   s   | d | d  S r:   r   r   r   r   r   r   b   r   g\�Âõ(\ó?c                 S   s   | d | d  S r:   r   r   r   r   r   r   c   r   c                 S   s    | d | d  | d | d  gS ©Nr   r   r   r   r   r   r   r   r   h   r   c                 S   s    | d | d  | d | d  gS rV   r   r   r   r   r   r   k   r   r*   c                 S   s    | d | d  | d | d  gS rV   r   r   r   r   r   r   n   r   c                 S   s    | d | d  | d | d  gS rV   r   r   r   r   r   r   q   r   c                 S   s   | d | d  S r:   r   r   r   r   r   r   u   r   c                 S   s   | d | d  S r:   r   r   r   r   r   r   v   r   c                 S   s   | d | d  S r:   r   r   r   r   r   r   w   r   c                 S   s   | d | d  S r:   r   r   r   r   r   r   y   r   éýÿÿÿc                 S   s   | d | d  S r:   r   r   r   r   r   r   z   r   c                 S   s    | d | d  | d | d  gS rV   r   r   r   r   r   r      r   c                 S   s    | d | d  | d | d  gS rV   r   r   r   r   r   r   ‚   r   c                 S   s    | d | d  | d | d  gS rV   r   r   r   r   r   r   …   r   r>   r-   g333333ó?c                 S   s    | d | d  | d | d  gS rV   r   r   r   r   r   r   ˆ   r   g333333ó¿gffffffö¿gš™™™™™ñ¿gš™™™™™é¿rK   rM   çü©ñÒMbP?r,   )rN   r   r?   r@   rO   r   r   r/   r0   r	   r#   r   )r4   r#   r1   ZconerP   rQ   rR   rS   r'   r6   rT   r   r   r   Ú"test_individual_constraint_objectsX   sª    

 
ÿ þ þ þ
 þ ÿ ÿ þ
 þ þ þ"
 ÿ

z/TestNewToOld.test_individual_constraint_objectsN)rD   rE   rF   rU   rY   r   r   r   r   rG   <   s   rG   c                   @   sv   e Zd ZdZedd�Ze dddddd	g¡e_e	ƒ Z
d
d
ge
_eƒ eƒ eƒ eƒ eƒ ee
gZdd„ Zdd„ Zdd„ ZdS )ÚTestNewToOldSLSQPrI   r   ©Zn_electronsgE€G³â¿g”}_uG³â?g’oñ�ç?ghíSá�ç¿g©à	 )àÕ?g8M)àÕ¿r   c              
   C   sZ   | j D ]N}tƒ �,}| t¡ t|j|j| j|j|j	d�}W 5 Q R X t
|j|jdd� qd S )Nr&   é   )Údecimal)Úlist_of_problemsr   r/   r0   r	   r#   r1   r'   r(   Úconstrr   r   Úx_opt)r4   Úprobr6   rT   r   r   r   Útest_list_of_problemsµ   s    


ýz'TestNewToOldSLSQP.test_list_of_problemsc              
   C   s^   dd„ }t dd„ ddgddgƒ}d}tƒ �*}| td¡ ttt|d	| j||d
� W 5 Q R X d S )Nc                 S   s0   | d d d | d d d  | d d d  S rH   r   r   r   r   r   r   Ä   r   z?TestNewToOldSLSQP.test_warn_mixed_constraints.<locals>.<lambda>c                 S   s$   | d d | d  | d | d  gS r    r   r   r   r   r   r   Å   r   r>   r-   r*   ©r   r   r   r%   ©r   r   r   r&   )r   r   r/   r0   r   r   r	   r'   )r4   r#   r5   r2   r6   r   r   r   Útest_warn_mixed_constraintsÂ   s     ÿ
  ÿz-TestNewToOldSLSQP.test_warn_mixed_constraintsc              
   C   sB  dd„ }d}| j dkrd}nd }tdd„ dtjƒ}t||| j ||d�}t|jd	ƒ td	d
d
g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d	d
d
gdtjdd�¡ |D ]}t
tt||| j ||d� �qd S )Nc                 S   s0   | d d d | d d d  | d d d  S rH   r   r   r   r   r   r   Ï   r   z=TestNewToOldSLSQP.test_warn_ignored_options.<locals>.<lambda>rd   rI   rc   c                 S   s   | d S )Nr   r   r   r   r   r   r   ×   r   r   r&   r   r   c                 S   s   | d d S ©Nr   r   r   r   r   r   r   r   ä   r   T)Zkeep_feasiblec                 S   s   | d d S rf   r   r   r   r   r   r   æ   r   )Zhessc                 S   s   | d d S rf   r   r   r   r   r   r   è   r   é*   )Zfinite_diff_jac_sparsityc                 S   s   | d d S rf   r   r   r   r   r   r   ê   r   )Zfinite_diff_rel_step)r'   r   r?   rO   r	   r   r#   r   rN   r
   r   r   )r4   r#   r1   r2   r5   r7   rR   r   r   r   Útest_warn_ignored_optionsÍ   sN    

 ÿ
 ÿÿÿÿÿÿ
  ÿz+TestNewToOldSLSQP.test_warn_ignored_optionsN)rD   rE   rF   r'   r   Zelecr?   r@   r`   r   Zbrockr   r   r   r   r   r^   rb   re   rh   r   r   r   r   rZ   ¥   s(   

  ÿ
ú	rZ   c                   @   s4   e Zd ZdZedd�edd�gZejjdd„ ƒZ	dS )ÚTestNewToOldCobylarJ   r   r[   é   c              
   C   st   | j D ]h}tƒ �F}| t¡ t|j|jd|j|jd�}t|j|j| j	|j|jd�}W 5 Q R X t
|j|jdd� qd S )Nr   r&   rX   r,   )r^   r   r/   r0   r	   r#   r1   r(   r_   r'   r   )r4   ra   r6   ÚtruthrT   r   r   r   rb   û   s    


ý
ýz(TestNewToOldCobyla.test_list_of_problemsN)
rD   rE   rF   r'   r   r^   ÚpytestÚmarkZslowrb   r   r   r   r   ri   ó   s   þri   )Ú__doc__Únumpyr?   Znumpy.testingr   r   r   r   rl   Zscipy.optimizer   r   r   r	   r
   Ztest_minimize_constrainedr   r   r   r   r   r   r   r   rG   rZ   ri   r   r   r   r   Ú<module>   s   $,iN