
    ^Mh                       d Z ddl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mZmZ ddlZddlmZ ddlZddlmZ ddlmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7 ej8        j9        Z9d Z: G d d          Z; G d de;          Z<d Z=d Z>d Z?d Z@d ZAd ZBd ZCej8        jD        d             ZEej8        jD        d             ZFd  ZG G d! d"e<          ZH G d# d$e<          ZI G d% d&e<          ZJ G d' d(e<          ZK G d) d*e;          ZLej8        M                    d+g d,          d-             ZN G d. d/          ZO G d0 d1          ZP G d2 d3          ZQd4 ZR G d5 d6          ZSd7 ZTd8 ZUd9 ZVd: ZWd; ZXe4 G d< d=                      ZYd> ZZd? Z[d@ Z\dAdBgZ]dCdDgZ^dEZ_dF Z` G dG dH          ZadI ZbdJ ZcdK ZddL Ze G dM dN          Zfej8        jD        ej8        g                    dO          dP                         Zh G dQ dR          ZidS Zj G dT dU          Zkejl        dV             ZmdW ZndX ZodY ZpdZ Zqd[ Zr er            Zsej8        t                    d\          ej8        u                     ejv        d]^          d_         d`         da         dbk    d\c          ej8        M                    d+esdd                   ej8        M                    deesde                   ej8        M                    dfesdg                   ej8        M                    dhesdh                   ej8        M                    diesdj                   dk                                                                                     Zwej8        M                    d+esdd                   dl             Zxdm Zydn Zzdo Z{dp Z| G dq dr          Z}ds Z~dt Zej8        M                    d+dudvg          ej8        M                    dwe-e.e/e0e1e2g          dx                         ZdS )yzx
Unit tests for optimization routines from optimize.py

Authors:
   Ed Schofield, Nov 2005
   Andrew Straw, April 2008

    N)assert_allcloseassert_equalassert_almost_equalassert_no_warningsassert_warnsassert_array_lesssuppress_warnings)raises)optimize)BoundsNonlinearConstraint)MINIMIZE_METHODSMINIMIZE_METHODS_NEW_CBMINIMIZE_SCALAR_METHODS)LINPROG_METHODS)ROOT_METHODS)ROOT_SCALAR_METHODS)QUADRATIC_ASSIGNMENT_METHODS)ScalarFunction
FD_METHODS)
MemoizeJacshow_optionsOptimizeResult)rosen	rosen_der
rosen_hess)
coo_matrix
csc_matrix
csr_matrix	coo_array	csr_array	csc_array)array_api_compatible)xp_assert_equalarray_namespacec            
      v   d } d }t          j        dg          }t          j        | ||          }t	          |d           t          j        | ||dd          }t	          |d           t          j        | ||d	          }t	          |d           t          j        | ||ddd
          }t	          |d           t          t          j        | ||d	          dz
            }|dk    sJ t          t          j        | ||ddd
          dz
            }|dk    sJ d }d }t          j        ddd          }t          j        |||dd          }t	          |d           t          t          t          j        |||dd           t          j        t          t          t          dd          }|dk     sJ d S )Nc                 8    ddt          j        |            z   z  S N   npexpxs    b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_optimize.pyexpitztest_check_grad.<locals>.expit.   s    Ar

N##    c                 d    t          j        |            dt          j        |            z   dz  z  S Nr)      r*   r-   s    r/   	der_expitz"test_check_grad.<locals>.der_expit1   s*    vqbzzQ^a///r1         ?r   random  )	directionseedư>)epsilon)r<   r9   rng皙?Hz>c                 T    | t          j        |           z                                  S N)r+   sinsumr-   s    r/   x_sinxztest_check_grad.<locals>.x_sinxJ   s     "&))  """r1   c                 Z    t          j        |           | t          j        |           z  z   S rA   r+   rB   cosr-   s    r/   
der_x_sinxz#test_check_grad.<locals>.der_x_sinxM   s!    vayy1RVAYY;&&r1   r4   皙?)r9   r=   random_projectionallgƠ>)r+   arrayr   
check_gradr   absarangeassert_raises
ValueErrorhimmelblau_gradhimmelblau_hesshimmelblau_x0)r0   r5   x0rrD   rH   s         r/   test_check_gradrW   *   s%   $ $ $0 0 0 
3%BE9b11A1E9b&.T	; 	; 	;A1E9b$???A1E9b$&.D	: 	: 	:A1 	Hy"dCCCaGHHAt8888Hy"d*2> > >@AB 	C 	CAt8888# # #' ' ' 
1a		BFJ&.D	: 	: 	:A1*h1*b/T; ; ; ;
 	O_m&+	7 	7 	7At888888r1   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )CheckOptimizez Base test case for a simple constrained entropy maximization problem
    (the machine translation example of Berger et al in
    Computational Linguistics, vol 22, num 1, pp 39--72, 1996.)
    c                    t          j        g dg dg dg dg dg          | _        t          j        g d          | _        t          j        dt           j                  | _        t          j        g d          | _        d| _        t          j
                    | _        t          j
                    | _        t          j
                    | _        d S )	Nr)   r)   r)   )r)   r)   r   )r)   r   r)   )r)   r   r   )      ?333333?      ?   )        g\g)3?  )r+   rL   FKzerosfloat64startparamssolutionmaxiter	threadinglocal	funccalls	gradcallstraceselfs    r/   setup_methodzCheckOptimize.setup_methodf   s    999$99$99$99$99	& ' '
 ...))8Arz22!@!@!@AA"**"**_&&


r1   c                 j   t          | j        d          sd| j        _        t          | j        d          sd| j        _        | j        xj        dz  c_        | j        j        dk    rt	          d          t          j        | j        |          }t          j        t          t          j
        |                              }|t          j        | j        |          z
  }t          | j        d          sg | j        _        | j        j                            t          j        |                     |S )Ncr   r)   ip  z+too many iterations in optimization routinet)hasattrrk   rr   rl   RuntimeErrorr+   dotrb   logrC   r,   rc   rm   rs   appendcopy)ro   r.   log_pdotlogZfs        r/   funczCheckOptimize.funct   s   t~s++ 	! DNt~s++ 	! DNA>d""LMMM6$&!$$vc"&**++,,26$&!$$$tz3'' 	DJL
BGAJJ'''r1   c                    t          | j        d          sd| j        _        | j        xj        dz  c_        t          j        | j        |          }t          j        t          t          j        |                              }t          j        ||z
            }t          j        | j        	                                |          | j
        z
  S )Nrr   r   r)   )rt   rl   rr   r+   rv   rb   rw   rC   r,   	transposerc   ro   r.   rz   r{   ps        r/   gradzCheckOptimize.grad   s    t~s++ 	! DNA6$&!$$vc"&**++,,F8d?##vdf&&((!,,tv55r1   c                    t          j        | j        |          }t          j        t	          t          j        |                              }t          j        ||z
            }t          j        | j        j        t          j        t          j        |          | j        t          j        | j        j        |          z
                      S rA   )r+   rv   rb   rw   rC   r,   Tdiagr   s        r/   hesszCheckOptimize.hess   s    6$&!$$vc"&**++,,F8d?##vdfhfRWQZZ"&12E2E)EFFH H 	Hr1   c                 R    t          j        |                     |          |          S rA   )r+   rv   r   ro   r.   r   s      r/   hesspzCheckOptimize.hessp   s    vdiillA&&&r1   N)	__name__
__module____qualname____doc__rp   r}   r   r   r    r1   r/   rY   rY   `   sl         
' ' '  $6 6 6H H H' ' ' ' 'r1   rY   c                   x   e Zd Zd Zd Zd Zd Zd Zd Ze	j
                            d          d             Zd	 Zd
 Zd Ze	j
                            ddgddgddgddgg          d             Zd Ze	j
                            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#S )$CheckOptimizeParameterizedc           
         | j         re| j        | j        dd}t          j        | j        | j        dd| j        |          }|d         |d         |d         |d	         |d
         f\  }}}}}n=t          j        | j        | j        | j        d| j        d| j        d          }|\  }}}}}t          |                     |          |                     | j
                  d           | j        j        dk    sJ | j        j                    | j        j        dk    sJ | j        j                    t          | j        j        dd         g dg dgdd           d S )NFrh   disp
return_allr   CG)argsmethodjacoptionsr.   funnfevnjevstatusT)rh   full_outputr   retallr;   atol	      r4      )r         r^   )r   g;ӱ.g)`$|;?+=r?   r   rtol)use_wrapperrh   r   r   minimizer}   rf   r   fmin_cgr   rg   rk   rr   rl   rm   rs   )	ro   optsresparamsfopt
func_calls
grad_callswarnflagretvals	            r/   test_cgz"CheckOptimizeParameterized.test_cg   s    	F#|TY"') )D#DIt/?b+/TY,02 2 2C C#e*c&k3v;HM ;FD*j(( %di1A&*iT\26TY-24 4 4F @F<VT:z8		&))499T]+C+C!	# 	# 	# 	#
 ~1$$$dn&6$$$~1$$$dn&6$$$ 	
QqS)'===?"	/ 	/ 	/ 	/ 	/ 	/r1   c                     d }t          j        ddd          D ];}t          j        ||gd          }|j        sJ t          |j        dgd	           <d S )
Nc                 H    ddt          j        d| dz
  z            z
  dz  z  S )Ng      @r)         r^   r4   r*   )rV   s    r/   r|   z8CheckOptimizeParameterized.test_cg_cornercase.<locals>.f   s)    !bfT1s7^444q888r1   g      r_   G   r   r   r^   h㈵>r   )r+   linspacer   r   successr   r.   )ro   r|   rU   sols       r/   test_cg_cornercasez-CheckOptimizeParameterized.test_cg_cornercase   s}    	9 	9 	9
 +eQ++ 	5 	5B#AtD999C;CEC5t44444	5 	5r1   c           
         | j         ru| j        | j        dd}t          j        | j        | j        | j        dd|          }|d         |d         |d         |d	         |d
         |d         |d         f\  }}}}}}}	n?t          j        | j        | j        | j        d| j        d| j        d          }
|
\  }}}}}}}	t          |                     |          |                     | j
                  d           | j        j        dk    sJ | j        j                    | j        j        dk    sJ | j        j                    t          | j        j        dd         g dg dgdd           d S )NFr   BFGSr   r   r   r   r   r.   r   r   hess_invr   r   r   Tr   rh   r   r   r   r;   r   
         )r   g&/LgB__E7?)r   g$g
|3?r   r?   r   )r   rh   r   r   r   r}   rf   r   	fmin_bfgsr   rg   rk   rr   rl   rm   rs   )ro   r   r   r   r   goptHoptr   r   r   r   s              r/   	test_bfgsz$CheckOptimizeParameterized.test_bfgs   s    	8#|TY"') )D#DIt/?(,	&r,02 2 2C
 Hc%j#e*c*oKVc(mJ=FFD$j*hh '	43CTY-/48ty/46 6 6F
 28/VT4X		&))499T]+C+C!	# 	# 	# 	#
 ~2%%%t~'7%%%~1$$$dn&6$$$ 	
QqS)======?"	/ 	/ 	/ 	/ 	/ 	/r1   c                    t          j        t          d          5  t          j        g d          }| j        t          j        d           d}t          j        t          j	        |dd|           d d d            d S # 1 swxY w Y   d S )	N+'hess_inv0' matrix isn't positive definite.matchg?ffffff?皙?ffffff?333333?   r   	hess_inv0r   r   rU   r   r   r   )
pytestr
   rQ   r+   rL   r   eyer   r   r   )ro   rU   r   s      r/   test_bfgs_hess_inv0_negz2CheckOptimizeParameterized.test_bfgs_hess_inv0_neg   s     ]: .0 1 1 1 	, 	,33344B IRVAYYJ??DhnF&*, , , ,		, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   AB  BBc                 &   t          j        t          d          5  t          j        g d          }t          j        d          }d|d<   | j        |d}t          j        t          j	        |dd	|
           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r   r   r   r   r   r   r   )
r   r
   rQ   r+   rL   r   r   r   r   r   )ro   rU   r   r   s       r/   test_bfgs_hess_inv0_semiposz6CheckOptimizeParameterized.test_bfgs_hess_inv0_semipos   s     ]: .0 1 1 1 	, 	,33344Bq		IIdO II>>DhnF&*, , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   ABB
B
c                 2   t           j        }t          j        g d          }| j        dt          j        d          z  d}t          j        ||dd|          }t          j        ||ddd| j        i          }t          |j        |j        d	
           d S )Nr   {Gz?r   r   r   r   r   r   r;   r   )	r   r   r+   rL   r   r   r   r   r   )ro   r   rU   r   r   res_trues         r/   test_bfgs_hess_inv0_sanityz5CheckOptimizeParameterized.test_bfgs_hess_inv0_sanity   s    nX///00	rvayy0@AA6(,. . .$SRR.4di-@B B BD999999r1   ignore::UserWarningc           	      V   d fd}dg}t          j        d          5  | j        r*d| j        i}t	          j        ||dd|	          d
         }nt	          j        ||| j                  }t          j         |                    rJ 	 d d d            d S # 1 swxY w Y   d S )Nc                 $    t           j        |  z   S rA   )r+   er-   s    r/   r}   z;CheckOptimizeParameterized.test_bfgs_infinite.<locals>.func  s    DaRL= r1   c                      |            S rA   r   )r.   r}   s    r/   fprimez=CheckOptimizeParameterized.test_bfgs_infinite.<locals>.fprime  s    DGG8Or1   r   ignore)overr   r   r   r   r.   r   )r+   errstater   r   r   r   r   isfinite)ro   r   rU   r   r.   r}   s        @r/   test_bfgs_infinitez-CheckOptimizeParameterized.test_bfgs_infinite	  s.   	! 	! 	!	 	 	 	 	S[h''' 	, 	, I	*%dBF6+-t= = ==@B &tRdiHHH{4477++++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   A.BB"%B"c                     g d}t          j        t           j        |dddi          }t          j        t           j        |dddi          }|j        |j        k    sJ d S )Nr   bfgsxrtolMbP?r   r   gtolr   r   r   nit)ro   rU   r   refs       r/   test_bfgs_xrtolz*CheckOptimizeParameterized.test_bfgs_xrtol  sz    &&& "6GT?L L L "6FD>K K Kw#'!!!!!!r1   c                     g d}t          j        t           j        |dddi          }t          j        t           j        |dddi          }|j        |j        k    sJ d S )Ng$@g333334@g%@r   333333r   c1:0yE>r   r>   )r   r   r   r   )ro   rU   res_c1_small
res_c1_bigs       r/   test_bfgs_c1z'CheckOptimizeParameterized.test_bfgs_c1#  s     +**()+FT4LR R R&x~')&4,P P P
  :?222222r1   c                     g d}t          j        t           j        |dddi          }t          j        t           j        |dddi          }|j        |j        k    sJ d S )Nr   r   c2?r   r   r   )ro   rU   res_defaultres_mods       r/   test_bfgs_c2z'CheckOptimizeParameterized.test_bfgs_c2.  s|     '&&'(*6D":O O O#HN$&vd|M M M,,,,,,r1   r   r  r^   r4   皙r>   rI   c           	          t          j        t          d          5  g d}t          j        t          j        |d||d           d d d            d S # 1 swxY w Y   d S )Nz'c1' and 'c2'r   r   cg)r   r  r   )r   r
   rQ   r   r   r   )ro   r   r  rU   s       r/   test_invalid_c1_c2z-CheckOptimizeParameterized.test_invalid_c1_c28  s     ]:_=== 	< 	<...Bhnb-/r&:&:< < < <	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   *AAAc           	         | j         rg| j        | j        dd}t          j        | j        | j        dd|          }|d         |d         |d         |d	         |d
         |d         f\  }}}}}}n8t          j        | j        | j        d| j        d| j        d          }	|	\  }}}}}}t          |                     |          |                     | j	                  d           t          |dd          | j	        dd          d           | j
        j        dk    sJ | j
        j                    | j        j        dk    sJ | j        j                    d S )NFr   r   Powellr   r   r   r.   r   direcr   r   r   Tr   r;   r   r)   h㈵>   r   )r   rh   r   r   r   r}   rf   fmin_powellr   rg   rk   rr   rl   
ro   r   r   r   r   r  numiterr   r   r   s
             r/   test_powellz&CheckOptimizeParameterized.test_powellA  s    	J#|TY"') )D#DIt/?b+3TC C CC Hc%j#g,E
KXB0>FD%*hh )$)T5E/14<6:168 8 8F DJ@VT5':x		&))499T]+C+C!	# 	# 	# 	# 	qrr
DM!""$5DAAAA ~8+++T^-=+++~1$$$dn&6$$$$$r1   zeThis part of test_powell fails on some platforms, but the solution returned by powell is still valid.reasonc           	         | j         rg| j        | j        dd}t          j        | j        | j        dd|          }|d         |d         |d         |d	         |d
         |d         f\  }}}}}}n8t          j        | j        | j        d| j        d| j        d          }	|	\  }}}}}}t          | j	        dd         g dg dg dg dg dgdd           d S )NFr   r   r  r  r.   r   r  r   r   r   Tr   "   '   )病~W?f"Bܿg%?)r  r  g:&?)gSϼW?gf"Bg{år?)r  r  {år?)gB?r  r  r   r?   r   )
r   rh   r   r   r   r}   rf   r  r   rm   r  s
             r/   test_powell_gh14014z.CheckOptimizeParameterized.test_powell_gh14014c  sD     	J#|TY"') )D#DIt/?b+3TC C CC Hc%j#g,E
KXB0>FD%*hh )$)T5E/14<6:168 8 8F DJ@VT5':x 	
2b5)>>>>>>>>>>>>>>>	@
 #	/ 	/ 	/ 	/ 	/ 	/r1   c                    d | j         D             }| j        r| j        | j        dd}t	          j        | j        | j         d|d|          }|d         |d         }}|| j        j        k    sJ t          |                     |          |                     | j
                  d	d
           | j        j        dk    sJ | j        j        dk    sJ d S d S )Nc                 @    g | ]}t           j         t           j        fS r   )r+   pi).0_s     r/   
<listcomp>zBCheckOptimizeParameterized.test_powell_bounded.<locals>.<listcomp>  s"    <<<aBE625/<<<r1   Fr   r   r  )r   boundsr   r   r.   r   r;   r   r      r   )rf   r   rh   r   r   r   r}   rk   rr   r   rg   rl   )ro   r$  r   r   r   r   s         r/   test_powell_boundedz.CheckOptimizeParameterized.test_powell_bounded  s    =<4+;<<< 	)#|TY"') )D#DIt/?b+1+3TC C CC #&c(CKJF!11111DIIf--tyy/G/G!%D2 2 2 2 >#x////>#q(((('	) 	)& )(r1   c           	         | j         r_| j        | j        dd}t          j        | j        | j        dd|          }|d         |d         |d         |d	         |d
         f\  }}}}}n7t          j        | j        | j        d| j        d| j        d          }|\  }}}}}t          |                     |          |                     | j	                  d           | j
        j        dk    sJ | j
        j                    | j        j        dk    sJ | j        j                    t          | j        j        dd         g dg dgdd           d S )NFr   r   Nelder-meadr  r.   r   r   r   r   Tr   r;   r      r   L   N   )g	dװ?g]fgt䝁?)gә ?g#=^goT?r   r?   r   )r   rh   r   r   r   r}   rf   fminr   rg   rk   rr   rl   rm   rs   )	ro   r   r   r   r   r  r   r   r   s	            r/   test_neldermeadz*CheckOptimizeParameterized.test_neldermead  s    	C#|TY"') )D#DIt/?b+8$H H HC Hc%j#e*c&kM;#7FD':xx ]49d.>(*DL/3$)*/1 1 1F =C9VT7J		&))499T]+C+C!	# 	# 	# 	#
 ~3&&&(8&&&~1$$$dn&6$$$ 	
RU+===>>>@"	/ 	/ 	/ 	/ 	/ 	/r1   c           
      ^   t          j        d          }| j        |d<   t          d          D ]}||dz   |fxx         dz  cc<   | j        r}| j        dd|d}t          j        | j        | j        d	d
|          }|d         |d         |d         |d         |d         f\  }}}}}	t          |d         d         |d                    n3t          j
        | j        | j        d	| j        ddd|          }
|
\  }}}}}	t          |                     |          |                     | j                  d           | j        j        dk    sJ | j        j                    | j        j        dk    sJ | j        j                    t          | j        j        dd         g dg dgdd           d S )N)r   r_   .r_   r)   r>   FTrh   r   r   initial_simplexr   r(  r  r.   r   r   r   r   allvecsr   r   rh   r   r   r   r0  r;   r   d   2   4   )gIt?g?'ΛTgx8?)gҢ_׆?goMg囎|52?r   r?   r   )r+   rd   rf   ranger   rh   r   r   r}   r   r,  rg   rk   rr   rl   rm   rs   )ro   simplexjr   r   r   r   r  r   r   r   s              r/   test_neldermead_initial_simplexz:CheckOptimizeParameterized.test_neldermead_initial_simplex  s   (6""'q 	# 	#AAaCFOOOs"OOOO 	C#|U"&7D DD#DIt/?b+8$H H HC;>s8;>u:;>u:;>v;;>x=	;J7FD':x
 C	N1-wqz::::]49d.>(*DL/3%3:< < <F
 =C9VT7J		&))499T]+C+C!	# 	# 	# 	#
 ~3&&&(8&&&~1$$$dn&6$$$ 	
RU+======?"	/ 	/ 	/ 	/ 	/ 	/r1   c                    g }t          j        d          }| j        d d         |d<   t          d          D ]}||dz   |fxx         dz  cc<   |                    |           t          j        d          }|                    |           |D ]|}| j        r<| j        dd|d}t          t          t          j
        | j        | j        d	d
|           Et          t          t          j        | j        | j        d	| j        ddd|
  
         }d S )N)r_   r4   r4   .r)   r>   )r_   r_   Fr/  r   r(  r  Tr2  )r+   rd   rf   r6  rx   r   rh   rP   rQ   r   r   r}   r,  )ro   bad_simplicesr7  r8  r   s        r/   #test_neldermead_initial_simplex_badz>CheckOptimizeParameterized.test_neldermead_initial_simplex_bad  sL   (6""'+q 	# 	#AAaCFOOOs"OOOOW%%%(6""W%%%$ 	7 	7G 7#'<&+I Ij&/"i".#%%2&*, , , , , j(-"i)9#%t|*.U5.5	7 7 7 7 7	7 	7r1   c                     d }t          j        |dgdgd          }t          |j        dg           t          j        |ddgddgd          }t          |j        ddg           d S )	Nc                 0    t          j        | dz            S Nr4   r+   rC   r-   s    r/   quadz>CheckOptimizeParameterized.test_neldermead_x0_ub.<locals>.quad	      6!Q$<<r1   r)   )r   r\   nelder-meadr$  r   r   r4   )r)         @r   r   r   r.   )ro   rA  r   s      r/   test_neldermead_x0_ubz0CheckOptimizeParameterized.test_neldermead_x0_ub  s    	  	  	  C9 	
 
 
 	s###FW% 	
 
 
 	1v&&&&&r1   c                 z    ddi}t          j        | j        | j        d| j        d|          }|j        dk    sJ d S )Nrh   	Newton-CGr   r   r   r   r   r)   )r   r   r}   rf   r   r   )ro   r   results      r/   test_ncg_negative_maxiterz4CheckOptimizeParameterized.test_ncg_negative_maxiter  sR    2"49d.>*549(*D: : : }!!!!!!r1   c           	          d }d }dg}d}t          j        |||dt          |                    }|j        dk    sJ t	          |j        d         t          j                   d S )Nc                 6    t          j        | d                   S Nr   )r+   rG   r-   s    r/   cosinez=CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.cosine&  s    6!A$<<r1   c                 8    t          j        | d                    S rP  )r+   rB   r-   s    r/   r   z:CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.jac)  s    F1Q4LL= r1   r>   r   	newton-cg)xtol)rU   r   r   r   )r   r   dictr   r   r.   r+   r   )ro   rQ  r   rU   rT  rL  s         r/   test_ncg_zero_xtolz-CheckOptimizeParameterized.test_ncg_zero_xtol$  s    	  	  	 	! 	! 	! U"6&('**5+/T???	< < <
 }!!!!FHQK/////r1   c           
      b   | j         r@| j        | j        dd}t          j        | j        | j        d| j        d|          d         }n5t          j        | j        | j        | j        d| j        d| j        d          }|}t          |                     |          |                     | j
                  d	           | j        j        d
k    sJ | j        j                    | j        j        dk    sJ | j        j                    t          | j        j        dd         g dg dgdd           d S )NFr   rJ  r   rK  r.   r   r;   r   r      r_   r   (6-H=g?g4u3?rZ  g_g/N3?r?   r   )r   rh   r   r   r   r}   rf   r   fmin_ncgr   rg   rk   rr   rl   rm   rs   ro   r   r   r   s       r/   test_ncgz#CheckOptimizeParameterized.test_ncg6  si    
	5#|TY"') )D&ty$2B.9ty,.> > >>ACFF &ty$2BDI,.38ty.35 5 5F
 		&))499T]+C+C!	# 	# 	# 	#
 ~1$$$dn&6$$$~2%%%t~'7%%% 	
QqS)KKKKKKM!	. 	. 	. 	. 	. 	.r1   c                 z   | j         rF| j        | j        dd}t          j        | j        | j        d| j        | j        d|          d         }n;t          j	        | j        | j        | j        | j        d| j        d| j        d	  	        }|}t          |                     |          |                     | j                  d	           | j        j        d
k    sJ | j        j                    | j        j        dk    sJ | j        j                    t          | j        j        dd         g dg dgdd           d S )NFr   rJ  r   )r   r   r   r   r   r.   )fhessr   rh   r   r   r   r;   r   r      r_   r   rY  r[  r?   r   )r   rh   r   r   r   r}   rf   r   r   r\  r   rg   rk   rr   rl   rm   rs   r]  s       r/   test_ncg_hessz(CheckOptimizeParameterized.test_ncg_hessW  sv    	5#|TY"') )D&ty$2B.9ty,0I,.> > > ?BCFF
 &ty$2BDI-1Y,.38ty.3	5 5 5F 		&))499T]+C+C!	# 	# 	# 	#
 ~1$$$dn&6$$$~2%%%t~'7%%%
 	
QqS)KKKKKKM!	. 	. 	. 	. 	. 	.r1   c                 z   | j         rF| j        | j        dd}t          j        | j        | j        d| j        | j        d|          d         }n;t          j	        | j        | j        | j        | j        d| j        d| j        d	  	        }|}t          |                     |          |                     | j                  d	           | j        j        d
k    sJ | j        j                    | j        j        dk    sJ | j        j                    t          | j        j        dd         g dg dgdd           d S )NFr   rJ  r   )r   r   r   r   r   r.   )fhess_pr   rh   r   r   r   r;   r   r   ra  r_   r   rY  r[  r?   r   )r   rh   r   r   r   r}   rf   r   r   r\  r   rg   rk   rr   rl   rm   rs   r]  s       r/   test_ncg_hesspz)CheckOptimizeParameterized.test_ncg_hesspy  sv    	5#|TY"') )D&ty$2B.9ty-1Z,.> > > ?BCFF
 &ty$2BDI/3z,.38ty.3	5 5 5F 		&))499T]+C+C!	# 	# 	# 	#
 ~1$$$dn&6$$$~2%%%t~'7%%%
 	
QqS)KKKKKKM!	. 	. 	. 	. 	. 	.r1   c                    | j         rt          j        | j        | j        d| j        | j        d          }t          |j        |                     | j	                  d           | j
        j        dk    sJ | j
        j                    d S d S )Ncobyqarh   r   r   r;   r   A   )r   r   r   r}   rf   rh   r   r   r   rg   rk   rr   ro   r   s     r/   test_cobyqaz&CheckOptimizeParameterized.test_cobyqa  s     	A#	 $(L$)DD	  C CGTYYt}%=%=DIIII >#w...0@...	A 	A /.r1   N) r   r   r   r   r   r   r   r   r   r   markfilterwarningsr   r   r   r  parametrizer
  r  xfailr  r&  r-  r9  r<  rG  rM  rV  r^  rb  re  rk  r   r1   r/   r   r      s       / / />	5 	5 	5 /  /  /D, , ,
, 
, 
,	: 	: 	: [ 566, , 76, " " "	3 	3 	3- - - [dD\S!H-13K-0#J,8 9 9< <9 9< 7  7  7D [ & ' '/ /' '/@) ) )2/ / />&/ &/ &/P7 7 7>' ' '." " "0 0 0$. . .B .  .  .D .  .  .DA A A A Ar1   r   c            	          t           j                            d          fd} dD ]B}dD ]=}t          j        |                     d          |d|i          }|d         |k    sJ >Cd S )	Nl	   <vgRI*q4 c                 4                         d          dz  S Nr)   ra   r7   )r.   r=   s    r/   costztest_maxfev_test.<locals>.cost  s    zz!}}t##r1   )r)   r   r4  )r  Nelder-Meadr   maxfevr   r   )r+   r7   default_rngr   r   )rt  imaxfevr   rL  r=   s       @r/   test_maxfev_testry    s    
)

 G
H
HC$ $ $ $ $  - - 0 	- 	-F&tSZZ^^.408'/BD D DF &>W,,,,,		-	- -r1   c                     d } t           j                            | t          j        d          d          \  }}t          d          D ]0} |t          j        |                     |d         |dz   k    sJ 1d}t          t           j        j        |          5   |t          j        |                     d d d            n# 1 swxY w Y   t           j                            | t          j        d          d          \  }}d}t          t          |          5   |t          j	        ddg                     d d d            d S # 1 swxY w Y   d S )Nc                     | S rA   r   r-   s    r/   func_z8test_wrap_scalar_function_with_validation.<locals>.func_  s    r1   r)   r   r   zToo many function callsr   @The user-provided objective function must return a scalar value.)
r   	_optimize'_wrap_scalar_function_maxfun_validationr+   asarrayr6  rP   _MaxFuncCallErrorrQ   rL   )r|  fcallsr}   imsgs        r/   )test_wrap_scalar_function_with_validationr    s      %//rz!}}aHH FD 1XX    RZ]]ayAaC
#C	x);3	G	G	G  RZ]]               %//rz!}}aHH FD MC	z	-	-	-  RXq!f                 s$   CC
C
 EEEc                      d} t          t          |           5  t          j        d t	          j        ddg          d           d d d            d S # 1 swxY w Y   d S )Nr}  r   c                     | S rA   r   r-   s    r/   <lambda>z.test_obj_func_returns_scalar.<locals>.<lambda>  s    A r1   r)   r   r   )rP   rQ   r   r   r+   rL   r   s    r/   test_obj_func_returns_scalarr    s    &E 
z	/	/	/ H H++rxA'7'7GGGGH H H H H H H H H H H H H H H H H Hs   -AAAc                      t          j        g d          } t          j                            t          j        | d          }|j        dk    sJ d S )Nr   r   )xatoliS  )r+   rL   r   	_minimize_minimize_neldermeadr   r   )rU   r   s     r/   test_neldermead_iteration_numr    sQ    	+++	,	,B


1
1(."8< 2 > >C7c>>>>>>r1   c                      t          j        ddg                              t           j                  } d }t	          j        || d           d S )N      @      @c                 X    | j         t          j        k    sJ t          j        |           S rA   )dtyper+   float32r   r   r-   s    r/   rosen_z*test_neldermead_respect_fp.<locals>.rosen_  s'    w"*$$$$~a   r1   ru  r   )r+   rL   astyper  r   r   )rU   r  s     r/   test_neldermead_respect_fpr    sT    	3*			$	$RZ	0	0B! ! ! fb777777r1   c                  X    d } t           j                            | ddgddd           d S )Nc                 0    | d         dz  | d         dz  z   S Nr   r4   r)   r   r-   s    r/   r}   z)test_neldermead_xatol_fatol.<locals>.func  s    tqy1Q419$$r1   r)   r4   r   )rh   r  fatol)r   r  r  )r}   s    r/   test_neldermead_xatol_fatolr    sQ    % % % ++D1a&!26d , D D D D Dr1   c                      d } g d}t          j        | |d          }t          |j        d           t          j        | |dddi          }t          |j        d           d S )	Nc                 0    t          j        | dz            S r?  r@  r-   s    r/   r}   z&test_neldermead_adaptive.<locals>.func      va1f~~r1   )gM@'?gOC?g~?g -?g?g#j?g ?g~^g?gܠr#?g^cǽ?g)i	?g'?g?g1?g[VΤ?ru  r   FadaptiveTr   )r   r   r   r   )r}   p0r   s      r/   test_neldermead_adaptiver    s      
F 
F 
FB 
D"]
;
;
;Ce$$$

D"]%/$68 8 8Cd#####r1   c            	         d } d}g d}t          t          j                  5  t          j        | ||d          }d d d            n# 1 swxY w Y   t	          |j        t          j        dgt          |          z            d           t          |j
        d	           t          |j        d
           g dg dg dg}t          t          j                  5  t          j        | ||dd|i          }d d d            n# 1 swxY w Y   t	          |j        t          j        g d          d           t          |j
        d           t          |j        d           d S )Nc                 0    t          j        | dz            S r?  r@  r-   s    r/   r}   z/test_bounded_powell_outsidebounds.<locals>.func  r  r1   )rI  r)   r  r  )r^   gr  rD  r`   r;   r   Tr   r   r   r   )r   r)   r   )r   r   r)   r  )r$  r   r   )g      r   r   Fr   )r   r   OptimizeWarningr   r   r.   r+   rL   lenr   r   r   )r}   r$  rU   r   r  s        r/   !test_bounded_powell_outsideboundsr  
  s   
  &F	B 
h.	/	/ J JbIIIJ J J J J J J J J J J J J J JCE28RD3r77N33$????d###Q YY			999-E	h.	/	/ : :b'-h)0%(8: : :: : : : : : : : : : : : : : : CE28KKK00t<<<<e$$$Qs#   AAADD
Dc                  @   d } d}g d}ddd}t          j        | |d|          }t          |j        dd	
           t          |j        dd	
           t          j        | |||d          }t          j        g d          }t          |j        |d	
           t          |j         | |          d	
           dt
          j         dfdt
          j        fddf}t          j        | |||d          }t          j        g d          }t          |j        |d	
           t          |j         | |          d	
           d } dgdz  }g d}t          j        | |d          }t          j        | ||d          }t          |j        dd	
           t          |j        dd	
           t
          j         t
          j        fgdz  }t          j        | ||d          }t          |j        |j        d	
           t          |j        |j        d	
           t          |j        |j        d	
           g d}dgdz  }t          t           j
                  5  t          j        | ||d          }d d d            n# 1 swxY w Y   t          |j        dd	
           d S )Nc                 0    t          j        | dz            S r?  r@  r-   s    r/   r}   z+test_bounded_powell_vs_powell.<locals>.func3  r  r1   ))rI  )r  )r)   gffffff"@)r  gffffff@g/)g gr   r   r  绽|=ftolrT  r  r   r`   r;   r   )r   r$  r   )rI  r  r)   r   r  )NrI  r  r)   )r  Nr  c                    t          j        | d                    t          j        | d                   z  t          j        | d          | d         z            z  t          j        | d                   z  }|t          j        t          j        | d         | d         z            t          j        | d                   z            z  }|dz  S Nr   r)   r4   rF   r.   rs   s     r/   r}   z+test_bounded_powell_vs_powell.<locals>.funcQ  s    FAaD5MMBF1Q4LL(261Q4%!A$,+?+??"&1,,N	RVBF1Q4!A$;''"&1,,6777!tr1   )r  r   r_   )r   r   r   r   rD  g8:}?r   )gb4F@g:gW?@)r   r   r   r.   r   r+   rL   infr   r   r  )r}   r$  rU   r   
res_powellres_bounded_powellr   s          r/   test_bounded_powell_vs_powellr  *  sx     DF	!	!	!Be,,G"4HgNNNJJL"40000JNBT2222!*4W282:< < < 	%%%&&A&(!$7777&*DDGG$???? 26'3!RVj+MF!*4W282:< < < 	%%%&&A&(!$7777&*DDGG$????
  
 Y]F			B"4H===J!*4282:< < < JN$8tDDDD&*AD9999
 w 1$F!*4282:< < < JN$6$:FFFFJO%7%<4HHHHJL"4"6TBBBB 
2	1	1BY]F	h.	/	/ @ @%.tR6<6>@ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ &*AD999999s   I<<J J c                     dt           j         dfgdz  dddd} g d}d }t          j        ||fi | }t	          |j        d	d
           d }t          j        ||fi | }t	          |j        d           d }t          j        ||fi | }t	          |j        dd           d }t           j         dfgdz  | d<   t          j        ||fi | }t	          |j        dd           d S )Nr  g    .Ar_   r   r  )r   r$  r   r[   c                 ,    t          j        |            S rA   r@  r-   s    r/   r|   z1test_onesided_bounded_powell_stability.<locals>.f  s    q		zr1   g    `F-C6?r   c                     t          j        t          j        |                     dz   t          j        | dk              rdndz  S )Nr>   r   r)   rI  r+   rN   rC   rK   r-   s    r/   r|   z1test_onesided_bounded_powell_stability.<locals>.f  s<    rvayy!!c**26!a%==.HaabIIr1   gwc                     t          j        t          j        |                     dz   t          j        | dk              rdndz  S )Nr   r   r)   rI  r  r-   s    r/   r|   z1test_onesided_bounded_powell_stability.<locals>.f  s<    rvayy!!R''q1u+E112FFr1   gB+Iar?   r   c                    t          j        t          j        | d d                             dz   t          j        t          j        | dd                              dz  z
  }|t          j        | dk              rdndz  }|S )Nr4   r   r>   r   r)   rI  r  r  s     r/   r|   z1test_onesided_bounded_powell_stability.<locals>.f  sq    VBF1RaR5MM""a''"&!""*?*?C*HH	26!a%==(aab)r1   g     @@r$  g 4&k\)r+   r  r   r   r   r   )kwargsrU   r|   r   s       r/   &test_onesided_bounded_powell_stabilityr  w  sd    !6'3(1,"&557 7F 
B  

Ar
,
,V
,
,CCGT----J J J 
Ar
,
,V
,
,CCG_---G G G 
Ar
,
,V
,
,CCG\5555  
 &#'!+F8

Ar
,
,V
,
,CCG9EEEEEEr1   c                       e Zd ZdZdZdS )TestOptimizeWrapperDispTNr   r   r   r   r   r   r1   r/   r  r    s        KDDDr1   r  c                       e Zd ZdZdZdS )TestOptimizeWrapperNoDispTFNr  r   r1   r/   r  r    s        KDDDr1   r  c                       e Zd ZdZdZdS )TestOptimizeNoWrapperDispFTNr  r   r1   r/   r  r    s        KDDDr1   r  c                       e Zd ZdZdZdS )TestOptimizeNoWrapperNoDispFNr  r   r1   r/   r  r    s        KDDDr1   r  c                      e 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                            d          ej                            d          ej                            d          ej                            dg dez             d                                                 Zej                            dg d          d             Zd Zej                            dg d          d             Zej        j        ej                            dg d          d                         Z d  Z!d! Z"d" Z#d# Z$ej                            dg d$          d%             Z%ej                            dg d&          d'             Z&ej                            d          ej                            de'          ej                            d(g d)          d*                                     Z(d+ Z)ej                            dd,          d-             Z*ej        j        ej                            dg d.          d/                         Z+d0S )1TestOptimizeSimplec                     d }d }t           j        g}t          j        dd          5  t          j        |||d          }t          j         ||                    sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                     | S rA   r   r-   s    r/   r}   z.TestOptimizeSimple.test_bfgs_nan.<locals>.func  s    Hr1   c                 *    t          j        |           S rA   r+   	ones_liker-   s    r/   r   z0TestOptimizeSimple.test_bfgs_nan.<locals>.fprime      <??"r1   r   )r   invalidFr   )r+   nanr   r   r   isnan)ro   r}   r   rU   r.   s        r/   test_bfgs_nanz TestOptimizeSimple.test_bfgs_nan  s    	 	 		# 	# 	#fX[h999 	% 	%"4V%@@@A8DDGG$$$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   8A00A47A4c                    d }t          j        d          5  t          j        |d          }d d d            n# 1 swxY w Y   t          j        |d                   sJ |d         du sJ d }d	 }t          j        d          5  t          j        |d|
          }d d d            n# 1 swxY w Y   t          j        |d                   sJ |d         du sJ d S )Nc                     t           j        S rA   r+   r  r-   s    r/   r}   z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.func  	    6Mr1   r   r  r   r   r   Fc                 *    | dk    rdnt           j        S rP  r  r-   s    r/   r}   z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.func  s    Q11BF*r1   c                 *    t          j        |           S rA   r  r-   s    r/   r   z7TestOptimizeSimple.test_bfgs_nan_return.<locals>.fprime  r  r1   )r   )r+   r   r   r   r  )ro   r}   rL  r   s       r/   test_bfgs_nan_returnz'TestOptimizeSimple.test_bfgs_nan_return  s   	 	 	[*** 	0 	0&tQ//F	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 xu&&&&&i E))))	+ 	+ 	+	# 	# 	#[*** 	< 	<&tQF;;;F	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< xu&&&&&i E))))))s   ;??	B--B14B1c                    t          j        t          j        d                    t           j                            t          | j                            z  }t          j        | j	        | j
        |d| j        d          }t          | 	                    |          | 	                    | j                  d           d S )Nr\   r   F)r<   r   rh   r   r;   r   )r+   sqrtspacingr7   randr  rg   r   r   r}   rf   rh   r   )ro   r<   r   s      r/   test_bfgs_numerical_jacobianz/TestOptimizeSimple.test_bfgs_numerical_jacobian  s     '"*R..))BINN3t};M;M,N,NN#DIt/?,3",0LuF F F 			&))499T]+C+C!	# 	# 	# 	# 	# 	#r1   c                    g d}g d}t          j        ||          D ]i\  }}t          j        | j        | j        ||          }t          |                     |j                  |                     | j                  d           jd S )N)r   r   TNC2-point3-pointN)r   r   r;   r   )		itertoolsproductr   r   r}   rf   r   r.   rg   )ro   methodsjacsr   r   rL  s         r/   test_finite_differences_jacz.TestOptimizeSimple.test_finite_differences_jac  s    '''+++$,Wd;; 	' 	'KFC&ty$2B.4#? ? ?FDIIfh//4=1I1I!%' ' ' ' '	' 	'r1   c           	         g d}t           t          j        fz   }t          j        ||          D ]N\  }}|t          j        u r
 |            }t          j        | j        | j        || j        |          }|j	        sJ Og d}|D ][}t          j        t                    5  t          j        | j        | j        || j        d            d d d            n# 1 swxY w Y   \d S )N)trust-constrrJ  	trust-ncgtrust-krylovr   r   r   )r  r  doglegtrust-exact)r   r   r   r  r  r   r}   rf   r   r   r   r
   rQ   )ro   r  hessesr   r   rL  s         r/   test_finite_differences_hessz/TestOptimizeSimple.test_finite_differences_hess  sN    MLLx}..%-gv>> 	" 	"LFDx}$$tvv&ty$2B.4$),02 2 2F >!!!!
 IHH 	- 	-Fz** - -!$)T-=)/TY'+- - - -- - - - - - - - - - - - - - -	- 	-s   )CC	C	c                 b    d }t          j        |dgd          }t          |ddd           d S )Nc                 "    | dk     rdS | d| z  z   S )Nr   gBr\   r   r-   s    r/   r|   z/TestOptimizeSimple.test_bfgs_gh_2169.<locals>.f	  s    1uu&2a4xr1         $@Fr   r\   r  r   r   )r   r   r   )ro   r|   xss      r/   test_bfgs_gh_2169z$TestOptimizeSimple.test_bfgs_gh_2169  sI    	  	  	 
 C5u555Cd666666r1   c                 `    fd}t                      t          j        |dddd           d S )Nc                 d    | d         }|vsJ                      |           d| dz  z  d| z  fS )Nr   r   r4      )add)r.   xpseens     r/   r|   z:TestOptimizeSimple.test_bfgs_double_evaluations.<locals>.f  s>    1BT>>>>HHRLLLad7BqD= r1   r   Tr?   )r   r   tol)setr   r   )ro   r|   r  s     @r/   test_bfgs_double_evaluationsz/TestOptimizeSimple.test_bfgs_double_evaluations  sI    	! 	! 	! 	! 	! uu!T&dEEEEEEr1   c                    t          j        | j        | j        | j        d| j                  }|\  }}}t          |                     |          |                     | j                  d           | j        j	        dk    sJ | j        j	                    | j
        j	        dk    sJ | j
        j	                    t          | j        j        dd         g dg d	gd
d           d S )Nr   )r   rh   r;   r   r   r   r_   )g><gwT볹gUuAX?)r`   gHg!mʲ3?r   r?   r   )r   fmin_l_bfgs_br}   rf   r   rh   r   rg   rk   rr   rl   rm   rs   ro   r   r   r   ds        r/   test_l_bfgs_bz TestOptimizeSimple.test_l_bfgs_b  s
   '	43C(,	04> > > #q		&))499T]+C+C!	# 	# 	# 	#
 ~1$$$dn&6$$$~1$$$dn&6$$$ 	
QqS)DDD6668"	/ 	/ 	/ 	/ 	/ 	/r1   c                     t          j        | j        | j        d| j                  }|\  }}}t          |                     |          |                     | j                  d           d S )NT)approx_gradrh   r;   r   )r   r
  r}   rf   rh   r   rg   r  s        r/   test_l_bfgs_b_numjacz'TestOptimizeSimple.test_l_bfgs_b_numjac3  sz    '	43C4804> > > #q		&))499T]+C+C!	# 	# 	# 	# 	# 	#r1   c                       fd}t          j        | j         j                  }|\  }}}t	                               |                                j                  d           d S )Nc                 X                         |                               |           fS rA   )r}   r   )r.   ro   s    r/   r   z4TestOptimizeSimple.test_l_bfgs_b_funjac.<locals>.fun@  s"    99Q<<1--r1   rh   r;   r   )r   r
  rf   rh   r   r}   rg   )ro   r   r   r   r   r  s   `     r/   test_l_bfgs_b_funjacz'TestOptimizeSimple.test_l_bfgs_b_funjac>  s    	. 	. 	. 	. 	. 'T-=04> > > #q		&))499T]+C+C!	# 	# 	# 	# 	# 	#r1   c                 ~    G d d          } |            }t          j        t           j        ddgd|ddi          }t          |j        d           t          |j        |j                   t          |j        |j                   t          |j        d           |j	        d	u sJ t          |j
        d
           d S )Nc                       e Zd Zd Zd ZdS ):TestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callbackc                 0    d| _         d | _        d | _        d S rP  )r   r   r.   rn   s    r/   __init__zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__init__O  s    r1   c                 f    || _         t          j        |          | _        | xj        dz  c_        d S r(   )r.   r   r   r   r   ro   r.   s     r/   __call__zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__call__T  s-    #>!,,Ar1   Nr   r   r   r  r  r   r1   r/   Callbackr  N  s2          
    r1   r  r`   l-bfgs-brh   r   )r   callbackr   r)   Fz+STOP: TOTAL NO. OF ITERATIONS REACHED LIMIT)r   r   r   r   r   r   r.   r   r   r   message)ro   r  rr   r   s       r/   test_l_bfgs_b_maxiterz(TestOptimizeSimple.test_l_bfgs_b_maxiterK  s    		 		 		 		 		 		 		 		 HJJR)*YND D D 	SWa   CE13'''CGQU+++SZ###{e####S[B	D 	D 	D 	D 	Dr1   c                 j   d| j         d}t          j        | j        | j        d| j        |          }t          |                     |j                  |                     | j                  d           | j	        j
        |j        k    sJ dx| j        _
        | j	        _
        t          j        | j        | j        d|          }| j        j
        |j        k    sJ t          |                     |j                  |                     | j                  d           dx| j        _
        | j	        _
        t          j        | j        | j        d	d|
          }| j        j
        |j        k    sJ t          |                     |j                  |                     | j                  d           d S )NFr   rh   L-BFGS-Br   r   r   r;   r   r   r   r  r   r   r   )rh   r   r   r}   rf   r   r   r.   rg   rl   rr   r   rk   r   )ro   r   rV   ras       r/   test_minimize_l_bfgs_bz)TestOptimizeSimple.test_minimize_l_bfgs_be  s   $,77di)9%/TY&*, , , 			!#		$-(@(@!	# 	# 	# 	#~16)))).//4>+ty$*:&0$@ @ @ ~27****		"$4=)A)A!	# 	# 	# 	# /0/4>+ty$*:	&0$@ @ @~27****		"$4=)A)A!	# 	# 	# 	# 	# 	#r1   c                    d }dD ]}d| j         |d}t          j        | j        | j        d| j        |          }|                     |j                  }||}n||k     sJ t          ||                     | j                  |           d S )N)r>   r  r?   r  F)r   rh   r  r%  r&  r   )	rh   r   r   r}   rf   r   r.   r   rg   )ro   v0r  r   r   vs         r/   test_minimize_l_bfgs_b_ftolz.TestOptimizeSimple.test_minimize_l_bfgs_b_ftol  s    , 	C 	CC!dlCHHD#DIt/?+549,02 2 2C 		#%  Az2vvvvAtyy77cBBBBB	C 	Cr1   c           	          t          j        t           j        t          j        ddg          dt           j        ddd          }|j        rJ d S )Nr   r\   r%  Fr)   )r   maxlsr&  )r   r   r   r+   rL   r   r   )ro   r   s     r/   test_minimize_l_bfgs_maxlsz-TestOptimizeSimple.test_minimize_l_bfgs_maxls  sY    $0E0E'1x7I16(C(CE E E ;r1   c                    t           j        t           j        }g t          j        dd          }fd}d\  }}}t          j        ||||           t          d t          |d                    D                       \  }}||z   }	t          d |                   }
t          j        |||	          \  }}}t          ||
           d S )Nr   ra   c                 H     |           }                     |           |S rA   )rx   )r.   valuer|   valuess     r/   objfunzMTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.objfun  s'    AaDDEMM%   Lr1   )   r3  i,  )r   maxfunc              3   $   K   | ]\  }}||fV  d S rA   r   )r!  r  ys      r/   	<genexpr>zPTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.<genexpr>  s*      AAdaAq6AAAAAAr1   )
r   r   r   r+   fullr
  max	enumerateminr   )ro   grU   r5  lowmediumhighr,  kr7  targetxminr,  r  r|   r4  s                 @@r/   *test_minimize_l_bfgs_b_maxfun_interruptionz=TestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption  s    NWQ	 	 	 	 	 	 )VTvr!DAAAAAAivww&@&@AAAAA1! VDSD\"" .q"QvNNNdA$'''''r1   c                     	 	 dd}g d}t          j        t           j        ||t          d                    }t	          |j        d	d
d
           d S )Nr   r>   r3  c                    |} | |          }	d}
d}d}d}|r|s||k     rd}|dz  }t          t          j        |                    D ]g}||         |z
  ||         |z   fD ]5}t          j        |          }|||<    | |g|R  }|
dz  }
||	k     r|}	|}d}6| ||           |
|
|k    rd} nh|r|s||k     t	          j        |	|||
|dk              S )Nr)   r   TFr   r.   r   r   r   )r6  r+   sizery   r   r   )r   rU   r   rv  stepsizerh   r   r   bestxbestyfuncallsniterimprovedstopdimstestxtestys                     r/   custminz/TestOptimizeSimple.test_custom.<locals>.custmin  sW   ECGGEHEHD 4 EGOO 
 --  C#Cj83U3Z(5JK , , "%&c
 #E 1D 1 1 1 A 5==$)E$)E'+H+ )h&.@.@##  4 EGOO& *u508519O O O Or1   )g?r  r   皙?r   皙?rK  r   r\   r  r  r   Nr>   r3  N)r   r   r   rU  r   r.   )ro   rV  rU   r   s       r/   test_customzTestOptimizeSimple.test_custom  sy    <?*.	O 	O 	O 	O> (''7(,d(;(;(;= = =sD999999r1   c                 p    ddgdfd}ddg}t          j        t           j        ||           d S )N)r  r4   )r   r_   constraintsc                 Z    |d         u sJ |d         u sJ t          j                    S )Nr$  r]  r   r   )r   rU   r   r$  r]  s      r/   rV  z0TestOptimizeSimple.test_gh10771.<locals>.custmin  s>    8$....=)[8888*,,,r1   r)   )r   r$  r]  )r   r   r   )ro   rV  rU   r$  r]  s      @@r/   test_gh10771zTestOptimizeSimple.test_gh10771  su     6"#	- 	- 	- 	- 	- 	-
 V(."W!'[	B 	B 	B 	B 	B 	Br1   c           	      :   d }d }dD ]}|dv rd }n|}t          j        |ddg|d|          }t          j        |ddg|d|          } ||j                   ||j                  k     s.J | d	 ||j                   d
 ||j                               d S )Nc                 4    | \  }}|dz  |dz  z  |dz  z   dz   S )Nr4   r   r)   r   zr.   r9  s      r/   r}   z<TestOptimizeSimple.test_minimize_tol_parameter.<locals>.func  s+    DAqa419q!t#a''r1   c                 n    | \  }}t          j        d|z  |dz  z  d|dz  z  z   d|dz  z  |z  g          S )Nr4   r   r_   r+   rL   rc  s      r/   dfuncz=TestOptimizeSimple.test_minimize_tol_parameter.<locals>.dfunc  sE    DAq8QqSAX!Q$.!Q$q9:::r1   
rC  powellr	  r   rS  r  tnccobylarg  slsqprC  ri  rk  rg  r4   r  )r   r  r   r\   : z vs. )r   r   r.   )ro   r}   rg  r   r   sol1sol2s          r/   test_minimize_tol_parameterz.TestOptimizeSimple.test_minimize_tol_parameter  s   	( 	( 	(	; 	; 	;4 	B 	BF FFF$TAq6s,24 4 4D$TAq6s,24 4 4D4<<$$tv,,...AATVAA44<<AA /...	B 	Br1   r   r   ignore::RuntimeWarningr   )r,  r  r   r   r\  r
  fmin_tnc
fmin_slsqpc                   
 dv rd }n$t           j        }t           j        }t           j        }t	          j        d          }i }                    d          r=t          t                     }dk    rd|d<   nNdk    rd	|d
<   nBdv rd|d<   n8d|d<   n2fd}dk    rt          d	          |d<   nt          d          |d<   dv r||d<   ndv r||d<   ndv r
||d<   ||d<   g 

fd} |||fd|i| t          
          dk    sJ t          d 
D                       sJ t          j        
d          }	t          d |	D                       rJ d S )N)rs  r
  c                 R    t          j        |           t          j        |           fS rA   )r   r   r   r-   s    r/   r}   zDTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.func  s"    ~a(((*<Q*?*???r1   r   r,  rt  r   iterrs  r3  r7  )r,  r  i  rh   c                  0    |d<   t          j        | i |S )Nr   r   r   )akwr   s     r/   routinezGTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.routine#  s"    %8(!2r222r1   rj  r7  r   r  )r\  r   )rS  r   r  r  r  r  r  r   c                     t          | t          j                  rJ                     | t	          j        |           f           d S rA   )
isinstancer   r   rx   r+   ry   )r.   r   r  resultss      r/   r   zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.callback8  s@    !!X%<=====NNArwqzz?+++++r1   r   r4   c              3   L   K   | ]\  }}t          j        ||k              V   d S rA   )r+   rK   r!  r.   r9  s      r/   r:  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>A  s2      66da26!q&>>666666r1   c              3   ^   K   | ](\  }}t          j        |d          |d                    V  )dS )r   N)r+   may_share_memoryr  s      r/   r:  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>C  s;      PP41ar*1Q4166PPPPPPr1   )r   r   r   r   r+   rd   
startswithgetattrrU  r  rK   r  combinationsany)ro   r   r}   r   r   rU   r  r|  r   r  r  s    `        @r/   #test_minimize_callback_copies_arrayz6TestOptimizeSimple.test_minimize_callback_copies_array  s(    222@ @ @ @ >D$C&DXb\\ V$$ 	4h//G%%!"v:%%#&x  222$(y!!$%y!!3 3 3 3 3 $($4$4$4y!!$(OOOy!]"""F8~%%F5MM ( ( (F5M!F6N 	, 	, 	, 	, 	, 	b6686v666 7||a66g66666666 -gq99PP<PPPPPPPPPPr1   rh  c                    d }d }t          j        dg          } ||          }|}|dk    rt          d          nt          d          }|dv rd }t          j        |||||	          }t           ||j                  |j                   |d
k    rt          j	        d            ||j                  |k    sJ d S )Nc                     | dz
  dz  S r3   r   r-   s    r/   r}   z1TestOptimizeSimple.test_no_increase.<locals>.funcL      EA:r1   c                     d| dz
  z  dz  dz
  S )Nr4   r)   rI  r   r-   s    r/   bad_gradz5TestOptimizeSimple.test_no_increase.<locals>.bad_gradO  s     a!e9#a''r1          @rj  r  r}  r  rm  r'  rl  zSLSQP returns slightly worse)
r+   rL   rU  r   r   r   r.   r   r   ro  )	ro   r   r}   r  rU   f0r   r   r   s	            r/   test_no_increasez#TestOptimizeSimple.test_no_increaseE  s    	 	 		( 	( 	(
 Xse__T"XX%+u__$b////$r:J:J:JBBBCbc&(/1 1 1TT#%[[#'***WL7888tCE{{b      r1   c                     d }d }t          j        g d          }t          j        ||dd|d          }t	          |j        t          j        g d          d	z  d
           d S )Nc                 T    t          | t          j        g d          z
  dz            S )N)r\   r  rE  r  r4   )rC   r+   rL   r-   s    r/   r|   z7TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.fd  s+    BH%5%5%5666:;;;r1   c                     t          j        g dg dg          }t          j        t          j        ||           t          j        ddg          z   | g          S )N)rI  rI  rI  rI  )r  r  rI  r   r   )r+   rL   concatenaterv   r.   rz  s     r/   consz:TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.consg  sV    ***,<,<,<=>>A>26!Q<<"(Ar72C2C#CQ"GHHHr1   )r^   r\   r6   r  rl  ineqtyper   r   r]  )r`   r4   r   r   r_   g-q=r   )r+   rL   r   r   r   r.   )ro   r|   r  rU   r   s        r/   test_slsqp_respect_boundsz,TestOptimizeSimple.test_slsqp_respect_boundsb  s    	< 	< 	<	I 	I 	I X((())2g5;D,I,IK K Krx66q8uEEEEEEr1   )ru  r  r   r   rJ  r%  SLSQPr  r  r  r  r  rg  c           	         d}t          j        d          }t          t          j        |dt          j        t          j        d d           }|t          |          d}|dv r|j        |d<   n|dv r|j        |d<   |j	        |d	<   t          j
        |j        |fi |}|j        |k    sJ |j        |j        k    sJ t          |d
          r|j        |j        k    sJ |dk    r|j        dk    sJ d S |dk    r|j        dk    sJ d S d S )Nr   r   r   r  r   )rJ  r   r~  r   r   r  r   rg  r   )r+   rd   r   r   r   r   r   rU  r   r   r   r   r   r   rt   r   ngevr   )ro   r   MAXITERrU   sfr  r   s          r/   test_respect_maxiterz'TestOptimizeSimple.test_respect_maxiterp  sH    Xb\\HNBH4F$/t= = #tG/D/D/DEE^##GF5MM ( ( (GF5MWF6N55f55w'!!!!x27""""3 	'8rw&&&& W:??????x:????  "?r1   )ru  r  r,  r  c           	         t          j        d          }t          t          j        |dt          j        t          j        d d           }ddd}t          j        t          d          5  |
                    d          r%t          t          |          } ||j        |fi | nt          j        |j        |||	           d d d            d S # 1 swxY w Y   d S )
Nr   r   r)   Trh  zMaximum number of iterationsr   r,  r   )r+   rd   r   r   r   r   r   r   warnsRuntimeWarningr  r  r   r   )ro   r   rU   r  r   r|  s         r/   test_runtime_warningz'TestOptimizeSimple.test_runtime_warning  s<    Xb\\HNBH4F$/t= =..\. ?A A A 	N 	N  (( N!(F33..g....!"&"VWMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	Ns   (ACCCc                     d}t           j        }t           j        }t           j        }d }d|df}t	          j        d          }t          j        |||||dt          |                    }|j        |k    sJ d S )	Nr   c                 n    t          j        d| d         z  d| d         z  z
  d| d         z  z
  g          S )NrI   r   皙?r)   Q?r4   rf  r-   s    r/   r   zRTestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints.<locals>.fun  s7    8S1Q4Z#!*4tad{BCDDDr1   r  r  r   r  r  )r]  r   r   r   r   )	r   r   r   r   r+   rd   r   rU  r   )	ro   r  r|   r   r   r   r  rU   r   s	            r/   2test_respect_maxiter_trust_constr_ineq_constraintszETestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints  s     N "	E 	E 	E   Xb\\24St'5(,W(=(=(=? ? ? w'!!!!!!r1   c                 L   d }d }t          j        dg          }t          j        ||          }t          j        ||d|dg          }t          j        ||dg          }t          j        ||d|dgdg	          }t          j        ||d|dgd
g	          }|||||fD ]}	|	j        sJ t          |j        dd           t          |j        dd           t          |j        dd           t          |j        dd           t          |j        dd           d S )Nc                     | dz  S r?  r   r-   s    r/   r|   z6TestOptimizeSimple.test_minimize_automethod.<locals>.f      a4Kr1   c                     | dz
  S r?  r   r-   s    r/   r  z9TestOptimizeSimple.test_minimize_automethod.<locals>.cons  s    q5Lr1   r  r  r  )r]  )r   r   r$  )r]  r$  r)   r   r   r?   r   r4   r   )r+   rL   r   r   r   r   r.   )
ro   r|   r  rU   sol_0sol_1sol_2sol_3sol_4r   s
             r/   test_minimize_automethodz+TestOptimizeSimple.test_minimize_automethod  s   	 	 		 	 	 Xse__!!R((!!Rv>B7D 7D 6E F F F!!R	:::!!R8>t/L/L.M*14 4 4 !!R8>t/L/L.M*14 4 4 5%6 	 	C;......................r1   c                     d }dd}t          j        g d          }t           j                            t	          |                    }t          j        ||||d           d S )Nc                 6    t          j        | |z
  dz            S r?  r@  r.   rr   s     r/   Yz=TestOptimizeSimple.test_minimize_coerce_args_param.<locals>.Y  s    61Q3(###r1   c                     d| |z
  z  S r?  r   r  s     r/   dY_dxzATestOptimizeSimple.test_minimize_coerce_args_param.<locals>.dY_dx  s    ac7Nr1   )r_   r)   r   r)   r   r   r4   r   r   r_   r   r   )r   r   r   rA   )r+   rL   r7   randnr  r   r   )ro   r  r  rr   xinits        r/   test_minimize_coerce_args_paramz2TestOptimizeSimple.test_minimize_coerce_args_param  sx    	$ 	$ 	$	 	 	 	 H66677	A''!UQGGGGGGr1   c                 ,  	
 g d}g d}	
fd}
fd}t          j        ||          D ]\  
}|dv rt          
dz            }nt                      }
dk     r|d	v r6d
gd g	t          j        ||||          }| d
 d	 d| }|j        s
J |            t          |j        dg|           |j        dk    s
J |            
dk    r@|dv rt          	d         d|           É	d         dk    r	d         dk     s
J |            d S )N)gJz5r)   gd~QJ)r   r   r%  rJ  c                    d         3| d         d         k    r!t          | d         d         z
            d<   t          |                                           dk    rt          d          | d         dz
  dz  z  S )Nr   g     @zOptimization stepped far away!r)   r4   )rN   r<  AssertionError)r.   first_step_sizescalerU   s    r/   r|   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.f  s{    q!)adbemm%(11%6%6"1vvzz||c!!$%EFFF!A$(Q&&r1   c                 F    t          j        | d         dz
  z  g          S Nr   r)   rf  )r.   r  s    r/   r?  z7TestOptimizeSimple.test_initial_step_scaling.<locals>.g  s#    8UAaD1H-.///r1   )r   r   r   )r   r  )r%  rJ        r'   rn  r\   err_msgr_   r   g)\(?r^   )	r  r  rU  r   r   r   r   r.   r   )ro   scalesr  r|   r?  r   r   r   r  r  r  rU   s            @@@r/   test_initial_step_scalingz,TestOptimizeSimple.test_initial_step_scaling  s    "!!999	' 	' 	' 	' 	' 	' 	'	0 	0 	0 	0 	0 '.vw?? 	 	ME6''E$J///&&u}}+D!D!DB#fO#Arq,35 5 5C  CC%CC?CCcCCG;'''''CEC5'::::7a<<<<<<u}}^++#OA$6gNNNNN +1-338JQ8N8N8NPW8N8N8N8N ?	 	r1   )rC  ri  r	  r   rS  r  rj  rk  rg  rl  r  r  r  r  r  c                 H   |dk    r|dk    rt          j        d           t          j                            d          dgd }fd}d }d	 }t          j        d
g          }|dv }|dv }	||g}
|r|gn|d g}|	r|gn|d g}|dk    rt          d          nt          d          }t          j        d          5  t                      5 }|	                    t          d           |	                    t          d           |	                    t          d           t          j        |
||          D ]8\  }}}dgt          j        ||||||          }t!          |j        d           9	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr)   rg  z,COBYQA does not support concurrent executionr8   r   c                     t           j        S rA   r  r-   s    r/   r}   z0TestOptimizeSimple.test_nan_values.<locals>.func  r  r1   c                 |    dxx         dz  cc<   d         dk    rt           j        S                                 S r  )r+   r  r  )r.   countr=   s    r/   func2z1TestOptimizeSimple.test_nan_values.<locals>.func2"  s:    !HHHMHHHQx!||vxxzz!r1   c                 ,    t          j        dg          S Nr\   rf  r-   s    r/   r   z0TestOptimizeSimple.test_nan_values.<locals>.grad)  s    8SE??"r1   c                 .    t          j        dgg          S r  rf  r-   s    r/   r   z0TestOptimizeSimple.test_nan_values.<locals>.hess,  s    8cUG$$$r1   r\   rS  r  r  r  r  r  r  r  r  rj  r  r}  r  r   r  delta_grad == 0.*.*does not use Hessian.*.*does not use gradient.*)r   r   r   r   F)r   skipr+   r7   RandomStaterL   rU  r   r	   filterUserWarningr  r  r  r   r   r   r   )ro   r   num_parallel_threadsr}   r  r   r   rU   
needs_grad
needs_hessfuncsgradshesssr   supr|   r?  hr   r  r=   s                      @@r/   test_nan_valuesz"TestOptimizeSimple.test_nan_values  s     !##((:(:KFGGG i##D))	 	 		" 	" 	" 	" 	" 	"	# 	# 	#	% 	% 	% Xse__  7 7
  * *
 u$64,$64,%+u__$b////$r:J:J:J[*** 		1 		1,=,?,? 		13JJ{$7888JJ~'ABBBJJ~'BCCC$,UE5AA 1 11a'211V079 9 9S[%0000	1		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1 		1s7   FB!E?3F?F	FF	FFF)rC  r	  r   r  rj  rk  rg  rl  r  r  r  r  r  c           	      D   d x}}|dv r| j         }|dv r| j        }t          j        d          5  t	                      5 }|                    t          d           t          j        | j	        | j
        |||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          dt          | j        j                            D ]L}t          j        | j        j        |dz
           | j        j        |                   rt!          d|           Md S )	Nr  r  r   r  r  r  r)   zDuplicate evaluations made by )r   r   r+   r   r	   r  r  r   r   r}   rf   r6  r  rm   rs   array_equalru   )ro   r   r   r   r  r  s         r/   test_duplicate_evaluationsz-TestOptimizeSimple.test_duplicate_evaluationsF  s    d - - -)C      9D[*** 	A 	A,=,?,? 	A3JJ{$7888di)9%+4A A A A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A q#djl++,, 	? 	?A~djl1q514:<?CC ?"=V==? ? ??	? 	?s4   B!?B
>B!
B	B!B	B!!B%(B%new_cb_interface)r   r)   r4   c                 v  
 fdd_         fd}fd}d|dk    r
fd}n&|dk    r G 
fd	d
          } |            }n
fd}
fd
d
_        d
_         dgdz  |||d}t          j        di |d|i}|dk    rdz   |dk    r3t          j        di |ddii}	|j        |	j        cxk    rk    sn J n2t          j        di |ddii}	|j        |	j        cxk    rk    sn J |j        |	j        k    sJ t          |j        |	j                   |j	        |dv rdndk    sJ d S )Nc                 :    d_         t          j        |           S NF)flagr   r   r.   r|   s    r/   r|   z9TestOptimizeSimple.test_callback_stopiteration.<locals>.fg  s    AF>!$$$r1   Fc                 :    d_         t          j        |           S r  )r  r   r   r  s    r/   r?  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.gl  s    AF%a(((r1   c                 :    d_         t          j        |           S r  )r  r   r   r  s    r/   r  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.hp  s    AF&q)))r1   r   r)   c                 R    | j          | j                  k    sJ               d S rA   r   r.   )intermediate_resultr   r|   s    r/   callback_interfacezJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interfacew  s4    *.!!4G4I2J2JJJJJ




r1   r4   c                   "    e Zd Zdef fdZdS )@TestOptimizeSimple.test_callback_stopiteration.<locals>.Callbackr  c                 R    |j          |j                  k    sJ               d S rA   r  )ro   r  r   r|   s     r/   r  zITestOptimizeSimple.test_callback_stopiteration.<locals>.Callback.__call__|  s4    .2aa8K8M6N6NNNNNHJJJJJr1   N)r   r   r   r   r  )r   r|   s   r/   r  r  {  s?                 r1   r  c                                   d S rA   r   )xkr   r   s     r/   r  zJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interface  s    




r1   c                  v     xj         dz  c_         d _         j         k    rd _        t                      d S )Nr)   FT)r  r  StopIteration)r   rh   s   r/   r   z@TestOptimizeSimple.test_callback_stopiteration.<locals>.callback  s?    JJ!OJJ!HMzW$$ $#oo% %$r1   r   rW  )rU   r   r   r   r   r   rC  rg  r   rv  rh   )r  rg  r_   c   r   )
r  r  r   r   r   r   r   r   r.   r   )ro   r   r  r?  r  r  r  r  r   r   r   r|   rh   s             @@@r/   test_callback_stopiterationz.TestOptimizeSimple.test_callback_stopiteration`  s   	% 	% 	% 	% 	% 	) 	) 	) 	) 	)	* 	* 	* 	* 	* q         ""           "*    	& 	& 	& 	& 	& 	& 
a61a1 1 FF&FF3EFFF]""kGX#JJfJJx6IJJJC8sx222272222222#KKfKKy'6JKKKC7cg0000000000w#'!!!!SUCE"""z6 .
 $
 $
aa      r1   c                     d}t          t          |          5  t          j        d t	          j        d                     d d d            d S # 1 swxY w Y   d S )Nz"'x0' must only have one dimension.r   c                     | S rA   r   r-   s    r/   r  z4TestOptimizeSimple.test_ndim_error.<locals>.<lambda>  s     r1   )r4   r)   )rP   rQ   r   r   r+   onesro   r  s     r/   test_ndim_errorz"TestOptimizeSimple.test_ndim_error  s    2:S111 	< 	<kk276??;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   )AAA)rC  r  rj  ri  rk  rg  r  c                    d }t          ddgddg          }d}t          j        t          |          5  t	          j        |g d||	           d d d            n# 1 swxY w Y   t          g d
g d          }d}t          j        t          |          5  t	          j        |g d||	           d d d            d S # 1 swxY w Y   d S )Nc                 0    t          j        | dz            S r?  r@  r-   s    r/   r|   z:TestOptimizeSimple.test_minimize_invalid_bounds.<locals>.f  rB  r1   r)   r4   r_   r   z?The number of bounds is not compatible with the length of `x0`.r   )r)   r4   r_   rU   r   r$  )r)   r   r)   )r_   r   r4   z:An upper bound is less than the corresponding lower bound.)r   r   r
   rQ   r   r   )ro   r   r|   r$  r  s        r/   test_minimize_invalid_boundsz/TestOptimizeSimple.test_minimize_invalid_bounds  s   	  	  	  AA''O]:S111 	M 	MaIIIfVLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 			999--J]:S111 	M 	MaIIIfVLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms#   AA #A C  CC)r   r	  rS  ri  c                 8   |dk    ri ndt           j        i}|dk    rt          nt           j        }ddd}t	          j        |d          5  t          j        d d	d	gf||d
| d d d            n# 1 swxY w Y   d|d<   t          j        d d	d	gf||d
| d S )Nri  r   Tr   r$  Maximum numberr   c                 *    t          j        |           S rA   r   r   r-   s    r/   r  zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>  s    q(9(9 r1   r   r   Fr   c                 *    t          j        |           S rA   r  r-   s    r/   r  zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>  s    HN1$5$5 r1   )r   r   r  r  r   r  r   )ro   r   r  warning_typer   s        r/   test_minimize_warnings_gh1953z0TestOptimizeSimple.test_minimize_warnings_gh1953  sW   
 x''eX5G-H*0(*:*:%5 	  B//\,.>??? 	H 	H99Aq6 H%+WH H@FH H H	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H  551v 	D!'	D 	D<B	D 	D 	D 	D 	Ds   A11A58A5N),r   r   r   r  r  r  r  r  r  r  r  r  r  r"  r)  r-  r0  rF  r[  r`  rq  r   rl  	fail_slowrm  rn  r   r  r  r  r  thread_unsafer  r  r  r  r  r  r  r   r  r  r
  r  r   r1   r/   r  r    s       	% 	% 	%* * *.
# 
# 
#' ' '- - -47 7 7	F 	F 	F/ / /.	# 	# 	## # #D D D4# # #8C C C"  ( ( (4$: $: $:LB B BB B B2 [2[ 566[ 899[X, , ,.>?@ @;Q ;Q	@ @ :9 76 ;Qz [X (L (L (L M M! !M M!4F F F [X (2 (2 (2 3 3
# #3 3
#@ [[X (? (? (? @ @N N@ @ N" " "(/ / /4
H 
H 
H0 0 0d [X (G (G (G H H
.1 .1H H
.1` [X (G (G (G H H
? ?H H
?* [ 899[X'>??[/;;; ; <; @? :9;z< < <
 [X (8 9 9M M9 9M [[X'L'L'LMMD D NM D D Dr1   r  r   )r  rj  r  ru  rg  c                     d }t          j        |ddg|           }|j        sJ t          |j        dgd           d S )Nc                 0    t          j        | dz            S r?  r@  r-   s    r/   r|   z$test_minimize_with_scalar.<locals>.f  r  r1      )r  r3  rD  r`   r   r   )r   r   r   r   r.   )r   r|   r   s      r/   test_minimize_with_scalarr    s[       
Ar;-
G
G
GC;CEC5t,,,,,,r1   c                       e Zd Zd ZddZddZddZd Zd Zd Z	e
j                            d	d
dgdd
gd
d
gg          d             Zd ZdS )TestLBFGSBBoundsc                 "    d| _         d| _        d S )N))r)   NNN)r)   r   )r$  rg   rn   s    r/   rp   zTestLBFGSBBounds.setup_method  s    /r1   r  c                 <    d|z  |d         |z  |d         |z  z   z  S )Nr\   r   r)   r   r   s      r/   r   zTestLBFGSBBounds.fun  s&    Qw!A$'AaD!G+,,r1   c                     ||dz
  z  S r(   r   r   s      r/   r   zTestLBFGSBBounds.jac  s    1q5zr1   c                 Z    |                      ||          |                     ||          fS rA   r   r   r   s      r/   fjzTestLBFGSBBounds.fj  s%    xx1~~txx1~~--r1   c                     t          j        | j        ddg| j        | j                  \  }}}|d         dk    sJ |d                     t          || j        d           d S )Nr   rI  )r   r$  r   taskr;   r   )r   r
  r   r   r$  r   rg   ro   r.   r|   r  s       r/   test_l_bfgs_b_boundsz%TestLBFGSBBounds.test_l_bfgs_b_bounds  ss    (Ar70404= = =1a }!!!1V9!!!4=t444444r1   c                     t          j        | j        ddgd| j                  \  }}}|d         dk    sJ |d                     t	          || j        d           d S )	Nr   rI  r  )r   r$  r   r"  r;   r   )r   r
  r   r$  r   rg   r#  s       r/   r  z%TestLBFGSBBounds.test_l_bfgs_b_funjac  sn    (1b'04= = =1a}!!!1V9!!!4=t444444r1   c                     t          j        | j        ddgd| j        | j                  }|d         sJ |d                     t          |j        | j        d           d S )	Nr   rI  r%  r   r   r$  r   r!  r;   r   )r   r   r   r   r$  r   r.   rg   rj  s     r/   test_minimize_l_bfgs_b_boundsz.TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds  sl    1b'*$(HT[B B B9~--s9~---t}4888888r1   r$  )r   r)   r  c                     t          j        t          d          5  t          j        | j        ddgd| j        |           d d d            d S # 1 swxY w Y   d S )Nz	.*bound.*r   r   rI  r%  r(  )r   r
   rQ   r   r   r   r   )ro   r$  s     r/   'test_minimize_l_bfgs_b_incorrect_boundsz8TestLBFGSBBounds.test_minimize_l_bfgs_b_incorrect_bounds  s     ]:[999 	; 	;dhB
"&(6; ; ; ;	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   &AAAc                    g d}ddg}t          j        ||          D ]b\  }}t          j        | j        ddg|d|| j        dd i          }|d	         sJ |d
                     t          |j        | j        d           cd S )Nr  r&  r   r   rI  r%  finite_diff_rel_step)r   r   r   r$  r   r   r!  r;   r   )	r  r  r   r   r   r$  r   r.   rg   )ro   r  argssr   r   r   s         r/    test_minimize_l_bfgs_b_bounds_FDz1TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds_FD  s    
 ,++"*477 	= 	=IC#DHq"gD+5(+DK-CT,JL L LC y>113y>111CE4=t<<<<<	= 	=r1   Nr&  )r   r   r   rp   r   r   r   r$  r  r)  r   rl  rn  r+  r/  r   r1   r/   r  r    s          - - - -   . . . .5 5 55 5 59 9 9 [X
7	
7	
7	(  
; ; 
;
= = = = =r1   r  c                      e Zd Zd Zd!dZd Zej                            d          d             Z	d Z
d Zd	 Zd
 Zd Zd Zej                            dg d          d             Zej                            dg d          d             Zej                            d          ej                            dg d          d                         Zd Zd Zej                            dddg          d             Zej                            d          ej                            de          ej                            dddg          ej                            dg d          d                                                 Zej        j        ej                            dg d          d                         Zd S )"TestOptimizeScalarc                     d| _         d S )Nr6   )rg   rn   s    r/   rp   zTestOptimizeScalar.setup_method  s    r1   r6   c                     ||z
  dz  dz
  S )zObjective functionr4   r   r   )ro   r.   rz  s      r/   r   zTestOptimizeScalar.fun  s    AzCr1   c                    t          j        | j                  }t          || j        d           t          j        | j        d          }t          || j        d           t          j        | j        d          }t          |d         | j        d           t          j        | j        d          }t          || j        d           d	}t          j        t          |
          5  t          j        | j        d           d d d            n# 1 swxY w Y   d}t          j        t          |
          5  t          j        | j        d           d d d            d S # 1 swxY w Y   d S )Nr;   r   r  r  brackTr   r   irI     /\(f\(xb\) < f\(xa\)\) and \(f\(xb\) < f\(xc\)\)r   rI  r   r)   \(xa < xb\) and \(xb < xc\)r   rI  r)   )r   brentr   r   rg   r   r
   rQ   )ro   r.   r!  s      r/   
test_brentzTestOptimizeScalar.test_brent  s   N48$$4=t4444N4884444=t4444N48666!dm$7777N48=9994=t4444D]:W555 	7 	7N48:6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 1]:W555 	7 	7N48:6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s$   *DDD:E##E'*E'r   c                    t          j        | j                  }t          || j        d           t          j        | j        d          }t          || j        d           t          j        | j        d          }t          |d         | j        d           t          j        | j        d          }t          || j        d           t          j        | j        d	          }t          || j                   g d
}|D ]]}t          j        | j        dd          }t          j        | j        |d          }|d         |d         }}t          ||z
  |           ^d}t          j        t          |          5  t          j        | j        d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        | j        d           d d d            d S # 1 swxY w Y   d S )Nr;   r   r5  r6  Tr8  r   r9  r  )r   r)   r   )rh   r   r4   r;  r   r<  r=  r>  )	r   goldenr   r   rg   r   r   r
   rQ   )ro   r.   maxiter_test_casesrh   rU   nfev0r   r!  s           r/   test_goldenzTestOptimizeScalar.test_golden1  sk   ODH%%4=t4444ODHH5554=t4444ODH$777!dm$7777ODHM:::4=t4444ODH!,,,4=)))&YY) 	0 	0G1$GGGB'tLLLAQ%14Ew////D]:W555 	8 	8ODHJ7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 1]:W555 	8 	8ODHJ7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s$   >F&&F*-F*G77G;>G;c                    t          j        | j        dd          }t          |dd           t          j        | j        dd          }t          || j        d           t          j        | j        t          j        dg          t          j        dg                    }t          || j        d           t          t          t           j        | j        dd           d S )Nr   r)   r  r   r   r;   )	r   	fminboundr   r   rg   r+   rL   rP   rQ   r  s     r/   test_fminboundz!TestOptimizeScalar.test_fminboundQ  s    txA..14((((txA..4=t4444tx1#!FF4=t4444j("4dh1EEEEEr1   c                 N   t          j        t          d          5  t          j        | j        t          j        d          d           d d d            n# 1 swxY w Y   t          j        | j        dt          j        d                    }t          || j
        d           d S )Nz.*must be finite scalars.*r   r)   r4   r)   r   r;   r   )r   r
   rQ   r   rH  r   r+   rd   rL   r   rg   r  s     r/   test_fminbound_scalarz(TestOptimizeScalar.test_fminbound_scalar\  s    ]:-IJJJ 	> 	>tx&)9)91===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> txBHQKK884=t444444s   .AAAc                 8    d }t          j        |dd           d S )Nc                     | dz  S r?  r   r-   s    r/   r   z,TestOptimizeScalar.test_gh11207.<locals>.fund  r  r1   r   )r   rH  )ro   r   s     r/   test_gh11207zTestOptimizeScalar.test_gh11207c  s,    	 	 	31%%%%%r1   c                    t          j        | j                  j        }t	          || j        d           t          j        | j        d          }|j        sJ t          j        | j        dt          d                    }|j        rJ t          j        | j        dd	d
          j        }t	          || j        d           t          j        | j        dd	          j        }t	          || j        d           t          j        | j        dd	d
          j        }t	          || j        d           t          j        | j        dd	d
          j        }t	          || j        d           t          j        | j        dd	          j        }t	          || j        d           t          j        | j        dd	d
          j        }t	          || j        d           t          j        | j        dd	d          j        }t	          |dd           t          j        | j        dd	d          j        }t	          || j        d           t          j        | j        t          j	        dg          t          j	        dg          ft          j	        dg          fd          j        }t	          || j        d           t          t          t           j        | j        ddd	           t          t          t           j        | j        t          j        d          dfdd	           t          j        | j        dt          j	        d          fd          j        }t	          || j        d           d S )Nr;   r   Brentr   r_   r  r   r5  r6   )bracketr   r   )r   r   r9  rC  )r   r)   Bounded)r$  r   r   r)   r  )r)   r   boundedr   r6   )r   r)   r$  r   r   r4   rD  )r   minimize_scalarr   r.   r   rg   r   rU  r+   rL   rP   rQ   rd   r  s     r/   test_minimize_scalarz'TestOptimizeScalar.test_minimize_scalarh  s   $TX..04=t4444$TXg>>>y$TXg-1!___> > >9$TXx*1'C C CCD 	
4=t4444$TXg*02 2 223 	
4=t4444$TX}*1'C C CCD 	
4=t4444$TXx*1(D D DDE 	
4=t4444$TXh*02 2 223 	
4=t4444$TX}*1(D D DDE 	
4=t4444$TXf6,57 7 778 	
14(((($TXf7,57 7 778 	
4=t4444$TXrx}}79x}}7F+-8SE??*=,57 7 7 89 	
 	4=t4444j(":DH#IG	E 	E 	E 	E 	j(":DH hqkk1-ig	O 	O 	O 	O $TXq"(1++6F,57 7 778 	
4=t444444r1   c                     	 	 dd}t          j        | j        d|t          d                    }t	          |j        | j        d	
           d S )Nr   r>   r3  c                 >   |d         |d         z   dz  } | |          }	d}
d}d}d}|rX|sV||k     rPd}|dz  }||z
  ||z   fD ]} | |g|R  }|
dz  }
||	k     r|}	|}d}| ||           |	|
|k    rd}n
|r|s||k     Pt          j        |	|||
|dk              S )Nr)   r   r  TFrI  r_  )r   rS  r   rv  rK  rh   r   r   rL  rM  rN  rO  rP  rQ  rT  rU  s                   r/   rV  z?TestOptimizeScalar.test_minimize_scalar_custom.<locals>.custmin  s)   QZ'!*,3ECJJEHEHD 4 EGOO 
#h.0@A ( (EC----EMHu}} % %#''HUOOO%(f*<*<D  4 EGOO  *u508519O O O Or1   )r   r   rX  rY  )rS  r   r   r;   r   rZ  )r   rW  r   rU  r   r.   rg   )ro   rV  r   s      r/   test_minimize_scalar_customz.TestOptimizeScalar.test_minimize_scalar_custom  st    AD*.	O 	O 	O 	O8 &tx.5/3T/B/B/BD D D 	t}4888888r1   c                 <    t          j        | j        d           d S )Nr6   r   r   rW  r   rn   s    r/   &test_minimize_scalar_coerce_args_paramz9TestOptimizeScalar.test_minimize_scalar_coerce_args_param  s      444444r1   r   )r?  rU  rC  c                 J    dD ]}t          j        | j        d|i            d S )N)r   r)   r4   r_   r   )r   r^  )ro   r   r   s      r/   	test_dispzTestOptimizeScalar.test_disp  s@     ! 	G 	GD$TX~FFFFF	G 	Gr1   c                 ,   |dk    rdddgini }t          j        | j        fd|i|}t          |d          sJ t          |d          sJ t          |d          sJ t          |d	          sJ t          |d
          sJ t          |d          sJ d S )NrU  r$  r  r   r   r.   r   r!  r   r   r   )r   rW  r   rt   )ro   r   r  rL  s       r/   test_result_attributesz)TestOptimizeScalar.test_result_attributes  s    *0I*=*=(S"I&&2)$(LL6LVLLvs#####vy)))))vy)))))vu%%%%%vv&&&&&vu%%%%%%%r1   c           
      >   t           j                            d           dgfd}d}d}t          j        d          5  t	                      5 }|                    t          d           |                    t          d	           |                    t          d
           dg|dk    rd|ini }t          j	        |fd|i||t          d          d}t          |j        d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr8   r   c                     dxx         dz  cc<   d         dk    rt           j        S | dz  dt          j        |           z  z   S )Nr   r)   r   r4   r>   )r+   r  rB   )r.   r  s    r/   r}   z0TestOptimizeScalar.test_nan_values.<locals>.func  sG    !HHHMHHHQx!||v!tcBF1IIo--r1   r<  r  r   r  r  r  r  rU  r$  rS  r  r  r   F)r+   r7   r:   r   r	   r  r  r  r   rW  rU  r   r   )	ro   r   r}   rS  r$  r  r  r   r  s	           @r/   r  z"TestOptimizeScalar.test_nan_values  s    		t	. 	. 	. 	. 	. [*** 	- 	-,=,?,? 	-3JJ{$7888JJ~'ABBBJJ~'BCCCCE+1Y+>+>h''BF*4 E E E-3E<B373C3C3CE E E EC e,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s7   DBC:.D:C>	>DC>	DDDc                     d }t          j        |          }t          |j        dd           t          j        |dddi          }t          |j        d	           d S )
Nc                     | dz  S r?  r   r-   s    r/   r|   zCTestOptimizeScalar.test_minimize_scalar_defaults_gh10911.<locals>.f  r  r1   r   r   r   )r)   r3  r  r  )r$  r   r)   )r   rW  r   r.   )ro   r|   r   s      r/   %test_minimize_scalar_defaults_gh10911z8TestOptimizeScalar.test_minimize_scalar_defaults_gh10911  sx    	 	 	 &q))qt,,,,&q07/?A A Aq!!!!!r1   c                    d}t          j        t          |          5  t          j        t
          j        dt
          j        f           d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        t
          j        t
          j        df           d d d            d S # 1 swxY w Y   d S )Nz+Optimization bounds must be finite scalars.r   r)   r  )	r   r
   rQ   r   rW  r+   rB   r  r  r  s     r/   'test_minimize_non_finite_bounds_gh10911z:TestOptimizeScalar.test_minimize_non_finite_bounds_gh10911  sM    <]:S111 	A 	A$RVQK@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A]:S111 	A 	A$RVRVQK@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As#   -AAA=-B77B;>B;r?  rC  c                     d}t          j        t          |          5  t          j        t
          j        |d           d d d            d S # 1 swxY w Y   d S )Nz'Use of `bounds` is incompatible with...r   rK  r   r$  )r   r
   rQ   r   rW  r+   rB   )ro   r   r  s      r/   2test_minimize_unbounded_method_with_bounds_gh10911zETestOptimizeScalar.test_minimize_unbounded_method_with_bounds_gh10911  s     8]:S111 	K 	K$RVF6JJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   "AAArr  r  r)   r;   fshape)r   r)   r)   r)   c                 Z   fd}d\  }}|dk    rt          ||f          nt          ||f          }|                    t          ||                     t          j        |fi |}|j        j        |j        j        cxk    r  ||j                  j        cxk    rk    sn J d S )Nc                 X    t          j        | dz                                          S Nr   )r+   rL   reshape)r.   rn  s    r/   r|   zITestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196.<locals>.f!  s#    8AqD>>))&111r1   )r  rI   rU  )rS  r  )r   r  )rU  updater   rW  r.   shaper   )	ro   r   r  rn  r|   rz  br  r   s	      `     r/   +test_minimize_scalar_dimensionality_gh16196z>TestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196  s    	2 	2 	2 	2 	2 1*0I*=*=$1v&&&&Aq6*** 	d&c222333&q33F33u{cgmGGGGqqxx~GGGGGGGGGGGGr1   )rU  r?  rC  c                 
   d }i }|dk    rdnd}ddg||<   ddd	}t          j        t          j        d
          5  t          j        |f||d| d d d            n# 1 swxY w Y   d|d<   t          j        |f||d| d S )Nc                     | dz
  dz  S r3   r   r-   s    r/   r|   zBTestOptimizeScalar.test_minimize_scalar_warnings_gh1953.<locals>.f1  r  r1   rU  r$  rS  r  r   Tr_   r$  r  r   r   Fr   )r   r  r   r  rW  )ro   r   r|   r  kwdr   s         r/   $test_minimize_scalar_warnings_gh1953z7TestOptimizeScalar.test_minimize_scalar_warnings_gh1953,  s   
	 	 	  I--hh92hsA..\(2:JKKK 	/ 	/$Q /vw / /'-/ / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/   M67MMfMMMMMs   AA"%A"NrR  )r   r   r   rp   r   r@  r   rl  rm  rF  rI  rL  rO  rX  r[  r_  rn  ra  rc  r  rh  rj  rm  r   rx  r  r|  r   r1   r/   r1  r1    s                7 7 7* [ 5668 8 768>	F 	F 	F5 5 5& & &
:5 :5 :5x!9 !9 !9F5 5 5 [X'E'E'EFFG G GFG
 [X'E'E'EFF& & GF& [ 566[X'E'E'EFF- - GF 76-:" " "A A A [X':;;K K <;K [ 899[X'>??[UQI..[X'9'9'9::H H ;: /. @? :9H [[X'E'E'EFFN N GF N N Nr1   r1  c                       e Zd Zej                            d          d             Zej                            dd          d             ZdS )TestBracketrr  c                    d }d}t          j        t          |          5  t          j        |dd           d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        |dt
          j                   d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        |d           d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        |d           d d d            n# 1 swxY w Y   d }d	}t          j        t          |          5  t          j        |d
dd           d d d            d S # 1 swxY w Y   d S )Nc                 *    d| k     | dk     z  r| dz  ndS NrI  r)   r4   g      Y@r   r-   s    r/   r|   z3TestBracket.test_errors_and_status_false.<locals>.fF  "    !VA.:1a44U:r1   9The algorithm terminated without finding a valid bracket.r   rI  r)   r  r6  c                 Z    d| dz  z  d| dz  z  z   d| dz  z  z
  d| dz  z  z   d| z  z
  dz   S )	Nr  r   r      r_      r4   r)   r   r-   s    r/   r|   z3TestBracket.test_errors_and_status_false.<locals>.fS  sE    19q1a4x'"q!t)3b1a4i?!a%G!KKr1   z8No valid bracket was found before the iteration limit...r   r^   r   r  )	r   r
   ru   r   rS  r+   r  r?  rC  )ro   r|   r!  s      r/   test_errors_and_status_falsez(TestBracket.test_errors_and_status_falseC  s   	; 	; 	; N]<w777 	' 	'QA&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	']<w777 	, 	,QBF+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,]<w777 	- 	-N1G,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-]<w777 	. 	.OAW----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.	L 	L 	L M]<w777 	7 	7Qc26666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7sY   AAA*!BBB=C  C$'C$D))D-0D-E::E>E>r   )r?  rC  c                     d }d}t          j        |d|          }|j        rJ ||j        v sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ d S )Nc                 *    d| k     | dk     z  r| dz  ndS r  r   r-   s    r/   r|   z9TestBracket.test_minimize_scalar_success_false.<locals>.f]  r  r1   r  r  )rS  r   r_   r   r3  )r   rW  r   r!  r   r   r   )ro   r   r|   r!  r   s        r/   "test_minimize_scalar_success_falsez.TestBracket.test_minimize_scalar_success_falseZ  s    	; 	; 	; N&q'&III;#+%%%%x1}}}}w!||||w#~~~~~~r1   N)	r   r   r   r   rl  rm  r  rn  r  r   r1   r/   r~  r~  A  sn        [ 8997 7 :97, [X':;;  <;  r1   r~  c                  ^    t          t          t          j        t          j        d           d S )Ng{GzrB  )rP   rQ   r   r?  r+   rG   r   r1   r/   test_brent_negative_tolerancer  j  s#    *hnbf$??????r1   c                   &    e Zd Zd Zd Zd Zd ZdS )TestNewtonCgc                 $   t          j        ddg          }t          j        t          j        |t          j        t          j        dd          }|j        sJ |j                    t          |j
        t          j        ddg          d           d S 	Nr   r\   r   rJ  r   r   r  r   r)   r  r   )r+   rL   r   r   r   r   r   r   r!  r   r.   ro   rU   r   s      r/   test_rosenbrockzTestNewtonCg.test_rosenbrocko  s    XtSk""$,$6%-%8$('2	4 4 4
 {''CK'''rxA//d;;;;;;r1   c                 &   t          j        t                    }t          j        t
          |t          t          dd          }|j        sJ |j	                    t          |j        t          d           t          |j        t          d           d S )NrJ  r;   )r   r   r   r  r  r   r   )r+   rL   rT   r   r   
himmelblaurR   rS   r   r!  r   r.   himmelblau_xoptr   himmelblau_minr  s      r/   test_himmelblauzTestNewtonCg.test_himmelblauy  s    Xm$$
 "$3%4'2$(* * * {''CK'''T::::d;;;;;;r1   c                    t          j        ddg          }t          j        t          j        |t          j        ddd          }|j        sJ |j                    t          |j	        t          j        ddg          d	           d S )
Nr   r\   r  r   rJ  r  r)   r  r   )
r+   rL   r   r   r   r   r   r!  r   r.   r  s      r/   test_finite_differencez#TestNewtonCg.test_finite_difference  s    XtSk""$,$6%.$('2	4 4 4
 {''CK'''rxA//d;;;;;;r1   c                 2   t          j        ddg          }t          j        t          j        |t          j        t          j                    dd          }|j        sJ |j                    t          |j
        t          j        ddg          d           d S r  )r+   rL   r   r   r   r   r   r   r!  r   r.   r  s      r/   test_hessian_update_strategyz)TestNewtonCg.test_hessian_update_strategy  s    XtSk""$,$6%-]__$('2	4 4 4
 {''CK'''rxA//d;;;;;;r1   N)r   r   r   r  r  r  r  r   r1   r/   r  r  n  sP        < < <
< 
< 
<< < << < < < <r1   r  c                  B   t           j        j        } t          j        g d          }t          j        g d          }t          j        g d          }t          j        g d          }|t          j        g d          ddf|t          j        g d          d	d
f|t          j        g d          ddf|t          j        g d          ddf|t          j        g d          d	d
f|t          j        g d          ddf|t          j        g d          ddf|t          j        g d          ddf|t          j        g d          dd	f|t          j        g d          ddf|t          j        g d          ddf|t          j        g d          dd	f|t          j        g d          ddff}|D ]<\  }}}}	 | ||||          \  }
}t          |
|d           t          ||	d           =t          j        t          j         d	t          j         dg          }t          j        t          j        d
dt          j        g          }|t          j        g d          t          j         t          j        f|t          j        g d          d	d
f|t          j        g d          t          j         df|t          j        g d          dt          j        f|t          j        g d          d	d
f|t          j        g d          dt          j        f|t          j        g d          t          j         t          j        f|t          j        g d          dd	f|t          j        g d          t          j         df|t          j        g d          dt          j        f|t          j        g d          dd	f|t          j        g d          dt          j        ff}|D ]<\  }}}}	 | ||||          \  }
}t          |
|d           t          ||	d           =d S )N)333333rI  r   r  )r   r)   ffffff@r_   r`   r   r   r   )r`   r4   r  r   r\   r   r   r   r  r   r`   r)   r   r   rI  r)   r`   r   r)   r   r   r  r`   r   r   r)   r  r_   )r\   r)   r   r   )r\   r   rI  r4   r6   )r  r   rI  r4   gffffff?g333333@)r\   r   rI  r   r;   r   g333333)r   r~  _line_for_searchr+   rL   r   r  )line_for_searchlower_boundupper_boundrU   x1	all_testsr.   alphalminlmaxmimas               r/   test_line_for_searchr    s%   
 (9O (///00K(+++,,K 
---	 	 B	...	!	!B 
RXmmm$$dC0	RXmmm$$b!,	RXmmm$$dC0	RXmmm$$b!,	RXmmm$$b!,	RXnnn%%tS1	RXnnn%%tT2	RXmmm$$dC0	RXmmm$$b"-	RXmmm$$c3/	RXmmm$$b!,	RXmmm$$b"-	RXnnn%%tT2I  !* - -5$ E;DDBDt,,,,Dt,,,,, (RVGR"&"566K(BFAsBF344K 
RXmmm$$rvgrv6	RXmmm$$b!,	RXmmm$$rvgs3	RXmmm$$b"&1	RXmmm$$b!,	RXnnn%%tRV4	RXmmm$$rvgrv6	RXmmm$$b"-	RXmmm$$rvgs3	RXmmm$$b"&1	RXmmm$$b"-	RXnnn%%tRV4I !* - -5$ E;DDBDt,,,,Dt,,,,,- -r1   c            
         t           j        j        } d }t          j        g d          } ||          }t          j        t          j         gdz            }t          j        t          j        gdz            }t          j        g d          dft          j        g d          dft          j        g d          d	ft          j        g d
          dft          j        g d          dft          j        g d          dft          j        g d          dff}|D ]\  }} | ||||d          \  }	}
}t          |	 |||z            d           t          |
||z  d           t          |||z  d            | |||d|||          \  }	}
}t          |	 |||z            d           t          |
||z  d           t          |||z  d           d S )Nc                 ^    t          j        | t          j        g d          z
  dz            S N)r  r  r6   皙ٿr4   r+   rC   rL   r-   s    r/   r}   z$test_linesearch_powell.<locals>.func  -    vq28$:$:$:;;;ABBBr1   r  r   r  rI  r  r4   r  r6   r  r  r  r   r)   r         ?r`   r   r)   r)   皙?r  r   rI  r)   r   )fvalr  r;   r   r  r  r  r  )r   r~  _linesearch_powellr+   rL   r  r   linesearch_powellr}   r  r  r  r  r  xilr|   r   r9   s               r/   test_linesearch_powellr    s6    *=C C C	---	 	 B488D(RVG9q=))K(BF8a<((K 
---	 	 "%	---	 	 !$	---	 	 #&	---	 	 #&	...	!	!4(	---	 	 #&	...	!	!4(I  6 6A++D"b154A A A1i44B<<d33331r6----	1r65555++D"bd8C8C157 7 71i 	44B<<d33331r6----	1r6555556 6r1   c            
         t           j        j        } d }t          j        g d          } ||          }t          j        dgdz            }t          j        dgdz            }t          j        g d          dft          j        g d          d	ft          j        g d
          dft          j        g d          dft          j        g d          dft          j        g d          dft          j        g d          dff}|D ]c\  }} | |||d|||          \  }	}
}t          |	 |||z            d           t          |
||z  d           t          |||z  d           dt          j        dgdz  dgz             }t          j        dgdz  dgz             }t          j        g d          dft          j        g d          dft          j        g d
          dft          j        g d          dft          j        g d          dft          j        g d          dft          j        g d          dff}|D ]c\  }} | |||d|||          \  }	}
}t          |	 |||z            d           t          |
||z  d           t          |||z  d           dt          j        g d          } ||          }t          j        g d          dft          j        g d          dft          j        g d
          dft          j        g d          d ff}|D ]i\  }} | |||d|||          \  }	}
}t          |	 ||||z  z             d           t          |
|||z  z   d           t          |||z  d           jt          j        g d          } ||          }t          j        dt          j         t          j         dg          }t          j        t          j        dt          j        dg          }t          j        g d          dft          j        g d          dft          j        g d
          dft          j        g d          dft          j        g d          dft          j        g d          dft          j        g d          dff}|D ]c\  }} | |||d|||          \  }	}
}t          |	 |||z            d           t          |
||z  d           t          |||z  d           dt          j        g d          } ||          }t          j        g d          dft          j        g d          dft          j        g d
          dft          j        g d          d ff}|D ]i\  }} | |||d|||          \  }	}
}t          |	 ||||z  z             d           t          |
|||z  z   d           t          |||z  d           jd S )!Nc                 ^    t          j        | t          j        g d          z
  dz            S r  r  r-   s    r/   r}   z,test_linesearch_powell_bounded.<locals>.func	  r  r1   r  g       r   r  r  rI  r  r4   r  r6   r  r  r  r  r  r  r  r  r   r  r;   r   g333333ӿr_   g?r  r]   g333333ÿ)r  r   r   r4   r   g333333)r   r~  r  r+   rL   r   r  r  s               r/   test_linesearch_powell_boundedr    s    *=C C C	---	 	 B488D (C57##K(B46""K 
---	 	 "%	---	 	 !$	---	 	 #&	---	 	 #&	...	!	!4(	---	 	 #&	...	!	!4(I  6 6A++D"bd8C8C157 7 71i 	44B<<d33331r6----	1r655555 (C57bT>**K(C57bT>**K 
---	 	 #&	---	 	 #&	---	 	 #&	---	 	 #&	...	!	!2&	---	 	 #&	...	!	!4(I  6 6A++D"bd8C8C157 7 71i 	44B<<d33331r6----	1r655555 
...	!	!B488D 
---	 	 "%	---	 	 #&	---	 	 #&	---	 	 $'	I  6 6A++D"bd8C8C157 7 71i 	44QV,,488882B;T2222	1r655555 
---	 	 B488D (C"&26'2677K(BFC455K 
---	 	 #&	---	 	 #&	---	 	 #&	---	 	 #&	...	!	!2&	---	 	 #&	...	!	!4(I  6 6A++D"bd8C8C157 7 71i 	44B<<d33331r6----	1r655555 
...	!	!B488D 
---	 	 "%	---	 	 #&	---	 	 #&	---	 	 $'	I  6 6A++D"bd8C8C157 7 71i 	44QV,,488882B;T2222	1r6555556 6r1   c                      t          j        ddgddg          fd} t          j        | ddgd           t          j        dgdgdg	          d
 }t          j        |dgd           d S )Nr   333333?r  c                     | \  }}| j         k                                    r| j        k                                    sJ |dz  |dz  z   S r?  )lbrK   ub)r.   rz  rw  r$  s      r/   r   ztest_powell_limits.<locals>.fun	  sS    1VY##%%@1	>*>*>*@*@@@@AvQr1   r  r	  r)   T)r  r  keep_feasiblec                 F    | dk    r| dk    sJ t          j        |           S r  r*   r-   s    r/   r}   z test_powell_limits.<locals>.func	  s%    Avv!q&&&&vayyr1   r^   ri  )r   rU   r   r$  )r   r   r   )r   r}   r$  s     @r/   test_powell_limitsr  |	  s    _aVc2Y//F    
 csBiHHHH _!dWEEEF   $C5&IIIIIIr1   c                      t           d d g} | D ]6}t          j        |ddgd          }t          j        |j                  sJ 7d S )Nc                 D    t          j        t          |                     S rA   r+   rL   r   r-   s    r/   r  z$test_powell_output.<locals>.<lambda>	  s    RXeAhh// r1   c                 F    t          j        t          |           g          S rA   r  r-   s    r/   r  z$test_powell_output.<locals>.<lambda>	  s    28U1XXJ;O;O r1   r  r  r  )rU   r   )r   r   r   r+   isscalarr   )funsr   r   s      r/   test_powell_outputr  	  se    //1O1OPD $ $b	(CCC{37######$ $r1   c                       e Zd Zd Z eddg          ej                            d          d                         Z eddg          ej                            d          d                         Z	dS )		TestRosenc                     |                     g d          }t          t          j        |          |                     d                     d S )Nr[   r`   )r  r$   r   r   ro   r  r.   s      r/   
test_rosenzTestRosen.test_rosen	  sL    JJyyy!!q))

2	( 	( 	( 	( 	(r1   z	jax.numpyz)JAX arrays do not support item assignment)reasonsskip_xp_backendsc           	          |                     g d          }t          t          j        |          |                    ||                     d          j                             d S )N)r)   r)   r)   r)   r\   )r  )r  r$   r   r   
zeros_liker  r  s      r/   test_rosen_derzTestRosen.test_rosen_der	  sg     JJ|||$$*1--arzz"~~/CDD	F 	F 	F 	F 	Fr1   c                 X   |                     d          }t          |          }|                     g d          }|                     g d          }t          j        ||          }|                    ||j                  }t          j        |          |z  }t          ||           d S )Nr\   )r_   r   r   )r4   r4   r4   )r  r%   r   rosen_hess_prodr  r  r   r$   )ro   r  onexp_testr.   r   hpdothps           r/   test_hess_prodzTestRosen.test_hess_prod	  s     jjnn!#&&JJyyy!!JJyyy!!%a++NN1ci((#A&&*E"""""r1   N)
r   r   r   r  r  r   rl  usefixturesr  r  r   r1   r/   r  r  	  s        ( ( ( kJKM M M[/00F F 10M MF
 kJKM M M[/00	# 	# 10M M	# 	# 	#r1   r  c                 N    | \  }}||z  |z   dz
  }|||z  z   dz
  }||z  ||z  z   S )zx
    R^2 -> R^1 test function for optimization. The function has four local
    minima where himmelblau(xopt) == 0.
    r  r   r   )r   r.   r9  rz  rw  s        r/   r  r  	  sA    
 DAq	!a"A	AaC!AQ319r1   c                     | \  }}t          j        d|dz  z  d|z  |z  z   d|z  z
  d|dz  z  z   dz
  d|dz  z  d|z  |z  z   d|dz  z  z   d|z  z
  dz
  g          S )Nr   r_   *   r4         rX  rf  r   r.   r9  s      r/   rR   rR   	  s    DAq8Qq!tVac!e^bd*Qq!tV3b8q!tVac!e^a1f,r!t3b8: ; ; ;r1   c                     | \  }}t          j        d|dz  z  d|z  z   dz
  d|z  d|z  z   gd|z  d|z  z   d|z  d|dz  z  z   dz
  gg          S )Nr  r4   r   r  r  rf  r  s      r/   rS   rS   	  su    DAq8bAg!mb(!A#!)4cAaCi1r!Q$w!346 7 7 7r1   gHzGѿgr_   r4   r`   c                      d } d }d }d| dd|dd|df}d }t          j        |g dd|	          }t          |j        g d
d           d S )Nc                 t    t          j        dd| d         z  z
  d| d         z  z
  d| d         z  z
  g          S )N   rI   r   r  r)   r  r4   rf  r-   s    r/   r}   z0test_minimize_multiple_constraints.<locals>.func	  s;    xcAaDj31:5qtCDEEEr1   c                 8    t          j        | d         g          S r(   rf  r-   s    r/   func1z1test_minimize_multiple_constraints.<locals>.func1	      x1r1   c                 8    t          j        | d         g          S r?  rf  r-   s    r/   r  z1test_minimize_multiple_constraints.<locals>.func2	  r  r1   r  r  c                 <    d| d         | d         z   | d         z   z  S )NrI  r   r)   r4   r   r-   s    r/   r|   z-test_minimize_multiple_constraints.<locals>.f	  s"    QqTAaD[1Q4'((r1   r  r  r  )}   r   r   r  r   rF  )r}   r  r  r  r|   r   s         r/   "test_minimize_multiple_constraintsr  	  s    F F F           D))E**E**,D) ) ) 
Ayyyd
K
K
KCCE;;;U333333r1   c                   Z    e Zd Zd Zej                            d          d             ZdS )TestOptimizeResultAttributesc                     ddg| _         t          j        | _        t          j        | _        t          j        | _        t          j        | _	        ddg| _
        d S )Nr   )r`   r  )rU   r   r   r}   r   r   r   r   r  r   r$  rn   s    r/   rp   z)TestOptimizeResultAttributes.setup_method	  sD    a&N	%'	-
 ),r1   r4   c           
         g d}ddgi}t           D ]}t                      5 }|                    t          d           t	          j        | j        | j        || j        | j	        | j
                  }d d d            n# 1 swxY w Y   |D ]6}||v r|||         v rt          ||          sJ |t          |          v sJ 7t          |j        t                    sJ d S )N)r   r   r.   r   r   r   r!  rk  r   z7Method .+ does not use (gradient|Hessian.*) information)r   r   r   r   )r   r	   r  r  r   r   r}   rU   r   r   r   rt   dirr  r!  str)ro   
attributesr  r   r  r   	attributes          r/   test_attributes_presentz4TestOptimizeResultAttributes.test_attributes_present	  s\   ! ! !
5'"& 	0 	0F"$$ :

>+- - - '	476,0H49.2j: : :	: : : : : : : : : : : : : : : ( - -	T>>i4<&?&?sI..... CHH,,,,, ck3//////!	0 	0s   AA<<B 	B 	N)r   r   r   rp   r   rl  r  r  r   r1   r/   r  r  	  sO        - - - [10 0 0 0 0r1   r  c                 ~    | \  }}|\  }}}}}}	}
}}}}}}||dz  z  ||z  |z  z   ||dz  z  z   ||z  z   ||z  z   |	z   S r?  r   rd  r   r.   r9  rz  rw  rr   r  r   r|   r?  r  r  r8  rC  r  r  s                    r/   f1r  
  sj    DAq06-Aq!Q1aAq!Q1Hq1uqy 1q!t8+ac1AaC7!;<r1   c                     | \  }}|\  }}}}}}	}
}}}}}}|
 t          j        ||z
  dz  ||z
  dz  z    |z            z  S r?  r*   r  s                    r/   f2r  
  _    DAq06-Aq!Q1aAq!QBrv1qAaC!8+,u45556r1   c                     | \  }}|\  }}}}}}	}
}}}}}}| t          j        ||z
  dz  ||z
  dz  z    |z            z  S r?  r*   r  s                    r/   f3r
  
  r  r1   c                 T    t          | g|R  t          | g|R  z   t          | g|R  z   S rA   )r  r  r
  )rd  r   s     r/   
brute_funcr  
  s6    a>&>>>BqN6NNN*R^F^^^;;r1   c                       e Zd Zd Zd Zd Zd Zej        	                    d          d             Z
ej        j        d             Zd Zd	S )
	TestBrutec                     d| _         t          ddd          t          ddd          f| _        t          j        ddg          | _        d S )N)r4   r_   r   r   r   r   ,   rI  r4   r  r)   r  r^   r  r         ?g_}gi?)r   slicerrangesr+   rL   rg   rn   s    r/   rp   zTestBrute.setup_method$
  sG    Db!T**E"a,>,>?+z!:;;r1   c                     t          |g|R  S rA   )r  )ro   rd  r   s      r/   r  zTestBrute.brute_func)
  s    !%f%%%%r1   c                    t          j        t          | j        | j        dt           j                  }t          |d         | j        d           t          |d         t          | j        g| j        R  d           t          j        t          | j        | j        dt           j                  }t          |d         | j        d           t          |d         t          | j        g| j        R  d           t          j        | j        | j        | j        dt           j                  }t          |d         | j        d           d S )NTr   r   finishr   r   r   r)   )	r   bruter  r  r   r,  r   rg   r   )ro   resbrutes     r/   
test_brutezTestBrute.test_brute-
  sK   >*dl.28=J J JT]>>>>Z%L%L%L%L!	# 	# 	# 	# >*dl.2)1):< < < 	T]>>>>Z%L%L%L%L!	# 	# 	# 	#
 >$/4<'+{)1):< < < 	T]>>>>>>r1   c                 >    d }t          j        |dgdd            d S )Nc                 f    t          | j                  dk    sJ | j        d         dk    sJ | dz  S )Nr)   r   r4   )r  rv  r-   s    r/   r|   zTestBrute.test_1D.<locals>.fG
  s7    qw<<1$$$$71:????6Mr1   r  r_   )Nsr  )r   r  )ro   r|   s     r/   test_1DzTestBrute.test_1DD
  s4    	 	 	
 	q7)$777777r1   r   c                    t          j        t          | j        | j        dd           }t          j        t          | j        | j        dd d          }t          |d         |d                    t          |d         |d                    d S )NTr  r4   )r   r   r  workersrI  r   )r   r  r  r  r   r   )ro   r  	resbrute1s      r/   test_workerszTestBrute.test_workersN
  s     >*dl.24A A A N:t|$+/3D!M M M	 		"x|444	!hqk22222r1   c                     t           j                            d          fd}d}t          j        t
          |          5  t          j        || j        | j	        d           d d d            d S # 1 swxY w Y   d S )Nr8   c                 4                         d          dz  S rr  rs  )rd  r   r=   s     r/   r}   z,TestBrute.test_runtime_warning.<locals>.func^
  s    ::a==4''r1   zFfinal optimization did not succeed.*|Maximum number of function eval.*r   T)r   r   )
r+   r7   rw  r   r  r  r   r  r  r   )ro   capsysr}   r  r=   s       @r/   r  zTestBrute.test_runtime_warningZ
  s    i##D))	( 	( 	( 	( 	( W\.444 	L 	LN4DKdKKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls   #A33A7:A7c                 z    d }t          j        |t          ddd          fd          }t          |d           d S )Nc                     | |d         z  S rP  r   )r.   r   s     r/   r|   z+TestBrute.test_coerce_args_param.<locals>.fg
  s    Q<r1   r  r   r  r4   r]  r   )r   r  r  r   )ro   r|   r  s      r/   test_coerce_args_paramz TestBrute.test_coerce_args_parame
  sN    	  	  	  >!eB3&7&7%9BBB!$$$$$r1   N)r   r   r   rp   r  r  r  r   rl  r  r"  r  r  r(  r   r1   r/   r  r  "
  s        < < <
& & &? ? ?.8 8 8 [2	3 	3 	3 [L L L% % % % %r1   r  r  c                    	 dd l } dd l		fd	fddfd}fd}| j                                        5 }g }|                    |                    |                     |                    |                    |                     |D ]}|                                 	 d d d            d S # 1 swxY w Y   d S )Nr   c                 D                         d           | d         dz  S )Nr>   r   r4   sleepr.   times    r/   
objective1z*test_cobyla_threadsafe.<locals>.objective1w
  s    

3tQwr1   c                 J                         d           | d         dz
  dz  S )Nr>   r   r)   r4   r+  r-  s    r/   
objective2z*test_cobyla_threadsafe.<locals>.objective2{
  s$    

3!Q{r1   COBYLAc                  4    t          j        dg           S Nr`   r   ry  )
min_methodr/  s   r/   
minimizer1z*test_cobyla_threadsafe.<locals>.minimizer1
  '     '*e-79 9 9 	9r1   c                  4    t          j        dg           S r4  ry  )r5  r1  s   r/   
minimizer2z*test_cobyla_threadsafe.<locals>.minimizer2
  r7  r1   )concurrent.futuresr.  futuresThreadPoolExecutorrx   submitrL  )

concurrentr6  r9  pooltasksrs   r5  r/  r1  r.  s
         @@@@r/   test_cobyla_threadsaferA  n
  sn    KKK         J9 9 9 9 9 9
9 9 9 9 9 9
 
		.	.	0	0 DT[[,,---T[[,,--- 	 	AHHJJJJ		                 s   A,B88B<?B<c                   l    e Zd Zd Zd Zej                            d          d             Zd Z	d Z
dS )TestIterationLimitsc                 6    t          j                    | _        d S rA   )ri   rj   rN  rn   s    r/   rp   z TestIterationLimits.setup_method
  s    !))r1   c                 B   t          | j        d          sd| j        _        | j        xj        dz  c_        t          j        |d         dz  |d         dz  z             t          j        |d         |d                   }}t          j        |dz  |z             |dz  z   S )Nrr   r   r)   r4   r  r^   )rt   rN  rr   r+   r  arctan2rB   )ro   r,  rV   rs   s       r/   	slow_funczTestIterationLimits.slow_func
  s    t}c** 	 DMO1wqtQwqtQw''AaD!A$)?)?1vadQh#%%r1   r   c                 2    |                      dd           d S )Nru     check_limitsrn   s    r/   test_neldermead_limitz)TestIterationLimits.test_neldermead_limit
  s    ------r1   c                 2    |                      dd           d S )Nri  ra   rJ  rn   s    r/   test_powell_limitz%TestIterationLimits.test_powell_limit
  s    (D)))))r1   c           
      2   ddgddgddgfD ]	}dD ]j}d| j         _        t          j        | j        ||d|i          }| j         j        |d         k    sJ |d	         r|d         |k     sJ \|d         |k    sJ kdD ]F}t          j        | j        ||d
|i          }|d	         r|d         |k    sJ 8|d         |k    sJ Gddgddgdt
          j        gfD ]\  }}d| j         _        t          j        | j        ||||d          }| j         j        |d         k    sJ |d	         r|d         |k     r|d         |k    sJ l|d         |k    s|d         |k    sJ t
          j        d gd t
          j        gfD ]\  }}d| j         _        t          j        | j        ||||d          }| j         j        |d         k    sJ |d	         r&||d         |dz  k     sJ e|d         |dz  k    sJ w|d         |dz  k    s|d         |dz  k    sJ d S )Nr>   r)   r4   )r4  i    r   rv  r   r   r   rh   r   r4  rP  )rh   rv  )rN  rr   r   r   rG  r+   r  )ro   r   default_itersstart_vmfevr   mits          r/   rK  z TestIterationLimits.check_limits
  s   c
QFQF3 ,	> ,	>G' 	/ 	/"#'/51940@B B B }#f+5555y> /v;-----v;$.....& - -'/51:C0@B B B y> -u:,,,,,u:,,,,,!2httRVnE 
D 
D	c"#'/5<?;?1A 1AB B B }#f+5555y> Dv;--#e*2C2C2C2C2Cv;$..#e*2C2C2C2C!vtntRVn= > >	c"#'/5<?;?1A 1AB B B }#f+5555y> >|"6{]1_<<<<<"5z]1_<<<<<K=?::"5z]1_<<<<>=,	> ,	>r1   N)r   r   r   rp   rG  r   rl  r  rL  rN  rK  r   r1   r/   rC  rC  
  s|        * * *& & & [2. . .* * *-> -> -> -> ->r1   rC  c                  0   d } d }d }g d}|D ]>}t          j        | t          j        dg          |          }|j        j        dk    sJ ?g d}|D ]@}t          j        | t          j        dg          |||	          }|j        j        dk    sJ Ad S )
Nc                     | | z  S rA   r   r-   s    r/   r   z2test_result_x_shape_when_len_x_is_one.<locals>.fun
  s    1ur1   c                     d| z  S Nr  r   r-   s    r/   r   z2test_result_x_shape_when_len_x_is_one.<locals>.jac
  s    Avr1   c                 .    t          j        dgg          S rX  rf  r-   s    r/   r   z3test_result_x_shape_when_len_x_is_one.<locals>.hess
  s    x"r1   )	ru  r  r   r   r%  r  r2  COBYQAr  r>   r   ro  )r  r  r  r  r  rJ  r  )r   r   r+   rL   r.   rv  )r   r   r   r  r   r   s         r/   %test_result_x_shape_when_len_x_is_oner[  
  s             , , ,G # #RXse__VDDDu{d""""", , ,G # #RXse__V%)+ + +u{d"""""# #r1   c                       e Zd Zd Zd ZdS )FunctionWithGradientc                 6    t          j                    | _        d S rA   )ri   rj   number_of_callsrn   s    r/   r  zFunctionWithGradient.__init__
  s    (00r1   c                     t          | j        d          sd| j        _        | j        xj        dz  c_        t          j        |dz            d|z  fS )Nrr   r   r)   r4   )rt   r_  rr   r+   rC   r  s     r/   r  zFunctionWithGradient.__call__
  sT    t+S11 	'%&D "!#vad||QU""r1   Nr  r   r1   r/   r]  r]  
  s2        1 1 1# # # # #r1   r]  c                      t                      S rA   )r]  r   r1   r/   function_with_gradientrb  
  s    !!!r1   c                    t          |           }t          j        ddg          }t           ||          d           | j        j        dk    sJ t          |                    |          d|z             | j        j        dk    s
J d            t           |d|z            dd	           | j        j        dk    s
J d            d S )
Nr\   r  r  r)   r4   zHfunction is not recomputed if gradient is requested after function valueg      4@(different input triggers new computationr  )r   r+   rL   r   r_  rr   
derivativerb  memoized_functionrU   s      r/   )test_memoize_jac_function_before_gradientrh    s    "#9::	3*		B%%b))3///!13q8888%0044a"f===!13q888	8 988 !b&!!4:< < < < "13q8882 98888r1   c                    t          |           }t          j        ddg          }t          |                    |          d|z             | j        j        dk    sJ t           ||          d           | j        j        dk    s
J d            t          |                    d|z            d|z  d	           | j        j        dk    s
J d            d S )
Nr\   r  r4   r)   r  zHfunction is not recomputed if function value is requested after gradientr   rd  r  )r   r+   rL   r   re  r_  rr   rf  s      r/   )test_memoize_jac_gradient_before_functionrj    s    "#9::	3*		B%0044a"f===!13q8888%%b))3///!13q888	8 988 $$QV,,a"f:< < < < "13q8882 98888r1   c           	      z   t          |           }|j        }t          j                    }t	          j        ddg          }t          ||d||dd          }| j        j        dk    sJ |	                    |dz              | j        j        dk    sJ |	                    |dz              | j        j        d	k    sJ dS )
z Tests that using MemoizedJac in combination with ScalarFunction
        and BFGS does not lead to repeated function evaluations.
        Tests changes made in response to GH11868.
    r\   r^   r   Nr)   r>   r4   rI   r_   )
r   re  r   r   r+   rL   r   r_  rr   r   )rb  rg  r   r   rU   scalar_functions         r/   test_memoize_jac_with_bfgsrm  '  s    
 ##9::

&C=??D	3*		B$2r3dD: :O!13q8888S!!!!13q8888S!!!!13q888888r1   c                      t                      5  t          j        d t          j         t          j        d           d d d            d S # 1 swxY w Y   d S )Nc                 2    t          j        | dz  g          S r?  rf  r-   s    r/   r  ztest_gh12696.<locals>.<lambda>@  s    bh1v&& r1   Fr   )r   r   rH  r+   r   r   r1   r/   test_gh12696rp  <  s    			 C C&&E	C 	C 	C 	CC C C C C C C C C C C C C C C C C Cs   /AAAc                     t           j                            d          } |                     d          }t          j        g d          t          j        g d          }|k    dfd	fdfdfd	}fd
}fd}fd}fd}t          |t           j         d          }t          |t           j         d|          }	t          |t           j         d          }
t          |t           j         d|          }d}dddfdddf}d t          f}dg g f||	f||f|	g|	gf|
g|gf||
g|	|gf||g|	|gf|	|g|	|gff	}d |f}|||||||d	}|S )Nr   r   )r   r4   rI  r  )r_   r4   r4   r  Tc                 f    |r| j         dk    sJ |rt          |                              d S d S rs  )rJ  r   )r.   
check_sizecheck_valuesi_ebr  s      r/   check_xz(setup_test_equal_bounds.<locals>.check_xM  sJ     	6Q;;;; 	/AdGRX.....	/ 	/r1   c                 B     |            t          j        |           S rA   r  r.   rv  s    r/   r}   z%setup_test_equal_bounds.<locals>.funcS  s     


~a   r1   c                 B     |            t          j        |           S rA   )r   r   rx  s    r/   r   z%setup_test_equal_bounds.<locals>.gradW  s!    


!!$$$r1   c                      |            d S rA   r   )r.   r   rv  s     r/   r   z)setup_test_equal_bounds.<locals>.callback[  s    




r1   c                 8     | d           | dd         dz
  S )NFrt  r   r)   r   rx  s    r/   constraint1z,setup_test_equal_bounds.<locals>.constraint1^  s*    &&&&1vzr1   c                 T     | d           t          j        |           }d|d<   |S )NFr|  r)   r   r+   r  r.   dcrv  s     r/   	jacobian1z*setup_test_equal_bounds.<locals>.jacobian1b  5    &&&&]11	r1   c                 8     | d           | dd         dz
  S )NFr|  r4   r_   r^   r   rx  s    r/   constraint2z,setup_test_equal_bounds.<locals>.constraint2h  s*    &&&&1v|r1   c                 T     | d           t          j        |           }d|d<   |S )NFr|  r)   r4   r  r  s     r/   	jacobian2z*setup_test_equal_bounds.<locals>.jacobian2l  r  r1   )r%  r  r  Fr  c                 0     |            |           fS rA   r   )r.   r}   r   s    r/   r  z)setup_test_equal_bounds.<locals>.<lambda>~  s    Qa1 r1   c                 <    t          t          | |                    S rA   )listzipr  r  s     r/   r  z)setup_test_equal_bounds.<locals>.<lambda>  s    $s2r{{"3"3 r1   r  )	r  kwdsbound_typesr]  	callbacksr  r  rU   ru  )TT)r+   r7   r  r  rL   r   r  r   )r=   rU   r  r   r}  r  r  r  c1ac1bc2ac2br  r  r  r]  r  datarv  r}   r   ru  r  s                     @@@@@r/   setup_test_equal_boundsr  E  su   
)


"
"C	!B	"""	#	#B	///	"	"B"HD/ / / / / / /! ! ! ! !% % % % %                     kBF7A
6
6C
kBF7Ay
A
AC
kBF7A
6
6C
kBF7Ay
A
AC +G ''&&11111 D 43K  "b:SzEC5>SEC5>#Jc
+#Jc
+#Jc
+-K x I[&YBb$8 8D Kr1   z0Failures due to floating point issues, not logicdicts)mode	Compilersfortrannamez
intel-llvmr  r  r  
bound_typer  r]  r   r  c           	      b   t          j                    dk    r&| dk    r |d         du r|t          j        d           t          d         t          d         }}t          d	         t          d
         }}|\  }	}
|	r| dk    st          j        d           |	|
k    } |||          }|                    || ||	|d           t          j        di |}t          j        t          j        || t          j	        ||
          }|j
        sJ t          |j        |j        d           t          |j        |j        d           |s
|d         du rt          j        |j        |<   |j        j        d         dk    sJ t          |j        |         |j        |         d           |d         s|	st%          |t&                    spd }t          j        ||ddg         | |ddd                   }t          |j        |j                   t          |j        ddg         |j        d           dS dS dS dS )z
    Tests that minimizers still work if (bounds.lb == bounds.ub).any()
    gh12502 - Divide by zero in Jacobian numerical differentiation when
    equality bounds constraints are used
    aarch64r  r   FNzTolerance violation on aarchr  r  rU   ru  r  z)Only SLSQP supports nonlinear constraints)rU   r   r$  r]  r   )r   r   r$  r]  gTqs*>r   gMb@?r   r   r;   c                     t          j        t           j        dt           j        dg          }| |ddg<   t          j        |          S )Nr4   rI  r   )r+   rL   r  r   r   )r.   new_xs     r/   r   ztest_equal_bounds.<locals>.fun  s;    Hbfa455EE1a&M>%(((r1   r4   rl  g>r   )platformmachiner   r  eb_dataru  r   r   r   r   r   r   r   r.   r+   r  r   rv  r  r   )r   r  r  r]  r   r  r  rU   ru  test_constraintsreference_constraints	fd_neededr$  r   expectedr   fd_ress                    r/   test_equal_boundsr    s     	i''FeOOUu$$)=2333T]GDMBt}gfoB.9++ A' 1 1?@@@ "%::IZBFKKrVv 0hH H I I I


#
#d
#
#C F%-%7-BD D DH
 ;CGX\7777CE8:D1111 $DK5((VT7=q    CGDM8<#5DAAAAK <+ <z&&/I/I <	) 	) 	)
 "3#%q!f:*0*01+7 7 7 	,,, 	q!fvxd;;;;;;%< < < < < <r1   c                    dd}ddg}d}t          j        ||||           }|j        sJ t          |j         |ddg                     |j        dk    sJ |j        d	k    sJ d
}t          j        |||| |          }|j        sJ t          |j         |ddgd                     |                                 dk    rd }t          |t          j
         d          }t          j        |||| |g          }|j        du sJ t          |j         |ddg                     |j        dk    sJ d}|j                            |          sJ t          |t          j
         d          }t          j        |||| |g          }|j        du sJ t          |j         |ddg                     |j        dk    sJ d}|j                            |          sJ d S d S )Nr)   c                 F    t           j                            |           |z   S rA   )r+   linalgnorm)r.   p1s     r/   r|   z test_all_bounds_equal.<locals>.f  s    y~~a  2%%r1   rp  )r4   r4   )r\   rE  rD  r\   r  z/All independent variables were fixed by bounds.)r4   rV  r4   r  c                 *    t          j        |           S rA   r@  r-   s    r/   conz"test_all_bounds_equal.<locals>.con  s    6!99r1   r`   )r$  r   r]  Fz3All independent variables were fixed by bounds, butr   Tz8All independent variables were fixed by bounds at valuesro  )r   r   r   r   r   r   r!  upperr   r+   r  r  )	r   r|   r$  rU   r   r   r  nlcr!  s	            r/   test_all_bounds_equalr    sI   & & & & fF	B

Ar&
@
@
@C;CGQQSz]]+++8q====;KKKKKD

Ar&d
K
K
KC;CGQQSz1--...||~~  	 	 	!#w44r&cU
 
 
 {e####C:///x1}}}}G{%%g.....!#w22r&cU
 
 
 {d""""C:///x1}}}}L{%%g.....+ ! * 	/.r1   c                      d } d }d|dg}dgdz  }d|d<   t          j        | g d	d
||           |d         d         |k    sJ d S )Nc                 T    | d         dz  | d         dz  z   | d         | d         z  z   S )Nr   r_   r)   r4   r   r-   s    r/   r|   ztest_eb_constraints.<locals>.f  s.    tQw1q 1Q4!9,,r1   c                 N    | d         | d         z   | d         z   | d         z   dz
  S )Nr   r)   r4   r_   (   r   r-   s    r/   cfunz!test_eb_constraints.<locals>.cfun  s+    tad{QqT!AaD(2--r1   r  r  )r   r  r   )r   r   r)   )r)   r4   r_   r   r  )rU   r   r$  r]  r   r   ry  )r|   r  r]  r$  s       r/   test_eb_constraintsr    s    - - -. . . #4001KY]FF1I	<<    q>% D((((((r1   c                  *   t           t          t          t          t          t
          d} |                                 D ]\  }}|D ]}t          ||           dddd}|                                D ]!\  }}t          t          t          ||           "d S )N)r   rW  rootroot_scalarlinprogquadratic_assignmentekkir	  )r   maximizemaximize_scalar)
r   r   r   r   r   r   itemsr   rP   rQ   )solver_methodssolverr  r   unknown_solver_methods        r/   test_show_optionsr  '  s    $2*" < N *//11 ) ) 	) 	)F((((	)
 ! 
 05577 @ @j,????@ @r1   c                      t          j        ddgddg          } t          j        t           j        t	          j        ddg          d|            d S )Nr  r  r  r   r  r	  )r   r   r   r   r+   rL   r  s    r/   test_bounds_with_listr  ?  s[    _Rc3Z888F28QF++HV     r1   c            	      2   d } d }d }g d}g d}t          j        d          dz  }t          D ]f}d }d }||v r|}||v r|}t          j        | ||||          }	t          |	j        t          j        t          j        |                    d	
           gd S )Nc                     t          j        t          j        |                     }| |z  } | | z  } t          j        |           S rA   )r+   rO   rJ  rC   r  s     r/   fquadz/test_x_overwritten_user_function.<locals>.fquadK  s9    Ibgajj!!	Q	Qvayyr1   c                 l    t          j        t          j        |                     }| dz  } | d|z  z  } | S r?  )r+   rO   rJ  r  s     r/   	fquad_jacz3test_x_overwritten_user_function.<locals>.fquad_jacQ  s4    Ibgajj!!	Q	QU
r1   c                 T    t          j        t          j        |                     dz  S rX  )r+   r   rJ  r-   s    r/   
fquad_hessz4test_x_overwritten_user_function.<locals>.fquad_hessW  s    vbgajj!!C''r1   )rS  r  r  r  r  r  )r  r  r  r  r  r   r6   r  g-C6*?r   )	r+   r  r   r   r   r   r.   rO   rJ  )
r  r  r  meth_jac	meth_hessrU   methr   r   r   s
             r/    test_x_overwritten_user_functionr  G  s        ( ( (  H  I 
c	B  B B8C9Dr$CdKKKry55DAAAAAB Br1   c                       e Zd Zd ZdS )TestGlobalOptimizationc                    d }t          j        |d          t          j        |dg          t          j        |dg          t          j        |dg          t          j        |dg          g}|D ]}t          |t           j                  sJ t          |d          sJ t          |d          sJ t          |d          sJ t          |d          sJ t          |d	          sJ t          |d
          sJ d S )Nc                     | dz  S r?  r   r-   s    r/   r}   zDTestGlobalOptimization.test_optimize_result_attributes.<locals>.funcr  s    6Mr1   r)   )rU   )r  r   r.   r   r!  r   r   r   )	r   basinhoppingdifferential_evolutionshgodual_annealingdirectr  r   rt   )ro   r}   r  rL  s       r/   test_optimize_result_attributesz6TestGlobalOptimization.test_optimize_result_attributesq  s.   	 	 	 (!44424'CC=y11*4';;?4'33	  	* 	*Ffh&=>>>>>63'''''69-----69-----65)))))66*****65))))))	* 	*r1   N)r   r   r   r  r   r1   r/   r  r  o  s#        * * * * *r1   r  c                     t          j        t          t                    } t	          | t          t                    d           t          j        t          t
                    }t	          |t          t                    d           d S )Nr  r   )r   approx_fprimerT   r  r   rR   rS   )r?  r  s     r/   test_approx_fprimer    sh     	}j99AA}55DAAAA}o>>AA}55DAAAAAAr1   c                  p   d } t          ddgddg          }t          j        | dd|          }t          t          j        ddg          t          j        ddg                    }t          j        | dd|          }t          |j        |j                   t          |j        |j                   d S )Nc                 6    | d         dz  | d         dz
  dz  z   S r  r   r-   s    r/   r|   ztest_gh12594.<locals>.f  s!    tQw!A$(Q&&r1   r  r   r  r   r  r	  )r   r   r   r+   rL   r   r   r.   )r|   r$  r   r   s       r/   test_gh12594r    s    
' ' ' Szr2h///F

A&&
I
I
ICrxc
++"b0B0BCCCF

A&&
I
I
ICCGSW%%%CE35!!!!!r1   rJ  r  sparse_typec                    fd}ddg}t          j        t          || t          |          }t          j        t          || t          t                    }t          |j        |j                   t          |j        |j                   |j        |j        k    sJ |j	        |j	        k    sJ |j
        |j
        k    sJ d S )Nc                 4     t          |                     S rA   )r   )r.   r  s    r/   sparse_rosen_hessz.test_sparse_hessian.<locals>.sparse_rosen_hess  s    {:a==)))r1   r  r  )r   r   r   r   r   r   r   r.   r   r   nhev)r   r  r  rU   
res_sparse	res_denses    `    r/   test_sparse_hessianr    s    * * * * * bB"5"V'07HJ J JJ!%F&/jB B BI IM:>222IK...>Z_,,,,>Z_,,,,>Z_,,,,,,r1   )r   r  r  ri   numpyr+   numpy.testingr   r   r   r   r   r   r	   r   r
   rP   scipyr   scipy.optimize._minimizer   r   r   r   r   scipy.optimize._linprogr   scipy.optimize._rootr   scipy.optimize._root_scalarr   scipy.optimize._qapr   (scipy.optimize._differentiable_functionsr   r   scipy.optimize._optimizer   r   r   scipy.optimizer   r   r   scipy.sparser   r   r   r    r!   r"   scipy.conftestr#   scipy._lib._array_api_no_0dr$   r%   rl  r  rW   rY   r   ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rn  r  r  r1  r~  r  r  r  r  r  r  r  r  r  rR   rS   rT   r  r  r  r  r  r  r
  r  r  r  rA  rC  r[  r]  fixturerb  rh  rj  rm  rp  r  r  xfail_on_32bitro  show_configr  r  r  r  r  r  r  r  r  r  r   r1   r/   <module>r     sr
                A A A A A A A A A A A A A A A A A A  * * * * * *        @ @ @ @ @ @ @ @? ? ? ? ? ? ? ? ? ? 4 3 3 3 3 3 - - - - - - ; ; ; ; ; ; < < < < < < O O O O O O O O M M M M M M M M M M 7 7 7 7 7 7 7 7 7 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 / / / / / / H H H H H H H H;/ 3 3 3l7' 7' 7' 7' 7' 7' 7' 7'tRA RA RA RA RA RA RA RAj- - -"  0H H H  8 8 8D D D$ $ $      > I: I: I:X'F 'F 'FT    8   
     :   
     :   
    "<   
QD QD QD QD QD QD QD QDh ::: - -	 -:= := := := := := := :=zjN jN jN jN jN jN jN jNZ	& & & & & & & &R@ @ @)< )< )< )< )< )< )< )<X<- <- <-~#6 #6 #6Lz6 z6 z6zJ J J*$ $ $ # # # # # # # #<  ; ; ;7 7 7 a&4 4 4, 0  0  0  0  0  0  0  0F= = =7 7 77 7 7< < <I% I% I% I% I% I% I% I%X r      FB> B> B> B> B> B> B> B>J# # #2# # # # # # # # " " "3 3 3&3 3 3&9 9 9*C C CQ Q Qh "
!
#
# NOO$5$'222;?	J6R L  N N 79#56611w}'=>>(>??W[%9::;< ;< ;: @? ?> 21 76N N PO;<| 79#566(/ (/ 76(/V) ) ).@ @ @0  %B %B %BP* * * * * * * *0B B B" " "" K#@AAZ)2Iy)J K K- -K K BA- - -r1   