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

    This makes sure it's being used.
    c                 "    d| _         d| _        d S )NFr   )been_calledncallsselfs    e/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_slsqp.py__init__zMyCallBack.__init__   s         c                 b    t          |t                    rJ d| _        | xj        dz  c_        d S NT   
isinstancer   r   r   r   xs     r   __call__zMyCallBack.__call__   s4    a00000qr   c                 b    t          |t                    sJ d| _        | xj        dz  c_        d S r   r   r   intermediate_results     r   	callback2zMyCallBack.callback2   s5    -~>>>>>qr   c                 >    t          |t                    sJ t          N)r   r   StopIterationr    s     r   	callback3zMyCallBack.callback3"   s    -~>>>>>r   N)__name__
__module____qualname____doc__r   r   r"   r&    r   r   r   r      sZ             
  
    r   r   c                      e Zd ZdZ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 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.e/j0        1                     e2j3        d./          d0         d1         d2         d3k    d45          d6             Z4d7 Z5d8 Z6d9 Z7d: Z8d; Z9d<S )>	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| _         d S )NdispF)optsr   s    r   setup_methodzTestSLSQP.setup_method.   s    UO			r         ?c                 b    |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.fun1   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   r4      )nparrayfloat)r   r5   r6   r   r7   dfdxdfdys          r   jaczTestSLSQP.jacA   s\     aDaDRTAaCZ!^$QqS1Q3Yxte,,,r   c                 Z    |                      ||          |                     ||          fS r$   )r8   rA   )r   r5   r6   s      r   fun_and_jaczTestSLSQP.fun_and_jacM   s)    xx4  $((1d"3"333r   c                 J    t          j        |d         |d         z
  g          S ) Equality constraint r   r   r<   r=   r   r   r6   s      r   f_eqconzTestSLSQP.f_eqconP   s     x1!&&&r   c                 0    t          j        ddgg          S )z! Equality constraint, derivative r   rF   rG   s      r   fprime_eqconzTestSLSQP.fprime_eqconT       x!R	"""r   c                 :    |                      ||          d         S )z Scalar equality constraint r   )rH   rG   s      r   f_eqcon_scalarzTestSLSQP.f_eqcon_scalarX   s    ||At$$Q''r   c                 ^    |                      ||          d                                         S )z( Scalar equality constraint, derivative r   )rK   tolistrG   s      r   fprime_eqcon_scalarzTestSLSQP.fprime_eqcon_scalar\   s)      D))!,33555r   c                 P    t          j        |d         |d         z
  dz
  g          S )z Inequality constraint r   r   r2   rF   rG   s      r   f_ieqconzTestSLSQP.f_ieqcon`   s&    x1!s*+,,,r   c                 0    t          j        ddgg          S )z# Inequality constraint, derivative r   rJ   rF   rG   s      r   fprime_ieqconzTestSLSQP.fprime_ieqcond   rL   r   c                 *    t          j        |          S )z Vector inequality constraint )r<   asarrayr   s     r   	f_ieqcon2zTestSLSQP.f_ieqcon2h   s    z!}}r   c                 @    t          j        |j        d                   S )z* Vector inequality constraint, derivative r   )r<   identityshaper   s     r   fprime_ieqcon2zTestSLSQP.fprime_ieqcon2l   s    {171:&&&r   c           	          g d}|D ]V}t          | j        ddgd|d| j                  }t          |d         |d                    t	          |j        d	d
g           Wd S )NNFz2-pointz3-point      r2   r_   SLSQPargsrA   methodoptionssuccessmessager4   r   )r	   r8   r0   r   r   r   r   jacsrA   ress       r   $test_minimize_unbounded_approximatedz.TestSLSQP.test_minimize_unbounded_approximatedq   s    222 	+ 	+C48dC[x"7#'9. . .C C	NC	N333CEAq6****	+ 	+r   c                     t          | j        ddgd| j        d| j                  }t	          |d         |d                    t          |j        dd	g           d S )
Nr_   r2   r`   ra   rb   rf   rg   r4   r   )r	   r8   rA   r0   r   r   r   r   rj   s     r   test_minimize_unbounded_givenz'TestSLSQP.test_minimize_unbounded_given{   sd    tx$88GTYH H 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            n# 1 swxY w Y   t          |d
         |d                    t          |j        ddg           t          d|j        d         k               t          |j        d         dk               d S )Nr^   ignore)invalidr_   r2   r`   ))      @N)N      ?ra   )rc   rA   boundsrd   re   rf   rg   rr   rs   r   r   )r<   errstater	   r8   r0   r   r   r   rh   s       r   "test_minimize_bounded_approximatedz,TestSLSQP.test_minimize_bounded_approximated   s2   222 		% 		%CX... B Btx$8#&&@&-tyB B BB B B B B B B B B B B B B B B
 C	NC	N333CEC:...C358O$$$CE!HO$$$$		% 		%s   #AA	A	c                     t          | j        ddgddd| j                  }t          |d         |d                    t	          |j        d	d
g           d S )Nr_   r2   r`   Tra   rb   rf   rg   r4   r   )r	   rC   r0   r   r   r   rm   s     r    test_minimize_unbounded_combinedz*TestSLSQP.test_minimize_unbounded_combined   sc    t'$8D D DII///1v&&&&&r   c                     g d}|D ]`}t          | j        ddgd|d| j        ddd| j                  }t	          |d	         |d
                    t          |j        ddg           ad S )Nr^   r_   r2   r`   eqtyper8   rc   ra   )rc   rA   constraintsrd   re   rf   rg   r   )r	   r8   rH   r0   r   r   r   rh   s       r   #test_minimize_equality_approximatedz-TestSLSQP.test_minimize_equality_approximated   s    222 	+ 	+C48dC[x"04/3|08(: (: #*49> > >C C	NC	N333CEAq6****	+ 	+r   c                     t          | j        ddg| j        ddd| j        dd| j                  }t          |d         |d	                    t          |j        d
d
g           d S )Nr_   r2   ra   r`   rz   r{   rA   rd   rc   r}   re   rf   rg   r   )r	   r8   rA   rH   r0   r   r   r   rm   s     r   test_minimize_equality_givenz&TestSLSQP.test_minimize_equality_given   sx    tx$$(%G,0,4$6 $6#y	* * *
 	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           d S Nr_   r2   ra   r`   rz   r|   r8   rc   rA   rd   rA   rc   r}   re   rf   rg   r   	r	   r8   rA   rH   rK   r0   r   r   r   rm   s     r   test_minimize_equality_given2z'TestSLSQP.test_minimize_equality_given2   s     tx$W8',0+/<,4+/+<$> $>  $y* * * 	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           d S r   )	r	   r8   rA   rN   rQ   r0   r   r   r   rm   s     r   (test_minimize_equality_given_cons_scalarz2TestSLSQP.test_minimize_equality_given_cons_scalar   s     tx$W8',0+/+>,4+/+C$E $E  $y* * * 	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           d S )Nr_   r2   ra   r`   ineqr{   r   rf   rg   r4   r   MbP?atol)r	   r8   rA   rS   r0   r   r   r   rm   s     r   test_minimize_inequality_givenz(TestSLSQP.test_minimize_inequality_given   s    tx$W8(,2+/=,4$6 $6  $y* * * 	II///1vD111111r   c                     t          | j        ddg| j        ddd| j        | j        d| j                  }t          |d         |d	                    t          |j        d
dg           d S )Nr_   r2   ra   r`   r   )r|   r8   rA   r   rf   rg   r4   r   )	r	   r8   rA   rX   r\   r0   r   r   r   rm   s     r   1test_minimize_inequality_given_vector_constraintsz;TestSLSQP.test_minimize_inequality_given_vector_constraints   s     tx$$(%G,2+/>+/+>$@ $@  $y* * * 	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	||
           d S )Nc                     d| d         cxk    rdk    rn nd| d         cxk    rdk    sn J |             | d         dz  | d         z   S )Nr   r   rs   r+   r   s    r   cz5TestSLSQP.test_minimize_bounded_constraint.<locals>.c   sZ    !>>>>>>>>>a1Q4nnnn1nnnnnannnQ43;1%%r   c                     d| d         cxk    rdk    rn nd| d         cxk    rdk    sn J |             | d         dz   | d         dz  z   S Nr   r   r4   r+   r   s    r   fz5TestSLSQP.test_minimize_bounded_constraint.<locals>.f   s`    !>>>>>>>>>a1Q4nnnn1nnnnnannnaDAI:!	))r   r   g      ??rs   g        r2   ra   rd   rt   r}   )r   r<   rW   r
   r	   )r   r   r   cnsx0bnds         r    test_minimize_bounded_constraintz*TestSLSQP.test_minimize_bounded_constraint   s    
	& 	& 	&	* 	* 	* #1a--.Zc
##b"XSz**BwsDDDDD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    odk    nc            t          d|j        d         cxk    odk    nc            d S )Nr_   r2   ra   r`   皙r2   rJ   皙?rz   r   )rd   rA   rc   rt   r}   re   rf   rg   r   r   r   r   r   r   rJ   r   rm   s     r   #test_minimize_bound_equality_given2z-TestSLSQP.test_minimize_bound_equality_given2   s     tx$W8()95,0+/<,4+/+<$> $>  $y* * * 	II///Sz5555a%%%%A%%%%&&&ceAh%%%%#%%%%&&&&&r   c                     t          | j        ddgddd          }|\  }}}}}t          |dk    |           t          |ddg           d S )Nr_   r2   r`   r   r   )rc   iprintfull_outputr4   )r   r8   r   r   r   rj   r   fxitsimodesmodes          r   test_unbounded_approximatedz%TestSLSQP.test_unbounded_approximated  se    D#;X"#16 6 6#& 2sE5
E"""!!aV,,,,,r   c                     t          | j        ddgd| j        dd          }|\  }}}}}t          |dk    |           t	          |ddg           d S )Nr_   r2   r`   r   r   )rc   fprimer   r   r4   )r   r8   rA   r   r   r   s          r   test_unbounded_givenzTestSLSQP.test_unbounded_given
  sl    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           d S )Nr_   r2   r`   r   r   )rc   eqconsr   r   )r   r8   rH   r   r   r   s          r   test_equality_approximatedz$TestSLSQP.test_equality_approximated  sn    4*7#'<."#16 6 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           d S )Nr_   r2   r`   r   r   )r   rc   r   r   r   )r   r8   rA   rH   r   r   r   s          r   test_equality_givenzTestSLSQP.test_equality_given  ss    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           d S )Nr_   r2   r`   r   r   )r   rc   f_eqconsfprime_eqconsr   r   r   r8   rA   rH   rK   r   r   r   s          r   test_equality_given2zTestSLSQP.test_equality_given2&  sx    D#; $w$(L)-):"#'(* * * $' 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	           d S )
Nr_   r2   r`   r   r   )r   rc   ieqconsr   r   r4      decimal)r   r8   rA   rS   r   r   r   s          r   test_inequality_givenzTestSLSQP.test_inequality_given2  sx    D#; $x$(M?"#16 6 6 $' 2sE5
E"""!!aVQ777777r   c                 R   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    odk    nc            t          d|d         cxk    od	k    nc            d S )Nr_   r2   r`   r   r   r   r   )r   rc   rt   r   r   r   r   r   r   r   r   rJ   r   r   s          r   test_bound_equality_given2z$TestSLSQP.test_bound_equality_given2<  s    D#; $x#-y"9$(L)-):"#16 6 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           d S )
Nc                     | dz  S Nr4   r+   zs    r   <lambda>z3TestSLSQP.test_scalar_constraints.<locals>.<lambda>L  
    A r   g      @c                     | d         dz
  S Nr   r   r+   r   s    r   r   z3TestSLSQP.test_scalar_constraints.<locals>.<lambda>M  s    !A$( r   r   )r   r   r2   c                     | dz  S r   r+   r   s    r   r   z3TestSLSQP.test_scalar_constraints.<locals>.<lambda>Q  r   r   c                     | d         dz
  gS r   r+   r   s    r   r   z3TestSLSQP.test_scalar_constraints.<locals>.<lambda>R  s    AaD1H: r   )	f_ieqconsr   )r   r   r   s     r   test_scalar_constraintsz!TestSLSQP.test_scalar_constraintsJ  s}    ~~t 2 23! ! ! 	"!bT***~~t!5!5! ! ! 	"!bT*****r   c                 6    t          d dgddggd           d S )Nc                     | dz  dz
  S Nr4   r   r+   r   s    r   r   z/TestSLSQP.test_integer_bounds.<locals>.<lambda>X  s    QTAX r   r   r   rt   r   r   r   s    r   test_integer_boundszTestSLSQP.test_integer_boundsV  s+    %%sQF8AFFFFF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           d S )Nr4   r   c                 6    t          j        | dz  dz
            S r   r<   sumr   s    r   r   z-TestSLSQP.test_array_bounds.<locals>.<lambda>_  s    1q!1!1 r   rr   r   r   )r<   infr=   r   r   )r   rt   r   s      r   test_array_boundszTestSLSQP.test_array_boundsZ  sq     F7BF#bhsmmRXqc]]%CD11C:f! ! !!!aV,,,,,r   c                     t          t                    5  t          d g d           d d d            d S # 1 swxY w Y   d S )Nc                 
    ddgS r   r+   r   s    r   r   z7TestSLSQP.test_obj_must_return_scalar.<locals>.<lambda>g  s
    !Q r   r   r4   r   )assert_raises
ValueErrorr   r   s    r   test_obj_must_return_scalarz%TestSLSQP.test_obj_must_return_scalarc  s     :&& 	4 	4''333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   6::c                 0    t          d g dd           d S )Nc                     dgS Nr   r+   r   s    r   r   z;TestSLSQP.test_obj_returns_scalar_in_list.<locals>.<lambda>m  s    aS r   r   r   )r   r   r   s    r   test_obj_returns_scalar_in_listz)TestSLSQP.test_obj_returns_scalar_in_listi  s%     	==)))A666666r   c                    t                      }t          | j        ddgdd|| j                  }|j        sJ |j        sJ |j        sJ t          |j        |d                    t          | j        ddgdd|j	        | j                  }|j        sJ |j        sJ t          | j        ddgdd|j
        | j                  }|j        rJ |j                            d          sJ d S )Nr_   r2   r`   ra   )rc   rd   callbackre   nitz!`callback` raised `StopIteration`)r   r	   r8   r0   rf   rg   r   r   r   r"   r&   
startswith)r   r   rj   s      r   test_callbackzTestSLSQP.test_callbacko  s,   <<tx$8%$)M M M{{####X_c%j111H3K'I
 
 
 {####H3K'I
 
 
 ;{%%&IJJJJJJJr   c                     ddg}d }d }t          d |d|dd|dfd	d
          }|j        }t           ||          dd           t           ||          dk               t          |j        |           d S )Nr   r   c                 *    | d         | d         z   dz
  S r   r+   r   s    r   f1z5TestSLSQP.test_inconsistent_linearization.<locals>.f1      Q4!A$;?"r   c                     | d         dz  dz
  S Nr   r4   r   r+   r   s    r   f2z5TestSLSQP.test_inconsistent_linearization.<locals>.f2  s    Q419q= r   c                 0    | 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   rz   r|   r8   r   r   Nr   ra   r}   rt   rd   g:0yE>r   g:0yE)r	   r   r   r   rf   )r   r   r   r   sols        r   test_inconsistent_linearizationz)TestSLSQP.test_inconsistent_linearization  s     F	# 	# 	#	! 	! 	!''!%R00!'r224'   E1qt,,,,1S!!!!!r   c                 x    ddg}t          d |dd ddd dfd	d
          }t          |j         |           d S )Nr   r4   c                 0    | d         dz  | d         dz  z   S r   r+   r   s    r   r   z0TestSLSQP.test_regression_5743.<locals>.<lambda>  r   r   rz   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   r4   r+   r   s    r   r   z0TestSLSQP.test_regression_5743.<locals>.<lambda>  s    1a r   r   ra   r   )r	   r   rf   )r   r   r   s      r   test_regression_5743zTestSLSQP.test_regression_5743  sp     F''!%-B-BCC!'/?/?@@B'   	CK%%%%%r   c                 n    d }t          |g dd          }t          |j        j        dk               d S )Nc                 f    | d         dz
  dz  d| d         dz
  dz  z  z   d| d         dz
  dz  z  z   S )Nr   r   r4   rs   r+   r   s    r   funcz$TestSLSQP.test_gh_6676.<locals>.func  s?    aD1Hq=1adQh]?2S!A$(Q5FFFr   r   r   r   ra   rd   )r   )r	   r   rA   r[   )r   r  r   s      r   test_gh_6676zTestSLSQP.test_gh_6676  sK    	G 	G 	G tYYYw777%&&&&&r   c                     dddt           j        dft           j        dffdt           j         fdfg}|D ]H}t          t                    5  t	          | j        ddg|d	
           d d d            n# 1 swxY w Y   Id S )N)r   r4   r4   r   )r  r  )r  r  r   r   )r   r   r_   r2   ra   )rt   rd   )r<   r   r   r   r	   r8   )r   bounds_listrt   s      r   test_invalid_boundszTestSLSQP.test_invalid_bounds  s     fa[261+&"&\6"
 " 	O 	OFz** O OD#;vgNNNNO O O O O O O O O O O O O O O	O 	Os   	A00A4	7A4	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           d S )Nc                     | d         dz
  dz  S r   r+   r   s    r   r   z)TestSLSQP.test_bounds_clipping.<locals>.f  s    aD1Hq= r   
   slsqpr   rd   rt   r   绽|=r   )r4   Nr4         )rJ   r   r	   r   rf   r   r   )r   r   r   s      r   test_bounds_clippingzTestSLSQP.test_bounds_clipping  s   	! 	! 	! q2$w	{CCCqu----q3%DDDqu----q3%DDDqu----q2$w	{CCCqu----q4&'CCCqu----q2$wyAAAqu------r   c                 4   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           d S )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E r   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U r   c                     | dz   S Nr   r+   r   s    r   r   z3TestSLSQP.test_infeasible_initial.<locals>.<lambda>  r  r   r  r  )rd   r}   r   r  r   r  r4   r  r  )r   r   cons_ucons_lcons_ulr   s         r   test_infeasible_initialz!TestSLSQP.test_infeasible_initial  s   	! 	! 	! "//::;!//::;"??;;"??;;= q2$wFCCCqu----q3%VDDDqu----q3%VDDDqu----q2$wFCCCqu----q4&gFFFqu----q2$wGDDDqu------r   dicts)mode	Compilersfortrannamez
intel-llvmz7Runtime warning due to floating point issues, not logic)reasonc                     d }d }d }d}d}t          d|          t          d|          f}t          ||d||	          }t          |j                    d S )
Nc                 0    d| d         z  d| d         z  z   S )NrJ   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/  r0  r   r   ra   r   )dictr	   r   rf   )r   r)  r,  r.  r   rt   consrj   s           r   test_inconsistent_inequalitiesz(TestSLSQP.test_inconsistent_inequalities  s    	( 	( 	(	# 	# 	#	 	 	 #&i000$F	2R2R2RStRDQQQCK     r   c                     d }t          ddgt          j        t          j        g          }t          |ddgd|          }t	          |j                   t          |j        ddg           d S )Nc                 0    | 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
   r<   r   r	   r   rf   r   r   )r   r   rt   r   s       r   test_new_bounds_typezTestSLSQP.test_new_bounds_type*  ss    	) 	) 	)A 011q1a&@@@1v&&&&&r   c                 \     G d d          } |            }|                                  d S )Nc                   &    e Zd Zd Zd Zd Zd ZdS )9TestSLSQP.test_nested_minimization.<locals>.NestedProblemc                     d| _         d S r   )F_outer_countr   s    r   r   zBTestSLSQP.test_nested_minimization.<locals>.NestedProblem.__init__6  s    %&"""r   c                     | xj         dz  c_         | j         dk    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;   ra   r  r   r4   )r<  	Exceptionr	   F_innerr   rf   r   r   )r   r   	inner_ress      r   F_outerzATestSLSQP.test_nested_minimization.<locals>.NestedProblem.F_outer9  s    ""a'""%,,#$NOOO$T\6'JJJ		)***	aV444tQw1q(1Q4722r   c                 <    |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_innerB  s%    !q1}!q1}44r   c                     t          | j        dd          }t          |j                   t	          |j        g d           d S )N)r/  r/  r/  ra   r  r  )r	   rA  r   rf   r   r   )r   	outer_ress     r   solvez?TestSLSQP.test_nested_minimization.<locals>.NestedProblem.solveE  sE    $T\9WMMM		)***	YYY77777r   N)r'   r(   r)   r   rA  r?  rE  r+   r   r   NestedProblemr:  4  sP        ' ' '3 3 35 5 58 8 8 8 8r   rF  )rE  )r   rF  problems      r   test_nested_minimizationz"TestSLSQP.test_nested_minimization2  sH    	8 	8 	8 	8 	8 	8 	8 	8,  -//r   c                 
   d }d }d }d|d}d|d}t          |ddgd||gd	d
g          }t          j                            |j        d           t          j                            |j        ddg           |j        sJ d S )Nc                 6    t          j        | d                   S r  )r<   sqrtr   s    r   r8   z"TestSLSQP.test_gh1758.<locals>.funQ  s    71Q4== r   c                 0    | d         d| d         z  dz  z
  S )rE   r   r4   r   r   r+   r   s    r   rH   z&TestSLSQP.test_gh1758.<locals>.f_eqconT  s    Q41qt8/))r   c                 2    | d         | d          dz   dz  z
  S )rE   r   r   r   r+   r   s    r   f_eqcon2z'TestSLSQP.test_gh1758.<locals>.f_eqcon2X  s     Q4AaD519***r   rz   r      g      ?ra   )r  r   )r   rO  )rd   r}   rt   g8r](k?gQUU?gc@?)r	   r<   testingr   r8   r   rf   )r   r8   rH   rN  c1c2rj   s          r   test_gh1758zTestSLSQP.test_gh1758M  s    	! 	! 	!	* 	* 	*	+ 	+ 	+ 7++8,,sQIg$&8Y4GI I I 	
""37O<<<

""35:y*ABBB{r   c           
      r    dd ddd df}d}d }g d}t          ||d||d	d
d          }|j        rJ d S )Nr   c                 ,    | d          | d         z
  dz
  S )Nr   r   r   r+   r   s    r   r   z'TestSLSQP.test_gh9640.<locals>.<lambda>g  s    1Q4%!A$,2B r   r   c                 *    | d         | d         z   dz
  S )Nr   r4   r+   r   s    r   r   z'TestSLSQP.test_gh9640.<locals>.<lambda>h  s    !A$1+/ r   )r:   r4   rW  rW  c                     dS r  r+   r   s    r   targetz%TestSLSQP.test_gh9640.<locals>.targetk  s    1r   )g51gУX{gP(ra   Fi'  )r/   maxiter)rd   rt   r}   re   )r	   rf   )r   r3  bndsrY  r   rj   s         r   test_gh9640zTestSLSQP.test_gh9640f  s    (B(BCC(A(ABBD*	 	 	KKKvr'$D',>>@ @ @ ;r   c                    t          t          j        dg          t          j        dg                    t          j        j        j        j        z
  dz  z             }fd}t          ||d          }|j        sJ d S )Ng?r2   g<}?c                     | j         k                                    sJ t          j                            |           S r$   )lballr<   linalgnorm)r   rt   s    r   r   z7TestSLSQP.test_parameters_stay_within_bounds.<locals>.f  s5    N'')))))9>>!$$$r   ra   r  )r
   r<   r=   r_  ubr	   rf   )r   r   r   rj   rt   s       @r   "test_parameters_stay_within_boundsz,TestSLSQP.test_parameters_stay_within_boundst  s     #3%99Xfi69vy#8'#( ( ) )	% 	% 	% 	% 	%
 q"WV<<<{r   N)r2   ):r'   r(   r)   r*   r1   r8   rA   rC   rH   rK   rN   rQ   rS   rU   rX   r\   rk   rn   rv   rx   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   pytestmarkxfailscipyshow_configr4  r7  rH  rS  r\  rd  r+   r   r   r-   r-   '   s        $ $ $2 2 2 2 
- 
- 
- 
-4 4 4 4' ' ' '# # # #( ( ( (6 6 6 6- - - -# # # #  ' ' '
+ + +' ' '% % %' ' '+ + +' ' '' ' '' ' '	2 	2 	2
' 
' 
'E E E$' ' '"- - -- - -- - -- - -
- 
- 
-8 8 8# # #
+ 
+ 
+G G G- - -4 4 47 7 7K K K@" " "8& & &' ' 'O O O. . .>!. !. !.F [(u(g666{CINvV&'W  Y Y! !Y Y!0' ' '  6  2      r   r-   c                      t           j                            d          } |                     ddg          }t          j        ddd          }d fd	} |||           d S )
Nl   _x
&C1    im  )sizer   g      @2   c                     ddgddggS r   r+   )vweightss     r   metricz?test_slsqp_segfault_wrong_workspace_computation.<locals>.metric  s    A1vr   c                       fdfd}dfdddd df}t          j        t                     dt                     z  gz  g          d         }t          || fd	|
          }|S )Nc                 4     |           d         d         S r+  r+   )rp  rq  ro  s    r   metric_az[test_slsqp_segfault_wrong_workspace_computation.<locals>.efficient_metric.<locals>.metric_a      6!W%%a(++r   c                 4     ||           d         d         S r   r+   )rp  ro  rq  s     r   metric_bz[test_slsqp_segfault_wrong_workspace_computation.<locals>.efficient_metric.<locals>.metric_b  ru  r   rz   c                       |           z
  S r$   r+   )r   rt  rY  s    r   r   z[test_slsqp_segfault_wrong_workspace_computation.<locals>.efficient_metric.<locals>.<lambda>  s    xx{{V7K r   r   c                 0    t          j        |           dz
  S r  r   r   s    r   r   z[test_slsqp_segfault_wrong_workspace_computation.<locals>.efficient_metric.<locals>.<lambda>  s    rvayy1} r   r2   r   ra   )rc   rd   r}   )r<   r=   lenr	   )ro  rY  rw  r}   rp  resultrt  rq  s   ``    @r   efficient_metriczItest_slsqp_segfault_wrong_workspace_computation.<locals>.efficient_metric  s    	, 	, 	, 	, 	, 	,	, 	, 	, 	, 	, !%-K-K-K-K-KLL $-D-DEEG(CFFBs1vvI;./003(! !t!(&1	3 3 3
 r   )r<   randomdefault_rnguniformlinspace)rngr   rY  r|  rq  s       @r   /test_slsqp_segfault_wrong_workspace_computationr    s    
 )

 0
1
1C"S""A[c2&&F      " Qr   )r*   numpy.testingr   r   r   r   re  r   r   numpyr<   rh  scipy.optimizer   r	   r
   r   r   r   r-   r  r+   r   r   <module>r     s3   : : : : : : : : : : : : * * * * * *      , , , , , , , , , , , , , ,       0_	 _	 _	 _	 _	 _	 _	 _	D         r   