
    doim                     z   S SK r S SKrS SKrS SKJr  S SKJr  S SKJ	r	J
r
Jr  S SKJrJrJrJrJrJrJr   " S S5      r " S S	5      r " S
 S5      r " S S5      r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S5      r " S S5      r " S S5      rS rS r S r!S r" " S  S!5      r#g)"    N)
block_diag)	csc_array)assert_array_almost_equalassert_array_lessassert_)NonlinearConstraintLinearConstraintBoundsminimizeBFGSSR1rosenc                   D    \ rS rSrSrS
S jrS rS rS r\	S 5       r
S	rg)Maratos   Problem 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                     US-  [         R                  -  n[         R                  " U5      [         R                  " U5      /U l        [         R
                  " SS/5      U l        X l        X0l        S U l	        g N         ?        
nppicossinx0arrayx_opt
constr_jacconstr_hessboundsselfdegreesr    r!   radss        j/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/optimize/tests/test_minimize_constrained.py__init__Maratos.__init__   V    s{255 66$<.XXsCj)
$&    c                 <    SUS   S-  US   S-  -   S-
  -  US   -
  $ N   r       r$   xs     r'   funMaratos.fun"   s0    !A$'AaD!G#a'(1Q4//r+   c                 P    [         R                  " SUS   -  S-
  SUS   -  /5      $ N   r   r/   r   r   r1   s     r'   gradMaratos.grad%   s*    xx1Q41QqT6*++r+   c                 4    S[         R                  " S5      -  $ Nr7   r.   r   eyer1   s     r'   hessMaratos.hess(       {r+   c                     S nU R                   c  S nOU R                   nU R                  c  S nOU R                  n[        USSX#5      $ )Nc                 $    U S   S-  U S   S-  -   $ Nr   r.   r/   r0   r2   s    r'   r3   Maratos.constr.<locals>.fun-       Q47QqT1W$$r+   c                 $    SU S   -  SU S   -  //$ r-   r0   rE   s    r'   jacMaratos.constr.<locals>.jac1        1Q41Q4())r+   c                 @    SUS   -  [         R                  " S5      -  $ Nr.   r   r=   r2   vs     r'   r?   Maratos.constr.<locals>.hess7       1vbffQi''r+   r/   r    r!   r   r$   r3   rI   r?   s       r'   constrMaratos.constr+   R    	% ??"* //C#( ##D"31c88r+   r"   r!   r    r   r   <   NN__name__
__module____qualname____firstlineno____doc__r(   r3   r9   r?   propertyrT   __static_attributes__r0   r+   r'   r   r      s/    0, 9 9r+   r   c                   J    \ rS rSrSrSS jrS rS rS rS r	\
S	 5       rS
rg)MaratosTestArgs?   r   Nc                 
   US-  [         R                  -  n[         R                  " U5      [         R                  " U5      /U l        [         R
                  " SS/5      U l        X@l        XPl        Xl	        X l
        S U l        g r   )r   r   r   r   r   r   r   r    r!   abr"   )r$   rf   rg   r%   r    r!   r&   s          r'   r(   MaratosTestArgs.__init__G   s`    s{255 66$<.XXsCj)
$&r+   c                 X    U R                   U:w  d  U R                  U:w  a
  [        5       eg N)rf   rg   
ValueError)r$   rf   rg   s      r'   
_test_argsMaratosTestArgs._test_argsQ   s$    66Q;$&&A+, &r+   c                 ^    U R                  X#5        SUS   S-  US   S-  -   S-
  -  US   -
  $ r-   )rl   r$   r2   rf   rg   s       r'   r3   MaratosTestArgs.funU   s<    !A$'AaD!G#a'(1Q4//r+   c                 r    U R                  X#5        [        R                  " SUS   -  S-
  SUS   -  /5      $ r6   )rl   r   r   ro   s       r'   r9   MaratosTestArgs.gradY   s6    xx1Q41QqT6*++r+   c                 V    U R                  X#5        S[        R                  " S5      -  $ r<   )rl   r   r>   ro   s       r'   r?   MaratosTestArgs.hess]   s     {r+   c                     S nU R                   c  S nOU R                   nU R                  c  S nOU R                  n[        USSX#5      $ )Nc                 $    U S   S-  U S   S-  -   $ rD   r0   rE   s    r'   r3   #MaratosTestArgs.constr.<locals>.func   rG   r+   c                 $    SU S   -  SU S   -  //$ r6   r0   rE   s    r'   rI   #MaratosTestArgs.constr.<locals>.jacg   rK   r+   c                 @    SUS   -  [         R                  " S5      -  $ rM   r=   rN   s     r'   r?   $MaratosTestArgs.constr.<locals>.hessm   rQ   r+   r/   rR   rS   s       r'   rT   MaratosTestArgs.constra   rV   r+   )rf   rg   r"   r!   r    r   r   rX   )r[   r\   r]   r^   r_   r(   rl   r3   r9   r?   r`   rT   ra   r0   r+   r'   rc   rc   ?   s4    0, 9 9r+   rc   c                   N    \ rS rSrSrS
S jrS r\S 5       rS r	\S 5       r
S	rg)MaratosGradInFuncu   r   Nc                     US-  [         R                  -  n[         R                  " U5      [         R                  " U5      /U l        [         R
                  " SS/5      U l        X l        X0l        S U l	        g r   r   r#   s        r'   r(   MaratosGradInFunc.__init__}   r*   r+   c                     SUS   S-  US   S-  -   S-
  -  US   -
  [         R                  " SUS   -  S-
  SUS   -  /5      4$ )Nr.   r   r/   r7   r8   r1   s     r'   r3   MaratosGradInFunc.fun   s\    1Q47QqT1W$q()AaD0!AaD&(AadF+,. 	.r+   c                     g)NTr0   r$   s    r'   r9   MaratosGradInFunc.grad   s    r+   c                 4    S[         R                  " S5      -  $ r<   r=   r1   s     r'   r?   MaratosGradInFunc.hess   rA   r+   c                     S nU R                   c  S nOU R                   nU R                  c  S nOU R                  n[        USSX#5      $ )Nc                 $    U S   S-  U S   S-  -   $ rD   r0   rE   s    r'   r3   %MaratosGradInFunc.constr.<locals>.fun   rG   r+   c                 $    SU S   -  SU S   -  //$ r6   r0   rE   s    r'   rI   %MaratosGradInFunc.constr.<locals>.jac   rK   r+   c                 @    SUS   -  [         R                  " S5      -  $ rM   r=   rN   s     r'   r?   &MaratosGradInFunc.constr.<locals>.hess   rQ   r+   r/   rR   rS   s       r'   rT   MaratosGradInFunc.constr   rV   r+   rW   rX   )r[   r\   r]   r^   r_   r(   r3   r`   r9   r?   rT   ra   r0   r+   r'   r~   r~   u   s>    .   9 9r+   r~   c                   D    \ rS rSrSrS
S jrS rS rS r\	S 5       r
S	rg)HyperbolicIneq   zProblem 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                 ~    SS/U l         SS/U l        Xl        X l        [	        S[
        R                  5      U l        g )Nr   g~T>?g~1[?)r   r   r    r!   r
   r   infr"   )r$   r    r!   s      r'   r(   HyperbolicIneq.__init__   s6    a&)
$&Q'r+   c                 <    SUS   S-
  S-  -  SUS   S-
  S-  -  -   $ )N      ?r   r.   r/   r0   r1   s     r'   r3   HyperbolicIneq.fun   s/    AaD1Hq= 3!s
Q#666r+   c                 "    US   S-
  US   S-
  /$ )Nr   r.   r/   r   r0   r1   s     r'   r9   HyperbolicIneq.grad   s    !q!A$*%%r+   c                 .    [         R                  " S5      $ Nr.   r=   r1   s     r'   r?   HyperbolicIneq.hess   s    vvayr+   c                     S nU R                   c  S nOU R                   nU R                  c  S nOU R                  n[        US[        R                  X#5      $ )Nc                 $    SU S   S-   -  U S   -
  $ )Nr/   r   r0   rE   s    r'   r3   "HyperbolicIneq.constr.<locals>.fun   s    adQh<!A$&&r+   c                 $    SU S   S-   S-  -  S//$ )Nr   r/   r.   r0   rE   s    r'   rI   "HyperbolicIneq.constr.<locals>.jac   s!    QqTAXM)2.//r+   c                 d    SUS   -  [         R                  " SU S   S-   S-  -  S/SS//5      -  $ )Nr.   r   r/      r8   rN   s     r'   r?   #HyperbolicIneq.constr.<locals>.hess   sE    1vbhhAaD1Hq=!(<)*A(0 1 1 1r+   g      ?r    r!   r   r   r   rS   s       r'   rT   HyperbolicIneq.constr   sV    	' ??"0 //C#1 ##D"3bffc@@r+   rW   )NNrZ   r0   r+   r'   r   r      s1    (7& A Ar+   r   c                   D    \ rS rSrSrS
S jrS rS rS r\	S 5       r
Srg	)
Rosenbrock   zRosenbrock function.

The following optimization problem:
    minimize sum(100.0*(x[1:] - x[:-1]**2.0)**2.0 + (1 - x[:-1])**2.0)
c                     [         R                  R                  U5      nUR                  SSU5      U l        [         R
                  " U5      U l        S U l        g )Nr   r/   )r   randomRandomStateuniformr   onesr   r"   )r$   nrandom_staterngs       r'   r(   Rosenbrock.__init__   s@    ii##L1++b!Q'WWQZ
r+   c                     [         R                  " U5      n[         R                  " SUSS  US S S-  -
  S-  -  SUS S -
  S-  -   SS9nU$ )Ng      Y@r/   r          @r   axis)r   asarraysum)r$   r2   rs      r'   r3   Rosenbrock.fun   sZ    JJqMFF5AabEAcrFCK/#55QsVc8IIr+   c                 8   [         R                  " U5      nUSS nUS S nUSS  n[         R                  " U5      nSX#S-  -
  -  SXBS-  -
  -  U-  -
  SSU-
  -  -
  USS& SUS   -  US   US   S-  -
  -  SSUS   -
  -  -
  US'   SUS   US   S-  -
  -  US'   U$ )	Nr/   r   r.        pr   )r   r   
zeros_like)r$   r2   xmxm_m1xm_p1ders         r'   r9   Rosenbrock.grad   s    JJqMqW#2!"mmABM*EEM*R/023q2v,?Ab	!!qtQw/!q1Q4x.@A22)*B
r+   c                    [         R                  " U5      n[         R                  " SUS S -  S5      [         R                  " SUS S -  S5      -
  n[         R                  " [	        U5      UR
                  S9nSUS   S-  -  SUS   -  -
  S-   US'   S	US'   S
SUSS S-  -  -   SUSS  -  -
  USS& U[         R                  " U5      -   nU$ )Nr   r   r/   r   )dtypei  r   r.   r      )r   
atleast_1ddiagzeroslenr   )r$   r2   Hdiagonals       r'   r?   Rosenbrock.hess   s    MM!GGD1Sb6M1%afb(AA88CF!''2QqT1WnsQqTz1A5ta"gqj00312;>2!!r+   c                     g)Nr0   r0   r   s    r'   rT   Rosenbrock.constr   s    r+   r"   r   r   N)r.   r   rZ   r0   r+   r'   r   r      s/    
  r+   r   c                   2    \ rS rSrSrSS jr\S 5       rSrg)IneqRosenbrock   zRosenbrock 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    [         R                  U SU5        SS/U l        SS/U l        S U l        g )Nr.   r         gn?g$?r   r(   r   r   r"   r$   r   s     r'   r(   IneqRosenbrock.__init__	  s2    D!\2t*f%
r+   c                 H    SS//nSn[        U[        R                  * U5      $ Nr/   r.   r	   r   r   )r$   Arg   s      r'   rT   IneqRosenbrock.constr  s'    VHBFF7A..r+   r   Nr   	r[   r\   r]   r^   r_   r(   r`   rT   ra   r0   r+   r'   r   r      s      / /r+   r   c                   "    \ rS rSrSrSS jrSrg)BoundedRosenbrocki  a  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                 |    [         R                  U SU5        SS/U l        S U l        [	        SS/SS/5      U l        g )Nr.   gɿg?r   r   )r   r(   r   r   r
   r"   r   s     r'   r(   BoundedRosenbrock.__init__   s<    D!\2+
b!Wq!f-r+   r   Nr   )r[   r\   r]   r^   r_   r(   ra   r0   r+   r'   r   r     s    .r+   r   c                   2    \ rS rSrSrSS jr\S 5       rSrg)EqIneqRosenbrocki'  a  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    [         R                  U SU5        SS/U l        SS/U l        S U l        g )Nr.   r   r   gWs`?g|\*?r   r   s     r'   r(   EqIneqRosenbrock.__init__1  s2    D!\2t*w'
r+   c                 n    SS//nSnSS//nSn[        U[        R                  * U5      [        X4U5      4$ r   r   )r$   A_ineqb_ineqA_eqb_eqs        r'   rT   EqIneqRosenbrock.constr7  sH    a&Ax "&&&9 T24 	4r+   r   Nr   r   r0   r+   r'   r   r   '  s      4 4r+   r   c                   T    \ rS rSrSr  SS jrS rS rS rS r	S	 r
\S
 5       rSrg)EleciA  a  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                    Xl         [        R                  R                  U5      U l        U R                  R                  SS[        R                  -  U R                   5      nU R                  R                  [        R                  * [        R                  U R                   5      n[        R                  " U5      [        R                  " U5      -  n[        R                  " U5      [        R                  " U5      -  n[        R                  " U5      n	[        R                  " XxU	45      U l
        S U l        X0l        X@l        S U l        g )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(   Elec.__init__O  s    &99((6hhq!bee)T-=-=>  "%%0@0@AFF5MBFF3K'FF5MBFF3K'FF5M))Q1I&
$&r+   c                     US U R                    nXR                   SU R                   -   nUSU R                   -  S  nX#U4$ r   r   )r$   r2   x_coordy_coordz_coords        r'   _get_cordinatesElec._get_cordinates_  sS    %T%%&$$Q)9)9%9:A((()*((r+   c                 z    U R                  U5      u  p#nUS S 2S 4   U-
  nUS S 2S 4   U-
  nUS S 2S 4   U-
  nXVU4$ rj   r  )r$   r2   r   r   r  dxdydzs           r'   _compute_coordinate_deltasElec._compute_coordinate_deltase  sZ    $($8$8$;!'QW'QW'QW'rzr+   c                    U R                  U5      u  p#n[        R                  " SS9   US-  US-  -   US-  -   S-  nS S S 5        SW[        R                  " U5      '   S[        R                  " U5      -  $ ! , (       d  f       N@= f)Nignoredivider.   r   r   r   )r	  r   errstatediag_indices_fromr   )r$   r2   r  r  r  dm1s         r'   r3   Elec.funl  sw    44Q7
[[)q52q5=2q5(T1C *)*B  %&RVVC[   *)s   A88
Bc                    U R                  U5      u  p#n[        R                  " SS9   US-  US-  -   US-  -   S-  nS S S 5        SW[        R                  " U5      '   [        R                  " X%-  SS9* n[        R                  " X5-  SS9* n[        R                  " XE-  SS9* n[        R
                  " XgU45      $ ! , (       d  f       N= f)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'   r9   	Elec.grads  s    44Q7
[[)q52q5=2q5(T1C *)*B  %&&&**&&**&&**yy&&122 *)s   B??
Cc           	         U R                  U5      u  p#nUS-  US-  -   US-  -   S-  n[        R                  " SS9   US-  nUS-  nS S S 5        [        R                  " U R                  5      nSWX4'   SWX4'   USUS-  -  U-  -
  n	[        R
                  " U	S	S
9* XU4'   SU-  U-  U-  n
[        R
                  " U
S	S
9* XU4'   SU-  U-  U-  n[        R
                  " US	S
9* XU4'   USUS-  -  U-  -
  n[        R
                  " US	S
9* XU4'   SU-  U-  U-  n[        R
                  " US	S
9* XU4'   USUS-  -  U-  -
  n[        R
                  " US	S
9* XU4'   [        R                  " [        R                  " XU45      [        R                  " XU45      [        R                  " XU45      45      nU$ ! , (       d  f       GN= f)Nr.   r   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?   	Elec.hess  s   44Q7
URU]RU"s*[[)r'Cr'C * IId&&'AD	AD	AAIO#VVCa((qD	2glS VVCa((qD	2glS VVCa((qD	AAIO#VVCa((qD	2glS VVCa((qD	AAIO#VVCa((qD	IIIIso&IIso&IIso&
  A *)s   G  
Gc                    ^  U 4S jnT R                   c  U 4S jnOT R                   nT R                  c  S nOT R                  n[        U[        R                  * SX#5      $ )Nc                 T   > TR                  U 5      u  pnUS-  US-  -   US-  -   S-
  $ )Nr.   r/   r  )r2   r   r   r  r$   s       r'   r3   Elec.constr.<locals>.fun  s9    (,(<(<Q(?%GgA:
*WaZ7!;;r+   c                   > TR                  U 5      u  pnS[        R                  " U5      -  nS[        R                  " U5      -  nS[        R                  " U5      -  n[        [        R                  " XEU45      5      $ r   )r  r   r   r   r   )r2   r   r   r  JxJyJzr$   s          r'   rI   Elec.constr.<locals>.jac  si    ,0,@,@,C)')))))) BB<!899r+   c                 L    S[         R                  " U5      -  n[        X"U5      $ r   )r   r   r   )r2   rO   Ds      r'   r?   Elec.constr.<locals>.hess  s     
N!!**r+   r   r   rS   s   `   r'   rT   Elec.constr  sY    	< ??": //C#+ ##D"3C>>r+   )r"   r!   r    r   r   r   r   )r   r   NN)r[   r\   r]   r^   r_   r(   r  r	  r3   r9   r?   r`   rT   ra   r0   r+   r'   r   r   A  sB     67.2 )!3$L ? ?r+   r   c                      \ rS rSr\" 5       \" SS9\" \" 5       S9\" S\" 5       S9\" 5       \" 5       \" SS9\" \" 5       S9\" S\" 5       S9\	" 5       \
" 5       \" 5       \" 5       \" SS9\" SSS9\" S\" 5       S9\" SS\" 5       S	9/r\R                   R#                  S
\5      \R                   R#                  SS5      \R                   R#                  SSSS S S 45      S 5       5       5       rS rS rS rS rS rS rS rS rSrg)TestTrustRegionConstri  2-point)r!   )r    r!   3-pointr.   r   )r   r!   )r   r    r!   probr9   )	prob.gradr8  Fr?   	prob.hessc                      [        5       $ rj   )r   r0   r+   r'   <lambda>TestTrustRegionConstr.<lambda>  s    cer+   c                      [        SS9$ )Ndamp_updateexception_strategyr   r0   r+   r'   r=  r>    	    dm.Tr+   c                      [        SS9$ )Nskip_updaterA  rC  r0   r+   r'   r=  r>    rD  r+   c                 L   US:X  a  UR                   OUn[        U5      (       a  U" 5       OUnUS:X  a  UR                  OUnUS;   a  US;   a  [        R                  " S5        UR                   SL a  US;   a  [        R                  " S5        [        U[        5      =(       a    US	:H  =(       a    [        U[        5      nU(       a  [        R                  " S
5        [        R                  " 5          [        R                  " SS[        5        [        UR                  UR                  SX#UR                   UR"                  S9nS S S 5        UR$                  bE  ['        WR(                  UR$                  SS9  UR*                  S:X  a  [-        UR.                  S5        WR*                  S:X  a<  [-        UR0                  S5        UR2                  S:X  a  [-        UR4                  S5        SUR*                   S3nUR*                  S;  d   U5       eg ! , (       d  f       N= f)Nr:  r;  >   Fcsr7  r8  >   rH  r7  r8  z+Numerical Hessian needs analytical gradientT>   Fr8  z6prob.grad incompatible with grad in {'3-point', False}r8  z3Seems sensitive to initial conditions w/ Accelerater  delta_grad == 0.0trust-constrmethodrI   r?   r"   constraints   decimalr/   :0yE>r.   tr_interior_pointzInvalid termination condition: .>   r   r   )r9   callabler?   pytestskip
isinstancer   r   xfailwarningscatch_warningsfilterwarningsUserWarningr   r3   r   r"   rT   r   r   r2   statusr   
optimality	tr_radiusrL  barrier_parameter)r$   r9  r9   r?   	sensitiveresultmessages          r'   test_list_of_problems+TestTrustRegionConstr.test_list_of_problems  s    !K/tyyT!$tvT K/tyyT7744KKEF99);!;KKPQ&78 0TY=N 0#D$/ 	LLNO$$&##H.A;Odhh%3"&%)[[*.++	7F ' ::!%fhh

./1 }}!!&"3"3T:==Af..5}} 33!&":":DA 4FMM?!D}}F*3G3*/ '&s   4AH
H#c                 T    S nS/n[        US/USS9n[        UR                  SSS9  g )	Nc                     U S-
  S-  $ r   r0   rE   s    r'   r3   <TestTrustRegionConstr.test_default_jac_and_hess.<locals>.fun      Ea<r+   r   r.   r  rJ  )r   r"   rL  r/   rN  rO  r   r   r2   r$   r3   r"   ress       r'   test_default_jac_and_hess/TestTrustRegionConstr.test_default_jac_and_hess  s0    	 svf^L!#%%A6r+   c                 V    S nS/n[        US/USSS9n[        UR                  SSS	9  g )
Nc                     U S-
  S-  $ r   r0   rE   s    r'   r3   4TestTrustRegionConstr.test_default_hess.<locals>.fun
  ri  r+   rj  r  rJ  r7  )r   r"   rL  rI   r/   rN  rO  rk  rl  s       r'   test_default_hess'TestTrustRegionConstr.test_default_hess	  s5    	 svf^$&!#%%A6r+   c                    [        5       n[        UR                  UR                  SUR                  UR
                  S9n[        UR                  UR                  SSS9n[        UR                  UR                  SSS9n[        UR                  UR                  SS9  [        UR                  UR                  SS9  [        UR                  UR                  SS9  g )	NrJ  )rL  rI   r?   zL-BFGS-Br7  )rL  rI   r8  rN  rO  )	r   r   r3   r   r9   r?   r   r2   r   )r$   r9  rb  result1result2s        r'   test_no_constraints)TestTrustRegionConstr.test_no_constraints  s    |$((DGG!/"iidii9 488TWW",(* 488TWW",(* 	"&((DJJB!'))TZZC!'))TZZCr+   c           
        ^ [        5       mU4S jn[        TR                  TR                  STR                  UTR
                  TR                  S9nTR                  b  [        UR                  TR                  SS9  UR                  S:X  a  [        UR                  S5        UR                  S:X  a<  [        UR                  S5        UR                  S:X  a  [        UR                  S5        UR                  S	;   a  [!        S
5      eg )Nc                 H   > TR                  U 5      nUR                  U5      $ rj   )r?   dot)r2   pr   r9  s      r'   hessp/TestTrustRegionConstr.test_hessp.<locals>.hessp$  s    		!A558Or+   rJ  )rL  rI   r~  r"   rM  r.   rO  r/   rQ  rR  r   r   Invalid termination condition.)r   r   r3   r   r9   r"   rT   r   r   r2   r]  r   r^  r_  rL  r`  RuntimeError)r$   r~  rb  r9  s      @r'   
test_hessp 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                 &   [        SS5      n[        UR                  UR                  SSUR                  UR
                  UR                  UR                  S9nUR                  b  [        UR                  UR                  SS9  UR                  S:X  a  [        UR                  S	5        UR                  S:X  a<  [        UR                  S	5        UR                  S
:X  a  [        UR                   S	5        UR                  S;   a  [#        S5      eg )Nrf      )rf   r  rJ  rK  r.   rO  r/   rQ  rR  r  r  )rc   r   r3   r   r9   r?   r"   rT   r   r   r2   r]  r   r^  r_  rL  r`  r  )r$   r9  rb  s      r'   	test_args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           
          [        5       nSn[        R                  " [        US9   [	        UR
                  UR                  SSSUR                  S9  S S S 5        g ! , (       d  f       g = f)Nz9Whenever the gradient is estimated via finite-differencesmatchrJ  r7  )rL  rI   r?   rM  )r   rU  raisesrk   r   r3   r   rT   )r$   r9  rc  s      r'   test_raise_exception*TestTrustRegionConstr.test_raise_exceptionV  sI    yM]]:W5TXXtww~9#> 655s   -A
A*c           	          S n[        S S/S S USS9n[        UR                  S5      5        [        UR                  S	S
5      S:H  5        [        UR                  SS
5      S:H  5        g )Nc                 <    [        SU;   5        [        SU;   5        g )Nnitniter)r   )r2   infos     r'   callback7TestTrustRegionConstr.test_issue_9044.<locals>.callbackb  s    ETM"GtO$r+   c                     U S-  $ r   r0   rE   s    r'   r=  7TestTrustRegionConstr.test_issue_9044.<locals>.<lambda>f  s    AqDr+   r   c                     SU -  $ r   r0   rE   s    r'   r=  r  f  s    QqSr+   c                     gr   r0   rE   s    r'   r=  r  g  s    r+   rJ  )rI   r?   r  rL  successr  r   r/   r  )r   r   get)r$   r  rb  s      r'   test_issue_9044%TestTrustRegionConstr.test_issue_9044]  sh    
	% .1#=*X!/1 	

9%&

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

7B'1,-r+   c                 n   [         R                  " SS/5      nS n[        [         R                  " SS/5      [         R                  " SS/5      SS9n[        R                  " 5          [        R
                  " SS[        5        [        S	UUUS
9nS S S 5        WS   (       d   eg ! , (       d  f       N= f)Nr   r   c                 ,    U S   nU S   nUS-  US-  -   $ )Nr   r/   r.   r0   )r2   x1x2s      r'   obj3TestTrustRegionConstr.test_issue_15093.<locals>.objx  s'    1B1B7R1W$$r+   r   T)keep_feasibler  rI  rJ  )rL  r3   r   r"   r  )r   r   r
   rY  rZ  r[  r\  r   )r$   r   r  r"   rb  s        r'   test_issue_15093&TestTrustRegionConstr.test_issue_15093p  s     XXr3i 	%
 "b*BHHb"X,>&*, $$&##H.A;O%	F ' i    '&s   ()B&&
B4r0   N)r[   r\   r]   r^   r   r   r~   r   r   r   r   r   r   r   list_of_problemsrU  markparametrizerd  rn  rs  rx  r  r  r  r  r  ra   r0   r+   r'   r6  r6    s:   	I6CE29#%H)+&(&9=&46:&)376;"&((*)++	B>y),0#1( [[V%56[[V%DE[[Vk9m&T&T&V W%4W F 7
%4P77D A:A0>.&!r+   r6  c                       \ rS rSrSrS rSrg)TestEmptyConstrainti  a  
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           
         S nS nS nS nS nS n[        US[        R                  XV5      nSS/n[        [        R                  * [        R                  * /[        R                  [        R                  /5      n[	        UUS	UUU/US
9n	[        [        U	R                  5      [        R                  " SS/5      SS9  g )Nc                 $    U S   S-  U S   S-  -   $ rD   r0   rE   s    r'   function;TestEmptyConstraint.test_empty_constraint.<locals>.function  rG   r+   c                 J    [         R                  " SU S   -  SU S   -  /5      $ )Nr   r   r/   r8   rE   s    r'   functionjacobianCTestEmptyConstraint.test_empty_constraint.<locals>.functionjacobian  s&    88R!Wb1g.//r+   c                     SU-  $ )Nr   r0   rN   s     r'   functionhvp>TestEmptyConstraint.test_empty_constraint.<locals>.functionhvp  s    a4Kr+   c                 N    [         R                  " U S   S-  U S   S-  -
  /5      $ rD   r8   rE   s    r'   
constraint=TestEmptyConstraint.test_empty_constraint.<locals>.constraint  s)    88QqT1WqtQw./00r+   c                 L    [         R                  " SU S   -  SU S   -  //5      $ )Nr.   r   r   r/   r8   rE   s    r'   constraintjacobianETestEmptyConstraint.test_empty_constraint.<locals>.constraintjacobian  s)    88a!fb1g./00r+   c                 F    [         R                  " SS/SS//5      US   -  $ )Nr   r   g       r   r8   rN   s     r'   constraintlcohATestEmptyConstraint.test_empty_constraint.<locals>.constraintlcoh  s'    88b"XCy12QqT99r+   r   r   rJ  )rL  rI   r~  rM  r"   r/   r   r7   rO  )	r   r   r   r
   r   r   absr2   r   )
r$   r  r  r  r  r  r  
startpointr"   rb  s
             r'   test_empty_constraint)TestEmptyConstraint.test_empty_constraint  s    	%	0		1	1	: )R);M
 "X
"&&266'*RVVRVV,<=

!l
 	"#fhh-1a&1A1Mr+   r0   N)r[   r\   r]   r^   r_   r  ra   r0   r+   r'   r  r    s    %Nr+   r  c                  J   S n [         R                  " 5          [         R                  " S[        5        [        R
                  " [        R                  " SS/5      5      nS S S 5        [        WS[        R                  5      n[        U SS/-  US9  g ! , (       d  f       N9= f)Nc                 $    U S   S-  U S   S-  -   $ rD   r0   rE   s    r'   opttest_bug_11886.<locals>.opt  s    tQwqtQwr+   r  r/   r   r.   )rM  )
rY  rZ  simplefilterPendingDeprecationWarningr   matrixr   r	   r   r   )r  r   lin_conss      r'   test_bug_11886r    st     
	 	 	"h(ABIIbggq!fo& 
#  2rvv.HS!QC%x0 
#	"s   AB
B"c                    ^^ [        SS/SS/SS9mU4S jmU4S jn U4S jnS nU4S	 jn[        R                  " S
5      n[        US[        R                  5      [        USSUS9/n[        XSTUS9nT" UR                  5        US   R                  US   R                  UR                  5      s=:  a  US   R                  :  d   e   eg )Nr   r/   T)lbubr  c                    > [         R                  " U TR                  :  5      (       d   e[         R                  " U TR                  :*  5      (       d   eg rj   )r   allr  r  )r2   bndss    r'   assert_inbounds%test_gh11649.<locals>.assert_inbounds  s=    vva477l####vva477l####r+   c                    > T" U 5        [         R                  " U S   5      SU S   S-  -  SU S   S-  -  -   SU S   -  U S   -  -   SU S   -  -   S-   -  $ )Nr   r7   r.   r/   )r   expr2   r  s    r'   r  test_gh11649.<locals>.obj  sf    vvad|QqtQwY1Q472QqtVAaD[@1QqT6IAMNNr+   c                 0   > T" U 5        U S   S-  U S   -   $ rD   r0   r  s    r'   ncetest_gh11649.<locals>.nce  s!    tQw1~r+   c                 >    [         R                  " SU S   -  S/5      $ r-   r8   rE   s    r'   nce_jactest_gh11649.<locals>.nce_jac  s    xx1Q4$$r+   c                 *   > T" U 5        U S   U S   -  $ )Nr   r/   r0   r  s    r'   ncitest_gh11649.<locals>.nci  s    tAaDyr+   )gGz?gGz)rI   rJ  )r3   r   rL  r"   rM  r   )
r
   r   r   r   r   r   r2   r  r3   r  )	r  r  r  r  r   nlcsrm  r  r  s	          @@r'   test_gh11649r    s     b"X1a&=D$O% 
-	 BS"&&1Qw79D s.D2CCEE7::QCEE*7T!WZZ77777r+   c            	        ^ Sn [         R                  " [        U S9   [        R                  " S5      n[        R
                  " S5      R                  S5      [        R                  " S5      smn[        U4S jX"S9n[        [        US	U/S
9  S S S 5        [        R                  " 5          [        R                  " S[        5        [        [        WS	W/SS0S9  S S S 5        g ! , (       d  f       N\= f! , (       d  f       g = f)Nz:...more equality constraints than independent variables...r  )r.      )r   r.   )r   c                    > TU -  $ rj   r0   )r2   r   s    r'   r=  3test_gh20665_too_many_constraints.<locals>.<lambda>  s	    4!8r+   )r  r  rJ  rL  rM  r  factorization_methodSVDFactorization)rL  rM  options)rU  r  rk   r   r   r  reshaper   r   r   rY  rZ  r  r\  )rc  r   r   gr   s       @r'   !test_gh20665_too_many_constraintsr    s     KG	z	1WWT]YYq\))&12774=
d 3F>sC	 
2 
	 	 	"h4>s02DE	G 
#	" 
2	1 
#	"s   A2C%,0C6%
C36
Dc                  V   S n S n[         R                  " 5          [         R                  " SS[        5        [         R                  " SS[        5        [	        USS/S[        U SS5      S	9nS S S 5        WR                  (       d  UR                  S
:  d   eg ! , (       d  f       N2= f)Nc                 J    U u  pSS/u  p4SUS-  US-  -  -   US-  US-  -  -
  $ )N      @      @r   r.   r0   )uu1u2rf   rg   s        r'   lsftest_issue_18882.<locals>.lsf  s<    SzRUQT\!BEAqDL00r+   c                 4    [         R                  " U S-  5      $ r   )r   r   )r  s    r'   oftest_issue_18882.<locals>.of  s    vvad|r+   r  rI  zSingular Jacobian matrix.r   rJ  r   r  rQ  )rY  rZ  r[  r\  r   r   r  constr_violation)r  r  rm  s      r'   test_issue_18882r    s    1
 
	 	 	"*={K*E{S#J!+CA6	
 
# #"6"6"=>>"= 
#	"s   AB
B(c                   ~   \ rS rSr\R
                  R                  S\" \R                  * \R                  5      \
" 5       R                  4\" \R                  * S5      SS/4\" S\R                  5      SS/4\" SS/SS/5      SS/4/5      S	 5       rS
 rS rS r\R
                  R!                  SS9S 5       rSrg)TestBoundedNelderMeadi  zbounds, x_optgr  g      "@r   r        @c                    [        5       n[        R                  " 5          Sn[        R                  " SU[        5        [        UR                  SS/SUS9n[        R                  " UR                  UR                  5      R                  5       (       d   e[        R                  " UR                  UR                  5      R                  5       (       d   e[        R                  " UR                  UR                  5      UR                  5      (       d   e[        R                  " UR                  USS9(       d   e S S S 5        g ! , (       d  f       g = f)N0Initial guess is not within the specified boundsr  r  Nelder-MeadrL  r"   gMbP?)atol)r   rY  rZ  r[  r\  r   r3   r   
less_equalr  r2   r  r  allclose)r$   r"   r   r9  msgrb  s         r'   test_rosen_brock_with_bounds2TestBoundedNelderMead.test_rosen_brock_with_bounds  s     |$$&DC##Hc;?dhhc
%2%+-F ==FHH599;;;;==699599;;;;;;txx16::>>>>;;vxxU;;; '&&s   DE		
Ec                 T   [        5       n[        SS/SS/5      n[        R                  " 5          [        R                  " SS[
        5        [        UR                  SS/SUS9n[        R                  " UR                  SS/5      (       d   e S S S 5        g ! , (       d  f       g = f)	Nr  r  r  r  r     r  r  r   r
   rY  rZ  r[  r\  r   r3   r   r  r2   r$   r9  r"   rb  s       r'   test_equal_all_bounds+TestBoundedNelderMead.test_equal_all_bounds&  s    |c
S#J/$$&##B dhha%2%+-F ;;vxx#s4444 '&&   AB
B'c                 T   [        5       n[        SS/SS/5      n[        R                  " 5          [        R                  " SS[
        5        [        UR                  SS/SUS	9n[        R                  " UR                  SS
/5      (       d   e S S S 5        g ! , (       d  f       g = f)Nr  r  g      4@r  r  r  r  r  r  g      0@r  r  s       r'   test_equal_one_bounds+TestBoundedNelderMead.test_equal_one_bounds3  s    |c
S$K0$$&##B dhha%2%+-F ;;vxx#t5555 '&&r  c                     [        5       nSn[        R                  " [        US9   [	        [
        R                  * S/SS/5      n[        UR                  SS/SUS	9  S S S 5        g ! , (       d  f       g = f)
Nz:An upper bound is less than the corresponding lower bound.r  r   r  g      r  r   r  r  )	r   rU  r  rk   r
   r   r   r   r3   r$   r9  rc  r"   s       r'   test_invalid_bounds)TestBoundedNelderMead.test_invalid_bounds@  s\    |N]]:W5bffWcNS$K8FTXXQx)"$ 655   8A''
A5z5Failing on Azure Linux and macOS builds, see gh-13846)reasonc                     [        5       nSn[        R                  " [        US9   [	        [
        R                  * S/SS/5      n[        UR                  SS/SUS	9  S S S 5        g ! , (       d  f       g = f)
Nr  r  r   r  r  r  r  r  r  )	r   rU  warnsr\  r
   r   r   r   r3   r  s       r'   test_outside_bounds_warning1TestBoundedNelderMead.test_outside_bounds_warningI  s^     |D\\+W5bffWcNS#J7FTXXQx)"$ 655r  r0   N)r[   r\   r]   r^   rU  r  r  r
   r   r   r   r   r  r  r  r  rX  r  ra   r0   r+   r'   r  r    s    [[_%rvvgrvv6
8J8JK%rvvgt4tTlC%c2662S#J?%sCj3*=BxH !<!<56$ [[ - .$.$r+   r  )$rY  numpyr   rU  scipy.linalgr   scipy.sparser   numpy.testingr   r   r   scipy.optimizer   r	   r
   r   r   r   r   r   rc   r~   r   r   r   r   r   r   r6  r  r  r  r  r  r  r0   r+   r'   <module>r#     s       # "7 7# # #*9 *9Z39 39l,9 ,9^+A +A\+ +\/Z /,.
 ."4z 44|? |?~H! H!T2N 2Nj	1 8FG?(A$ A$r+   