o
    i                    @   s  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j8j9Z9dd Z:G dd dZ;G dd de;Z<dd Z=dd Z>dd Z?dd Z@d d! ZAd"d# ZBd$d% ZCej8jDd&d' ZEej8jDd(d) ZFd*d+ ZGG d,d- d-e<ZHG d.d/ d/e<ZIG d0d1 d1e<ZJG d2d3 d3e<ZKG d4d5 d5e;ZLej8Md6g d7d8d9 ZNG d:d; d;ZOG d<d= d=ZPG d>d? d?ZQd@dA ZRG dBdC dCZSdDdE ZTdFdG ZUdHdI ZVdJdK ZWdLdM ZXe4G dNdO dOZYdPdQ ZZdRdS Z[dTdU Z\dVdWgZ]dXdYgZ^dZZ_d[d\ Z`G d]d^ d^Zad_d` Zbdadb Zcdcdd Zddedf ZeG dgdh dhZfej8jDej8gdidjdk ZhG dldm dmZidndo ZjG dpdq dqZkejldrds Zmdtdu Zndvdw Zodxdy Zpdzd{ Zqd|d} Zrer Zsej8td~ej8juejvddd d d dkd~dej8Md6esd ej8Mdesd ej8Mdesd ej8Mdesd ej8Mdesd dd Zwej8Md6esd dd Zxdd Zydd Zzdd Z{dd Z|G dd dZ}dd Z~dd Zej8Md6ddgej8Mde-e.e/e0e1e2gdd ZdS )zx
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               	   C   sV  dd } dd }t dg}t| ||}t|d tj| ||ddd	}t|d tj| ||d
d}t|d tj| ||d
ddd}t|d ttj| ||ddd }|dksZJ ttj| ||ddddd }|dksoJ dd }dd }t ddd}tj|||ddd}t|d tttj|||ddd tjt	t
tddd}|dk sJ d S )Nc                 S   s   ddt |    S N   npexpx r,   \/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/optimize/tests/test_optimize.pyexpit.      ztest_check_grad.<locals>.expitc                 S   s    t |  dt |   d  S Nr&      r'   r*   r,   r,   r-   	der_expit1       z"test_check_grad.<locals>.der_expit      ?r   random  )	directionseedư>)epsilon)r:   r7   rng皙?Hz>c                 S   s   | t |   S N)r(   sinsumr*   r,   r,   r-   x_sinxJ      ztest_check_grad.<locals>.x_sinxc                 S   s   t | | t |   S r>   r(   r?   cosr*   r,   r,   r-   
der_x_sinxM      z#test_check_grad.<locals>.der_x_sinxr1   皙?)r7   r;   Zrandom_projectionallgƠ>)r(   arrayr
   Z
check_gradr   absarangeassert_raises
ValueErrorhimmelblau_gradhimmelblau_hesshimmelblau_x0)r.   r2   x0rrA   rE   r,   r,   r-   test_check_grad*   sL   







rS   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
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                 C   s   t g dg dg dg dg dg| _t g d| _t dt j| _t g d| _d| _t	
 | _t	
 | _t	
 | _d S )	Nr&   r&   r&   )r&   r&   r   )r&   r   r&   )r&   r   r   )      ?333333?      ?   )        g\g)3?  )r(   rI   FKzerosZfloat64startparamssolutionmaxiter	threadinglocal	funccalls	gradcallstraceselfr,   r,   r-   setup_methodf   s   


zCheckOptimize.setup_methodc                 C   s   t | jds
d| j_t | jdsd| j_| j jd7  _| jjdkr&tdt| j|}tt	t
|}|t| j| }t | jdsJg | j_| jjt| |S )Ncr   r&   ip  z+too many iterations in optimization routinet)hasattrrd   rj   re   RuntimeErrorr(   dotr\   logr@   r)   r]   rf   rk   appendcopy)rh   r+   log_pdotlogZfr,   r,   r-   funct   s   zCheckOptimize.funcc                 C   sl   t | jds
d| j_| j jd7  _t| j|}ttt|}t|| }t| j	 || j
 S )Nrj   r   r&   )rl   re   rj   r(   rn   r\   ro   r@   r)   Z	transposer]   rh   r+   rr   rs   pr,   r,   r-   grad   s   zCheckOptimize.gradc                 C   s`   t | j|}t tt |}t || }t | jjt t || jt | jj| S r>   )r(   rn   r\   ro   r@   r)   TZdiagrv   r,   r,   r-   hess   s   
"zCheckOptimize.hessc                 C   s   t | ||S r>   )r(   rn   rz   rh   r+   rw   r,   r,   r-   hessp   rB   zCheckOptimize.hesspN)	__name__
__module____qualname____doc__ri   ru   rx   rz   r|   r,   r,   r,   r-   rT   `   s    	rT   c                   @   s
  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
ddd Zdd Zdd Zdd Ze	j
ddgddgddgddggdd Zdd  Ze	j
jd!d"d#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;S )<CheckOptimizeParameterizedc           	   
   C   s
  | j r0| j| jdd}tj| j| jdd| j|d}|d |d |d |d	 |d
 f\}}}}}ntj| j| j| jd| jd| jdd}|\}}}}}t	| || | j
dd | jjdkscJ | jj| jjdksoJ | jjt	| jjdd g dg dgddd d S )NFra   disp
return_allr,   CG)argsmethodjacoptionsr+   funnfevnjevstatusT)ra   full_outputr   retallr9   atol	      r1      )r         rX   )r   g;ӱ.g)`$|;?+=r=   r   rtol)use_wrapperra   r   r
   minimizeru   r_   rx   fmin_cgr   r`   rd   rj   re   rf   rk   )	rh   optsresparamsfopt
func_calls
grad_callswarnflagretvalr,   r,   r-   test_cg   s6    

z"CheckOptimizeParameterized.test_cgc                 C   sN   dd }t dddD ]}tj||gdd}|jsJ t|jdgd	d
 qd S )Nc                 S   s   ddt d| d   d  S )Ng      @r&         rX   r1   r'   )rR   r,   r,   r-   rt      s   z8CheckOptimizeParameterized.test_cg_cornercase.<locals>.fg      rY   G   r   r   rX   h㈵>r   )r(   Zlinspacer
   r   successr   r+   )rh   rt   rQ   solr,   r,   r-   test_cg_cornercase   s   
z-CheckOptimizeParameterized.test_cg_cornercasec              
   C   s  | j r8| j| jdd}tj| j| j| jdd|d}|d |d |d |d	 |d
 |d |d f\}}}}}}}	ntj| j| j| jd| jd| jdd}
|
\}}}}}}}	t	| || | j
dd | jjdksmJ | jj| jjdksyJ | jjt	| jjdd g dg dgddd d S )NFr   BFGSr,   r   r   r   r   r+   r   r   Zhess_invr   r   r   Tr   ra   r   r   r   r9   r   
         )r   g&/LgB__E7?)r   g$g
|3?r   r=   r   )r   ra   r   r
   r   ru   r_   rx   	fmin_bfgsr   r`   rd   rj   re   rf   rk   )rh   r   r   r   r   ZgoptZHoptr   r   r   r   r,   r,   r-   	test_bfgs   s<   

z$CheckOptimizeParameterized.test_bfgsc                 C   sl   t jtdd% tg d}| jtd d}tjtj	|dd|d W d    d S 1 s/w   Y  d S )	N+'hess_inv0' matrix isn't positive definite.matchg?ffffff?皙?ffffff?333333?   r   	hess_inv0r   r,   rQ   r   r   r   )
pytestr	   rM   r(   rI   r   eyer
   r   r   )rh   rQ   r   r,   r,   r-   test_bfgs_hess_inv0_neg   s   "z2CheckOptimizeParameterized.test_bfgs_hess_inv0_negc                 C   sv   t jtdd* tg d}td}d|d< | j|d}tjtj	|dd	|d
 W d    d S 1 s4w   Y  d S )Nr   r   r   r   r   r   r   r   r   r,   r   )
r   r	   rM   r(   rI   r   r   r
   r   r   )rh   rQ   r   r   r,   r,   r-   test_bfgs_hess_inv0_semipos   s   
"z6CheckOptimizeParameterized.test_bfgs_hess_inv0_semiposc                 C   sn   t j}tg d}| jdtd d}t j||dd|d}t j||ddd| jid}t|j|jd	d
 d S )Nr   {Gz?r   r   r   r,   r   r   r9   r   )	r
   r   r(   rI   r   r   r   r   r   )rh   r   rQ   r   r   Zres_truer,   r,   r-   test_bfgs_hess_inv0_sanity   s   z5CheckOptimizeParameterized.test_bfgs_hess_inv0_sanityignore::UserWarningc              	      s   dd   fdd}dg}t jdd2 | jr*d| ji}tj ||d	d
|dd }n
tj ||| jd}t  |r=J W d    d S 1 sHw   Y  d S )Nc                 S   s   t j|    S r>   )r(   er*   r,   r,   r-   ru        z;CheckOptimizeParameterized.test_bfgs_infinite.<locals>.funcc                    s
    |  S r>   r,   r*   ru   r,   r-   fprime     
z=CheckOptimizeParameterized.test_bfgs_infinite.<locals>.fprimer   ignore)overr   r   r,   r   r+   r   )r(   errstater   r   r
   r   r   isfinite)rh   r   rQ   r   r+   r,   r   r-   test_bfgs_infinite	  s   
"z-CheckOptimizeParameterized.test_bfgs_infinitec                 C   sL   g d}t jt j|dddid}t jt j|dddid}|j|jks$J d S )Nr   bfgsZxrtolMbP?r   r   gtolr
   r   r   nit)rh   rQ   r   refr,   r,   r-   test_bfgs_xrtol  s   

z*CheckOptimizeParameterized.test_bfgs_xrtolc                 C   L   g d}t jt j|dddid}t jt j|dddid}|j|jks$J d S )Ng$@g333334@g%@r   333333r   c1:0yE>r   r<   )r
   r   r   r   )rh   rQ   Zres_c1_smallZ
res_c1_bigr,   r,   r-   test_bfgs_c1#  s   

z'CheckOptimizeParameterized.test_bfgs_c1c                 C   r   )Nr   r   c2?r   r   r   )rh   rQ   Zres_defaultZres_modr,   r,   r-   test_bfgs_c2.  s   

z'CheckOptimizeParameterized.test_bfgs_c2r   r   rX   r1   皙r<   rG   c                 C   sV   t jtdd g d}tjtj|d||dd W d    d S 1 s$w   Y  d S )Nz'c1' and 'c2'r   r   cg)r   r   r   )r   r	   rM   r
   r   r   )rh   r   r   rQ   r,   r,   r-   test_invalid_c1_c28  s   "z-CheckOptimizeParameterized.test_invalid_c1_c2c           
   	   C   s  | j r2| j| jdd}tj| j| jdd|d}|d |d |d |d	 |d
 |d f\}}}}}}ntj| j| jd| jd| jdd}	|	\}}}}}}t| || | j	dd t|dd  | j	dd  dd | j
jdkstJ | j
j| jjdksJ | jjd S )NFr   r,   Powellr   r   r   r+   r   direcr   r   r   Tr   r9   r   r&   h㈵>   r   )r   ra   r   r
   r   ru   r_   fmin_powellr   r`   rd   rj   re   
rh   r   r   r   r   r   numiterr   r   r   r,   r,   r-   test_powellA  s,    z&CheckOptimizeParameterized.test_powellzeThis part of test_powell fails on some platforms, but the solution returned by powell is still valid.reasonc           
   	   C   s   | j r2| j| jdd}tj| j| jdd|d}|d |d |d |d	 |d
 |d f\}}}}}}ntj| j| jd| jd| jdd}	|	\}}}}}}t| j	dd g dg dg dg dg dgd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   ra   r   r
   r   ru   r_   r   r   rf   r   r,   r,   r-   test_powell_gh14014c  s2   
z.CheckOptimizeParameterized.test_powell_gh14014c                 C   s   dd | j D }| jrP| j| jdd}tj| j| j d|d|d}|d |d	 }}|| jjks1J t	| || | j
d
dd | jjdksHJ | jjdksRJ d S d S )Nc                 S   s   g | ]	}t j t jfqS r,   )r(   pi).0_r,   r,   r-   
<listcomp>  s    zBCheckOptimizeParameterized.test_powell_bounded.<locals>.<listcomp>Fr   r,   r   )r   boundsr   r   r+   r   r9   r   r      r   )r_   r   ra   r   r
   r   ru   rd   rj   r   r`   re   )rh   r   r   r   r   r   r,   r,   r-   test_powell_bounded  s$   	z.CheckOptimizeParameterized.test_powell_boundedc           	   	   C   s  | j r.| j| jdd}tj| j| jdd|d}|d |d |d |d	 |d
 f\}}}}}ntj| j| jd| jd| jdd}|\}}}}}t| || | j	dd | j
jdks_J | j
j| jjdkskJ | jjt| jjdd g dg dgddd d S )NFr   r,   Nelder-meadr   r+   r   r   r   r   Tr   r9   r      r   L   N   )g	dװ?g]fgt䝁?)gә ?g#=^goT?r   r=   r   )r   ra   r   r
   r   ru   r_   fminr   r`   rd   rj   re   rf   rk   )	rh   r   r   r   r   r   r   r   r   r,   r,   r-   test_neldermead  s6   
z*CheckOptimizeParameterized.test_neldermeadc              
   C   sR  t d}| j|d< tdD ]}||d |f  d7  < q| jrV| jdd|d}tj| j| jd	d
|d}|d |d |d |d |d f\}}}}}	t	|d d |d  ntj
| j| jd	| jddd|d}
|
\}}}}}	t	| || | jdd | jjdksJ | jj| jjdksJ | jjt	| jjdd g dg dgddd d S )N)r   rY   .rY   r&   r<   FTra   r   r   initial_simplexr,   r   r   r+   r   r   r   r   Zallvecsr   r   ra   r   r   r   r  r9   r   d   2   4   )gIt?g?'ΛTgx8?)gҢ_׆?goMg囎|52?r   r=   r   )r(   r^   r_   ranger   ra   r
   r   ru   r   r  r`   rd   rj   re   rf   rk   )rh   simplexjr   r   r   r   r   r   r   r   r,   r,   r-   test_neldermead_initial_simplex  sF   


z:CheckOptimizeParameterized.test_neldermead_initial_simplexc                 C   s   g }t d}| jd d |d< tdD ]}||d |f  d7  < q|| t d}|| |D ].}| jrP| jdd|d}ttt	j
| j| jd	d
|d q4ttt	j| j| jd	| jddd|d
 q4d S )N)rY   r1   r1   .r&   r<   )rY   rY   Fr  r,   r   r   Tr  )r(   r^   r_   r  rp   r   ra   rL   rM   r
   r   ru   r  )rh   Zbad_simplicesr  r  r   r,   r,   r-   #test_neldermead_initial_simplex_bad  s8   



z>CheckOptimizeParameterized.test_neldermead_initial_simplex_badc                 C   sZ   dd }t j|dgdgdd}t|jdg t j|ddgdd	gdd}t|jddg d S )
Nc                 S      t | d S Nr1   r(   r@   r*   r,   r,   r-   quad	  r   z>CheckOptimizeParameterized.test_neldermead_x0_ub.<locals>.quadr&   )r   rV   nelder-meadr   r   r   r1   )r&         @r
   r   r   r+   )rh   r  r   r,   r,   r-   test_neldermead_x0_ub  s   z0CheckOptimizeParameterized.test_neldermead_x0_ubc                 C   s6   ddi}t j| j| jd| jd|d}|jdksJ d S )Nra   	Newton-CGr,   r   r   r   r   r&   )r
   r   ru   r_   rx   r   )rh   r   resultr,   r,   r-   test_ncg_negative_maxiter  s   z4CheckOptimizeParameterized.test_ncg_negative_maxiterc                 C   sX   dd }dd }dg}d}t j|||dt|dd	}|jdks!J t|jd tj d S )
Nc                 S   s   t | d S Nr   )r(   rD   r*   r,   r,   r-   cosine&  r   z=CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.cosinec                 S   s   t | d  S r  )r(   r?   r*   r,   r,   r-   r   )     z:CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.jacr<   r   	newton-cg)xtol)rQ   r   r   r   )r
   r   dictr   r   r+   r(   r   )rh   r   r   rQ   r#  r  r,   r,   r-   test_ncg_zero_xtol$  s   z-CheckOptimizeParameterized.test_ncg_zero_xtolc              
   C   s   | j r| j| jdd}tj| j| jd| jd|dd }ntj| j| j| jd| jd| jdd}|}t	| || | j
dd	 | jjd
ksJJ | jj| jjdksVJ | jjt	| jjdd g dg dgddd d S )NFr   r  r,   r  r+   r   r9   r   r      rY   r   (6-H=g?g4u3?r(  g_g/N3?r=   r   )r   ra   r   r
   r   ru   r_   rx   fmin_ncgr   r`   rd   rj   re   rf   rk   rh   r   r   r   r,   r,   r-   test_ncg6  s6   
z#CheckOptimizeParameterized.test_ncgc                 C      | j r| j| jdd}tj| j| jd| j| jd|dd }ntj	| j| j| j| jd| jd| jdd	}|}t
| || | jdd	 | jjd
ksNJ | jj| jjdksZJ | jjt
| jjdd g dg dgddd d S )NFr   r  r,   )r   r   rz   r   r   r+   )Zfhessr   ra   r   r   r   r9   r   r      rY   r   r'  r)  r=   r   )r   ra   r   r
   r   ru   r_   rx   rz   r*  r   r`   rd   rj   re   rf   rk   r+  r,   r,   r-   test_ncg_hessW  :   
z(CheckOptimizeParameterized.test_ncg_hessc                 C   r-  )NFr   r  r,   )r   r   r|   r   r   r+   )Zfhess_pr   ra   r   r   r   r9   r   r   r.  rY   r   r'  r)  r=   r   )r   ra   r   r
   r   ru   r_   rx   r|   r*  r   r`   rd   rj   re   rf   rk   r+  r,   r,   r-   test_ncg_hesspy  r0  z)CheckOptimizeParameterized.test_ncg_hesspc                 C   s^   | j r+tj| j| jd| j| jdd}t|j| | j	dd | j
jdks-J | j
jd S d S )Ncobyqara   r   r   r9   r   A   )r   r
   r   ru   r_   ra   r   r   r   r`   rd   rj   rh   r   r,   r,   r-   test_cobyqa  s   z&CheckOptimizeParameterized.test_cobyqaN) r}   r~   r   r   r   r   r   r   r   r   markfilterwarningsr   r   r   r   parametrizer   r   xfailr   r   r  r  r  r  r  r%  r,  r/  r1  r6  r,   r,   r,   r-   r      s>    "


	

"
 (!""r   c                     s\   t jd  fdd} dD ]}dD ]}tj|  d|d|id}|d	 |ks*J qqd S )
Nl	   <vgRI*q4 c                         dd S Nr&   r[   r5   r*   r;   r,   r-   cost  r   ztest_maxfev_test.<locals>.cost)r&   r   r
  )r   Nelder-Meadr   maxfevr   r   )r(   r5   default_rngr
   r   )r?  Zimaxfevr   r  r,   r>  r-   test_maxfev_test  s   rC  c                  C   s   dd } t j| tdd\}}tdD ]}|t| |d |d ks(J qd}tt jj|d |t| W d    n1 sEw   Y  t j| tdd\}}d}tt|d |t	ddg W d    d S 1 stw   Y  d S )	Nc                 S      | S r>   r,   r*   r,   r,   r-   func_     z8test_wrap_scalar_function_with_validation.<locals>.func_r&   r   r   zToo many function callsr   @The user-provided objective function must return a scalar value.)
r
   	_optimizeZ'_wrap_scalar_function_maxfun_validationr(   asarrayr  rL   Z_MaxFuncCallErrorrM   rI   )rE  Zfcallsru   imsgr,   r,   r-   )test_wrap_scalar_function_with_validation  s$   "rL  c                  C   sT   d} t t| d tjdd tddgdd W d    d S 1 s#w   Y  d S )NrG  r   c                 S   rD  r>   r,   r*   r,   r,   r-   <lambda>      z.test_obj_func_returns_scalar.<locals>.<lambda>r&   r   r   )rL   rM   r
   r   r(   rI   r   r,   r,   r-   test_obj_func_returns_scalar  s    "rO  c                  C   s4   t g d} tjjtj| dd}|jdksJ d S )Nr   r   )xatoliS  )r(   rI   r
   	_minimize_minimize_neldermeadr   r   )rQ   r   r,   r,   r-   test_neldermead_iteration_num  s
   rS  c                  C   s2   t ddgt j} dd }tj|| dd d S )N      @      @c                 S   s   | j tjksJ t| S r>   )dtyper(   float32r
   r   r*   r,   r,   r-   rosen_  s   
z*test_neldermead_respect_fp.<locals>.rosen_r@  r   )r(   rI   astyperW  r
   r   )rQ   rX  r,   r,   r-   test_neldermead_respect_fp  s   rZ  c                  C   s&   dd } t jj| ddgdddd d S )Nc                 S   s   | d d | d d  S Nr   r1   r&   r,   r*   r,   r,   r-   ru     rF   z)test_neldermead_xatol_fatol.<locals>.funcr&   r1   r   )ra   rP  Zfatol)r
   rQ  rR  r   r,   r,   r-   test_neldermead_xatol_fatol  s   
r\  c                  C   sR   dd } g d}t j| |dd}t|jd t j| |dddid	}t|jd d S )
Nc                 S   r  r  r  r*   r,   r,   r-   ru     r   z&test_neldermead_adaptive.<locals>.func)gM@'?gOC?g~?g -?g?g#j?g ?g~^g?gܠr#?g^cǽ?g)i	?g'?g?g1?g[VΤ?r@  r   FZadaptiveTr   )r
   r   r   r   )ru   p0r   r,   r,   r-   test_neldermead_adaptive  s   
r^  c                  C   s  dd } d}g d}t tj tj| ||dd}W d    n1 s#w   Y  t|jtdgt| dd	 t	|j
d
 t	|jd g dg dg dg}t tj tj| ||dd|id}W d    n1 skw   Y  t|jtg ddd	 t	|j
d t	|jd d S )Nc                 S   r  r  r  r*   r,   r,   r-   ru     r   z/test_bounded_powell_outsidebounds.<locals>.func)r  r&   r_  r_  )rX   gr   r  rZ   r9   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(   rI   lenr   r   r   )ru   r   rQ   r   r   r,   r,   r-   !test_bounded_powell_outsidebounds
  s&    rd  c                  C   s  dd } d}g d}ddd}t j| |d|d}t|jd	d
d t|jd	d
d t j| |||dd}tg d}t|j|d
d t|j| |d
d dtj dfdtjfddf}t j| |||dd}tg d}t|j|d
d t|j| |d
d dd } dgd }g d}t j| |dd}t j| ||dd}t|jdd
d t|jdd
d tj tjfgd }t j| ||dd}t|j|jd
d t|j|jd
d t|j|jd
d g d}dgd }t	t j
 t j| ||dd}W d    n1 sw   Y  t|jdd
d d S )Nc                 S   r  r  r  r*   r,   r,   r-   ru   3  r   z+test_bounded_powell_vs_powell.<locals>.func))r  )r   )r&   gffffff"@)r`  gffffff@g/)g gr   r   rh  绽|=ftolr#  r   r   rZ   r9   r   )r   r   r   )r  r   r&   r   rh  )Nr  r   r&   )r`  Nrg  c                 S   sz   t | d  t | d  t | d  | d   t | d  }|t t | d | d  t | d  8 }|d S Nr   r&   r1   rC   r+   rk   r,   r,   r-   ru   Q  s   D.)rh  r   rY   )r   r   r   r   r  g8:}?r   )gb4F@g:gW?@)r
   r   r   r+   r   r(   rI   infr   r   rb  )ru   r   rQ   r   Z
res_powellZres_bounded_powellrw   r,   r,   r-   test_bounded_powell_vs_powell*  sb   	




ro  c                  C   s   dt j dfgd dddd} g d}dd	 }tj||fi | }t|jd
dd dd	 }tj||fi | }t|jd dd	 }tj||fi | }t|jddd dd	 }t j dfgd | d< tj||fi | }t|jddd d S )Nr   g    .ArY   r   rj  )r   r   r   rU   c                 S   s   t |  S r>   r  r*   r,   r,   r-   rt        z1test_onesided_bounded_powell_stability.<locals>.fg    `F-C6?r   c                 S   .   t t | d  t | dkrd S d S )Nr<   r   r&   r  r(   rJ   r@   rH   r*   r,   r,   r-   rt        .gwc                 S   rr  )Nr   r   r&   r  rs  r*   r,   r,   r-   rt     rt  gB+Iar=   r   c                 S   s^   t t | d d d  t t | dd  d  }|t | dkr*d9 }|S d9 }|S )Nr1   r   r<   r   r&   r  rs  rm  r,   r,   r-   rt     s
   :g     @@r   g 4&k\)r(   rn  r
   r   r   r   )kwargsrQ   rt   r   r,   r,   r-   &test_onesided_bounded_powell_stabilityw  s$   rv  c                   @      e Zd ZdZdZdS )TestOptimizeWrapperDispTNr}   r~   r   r   r   r,   r,   r,   r-   rx        rx  c                   @      e Zd ZdZdZdS )TestOptimizeWrapperNoDispTFNry  r,   r,   r,   r-   r|    rz  r|  c                   @   r{  )TestOptimizeNoWrapperDispFTNry  r,   r,   r,   r-   r}    rz  r}  c                   @   rw  )TestOptimizeNoWrapperNoDispFNry  r,   r,   r,   r-   r~    rz  r~  c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zejd%ejd&ejd'ejd(g d)e d*d+ Zejd(g d,d-d. Zd/d0 Zejd(g d1d2d3 Zejjejd(g d4d5d6 Z d7d8 Z!d9d: Z"d;d< Z#d=d> Z$ejd(g d?d@dA Z%ejd(g dBdCdD Z&ejd'ejd(e'ejdEg dFdGdH Z(dIdJ Z)ejd(dKdLdM Z*ejjejd(g dNdOdP Z+dQS )RTestOptimizeSimplec                 C   sp   dd }dd }t jg}t jddd tj|||dd}t ||s&J W d    d S 1 s1w   Y  d S )	Nc                 S   rD  r>   r,   r*   r,   r,   r-   ru     rF  z.TestOptimizeSimple.test_bfgs_nan.<locals>.funcc                 S   
   t | S r>   r(   Z	ones_liker*   r,   r,   r-   r     r   z0TestOptimizeSimple.test_bfgs_nan.<locals>.fprimer   )r   invalidFr   )r(   nanr   r
   r   isnan)rh   ru   r   rQ   r+   r,   r,   r-   test_bfgs_nan  s   "z TestOptimizeSimple.test_bfgs_nanc                 C   s   dd }t jdd t|d}W d    n1 sw   Y  t |d s)J |d du s1J d	d }d
d }t jdd tj|d|d}W d    n1 sRw   Y  t |d s`J |d du shJ d S )Nc                 S      t jS r>   r(   r  r*   r,   r,   r-   ru        z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.funcr   r  r   r   r   Fc                 S   s   | dkrdS t jS r  r  r*   r,   r,   r-   ru     rB   c                 S   r  r>   r  r*   r,   r,   r-   r     r   z7TestOptimizeSimple.test_bfgs_nan_return.<locals>.fprime)r   )r(   r   r
   r   r  )rh   ru   r  r   r,   r,   r-   test_bfgs_nan_return  s   z'TestOptimizeSimple.test_bfgs_nan_returnc                 C   s^   t t dt jt| j }tj| j	| j
|d| jdd}t| 	|| 	| jdd d S )NrV   r,   F)r:   r   ra   r   r9   r   )r(   sqrtspacingr5   randrc  r`   r
   r   ru   r_   ra   r   )rh   r:   r   r,   r,   r-   test_bfgs_numerical_jacobian  s   "
z/TestOptimizeSimple.test_bfgs_numerical_jacobianc                 C   s^   g d}g d}t ||D ]\}}tj| j| j||d}t| |j| | jdd qd S )N)r   r   TNC2-point3-pointN)r   r   r9   r   )		itertoolsproductr
   r   ru   r_   r   r+   r`   )rh   methodsjacsr   r   r  r,   r,   r-   test_finite_differences_jac  s   z.TestOptimizeSimple.test_finite_differences_jacc              	   C   s   g d}t tjf }t||D ]\}}|tju r| }tj| j| j|| j|d}|j	s.J qg d}|D ]$}t
t tj| j| j|| jd d W d    n1 sTw   Y  q5d S )N)trust-constrr  	trust-ncgtrust-krylovr   r   rz   )r  r  doglegtrust-exact)r   r
   r   r  r  r   ru   r_   rx   r   r   r	   rM   )rh   r  Zhessesr   rz   r  r,   r,   r-   test_finite_differences_hess  s(   
z/TestOptimizeSimple.test_finite_differences_hessc                 C   s.   dd }t j|dgdd}t|dddd d S )	Nc                 S   s   | dk rdS | d|   S )Nr   gBrV   r,   r*   r,   r,   r-   rt   	  s   z/TestOptimizeSimple.test_bfgs_gh_2169.<locals>.f      $@Fr   rV   rq  r   r   )r
   r   r   )rh   rt   Zxsr,   r,   r-   test_bfgs_gh_2169  s   z$TestOptimizeSimple.test_bfgs_gh_2169c                    s*    fdd}t   tj|ddddd d S )Nc                    s2   | d }| vs
J   | d| d  d|  fS )Nr   r   r1      )add)r+   xpseenr,   r-   rt     s   
z:TestOptimizeSimple.test_bfgs_double_evaluations.<locals>.fr   Tr=   )r   r   tol)setr
   r   rh   rt   r,   r  r-   test_bfgs_double_evaluations  s   z/TestOptimizeSimple.test_bfgs_double_evaluationsc                 C   s   t j| j| j| jd| jd}|\}}}t| || | jdd | jj	dks-J | jj	| j
j	dks9J | j
j	t| jjdd g dg d	gd
dd d S )Nr,   )r   ra   r9   r   r   r   rY   )g><gwT볹gUuAX?)rZ   gHg!mʲ3?r   r=   r   )r
   fmin_l_bfgs_bru   r_   rx   ra   r   r`   rd   rj   re   rf   rk   rh   r   r   r   dr,   r,   r-   test_l_bfgs_b  s    

z TestOptimizeSimple.test_l_bfgs_bc                 C   sB   t j| j| jd| jd}|\}}}t| || | jdd d S )NT)Zapprox_gradra   r9   r   )r
   r  ru   r_   ra   r   r`   r  r,   r,   r-   test_l_bfgs_b_numjac3  s   

z'TestOptimizeSimple.test_l_bfgs_b_numjacc                    sJ    fdd}t j| j jd}|\}}}t |  jdd d S )Nc                    s     |  | fS r>   ru   rx   r*   rg   r,   r-   r   @  r/   z4TestOptimizeSimple.test_l_bfgs_b_funjac.<locals>.funra   r9   r   )r
   r  r_   ra   r   ru   r`   )rh   r   r   r   r   r  r,   rg   r-   test_l_bfgs_b_funjac>  s   


z'TestOptimizeSimple.test_l_bfgs_b_funjacc                 C   s   G dd d}| }t jt jddgd|ddid}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d Zdd ZdS )z:TestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callbackc                 S   s   d| _ d | _d | _d S r  )r   r   r+   rg   r,   r,   r-   __init__O  s   
zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__init__c                 S   s$   || _ t|| _|  jd7  _d S r%   )r+   r
   r   r   r   rh   r+   r,   r,   r-   __call__T  s   zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__call__Nr}   r~   r   r  r  r,   r,   r,   r-   CallbackN  s    r  rZ   l-bfgs-bra   r   )r   callbackr   r&   Fz+STOP: TOTAL NO. OF ITERATIONS REACHED LIMIT)r
   r   r   r   r   r   r+   r   r   r   message)rh   r  rj   r   r,   r,   r-   test_l_bfgs_b_maxiterK  s   z(TestOptimizeSimple.test_l_bfgs_b_maxiterc                 C   s  d| j d}tj| j| jd| j|d}t| |j| | jdd | j	j
|jks+J d | j_
| j	_
tj| j| jd|d}| jj
|jksGJ t| |j| | jdd d | j_
| j	_
tj| j| jd	d|d
}| jj
|jkssJ t| |j| | jdd d S )NFr   ra   L-BFGS-Br   r   r   r9   r   r   r   r  r   r   r   )ra   r
   r   ru   r_   rx   r   r+   r`   re   rj   r   rd   r   )rh   r   rR   rar,   r,   r-   test_minimize_l_bfgs_be  s2   
z)TestOptimizeSimple.test_minimize_l_bfgs_bc                 C   sv   d }dD ]4}d| j |d}tj| j| jd| j|d}| |j}|d u r'|}n||k s-J t|| | j|d qd S )N)r<   rq  r=   ri  F)r   ra   rk  r  r  r   )	ra   r
   r   ru   r_   rx   r+   r   r`   )rh   Zv0r  r   r   vr,   r,   r-   test_minimize_l_bfgs_b_ftol  s   z.TestOptimizeSimple.test_minimize_l_bfgs_b_ftolc                 C   s6   t jt jtddgdt jdddd}|jrJ d S )Nr   rV   r  Fr&   )r   Zmaxlsr  )r
   r   r   r(   rI   r   r   )rh   r   r,   r,   r-   test_minimize_l_bfgs_maxls  s
   z-TestOptimizeSimple.test_minimize_l_bfgs_maxlsc                    s   t j t j}g tdd} fdd}d\}}}t j||||d tdd t|d  D \}}|| }	td | }
t j |||	d\}}}t	||
 d S )	Nr   r[   c                    s    | } | |S r>   )rp   )r+   valuert   valuesr,   r-   objfun  s   
zMTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.objfun)   r	  i,  )r   maxfunc                 s   s    | ]	\}}||fV  qd S r>   r,   )r   rJ  yr,   r,   r-   	<genexpr>  s    zPTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.<genexpr>)
r
   r   r   r(   fullr  max	enumerateminr   )rh   grQ   r  lowZmediumhighr  kr  targetZxminr  r  r,   r  r-   *test_minimize_l_bfgs_b_maxfun_interruption  s   
"z=TestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruptionc                 C   sF   		 ddd}g d}t jt j||tddd	}t|jd
ddd d S )Nr,   r<   r	  c                 [   s   |}| |}	d}
d}d}d}|rp|sp||k rpd}|d7 }t t|D ]D}|| | || | fD ]!}t|}|||< | |g|R  }|
d7 }
||	k rR|}	|}d}q1|d ur[|| |d urg|
|krgd} nq#|rp|sp||k stj|	|||
|dkdS )Nr&   r   TFr   r+   r   r   r   )r  r(   sizerq   r
   r   )r   rQ   r   rA  stepsizera   r  r   bestxbestyfuncallsniterimprovedstopdimstestxtestyr,   r,   r-   custmin  s<   

z/TestOptimizeSimple.test_custom.<locals>.custmin)g?r   r   皙?r   皙?r  r   rV   rq  r  r,   Nr<   r	  N)r
   r   r   r$  r   r+   )rh   r  rQ   r   r,   r,   r-   test_custom  s   
zTestOptimizeSimple.test_customc                    s<   ddg d fdd}ddg}t jt j|| d d S )N)rh  r1   )r   rY   constraintsc                    s(   |d  u sJ |d u sJ t  S )Nr   r  r
   r   )r   rQ   r   r   r  r,   r-   r    s   z0TestOptimizeSimple.test_gh10771.<locals>.custminr&   )r   r   r  )r
   r   r   )rh   r  rQ   r,   r  r-   test_gh10771  s   
zTestOptimizeSimple.test_gh10771c                 C   s   dd }dd }dD ]?}|dv rd }n|}t j|ddg|d|d	}t j|ddg|d
|d	}||j||jk sIJ | d||j d||j q
d S )Nc                 S   s$   | \}}|d |d  |d  d S )Nr1   r   r&   r,   zr+   r  r,   r,   r-   ru     s   z<TestOptimizeSimple.test_minimize_tol_parameter.<locals>.funcc                 S   s:   | \}}t d| |d  d|d   d|d  | gS )Nr1   r   rY   r(   rI   r  r,   r,   r-   dfunc  s   2z=TestOptimizeSimple.test_minimize_tol_parameter.<locals>.dfunc
r  powellr   r   r"  r  tnccobylar2  slsqpr  r  r  r2  r1   ri  )r   r  r   rV   : z vs. )r
   r   r+   )rh   ru   r  r   r   Zsol1Zsol2r,   r,   r-   test_minimize_tol_parameter  s    z.TestOptimizeSimple.test_minimize_tol_parameterr   r   ignore::RuntimeWarningr   )r  r   r   r   r*  r  fmin_tnc
fmin_slsqpc           
         sf   dv r	dd }n	t j}t j}t j}td}i } drCtt  } dkr,d|d< n0 d	kr5d
|d< n' dv r>d|d< nd|d< n fdd} dkrUtd
d|d< ntdd|d<  dv re||d< n dv rn||d< n dv rz||d< ||d< g fdd}|||fd|i| t	dksJ t
dd  D sJ td}	td!d  |	D rJ d S )"N)r  r  c                 S   s   t | t | fS r>   )r
   r   r   r*   r,   r,   r-   ru     r/   zDTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.funcr   r  r  r   iterr  r	  r  )r  r   i  ra   c                     s    |d< t j| i |S )Nr   r
   r   )akwr   r,   r-   routine#  s   zGTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.routiner  r  r   r  )r*  r   )r"  r   r  r  r  r  r  rz   c                    s(   t | tjrJ  | t| f d S r>   )
isinstancer
   r   rp   r(   rq   )r+   r   ru  )resultsr,   r-   r  8  s   zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.callbackr  r1   c                 s   s"    | ]\}}t ||kV  qd S r>   )r(   rH   r   r+   r  r,   r,   r-   r  A  s     zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>c                 s   s(    | ]\}}t |d  |d  V  qdS )r   N)r(   Zmay_share_memoryr  r,   r,   r-   r  C  s   & )r
   r   r   r   r(   r^   
startswithgetattrr$  rc  rH   r  combinationsany)
rh   r   ru   r   rz   rQ   ru  r  r  r  r,   )r   r  r-   #test_minimize_callback_copies_array  sD   









z6TestOptimizeSimple.test_minimize_callback_copies_arrayr  c           	      C   s   dd }dd }t dg}||}|}|dkrtddntdd	}|d
v r(d }tj|||||d}t||j|j |dkrDt	d ||j|ksMJ d S )Nc                 S      | d d S r0   r,   r*   r,   r,   r-   ru   L  rp  z1TestOptimizeSimple.test_no_increase.<locals>.funcc                 S   s   d| d  d d S )Nr1   r&   r  r,   r*   r,   r,   r-   bad_gradO  s   z5TestOptimizeSimple.test_no_increase.<locals>.bad_grad       @r  r  r  r  r  r  r  zSLSQP returns slightly worse)
r(   rI   r$  r
   r   r   r+   r   r   r:  )	rh   r   ru   r  rQ   Zf0r   r   r   r,   r,   r-   test_no_increaseE  s   
z#TestOptimizeSimple.test_no_increasec                 C   sX   dd }dd }t g d}tj||dd|dd	}t|jt g d
d dd d S )Nc                 S   s   t | tg d d S )N)rV   r  r  rU  r1   )r@   r(   rI   r*   r,   r,   r-   rt   d  s   z7TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.fc                 S   s:   t g dg dg}t t || t ddg | gS )N)r  r  r  r  )r  rh  r  r   r   )r(   rI   Zconcatenatern   r+   r  r,   r,   r-   consg  s   $z:TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.cons)rX   rV   r4   r  r  ineqtyper   r   r  )rZ   r1   r   r   rY   g-q=r   )r(   rI   r
   r   r   r+   )rh   rt   r  rQ   r   r,   r,   r-   test_slsqp_respect_boundsb  s   
"z,TestOptimizeSimple.test_slsqp_respect_bounds)r@  r   r   r   r  r  SLSQPr  r  r  r  r  r2  c                 C   s   d}t d}ttj|dtjtjd d }|t|dd}|dv r&|j|d< n|dv r4|j|d< |j	|d	< tj
|j|fi |}|j|ksFJ |j|jksNJ t|d
r[|j|jks[J |dkrh|jdksfJ d S |dkrs|jdksuJ d S d S )Nr   r   r,   r  r   )r  r   r  rz   r   r  r   r2  r   )r(   r^   r   r
   r   r   r   r$  rx   rz   r   r   r   r   rl   r   Zngevr   )rh   r   MAXITERrQ   sfru  r   r,   r,   r-   test_respect_maxiterp  s,   



z'TestOptimizeSimple.test_respect_maxiter)r@  r   r  r   c                 C   s   t d}ttj|dtjtjd d }ddd}tjt	dd0 |
dr4tt|}||j|fi | ntj|j|||d	 W d    d S W d    d S 1 sQw   Y  d S )
Nr   r,   r&   Tr3  zMaximum number of iterationsr   r  r   )r(   r^   r   r
   r   r   r   r   warnsRuntimeWarningr	  r
  r   r   )rh   r   rQ   r  r   r  r,   r,   r-   test_runtime_warning  s   



"z'TestOptimizeSimple.test_runtime_warningc           	   
   C   sd   d}t j}t j}t j}dd }d|df}td}t j|||||dt|dd	}|j|ks0J d S )
Nr   c                 S   s,   t d| d  d| d   d| d   gS )NrG   r   皙?r&   Q?r1   r  r*   r,   r,   r-   r     s   ,zRTestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints.<locals>.funr  r  r   r  r  )r  r   rz   r   r   )	r
   r   r   r   r(   r^   r   r$  r   )	rh   r  rt   r   rz   r   r  rQ   r   r,   r,   r-   2test_respect_maxiter_trust_constr_ineq_constraints  s   
zETestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraintsc           
      C   s   dd }dd }t dg}t||}tj||d|dgd}tj||d	gd
}tj||d|dgd	gd}tj||d|dgdgd}|||||fD ]}	|	jsSJ qLt|jddd t|jddd t|jddd t|jddd t|jddd d S )Nc                 S      | d S r  r,   r*   r,   r,   r-   rt        z6TestOptimizeSimple.test_minimize_automethod.<locals>.fc                 S   s   | d S r  r,   r*   r,   r,   r-   r    r%  z9TestOptimizeSimple.test_minimize_automethod.<locals>.consr  r  r  )r  )r   r   r   )r  r   r&   r   r   r=   r   r1   r   )r(   rI   r
   r   r   r   r+   )
rh   rt   r  rQ   Zsol_0Zsol_1Zsol_2Zsol_3Zsol_4r   r,   r,   r-   test_minimize_automethod  s.   


z+TestOptimizeSimple.test_minimize_automethodc                 C   sH   dd }ddd}t g d}t jt|}tj||||dd d S )	Nc                 S   s   t | | d S r  r  r+   rj   r,   r,   r-   Y  rB   z=TestOptimizeSimple.test_minimize_coerce_args_param.<locals>.Yc                 S   s   d| |  S r  r,   r)  r,   r,   r-   dY_dx  rp  zATestOptimizeSimple.test_minimize_coerce_args_param.<locals>.dY_dx)rY   r&   r   r&   r   r   r1   r   r   rY   r   r   )r   r   r   r>   )r(   rI   r5   Zrandnrc  r
   r   )rh   r*  r+  rj   Zxinitr,   r,   r-   test_minimize_coerce_args_param  s
   
z2TestOptimizeSimple.test_minimize_coerce_args_paramc           	         s*  g d}g d} fdd}fdd}t ||D ]v\}|dv r,td d	}nt }d
k r8|dv r8qdgd g tj||||d}| d d  d| }|js\J |t|jdg|d |jdksnJ |d
kr|dv rt d d|d q d dkr d dk sJ |q	 qd S )N)gJz5r&   gd~QJ)r   r   r  r  c                    s`    d d u r| d d krt | d d   d< t |  dkr&td| d d d  S )Nr   g     @zOptimization stepped far away!r&   r1   )rJ   r  AssertionErrorr*   Zfirst_step_sizescalerQ   r,   r-   rt     s
   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.fc                    s   t  | d d  gS Nr   r&   r  r*   )r/  r,   r-   r    rF   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.g)r   r   r   )r   ri  )r  r        r   r  rV   err_msgrY   r   g)\(?rX   )	r  r  r$  r
   r   r   r   r+   r   )	rh   scalesr  rt   r  r   r   r   r4  r,   r.  r-   test_initial_step_scaling  s2   "z,TestOptimizeSimple.test_initial_step_scaling)r  r  r   r   r"  r  r  r  r2  r  r  r  r  r  r  c                    s  |dkr|dkrt d tjddg dd } fdd	}d
d }dd }tdg}|dv }|dv }	||g}
|r@|gn|d g}|	rI|gn|d g}|dkrVtddntdd}tjddW t ;}|	t
d |	td |	td t|
||D ]\}}}dg tj||||||d}t|jd qW d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr&   r2  z,COBYQA does not support concurrent executionr6   r   c                 S   r  r>   r  r*   r,   r,   r-   ru     r  z0TestOptimizeSimple.test_nan_values.<locals>.funcc                    s*    d  d7  <  d dkrt jS  S rl  )r(   r  r  r*   countr;   r,   r-   func2"  s   z1TestOptimizeSimple.test_nan_values.<locals>.func2c                 S   s   t dgS NrV   r  r*   r,   r,   r-   rx   )  rp  z0TestOptimizeSimple.test_nan_values.<locals>.gradc                 S      t dggS r:  r  r*   r,   r,   r-   rz   ,  r   z0TestOptimizeSimple.test_nan_values.<locals>.hessrV   r"  r  r  r  r  r  r  r  r  r  r  r  r  r   r  delta_grad == 0.*.*does not use Hessian.*.*does not use gradient.*)r   rz   r   r   F)r   skipr(   r5   RandomStaterI   r$  r   r   filterUserWarningr  r  r  r
   r   r   r   )rh   r   Znum_parallel_threadsru   r9  rx   rz   rQ   Z
needs_gradZ
needs_hessfuncsZgradsZhesssr   suprt   r  hr   r,   r7  r-   test_nan_values  s6   
Pz"TestOptimizeSimple.test_nan_values)r  r   r   r  r  r  r2  r  r  r  r  r  r  c              	   C   s   d  }}|dv r| j }|dv r| j}tjdd- t }|td tj| j	| j
|||d W d    n1 s9w   Y  W d    n1 sHw   Y  tdt| jjD ]}t| jj|d  | jj| rotd| qVd S )	Nr<  r=  r   r  r>  r  r&   zDuplicate evaluations made by )rx   rz   r(   r   r   rC  rD  r
   r   ru   r_   r  rc  rf   rk   Zarray_equalrm   )rh   r   r   rz   rF  rJ  r,   r,   r-   test_duplicate_evaluationsF  s(     z-TestOptimizeSimple.test_duplicate_evaluationsnew_cb_interface)r   r&   r1   c           
         s  fddd_ fdd}fdd}d|d	kr# fd
d}n|dkr5G  fddd}| }n fdd} fdd d _d _ dgd |||d}tjdi |d|i}|dkrgd	 |dkrtjdi |ddii}	|j|	j  krksJ  J ntjdi |ddii}	|j|	j  krksJ  J |j|	jksJ t|j|	j |j	|dv rdndksJ d S )Nc                       d _ t| S NF)flagr
   r   r*   rt   r,   r-   rt   g     
z9TestOptimizeSimple.test_callback_stopiteration.<locals>.fFc                    rK  rL  )rM  r
   r   r*   rN  r,   r-   r  l  rO  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.gc                    rK  rL  )rM  r
   r   r*   rN  r,   r-   rG  p  rO  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.hr   r&   c                    s   | j | jks
J    d S r>   r   r+   )intermediate_resultr  rt   r,   r-   callback_interfacew     
zJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interfacer1   c                       s    e Zd Zdef fddZdS )z@TestOptimizeSimple.test_callback_stopiteration.<locals>.CallbackrQ  c                    s   |j |jks
J    d S r>   rP  )rh   rQ  rR  r,   r-   r  |  rT  zITestOptimizeSimple.test_callback_stopiteration.<locals>.Callback.__call__N)r}   r~   r   r   r  r,   rR  r,   r-   r  {  s    r  c                    s
      d S r>   r,   )Zxkr   )r  r,   r-   rS    r   c                      s.     j d7  _ d _ j krd _t d S )Nr&   FT)rJ  rM  StopIterationr,   )r  ra   r,   r-   r    s   
z@TestOptimizeSimple.test_callback_stopiteration.<locals>.callbackr   r  )rQ   r   r   r   rz   r  r  r2  r   rA  ra   )r  r2  rY   c   r,   )
rM  rJ  r
   r   r   r   r   r   r+   r   )
rh   r   rJ  r  rG  rS  r  ru  r   r   r,   )r  rt   ra   r-   test_callback_stopiteration`  s<   
" z.TestOptimizeSimple.test_callback_stopiterationc                 C   sL   d}t t|d tdd td W d    d S 1 sw   Y  d S )Nz"'x0' must only have one dimension.r   c                 S   rD  r>   r,   r*   r,   r,   r-   rM    rN  z4TestOptimizeSimple.test_ndim_error.<locals>.<lambda>)r1   r&   )rL   rM   r
   r   r(   onesrh   rK  r,   r,   r-   test_ndim_error  s   "z"TestOptimizeSimple.test_ndim_error)r  r  r  r  r  r2  r  c                 C   s   dd }t ddgddg}d}tjt|d tj|g d	||d
 W d    n1 s,w   Y  t g dg d}d}tjt|d tj|g d	||d
 W d    d S 1 sZw   Y  d S )Nc                 S   r  r  r  r*   r,   r,   r-   rt     r   z:TestOptimizeSimple.test_minimize_invalid_bounds.<locals>.fr&   r1   rY   r   z?The number of bounds is not compatible with the length of `x0`.r   )r&   r1   rY   rQ   r   r   )r&   r   r&   )rY   r   r1   z:An upper bound is less than the corresponding lower bound.)r   r   r	   rM   r
   r   )rh   r   rt   r   rK  r,   r,   r-   test_minimize_invalid_bounds  s   "z/TestOptimizeSimple.test_minimize_invalid_bounds)r   r   r"  r  c                 C   s   |dkri ndt ji}|dkrtnt j}ddd}tj|dd t jdd	 d
d
gf||d| W d    n1 s<w   Y  d|d< t jdd	 d
d
gf||d| d S )Nr  r   Tr   r  Maximum numberr   c                 S   r  r>   r
   r   r*   r,   r,   r-   rM       
 zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>r   r   Fr   c                 S   r  r>   r^  r*   r,   r,   r-   rM    r_  )r
   r   r  rb  r   r  r   )rh   r   ru  Zwarning_typer   r,   r,   r-   test_minimize_warnings_gh1953  s$   

z0TestOptimizeSimple.test_minimize_warnings_gh1953N),r}   r~   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r7  	fail_slowr8  r9  r   r  r  r  r  thread_unsafer   r#  r(  r,  r6  rH  rI  r   rW  rZ  r\  r`  r,   r,   r,   r-   r    sl    		&


=

 2
0

=
r  r   )r  r  r   r@  r2  c                 C   s<   dd }t j|ddg| d}|jsJ t|jdgdd d S )	Nc                 S   r  r  r  r*   r,   r,   r-   rt     r   z$test_minimize_with_scalar.<locals>.f   )r  r	  r  rZ   r   r   )r
   r   r   r   r+   )r   rt   r   r,   r,   r-   test_minimize_with_scalar  s   
rd  c                   @   sz   e Zd Zdd ZdddZdddZddd	Zd
d Zdd Zdd Z	e
jdddgddgddggdd Zdd ZdS )TestLBFGSBBoundsc                 C   s   d| _ d| _d S )N))r&   NNN)r&   r   )r   r`   rg   r,   r,   r-   ri     rO  zTestLBFGSBBounds.setup_methodr  c                 C   s    d| |d | |d |   S )NrV   r   r&   r,   r{   r,   r,   r-   r     r3   zTestLBFGSBBounds.func                 C   s   ||d  S r%   r,   r{   r,   r,   r-   r     rp  zTestLBFGSBBounds.jacc                 C   s   |  ||| ||fS r>   r   r   r{   r,   r,   r-   fj  rF   zTestLBFGSBBounds.fjc                 C   sN   t j| jddg| j| jd\}}}|d dksJ |d t|| jdd d S )Nr   r  )r   r   r   taskr9   r   )r
   r  r   r   r   r   r`   rh   r+   rt   r  r,   r,   r-   test_l_bfgs_b_bounds  s   z%TestLBFGSBBounds.test_l_bfgs_b_boundsc                 C   sL   t j| jddgd| jd\}}}|d dksJ |d t|| jdd d S )	Nr   r  r  )r   r   r   ri  r9   r   )r
   r  rh  r   r   r`   rj  r,   r,   r-   r    s
   z%TestLBFGSBBounds.test_l_bfgs_b_funjacc                 C   sH   t j| jddgd| j| jd}|d sJ |d t|j| jdd d S )	Nr   r  r  r   r   r   r   r  r9   r   )r
   r   r   r   r   r   r+   r`   r5  r,   r,   r-   test_minimize_l_bfgs_b_bounds  s
   z.TestLBFGSBBounds.test_minimize_l_bfgs_b_boundsr   )r   r&   r'  c                 C   sP   t jtdd tj| jddgd| j|d W d    d S 1 s!w   Y  d S )Nz	.*bound.*r   r   r  r  rm  )r   r	   rM   r
   r   r   r   )rh   r   r,   r,   r-   'test_minimize_l_bfgs_b_incorrect_bounds  s
   "z8TestLBFGSBBounds.test_minimize_l_bfgs_b_incorrect_boundsc              
   C   st   g d}ddg}t ||D ])\}}tj| jddg|d|| jdd id}|d	 s.J |d
 t|j| jdd qd S )Nr  rl  r,   r   r  r  Zfinite_diff_rel_step)r   r   r   r   r   r   r  r9   r   )	r  r  r
   r   r   r   r   r+   r`   )rh   r  Zargssr   r   r   r,   r,   r-    test_minimize_l_bfgs_b_bounds_FD  s   z1TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds_FDNrl  )r}   r~   r   ri   r   r   rh  rk  r  rn  r   r7  r9  ro  rp  r,   r,   r,   r-   re    s    



re  c                   @   sV  e Zd Zdd Zd3ddZdd Zejdd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zejdg ddd Zejdg ddd Zejdejdg ddd Zdd  Zd!d" Zejdd#d$gd%d& Zejd'ejdeejd(d)d*gejd+g d,d-d. Zejjejdg d/d0d1 Zd2S )4TestOptimizeScalarc                 C   s
   d| _ d S )Nr4   )r`   rg   r,   r,   r-   ri     r   zTestOptimizeScalar.setup_methodr4   c                 C   s   || d d S )zObjective functionr1   r   r,   )rh   r+   r  r,   r,   r-   r        zTestOptimizeScalar.func                 C   s
  t | j}t|| jdd t j| jdd}t|| jdd t j| jdd}t|d | jdd t j| jdd}t|| jdd d	}tjt|d
 t j| jdd W d    n1 s\w   Y  d}tjt|d
 t j| jdd W d    d S 1 s~w   Y  d S )Nr9   r   r  rh  ZbrackTr   r   ir     /\(f\(xb\) < f\(xa\)\) and \(f\(xb\) < f\(xc\)\)r   r  r   r&   \(xa < xb\) and \(xb < xc\)r   r  r&   )r
   brentr   r   r`   r   r	   rM   )rh   r+   r  r,   r,   r-   
test_brent  s    "zTestOptimizeScalar.test_brentr   c                 C   s|  t | j}t|| jdd t j| jdd}t|| jdd t j| jdd}t|d | jdd t j| jdd}t|| jdd t j| jdd	}t|| j g d
}|D ]$}t j| jddd}t j| j|dd}|d |d }}t|| | qTd}tjt|d t j| jdd W d    n1 sw   Y  d}tjt|d t j| jdd W d    d S 1 sw   Y  d S )Nr9   r   rs  rt  Tru  r   rv  r  )r   r&   r   )ra   r   r1   rx  r   ry  rz  r{  )	r
   goldenr   r   r`   r   r   r	   rM   )rh   r+   Zmaxiter_test_casesra   rQ   Znfev0r   r  r,   r,   r-   test_golden1  s0   "zTestOptimizeScalar.test_goldenc                 C   s   t | jdd}t|ddd t | jdd}t|| jdd t | jtdgtdg}t|| jdd ttt j| jdd d S )Nr   r&   rq  r   r   r9   )	r
   	fminboundr   r   r`   r(   rI   rL   rM   r  r,   r,   r-   test_fminboundQ  s    z!TestOptimizeScalar.test_fminboundc                 C   sn   t jtdd t| jtdd W d    n1 sw   Y  t| jdtd}t	|| j
dd d S )Nz.*must be finite scalars.*r   r&   r1   r&   r   r9   r   )r   r	   rM   r
   r  r   r(   r^   rI   r   r`   r  r,   r,   r-   test_fminbound_scalar\  s
   z(TestOptimizeScalar.test_fminbound_scalarc                 C   s   dd }t |dd d S )Nc                 S   r$  r  r,   r*   r,   r,   r-   r   d  r%  z,TestOptimizeScalar.test_gh11207.<locals>.funr   )r
   r  )rh   r   r,   r,   r-   test_gh11207c  s   zTestOptimizeScalar.test_gh11207c                 C   s4  t | jj}t|| jdd t j| jdd}|jsJ t j| jdtddd}|jr-J t j| jdd	dd
j}t|| jdd t j| jdd	dj}t|| jdd t j| jdd	dd
j}t|| jdd t j| jdd	dd
j}t|| jdd t j| jdd	dj}t|| jdd t j| jdd	dd
j}t|| jdd t j| jdd	ddj}t|ddd t j| jdd	ddj}t|| jdd t j| jt	dgt	dgft	dgfddj}t|| jdd t
tt j| jddd	d t
tt j| jtddfdd	d t j| jdt	dfddj}t|| jdd d S )Nr9   r   ZBrentr   rY   r  r   rs  r4   )bracketr   r   )r   r   rv  r  )r   r&   ZBounded)r   r   r   r&   rq  )r&   r   boundedr   r4   )r   r&   r   r   r   r1   r  )r
   minimize_scalarr   r+   r   r`   r   r$  r(   rI   rL   rM   r^   r  r,   r,   r-   test_minimize_scalarh  s   









z'TestOptimizeScalar.test_minimize_scalarc                 C   s>   		 ddd}t j| jd|tddd	}t|j| jd
d d S )Nr,   r<   r	  c                 [   s   |d |d  d }| |}	d}
d}d}d}|r`|s`||k r`d}|d7 }|| || fD ]}| |g|R  }|
d7 }
||	k rD|}	|}d}q,|d urM|| |d urX|
|krXd}n|r`|s`||k st j|	|||
|dkdS )Nr&   r   r  TFr  r  )r   r  r   rA  r  ra   r  r   r  r  r  r  r  r  r  r  r,   r,   r-   r    s4   
z?TestOptimizeScalar.test_minimize_scalar_custom.<locals>.custmin)r   r   r  r  )r  r   r   r9   r   r  )r
   r  r   r$  r   r+   r`   )rh   r  r   r,   r,   r-   test_minimize_scalar_custom  s   

z.TestOptimizeScalar.test_minimize_scalar_customc                 C   s   t j| jdd d S )Nr4   r   r
   r  r   rg   r,   r,   r-   &test_minimize_scalar_coerce_args_param  s   z9TestOptimizeScalar.test_minimize_scalar_coerce_args_paramr   )r|  r  r  c                 C   s"   dD ]}t j| jd|id qd S )N)r   r&   r1   rY   r   )r   r  )rh   r   r   r,   r,   r-   	test_disp  s   zTestOptimizeScalar.test_dispc                 C   s   |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	s4J t|d
s;J t|dsBJ d S )Nr  r   rf  r   r   r+   r   r  r   r   r   )r
   r  r   rl   )rh   r   ru  r  r,   r,   r-   test_result_attributes  s   z)TestOptimizeScalar.test_result_attributesc              	      s   t jd dg  fdd}d}d}t jdd\ t @}|td	 |td
 |td dg |dkr;d|ini }tj	|fd|i||t
ddd}t|jd W d    n1 s`w   Y  W d    d S W d    d S 1 sxw   Y  d S )Nr6   r   c                    s8    d  d7  <  d dkrt jS | d dt |   S )Nr   r&   r   r1   r<   )r(   r  r?   r*   r8  r,   r-   ru     s   z0TestOptimizeScalar.test_nan_values.<locals>.funcry  r_  r   r  r>  r?  r@  r  r   r  r  r  r   F)r(   r5   r8   r   r   rC  rD  r  r
   r  r$  r   r   )rh   r   ru   r  r   rF  ru  r   r,   r  r-   rH    s&   
Pz"TestOptimizeScalar.test_nan_valuesc                 C   sF   dd }t |}t|jddd t j|dddid	}t|jd
 d S )Nc                 S   r$  r  r,   r*   r,   r,   r-   rt     r%  zCTestOptimizeScalar.test_minimize_scalar_defaults_gh10911.<locals>.fr   r   r   )r&   r	  rP  ri  )r   r   r&   )r
   r  r   r+   )rh   rt   r   r,   r,   r-   %test_minimize_scalar_defaults_gh10911  s   
z8TestOptimizeScalar.test_minimize_scalar_defaults_gh10911c                 C   s   d}t jt|d tjtjdtjfd W d    n1 sw   Y  t jt|d tjtjtjdfd W d    d S 1 sBw   Y  d S )Nz+Optimization bounds must be finite scalars.r   r&   r&  )	r   r	   rM   r
   r  r(   r?   rn  r  rY  r,   r,   r-   'test_minimize_non_finite_bounds_gh10911  s   "z:TestOptimizeScalar.test_minimize_non_finite_bounds_gh10911r|  r  c                 C   sJ   d}t jt|d tjtj|dd W d    d S 1 sw   Y  d S )Nz'Use of `bounds` is incompatible with...r   r  r   r   )r   r	   rM   r
   r  r(   r?   )rh   r   rK  r,   r,   r-   2test_minimize_unbounded_method_with_bounds_gh10911  s   "zETestOptimizeScalar.test_minimize_unbounded_method_with_bounds_gh10911r  r  r&   r9   fshape)r,   r&   r&   r&   c           	         s    fdd}d\}}|dkrt ||fdnt ||fd}|t ||d tj|fi |}|jj|jj  krF||jj  krF ksIJ  J d S )Nc                    s   t | d  S Nr   )r(   rI   Zreshaper*   r  r,   r-   rt   !  r/   zITestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196.<locals>.f)r   rG   r  )r  r&  )r   r  )r$  updater
   r  r+   shaper   )	rh   r   r  r  rt   r  bru  r   r,   r  r-   +test_minimize_scalar_dimensionality_gh16196  s   :z>TestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196)r  r|  r  c                 C   s   dd }i }|dkrdnd}ddg||< dd	d
}t jtjdd tj|f||d| W d    n1 s8w   Y  d|d< tj|f||d| d S )Nc                 S   r  r0   r,   r*   r,   r,   r-   rt   1  rp  zBTestOptimizeScalar.test_minimize_scalar_warnings_gh1953.<locals>.fr  r   r  rh  r   TrY   r  r]  r   r   Fr   )r   r  r
   rb  r  )rh   r   rt   ru  Zkwdr   r,   r,   r-   $test_minimize_scalar_warnings_gh1953,  s   
z7TestOptimizeScalar.test_minimize_scalar_warnings_gh1953Nr  )r}   r~   r   ri   r   r}  r   r7  r8  r  r  r  r  r  r  r  r9  r  r  rH  r  r  r  r   r  rb  r  r,   r,   r,   r-   rq    s>    


<#



	

rq  c                   @   s6   e Zd Zejddd Zejdddd ZdS )	TestBracketr  c                 C   sP  dd }d}t jt|d t|dd W d    n1 sw   Y  t jt|d t|dtj W d    n1 s>w   Y  t jt|d tj|dd W d    n1 s\w   Y  t jt|d tj|dd W d    n1 szw   Y  d	d }d
}t jt|d tj|dddd W d    d S 1 sw   Y  d S )Nc                 S      d| k | dk @ r| d S dS Nr  r&   r1   g      Y@r,   r*   r,   r,   r-   rt   F     z3TestBracket.test_errors_and_status_false.<locals>.f9The algorithm terminated without finding a valid bracket.r   r  r&   r_  rt  c                 S   s<   d| d  d| d   d| d   d| d   d|   d S )	Nre  r   r      rY      r1   r&   r,   r*   r,   r,   r-   rt   S  s   <z8No valid bracket was found before the iteration limit...r   rX   r   r  )	r   r	   rm   r
   r  r(   rn  r|  r  )rh   rt   r  r,   r,   r-   test_errors_and_status_falseC  s&   "z(TestBracket.test_errors_and_status_falser   )r|  r  c                 C   sb   dd }d}t j|d|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                 S   r  r  r,   r*   r,   r,   r-   rt   ]  r  z9TestBracket.test_minimize_scalar_success_false.<locals>.fr  r_  )r  r   rY   r   r	  )r
   r  r   r  r   r   r   )rh   r   rt   r  r   r,   r,   r-   "test_minimize_scalar_success_falseZ  s   
z.TestBracket.test_minimize_scalar_success_falseN)	r}   r~   r   r   r7  r8  r  r9  r  r,   r,   r,   r-   r  A  s
    

r  c                   C   s   t ttjtjdd d S )Ng{Gzr~  )rL   rM   r
   r|  r(   rD   r,   r,   r,   r-   test_brent_negative_tolerancej  rF   r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestNewtonCgc                 C   sX   t ddg}tjtj|tjtjddd}|jsJ |jt	|j
t ddgdd d S 	Nr   rV   r   r  r   rz   r  r   r&   rq  r   )r(   rI   r
   r   r   r   r   r   r  r   r+   rh   rQ   r   r,   r,   r-   test_rosenbrocko  s   
zTestNewtonCg.test_rosenbrockc                 C   sT   t t}tjt|ttddd}|jsJ |j	t
|jtdd t
|jtdd d S )Nr  r9   )r   rz   r   r  rq  r   r   )r(   rI   rP   r
   r   
himmelblaurN   rO   r   r  r   r+   himmelblau_xoptr   himmelblau_minr  r,   r,   r-   test_himmelblauy  s   
zTestNewtonCg.test_himmelblauc                 C   sV   t ddg}tjtj|tjdddd}|jsJ |jt|j	t ddgdd	 d S )
Nr   rV   r  r   r  r  r&   rq  r   )
r(   rI   r
   r   r   r   r   r  r   r+   r  r,   r,   r-   test_finite_difference  s   
z#TestNewtonCg.test_finite_differencec                 C   sZ   t ddg}tjtj|tjt ddd}|jsJ |jt	|j
t ddgdd d S r  )r(   rI   r
   r   r   r   r   r   r  r   r+   r  r,   r,   r-   test_hessian_update_strategy  s   
z)TestNewtonCg.test_hessian_update_strategyN)r}   r~   r   r  r  r  r  r,   r,   r,   r-   r  n  s
    

r  c                  C   s  t jj} tg d}tg d}tg d}tg d}|tg dddf|tg dd	d
f|tg dddf|tg dddf|tg dd	d
f|tg dddf|tg dddf|tg dddf|tg ddd	f|tg dddf|tg dddf|tg ddd	f|tg dddff}|D ]\}}}}	| ||||\}
}t|
|dd t||	dd qttj d	tj dg}ttjd
dtjg}|tg dtj tjf|tg dd	d
f|tg dtj df|tg ddtjf|tg dd	d
f|tg ddtjf|tg dtj tjf|tg ddd	f|tg dtj df|tg ddtjf|tg ddd	f|tg ddtjff}|D ]\}}}}	| ||||\}
}t|
|dd t||	dd qfd S )N)333333r  r   r  )r   r&   ffffff@rY   rZ   r   r   r   )rZ   r1   r  r   rV   r   r   r   r  r   rZ   r&   r   r   r  r&   rZ   r   r&   r   r   r  rZ   r   r   r&   r  rY   )rV   r&   r   r   )rV   r   r  r1   r4   )r  r   r  r1   gffffff?g333333@)rV   r   r  r   r9   r   g333333)r
   rH  Z_line_for_searchr(   rI   r   rn  )Zline_for_searchlower_boundupper_boundrQ   x1	all_testsr+   alphaZlminZlmaxmimar,   r,   r-   test_line_for_search  sV   r  c               
   C   sz  t jj} dd }tg d}||}ttj gd }ttjgd }tg ddftg ddftg d	d
ftg ddftg ddftg ddftg ddff}|D ]X\}}| ||||dd\}	}
}t|	||| dd t|
|| dd t||| dd | |||d|||d\}	}
}t|	||| dd t|
|| dd t||| dd qbd S )Nc                 S      t | t g d d S N)r1  r  r4   皙ٿr1   r(   r@   rI   r*   r,   r,   r-   ru     r  z$test_linesearch_powell.<locals>.funcr  r   r  r  r  r1   r  r4   r  r  r1  r   r&   r         ?rZ   r   r&   r&   皙?r  r   r  r&   r   )fvalr  r9   r   r  r  r  r  )r
   rH  _linesearch_powellr(   rI   rn  r   Zlinesearch_powellru   r]  r  r  r  r  xilrt   rw   r7   r,   r,   r-   test_linesearch_powell  s<   

r  c               
   C   s  t jj} dd }tg d}||}tdgd }tdgd }tg ddftg d	d
ftg ddftg ddftg ddftg ddftg ddff}|D ]/\}}| |||d|||d\}	}
}t|	||| dd t|
|| dd t||| dd q_tdgd dg }tdgd dg }tg ddftg d	dftg ddftg ddftg ddftg ddftg ddff}|D ]/\}}| |||d|||d\}	}
}t|	||| dd t|
|| dd t||| dd qtg d}||}tg dd ftg d	dftg ddftg dd!ff}|D ]4\}}| |||d|||d\}	}
}t|	||||  dd t|
|||  dd t||| dd q@tg d}||}tdtj tj dg}ttjdtjdg}tg ddftg d	dftg ddftg ddftg ddftg ddftg ddff}|D ]0\}}| |||d|||d\}	}
}t|	||| dd t|
|| dd t||| dd qtg d}||}tg dd ftg d	dftg ddftg dd!ff}|D ]4\}}| |||d|||d\}	}
}t|	||||  dd t|
|||  dd t||| dd q4d S )"Nc                 S   r  r  r  r*   r,   r,   r-   ru   	  r  z,test_linesearch_powell_bounded.<locals>.funcr  g       r   r  r  r  r  r1   r  r4   r  r  r  r  r  r  r  r  r   r  r9   r   g333333ӿrY   g?r   rW   g333333ÿ)r1  r   r   r1   r   g333333)r
   rH  r  r(   rI   r   rn  r  r,   r,   r-   test_linesearch_powell_bounded  s   







r  c                     sl   t ddgddg  fdd} t j| ddgd d t jdgdgd	gd
 dd }t j|dgd d d S )Nr   333333?r  c                    s8   | \}}|  j k r|  jk sJ |d |d  S r  )lbrH   ub)r+   r  r  r&  r,   r-   r   	  s    ztest_powell_limits.<locals>.funr   r[  r&   T)r  r  Zkeep_feasiblec                 S   s   | dkr| dks
J t | S r0  r'   r*   r,   r,   r-   ru   	  rT  z test_powell_limits.<locals>.funcrX   r  )r   rQ   r   r   )r
   r   r   )r   ru   r,   r&  r-   test_powell_limits|	  s   r  c                  C   sD   t dd dd g} | D ]}tj|ddgdd}t|jsJ qd S )Nc                 S   s   t t| S r>   r(   rI   r   r*   r,   r,   r-   rM  	      z$test_powell_output.<locals>.<lambda>c                 S   s   t t| gS r>   r  r*   r,   r,   r-   rM  	      r  r  r   )rQ   r   )r   r
   r   r(   Zisscalarr   )Zfunsr   r   r,   r,   r-   test_powell_output	  s
   r  c                   @   sX   e Zd Zdd Zeddgdejddd Zeddgdejdd	d
 Z	dS )	TestRosenc                 C   s(   | g d}tt|| d d S )NrU   rZ   )rI  r#   r
   r   rh   r  r+   r,   r,   r-   
test_rosen	  s   
zTestRosen.test_rosenz	jax.numpyz)JAX arrays do not support item assignment)reasonsskip_xp_backendsc                 C   s4   | g d}tt||j|| djd d S )N)r&   r&   r&   r&   rV   )rV  )rI  r#   r
   r   
zeros_likerV  r  r,   r,   r-   test_rosen_der	  s   
zTestRosen.test_rosen_derc                 C   sd   | d}t|}| g d}| g d}t||}|||j}t|| }t|| d S )NrV   )rY   r   r   )r1   r1   r1   )rI  r$   r
   rosen_hess_prodrY  rV  r   r#   )rh   r  oneZxp_testr+   rw   hpZdothpr,   r,   r-   test_hess_prod	  s   
zTestRosen.test_hess_prodN)
r}   r~   r   r  r  r   r7  Zusefixturesr  r  r,   r,   r,   r-   r  	  s    

r  c                 C   s8   | \}}|| | d }|||  d }|| ||  S )zx
    R^2 -> R^1 test function for optimization. The function has four local
    minima where himmelblau(xopt) == 0.
    r  r   r,   )rw   r+   r  r  r  r,   r,   r-   r  	  s   r  c                 C   sn   | \}}t d|d  d| |  d|  d|d   d d|d  d| |  d|d   d|  d gS )Nr   rY   *   r1         r&  r  rw   r+   r  r,   r,   r-   rN   	  s   2.rN   c                 C   s^   | \}}t d|d  d|  d d| d|  gd| d|  d| d|d   d ggS )Nr  r1   r   r  r  r  r  r,   r,   r-   rO   	  s   *&rO   gHzGѿgrY   r1   rZ   c                  C   sj   dd } dd }dd }d| dd|dd|df}d	d
 }t j|g dd|d}t|jg ddd d S )Nc                 S   s0   t dd| d   d| d   d| d   gS )N   rG   r   r!  r&   r"  r1   r  r*   r,   r,   r-   ru   	     0z0test_minimize_multiple_constraints.<locals>.funcc                 S      t | d gS r%   r  r*   r,   r,   r-   func1	  r!  z1test_minimize_multiple_constraints.<locals>.func1c                 S   r  r  r  r*   r,   r,   r-   r9  	  r!  z1test_minimize_multiple_constraints.<locals>.func2r  r  c                 S   s   d| d | d  | d   S )Nr  r   r&   r1   r,   r*   r,   r,   r-   rt   	  r  z-test_minimize_multiple_constraints.<locals>.fra  r  r  )}   r   r   ri  r   r  )ru   r  r9  r  rt   r   r,   r,   r-   "test_minimize_multiple_constraints	  s   r  c                   @   s(   e Zd Zdd Zejddd ZdS )TestOptimizeResultAttributesc                 C   s8   ddg| _ tj| _tj| _tj| _tj| _	ddg| _
d S )Nr   )rZ   r  )rQ   r
   r   ru   r   r   r   rz   r  r|   r   rg   r,   r,   r-   ri   	  s   
z)TestOptimizeResultAttributes.setup_methodr1   c              
   C   s   g d}ddgi}t D ]R}t }|td tj| j| j|| j| j	| j
d}W d    n1 s1w   Y  |D ]}||v rE||| v rEq8t||sLJ |t|v sTJ q8t|jts]J qd S )N)r   r   r+   r   r   r   r  r  r   z7Method .+ does not use (gradient|Hessian.*) information)r   r   rz   r|   )r   r   rC  r  r
   r   ru   rQ   r   rz   r|   rl   dirr  r  str)rh   
attributesrA  r   rF  r   	attributer,   r,   r-   test_attributes_present	  s&   
z4TestOptimizeResultAttributes.test_attributes_presentN)r}   r~   r   ri   r   r7  ra  r  r,   r,   r,   r-   r  	  s    
r  c                 G   s^   | \}}|\}}}}}}	}
}}}}}}||d  || |  ||d   ||  ||  |	 S r  r,   r  r   r+   r  r  r  rj   r  r   rt   r  rG  rJ  r  r  r  r/  r,   r,   r-   f1
  s   8r  c                 G   sP   | \}}|\}}}}}}	}
}}}}}}|
 t || d || d   |  S r  r'   r  r,   r,   r-   f2
     *r  c                 G   sP   | \}}|\}}}}}}	}
}}}}}}| t || d || d   |  S r  r'   r  r,   r,   r-   f3
  r  r  c                 G   s0   t | g|R  t| g|R   t| g|R   S r>   )r  r  r  r  r   r,   r,   r-   
brute_func
  r  r   c                   @   sX   e Zd Zdd Zdd Zdd Zdd Zej	d	d
d Z
ejjdd Zdd ZdS )	TestBrutec                 C   s4   d| _ tdddtdddf| _tddg| _d S )N)r1   rY   r   r   r   r   ,   r  r1   r  r&   rh  rX   r`  r         ?g_}gi?)r   slicerrangesr(   rI   r`   rg   r,   r,   r-   ri   $
  s   zTestBrute.setup_methodc                 G   s   t |g|R  S r>   )r   )rh   r  r   r,   r,   r-   r   )
  rr  zTestBrute.brute_funcc                 C   s   t jt| j| jdt jd}t|d | jdd t|d t| jg| jR  dd t jt| j| jdt jd}t|d | jdd t|d t| jg| jR  dd t j| j| j| jdt jd}t|d | jdd d S )NTr   r   finishr   r   r   r&   )	r
   bruter   r  r   r  r   r`   r   )rh   resbruter,   r,   r-   
test_brute-
  s(   zTestBrute.test_brutec                 C   s    dd }t j|dgdd d d S )Nc                 S   s,   t | jdks	J | jd dksJ | d S )Nr&   r   r1   )rc  r  r*   r,   r,   r-   rt   G
  s   zTestBrute.test_1D.<locals>.fr_  rY   )ZNsr  )r
   r  r  r,   r,   r-   test_1DD
  s   zTestBrute.test_1Dr   c                 C   sZ   t jt| j| jdd d}t jt| j| jdd dd}t|d |d  t|d |d  d S )NTr  r1   )r   r   r  workersr  r   )r
   r  r   r  r   r   )rh   r	  Z	resbrute1r,   r,   r-   test_workersN
  s   zTestBrute.test_workersc                    sf   t jd  fdd}d}tjt|d tj|| j| j	dd W d    d S 1 s,w   Y  d S )Nr6   c                    r;  r<  r=  r  r>  r,   r-   ru   ^
  r   z,TestBrute.test_runtime_warning.<locals>.funczFfinal optimization did not succeed.*|Maximum number of function eval.*r   T)r   r   )
r(   r5   rB  r   r  r  r
   r  r  r   )rh   Zcapsysru   rK  r,   r>  r-   r   Z
  s   "zTestBrute.test_runtime_warningc                 C   s0   dd }t j|tdddfdd}t|d d S )	Nc                 W   s   | |d  S r  r,   r+   r   r,   r,   r-   rt   g
  rp  z+TestBrute.test_coerce_args_param.<locals>.fr`  r   r  r1   r  r   )r
   r  r  r   )rh   rt   r	  r,   r,   r-   test_coerce_args_parame
  s   z TestBrute.test_coerce_args_paramN)r}   r~   r   ri   r   r
  r  r   r7  ra  r  rb  r   r  r,   r,   r,   r-   r  "
  s    




r  r  c                     s   dd l } dd lfddfddd  fdd} fd	d
}| j $}g }||| ||| |D ]}|  q>W d    d S 1 sPw   Y  d S )Nr   c                    s     d | d d S )Nr<   r   r1   sleepr*   timer,   r-   
objective1w
  s   
z*test_cobyla_threadsafe.<locals>.objective1c                    s     d | d d d S )Nr<   r   r&   r1   r  r*   r  r,   r-   
objective2{
  s   
z*test_cobyla_threadsafe.<locals>.objective2COBYLAc                         t jdg dS NrZ   r   r   r,   )
min_methodr  r,   r-   
minimizer1
     z*test_cobyla_threadsafe.<locals>.minimizer1c                      r  r  r   r,   )r  r  r,   r-   
minimizer2
  r  z*test_cobyla_threadsafe.<locals>.minimizer2)concurrent.futuresr  ZfuturesZThreadPoolExecutorrp   Zsubmitr  )Z
concurrentr  r  pooltasksrk   r,   )r  r  r  r  r-   test_cobyla_threadsafen
  s   
"r   c                   @   s@   e Zd Zdd Zdd Zejddd Zdd	 Z	d
d Z
dS )TestIterationLimitsc                 C      t  | _d S r>   )rb   rc   r  rg   r,   r,   r-   ri   
  r   z TestIterationLimits.setup_methodc                 C   sr   t | jds
d| j_| j jd7  _t|d d |d d  t|d |d }}t|d | |d  S )Nrj   r   r&   r1   r  rX   )rl   r  rj   r(   r  Zarctan2r?   )rh   r  rR   rk   r,   r,   r-   	slow_func
  s
   4zTestIterationLimits.slow_funcr   c                 C      |  dd d S )Nr@     check_limitsrg   r,   r,   r-   test_neldermead_limit
  rr  z)TestIterationLimits.test_neldermead_limitc                 C   r$  )Nr  r[   r&  rg   r,   r,   r-   test_powell_limit
  r!  z%TestIterationLimits.test_powell_limitc              	   C   s(  ddgddgddgfD ]}dD ]1}d| j _tj| j||d|id}| j j|d ks,J |d	 r9|d |k s8J q|d |ksAJ qdD ]#}tj| j||d
|id}|d	 r_|d |ks^J qD|d |ksgJ qDddgddgdtjgfD ]@\}}d| j _tj| j||||dd}| j j|d ksJ |d	 r|d |k r|d |ksJ qt|d |ks|d |ksJ qttjd gd tjgfD ]Q\}}d| j _tj| j||||dd}| j j|d ksJ |d	 r|d u r|d |d k sJ q|d |d ksJ q|d |d ks|d |d ksJ qqd S )Nr<   r&   r1   )r
  i    r   rA  r   r   r   ra   r   r
  r*  )ra   rA  )r  rj   r
   r   r#  r(   rn  )rh   r   Zdefault_itersZstart_vZmfevr   Zmitr,   r,   r-   r'  
  sd   

 

z TestIterationLimits.check_limitsN)r}   r~   r   ri   r#  r   r7  ra  r(  r)  r'  r,   r,   r,   r-   r!  
  s    

r!  c                  C   s   dd } dd }dd }g d}|D ]}t j| tdg|d	}|jjd
ks(J qg d}|D ]}t j| tdg|||d}|jjd
ksGJ q/d S )Nc                 S   s   | |  S r>   r,   r*   r,   r,   r-   r   
  r%  z2test_result_x_shape_when_len_x_is_one.<locals>.func                 S   s   d|  S Nr  r,   r*   r,   r,   r-   r   
  r%  z2test_result_x_shape_when_len_x_is_one.<locals>.jacc                 S   r;  r+  r  r*   r,   r,   r-   rz   
  r   z3test_result_x_shape_when_len_x_is_one.<locals>.hess)	r@  r   r   r   r  r  r  ZCOBYQAr  r<   r   r  )r  r  r  r  r  r  r  )r
   r   r(   rI   r+   r  )r   r   rz   r  r   r   r,   r,   r-   %test_result_x_shape_when_len_x_is_one
  s   r,  c                   @   r  )FunctionWithGradientc                 C   r"  r>   )rb   rc   number_of_callsrg   r,   r,   r-   r  
  r   zFunctionWithGradient.__init__c                 C   s:   t | jds
d| j_| j jd7  _t|d d| fS )Nrj   r   r&   r1   )rl   r.  rj   r(   r@   r  r,   r,   r-   r  
  s   zFunctionWithGradient.__call__Nr  r,   r,   r,   r-   r-  
  s    r-  c                   C   s   t  S r>   )r-  r,   r,   r,   r-   function_with_gradient
  s   r/  c                 C   s   t | }tddg}t||d | jjdksJ t||d|  | jjdks.J dt|d| ddd	 | jjdksCJ dd S )
NrV   r  rT  r&   r1   zHfunction is not recomputed if gradient is requested after function valueg      4@(different input triggers new computationr3  )r   r(   rI   r   r.  rj   
derivativer/  memoized_functionrQ   r,   r,   r-   )test_memoize_jac_function_before_gradient  s   r4  c                 C   s   t | }tddg}t||d|  | jjdksJ t||d | jjdks.J dt|d| d| dd	 | jjdksFJ dd S )
NrV   r  r1   r&   rT  zHfunction is not recomputed if function value is requested after gradientr   r0  r3  )r   r(   rI   r   r1  r.  rj   r2  r,   r,   r-   )test_memoize_jac_gradient_before_function  s   r5  c                 C   s   t | }|j}t }tddg}t||d||dd}| jjdks$J |	|d  | jjdks3J |	|d  | jjd	ksBJ 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.
    rV   rX   r,   Nr&   r<   r1   rG   rY   )
r   r1  r
   r   r(   rI   r   r.  rj   r   )r/  r3  r   rz   rQ   Zscalar_functionr,   r,   r-   test_memoize_jac_with_bfgs'  s   r6  c                   C   sH   t   tjdd tj tjdd W d    d S 1 sw   Y  d S )Nc                 S   s   t | d gS r  r  r*   r,   r,   r-   rM  @  r  ztest_gh12696.<locals>.<lambda>Fr   )r   r
   r  r(   r   r,   r,   r,   r-   test_gh12696<  s
   "r7  c                     s  t jd} | d}t g dt g d}|kdfdd	  fdd	 fd
d fdd} fdd} fdd} fdd} fd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df}d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   r1   r  r1  )rY   r1   r1   r1  Tc                    s0   |r	| j dks	J |rt|      d S d S r  )r  r   )r+   Z
check_sizecheck_values)i_ebr  r,   r-   check_xM  s
   z(setup_test_equal_bounds.<locals>.check_xc                        |  t | S r>   r^  r*   r:  r,   r-   ru   S     
z%setup_test_equal_bounds.<locals>.funcc                    r;  r>   )r
   r   r*   r<  r,   r-   rx   W  r=  z%setup_test_equal_bounds.<locals>.gradc                    s    |  d S r>   r,   r  r<  r,   r-   r  [  rp  z)setup_test_equal_bounds.<locals>.callbackc                    s    | dd | dd d S )NFr8  r   r&   r,   r*   r<  r,   r-   constraint1^     z,setup_test_equal_bounds.<locals>.constraint1c                    "    | dd t | }d|d< |S )NFr>  r&   r   r(   r  r+   Zdcr<  r,   r-   	jacobian1b     
z*setup_test_equal_bounds.<locals>.jacobian1c                    s    | dd | dd d S )NFr>  r1   rY   rX   r,   r*   r<  r,   r-   constraint2h  r@  z,setup_test_equal_bounds.<locals>.constraint2c                    rA  )NFr>  r&   r1   rB  rC  r<  r,   r-   	jacobian2l  rE  z*setup_test_equal_bounds.<locals>.jacobian2)r  r  r  Frg  c                    s    | | fS r>   r,   r*   r  r,   r-   rM  ~  r  z)setup_test_equal_bounds.<locals>.<lambda>c                 S   s   t t| |S r>   )listzipr  r  r,   r,   r-   rM    r  rf  )	r  kwdsbound_typesr  	callbacksr  r  rQ   r9  )TT)r(   r5   rB  r  rI   r   rn  r   )r;   rQ   r  r  r?  rD  rF  rG  Zc1aZc1bZc2aZc2br  rK  rL  r  rM  datar,   )r:  ru   rx   r9  r  r-   setup_test_equal_boundsE  sP   
rO  z0Failures due to floating point issues, not logicZdicts)modeZ	Compilersfortrannamez
intel-llvmr   r  rK  
bound_typerL  r  r  rM  c                 C   s  t  dkr| dkr|d du r|durtd td td }}td	 td
 }}|\}	}
|	r:| dks:td |	|
k}|||}||| ||	|d tjdi |}tjtj|| tj	||
d}|j
shJ t|j|jdd t|j|jdd |s|d du rtj|j|< |jjd dksJ t|j| |j| dd |d s|	st|tsdd }tj||ddg | |ddd d}t|j|j t|jddg |jd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  rQ   r9  r  z)Only SLSQP supports nonlinear constraints)rQ   r   r   r  r  )r   r   r   r  gTqs*>r   gMb@?r   r   r9   c                 S   s,   t t jdt jdg}| |ddg< t|S )Nr1   r  r   )r(   rI   r  r
   r   )r+   Znew_xr,   r,   r-   r     s   
ztest_equal_bounds.<locals>.funr1   r  g>r,   )platformmachiner   rA  eb_datar  r
   r   r   r   r   r   r   r+   r(   r  r   r  r  r   )r   rK  rS  r  r  r  r  rQ   r9  Ztest_constraintsZreference_constraintsZ	fd_neededr   r   expectedr   Zfd_resr,   r,   r-   test_equal_bounds  sF   





rY  c           	      C   s  ddd}ddg}d}t j|||| d}|jsJ t|j|dd	g |jdks*J |jd
ks1J d}t j|||| |d}|jsBJ t|j|dd	gd |  dkrdd }t|t	j
 d}t j|||| |gd}|jdu sqJ t|j|dd	g |jdksJ d}|j|sJ t|t	j
 d}t j|||| |gd}|jdu sJ t|j|dd	g |jdksJ d}|j|sJ d S d S )Nr&   c                 S   s   t j| | S r>   )r(   ZlinalgZnorm)r+   p1r,   r,   r-   rt     r!  z test_all_bounds_equal.<locals>.fr  )r1   r1   )rV   r  r  rV   r  z/All independent variables were fixed by bounds.)r1   r  r1   r  c                 S   r  r>   r  r*   r,   r,   r-   con  r   z"test_all_bounds_equal.<locals>.conrZ   )r   r   r  Fz3All independent variables were fixed by bounds, butr   Tz8All independent variables were fixed by bounds at valuesr  )r
   r   r   r   r   r   r  upperr   r(   rn  r	  )	r   rt   r   rQ   r   r   r[  Znlcr  r,   r,   r-   test_all_bounds_equal  sD   


r]  c                  C   s^   dd } dd }d|dg}dgd }d	|d
< t j| g dd||d |d d |ks-J d S )Nc                 S   s(   | d d | d d  | d | d   S )Nr   rY   r&   r1   r,   r*   r,   r,   r-   rt     s   (ztest_eb_constraints.<locals>.fc                 S   s$   | d | d  | d  | d  d S )Nr   r&   r1   rY   (   r,   r*   r,   r,   r-   cfun  s   $z!test_eb_constraints.<locals>.cfunr  r  )r   r  r   )r   r   r&   )r&   r1   rY   r   r  )rQ   r   r   r  r   r   r   )rt   r_  r  r   r,   r,   r-   test_eb_constraints  s   
r`  c                  C   sh   t tttttd} |  D ]\}}|D ]}t|| qqdddd}| D ]\}}tt	t|| q&d S )N)r   r  rootZroot_scalarZlinprogZquadratic_assignmentZekkir   )r   ZmaximizeZmaximize_scalar)
r   r   r   r   r   r   itemsr   rL   rM   )Zsolver_methodsZsolverr  r   Zunknown_solver_methodr,   r,   r-   test_show_options'  s$   rc  c                  C   s8   t jddgddgd} t jt jtddgd| d d S )NrT  r  rJ  r   r   r[  )r
   r   r   r   r(   rI   r&  r,   r,   r-   test_bounds_with_list?  s   
rd  c            
      C   s   dd } dd }dd }g d}g d}t d	d
 }tD ]*}d }d }||v r)|}||v r/|}tj| ||||d}	t|	jt t |dd qd S )Nc                 S   s*   t t | }| |8 } | | 9 } t | S r>   )r(   rK   r  r@   r  r,   r,   r-   fquadK  s   
z/test_x_overwritten_user_function.<locals>.fquadc                 S   s(   t t | }| d9 } | d| 8 } | S r  )r(   rK   r  r  r,   r,   r-   	fquad_jacQ  s   z3test_x_overwritten_user_function.<locals>.fquad_jacc                 S   s   t t | d S r+  )r(   r   r  r*   r,   r,   r-   
fquad_hessW  r/   z4test_x_overwritten_user_function.<locals>.fquad_hess)r"  r  r  r  r  r  )r  r  r  r  r  r   r4   r  g-C6*?r   )	r(   rX  r   r
   r   r   r+   rK   r  )
re  rf  rg  Zmeth_jacZ	meth_hessrQ   methr   rz   r   r,   r,   r-    test_x_overwritten_user_functionG  s    ri  c                   @   s   e Zd Zdd ZdS )TestGlobalOptimizationc                 C   s   dd }t j|ddt |dgt |dgt |dgt |dgg}|D ]4}t|t js0J t|ds7J t|ds>J t|dsEJ t|d	sLJ t|d
sSJ t|dsZJ q&d S )Nc                 S   r$  r  r,   r*   r,   r,   r-   ru   r  r%  zDTestGlobalOptimization.test_optimize_result_attributes.<locals>.funcr&   )rQ   )r`  r   r+   r   r  r   r   r   )	r
   ZbasinhoppingZdifferential_evolutionZshgoZdual_annealingdirectr  r   rl   )rh   ru   r  r  r,   r,   r-   test_optimize_result_attributesq  s    z6TestGlobalOptimization.test_optimize_result_attributesN)r}   r~   r   rl  r,   r,   r,   r-   rj  o  s    rj  c                  C   s@   t tt} t| ttdd t tt}t|ttdd d S )Nr   r   )r
   Zapprox_fprimerP   r  r   rN   rO   )r  rG  r,   r,   r-   test_approx_fprime  s   rm  c                  C   s   dd } t ddgddgd}tj| dd|d}t tddgtddgd}tj| dd|d}t|j|j t|j|j d S )	Nc                 S   s   | d d | d d d  S r[  r,   r*   r,   r,   r-   rt     r  ztest_gh12594.<locals>.frf  r   rJ  r   r   r[  )r   r
   r   r(   rI   r   r   r+   )rt   r   r   r   r,   r,   r-   test_gh12594  s    rn  r  r  sparse_typec                    s    fdd}ddg}t jt|| t|d}t jt|| ttd}t|j|j t|j|j |j|jks4J |j	|j	ks<J |j
|j
ksDJ d S )Nc                    s    t | S r>   )r   r*   ro  r,   r-   sparse_rosen_hess  rp  z.test_sparse_hessian.<locals>.sparse_rosen_hessr  r  )r
   r   r   r   r   r   r   r+   r   r   Znhev)r   ro  rq  rQ   Z
res_sparseZ	res_denser,   rp  r-   test_sparse_hessian  s   	

rr  )r   r  rU  rb   numpyr(   Znumpy.testingr   r   r   r   r   r   r   r   r	   rL   Zscipyr
   Zscipy.optimize._minimizer   r   r   r   r   Zscipy.optimize._linprogr   Zscipy.optimize._rootr   Zscipy.optimize._root_scalarr   Zscipy.optimize._qapr   Z(scipy.optimize._differentiable_functionsr   r   Zscipy.optimize._optimizer   r   r   Zscipy.optimizer   r   r   Zscipy.sparser   r   r   r   r    r!   Zscipy.conftestr"   Zscipy._lib._array_api_no_0dr#   r$   r7  r  rS   rT   r   rC  rL  rO  rS  rZ  r\  r^  rb  rd  ro  rv  rx  r|  r}  r~  r  r9  rd  re  rq  r  r  r  r  r  r  r  r  r  r  rN   rO   rP   r  r  r  r  r  r  r  r   r  ra  r   r!  r,  r-  Zfixturer/  r4  r5  r6  r7  rO  rW  Zxfail_on_32bitr:  Zshow_configrY  r]  r`  rc  rd  ri  rj  rm  rn  rr  r,   r,   r,   r-   <module>   s    $ 6:    



L*      

=  /),?&}#L
#E
	T
>
+(
