
    bi>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y)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y)
MyCallBackzJpass a custom callback function

    This makes sure it's being used.
    c                      d| _         d| _        y )NFr   )been_calledncallsselfs    Z/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/optimize/tests/test_slsqp.py__init__zMyCallBack.__init__   s         c                 `    t        |t              rJ d| _        | xj                  dz  c_        y NT   
isinstancer   r   r   r   xs     r   __call__zMyCallBack.__call__   s(    a000qr   c                 `    t        |t              sJ d| _        | xj                  dz  c_        y r   r   r   intermediate_results     r   	callback2zMyCallBack.callback2   s)    -~>>>qr   c                 2    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      s    

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/j`                  jc                   e2jf                  d-.      d/   d0   d1   d2k(  d34      d5        Z4d6 Z5d7 Z6d8 Z7d9 Z8d: Z9y;)=	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.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   r3      )nparrayfloat)r   r4   r5   r   r6   dfdxdfdys          r   jaczTestSLSQP.jacA   s[     aDaDRTAaCZ!^$QqS1Q3Yxxte,,r   c                 J    | j                  ||      | j                  ||      fS r$   )r7   r@   )r   r4   r5   s      r   fun_and_jaczTestSLSQP.fun_and_jacM   s#    xx4 $((1d"333r   c                 @    t        j                  |d   |d   z
  g      S ) Equality constraint r   r   r;   r<   r   r   r5   s      r   f_eqconzTestSLSQP.f_eqconP   s    xx1!&&r   c                 2    t        j                  ddgg      S )z! Equality constraint, derivative r   rE   rF   s      r   fprime_eqconzTestSLSQP.fprime_eqconT       xx!R	""r   c                 ,    | j                  ||      d   S )z Scalar equality constraint r   )rG   rF   s      r   f_eqcon_scalarzTestSLSQP.f_eqcon_scalarX   s    ||At$Q''r   c                 H    | j                  ||      d   j                         S )z( Scalar equality constraint, derivative r   )rJ   tolistrF   s      r   fprime_eqcon_scalarzTestSLSQP.fprime_eqcon_scalar\   s#      D)!,3355r   c                 F    t        j                  |d   |d   z
  dz
  g      S )z Inequality constraint r   r         ?rE   rF   s      r   f_ieqconzTestSLSQP.f_ieqcon`   s%    xx1!s*+,,r   c                 2    t        j                  ddgg      S )z# Inequality constraint, derivative r   rI   rE   rF   s      r   fprime_ieqconzTestSLSQP.fprime_ieqcond   rK   r   c                 ,    t        j                  |      S )z Vector inequality constraint )r;   asarrayr   s     r   	f_ieqcon2zTestSLSQP.f_ieqcon2h   s    zz!}r   c                 F    t        j                  |j                  d         S )z* Vector inequality constraint, derivative r   )r;   identityshaper   s     r   fprime_ieqcon2zTestSLSQP.fprime_ieqcon2l   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      rR   r_   SLSQPargsr@   methodoptionssuccessmessager3   r   )r	   r7   r0   r   r   r   r   jacsr@   ress       r   $test_minimize_unbounded_approximatedz.TestSLSQP.test_minimize_unbounded_approximatedq   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 )
Nr_   rR   r`   ra   rb   rf   rg   r3   r   )r	   r7   r@   r0   r   r   r   r   rj   s     r   test_minimize_unbounded_givenz'TestSLSQP.test_minimize_unbounded_given{   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)Nr^   ignore)invalidr_   rR   r`   ))      @N)N      ?ra   )rc   r@   boundsrd   re   rf   rg   rr   rs   r   r   )r;   errstater	   r7   r0   r   r   r   rh   s       r   "test_minimize_bounded_approximatedz,TestSLSQP.test_minimize_bounded_approximated   s    2 		%CX. Btxx$8#&&@&-tyyBB
 C	NC	N3CEEC:.C3558O$CEE!HO$		%B Bs   )B44B=	c                     t        | j                  ddgddd| j                        }t        |d   |d          t	        |j
                  d	d
g       y )Nr_   rR   r`   Tra   rb   rf   rg   r3   r   )r	   rB   r0   r   r   r   rm   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 )Nr^   r_   rR   r`   eqtyper7   rc   ra   )rc   r@   constraintsrd   re   rf   rg   r   )r	   r7   rG   r0   r   r   r   rh   s       r   #test_minimize_equality_approximatedz-TestSLSQP.test_minimize_equality_approximated   st    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 )Nr_   rR   ra   r`   rz   r{   r@   rd   rc   r}   re   rf   rg   r   )r	   r7   r@   rG   r0   r   r   r   rm   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 Nr_   rR   ra   r`   rz   r|   r7   rc   r@   rd   r@   rc   r}   re   rf   rg   r   	r	   r7   r@   rG   rJ   r0   r   r   r   rm   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 r   )	r	   r7   r@   rM   rP   r0   r   r   r   rm   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 )Nr_   rR   ra   r`   ineqr{   r   rf   rg   r3   r   MbP?atol)r	   r7   r@   rS   r0   r   r   r   rm   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 )Nr_   rR   ra   r`   r   )r|   r7   r@   r   rf   rg   r3   r   )	r	   r7   r@   rX   r\   r0   r   r   r   rm   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   rs   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   r3   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      ??rs   g        rR   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   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 )Nr_   rR   ra   r`   皙rR   rI   皙?rz   r   )rd   r@   rc   rt   r}   re   rf   rg   r   r   r   r   r   r   rI   r   rm   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 )Nr_   rR   r`   r   r   )rc   iprintfull_outputr3   )r   r7   r   r   r   rj   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 )Nr_   rR   r`   r   r   )rc   fprimer   r   r3   )r   r7   r@   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 )Nr_   rR   r`   r   r   )rc   eqconsr   r   )r   r7   rG   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 )Nr_   rR   r`   r   r   )r   rc   r   r   r   )r   r7   r@   rG   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 )Nr_   rR   r`   r   r   )r   rc   f_eqconsfprime_eqconsr   r   r   r7   r@   rG   rJ   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 )
Nr_   rR   r`   r   r   )r   rc   ieqconsr   r   r3      decimal)r   r7   r@   rS   r   r   r   s          r   test_inequality_givenzTestSLSQP.test_inequality_given2  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 )Nr_   rR   r`   r   r   r   r   )r   rc   rt   r   r   r   r   r   r   r   r   rI   r   r   s          r   test_bound_equality_given2z$TestSLSQP.test_bound_equality_given2<  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 Nr3   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   rR   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  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 Nr3   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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 )Nr3   r   c                 8    t        j                  | dz  dz
        S r   r;   sumr   s    r   r   z-TestSLSQP.test_array_bounds.<locals>.<lambda>_  s    1q!1 r   rr   r   r   )r;   infr<   r   r   )r   rt   r   s      r   test_array_boundszTestSLSQP.test_array_boundsZ  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>g  s
    !Q r   r   r3   r   )assert_raises
ValueErrorr   r   s    r   test_obj_must_return_scalarz%TestSLSQP.test_obj_must_return_scalarc  s,     :& 	4'3	4 	4 	4s   )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>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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
                  j                  d      sJ y )Nr_   rR   r`   ra   )rc   rd   callbackre   nitz!`callback` raised `StopIteration`)r   r	   r7   r0   rf   rg   r   r   r   r"   r&   
startswith)r   r   rj   s      r   test_callbackzTestSLSQP.test_callbacko  s   <txx$8%$))M{{{{{{####X__c%j1HH3K''II
 {{{####HH3K''II
 ;;{{%%&I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                  |       y )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   r3   r   r+   r   s    r   f2z5TestSLSQP.test_inconsistent_linearization.<locals>.f2  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   rz   r|   r7   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!'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   r3   c                 $    | 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   r3   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  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   r3   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   r@   r[   )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   r3   r3   r   )r  r  )r  r  r   r   )r   r   r_   rR   ra   )rt   rd   )r;   r   r   r   r	   r7   )r   bounds_listrt   s      r   test_invalid_boundszTestSLSQP.test_invalid_bounds  s     ffa[2661+&"&&\6"
 " 	OFz* OD#;vgNO O	OO O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   rd   rt   r   绽|=r   )r3   Nr3         )rI   r   r	   r   rf   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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  r3   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   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                          y )
Nc                 $    d| d   z  d| d   z  z   S )NrI   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  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
   r;   r   r	   r   rf   r   r   )r   r   rt   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__6  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:   ra   r  r   r3   )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$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_innerB  s%    !q1}!q1}44r   c                     t        | j                  dd      }t        |j                         t	        |j
                  g d       y )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  s0    $T\\9WM		))*	Y7r   N)r'   r(   r)   r   rA  r?  rE  r+   r   r   NestedProblemr:  4  s    '358r   rF  )rE  )r   rF  problems      r   test_nested_minimizationz"TestSLSQP.test_nested_minimization2  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  )r;   sqrtr   s    r   r7   z"TestSLSQP.test_gh1758.<locals>.funQ  s    771Q4= r   c                 $    | d   d| d   z  dz  z
  S )rD   r   r3   r   r   r+   r   s    r   rG   z&TestSLSQP.test_gh1758.<locals>.f_eqconT  s    Q41qt8/))r   c                 &    | d   | d    dz   dz  z
  S )rD   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   r7   r   rf   )r   r7   rG   rN  c1c2rj   s          r   test_gh1758zTestSLSQP.test_gh1758M  s    	!	*	+ 7+8,sQIg$&8Y4GI 	

""377O<


""355:y*AB{{{r   c           
      r    dd ddd df}d}d }g d}t        ||d||d	d
d      }|j                  rJ y )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   r3   r+   r   s    r   r   z'TestSLSQP.test_gh9640.<locals>.<lambda>h  s    !A$1+/ r   )r9   r3   rW  rW  c                      yr  r+   r   s    r   targetz%TestSLSQP.test_gh9640.<locals>.targetk  s    r   )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  sX    (BC(ABD*	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 y )Ng?rR   g<}?c                     | j                   k\  j                         sJ t        j                  j	                  |       S r$   )lballr;   linalgnorm)r   rt   s    r   r   z7TestSLSQP.test_parameters_stay_within_bounds.<locals>.f  s0    N'')))99>>!$$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  sx     #3%9XXfii699vyy#8'#( ( )	%
 q"WV<{{{r   N)rR   ):r'   r(   r)   r*   r1   r7   r@   rB   rG   rJ   rM   rP   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-   '   sQ   $2 
-4'#(6-#'
+'%'+'''	2
'E$'"----
-8#
+G-47K@"8&'O.>!.F [[(u((g6{CINvV&'W  Y!Y!0'62r   r-   c                      t         j                  j                  d      } | j                  ddg      }t        j                  ddd      }d fd	} |||       y )
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                 "     |       d   d   S r+  r+   )rp  rq  ro  s    r   metric_az[test_slsqp_segfault_wrong_workspace_computation.<locals>.efficient_metric.<locals>.metric_a      !W%a(++r   c                 "     ||       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    x{V7K r   r   c                 2    t        j                  |       dz
  S r  r   r   s    r   r   z[test_slsqp_segfault_wrong_workspace_computation.<locals>.efficient_metric.<locals>.<lambda>  s    rvvay1} r   rR   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  ss    	,	, !%-KL $-DEG((CFBs1vI;./03(! !t!(&1	3
 r   )r;   randomdefault_rnguniformlinspace)rngr   rY  r|  rq  s       @r   /test_slsqp_segfault_wrong_workspace_computationr    sV    
 ))

 0
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     sF   : : *   , , 0_	 _	D r   