o
    i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   i/home/kim/smarthome/.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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   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   p1Z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   argsZjacr)   r*   g>[p?gr7?g,,?r2   r7   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   r3   r4   r	   r5   r+   r6   r   r   r   r7   r   r   r   test_constraint_dictionary_31   s   z)TestOldToNew.test_constraint_dictionary_3N)	__name__
__module____qualname__r5   r6   r+   r<   rE   rH   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rt
|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   rF   r>   r   r   r   r   r   r#   J   rG   r   )r   r   rV   c                 S   rF   r>   r   r   r   r   r   r#   M   rG   c                 S   r!   r"   r   r   r   r   r   r#   O   r$   r   c                 S   rF   r>   r   r   r   r   r   r#   P   rG   r+   r-   rR   r   r/   r0   rS   rT   )appendr   r   rB   infr   r3   r4   r	   r   r   )r8   num_parallel_threadsr   r5   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 sw   Y  qt|d$ |d% d&d' |dkrt|d) |d% d&d' q|d S ),Nc                 S   rM   rN   r   r   r   r   r   r   a   rO   z<TestNewToOld.test_individual_constraint_objects.<locals>.funrP   rQ   c                 S   rF   r>   r   r   r   r   r   r#   j   rG   zATestNewToOld.test_individual_constraint_objects.<locals>.<lambda>r   c                 S   rF   r>   r   r   r   r   r   r#   k   rG   g\(\?c                 S   rF   r>   r   r   r   r   r   r#   l   rG   c                 S       | d | d  | d | d  gS Nr   r   r   r   r   r   r   r   r#   q        c                 S   rb   rc   r   r   r   r   r   r#   t   rd   r.   c                 S   rb   rc   r   r   r   r   r   r#   w   rd   c                 S   rb   rc   r   r   r   r   r   r#   z   rd   c                 S   rF   r>   r   r   r   r   r   r#   ~   rG   c                 S   rF   r>   r   r   r   r   r   r#      rG   c                 S   rF   r>   r   r   r   r   r   r#      rG   c                 S   rF   r>   r   r   r   r   r   r#      rG   c                 S   rF   r>   r   r   r   r   r   r#      rG   c                 S   rb   rc   r   r   r   r   r   r#      rd   c                 S   rb   rc   r   r   r   r   r   r#      rd   c                 S   rb   rc   r   r   r   r   r   r#      rd   rA   r1   g333333?c                 S   rb   rc   r   r   r   r   r   r#      rd   g333333gffffffgg)r   rU   r   )r   r   rU   rW   rR   r   MbP?r0   rS   rT   c                 S   s   g | ]}|d kr|qS )rS   r   ).0r+   r   r   r   
<listcomp>   r$   zCTestNewToOld.test_individual_constraint_objects.<locals>.<listcomp>)rX   r   rB   rC   rY   r   r   r3   r4   r	   r   r   )r8   rZ   r   r5   Zconer[   r\   r]   r^   r+   r:   r_   r   r   r   "test_individual_constraint_objects_   s   



z/TestNewToOld.test_individual_constraint_objectsN)rI   rJ   rK   pytestmarkZ	fail_slowr`   ri   r   r   r   r   rL   ?   s
    


rL   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 )TestNewToOldSLSQPrR   r   Zn_electrons)gEGg}_uG?go?ghS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   r3   r4   r	   r   r5   r+   r,   constrr   r   x_opt)r8   probr:   r_   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   rM   rN   r   r   r   r   r   r      rO   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>rA   r1   r.   r   r   r   r)   rP   r*   )r   r   r3   r4   r   r   r	   r+   )r8   r   r9   r6   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	 qd S )Nc                 S   rM   rN   r   r   r   r   r   r      rO   z8TestNewToOldSLSQP.test_warn_ignored_options.<locals>.funrP   rR   ru   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)Zkeep_feasiblec                 S   rw   rx   r   r   r   r   r   r#      ry   )Zhessc                 S   rw   rx   r   r   r   r   r   r#      ry   *   )Zfinite_diff_jac_sparsityc                 S   rw   rx   r   r   r   r   r   r#      ry   )Zfinite_diff_rel_step)r+   r   rB   rY   r	   r   r   r   rX   r
   r   r   )r8   r   r5   r6   r9   r;   r]   r   r   r   test_warn_ignored_options   sH   



z+TestNewToOldSLSQP.test_warn_ignored_optionsN)rI   rJ   rK   r+   r   ZelecrB   rC   rr   r   Zbrockr   r   r   r   r   rp   rt   rj   rk   Zthread_unsaferv   r{   r   r   r   r   rl      s&    

	
rl   c                   @   s4   e Zd ZdZeddeddgZejjdd Z	dS )TestNewToOldCobylarS   r   rm      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*   rf   r0   )rp   r   r3   r4   r	   r   r5   r,   rq   r+   r   )r8   rs   r:   truthr_   r   r   r   rt     s    



z(TestNewToOldCobyla.test_list_of_problemsN)
rI   rJ   rK   r+   r   rp   rj   rk   Zslowrt   r   r   r   r   r|     s    r|   )__doc__numpyrB   Znumpy.testingr   r   r   r   rj   Zscipy.optimizer   r   r   r	   r
   Ztest_minimize_constrainedr   r   r   r   r   r   r   r   rL   rl   r|   r   r   r   r   <module>   s    $/uR