U
    /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   S/tmp/pip-unpacked-wheel-9gxwnfpp/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constraintsffffff?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r7?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 qt
|d |d dd t
|d |d dd qd 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 qt|d |d d%d& qd 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   g333333gffffffggrK   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Gg}_uG?go?ghS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__Z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