a
    ‡ù»j:]  ã                   @   sp   d Z ddlmZmZmZmZ ddlmZ ddlZddl	Z
ddlmZmZmZmZ G dd„ dƒZG dd	„ d	ƒZdS )
z#
Unit test for SLSQP optimization.
é    )Úassert_Úassert_array_almost_equalÚassert_allcloseÚassert_equal)ÚraisesN)Ú
fmin_slsqpÚminimizeÚBoundsÚNonlinearConstraintc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú
MyCallBackzJpass a custom callback function

    This makes sure it's being used.
    c                 C   s   d| _ d| _d S )NFr   ©Úbeen_calledÚncalls©Úself© r   úEE:\soccer\ml_env\Lib\site-packages\scipy/optimize/tests/test_slsqp.pyÚ__init__   s    zMyCallBack.__init__c                 C   s   d| _ |  jd7  _d S )NTé   r   ©r   Úxr   r   r   Ú__call__   s    zMyCallBack.__call__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r      s   r   c                   @   sª  e Zd ZdZdd„ Zdfdd„Zdgdd„Zdhd	d
„Zdidd„Zdjdd„Z	dkdd„Z
dldd„Zdmdd„Zdndd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dadb„ Z3dcdd„ Z4deS )oÚ	TestSLSQPzð
    Test SLSQP algorithm using Example 14.4 from Numerical Methods for
    Engineers by Steven Chapra and Raymond Canale.
    This example maximizes the function f(x) = 2*x*y + 2*x - x**2 - 2*y**2,
    which has a maximum at x=2, y=1.
    c                 C   s   ddi| _ d S )NÚdispF)Úoptsr   r   r   r   Úsetup_method"   s    zTestSLSQP.setup_methodç      ð?c                 C   s<   |d }|d }|d| | d|  |d  d|d    S )a¦  
        Arguments:
        d     - A list of two elements, where d[0] represents x and d[1] represents y
                 in the following equation.
        sign - A multiplier for f. Since we want to optimize it, and the SciPy
               optimizers can only minimize functions, we need to multiply it by
               -1 to achieve the desired solution
        Returns:
        2*x*y + 2*x - x**2 - 2*y**2

        r   r   é   r   )r   ÚdÚsignr   Úyr   r   r   Úfun%   s    zTestSLSQP.func                 C   sL   |d }|d }|d| d|  d  }|d| d|   }t  ||gt¡S )zo
        This is the derivative of fun, returning a NumPy array
        representing df/dx and df/dy.

        r   r   éþÿÿÿr!   é   )ÚnpÚarrayÚfloat)r   r"   r#   r   r$   ZdfdxZdfdyr   r   r   Újac5   s
    zTestSLSQP.jacc                 C   s   |   ||¡|  ||¡fS ©N)r%   r+   )r   r"   r#   r   r   r   Úfun_and_jacA   s    zTestSLSQP.fun_and_jacc                 C   s   t  |d |d  g¡S )ú Equality constraint r   r   ©r(   r)   ©r   r   r#   r   r   r   Úf_eqconD   s    zTestSLSQP.f_eqconc                 C   s   t  ddgg¡S )z! Equality constraint, derivative r   éÿÿÿÿr/   r0   r   r   r   Úfprime_eqconH   s    zTestSLSQP.fprime_eqconc                 C   s   |   ||¡d S )z Scalar equality constraint r   )r1   r0   r   r   r   Úf_eqcon_scalarL   s    zTestSLSQP.f_eqcon_scalarc                 C   s   |   ||¡d  ¡ S )z( Scalar equality constraint, derivative r   )r3   Útolistr0   r   r   r   Úfprime_eqcon_scalarP   s    zTestSLSQP.fprime_eqcon_scalarc                 C   s   t  |d |d  d g¡S )z Inequality constraint r   r   r    r/   r0   r   r   r   Úf_ieqconT   s    zTestSLSQP.f_ieqconc                 C   s   t  ddgg¡S )z# Inequality constraint, derivative r   r2   r/   r0   r   r   r   Úfprime_ieqconX   s    zTestSLSQP.fprime_ieqconc                 C   s
   t  |¡S )z Vector inequality constraint )r(   Úasarrayr   r   r   r   Ú	f_ieqcon2\   s    zTestSLSQP.f_ieqcon2c                 C   s   t  |jd ¡S )z* Vector inequality constraint, derivative r   )r(   ÚidentityÚshaper   r   r   r   Úfprime_ieqcon2`   s    zTestSLSQP.fprime_ieqcon2c              	   C   sT   g d¢}|D ]B}t | jddgd|d| jd�}t|d |d ƒ t|jd	d
gƒ qd S )N©NFz2-pointz3-pointç      ð¿r    ©r?   ÚSLSQP©Úargsr+   ÚmethodÚoptionsÚsuccessÚmessager!   r   )r   r%   r   r   r   r   ©r   Zjacsr+   Úresr   r   r   Ú$test_minimize_unbounded_approximatede   s    þz.TestSLSQP.test_minimize_unbounded_approximatedc                 C   sD   t | jddgd| jd| jd�}t|d |d ƒ t|jdd	gƒ d S )
Nr?   r    r@   rA   rB   rF   rG   r!   r   )r   r%   r+   r   r   r   r   ©r   rI   r   r   r   Útest_minimize_unbounded_giveno   s
    
ÿz'TestSLSQP.test_minimize_unbounded_givenc                 C   s¦   g d¢}|D ]”}t jdd��. t| jddgd|dd| jd	�}W d   ƒ n1 sP0    Y  t|d
 |d ƒ t|jddgƒ td|jd kƒ t|jd dkƒ qd S )Nr>   Úignore)Úinvalidr?   r    r@   ))ç      @N)Nç      à?rA   )rC   r+   ÚboundsrD   rE   rF   rG   rO   rP   r   r   )r(   Zerrstater   r%   r   r   r   r   rH   r   r   r   Ú"test_minimize_bounded_approximatedv   s    ý$z,TestSLSQP.test_minimize_bounded_approximatedc                 C   sB   t | jddgddd| jd�}t|d |d ƒ t|jd	d
gƒ d S )Nr?   r    r@   TrA   rB   rF   rG   r!   r   )r   r-   r   r   r   r   rK   r   r   r   Ú test_minimize_unbounded_combined„   s
    ÿz*TestSLSQP.test_minimize_unbounded_combinedc              
   C   s`   g d¢}|D ]N}t | jddgd|d| jddœd| jd�}t|d	 |d
 ƒ t|jddgƒ qd S )Nr>   r?   r    r@   Úeq©Útyper%   rC   rA   )rC   r+   ÚconstraintsrD   rE   rF   rG   r   )r   r%   r1   r   r   r   r   rH   r   r   r   Ú#test_minimize_equality_approximated‹   s    þûz-TestSLSQP.test_minimize_equality_approximatedc              
   C   sP   t | jddg| jddd| jddœ| jd�}t|d |d	 ƒ t|jd
d
gƒ d S )Nr?   r    rA   r@   rT   rU   ©r+   rD   rC   rW   rE   rF   rG   r   )r   r%   r+   r1   r   r   r   r   rK   r   r   r   Útest_minimize_equality_given˜   s    ÿüz&TestSLSQP.test_minimize_equality_givenc                 C   sT   t | jddgd| jdd| jd| jdœ| jd�}t|d |d	 ƒ t|jd
d
gƒ d S ©Nr?   r    rA   r@   rT   ©rV   r%   rC   r+   ©rD   r+   rC   rW   rE   rF   rG   r   ©	r   r%   r+   r1   r3   r   r   r   r   rK   r   r   r   Útest_minimize_equality_given2¢   s    ýúz'TestSLSQP.test_minimize_equality_given2c                 C   sT   t | jddgd| jdd| jd| jdœ| jd�}t|d |d	 ƒ t|jd
d
gƒ d S r[   )	r   r%   r+   r4   r6   r   r   r   r   rK   r   r   r   Ú(test_minimize_equality_given_cons_scalar¯   s    ýúz2TestSLSQP.test_minimize_equality_given_cons_scalarc              
   C   sT   t | jddgd| jdd| jddœ| jd�}t|d |d	 ƒ t|jd
dgdd� d S )Nr?   r    rA   r@   ÚineqrU   r]   rF   rG   r!   r   çü©ñÒMbP?©Zatol)r   r%   r+   r7   r   r   r   r   rK   r   r   r   Útest_minimize_inequality_given¼   s    þûz(TestSLSQP.test_minimize_inequality_givenc              
   C   sR   t | jddg| jddd| j| jdœ| jd�}t|d |d	 ƒ t|jd
dgƒ d S )Nr?   r    rA   r@   ra   )rV   r%   r+   rY   rF   rG   r!   r   )	r   r%   r+   r:   r=   r   r   r   r   rK   r   r   r   Ú1test_minimize_inequality_given_vector_constraintsÇ   s    þûz;TestSLSQP.test_minimize_inequality_given_vector_constraintsc                 C   sT   dd„ }dd„ }t |ddƒg}t ddg¡}td	d	gd
d
gƒ}t||d||d� d S )Nc                 S   sR   d| d   krdkr6n nd| d   kr4dks>n J | ƒ‚| d d | d  S )Nr   r   rP   r   ©r   r   r   r   ÚcØ   s    >z5TestSLSQP.test_minimize_bounded_constraint.<locals>.cc                 S   sX   d| d   krdkr6n nd| d   kr4dks>n J | ƒ‚| d d  | d d  S ©Nr   r   r!   r   rf   r   r   r   ÚfÜ   s    >z5TestSLSQP.test_minimize_bounded_constraint.<locals>.fr   g      ø?gÍÌÌÌÌÌì?rP   g        r    rA   ©rD   rQ   rW   )r
   r(   r9   r	   r   )r   rg   ri   ZcnsÚx0Úbndr   r   r   Ú test_minimize_bounded_constraintÓ   s    z*TestSLSQP.test_minimize_bounded_constraintc                 C   s¢   t | jddgd| jdddgd| jd| jdœ| jd	�}t|d
 |d ƒ t|jddgdd� td|jd   kotdkn  ƒ td|jd   ko–dkn  ƒ d S )Nr?   r    rA   r@   ©çš™™™™™é¿r    ©r2   çš™™™™™é?rT   r\   )rD   r+   rC   rQ   rW   rE   rF   rG   rq   rb   rc   ro   r   r   r2   r^   rK   r   r   r   Ú#test_minimize_bound_equality_given2å   s    ýù"z-TestSLSQP.test_minimize_bound_equality_given2c                 C   sF   t | jddgdddd�}|\}}}}}t|dk|ƒ t|ddgƒ d S )Nr?   r    r@   r   r   )rC   ÚiprintÚfull_outputr!   )r   r%   r   r   ©r   rI   r   ZfxZitsZimodeZsmoder   r   r   Útest_unbounded_approximatedö   s    ÿz%TestSLSQP.test_unbounded_approximatedc                 C   sJ   t | jddgd| jddd�}|\}}}}}t|dk|ƒ t|ddgƒ d S )Nr?   r    r@   r   r   )rC   Úfprimers   rt   r!   )r   r%   r+   r   r   ru   r   r   r   Útest_unbounded_givenþ   s    þzTestSLSQP.test_unbounded_givenc                 C   sL   t | jddgd| jgddd�}|\}}}}}t|dk|ƒ t|ddgƒ d S )Nr?   r    r@   r   r   )rC   Úeqconsrs   rt   )r   r%   r1   r   r   ru   r   r   r   Útest_equality_approximated  s    þz$TestSLSQP.test_equality_approximatedc              	   C   sP   t | jddg| jd| jgddd�}|\}}}}}t|dk|ƒ t|ddgƒ d S )Nr?   r    r@   r   r   )rw   rC   ry   rs   rt   )r   r%   r+   r1   r   r   ru   r   r   r   Útest_equality_given  s    ýzTestSLSQP.test_equality_givenc              
   C   sR   t | jddg| jd| j| jddd�}|\}}}}}t|dk|ƒ t|ddgƒ d S )Nr?   r    r@   r   r   )rw   rC   Úf_eqconsÚfprime_eqconsrs   rt   ©r   r%   r+   r1   r3   r   r   ru   r   r   r   Útest_equality_given2  s    ûzTestSLSQP.test_equality_given2c              	   C   sT   t | jddg| jd| jgddd�}|\}}}}}t|dk|ƒ t|ddgdd	� d S )
Nr?   r    r@   r   r   )rw   rC   Úieqconsrs   rt   r!   é   ©Údecimal)r   r%   r+   r7   r   r   ru   r   r   r   Útest_inequality_given&  s    ýzTestSLSQP.test_inequality_givenc                 C   sœ   t | jddg| jdddg| j| jddd�	}|\}}}}}t|dk|ƒ t|d	d	gd
d� td|d   kopdkn  ƒ td|d   ko�d	kn  ƒ d S )Nr?   r    r@   rn   rp   r   r   )rw   rC   rQ   r|   r}   rs   rt   rq   r�   r‚   ro   r2   r~   ru   r   r   r   Útest_bound_equality_given20  s    û z$TestSLSQP.test_bound_equality_given2c                 C   sR   t dd„ dgdd„ gdd�}t|dgƒ t dd„ dgd	d„ dd
�}t|dgƒ d S )Nc                 S   s   | d S ©Nr!   r   ©Úzr   r   r   Ú<lambda>@  ó    z3TestSLSQP.test_scalar_constraints.<locals>.<lambda>g      @c                 S   s   | d d S ©Nr   r   r   r‡   r   r   r   r‰   A  rŠ   r   )r€   rs   r    c                 S   s   | d S r†   r   r‡   r   r   r   r‰   E  rŠ   c                 S   s   | d d gS r‹   r   r‡   r   r   r   r‰   F  rŠ   )Z	f_ieqconsrs   )r   r   r   r   r   r   Útest_scalar_constraints>  s    þþz!TestSLSQP.test_scalar_constraintsc                 C   s    t dd„ dgddggdd� d S )Nc                 S   s   | d d S ©Nr!   r   r   r‡   r   r   r   r‰   L  rŠ   z/TestSLSQP.test_integer_bounds.<locals>.<lambda>r   r   ©rQ   rs   ©r   r   r   r   r   Útest_integer_boundsJ  s    zTestSLSQP.test_integer_boundsc                 C   sP   t j t jft  dg¡t  dg¡fg}tdd„ ddg|dd�}t|ddgƒ d S )Nr!   r�   c                 S   s   t  | d d ¡S r�   )r(   Úsumr‡   r   r   r   r‰   S  rŠ   z-TestSLSQP.test_array_bounds.<locals>.<lambda>rO   r   rŽ   )r(   Úinfr)   r   r   )r   rQ   r   r   r   r   Útest_array_boundsN  s
    &ÿzTestSLSQP.test_array_boundsc                 C   s>   t tƒ�" tdd„ g d¢ƒ W d   ƒ n1 s00    Y  d S )Nc                 S   s   ddgS r‹   r   rf   r   r   r   r‰   [  rŠ   z7TestSLSQP.test_obj_must_return_scalar.<locals>.<lambda>©r   r!   r�   )Úassert_raisesÚ
ValueErrorr   r   r   r   r   Útest_obj_must_return_scalarW  s    
z%TestSLSQP.test_obj_must_return_scalarc                 C   s   t dd„ g d¢dd� d S )Nc                 S   s   dgS ©Nr   r   rf   r   r   r   r‰   a  rŠ   z;TestSLSQP.test_obj_returns_scalar_in_list.<locals>.<lambda>r”   r   )rs   r�   r   r   r   r   Útest_obj_returns_scalar_in_list]  s    z)TestSLSQP.test_obj_returns_scalar_in_listc                 C   sR   t ƒ }t| jddgdd|| jd�}t|d |d ƒ t|jƒ t|j|d ƒ d S )	Nr?   r    r@   rA   )rC   rD   ÚcallbackrE   rF   rG   Únit)r   r   r%   r   r   r   r   r   )r   rš   rI   r   r   r   Útest_callbackc  s    ÿ
zTestSLSQP.test_callbackc                 C   sv   ddg}dd„ }dd„ }t dd„ |d	|d
œd|d
œfddd�}|j}t||ƒddd� t||ƒdkƒ t|j|ƒ d S )Nr   r   c                 S   s   | d | d  d S rh   r   rf   r   r   r   Úf1w  s    z5TestSLSQP.test_inconsistent_linearization.<locals>.f1c                 S   s   | d d d S ©Nr   r!   r   r   rf   r   r   r   Úf2y  s    z5TestSLSQP.test_inconsistent_linearization.<locals>.f2c                 S   s   | d d | d d  S rž   r   rf   r   r   r   r‰   |  rŠ   z;TestSLSQP.test_inconsistent_linearization.<locals>.<lambda>rT   ©rV   r%   ra   ©©r   Nr¢   rA   ©rW   rQ   rD   g:Œ0âŽyE>rc   g:Œ0âŽyE¾)r   r   r   r   rF   )r   r   r�   rŸ   Úsolr   r   r   Útest_inconsistent_linearizationl  s     
ÿúz)TestSLSQP.test_inconsistent_linearizationc                 C   sH   ddg}t dd„ |ddd„ dœdd	d„ dœfd
dd�}t|j |ƒ d S )Nr   r!   c                 S   s   | d d | d d  S rž   r   rf   r   r   r   r‰   �  rŠ   z0TestSLSQP.test_regression_5743.<locals>.<lambda>rT   c                 S   s   | d | d  d S r‹   r   rf   r   r   r   r‰   �  rŠ   r    ra   c                 S   s   | d d S )Nr   r!   r   rf   r   r   r   r‰   �  rŠ   r¡   rA   r£   )r   r   rF   )r   r   r¤   r   r   r   Útest_regression_5743ˆ  s    ÿúzTestSLSQP.test_regression_5743c                 C   s.   dd„ }t |g d¢dd�}t|jjdkƒ d S )Nc                 S   s8   | d d d d| d d d   d| d d d   S )Nr   r   r!   rP   r   rf   r   r   r   Úfunc–  s    z$TestSLSQP.test_gh_6676.<locals>.func©r   r   r   rA   ©rD   )r�   )r   r   r+   r<   )r   r§   r¤   r   r   r   Útest_gh_6676•  s    zTestSLSQP.test_gh_6676c              	   C   sv   dddt jdft jdffdt j fdfg}|D ]B}ttƒ�& t| jddg|d	d
� W d   ƒ q.1 sf0    Y  q.d S )N)©r   r!   ©r!   r   )r¬   r«   )r¬   r¬   r   r   )r   r   r?   r    rA   )rQ   rD   )r(   r’   r•   r–   r   r%   )r   Zbounds_listrQ   r   r   r   Útest_invalid_boundsœ  s    û
zTestSLSQP.test_invalid_boundsc                 C   s   dd„ }t |dgddgd�}t|jƒ t|jddd	� t |d
gddgd�}t|jƒ t|jddd	� t |d
gddgd�}t|jƒ t|jddd	� t |dgddgd�}t|jƒ t|jddd	� t |dgddgd�}t|jƒ t|jddd	� t |dgddgd�}t|jƒ t|jddd	� d S )Nc                 S   s   | d d d S rh   r   rf   r   r   r   ri   ®  s    z)TestSLSQP.test_bounds_clipping.<locals>.fé
   Úslsqpr˜   ©rD   rQ   r   ç»½×Ùß|Û=rc   éöÿÿÿ)r!   Nr!   ç      à¿)r2   r   ©r   r   rF   r   r   )r   ri   r¤   r   r   r   Útest_bounds_clippingª  s&    





zTestSLSQP.test_bounds_clippingc                 C   sP  dd„ }ddd„ dœg}ddd„ dœg}ddd„ dœdd	d„ dœg}t |d
gd|d�}t|jƒ t|jddd� t |dgd|d�}t|jƒ t|jddd� t |dgd|d�}t|jƒ t|jddd� t |d
gd|d�}t|jƒ t|jddd� t |dgd|d�}t|jƒ t|jddd� t |d
gd|d�}t|jƒ t|jddd� d S )Nc                 S   s   | \} | |  d|   d S r�   r   rf   r   r   r   ri   Ë  s    z,TestSLSQP.test_infeasible_initial.<locals>.fra   c                 S   s   d|  S r˜   r   rf   r   r   r   r‰   Ï  rŠ   z3TestSLSQP.test_infeasible_initial.<locals>.<lambda>r    c                 S   s   | d S r†   r   rf   r   r   r   r‰   Ð  rŠ   c                 S   s   d|  S r˜   r   rf   r   r   r   r‰   Ñ  rŠ   c                 S   s   | d S ©Nr   r   rf   r   r   r   r‰   Ò  rŠ   r®   r¯   )rD   rW   r   r±   rc   r²   r!   r³   r´   )r   ri   Zcons_uZcons_lZcons_ulr¤   r   r   r   Útest_infeasible_initialÉ  s0    ÿ





z!TestSLSQP.test_infeasible_initialc                 C   sZ   dd„ }dd„ }dd„ }d}d}t d	|d
�t d	|d
�f}t||d||d�}t|j ƒ d S )Nc                 S   s   d| d  d| d   S )Nr2   r   r'   r   r   rf   r   r   r   Úcostï  s    z6TestSLSQP.test_inconsistent_inequalities.<locals>.costc                 S   s   | d | d  d S )Nr   r   r   rf   r   r   r   Ú	ineqcons1ò  s    z;TestSLSQP.test_inconsistent_inequalities.<locals>.ineqcons1c                 S   s   | d | d  S r‹   r   rf   r   r   r   Ú	ineqcons2õ  s    z;TestSLSQP.test_inconsistent_inequalities.<locals>.ineqcons2)r   é   )©éûÿÿÿr»   r¼   ra   r    rA   rj   )Údictr   r   rF   )r   r¸   r¹   rº   rk   rQ   ÚconsrI   r   r   r   Útest_inconsistent_inequalitiesì  s    z(TestSLSQP.test_inconsistent_inequalitiesc                 C   sP   dd„ }t ddgtjtjgƒ}t|ddgd|d�}t|jƒ t|jddgƒ d S )Nc                 S   s   | d d | d d  S rž   r   rf   r   r   r   ri     s    z)TestSLSQP.test_new_bounds_type.<locals>.fr   r   r¯   r°   )r	   r(   r’   r   r   rF   r   r   )r   ri   rQ   r¤   r   r   r   Útest_new_bounds_type  s
    
zTestSLSQP.test_new_bounds_typec                 C   s    G dd„ dƒ}|ƒ }|  ¡  d S )Nc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
z9TestSLSQP.test_nested_minimization.<locals>.NestedProblemc                 S   s
   d| _ d S r˜   )ÚF_outer_countr   r   r   r   r     s    zBTestSLSQP.test_nested_minimization.<locals>.NestedProblem.__init__c                 S   sn   |  j d7  _ | j dkr tdƒ‚t| jddd�}t|jƒ t|jddgƒ |d d |d d  |d d  S )	Nr   iè  z(Nested minimization failed to terminate.)r�   r'   rA   r©   r   r!   )rÂ   Ú	Exceptionr   ÚF_innerr   rF   r   r   )r   r   Z	inner_resr   r   r   ÚF_outer  s    

zATestSLSQP.test_nested_minimization.<locals>.NestedProblem.F_outerc                 S   s    |d d d |d d d  S rh   r   r   r   r   r   rÄ     s    zATestSLSQP.test_nested_minimization.<locals>.NestedProblem.F_innerc                 S   s.   t | jddd�}t|jƒ t|jg d¢ƒ d S )N)r»   r»   r»   rA   r©   r¨   )r   rÅ   r   rF   r   r   )r   Z	outer_resr   r   r   Úsolve  s    
z?TestSLSQP.test_nested_minimization.<locals>.NestedProblem.solveN)r   r   r   r   rÅ   rÄ   rÆ   r   r   r   r   ÚNestedProblem  s   	rÇ   )rÆ   )r   rÇ   Úproblemr   r   r   Útest_nested_minimization  s    z"TestSLSQP.test_nested_minimizationc                 C   s|   dd„ }dd„ }dd„ }d|dœ}d|dœ}t |d	d
gd||gddgd�}tj |jd¡ tj |jddg¡ |jsxJ ‚d S )Nc                 S   s   t  | d ¡S r¶   )r(   Úsqrtrf   r   r   r   r%   +  s    z"TestSLSQP.test_gh1758.<locals>.func                 S   s   | d d| d  d  S )r.   r   r!   r   r�   r   rf   r   r   r   r1   .  s    z&TestSLSQP.test_gh1758.<locals>.f_eqconc                 S   s   | d | d  d d  S )r.   r   r   r�   r   rf   r   r   r   Úf_eqcon22  s    z'TestSLSQP.test_gh1758.<locals>.f_eqcon2rT   r    é   g      Ð?rA   )r³   r   )r   rÌ   )rD   rW   rQ   g8r]õ(ká?gÚÁQUUÕ?gc@›Á„öÒ?)r   r(   Ztestingr   r%   r   rF   )r   r%   r1   rË   Úc1Úc2rI   r   r   r   Útest_gh1758'  s    

ÿzTestSLSQP.test_gh1758c              	   C   sd   t j d¡ ddd„ dœddd„ dœf}d}dd	„ }g d
¢}t||d||dddœd�}|jr`J ‚d S )Nr®   ra   c                 S   s   | d  | d  d S )Nr   r   r�   r   rf   r   r   r   r‰   B  rŠ   z'TestSLSQP.test_gh9640.<locals>.<lambda>r    c                 S   s   | d | d  d S )Nr   r!   r   rf   r   r   r   r‰   C  rŠ   )©r&   r!   rÐ   rÐ   c                 S   s   dS r¶   r   rf   r   r   r   ÚtargetF  s    z%TestSLSQP.test_gh9640.<locals>.target)g ãö51þ¿gäÐ£X«{ä¿g ¢¼ŽP(ê¿rA   Fi'  )r   Úmaxiter)rD   rQ   rW   rE   )r(   ÚrandomÚseedr   rF   )r   r¿   ZbndsrÑ   rk   rI   r   r   r   Útest_gh9640@  s    ÿÿzTestSLSQP.test_gh9640c                    s¬   t j d¡ tt  dg¡t  dg¡ƒ‰ tˆ jƒ}t  ˆ jˆ jˆ j t j |¡  ¡}‡ fdd„}tj	t
dd��* t||dˆ d	�}|jsŠJ ‚W d   ƒ n1 sž0    Y  d S )
Nr   gš™™™™™¹?r    c                    s   | ˆ j k ¡ sJ ‚tj | ¡S r,   )ÚlbÚallr(   ZlinalgZnormrf   ©rQ   r   r   ri   Z  s    z7TestSLSQP.test_parameters_stay_within_bounds.<locals>.fzx were outside bounds)ÚmatchrA   r°   )r(   rÓ   rÔ   r	   r)   ÚlenrÖ   ZubÚpytestZwarnsÚRuntimeWarningr   rF   )r   Zn_inputsrk   ri   rI   r   rØ   r   Ú"test_parameters_stay_within_boundsO  s    

ÿz,TestSLSQP.test_parameters_stay_within_boundsN)r    )r    )r    )r    )r    )r    )r    )r    )r    )5r   r   r   r   r   r%   r+   r-   r1   r3   r4   r6   r7   r8   r:   r=   rJ   rL   rR   rS   rX   rZ   r_   r`   rd   re   rm   rr   rv   rx   rz   r{   r   r„   r…   rŒ   r�   r“   r—   r™   rœ   r¥   r¦   rª   r­   rµ   r·   rÀ   rÁ   rÉ   rÏ   rÕ   rÝ   r   r   r   r   r      sd   










		

		#r   )r   Znumpy.testingr   r   r   r   rÛ   r   r•   Únumpyr(   Zscipy.optimizer   r   r	   r
   r   r   r   r   r   r   Ú<module>   s   