o
    h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   c/var/www/vscode/kcb/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?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r7?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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   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 sw   Y  qt|d$ |d% d&d' |dkrt|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   g333333gffffffgg)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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   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	 qd 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