
    tKgZ                     |    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      Z G d d	      Zy)
z#
Unit test for SLSQP optimization.
    )assert_assert_array_almost_equalassert_allcloseassert_equal)raisesN)
fmin_slsqpminimizeBoundsNonlinearConstraintc                       e Zd ZdZd Zd Zy)
MyCallBackzJpass a custom callback function

    This makes sure it's being used.
    c                      d| _         d| _        y )NFr   been_calledncallsselfs    c/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/optimize/tests/test_slsqp.py__init__zMyCallBack.__init__   s         c                 <    d| _         | xj                  dz  c_        y )NT   r   r   xs     r   __call__zMyCallBack.__call__   s    qr   N)__name__
__module____qualname____doc__r   r    r   r   r   r      s    r   r   c                   H   e Zd ZdZd Zd4dZd4dZd4dZd4dZd4dZ	d4dZ
d4d	Zd4d
Zd4dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4y3)5	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                     ddi| _         y )NdispF)optsr   s    r   setup_methodzTestSLSQP.setup_method"   s    UO	r   c                 V    |d   }|d   }|d|z  |z  d|z  z   |dz  z
  d|dz  z  z
  z  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   ys        r   funzTestSLSQP.fun%   sG     aDaDQqSUQqS[1a4'!AqD&011r   c                     |d   }|d   }|d|z  d|z  z   dz   z  }|d|z  d|z  z
  z  }t        j                  ||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dfdys          r   jaczTestSLSQP.jac5   s[     aDaDRTAaCZ!^$QqS1Q3Yxxte,,r   c                 J    | j                  ||      | j                  ||      fS N)r,   r5   )r   r)   r*   s      r   fun_and_jaczTestSLSQP.fun_and_jacA   s#    xx4 $((1d"333r   c                 @    t        j                  |d   |d   z
  g      S ) Equality constraint r   r   r0   r1   r   r   r*   s      r   f_eqconzTestSLSQP.f_eqconD   s    xx1!&&r   c                 2    t        j                  ddgg      S )z! Equality constraint, derivative r   r;   r<   s      r   fprime_eqconzTestSLSQP.fprime_eqconH       xx!R	""r   c                 ,    | j                  ||      d   S )z Scalar equality constraint r   )r=   r<   s      r   f_eqcon_scalarzTestSLSQP.f_eqcon_scalarL   s    ||At$Q''r   c                 H    | j                  ||      d   j                         S )z( Scalar equality constraint, derivative r   )r@   tolistr<   s      r   fprime_eqcon_scalarzTestSLSQP.fprime_eqcon_scalarP   s#      D)!,3355r   c                 F    t        j                  |d   |d   z
  dz
  g      S )z Inequality constraint r   r         ?r;   r<   s      r   f_ieqconzTestSLSQP.f_ieqconT   s%    xx1!s*+,,r   c                 2    t        j                  ddgg      S )z# Inequality constraint, derivative r   r?   r;   r<   s      r   fprime_ieqconzTestSLSQP.fprime_ieqconX   rA   r   c                 ,    t        j                  |      S )z Vector inequality constraint )r0   asarrayr   s     r   	f_ieqcon2zTestSLSQP.f_ieqcon2\   s    zz!}r   c                 F    t        j                  |j                  d         S )z* Vector inequality constraint, derivative r   )r0   identityshaper   s     r   fprime_ieqcon2zTestSLSQP.fprime_ieqcon2`   s    {{1771:&&r   c           	          g d}|D ]S  }t        | j                  ddgd|d| j                        }t        |d   |d          t	        |j
                  d	d
g       U y )NNFz2-pointz3-point      rH   rU   SLSQPargsr5   methodoptionssuccessmessager(   r   )r	   r,   r%   r   r   r   r   jacsr5   ress       r   $test_minimize_unbounded_approximatedz.TestSLSQP.test_minimize_unbounded_approximatede   s[    2C488dC[x"7#'99.C C	NC	N3CEEAq6* r   c                     t        | j                  ddgd| j                  d| j                        }t	        |d   |d          t        |j                  dd	g       y )
NrU   rH   rV   rW   rX   r\   r]   r(   r   )r	   r,   r5   r%   r   r   r   r   r`   s     r   test_minimize_unbounded_givenz'TestSLSQP.test_minimize_unbounded_giveno   sN    txx$888GTYYHII/1v&r   c                    g d}|D ]  }t        j                  d      5  t        | j                  ddgd|dd| j                  	      }d d d        t        d
   |d          t        |j                  ddg       t        d|j                  d   k         t        |j                  d   dk          y # 1 sw Y   lxY w)NrT   ignore)invalidrU   rH   rV   ))      @N)N      ?rW   )rY   r5   boundsrZ   r[   r\   r]   rh   ri   r   r   )r0   errstater	   r,   r%   r   r   r   r^   s       r   "test_minimize_bounded_approximatedz,TestSLSQP.test_minimize_bounded_approximatedv   s    2CX.txx$8#&&@&-tyyB /
 C	NC	N3CEEC:.C3558O$CEE!HO$ ..s   )B44B=	c                     t        | j                  ddgddd| j                        }t        |d   |d          t	        |j
                  d	d
g       y )NrU   rH   rV   TrW   rX   r\   r]   r(   r   )r	   r8   r%   r   r   r   rc   s     r    test_minimize_unbounded_combinedz*TestSLSQP.test_minimize_unbounded_combined   sL    t''$8DII/1v&r   c                     g d}|D ]b  }t        | j                  ddgd|d| j                  ddd| j                        }t	        |d	   |d
          t        |j                  ddg       d y )NrT   rU   rH   rV   eqtyper,   rY   rW   )rY   r5   constraintsrZ   r[   r\   r]   r   )r	   r,   r=   r%   r   r   r   r^   s       r   #test_minimize_equality_approximatedz-TestSLSQP.test_minimize_equality_approximated   so    2C488dC[x"04/3||08(: #*499>C C	NC	N3CEEAq6* r   c                     t        | j                  ddg| j                  ddd| j                  dd| j                        }t        |d   |d	          t        |j                  d
d
g       y )NrU   rH   rW   rV   rp   rq   r5   rZ   rY   rs   r[   r\   r]   r   )r	   r,   r5   r=   r%   r   r   r   rc   s     r   test_minimize_equality_givenz&TestSLSQP.test_minimize_equality_given   sa    txx$$((%G,0,4$6#yy	*
 	II/1v&r   c                     t        | j                  ddgd| j                  dd| j                  d| j                  d| j
                        }t        |d   |d	          t        |j                  d
d
g       y NrU   rH   rW   rV   rp   rr   r,   rY   r5   rZ   r5   rY   rs   r[   r\   r]   r   	r	   r,   r5   r=   r@   r%   r   r   r   rc   s     r   test_minimize_equality_given2z'TestSLSQP.test_minimize_equality_given2   so     txx$W88',0+/<<,4+/+<+<$>  $yy* 	II/1v&r   c                     t        | j                  ddgd| j                  dd| j                  d| j                  d| j
                        }t        |d   |d	          t        |j                  d
d
g       y ry   )	r	   r,   r5   rC   rF   r%   r   r   r   rc   s     r   (test_minimize_equality_given_cons_scalarz2TestSLSQP.test_minimize_equality_given_cons_scalar   sr     txx$W88',0+/+>+>,4+/+C+C$E  $yy* 	II/1v&r   c                     t        | j                  ddgd| j                  dd| j                  dd| j                        }t        |d   |d	          t        |j                  d
dgd       y )NrU   rH   rW   rV   ineqrq   r{   r\   r]   r(   r   MbP?atol)r	   r,   r5   rI   r%   r   r   r   rc   s     r   test_minimize_inequality_givenz(TestSLSQP.test_minimize_inequality_given   sf    txx$W88(,2+/==,4$6  $yy* 	II/1vD1r   c                     t        | j                  ddg| j                  ddd| j                  | j                  d| j
                        }t        |d   |d	          t        |j                  d
dg       y )NrU   rH   rW   rV   r   )rr   r,   r5   rv   r\   r]   r(   r   )	r	   r,   r5   rN   rR   r%   r   r   r   rc   s     r   1test_minimize_inequality_given_vector_constraintsz;TestSLSQP.test_minimize_inequality_given_vector_constraints   sm     txx$$((%G,2+/>>+/+>+>$@  $yy* 	II/1v&r   c                     d }d }t        |dd      g}t        j                  ddg      }t        ddgddg      }t	        ||d	||
       y )Nc                     d| d   cxk  rdk  rn J |        d| d   cxk  rdk  sJ |         J |        | d   dz  | d   z   S )Nr   r   ri   r    r   s    r   cz5TestSLSQP.test_minimize_bounded_constraint.<locals>.c   sY    !>>7a74a1Q4n1n7a74n7a74Q43;1%%r   c                     d| d   cxk  rdk  rn J |        d| d   cxk  rdk  sJ |         J |        | d   dz   | d   dz  z   S Nr   r   r(   r    r   s    r   fz5TestSLSQP.test_minimize_bounded_constraint.<locals>.f   s_    !>>7a74a1Q4n1n7a74n7a74aDAI:!	))r   r   g      ?g?ri   g        rH   rW   rZ   rj   rs   )r   r0   rM   r
   r	   )r   r   r   cnsx0bnds         r    test_minimize_bounded_constraintz*TestSLSQP.test_minimize_bounded_constraint   sU    
	&	* #1a-.ZZc
#b"XSz*BwsDr   c                    t        | j                  ddgd| j                  dddgd| j                  d| j                  d| j
                  	      }t        |d
   |d          t        |j                  ddgd       t        d|j                  d   cxk  xr dk  nc        t        d|j                  d   cxk  xr
 dk         y c        y )NrU   rH   rW   rV   皙rH   r?   皙?rp   rz   )rZ   r5   rY   rj   rs   r[   r\   r]   r   r   r   r   r   r   r?   r|   rc   s     r   #test_minimize_bound_equality_given2z-TestSLSQP.test_minimize_bound_equality_given2   s     txx$W88()95,0+/<<,4+/+<+<$>  $yy* 	II/Sz5a%A%&ceeAh%#%&%&r   c                     t        | j                  ddgddd      }|\  }}}}}t        |dk(  |       t        |ddg       y )NrU   rH   rV   r   r   )rY   iprintfull_outputr(   )r   r,   r   r   r   r`   r   fxitsimodesmodes          r   test_unbounded_approximatedz%TestSLSQP.test_unbounded_approximated   sK    D#;X"#16#& 2sE5
E"!!aV,r   c                     t        | j                  ddgd| j                  dd      }|\  }}}}}t        |dk(  |       t	        |ddg       y )NrU   rH   rV   r   r   )rY   fprimer   r   r(   )r   r,   r5   r   r   r   s          r   test_unbounded_givenzTestSLSQP.test_unbounded_given   sT    D#;X"&((Q'(* $' 2sE5
E"!!aV,r   c                     t        | j                  ddgd| j                  gdd      }|\  }}}}}t        |dk(  |       t	        |ddg       y )NrU   rH   rV   r   r   )rY   eqconsr   r   )r   r,   r=   r   r   r   s          r   test_equality_approximatedz$TestSLSQP.test_equality_approximated  sV    4*7#'<<."#16 $' 2sE5
E"!!aV,r   c           	          t        | j                  ddg| j                  d| j                  gdd      }|\  }}}}}t	        |dk(  |       t        |ddg       y )NrU   rH   rV   r   r   )r   rY   r   r   r   )r   r,   r5   r=   r   r   r   s          r   test_equality_givenzTestSLSQP.test_equality_given  s]    D#; $w#'<<.1'(* $' 2sE5
E"!!aV,r   c           
          t        | j                  ddg| j                  d| j                  | j                  dd      }|\  }}}}}t        |dk(  |       t        |ddg       y )NrU   rH   rV   r   r   )r   rY   f_eqconsfprime_eqconsr   r   r   r,   r5   r=   r@   r   r   r   s          r   test_equality_given2zTestSLSQP.test_equality_given2  se    D#; $w$(LL)-):):"#'(* $' 2sE5
E"!!aV,r   c           	          t        | j                  ddg| j                  d| j                  gdd      }|\  }}}}}t	        |dk(  |       t        |ddgd	       y )
NrU   rH   rV   r   r   )r   rY   ieqconsr   r   r(      decimal)r   r,   r5   rI   r   r   r   s          r   test_inequality_givenzTestSLSQP.test_inequality_given&  s_    D#; $x$(MM?"#16 $' 2sE5
E"!!aVQ7r   c                 L   t        | j                  ddg| j                  dddg| j                  | j                  dd	      }|\  }}}}}t        |dk(  |       t        |d	d	gd
       t        d|d   cxk  xr dk  nc        t        d|d   cxk  xr
 d	k         y c        y )NrU   rH   rV   r   r   r   r   )r   rY   rj   r   r   r   r   r   r   r   r   r?   r   r   s          r   test_bound_equality_given2z$TestSLSQP.test_bound_equality_given20  s    D#; $x#-y"9$(LL)-):):"#16 $' 2sE5
E"!!c3Z;!!!"ad!c!"!"r   c                     t        d dgd gd      }t        |dg       t        d dgd d	      }t        |dg       y )
Nc                     | dz  S Nr(   r    zs    r   <lambda>z3TestSLSQP.test_scalar_constraints.<locals>.<lambda>@      Ar   g      @c                     | d   dz
  S Nr   r   r    r   s    r   r   z3TestSLSQP.test_scalar_constraints.<locals>.<lambda>A  s    !A$(r   r   )r   r   rH   c                     | dz  S r   r    r   s    r   r   z3TestSLSQP.test_scalar_constraints.<locals>.<lambda>E  r   r   c                     | d   dz
  gS r   r    r   s    r   r   z3TestSLSQP.test_scalar_constraints.<locals>.<lambda>F  s    AaD1H:r   )	f_ieqconsr   )r   r   r   s     r   test_scalar_constraintsz!TestSLSQP.test_scalar_constraints>  sM    ~t 23! 	"!bT*~t!5! 	"!bT*r   c                 ,    t        d dgddggd       y )Nc                     | dz  dz
  S Nr(   r   r    r   s    r   r   z/TestSLSQP.test_integer_bounds.<locals>.<lambda>L  s    QTAXr   r   r   rj   r   r   r   s    r   test_integer_boundszTestSLSQP.test_integer_boundsJ  s    %sQF8AFr   c                     t         j                   t         j                  ft        j                  dg      t        j                  dg      fg}t        d ddg|d      }t	        |ddg       y )Nr(   r   c                 8    t        j                  | dz  dz
        S r   )r0   sumr   s    r   r   z-TestSLSQP.test_array_bounds.<locals>.<lambda>S  s    1q!1r   rh   r   r   )r0   infr1   r   r   )r   rj   r   s      r   test_array_boundszTestSLSQP.test_array_boundsN  s\     FF7BFF#bhhsmRXXqc]%CD1C:f!!!aV,r   c                 j    t        t              5  t        d g d       d d d        y # 1 sw Y   y xY w)Nc                 
    ddgS r   r    r   s    r   r   z7TestSLSQP.test_obj_must_return_scalar.<locals>.<lambda>[  s    !Qr   r   r(   r   )assert_raises
ValueErrorr   r   s    r   test_obj_must_return_scalarz%TestSLSQP.test_obj_must_return_scalarW  s#     :&'3 '&&s   )2c                 &    t        d g dd       y )Nc                     dgS Nr   r    r   s    r   r   z;TestSLSQP.test_obj_returns_scalar_in_list.<locals>.<lambda>a  s    aSr   r   r   )r   r   r   s    r   test_obj_returns_scalar_in_listz)TestSLSQP.test_obj_returns_scalar_in_list]  s     	=)A6r   c                     t               }t        | j                  ddgdd|| j                        }t	        |d   |d          t	        |j
                         t        |j                  |d          y )	NrU   rH   rV   rW   )rY   rZ   callbackr[   r\   r]   nit)r   r	   r,   r%   r   r   r   r   )r   r   r`   s      r   test_callbackzTestSLSQP.test_callbackc  s_    <txx$8%$))MII/$$%X__c%j1r   c                     ddg}d }d }t        d |d|dd|dfd	d
      }|j                  }t         ||      dd       t         ||      dk\         t        |j                  |       y )Nr   r   c                     | d   | d   z   dz
  S r   r    r   s    r   f1z5TestSLSQP.test_inconsistent_linearization.<locals>.f1w      Q4!A$;?"r   c                     | d   dz  dz
  S Nr   r(   r   r    r   s    r   f2z5TestSLSQP.test_inconsistent_linearization.<locals>.f2y  s    Q419q= r   c                 $    | d   dz  | d   dz  z   S r   r    r   s    r   r   z;TestSLSQP.test_inconsistent_linearization.<locals>.<lambda>|      adAg!a'r   rp   rr   r,   r   r   Nr   rW   rs   rj   rZ   g:0yE>r   g:0yE)r	   r   r   r   r\   )r   r   r   r   sols        r   test_inconsistent_linearizationz)TestSLSQP.test_inconsistent_linearizationl  s{     F	#	!'!%R0!'r24' EE1qt,1S!r   c                 p    ddg}t        d |dd ddd dfd	d
      }t        |j                   |       y )Nr   r(   c                 $    | d   dz  | d   dz  z   S r   r    r   s    r   r   z0TestSLSQP.test_regression_5743.<locals>.<lambda>  r   r   rp   c                     | d   | d   z   dz
  S r   r    r   s    r   r   z0TestSLSQP.test_regression_5743.<locals>.<lambda>  s    qtAaDy{r   r   r   c                     | d   dz
  S )Nr   r(   r    r   s    r   r   z0TestSLSQP.test_regression_5743.<locals>.<lambda>  s    1ar   r   rW   r   )r	   r   r\   )r   r   r   s      r   test_regression_5743zTestSLSQP.test_regression_5743  sM     F'!%-BC!'/?@B' 	CKK%r   c                 n    d }t        |g dd      }t        |j                  j                  dk(         y )Nc                 T    | d   dz
  dz  d| d   dz
  dz  z  z   d| d   dz
  dz  z  z   S )Nr   r   r(   ri   r    r   s    r   funcz$TestSLSQP.test_gh_6676.<locals>.func  s?    aD1Hq=1adQh]?2S!A$(Q5FFFr   r   r   r   rW   rZ   )r   )r	   r   r5   rQ   )r   r   r   s      r   test_gh_6676zTestSLSQP.test_gh_6676  s-    	G tYw7%&r   c                    dddt         j                  dft         j                  dffdt         j                   fdfg}|D ]5  }t        t              5  t	        | j
                  ddg|d	
       d d d        7 y # 1 sw Y   BxY w)N)r   r(   r(   r   )r   r   )r   r   r   r   )r   r   rU   rH   rW   )rj   rZ   )r0   r   r   r   r	   r,   )r   bounds_listrj   s      r   test_invalid_boundszTestSLSQP.test_invalid_bounds  sw     ffa[2661+&"&&\6"
 "Fz*D#;vgN +* "**s   A88B	c                    d }t        |dgddg      }t        |j                         t        |j                  dd       t        |d	gdd
g      }t        |j                         t        |j                  dd       t        |d	gddg      }t        |j                         t        |j                  dd       t        |dgdd
g      }t        |j                         t        |j                  dd       t        |dgddg      }t        |j                         t        |j                  dd       t        |dgddg      }t        |j                         t        |j                  dd       y )Nc                     | d   dz
  dz  S r   r    r   s    r   r   z)TestSLSQP.test_bounds_clipping.<locals>.f  s    aD1Hq= r   
   slsqpr   rZ   rj   r   绽|=r   )r(   Nr(         )r?   r   r	   r   r\   r   r   )r   r   r   s      r   test_bounds_clippingzTestSLSQP.test_bounds_clipping  s)   	! q2$w	{Cqu-q3%Dqu-q3%Dqu-q2$w	{Cqu-q4&'Cqu-q2$wyAqu-r   c                    d }dd dg}dd dg}dd ddd dg}t        |dgd	|
      }t        |j                         t        |j                  dd       t        |dgd	|
      }t        |j                         t        |j                  dd       t        |dgd	|
      }t        |j                         t        |j                  dd       t        |dgd	|
      }t        |j                         t        |j                  dd       t        |dgd	|
      }t        |j                         t        |j                  dd       t        |dgd	|
      }t        |j                         t        |j                  dd       y )Nc                 &    | \  } | | z  d| z  z
  dz   S r   r    r   s    r   r   z,TestSLSQP.test_infeasible_initial.<locals>.f  s    BAQ319q= r   r   c                     d| z
  S r   r    r   s    r   r   z3TestSLSQP.test_infeasible_initial.<locals>.<lambda>      AEr   r   c                     | dz
  S r   r    r   s    r   r   z3TestSLSQP.test_infeasible_initial.<locals>.<lambda>  r
  r   c                     d| z
  S r   r    r   s    r   r   z3TestSLSQP.test_infeasible_initial.<locals>.<lambda>      QUr   c                     | dz   S Nr   r    r   s    r   r   z3TestSLSQP.test_infeasible_initial.<locals>.<lambda>  r  r   r   r   )rZ   rs   r   r  r   r  r(   r  r  )r   r   cons_ucons_lcons_ulr   s         r   test_infeasible_initialz!TestSLSQP.test_infeasible_initial  sP   	! "/:;!/:;"?;"?;= q2$wFCqu-q3%VDqu-q3%VDqu-q2$wFCqu-q4&gFqu-q2$wGDqu-r   c                     d }d }d }d}d}t        d|      t        d|      f}t        ||d||	      }t        |j                          y )
Nc                 $    d| d   z  d| d   z  z   S )Nr?   r   r/   r   r    r   s    r   costz6TestSLSQP.test_inconsistent_inequalities.<locals>.cost  s    !9q1Q4x''r   c                     | d   | d   z
  dz
  S )Nr   r   r    r   s    r   	ineqcons1z;TestSLSQP.test_inconsistent_inequalities.<locals>.ineqcons1  r   r   c                     | d   | d   z
  S r   r    r   s    r   	ineqcons2z;TestSLSQP.test_inconsistent_inequalities.<locals>.ineqcons2  s    Q4!A$;r   )r      )r  r  r   r   rW   r   )dictr	   r   r\   )r   r  r  r  r   rj   consr`   s           r   test_inconsistent_inequalitiesz(TestSLSQP.test_inconsistent_inequalities  sU    	(	#	 #&i0$F	2RStRDQCKK r   c                     d }t        ddgt        j                  t        j                  g      }t        |ddgd|      }t	        |j
                         t        |j                  ddg       y )Nc                 $    | d   dz  | d   dz  z   S r   r    r   s    r   r   z)TestSLSQP.test_new_bounds_type.<locals>.f  s    Q419qtqy((r   r   r   r   r  )r
   r0   r   r	   r   r\   r   r   )r   r   rj   r   s       r   test_new_bounds_typezTestSLSQP.test_new_bounds_type  sV    	)A 01q1a&@1v&r   c                 F     G d d      } |       }|j                          y )Nc                   $    e Zd Zd Zd Zd Zd Zy)9TestSLSQP.test_nested_minimization.<locals>.NestedProblemc                     d| _         y r   )F_outer_countr   s    r   r   zBTestSLSQP.test_nested_minimization.<locals>.NestedProblem.__init__  s
    %&"r   c                    | xj                   dz  c_         | j                   dkD  rt        d      t        | j                  dd      }t	        |j
                         t        |j                  ddg       |d   dz  |d   dz  z   |d   dz  z   S )	Nr   i  z(Nested minimization failed to terminate.)r   r/   rW   r   r   r(   )r(  	Exceptionr	   F_innerr   r\   r   r   )r   r   	inner_ress      r   F_outerzATestSLSQP.test_nested_minimization.<locals>.NestedProblem.F_outer  s    ""a'"%%,#$NOO$T\\6'J		))*	aV4tQw1q(1Q4722r   c                 0    |d   dz
  dz  |d   dz
  dz  z   S r   r    r   s     r   r+  zATestSLSQP.test_nested_minimization.<locals>.NestedProblem.F_inner  s%    !q1}!q1}44r   c                     t        | j                  dd      }t        |j                         t	        |j
                  g d       y )N)r  r  r  rW   r   r   )r	   r-  r   r\   r   r   )r   	outer_ress     r   solvez?TestSLSQP.test_nested_minimization.<locals>.NestedProblem.solve  s0    $T\\9WM		))*	Y7r   N)r   r   r   r   r-  r+  r1  r    r   r   NestedProblemr&    s    '358r   r2  )r1  )r   r2  problems      r   test_nested_minimizationz"TestSLSQP.test_nested_minimization  s    	8 	8,  /r   c                    d }d }d }d|d}d|d}t        |ddgd||gd	d
g      }t        j                  j                  |j                  d       t        j                  j                  |j
                  ddg       |j                  sJ y )Nc                 2    t        j                  | d         S r  )r0   sqrtr   s    r   r,   z"TestSLSQP.test_gh1758.<locals>.fun+  s    771Q4= r   c                 $    | d   d| d   z  dz  z
  S )r:   r   r(   r   r   r    r   s    r   r=   z&TestSLSQP.test_gh1758.<locals>.f_eqcon.  s    Q41qt8/))r   c                 &    | d   | d    dz   dz  z
  S )r:   r   r   r   r    r   s    r   f_eqcon2z'TestSLSQP.test_gh1758.<locals>.f_eqcon22  s     Q4AaD519***r   rp   r      g      ?rW   )r  r   )r   r;  )rZ   rs   rj   g8r](k?gQUU?gc@?)r	   r0   testingr   r,   r   r\   )r   r,   r=   r:  c1c2r`   s          r   test_gh1758zTestSLSQP.test_gh1758'  s    	!	*	+ 7+8,sQIg$&8Y4GI 	

""377O<


""355:y*AB{{{r   c           
          t         j                  j                  d       dd ddd df}d}d }g d}t        ||d	||d
dd      }|j                  rJ y )Nr   r   c                      | d    | d   z
  dz
  S )Nr   r   r   r    r   s    r   r   z'TestSLSQP.test_gh9640.<locals>.<lambda>B  s    1Q4%!A$,2Br   r   c                     | d   | d   z   dz
  S )Nr   r(   r    r   s    r   r   z'TestSLSQP.test_gh9640.<locals>.<lambda>C  s    !A$1+/r   )r.   r(   rC  rC  c                      yr  r    r   s    r   targetz%TestSLSQP.test_gh9640.<locals>.targetF  s    r   )g51gУX{gP(rW   Fi'  )r$   maxiter)rZ   rj   rs   r[   )r0   randomseedr	   r\   )r   r  bndsrE  r   r`   s         r   test_gh9640zTestSLSQP.test_gh9640@  sh    
		r(BC(ABD*	Kvr'$D',>@ ;;;r   c                 .   t         j                  j                  d       t        t        j                  dg      t        j                  dg            t        j                        }t        j                  j                  j                  j                  z
  t         j                  j                  |      z  z         }fd}t        j                  t        d      5  t        ||d      }|j                  sJ 	 d d d        y # 1 sw Y   y xY w)	Nr   g?rH   c                     | j                   k\  j                         sJ t        j                  j	                  |       S r7   )lballr0   linalgnorm)r   rj   s    r   r   z7TestSLSQP.test_parameters_stay_within_bounds.<locals>.fZ  s0    N'')))99>>!$$r   zx were outside bounds)matchrW   r  )r0   rG  rH  r
   r1   lenrM  ubpytestwarnsRuntimeWarningr	   r\   )r   n_inputsr   r   r`   rj   s        @r   "test_parameters_stay_within_boundsz,TestSLSQP.test_parameters_stay_within_boundsO  s    
 			q#3%9vyy>XXfii699vyy#8ii&&x0#1 1 2	% \\.0GH1b@C;;; IHHs   #DDN)rH   )5r   r   r   r   r&   r,   r5   r8   r=   r@   rC   rF   rI   rK   rN   rR   ra   rd   rl   rn   rt   rw   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#  r4  r?  rJ  rX  r    r   r   r"   r"      s    $2 
-4'#(6-#'
+'%'+'''	2
'E$'"----
-8#
+G-472"8&'O.>!.F!0'62r   r"   )r   numpy.testingr   r   r   r   rT  r   r   numpyr0   scipy.optimizer   r	   r
   r   r   r"   r    r   r   <module>r\     s9   : : *   L L E	 E	r   