o
    Ö­jÞ[  ã                   @   sx   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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   ú\/var/www/html/CropPilot/venv/lib/python3.10/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dndd„Zdndd„Zdnd	d
„Zdndd„Zdndd„Z	dndd„Z
dndd„Zdnd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.e/j0j1e2j3dYdZ�d[ d\ d] d^kd_d`�dadb„ ƒZ4dcdd„ Z5dedf„ Z6dgdh„ Z7didj„ Z8e/j0j9dkdl„ ƒZ:dmS )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#   ó   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%   ÚdfdxÚdfdyr   r   r   Újac6   s
   zTestSLSQP.jacc                 C   s   |   ||¡|  ||¡fS ©N)r&   r.   )r   r#   r$   r   r   r   Úfun_and_jacB   ó   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_eqconE   ó   zTestSLSQP.f_eqconc                 C   ó   t  ddgg¡S )z! Equality constraint, derivative r   éÿÿÿÿr3   r4   r   r   r   Úfprime_eqconI   ó   zTestSLSQP.fprime_eqconc                 C   s   |   ||¡d S )z Scalar equality constraint r   )r5   r4   r   r   r   Úf_eqcon_scalarM   r:   zTestSLSQP.f_eqcon_scalarc                 C   s   |   ||¡d  ¡ S )z( Scalar equality constraint, derivative r   )r9   Útolistr4   r   r   r   Úfprime_eqcon_scalarQ   s   zTestSLSQP.fprime_eqcon_scalarc                 C   s   t  |d |d  d g¡S )z Inequality constraint r   r   r!   r3   r4   r   r   r   Úf_ieqconU   s   zTestSLSQP.f_ieqconc                 C   r7   )z# Inequality constraint, derivative r   r8   r3   r4   r   r   r   Úfprime_ieqconY   r:   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_ieqcon2a   r:   zTestSLSQP.fprime_ieqcon2c              	   C   sT   g d¢}|D ]!}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!   ©rF   ÚSLSQP©Úargsr.   ÚmethodÚoptionsÚsuccessÚmessager"   r   )r   r&   r   r   r   r   ©r   Újacsr.   Úresr   r   r   Ú$test_minimize_unbounded_approximatedf   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 )
NrF   r!   rG   rH   rI   rM   rN   r"   r   )r   r&   r.   r   r   r   r   ©r   rQ   r   r   r   Útest_minimize_unbounded_givenp   s
   
ÿz'TestSLSQP.test_minimize_unbounded_givenc                 C   s¦   g d¢}|D ]J}t jdd�� t| jddgd|dd| jd	�}W d   ƒ n1 s(w   Y  t|d
 |d ƒ t|jddgƒ td|jd kƒ t|jd dkƒ qd S )NrE   Úignore)ÚinvalidrF   r!   rG   ))ç      @N)Nç      à?rH   )rJ   r.   ÚboundsrK   rL   rM   rN   rW   rX   r   r   )r)   Úerrstater   r&   r   r   r   r   rO   r   r   r   Ú"test_minimize_bounded_approximatedw   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 )NrF   r!   rG   TrH   rI   rM   rN   r"   r   )r   r0   r   r   r   r   rS   r   r   r   Ú test_minimize_unbounded_combined…   s
   ÿz*TestSLSQP.test_minimize_unbounded_combinedc              
   C   s`   g d¢}|D ]'}t | jddgd|d| jddœd| jd�}t|d	 |d
 ƒ t|jddgƒ qd S )NrE   rF   r!   rG   Úeq©Útyper&   rJ   rH   )rJ   r.   ÚconstraintsrK   rL   rM   rN   r   )r   r&   r5   r   r   r   r   rO   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 )NrF   r!   rH   rG   r]   r^   ©r.   rK   rJ   r`   rL   rM   rN   r   )r   r&   r.   r5   r   r   r   r   rS   r   r   r   Útest_minimize_equality_given™   s   ÿüz&TestSLSQP.test_minimize_equality_givenc                 C   óT   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 ©NrF   r!   rH   rG   r]   ©r_   r&   rJ   r.   ©rK   r.   rJ   r`   rL   rM   rN   r   ©	r   r&   r.   r5   r9   r   r   r   r   rS   r   r   r   Útest_minimize_equality_given2£   ó   ýúz'TestSLSQP.test_minimize_equality_given2c                 C   rd   re   )	r   r&   r.   r;   r=   r   r   r   r   rS   r   r   r   Ú(test_minimize_equality_given_cons_scalar°   rj   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 )NrF   r!   rH   rG   Úineqr^   rg   rM   rN   r"   r   çü©ñÒMbP?©Úatol)r   r&   r.   r>   r   r   r   r   rS   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 )NrF   r!   rH   rG   rl   )r_   r&   r.   rb   rM   rN   r"   r   )	r   r&   r.   rA   rD   r   r   r   r   rS   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   s^   d| d   krdkr!n J | ƒ‚d| d   kr dks%J | ƒ‚ J | ƒ‚| d d | d  S )Nr   r   rX   r   ©r   r   r   r   ÚcÙ   s   Jz5TestSLSQP.test_minimize_bounded_constraint.<locals>.cc                 S   sd   d| d   krdkr!n J | ƒ‚d| d   kr dks%J | ƒ‚ J | ƒ‚| d d  | d d  S ©Nr   r   r"   r   rr   r   r   r   ÚfÝ   s   Jz5TestSLSQP.test_minimize_bounded_constraint.<locals>.fr   g      ø?gÍÌÌÌÌÌì?rX   g        r!   rH   ©rK   rY   r`   )r
   r)   r@   r	   r   )r   rs   ru   Ú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o:dkn  ƒ td|jd   koNdkƒ d S   ƒ d S )NrF   r!   rH   rG   ©çš™™™™™é¿r!   ©r8   çš™™™™™é?r]   rf   )rK   r.   rJ   rY   r`   rL   rM   rN   r~   rm   rn   r|   r   r   r8   rh   rS   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 )NrF   r!   rG   r   r   )rJ   ÚiprintÚfull_outputr"   )r   r&   r   r   ©r   rQ   r   ÚfxÚitsÚimodeÚ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 )NrF   r!   rG   r   r   )rJ   Úfprimer€   r�   r"   )r   r&   r.   r   r   r‚   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 )NrF   r!   rG   r   r   )rJ   Úeqconsr€   r�   )r   r&   r5   r   r   r‚   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 )NrF   r!   rG   r   r   )rˆ   rJ   rŠ   r€   r�   )r   r&   r.   r5   r   r   r‚   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 )NrF   r!   rG   r   r   )rˆ   rJ   Úf_eqconsÚfprime_eqconsr€   r�   ©r   r&   r.   r5   r9   r   r   r‚   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 )
NrF   r!   rG   r   r   )rˆ   rJ   Úieqconsr€   r�   r"   é   ©Údecimal)r   r&   r.   r>   r   r   r‚   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o8dkn  ƒ td|d   koKd	kƒ d S   ƒ d S )NrF   r!   rG   r{   r}   r   r   )rˆ   rJ   rY   r�   rŽ   r€   r�   r~   r’   r“   r|   r8   r�   r‚   r   r   r   Útest_bound_equality_given21  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   ó   | d S ©Nr"   r   ©Úzr   r   r   Ú<lambda>A  ó    z3TestSLSQP.test_scalar_constraints.<locals>.<lambda>g      @c                 S   ó   | d d S ©Nr   r   r   r™   r   r   r   r›   B  ó    r   )r‘   r€   r!   c                 S   r—   r˜   r   r™   r   r   r   r›   F  rœ   c                 S   s   | d d gS rž   r   r™   r   r   r   r›   G  s    )Ú	f_ieqconsr€   )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›   M  rŸ   z/TestSLSQP.test_integer_bounds.<locals>.<lambda>r   r   ©rY   r€   ©r   r   r   r   r   Útest_integer_boundsK  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›   T  s    z-TestSLSQP.test_array_bounds.<locals>.<lambda>rW   r   r£   )r)   Úinfr*   r   r   )r   rY   r   r   r   r   Útest_array_boundsO  s
   &ÿzTestSLSQP.test_array_boundsc                 C   s@   t tƒ� tdd„ g d¢ƒ W d   ƒ d S 1 sw   Y  d S )Nc                 S   s   ddgS rž   r   rr   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_scalarX  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   rr   r   r   r   r›   b  s    z;TestSLSQP.test_obj_returns_scalar_in_list.<locals>.<lambda>r©   r   )r€   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 )	NrF   r!   rG   rH   )rJ   rK   ÚcallbackrL   rM   rN   Únit)r   r   r&   r   r   r   r   r   )r   r¯   rQ   r   r   r   Útest_callbackd  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 rt   r   rr   r   r   r   Úf1x  ó   z5TestSLSQP.test_inconsistent_linearization.<locals>.f1c                 S   s   | d d d S ©Nr   r"   r   r   rr   r   r   r   Úf2z  ó   z5TestSLSQP.test_inconsistent_linearization.<locals>.f2c                 S   ó   | d d | d d  S r´   r   rr   r   r   r   r›   }  ó    z;TestSLSQP.test_inconsistent_linearization.<locals>.<lambda>r]   ©r_   r&   rl   ©©r   Nr»   rH   ©r`   rY   rK   g:Œ0âŽyE>rn   g:Œ0âŽyE¾)r   r   r   r   rM   )r   r   r²   rµ   Úsolr   r   r   Útest_inconsistent_linearizationm  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   r·   r´   r   rr   r   r   r   r›   Ž  r¸   z0TestSLSQP.test_regression_5743.<locals>.<lambda>r]   c                 S   ó   | d | d  d S rž   r   rr   r   r   r   r›   �  ó    r¹   rl   c                 S   r�   )Nr   r"   r   rr   r   r   r   r›   ‘  rŸ   rº   rH   r¼   )r   r   rM   )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"   rX   r   rr   r   r   r   Úfunc—  s   8z$TestSLSQP.test_gh_6676.<locals>.func©r   r   r   rH   ©rK   )r’   )r   r   r.   rC   )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 ]!}ttƒ� t| jddg|d	d
� W d   ƒ n1 s3w   Y  qd S )N)©r   r"   ©r"   r   )rÇ   rÆ   )rÇ   rÇ   r   r   )r   r   rF   r!   rH   )rY   rK   )r)   r§   rª   r«   r   r&   )r   Úbounds_listrY   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 rt   r   rr   r   r   r   ru   ¯  r¶   z)TestSLSQP.test_bounds_clipping.<locals>.fé
   Úslsqpr­   ©rK   rY   r   ç»½×Ùß|Û=rn   éöÿÿÿ)r"   Nr"   ç      à¿)r8   r   ©r   r   rM   r   r   )r   ru   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   rr   r   r   r   ru   Ì  s   z,TestSLSQP.test_infeasible_initial.<locals>.frl   c                 S   ó   d|  S r­   r   rr   r   r   r   r›   Ð  rœ   z3TestSLSQP.test_infeasible_initial.<locals>.<lambda>r¹   c                 S   s   | d S r˜   r   rr   r   r   r   r›   Ñ  rœ   c                 S   rÒ   r­   r   rr   r   r   r   r›   Ò  rœ   c                 S   s   | d S ©Nr   r   rr   r   r   r   r›   Ó  rœ   rÊ   rË   )rK   r`   r   rÍ   rn   rÎ   r"   rÏ   rÐ   )r   ru   Úcons_uÚcons_lÚcons_ulr½   r   r   r   Útest_infeasible_initialÊ  s0   ÿ





z!TestSLSQP.test_infeasible_initialÚdicts)ÚmodeÚ	CompilersÚfortranÚnamez
intel-llvmz7Runtime warning due to floating point issues, not logic)Úreasonc                 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 )Nr8   r   r(   r   r   rr   r   r   r   Úcostó  r1   z6TestSLSQP.test_inconsistent_inequalities.<locals>.costc                 S   s   | d | d  d S )Nr   r   r   rr   r   r   r   Ú	ineqcons1ö  r³   z;TestSLSQP.test_inconsistent_inequalities.<locals>.ineqcons1c                 S   s   | d | d  S rž   r   rr   r   r   r   Ú	ineqcons2ù  r¶   z;TestSLSQP.test_inconsistent_inequalities.<locals>.ineqcons2)r   é   )©éûÿÿÿrá   râ   rl   r¹   rH   rv   )Údictr   r   rM   )r   rÞ   rß   rà   rx   rY   ÚconsrQ   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   r·   r´   r   rr   r   r   r   ru   	  r1   z)TestSLSQP.test_new_bounds_type.<locals>.fr   r   rË   rÌ   )r	   r)   r§   r   r   rM   r   r   )r   ru   rY   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(   rH   rÄ   r   r"   )rè   Ú	Exceptionr   ÚF_innerr   rM   r   r   )r   r   Ú	inner_resr   r   r   ÚF_outer  s   

$zATestSLSQP.test_nested_minimization.<locals>.NestedProblem.F_outerc                 S   s    |d d d |d d d  S rt   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á   rH   rÄ   rÃ   )r   rì   r   rM   r   r   )r   Ú	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s<J ‚d S )Nc                 S   s   t  | d ¡S rÓ   )r)   Úsqrtrr   r   r   r   r&   /  r    z"TestSLSQP.test_gh1758.<locals>.func                 S   s   | d d| d  d  S )r2   r   r"   r   r’   r   rr   r   r   r   r5   2  r6   z&TestSLSQP.test_gh1758.<locals>.f_eqconc                 S   s   | d | d  d d  S )r2   r   r   r’   r   rr   r   r   r   Úf_eqcon26  s   z'TestSLSQP.test_gh1758.<locals>.f_eqcon2r]   r¹   é   g      Ð?rH   )rÏ   r   )r   rô   )rK   r`   rY   g8r]õ(ká?gÚÁQUUÕ?gc@›Á„öÒ?)r   r)   Útestingr   r&   r   rM   )r   r&   r5   ró   Úc1Úc2rQ   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r0J ‚d S )NrÊ   rl   c                 S   s   | d  | d  d S )Nr   r   r’   r   rr   r   r   r   r›   F  s    z'TestSLSQP.test_gh9640.<locals>.<lambda>r¹   c                 S   r¿   )Nr   r"   r   rr   r   r   r   r›   G  rÀ   )©r'   r"   rù   rù   c                 S   s   dS rÓ   r   rr   r   r   r   ÚtargetJ  s   z%TestSLSQP.test_gh9640.<locals>.target)g ãö51þ¿gäÐ£X«{ä¿g ¢¼ŽP(ê¿rH   Fi'  )r   Úmaxiter)rK   rY   r`   rL   )r)   ÚrandomÚseedr   rM   )r   rå   Úbndsrú   rx   rQ   r   r   r   Útest_gh9640D  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sEJ ‚W d   ƒ d S 1 sPw   Y  d S )
Nr   gš™™™™™¹?r!   c                    s   | ˆ j k ¡ s	J ‚tj | ¡S r/   )ÚlbÚallr)   ÚlinalgÚnormrr   ©rY   r   r   ru   _  s   z7TestSLSQP.test_parameters_stay_within_bounds.<locals>.fzx were outside bounds)ÚmatchrH   rÌ   )r)   rü   rý   r	   r*   Úlenr   ÚubÚpytestÚwarnsÚRuntimeWarningr   rM   )r   Ún_inputsrx   ru   rQ   r   r  r   Ú"test_parameters_stay_within_boundsS  s   

ÿ"þz,TestSLSQP.test_parameters_stay_within_boundsN)r!   );r   r   r   r   r   r&   r.   r0   r5   r9   r;   r=   r>   r?   rA   rD   rR   rT   r[   r\   ra   rc   ri   rk   rp   rq   rz   r   r‡   r‰   r‹   rŒ   r�   r•   r–   r¡   r¥   r¨   r¬   r®   r±   r¾   rÁ   rÅ   rÉ   rÑ   r×   r  ÚmarkÚxfailÚscipyÚshow_configræ   rç   rñ   rø   rÿ   Úthread_unsafer  r   r   r   r   r      sr    










		

		#ÿþ
r   )r   Únumpy.testingr   r   r   r   r  r   rª   Únumpyr)   r  Úscipy.optimizer   r   r	   r
   r   r   r   r   r   r   Ú<module>   s    