
    tKg$k                        d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZmZmZmZmZmZ  G d d      Z G d d	      Z G d
 d      Z G d d      Z G d d      Z G d de      Z G d de      Z G d de      Z G d d      Z G d d      Z G d d      Zd Z ejB                  jE                  dd      d         Z#d! Z$ G d" d#      Z%y)$    N)
block_diag)
csc_matrix)assert_array_almost_equalassert_array_lessassert_assert_allclosesuppress_warnings)NonlinearConstraintLinearConstraintBoundsminimizeBFGSSR1rosenc                   :    e Zd ZdZddZd Zd Zd Zed        Z	y)	MaratosProblem 15.4 from Nocedal and Wright

    The following optimization problem:
        minimize 2*(x[0]**2 + x[1]**2 - 1) - x[0]
        Subject to: x[0]**2 + x[1]**2 - 1 = 0
    Nc                     |dz  t         j                  z  }t        j                  |      t        j                  |      g| _        t        j
                  ddg      | _        || _        || _        d | _	        y N         ?        
nppicossinx0arrayx_opt
constr_jacconstr_hessboundsselfdegreesr!   r"   radss        r/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/optimize/tests/test_minimize_constrained.py__init__zMaratos.__init__   Z    s{255 66$<.XXsCj)
$&    c                 <    d|d   dz  |d   dz  z   dz
  z  |d   z
  S N   r       r%   xs     r(   funzMaratos.fun!   s0    !A$'AaD!G#a'(1Q4//r+   c                 N    t        j                  d|d   z  dz
  d|d   z  g      S N   r   r/   r   r   r1   s     r(   gradzMaratos.grad$   s*    xx1Q41QqT6*++r+   c                 2    dt        j                  d      z  S Nr6   r.   r   eyer1   s     r(   hesszMaratos.hess'       {r+   c                     d }| j                   d }n| j                   }| j                  d }n| j                  }t        |dd||      S )Nc                 $    | d   dz  | d   dz  z   S Nr   r.   r/   r0   r2   s    r(   r3   zMaratos.constr.<locals>.fun,       Q47QqT1W$$r+   c                 $    d| d   z  d| d   z  ggS r-   r0   rB   s    r(   jaczMaratos.constr.<locals>.jac0        1Q41Q4())r+   c                 >    d|d   z  t        j                  d      z  S Nr.   r   r;   r2   vs     r(   r=   zMaratos.constr.<locals>.hess6       1vbffQi''r+   r/   r!   r"   r
   r%   r3   rE   r=   s       r(   constrzMaratos.constr*   T    	% ??"* //C#( ##D"31c488r+   <   NN
__name__
__module____qualname____doc__r)   r3   r8   r=   propertyrN   r0   r+   r(   r   r      s/    0, 9 9r+   r   c                   @    e Zd ZdZd	dZd Zd Zd Zd Ze	d        Z
y)
MaratosTestArgsr   Nc                    |dz  t         j                  z  }t        j                  |      t        j                  |      g| _        t        j
                  ddg      | _        || _        || _        || _	        || _
        d | _        y r   )r   r   r   r   r   r   r    r!   r"   abr#   )r%   r[   r\   r&   r!   r"   r'   s          r(   r)   zMaratosTestArgs.__init__F   sh    s{255 66$<.XXsCj)
$&r+   c                 T    | j                   |k7  s| j                  |k7  r
t               y N)r[   r\   
ValueError)r%   r[   r\   s      r(   
_test_argszMaratosTestArgs._test_argsP   s$    66Q;$&&A+, &r+   c                 `    | j                  ||       d|d   dz  |d   dz  z   dz
  z  |d   z
  S r-   )r`   r%   r2   r[   r\   s       r(   r3   zMaratosTestArgs.funT   s>    1!A$'AaD!G#a'(1Q4//r+   c                 r    | j                  ||       t        j                  d|d   z  dz
  d|d   z  g      S r5   )r`   r   r   rb   s       r(   r8   zMaratosTestArgs.gradX   s8    1xx1Q41QqT6*++r+   c                 V    | j                  ||       dt        j                  d      z  S r:   )r`   r   r<   rb   s       r(   r=   zMaratosTestArgs.hess\   s"    1{r+   c                     d }| j                   d }n| j                   }| j                  d }n| j                  }t        |dd||      S )Nc                 $    | d   dz  | d   dz  z   S rA   r0   rB   s    r(   r3   z#MaratosTestArgs.constr.<locals>.funb   rC   r+   c                 $    d| d   z  d| d   z  ggS r5   r0   rB   s    r(   rE   z#MaratosTestArgs.constr.<locals>.jacf   rF   r+   c                 >    d|d   z  t        j                  d      z  S rH   r;   rI   s     r(   r=   z$MaratosTestArgs.constr.<locals>.hessl   rK   r+   r/   rL   rM   s       r(   rN   zMaratosTestArgs.constr`   rO   r+   rP   )rS   rT   rU   rV   r)   r`   r3   r8   r=   rW   rN   r0   r+   r(   rY   rY   >   s4    0, 9 9r+   rY   c                   D    e Zd ZdZddZd Zed        Zd Zed        Z	y)	MaratosGradInFuncr   Nc                     |dz  t         j                  z  }t        j                  |      t        j                  |      g| _        t        j
                  ddg      | _        || _        || _        d | _	        y r   r   r$   s        r(   r)   zMaratosGradInFunc.__init__|   r*   r+   c                     d|d   dz  |d   dz  z   dz
  z  |d   z
  t        j                  d|d   z  dz
  d|d   z  g      fS )Nr.   r   r/   r6   r7   r1   s     r(   r3   zMaratosGradInFunc.fun   s\    1Q47QqT1W$q()AaD0!AaD&(AadF+,. 	.r+   c                      y)NTr0   r%   s    r(   r8   zMaratosGradInFunc.grad   s    r+   c                 2    dt        j                  d      z  S r:   r;   r1   s     r(   r=   zMaratosGradInFunc.hess   r>   r+   c                     d }| j                   d }n| j                   }| j                  d }n| j                  }t        |dd||      S )Nc                 $    | d   dz  | d   dz  z   S rA   r0   rB   s    r(   r3   z%MaratosGradInFunc.constr.<locals>.fun   rC   r+   c                 $    d| d   z  d| d   z  ggS r5   r0   rB   s    r(   rE   z%MaratosGradInFunc.constr.<locals>.jac   rF   r+   c                 >    d|d   z  t        j                  d      z  S rH   r;   rI   s     r(   r=   z&MaratosGradInFunc.constr.<locals>.hess   rK   r+   r/   rL   rM   s       r(   rN   zMaratosGradInFunc.constr   rO   r+   rP   )
rS   rT   rU   rV   r)   r3   rW   r8   r=   rN   r0   r+   r(   rj   rj   t   s>    .   9 9r+   rj   c                   :    e Zd ZdZddZd Zd Zd Zed        Z	y)	HyperbolicIneqa  Problem 15.1 from Nocedal and Wright

    The following optimization problem:
        minimize 1/2*(x[0] - 2)**2 + 1/2*(x[1] - 1/2)**2
        Subject to: 1/(x[0] + 1) - x[1] >= 1/4
                                   x[0] >= 0
                                   x[1] >= 0
    Nc                     ddg| _         ddg| _        || _        || _        t	        dt
        j                        | _        y )Nr   g~T>?g~1[?)r   r    r!   r"   r   r   infr#   )r%   r!   r"   s      r(   r)   zHyperbolicIneq.__init__   s:    a&)
$&Q'r+   c                 <    d|d   dz
  dz  z  d|d   dz
  dz  z  z   S )N      ?r   r.   r/   r0   r1   s     r(   r3   zHyperbolicIneq.fun   s/    AaD1Hq= 3!s
Q#666r+   c                 "    |d   dz
  |d   dz
  gS )Nr   r.   r/   ry   r0   r1   s     r(   r8   zHyperbolicIneq.grad   s    !q!A$*%%r+   c                 ,    t        j                  d      S Nr.   r;   r1   s     r(   r=   zHyperbolicIneq.hess   s    vvayr+   c                     d }| j                   d }n| j                   }| j                  d }n| j                  }t        |dt        j                  ||      S )Nc                 $    d| d   dz   z  | d   z
  S )Nr/   r   r0   rB   s    r(   r3   z"HyperbolicIneq.constr.<locals>.fun   s    adQh<!A$&&r+   c                 $    d| d   dz   dz  z  dggS )Nr   r/   r.   r0   rB   s    r(   rE   z"HyperbolicIneq.constr.<locals>.jac   s!    QqTAXM)2.//r+   c                 b    d|d   z  t        j                  d| d   dz   dz  z  dgddgg      z  S )Nr.   r   r/      r7   rI   s     r(   r=   z#HyperbolicIneq.constr.<locals>.hess   sE    1vbhhAaD1Hq=!(<)*A(0 1 1 1r+   g      ?r!   r"   r
   r   rw   rM   s       r(   rN   zHyperbolicIneq.constr   sX    	' ??"0 //C#1 ##D"3bffc4@@r+   )NNrR   r0   r+   r(   ru   ru      s1    (7& A Ar+   ru   c                   :    e Zd ZdZddZd Zd Zd Zed        Z	y)	
RosenbrockzRosenbrock function.

    The following optimization problem:
        minimize sum(100.0*(x[1:] - x[:-1]**2.0)**2.0 + (1 - x[:-1])**2.0)
    c                     t         j                  j                  |      }|j                  dd|      | _        t        j
                  |      | _        d | _        y )Nr   r/   )r   randomRandomStateuniformr   onesr    r#   )r%   nrandom_staterngs       r(   r)   zRosenbrock.__init__   s@    ii##L1++b!Q'WWQZ
r+   c                     t        j                  |      }t        j                  d|dd  |d d dz  z
  dz  z  d|d d z
  dz  z   d      }|S )Ng      Y@r/   r          @r   axis)r   asarraysum)r%   r2   rs      r(   r3   zRosenbrock.fun   sZ    JJqMFF5AabEAcrFCK/#55QsVc8IIr+   c                 8   t        j                  |      }|dd }|d d }|dd  }t        j                  |      }d||dz  z
  z  d||dz  z
  z  |z  z
  dd|z
  z  z
  |dd d|d   z  |d   |d   dz  z
  z  dd|d   z
  z  z
  |d<   d|d   |d   dz  z
  z  |d<   |S )	Nr/   r   r.        pr   )r   r   
zeros_like)r%   r2   xmxm_m1xm_p1ders         r(   r8   zRosenbrock.grad   s    JJqMqW#2!"mmABM*EBEM*R/023q2v,?Ab	!!qtQw/!q1Q4x.@A22)*B
r+   c                    t        j                  |      }t        j                  d|d d z  d      t        j                  d|d d z  d      z
  }t        j                  t	        |      |j
                        }d|d   dz  z  d|d   z  z
  dz   |d<   d	|d<   d
d|dd dz  z  z   d|dd  z  z
  |dd |t        j                  |      z   }|S )Nr   r   r/   r   )dtypei  r   r.   r      )r   
atleast_1ddiagzeroslenr   )r%   r2   Hdiagonals       r(   r=   zRosenbrock.hess   s    MM!GGD1Sb6M1%afb(AA88CF!''2QqT1WnsQqTz1A5ta"gqj00312;>2!!r+   c                      y)Nr0   r0   rn   s    r(   rN   zRosenbrock.constr   s    r+   N)r.   r   rR   r0   r+   r(   r   r      s/    
  r+   r   c                   (    e Zd ZdZddZed        Zy)IneqRosenbrockzRosenbrock subject to inequality constraints.

    The following optimization problem:
        minimize sum(100.0*(x[1] - x[0]**2)**2.0 + (1 - x[0])**2)
        subject to: x[0] + 2 x[1] <= 1

    Taken from matlab ``fmincon`` documentation.
    c                 d    t         j                  | d|       ddg| _        ddg| _        d | _        y )Nr.   r         gn?g$?r   r)   r   r    r#   r%   r   s     r(   r)   zIneqRosenbrock.__init__  s2    D!\2t*f%
r+   c                 H    ddgg}d}t        |t        j                   |      S Nr/   r.   r   r   rw   )r%   Ar\   s      r(   rN   zIneqRosenbrock.constr  s'    VHBFF7A..r+   Nr   rS   rT   rU   rV   r)   rW   rN   r0   r+   r(   r   r      s      / /r+   r   c                       e Zd ZdZddZy)BoundedRosenbrocka  Rosenbrock subject to inequality constraints.

    The following optimization problem:
        minimize sum(100.0*(x[1] - x[0]**2)**2.0 + (1 - x[0])**2)
        subject to:  -2 <= x[0] <= 0
                      0 <= x[1] <= 2

    Taken from matlab ``fmincon`` documentation.
    c                 |    t         j                  | d|       ddg| _        d | _        t	        ddgddg      | _        y )Nr.   gɿg?r   r   )r   r)   r   r    r   r#   r   s     r(   r)   zBoundedRosenbrock.__init__  s<    D!\2+
b!Wq!f-r+   Nr   )rS   rT   rU   rV   r)   r0   r+   r(   r   r     s    .r+   r   c                   (    e Zd ZdZddZed        Zy)EqIneqRosenbrocka*  Rosenbrock subject to equality and inequality constraints.

    The following optimization problem:
        minimize sum(100.0*(x[1] - x[0]**2)**2.0 + (1 - x[0])**2)
        subject to: x[0] + 2 x[1] <= 1
                    2 x[0] + x[1] = 1

    Taken from matlab ``fimincon`` documentation.
    c                 d    t         j                  | d|       ddg| _        ddg| _        d | _        y )Nr.   r   r   gWs`?g|\*?r   r   s     r(   r)   zEqIneqRosenbrock.__init__0  s2    D!\2t*w'
r+   c                 p    ddgg}d}ddgg}d}t        |t        j                   |      t        |||      fS r   r   )r%   A_ineqb_ineqA_eqb_eqs        r(   rN   zEqIneqRosenbrock.constr6  sJ    a&Ax "&&&9 tT24 	4r+   Nr   r   r0   r+   r(   r   r   &  s      4 4r+   r   c                   J    e Zd ZdZ	 	 d
dZd Zd Zd Zd Zd Z	e
d	        Zy)Eleca  Distribution of electrons on a sphere.

    Problem no 2 from COPS collection [2]_. Find
    the equilibrium state distribution (of minimal
    potential) of the electrons positioned on a
    conducting sphere.

    References
    ----------
    .. [1] E. D. Dolan, J. J. Mor'{e}, and T. S. Munson,
           "Benchmarking optimization software with COPS 3.0.",
            Argonne National Lab., Argonne, IL (US), 2004.
    Nc                    || _         t        j                  j                  |      | _        | j                  j                  ddt        j                  z  | j                         }| j                  j                  t        j                   t        j                  | j                         }t        j                  |      t        j                  |      z  }t        j                  |      t        j                  |      z  }t        j                  |      }	t        j                  |||	f      | _
        d | _        || _        || _        d | _        y )Nr   r.   )n_electronsr   r   r   r   r   r   r   r   hstackr   r    r!   r"   r#   )
r%   r   r   r!   r"   phithetar2   yzs
             r(   r)   zElec.__init__N  s    &99((6hhq!bee)T-=-=>  "%%0@0@AFF5MBFF3K'FF5MBFF3K'FF5M))Q1I&
$&r+   c                     |d | j                    }|| j                   d| j                   z   }|d| j                   z  d  }|||fS r|   r   )r%   r2   x_coordy_coordz_coords        r(   _get_cordinateszElec._get_cordinates^  sW    %T%%&D$$Q)9)9%9:A((()*((r+   c                 ~    | j                  |      \  }}}|d d d f   |z
  }|d d d f   |z
  }|d d d f   |z
  }|||fS r^   r   )r%   r2   r   r   r   dxdydzs           r(   _compute_coordinate_deltaszElec._compute_coordinate_deltasd  s^    $($8$8$;!'QW'QW'QW'2rzr+   c                 
   | j                  |      \  }}}t        j                  d      5  |dz  |dz  z   |dz  z   dz  }d d d        dt        j                  |      <   dt        j                  |      z  S # 1 sw Y   9xY w)Nignoredivider.   r   r   ry   )r   r   errstatediag_indices_fromr   )r%   r2   r   r   r   dm1s         r(   r3   zElec.funk  sy    44Q7
B[[)q52q5=2q5(T1C *)*B  %&RVVC[   *)s   A99Bc                    | j                  |      \  }}}t        j                  d      5  |dz  |dz  z   |dz  z   dz  }d d d        dt        j                  |      <   t        j                  ||z  d       }t        j                  ||z  d       }t        j                  ||z  d       }t        j
                  |||f      S # 1 sw Y   xY w)Nr   r   r.         r   r/   r   )r   r   r   r   r   r   )	r%   r2   r   r   r   dm3grad_xgrad_ygrad_zs	            r(   r8   z	Elec.gradr  s    44Q7
B[[)q52q5=2q5(T1C *)*B  %&&&c**&&c**&&c**yy&&&122 *)s   C

Cc           	         | j                  |      \  }}}|dz  |dz  z   |dz  z   dz  }t        j                  d      5  |dz  }|dz  }d d d        t        j                  | j                        }d||f<   d||f<   |d|dz  z  |z  z
  }	t        j
                  |	d	
       |	||f<   d|z  |z  |z  }
t        j
                  |
d	
       |
||f<   d|z  |z  |z  }t        j
                  |d	
       |||f<   |d|dz  z  |z  z
  }t        j
                  |d	
       |||f<   d|z  |z  |z  }t        j
                  |d	
       |||f<   |d|dz  z  |z  z
  }t        j
                  |d	
       |||f<   t        j                  t        j                  |	|
|f      t        j                  |
||f      t        j                  |||f      f      }|S # 1 sw Y   xY w)Nr.   ry   r   r   r   r   r/   r   )r   r   r   aranger   r   vstackr   )r%   r2   r   r   r   dr   dm5iHxxHxyHxzHyyHyzHzzr   s                   r(   r=   z	Elec.hess  s   44Q7
BURU]RU"s*[[)r'Cr'C * IId&&'AqD	AqD	AAIO#VVCa((AqD	2glS VVCa((AqD	2glS VVCa((AqD	AAIO#VVCa((AqD	2glS VVCa((AqD	AAIO#VVCa((AqD	IIIIsCo&IIsCo&IIsCo&
  A *)s    GGc                       fd} j                    fd}n j                   } j                  d }n j                  }t        |t        j                   d||      S )Nc                 V    j                  |       \  }}}|dz  |dz  z   |dz  z   dz
  S )Nr.   r/   r   )r2   r   r   r   r%   s       r(   r3   zElec.constr.<locals>.fun  s;    (,(<(<Q(?%GWgA:
*WaZ7!;;r+   c                     j                  |       \  }}}dt        j                  |      z  }dt        j                  |      z  }dt        j                  |      z  }t        t        j                  |||f            S r|   )r   r   r   r   r   )r2   r   r   r   JxJyJzr%   s          r(   rE   zElec.constr.<locals>.jac  sm    ,0,@,@,C)'))))))!"))RRL"9::r+   c                 L    dt        j                  |      z  }t        |||      S r|   )r   r   r   )r2   rJ   Ds      r(   r=   zElec.constr.<locals>.hess  s"    
N!!Q**r+   r   r   rM   s   `   r(   rN   zElec.constr  s[    	< ??"; //C#+ ##D"3C>>r+   )r   r   NN)rS   rT   rU   rV   r)   r   r   r3   r8   r=   rW   rN   r0   r+   r(   r   r   @  sB     67.2 )!3$L ? ?r+   r   c                   l   e Zd Z e        ed       e e              ed e              e        e        ed       e e              ed e              e        e	        e
        e        ed       edd       ed e              edd e             gZej                  j!                  d	e      ej                  j!                  d
d      ej                  j!                  ddd e        ed       ed      f      d                      Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestTrustRegionConstr2-point)r"   )r!   r"   3-pointr.   r   )r   r"   )r   r!   r"   probr8   )	prob.gradr   Fr=   	prob.hessdamp_update)exception_strategyskip_updatec           
         |dk(  r|j                   n|}|dk(  r|j                  n|}|dv r|dv rt        j                  d       |j                   du r|dv rt        j                  d       t	        |t
              xr |d	k(  xr t	        |t              }|rt        j                  d
       t               5 }|j                  t        d       t        |j                  |j                  d|||j                  |j                        }d d d        |j                   Gt#        j$                  |j                   d       |j&                  dk(  rt)        |j*                  d       j&                  dk(  r;t)        |j,                  d       |j.                  dk(  rt)        |j0                  d       d|j&                   d}|j&                  dvsJ |       y # 1 sw Y   xY w)Nr   r   >   Fcsr   r   >   r  r   r   z+Numerical Hessian needs analytical gradientT>   Fr   z6prob.grad incompatible with grad in {'3-point', False}r   z3Seems sensitive to initial conditions w/ Acceleratedelta_grad == 0.0trust-constrmethodrE   r=   r#   constraints   decimalr/   :0yE>r.   tr_interior_pointzInvalid termination condition: .>   r   r   )r8   r=   pytestskip
isinstancer   r   xfailr	   filterUserWarningr   r3   r   r#   rN   r    r   r2   statusr   
optimality	tr_radiusr  barrier_parameter)r%   r   r8   r=   	sensitivesupresultmessages           r(   test_list_of_problemsz+TestTrustRegionConstr.test_list_of_problems  s    !K/tyyT K/tyyT7744KKEF99);!;KKPQ&78 0TY=N 0#D$/ 	LLNO CJJ{$78dhh%3"&T%)[[*.++	7F ! ::!%fhh

./1 }}!!&"3"3T:==Af..5}} 33!&":":DA 4FMM?!D}}F*3G3*/ ! s   5AGGc                 `    d }dg}t        |dg|d      }t        |j                  dd       y )	Nc                     | dz
  dz  S r   r0   rB   s    r(   r3   z<TestTrustRegionConstr.test_default_jac_and_hess.<locals>.fun      Ea<r+   r   r.   r   r  )r   r#   r  r/   r	  r
  r   r   r2   r%   r3   r#   ress       r(   test_default_jac_and_hessz/TestTrustRegionConstr.test_default_jac_and_hess   s0    	 svf^L!#%%A6r+   c                 b    d }dg}t        |dg|dd      }t        |j                  dd	       y )
Nc                     | dz
  dz  S r   r0   rB   s    r(   r3   z4TestTrustRegionConstr.test_default_hess.<locals>.fun  r   r+   r!  r   r  r   )r   r#   r  rE   r/   r	  r
  r"  r#  s       r(   test_default_hessz'TestTrustRegionConstr.test_default_hess  s5    	 svf^$&!#%%A6r+   c                    t               }t        |j                  |j                  d|j                  |j
                        }t        |j                  |j                  dd      }t        |j                  |j                  dd      }t        |j                  |j                  d       t        |j                  |j                  d       t        |j                  |j                  d       y )	Nr  )r  rE   r=   zL-BFGS-Br   )r  rE   r   r	  r
  )	r   r   r3   r   r8   r=   r   r2   r    )r%   r   r  result1result2s        r(   test_no_constraintsz)TestTrustRegionConstr.test_no_constraints  s    |$((DGG!/"iidii9 488TWW",(* 488TWW",(* 	"&((DJJB!'))TZZC!'))TZZCr+   c           	         t               fd}t        j                  j                  dj                  |j
                  j                        }j                  "t        |j                  j                  d       |j                  dk(  rt        |j                  d       |j                  dk(  r;t        |j                  d       |j                  dk(  rt        |j                  d       |j                  d	v rt!        d
      y )Nc                 H    j                  |       }|j                  |      S r^   )r=   dot)r2   pr   r   s      r(   hesspz/TestTrustRegionConstr.test_hessp.<locals>.hessp"  s    		!A558Or+   r  )r  rE   r1  r#   r  r.   r
  r/   r  r  r   r   Invalid termination condition.)r   r   r3   r   r8   r#   rN   r    r   r2   r  r   r  r  r  r  RuntimeError)r%   r1  r  r   s      @r(   
test_hesspz TestTrustRegionConstr.test_hessp  s    y	 $((DGG!/"iiu!%&*kk	3 ::!%fhh

AF ==Af//6==Af..5}} 33!&":":DA==F"?@@ #r+   c           
      &   t        dd      }t        |j                  |j                  dd|j                  |j
                  |j                  |j                        }|j                  "t        |j                  |j                  d       |j                  dk(  rt        |j                  d	       |j                  dk(  r;t        |j                  d	       |j                  d
k(  rt        |j                   d	       |j                  dv rt#        d      y )Nr[      )r[   r7  r  r  r.   r
  r/   r  r  r2  r3  )rY   r   r3   r   r8   r=   r#   rN   r    r   r2   r  r   r  r  r  r  r4  )r%   r   r  s      r(   	test_argszTestTrustRegionConstr.test_args<  s    sC($((DGGZ!/"iidii!%&*kk	3 ::!%fhh

AF ==Af//6==Af..5}} 33!&":":DA==F"?@@ #r+   c           	          t               }d}t        j                  t        |      5  t	        |j
                  |j                  ddd|j                         d d d        y # 1 sw Y   y xY w)Nz9Whenever the gradient is estimated via finite-differencesmatchr  r   )r  rE   r=   r  )r   r  raisesr_   r   r3   r   rN   )r%   r   r  s      r(   test_raise_exceptionz*TestTrustRegionConstr.test_raise_exceptionT  sI    yM]]:W5TXXtww~9#> 655s   0A!!A*c                     d }t        d dgd d |d      }t        |j                  d             t        |j                  d	d
      dk(         t        |j                  dd
      dk(         y )Nc                 8    t        d|v        t        d|v        y )Nnitniter)r   )r2   infos     r(   callbackz7TestTrustRegionConstr.test_issue_9044.<locals>.callback`  s    ETM"GtO$r+   c                     | dz  S r|   r0   rB   s    r(   <lambda>z7TestTrustRegionConstr.test_issue_9044.<locals>.<lambda>d  s    AqDr+   r   c                     d| z  S r|   r0   rB   s    r(   rE  z7TestTrustRegionConstr.test_issue_9044.<locals>.<lambda>d  s    QqSr+   c                      yr|   r0   rB   s    r(   rE  z7TestTrustRegionConstr.test_issue_9044.<locals>.<lambda>e  s    r+   r  )rE   r=   rC  r  successr@  r   r/   rA  )r   r   get)r%   rC  r  s      r(   test_issue_9044z%TestTrustRegionConstr.test_issue_9044[  sh    
	% .1#=*X!/1 	

9%&

5"%*+ 	

7B'1,-r+   c                 >   t        j                  ddg      }d }t        t        j                  ddg      t        j                  ddg      d      }t               5 }|j	                  t
        d       t        d|||	      }d d d        d
   sJ y # 1 sw Y   xY w)Nr   ry   c                 ,    | d   }| d   }|dz  |dz  z   S )Nr   r/   r.   r0   )r2   x1x2s      r(   objz3TestTrustRegionConstr.test_issue_15093.<locals>.objv  s'    1B1B7R1W$$r+   r   T)keep_feasibler  r  )r  r3   r   r#   rH  )r   r   r   r	   r  r  r   )r%   r   rO  r#   r  r  s         r(   test_issue_15093z&TestTrustRegionConstr.test_issue_15093n  s     XXr3i 	%
 "b*BHHb"X,>&*,  CJJ{$78%	F ! i    ! s   &BBN)rS   rT   rU   r   r   rj   ru   r   r   r   r   r   r   list_of_problemsr  markparametrizer  r%  r(  r,  r5  r8  r=  rJ  rQ  r0   r+   r(   r   r     sF   	I6CE29#%H)+&(&9=&46:&)376;"&((*)++	B>y),0#1( [[V%56[[V%DE[[Vk9ce&*m&L&*m&L&N O$4O F 7
$4N77D A:A0>.&!r+   r   c                       e Zd ZdZd Zy)TestEmptyConstrainta  
    Here we minimize x^2+y^2 subject to x^2-y^2>1.
    The actual minimum is at (0, 0) which fails the constraint.
    Therefore we will find a minimum on the boundary at (+/-1, 0).

    When minimizing on the boundary, optimize uses a set of
    constraints that removes the constraint that sets that
    boundary.  In our case, there's only one constraint, so
    the result is an empty constraint.

    This tests that the empty constraint works.
    c           	         d }d }d }d }d }d }t        |dt        j                  ||      }ddg}t        t        j                   t        j                   gt        j                  t        j                  g      }t	        ||d	|||g|
      }	t        t        |	j                        t        j                  ddg      d       y )Nc                 $    | d   dz  | d   dz  z   S rA   r0   rB   s    r(   functionz;TestEmptyConstraint.test_empty_constraint.<locals>.function  rC   r+   c                 H    t        j                  d| d   z  d| d   z  g      S )Nr   r   r/   r7   rB   s    r(   functionjacobianzCTestEmptyConstraint.test_empty_constraint.<locals>.functionjacobian  s&    88R!Wb1g.//r+   c                     d|z  S )Nr   r0   rI   s     r(   functionhvpz>TestEmptyConstraint.test_empty_constraint.<locals>.functionhvp  s    a4Kr+   c                 L    t        j                  | d   dz  | d   dz  z
  g      S rA   r7   rB   s    r(   
constraintz=TestEmptyConstraint.test_empty_constraint.<locals>.constraint  s)    88QqT1WqtQw./00r+   c                 J    t        j                  d| d   z  d| d   z  gg      S )Nr.   r   r   r/   r7   rB   s    r(   constraintjacobianzETestEmptyConstraint.test_empty_constraint.<locals>.constraintjacobian  s)    88a!fb1g./00r+   c                 D    t        j                  ddgddgg      |d   z  S )Nr   r   g       r   r7   rI   s     r(   constraintlcohzATestEmptyConstraint.test_empty_constraint.<locals>.constraintlcoh  s'    88b"XCy12QqT99r+   r   r   r  )r  rE   r1  r  r#   r/   r   r6   r
  )	r
   r   rw   r   r   r   absr2   r   )
r%   rY  r[  r]  r_  ra  rc  
startpointr#   r  s
             r(   test_empty_constraintz)TestEmptyConstraint.test_empty_constraint  s    	%	0		1	1	: )R);^M
 "X
"&&266'*RVVRVV,<=

!l
 	"#fhh-1a&1A1Mr+   N)rS   rT   rU   rV   rf  r0   r+   r(   rV  rV    s    %Nr+   rV  c                  H   d } t         j                  j                         5 }|j                  t               t        j
                  t        j                  ddg            }d d d        t        dt         j                        }t        | ddgz  |       y # 1 sw Y   7xY w)Nc                 $    | d   dz  | d   dz  z   S rA   r0   rB   s    r(   optztest_bug_11886.<locals>.opt  s    tQwqtQwr+   r/   r   r.   )r  )
r   testingr	   r  PendingDeprecationWarningmatrixr   r   rw   r   )ri  r  r   lin_conss       r(   test_bug_11886rn    sv     
	%	%	'3

,-IIbggq!fo& 
(  2rvv.HS!QC%x0 
(	's   A BB!z(Known bug in trust-constr; see gh-11649.T)reasonstrictc                  l   t        ddgddgd      fdfd} fd}fd}t        j                  d	      }t        |d
t        j                        t        |dd      g}t        | |d|      }|j                  sJ  |j                         |d   j                  |d   j                  |j                        cxk  r|d   j                  k  sJ  J t         ||j                        |d   j                         t        | |d|      }t        |j                  |j                         y )Nr   r/   T)lbubrP  c                     t        j                  | j                  k\        sJ t        j                  | j                  k        sJ y r^   )r   allrr  rs  )r2   bndss    r(   assert_inboundsz%test_gh11649.<locals>.assert_inbounds  s7    vva477l###vva477l###r+   c                      |        t        j                  | d         d| d   dz  z  d| d   dz  z  z   d| d   z  | d   z  z   d| d   z  z   dz   z  S )Nr   r6   r.   r/   )r   expr2   rw  s    r(   rO  ztest_gh11649.<locals>.obj  sf    vvad|QqtQwY1Q472QqtVAaD[@1QqT6IAMNNr+   c                 0     |        | d   dz  | d   z   S rA   r0   rz  s    r(   nceztest_gh11649.<locals>.nce  s!    tQw1~r+   c                 *     |        | d   | d   z  S )Nr   r/   r0   rz  s    r(   nciztest_gh11649.<locals>.nci  s    tAaDyr+   )gGz?gGzr  )r3   r   r  r#   r  r   slsqp)r   r   r   r
   rw   r   rH  r2   rr  r3   rs  r   )	rO  r|  r~  r   nlcsr$  refrw  rv  s	          @@r(   test_gh11649r    s    b"X1a&=D$O 
-	 BS"&&1Q*,D sr.D2C;;;CEE7::QCEE*7T!WZZ77777CJQ

+
sr'D2CCGGSWW%r+   c            	         d} t        j                  t        |       5  t        j                  d      }t        j
                  d      j                  d      t        j                  d      c}t        fd||      }t        t        |d	|g
       d d d        t        j                  j                         5 }|j                  t               t        t        d	gddi       d d d        y # 1 sw Y   ]xY w# 1 sw Y   y xY w)Nz:...more equality constraints than independent variables...r:  )r.      )r   r.   )r   c                     | z  S r^   r0   )r2   r   s    r(   rE  z3test_gh20665_too_many_constraints.<locals>.<lambda>  s	    4!8r+   )rr  rs  r  )r  r  factorization_methodSVDFactorization)r  r  options)r  r<  r_   r   r   r   reshaper
   r   r   rj  r	   r  r  )r  r   r   gr  r   s        @r(   !test_gh20665_too_many_constraintsr    s     KG	z	1WWT]YYq\))&12774=
d 3F>sC	 
2 
	%	%	'3

;>s02DE	G 
(	' 
2	1 
(	's   A5C0:-C<0C9<Dc                   |   e Zd Zej                  j                  d eej                   ej                         e	       j                  f eej                   d      ddgf edej                        ddgf eddgddg      ddgfg      d        Zd	 Zd
 Zd Zej                  j                  d      d        Zy)TestBoundedNelderMeadzbounds, x_optgg      @g      "@r         @      @c                 `   t               }t               5 }|j                  t        d       t	        |j
                  ddgd|      }t        j                  |j                  |j                        j                         sJ t        j                  |j                  |j                        j                         sJ t        j                  |j                  |j                        |j
                        sJ t        j                  |j                  |d      sJ 	 d d d        y # 1 sw Y   y xY w)N0Initial guess is not within the specified boundsr  Nelder-Meadr  r#   gMbP?)atol)r   r	   r  r  r   r3   r   
less_equalrr  r2   ru  rs  allclose)r%   r#   r    r   r  r  s         r(   test_rosen_brock_with_boundsz2TestBoundedNelderMead.test_rosen_brock_with_bounds  s     | CJJ{ %; <dhhc
%2%+-F ==FHH599;;;==699599;;;;;txx16::>>>;;vxxU;;; !  s   DD$$D-c                 "   t               }t        ddgddg      }t               5 }|j                  t        d       t        |j                  ddgd|      }t        j                  |j                  ddg      sJ 	 d d d        y # 1 sw Y   y xY w)Nr  r  r  r     r  r  
r   r   r	   r  r  r   r3   r   r  r2   r%   r   r#   r  r  s        r(   test_equal_all_boundsz+TestBoundedNelderMead.test_equal_all_bounds  s~    |c
S#J/ CJJ{ %; <dhha%2%+-F ;;vxx#s444 !     ABBc                 "   t               }t        ddgddg      }t               5 }|j                  t        d       t        |j                  ddgd|      }t        j                  |j                  dd	g      sJ 	 d d d        y # 1 sw Y   y xY w)
Nr  r  g      4@r  r  r  r  r  g      0@r  r  s        r(   test_equal_one_boundsz+TestBoundedNelderMead.test_equal_one_bounds  s~    |c
S$K0 CJJ{ %; <dhha%2%+-F ;;vxx#t555 !  r  c                     t               }d}t        j                  t        |      5  t	        t
        j                   dgddg      }t        |j                  ddgd|	       d d d        y # 1 sw Y   y xY w)
Nz:An upper bound is less than the corresponding lower bound.r:  r   r  g      r  r   r  r  )	r   r  r<  r_   r   r   rw   r   r3   r%   r   r  r#   s       r(   test_invalid_boundsz)TestBoundedNelderMead.test_invalid_bounds*  s\    |N]]:W5bffWcNS$K8FTXXQx)"$ 655   ;A,,A5z5Failing on Azure Linux and macOS builds, see gh-13846)ro  c                     t               }d}t        j                  t        |      5  t	        t
        j                   dgddg      }t        |j                  ddgd|	       d d d        y # 1 sw Y   y xY w)
Nr  r:  r   r  r  r  r  r  r  )	r   r  warnsr  r   r   rw   r   r3   r  s       r(   test_outside_bounds_warningz1TestBoundedNelderMead.test_outside_bounds_warning3  s^     |D\\+W5bffWcNS#J7FTXXQx)"$ 655r  N)rS   rT   rU   r  rS  rT  r   r   rw   r   r    r  r  r  r  r  r  r0   r+   r(   r  r    s    [[_%rvvgrvv6
8J8JK%rvvgt4tTlC%c2662S#J?%sCj3*=BxH !<!<	5	6$ [[ - .$.$r+   r  )&numpyr   r  scipy.linalgr   scipy.sparser   numpy.testingr   r   r   r   r	   scipy.optimizer
   r   r   r   r   r   r   r   rY   rj   ru   r   r   r   r   r   r   rV  rn  rS  r  r  r  r  r0   r+   r(   <module>r     s      # #. .# # #*9 *9Z39 39l,9 ,9^+A +A\+ +\/Z /,.
 ."4z 44|? |?~G! G!R2N 2Nj	1 D    &  &FG =$ =$r+   