a
    h                 
   @   s0  d 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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.m/Z/m0Z0m1Z1 dd Z2G dd dZ3G dd de3Z4dd Z5dd Z6dd Z7dd Z8dd Z9d d! Z:d"d# Z;d$d% Z<d&d' Z=d(d) Z>G d*d+ d+e4Z?G d,d- d-e4Z@G d.d/ d/e4ZAG d0d1 d1e4ZBG d2d3 d3e3ZCejDEd4g d5d6d7 ZFG d8d9 d9ZGG d:d; d;ZHG d<d= d=ZId>d? ZJG d@dA dAZKdBdC ZLdDdE ZMdFdG ZNdHdI ZOG dJdK dKZPdLdM ZQdNdO ZRdPdQ ZSdRdSgZTdTdUgZUdVZVdWdX ZWG dYdZ dZZXd[d\ ZYd]d^ ZZd_d` Z[dadb Z\G dcdd ddZ]dedf Z^G dgdh dhZ_didj Z`G dkdl dlZaejbdmdn Zcdodp Zddqdr Zedsdt Zfdudv Zgdwdx Zheh ZiejDjdyejDEd4eidz ejDEd{eid{ ejDEd|eid} ejDEd~eid~ ejDEdeid dd ZkejDEd4eidz dd Zldd Zmdd Zndd Zodd ZpG dd dZqdd Zrdd ZsejDEd4ddgejDEde,e-e.e/e0e1gdd ZtdS )z
Unit tests for optimization routines from optimize.py

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

To run it in its simplest form::
  nosetests test_optimize.py

    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_arrayc               	   C   sX  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sJ ttj| ||ddddd }|dksJ 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 sTJ d S )Nc                 S   s   ddt |    S N   npexpx r)   ^/var/www/html/assistant/venv/lib/python3.9/site-packages/scipy/optimize/tests/test_optimize.pyexpit*   s    ztest_check_grad.<locals>.expitc                 S   s    t |  dt |   d  S Nr#      r$   r'   r)   r)   r*   	der_expit-   s    z"test_check_grad.<locals>.der_expit      ?r   random  )	directionseedư>)epsilon)r5   r2   r3   皙?Hz>c                 S   s   | t |   S N)r%   sinsumr'   r)   r)   r*   x_sinxE   s    ztest_check_grad.<locals>.x_sinxc                 S   s   t | | t |   S r8   r%   r9   cosr'   r)   r)   r*   
der_x_sinxH   s    z#test_check_grad.<locals>.der_x_sinxr-   皙?Zrandom_projectionallgƠ>)r%   arrayr
   Z
check_gradr   absarangeassert_raises
ValueErrorhimmelblau_gradhimmelblau_hesshimmelblau_x0)r+   r.   x0rr;   r>   r)   r)   r*   test_check_grad&   sL    







rK   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   sv   t g dg dg dg dg dg| _t g d| _t dt j| _t g d| _d| _d	| _	d	| _
g | _d S )
Nr#   r#   r#   )r#   r#   r   )r#   r   r#   )r#   r   r   )      ?333333?      ?   )        g\g)3?  r   )r%   rA   FKzerosZfloat64startparamssolutionmaxiter	funccalls	gradcallstraceselfr)   r)   r*   setup_methoda   s    
zCheckOptimize.setup_methodc                 C   sj   |  j d7  _ | j dkr tdt| j|}ttt|}|t| j| }| j	
t| |S )Nr#   ip  z+too many iterations in optimization routine)rZ   RuntimeErrorr%   dotrT   logr:   r&   rU   r\   appendcopy)r^   r(   log_pdotlogZfr)   r)   r*   funco   s    
zCheckOptimize.funcc                 C   sV   |  j d7  _ t| j|}ttt|}t|| }t| j || j S r"   )	r[   r%   ra   rT   rb   r:   r&   Z	transposerU   r^   r(   re   rf   pr)   r)   r*   grady   s
    zCheckOptimize.gradc                 C   s`   t | j|}t tt |}t || }t | jjt t || jt | jj| S r8   )r%   ra   rT   rb   r:   r&   TZdiagri   r)   r)   r*   hess   s    
"zCheckOptimize.hessc                 C   s   t | ||S r8   )r%   ra   rm   r^   r(   rj   r)   r)   r*   hessp   s    zCheckOptimize.hesspN)	__name__
__module____qualname____doc__r_   rh   rk   rm   ro   r)   r)   r)   r*   rL   [   s   
rL   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d9S ):CheckOptimizeParameterizedc           	   
   C   s   | j r`| j| jdd}tj| j| jdd| j|d}|d |d |d |d	 |d
 f\}}}}}n2tj| j| j| jd| jd| jdd}|\}}}}}t	| || | j
dd | jdksJ | j| jdksJ | jt	| jdd g dg dgddd d S )NFrY   disp
return_allr)   CG)argsmethodjacoptionsr(   funnfevnjevstatusT)rY   full_outputrv   retallr4   atol	      r-      )r         rP   )r   g;ӱ.g)`$|;?+=r7   r   rtol)use_wrapperrY   rv   r
   minimizerh   rW   rk   fmin_cgr   rX   rZ   r[   r\   )	r^   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 ]2}tj||gdd}|js6J t|jdgd	d
 qd S )Nc                 S   s   ddt d| d   d  S )Ng      @r#         rP   r-   r$   )rJ   r)   r)   r*   rg      s    z8CheckOptimizeParameterized.test_cg_cornercase.<locals>.fg      rQ   G   rx   rz   rP   h㈵>r   )r%   Zlinspacer
   r   successr   r(   )r^   rg   rI   solr)   r)   r*   test_cg_cornercase   s
    
z-CheckOptimizeParameterized.test_cg_cornercasec              
   C   s  | j rp| j| jdd}tj| j| j| jdd|d}|d |d |d |d	 |d
 |d |d f\}}}}}}}	n6tj| j| j| jd| jd| jdd}
|
\}}}}}}}	t	| || | j
dd | jdksJ | j| jdksJ | jt	| jdd g dg dgddd d S )NFru   BFGSr)   r{   rz   ry   r|   r(   r}   r{   Zhess_invr~   r   r   Try   rY   r   rv   r   r4   r   
         )r   g&/LgB__E7?)r   g$g
|3?r   r7   r   )r   rY   rv   r
   r   rh   rW   rk   	fmin_bfgsr   rX   rZ   r[   r\   )r^   r   r   r   r   ZgoptZHoptr   r   r   r   r)   r)   r*   	test_bfgs   s<    
z$CheckOptimizeParameterized.test_bfgsc                 C   sj   t jtddH tg d}| jtd d}tjtj	|dd|d W d    n1 s\0    Y  d S )	N+'hess_inv0' matrix isn't positive definite.matchg?ffffff?皙?ffffff?333333?   rv   	hess_inv0r   r)   rI   rz   ry   r|   )
pytestr	   rE   r%   rA   rv   eyer
   r   r   )r^   rI   r   r)   r)   r*   test_bfgs_hess_inv0_neg   s    z2CheckOptimizeParameterized.test_bfgs_hess_inv0_negc                 C   st   t jtddR tg d}td}d|d< | j|d}tjtj	|dd	|d
 W d    n1 sf0    Y  d S )Nr   r   r   r   r   r   r   r   r   r)   r   )
r   r	   rE   r%   rA   r   rv   r
   r   r   )r^   rI   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   rv   r4   r   )	r
   r   r%   rA   rv   r   r   r   r}   )r^   r}   rI   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b | jrTd| ji}tj ||d	d
|dd }ntj ||| jd}t  |rzJ W d    n1 s0    Y  d S )Nc                 S   s   t j|    S r8   )r%   er'   r)   r)   r*   rh      s    z;CheckOptimizeParameterized.test_bfgs_infinite.<locals>.funcc                    s
    |  S r8   r)   r'   rh   r)   r*   fprime   s    z=CheckOptimizeParameterized.test_bfgs_infinite.<locals>.fprimer   ignore)overrv   r   r)   r   r(   rv   )r%   errstater   rv   r
   r   r   isfinite)r^   r   rI   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sHJ d S )Nr   bfgsZxrtolMbP?rz   r|   gtolr
   r   r   nit)r^   rI   r   refr)   r)   r*   test_bfgs_xrtol  s    

z*CheckOptimizeParameterized.test_bfgs_xrtolc                 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sHJ d S )Ng$@g333334@g%@r   333333r   c1:0yE>r   r6   )r
   r   r   r~   )r^   rI   Zres_c1_smallZ
res_c1_bigr)   r)   r*   test_bfgs_c1  s    

z'CheckOptimizeParameterized.test_bfgs_c1c                 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sHJ d S )Nr   r   c2?r   r   r   )r^   rI   Zres_defaultZres_modr)   r)   r*   test_bfgs_c2  s    

z'CheckOptimizeParameterized.test_bfgs_c2r   r   rP   r-   皙r6   r?   c                 C   sT   t jtdd2 g d}tjtj|d||dd W d    n1 sF0    Y  d S )Nz'c1' and 'c2'r   r   cg)r   r   r   )r   r	   rE   r
   r   r   )r^   r   r   rI   r)   r)   r*   test_invalid_c1_c2)  s
    z-CheckOptimizeParameterized.test_invalid_c1_c2c           
   	   C   s   | j rd| j| jdd}tj| j| jdd|d}|d |d |d |d	 |d
 |d f\}}}}}}n0tj| j| jd| jd| jdd}	|	\}}}}}}t| || | j	dd t|dd  | j	dd  dd | j
dksJ | j
| jdksJ | jd S )NFru   r)   Powellry   rz   r|   r(   r}   direcr   r~   r   Tr   r4   r   r#   h㈵>   r   )r   rY   rv   r
   r   rh   rW   fmin_powellr   rX   rZ   r[   
r^   r   r   r   r   r   numiterr   r   r   r)   r)   r*   test_powell2  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 rd| j| jdd}tj| j| jdd|d}|d |d |d |d	 |d
 |d f\}}}}}}n0t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 )NFru   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   r7   r   )
r   rY   rv   r
   r   rh   rW   r   r   r\   r   r)   r)   r*   test_powell_gh14014T  s2    z.CheckOptimizeParameterized.test_powell_gh14014c                 C   s   dd | j D }| jr| j| jdd}tj| j| j d|d|d}|d |d	  }}|| jks`J t| || | j	d
dd | jdksJ | j
dksJ d S )Nc                 S   s   g | ]}t j t jfqS r)   )r%   pi).0_r)   r)   r*   
<listcomp>z      zBCheckOptimizeParameterized.test_powell_bounded.<locals>.<listcomp>Fru   r)   r   )ry   boundsrz   r|   r(   r~   r4   r   r      r   )rW   r   rY   rv   r
   r   rh   rZ   r   rX   r[   )r^   r   r   r   r   r   r)   r)   r*   test_powell_boundedw  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
dksJ | j
| jdksJ | jt| jdd g dg dgddd d S )NFru   r)   Nelder-meadr   r(   r}   r   r~   r   Tr   r4   r      r   L   N   )g	dװ?g]fgt䝁?)gә ?g#=^goT?r   r7   r   )r   rY   rv   r
   r   rh   rW   fminr   rX   rZ   r[   r\   )	r^   r   r   r   r   r   r   r   r   r)   r)   r*   test_neldermead  s6    z*CheckOptimizeParameterized.test_neldermeadc              
   C   sL  t d}| j|d< tdD ]}||d |f  d7  < q| jr| 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dksJ | j| jdks"J | jt	| jdd g dg dgddd d S )N)r   rQ   .rQ   r#   r6   FTrY   rv   rw   initial_simplexr)   r   r   r(   r}   r   r~   r   Zallvecsr   ry   rY   r   rv   r   r   r4   r   d   2   4   )gIt?g?'ΛTgx8?)gҢ_׆?goMg囎|52?r   r7   r   )r%   rV   rW   ranger   rY   r
   r   rh   r   r   rX   rZ   r[   r\   )r^   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r| jdd|d}ttt	j
| j| jd	d
|d qhttt	j| j| jd	| jddd|d
 qhd S )N)rQ   r-   r-   .r#   r6   )rQ   rQ   Fr   r)   r   r   Tr   )r%   rV   rW   r   rc   r   rY   rD   rE   r
   r   rh   r   )r^   Zbad_simplicesr   r   r   r)   r)   r*   #test_neldermead_initial_simplex_bad  s6    



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   s   t | d S Nr-   r%   r:   r'   r)   r)   r*   quad  s    z>CheckOptimizeParameterized.test_neldermead_x0_ub.<locals>.quadr#   )r   rN   nelder-meadr   rz   r   r-   )r#         @r
   r   r   r(   )r^   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s2J d S )NrY   	Newton-CGr)   rz   r{   ry   r|   r#   )r
   r   rh   rW   rk   r   )r^   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sBJ t|jd tj d S )
Nc                 S   s   t | d S Nr   )r%   r=   r'   r)   r)   r*   cosine  s    z=CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.cosinec                 S   s   t | d  S r  )r%   r9   r'   r)   r)   r*   r{     s    z:CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.jacr6   r   	newton-cg)xtol)rI   r{   rz   r|   )r
   r   dictr   r   r(   r%   r   )r^   r  r{   rI   r  r  r)   r)   r*   test_ncg_zero_xtol  s    z-CheckOptimizeParameterized.test_ncg_zero_xtolc              
   C   s   | j r8| 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d
ksJ | j| jdksJ | jt	| jdd g dg dgddd d S )NFru   r
  r)   r  r(   r   r4   r   r      rQ   r   (6-H=g?g4u3?r  g_g/N3?r7   r   )r   rY   rv   r
   r   rh   rW   rk   fmin_ncgr   rX   rZ   r[   r\   r^   r   r   r   r)   r)   r*   test_ncg'  s6    z#CheckOptimizeParameterized.test_ncgc                 C   s   | 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d
ksJ | j| jdksJ | jt
| jdd g dg dgddd d S )NFru   r
  r)   )rz   r{   rm   ry   r|   r(   )Zfhessry   rY   r   rv   r   r4   r   r      rQ   r   r  r  r7   r   )r   rY   rv   r
   r   rh   rW   rk   rm   r  r   rX   rZ   r[   r\   r  r)   r)   r*   test_ncg_hessH  s:    z(CheckOptimizeParameterized.test_ncg_hessc                 C   s   | 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d
ksJ | j| jdksJ | jt
| jdd g dg dgddd d S )NFru   r
  r)   )rz   r{   ro   ry   r|   r(   )Zfhess_pry   rY   r   rv   r   r4   r   r   r  rQ   r   r  r  r7   r   )r   rY   rv   r
   r   rh   rW   rk   ro   r  r   rX   rZ   r[   r\   r  r)   r)   r*   test_ncg_hesspj  s:    z)CheckOptimizeParameterized.test_ncg_hesspN)rp   rq   rr   r   r   r   r   r   r   r   markfilterwarningsr   r   r   r   parametrizer   r   xfailr   r   r   r   r   r  r  r  r  r  r  r)   r)   r)   r*   rt      s:   "


	

"
 (!"rt   c                     s\   t jd  fdd} dD ]:}dD ]0}tj|  d|d|id}|d	 |ks$J q$qd S )
Nl	   <vgRI*q4 c                    s     dd S Nr#   rS   r0   r'   rngr)   r*   cost  s    ztest_maxfev_test.<locals>.cost)r#   r   r   )r   Nelder-Meadr   maxfevr   r~   )r%   r0   default_rngr
   r   )r&  Zimaxfevrz   r  r)   r$  r*   test_maxfev_test  s    r*  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 s0    Y  t j| tdd\}}d}tt|d" |t	ddg W d    n1 s0    Y  d S )	Nc                 S   s   | S r8   r)   r'   r)   r)   r*   func_  s    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%   Zasarrayr   rD   Z_MaxFuncCallErrorrE   rA   )r+  Zfcallsrh   imsgr)   r)   r*   )test_wrap_scalar_function_with_validation  s     ,r0  c                  C   sR   d} t t| d. tjdd tddgdd W d    n1 sD0    Y  d S )Nr,  r   c                 S   s   | S r8   r)   r'   r)   r)   r*   <lambda>  r   z.test_obj_func_returns_scalar.<locals>.<lambda>r#   r   r   )rD   rE   r
   r   r%   rA   r   r)   r)   r*   test_obj_func_returns_scalar  s    r2  c                  C   s4   t g d} tjjtj| dd}|jdks0J d S )Nr   r   )xatoliS  )r%   rA   r
   	_minimize_minimize_neldermeadr   r   )rI   r   r)   r)   r*   test_neldermead_iteration_num  s
    r6  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 r8   )Zdtyper%   float32r
   r   r'   r)   r)   r*   rosen_  s    z*test_neldermead_respect_fp.<locals>.rosen_r'  r   )r%   rA   Zastyper9  r
   r   )rI   r:  r)   r)   r*   test_neldermead_respect_fp  s    r;  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   r-   r#   r)   r'   r)   r)   r*   rh     s    z)test_neldermead_xatol_fatol.<locals>.funcr#   r-   r   )rY   r3  Zfatol)r
   r4  r5  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   s   t | d S r  r  r'   r)   r)   r*   rh     s    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   )rh   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 sF0    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 s0    Y  t|jtg ddd	 t	|j
d t	|jd d S )Nc                 S   s   t | d S r  r  r'   r)   r)   r*   rh     s    z/test_bounded_powell_outsidebounds.<locals>.func)r	  r#   r@  r@  )rP   gr   r  rR   r4   r   Tr   r   r   r   )r   r#   r   )r   r   r#   r   )r   rz   r|   )g      r   r   Fr   )r   r
   OptimizeWarningr   r   r(   r%   rA   lenr   r   r   )rh   r   rI   r   r   r)   r)   r*   !test_bounded_powell_outsidebounds  s"    0 $rE  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 s0    Y  t|jdd
d d S )Nc                 S   s   t | d S r  r  r'   r)   r)   r*   rh     s    z+test_bounded_powell_vs_powell.<locals>.func))r	  )r   )r#   gffffff"@)rA  gffffff@g/)g gr   r   rI  绽|=ftolr  r   r   rR   r4   r   )r|   r   rz   )r	  r   r#   r   rI  )Nr	  r   r#   )rA  NrH  c                 S   sz   t | d  t | d  t | d  | d   t | d  }|t t | d | d  t | d  8 }|d S Nr   r#   r-   r<   r(   tr)   r)   r*   rh   -  s    D.)rI  r   rQ   )r   r   r   r   r  g8:}?r   )gb4F@g:gW?@)r
   r   r   r(   r}   r%   rA   infr~   r   rC  )rh   r   rI   r|   Z
res_powellZres_bounded_powellrj   r)   r)   r*   test_bounded_powell_vs_powell  s`    




&rQ  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    .ArQ   r   rK  )rz   r   r|   rM   c                 S   s   t |  S r8   r  r'   r)   r)   r*   rg   _  s    z1test_onesided_bounded_powell_stability.<locals>.fg    `F-C6?r   c                 S   s,   t t | d  t | dkr&dnd S )Nr6   r   r#   r	  r%   rB   r:   r@   r'   r)   r)   r*   rg   e  s    gwc                 S   s,   t t | d  t | dkr&dnd S )Nr   r   r#   r	  rS  r'   r)   r)   r*   rg   l  s    gB+Iar7   r   c                 S   sX   t t | d d d  t t | dd  d  }|t | dkrNdnd9 }|S )Nr-   r   r6   r   r#   r	  rS  rN  r)   r)   r*   rg   s  s    :g     @@r   g 4&k\)r%   rP  r
   r   r   r}   )kwargsrI   rg   r   r)   r)   r*   &test_onesided_bounded_powell_stabilityS  s$    rU  c                   @   s   e Zd ZdZdZdS )TestOptimizeWrapperDispTNrp   rq   rr   r   rv   r)   r)   r)   r*   rV  }  s   rV  c                   @   s   e Zd ZdZdZdS )TestOptimizeWrapperNoDispTFNrW  r)   r)   r)   r*   rX    s   rX  c                   @   s   e Zd ZdZdZdS )TestOptimizeNoWrapperDispFTNrW  r)   r)   r)   r*   rY    s   rY  c                   @   s   e Zd ZdZdZdS )TestOptimizeNoWrapperNoDispFNrW  r)   r)   r)   r*   rZ    s   rZ  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'g d(e d)d* Zejd'g d+d,d- Zd.d/ Zejd'g d0d1d2 Zejd'g d3d4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"ejd'g d>d?d@ Z#ejd'g dAdBdC Z$ejd&ejd'e%ejdDg dEdFdG Z&dHdI Z'ejd'dJdKdL Z(ejd'g dMdNdO Z)dPS )QTestOptimizeSimplec                 C   sn   dd }dd }t jg}t jddd4 tj|||dd}t ||sLJ W d    n1 s`0    Y  d S )	Nc                 S   s   | S r8   r)   r'   r)   r)   r*   rh     s    z.TestOptimizeSimple.test_bfgs_nan.<locals>.funcc                 S   s
   t | S r8   r%   Z	ones_liker'   r)   r)   r*   r     s    z0TestOptimizeSimple.test_bfgs_nan.<locals>.fprimer   )r   invalidFr   )r%   nanr   r
   r   isnan)r^   rh   r   rI   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 s60    Y  t |d sRJ |d du sbJ d	d }d
d }t jdd  tj|d|d}W d    n1 s0    Y  t |d sJ |d du sJ d S )Nc                 S   s   t jS r8   r%   r^  r'   r)   r)   r*   rh     s    z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.funcr   r]  r   r}   r   Fc                 S   s   | dkrdS t jS r  ra  r'   r)   r)   r*   rh     s    c                 S   s
   t | S r8   r\  r'   r)   r)   r*   r     s    z7TestOptimizeSimple.test_bfgs_nan_return.<locals>.fprime)r{   )r%   r   r
   r   r_  )r^   rh   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 )NrN   r)   F)r5   ry   rY   rv   r4   r   )r%   sqrtspacingr0   randrD  rX   r
   r   rh   rW   rY   r   )r^   r5   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   rx   TNC2-point3-pointN)rz   r{   r4   r   )		itertoolsproductr
   r   rh   rW   r   r(   rX   )r^   methodsjacsrz   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 r8| }tj| j| j|| j|d}|j	s J q g d}|D ]H}t
t* tj| j| j|| jd d W d    qj1 s0    Y  qjd S )N)trust-constrr
  	trust-ncgtrust-krylovrz   r{   rm   )rr  rs  doglegtrust-exact)r   r
   r   rl  rm  r   rh   rW   rk   r   r   r	   rE   )r^   rn  Zhessesrz   rm   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 d S )Nr   gBrN   r)   r'   r)   r)   r*   rg     s    z/TestOptimizeSimple.test_bfgs_gh_2169.<locals>.f      $@Fr   rN   rR  r   r   )r
   r   r   )r^   rg   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   r-      )add)r(   Zxpseenr)   r*   rg     s    
z:TestOptimizeSimple.test_bfgs_double_evaluations.<locals>.fr   Tr7   )rz   r{   tol)setr
   r   r^   rg   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dksVJ | j| j	dksjJ | j	t| j
dd g dg d	gd
dd d S )Nr)   )ry   rY   r4   r   r   r   rQ   )g><gwT볹gUuAX?)rR   gHg!mʲ3?r   r7   r   )r
   fmin_l_bfgs_brh   rW   rk   rY   r   rX   rZ   r[   r\   r^   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_gradrY   r4   r   )r
   r  rh   rW   rY   r   rX   r  r)   r)   r*   test_l_bfgs_b_numjac  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 r8   rh   rk   r'   r]   r)   r*   r}     s    z4TestOptimizeSimple.test_l_bfgs_b_funjac.<locals>.funrY   r4   r   )r
   r  rW   rY   r   rh   rX   )r^   r}   r   r   r   r  r)   r]   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 stJ t|j
d
 d S )Nc                   @   s   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(   r]   r)   r)   r*   __init__+  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   r^   r(   r)   r)   r*   __call__0  s    zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__call__Nrp   rq   rr   r  r  r)   r)   r)   r*   Callback*  s   r  rR   l-bfgs-brY   r   )rz   callbackr|   r#   Fz+STOP: TOTAL NO. of ITERATIONS REACHED LIMIT)r
   r   r   r   r   r   r(   r}   r   r   message)r^   r  cr   r)   r)   r*   test_l_bfgs_b_maxiter'  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
ksTJ d | _| _	tj| j| jd|d}| j|jksJ t| |j| | jdd d | _| _	tj| j| jd	d|d
}| j|jksJ t| |j| | jdd d S )NFrv   rY   L-BFGS-Brz   r{   r|   r4   r   r   r   rk  r{   rz   r|   )rY   r
   r   rh   rW   rk   r   r(   rX   r[   r   rZ   r~   )r^   r   rJ   rar)   r)   r*   test_minimize_l_bfgs_bA  s2    z)TestOptimizeSimple.test_minimize_l_bfgs_bc                 C   sv   d }dD ]h}d| j |d}tj| j| jd| j|d}| |j}|d u rN|}n||k sZJ t|| | j|d qd S )N)r6   rR  r7   rJ  F)rv   rY   rL  r  r  r   )	rY   r
   r   rh   rW   rk   r(   r   rX   )r^   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r2J d S )Nr   rN   r  Fr#   )rv   Zmaxlsr  )r
   r   r   r%   rA   r   r   )r^   r   r)   r)   r*   test_minimize_l_bfgs_maxlsn  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   rS   c                    s    | } | |S r8   )rc   )r(   valuerg   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 r8   r)   )r   r.  yr)   r)   r*   	<genexpr>  r   zPTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.<genexpr>)
r
   r   r   r%   fullr  max	enumerateminr   )r^   grI   r  lowZmediumhighr  kr  targetZxminr   r  r)   r  r*   *test_minimize_l_bfgs_b_maxfun_interruptionu  s    
"z=TestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruptionc                 C   sB   ddd}g d}t jt j||tddd	}t|jd
ddd d S )Nr)   r6   r   c                 [   s   |}| |}	d}
d}d}d}|r|s||k rd}|d7 }t t|D ]}|| | || | fD ]B}t|}|||< | |g|R  }|
d7 }
||	k rb|}	|}d}qb|d ur|| |d urF|
|krFd} qqFqtj|	|||
|dkdS )Nr#   r   TFr}   r(   r   r~   r   )r   r%   sizerd   r
   r   )r}   rI   ry   r(  stepsizerY   r  r|   bestxbestyfuncallsniterimprovedstopdimstestxtestyr)   r)   r*   custmin  s6    

z/TestOptimizeSimple.test_custom.<locals>.custmin)g?r   r   皙?r   皙?r  r   rN   rR  ry  )r)   Nr6   r   N)r
   r   r   r  r   r(   )r^   r  rI   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)rI  r-   )r   rQ   constraintsc                    s(   |d  u sJ |d u s J t  S )Nr   r  r
   r   )r}   rI   r|   r   r  r)   r*   r    s    z0TestOptimizeSimple.test_gh10771.<locals>.custminr#   )rz   r   r  )r
   r   r   )r^   r  rI   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 sJ | d||j d||j qd S )Nc                 S   s$   | \}}|d |d  |d  d S )Nr-   r   r#   r)   zr(   r  r)   r)   r*   rh     s    z<TestOptimizeSimple.test_minimize_tol_parameter.<locals>.funcc                 S   s:   | \}}t d| |d  d|d   d|d  | gS )Nr-   r   rQ   r%   rA   r  r)   r)   r*   dfunc  s    z=TestOptimizeSimple.test_minimize_tol_parameter.<locals>.dfunc	r  powellr   r   r  r  tnccobylaslsqpr  r  r  r#   rJ  )r{   r  rz   rN   : z vs. )r
   r   r(   )r^   rh   r  rz   r{   Zsol1Zsol2r)   r)   r*   test_minimize_tol_parameter  s    z.TestOptimizeSimple.test_minimize_tol_parameterr   ignore::RuntimeWarningrz   )r   r   r   r   r  r  fmin_tnc
fmin_slsqpc           
         sl   dv rdd }nt j}t j}t j}td}i } drtt  } dkrXd|d< q d	krjd
|d< q dv r|d|d< qd|d< n2 fdd} dkrtd
d|d< ntdd|d<  dv r||d< n* dv r||d< n dv r||d< ||d< g fdd}|||fd|i| t	dks,J t
dd  D sDJ td}	td!d  |	D rhJ d S )"N)r  r  c                 S   s   t | t | fS r8   )r
   r   r   r'   r)   r)   r*   rh     s    zDTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.funcr   r   r  r   iterr  r   r  )r   r   i  rY   c                     s    |d< t j| i |S )Nrz   r
   r   )akwr   r)   r*   routine  s    zGTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.routiner  r  r|   r  )r  r   )r  r{   rs  rv  rr  ru  rq  rm   c                    s(   t | tjrJ  | t| f d S r8   )
isinstancer
   r   rc   r%   rd   )r(   ry   rT  )resultsr)   r*   r    s    zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.callbackr  r-   c                 s   s    | ]\}}t ||kV  qd S r8   )r%   r@   r   r(   r  r)   r)   r*   r    r   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    r   )r
   r   r   r   r%   rV   
startswithgetattrr  rD  r@   rl  combinationsany)
r^   rz   rh   r{   rm   rI   rT  r  r  r  r)   )rz   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 rPd }tj|||||d}t||j|j |dkrt	d ||j|ksJ d S )Nc                 S   s   | d d S r,   r)   r'   r)   r)   r*   rh   '  s    z1TestOptimizeSimple.test_no_increase.<locals>.funcc                 S   s   d| d  d d S )Nr-   r#   r	  r)   r'   r)   r)   r*   bad_grad*  s    z5TestOptimizeSimple.test_no_increase.<locals>.bad_grad       @r  r{  r  r  r  r  r  zSLSQP returns slightly worse)
r%   rA   r  r
   r   r   r(   r}   r   r!  )	r^   rz   rh   r  rI   Zf0r{   r|   r   r)   r)   r*   test_no_increase   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)rN   r  r  r8  r-   )r:   r%   rA   r'   r)   r)   r*   rg   ?  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  rI  r	  r   r   )r%   rA   Zconcatenatera   r(   r  r)   r)   r*   consB  s    z:TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.cons)rP   rN   r/   r  r  ineqtyper}   rz   r  )rR   r-   r   r   rQ   g-q=r   )r%   rA   r
   r   r   r(   )r^   rg   r  rI   r   r)   r)   r*   test_slsqp_respect_bounds=  s    
z,TestOptimizeSimple.test_slsqp_respect_bounds)r'  r   rx   r   r
  r  SLSQPrq  ru  rr  rv  rs  c                 C   s   d}t d}ttj|dtjtjd d }|t|dd}|dv rL|j|d< n|dv rh|j|d< |j	|d	< tj
|j|fi |}|j|ksJ |j|jksJ t|d
r|j|jksJ |dkr|jdksJ d S )Nr   r   r)   r  r   )r
  r{   r  rm   r   r  r   )r%   rV   r   r
   r   r   r   r  rk   rm   r   r}   r   r~   hasattrr   Zngevr   )r^   rz   MAXITERrI   sfrT  r   r)   r)   r*   test_respect_maxiterK  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N |
drhtt|}||j|fi | ntj|j|||d	 W d    n1 s0    Y  d S )
Nr   r)   r#   T)rY   rv   zMaximum number of iterationsr   r   r   )r%   rV   r   r
   r   r   r   r   warnsRuntimeWarningr  r  r}   r   )r^   rz   rI   r  r|   r  r)   r)   r*   test_runtime_warningm  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s`J d S )
Nr   c                 S   s,   t d| d  d| d   d| d   gS )Nr?   r   皙?r#   Q?r-   r  r'   r)   r)   r*   r}     s    zRTestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints.<locals>.funr  r  r   rq  r  )r  r{   rm   rz   r|   )	r
   r   r   r   r%   rV   r   r  r   )	r^   r  rg   r{   rm   r}   r  rI   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sJ qt|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   s   | d S r  r)   r'   r)   r)   r*   rg     s    z6TestOptimizeSimple.test_minimize_automethod.<locals>.fc                 S   s   | d S r  r)   r'   r)   r)   r*   r    s    z9TestOptimizeSimple.test_minimize_automethod.<locals>.consrx  r  r  )r  )r   r   r   )r  r   r#   r   r   r7   r   r-   r   )r%   rA   r
   r   r   r   r(   )
r^   rg   r  rI   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(   r  r)   r)   r*   Y  s    z=TestOptimizeSimple.test_minimize_coerce_args_param.<locals>.Yc                 S   s   d| |  S r  r)   r  r)   r)   r*   dY_dx  s    zATestOptimizeSimple.test_minimize_coerce_args_param.<locals>.dY_dx)rQ   r#   r   r#   r   r   r-   r   r   rQ   r   r   )r{   ry   rz   )N)r%   rA   r0   ZrandnrD  r
   r   )r^   r  r   r  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 ]\}|dv rXtd d	}nt }d
k rp|dv rpq8dgd g tj||||d}| d d  d| }|jsJ |t|jdg|d |jdksJ |d
kr8|dv rt d d|d n$ d dkr d dk s(J |q8q8d S )N)gJz5r#   gd~QJ)rx   r   r  r
  c                    s`    d d u r4| d d kr4t | d d   d< t |  dkrLtd| d d d  S )Nr   g     @zOptimization stepped far away!r#   r-   )rB   r  AssertionErrorr'   Zfirst_step_sizescalerI   r)   r*   rg     s
    z7TestOptimizeSimple.test_initial_step_scaling.<locals>.fc                    s   t  | d d  gS Nr   r#   r  r'   )r  r)   r*   r    s    z7TestOptimizeSimple.test_initial_step_scaling.<locals>.g)rx   r   r   )r   rJ  )r  r
        r   r  rN   err_msgrQ   r   g)\(?rP   )	rl  rm  r  r
   r   r   r   r(   r   )	r^   scalesrn  rg   r  rz   r|   r   r	  r)   r  r*   test_initial_step_scaling  s0    
&z,TestOptimizeSimple.test_initial_step_scaling)r  r  r   r   r  r  r  r  r  rq  ru  rr  rv  rs  c                    sZ  t jd dg dd } fdd}dd }d	d
 }t dg}|dv }|dv }||g}	|rd|gn|d g}
|rv|gn|d g}|dkrtddntdd}t jdd t v}|td |t	d |t	d t
|	|
|D ]2\}}}dg tj||||||d}t|jd qW d    n1 s,0    Y  W d    n1 sL0    Y  d S )Nr1   r   c                 S   s   t jS r8   ra  r'   r)   r)   r*   rh     s    z0TestOptimizeSimple.test_nan_values.<locals>.funcc                    s0    d  d7  <  d dkr"t jS t j S d S rM  )r%   r^  r0   rf  r'   countr)   r*   func2  s    z1TestOptimizeSimple.test_nan_values.<locals>.func2c                 S   s   t dgS NrN   r  r'   r)   r)   r*   rk     s    z0TestOptimizeSimple.test_nan_values.<locals>.gradc                 S   s   t dggS r  r  r'   r)   r)   r*   rm      s    z0TestOptimizeSimple.test_nan_values.<locals>.hessrN   r  rs  rv  rr  ru  rs  rv  rr  ru  r  r{  r  r  r   rb  delta_grad == 0.*.*does not use Hessian.*.*does not use gradient.*)r{   rm   rz   r|   F)r%   r0   r3   rA   r  r   r   filterUserWarningr  rl  rm  r
   r   r   r   )r^   rz   rh   r  rk   rm   rI   Z
needs_gradZ
needs_hessfuncsZgradsZhesssr|   suprg   r  hr   r)   r  r*   test_nan_values  s.    z"TestOptimizeSimple.test_nan_values)r  r   r   r  r  r  r  rq  ru  rr  rv  rs  c              	   C   s   d  }}|dv r| j }|dv r$| j}tjddZ t 4}|td tj| j	| j
|||d W d    n1 sr0    Y  W d    n1 s0    Y  tdt| jD ].}t| j|d  | j| rtd| qd S )	Nr  r  r   rb  r  rt  r#   zDuplicate evaluations made by )rk   rm   r%   r   r   r  r  r
   r   rh   rW   r   rD  r\   Zarray_equalr`   )r^   rz   r{   rm   r  r.  r)   r)   r*   test_duplicate_evaluations  s    Bz-TestOptimizeSimple.test_duplicate_evaluationsnew_cb_interface)r   r#   r-   c           
         sL  fddd_ fdd}fdd}d|d	krF fd
d}n0|dkrjG  fddd}| }n fdd} fdd d _d _ dgd |||d}tjf i |d|i}|dkrΈd	 tjf i |ddii}	|j|	jksJ t|j|	j |j|	j  kr$ks*n J |j|dkr<dndksHJ d S )Nc                    s   d _ t| S NF)flagr
   r   r'   rg   r)   r*   rg   ;  s    z9TestOptimizeSimple.test_callback_stopiteration.<locals>.fFc                    s   d _ t| S r  )r  r
   r   r'   r  r)   r*   r  @  s    z9TestOptimizeSimple.test_callback_stopiteration.<locals>.gc                    s   d _ t| S r  )r  r
   r   r'   r  r)   r*   r  D  s    z9TestOptimizeSimple.test_callback_stopiteration.<locals>.hr   r#   c                    s   | j | jksJ    d S r8   r}   r(   intermediate_resultr  rg   r)   r*   callback_interfaceK  s    zJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interfacer-   c                       s    e Zd Zed fddZdS )z@TestOptimizeSimple.test_callback_stopiteration.<locals>.Callbackr!  c                    s   |j |jksJ    d S r8   r   )r^   r"  r#  r)   r*   r  P  s    zITestOptimizeSimple.test_callback_stopiteration.<locals>.Callback.__call__N)rp   rq   rr   r   r  r)   r#  r)   r*   r  O  s   r  c                    s
      d S r8   r)   )Zxkry   )r  r)   r*   r$  U  s    c                      s.     j d7  _ d _ j kr*d _t d S )Nr#   FT)r.  r  StopIterationr)   )r  rY   r)   r*   r  X  s
    
z@TestOptimizeSimple.test_callback_stopiteration.<locals>.callbackr   r  )rI   rz   r}   r{   rm   r  r  r|   rY   rq  rQ   c   )	r  r.  r
   r   r}   r   r(   r   r   )
r^   rz   r  r  r  r$  r  rT  r   r   r)   )r  rg   rY   r*   test_callback_stopiteration4  s2    
"z.TestOptimizeSimple.test_callback_stopiterationc                 C   sJ   d}t t|d& tdd td W d    n1 s<0    Y  d S )Nz"'x0' must only have one dimension.r   c                 S   s   | S r8   r)   r'   r)   r)   r*   r1  p  r   z4TestOptimizeSimple.test_ndim_error.<locals>.<lambda>)r-   r#   )rD   rE   r
   r   r%   onesr^   r/  r)   r)   r*   test_ndim_errorm  s    z"TestOptimizeSimple.test_ndim_error)r  r  r  r  r  rq  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 sX0    Y  t g dg d}d}tjt|d& tj|g d	||d
 W d    n1 s0    Y  d S )Nc                 S   s   t | d S r  r  r'   r)   r)   r*   rg   u  s    z:TestOptimizeSimple.test_minimize_invalid_bounds.<locals>.fr#   r-   rQ   r   z?The number of bounds is not compatible with the length of `x0`.r   )r#   r-   rQ   rI   rz   r   )r#   r   r#   )rQ   r   r-   z:An upper bound is less than the corresponding lower bound.)r   r   r	   rE   r
   r   )r^   rz   rg   r   r/  r)   r)   r*   test_minimize_invalid_boundsr  s    4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2 t jdd	 d
d
gf||d| W d    n1 sx0    Y  d|d< t jdd	 d
d
gf||d| d S )Nr  r{   Tr   r  Maximum numberr   c                 S   s
   t | S r8   r
   r   r'   r)   r)   r*   r1    r   zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>r   r   Frv   c                 S   s
   t | S r8   r.  r'   r)   r)   r*   r1    r   )r
   r   r  rC  r   r  r   )r^   rz   rT  Zwarning_typer|   r)   r)   r*   test_minimize_warnings_gh1953  s"    
$z0TestOptimizeSimple.test_minimize_warnings_gh1953N)*rp   rq   rr   r`  rc  rg  rp  rw  rz  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r   r   r  r  r  r  r  r  r  r  r  r  r  r   r'  r*  r,  r/  r)   r)   r)   r*   r[    sd   		&

=


2
-

6
r[  rz   )r  r  r   r'  c                 C   s<   dd }t j|ddg| d}|js&J t|jdgdd d S )	Nc                 S   s   t | d S r  r  r'   r)   r)   r*   rg     s    z$test_minimize_with_scalar.<locals>.f   )r  r   r  rR   r   r   )r
   r   r   r   r(   )rz   rg   r   r)   r)   r*   test_minimize_with_scalar  s    
r1  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   rX   r]   r)   r)   r*   r_     s    zTestLBFGSBBounds.setup_methodr  c                 C   s    d| |d | |d |   S )NrN   r   r#   r)   rn   r)   r)   r*   r}     s    zTestLBFGSBBounds.func                 C   s   ||d  S r"   r)   rn   r)   r)   r*   r{     s    zTestLBFGSBBounds.jacc                 C   s   |  ||| ||fS r8   r}   r{   rn   r)   r)   r*   fj  s    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   taskr4   r   )r
   r  r}   r{   r   r   rX   r^   r(   rg   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s8J |d t|| jdd d S )	Nr   r	  r  )ry   r   r   r6  r4   r   )r
   r  r5  r   r   rX   r7  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 s2J |d t|j| jdd d S )	Nr   r	  r  rz   r{   r   r   r  r4   r   )r
   r   r}   r{   r   r   r(   rX   )r^   r   r)   r)   r*   test_minimize_l_bfgs_b_bounds  s
    z.TestLBFGSBBounds.test_minimize_l_bfgs_b_boundsr   )r   r#   r  c                 C   sN   t jtdd, tj| jddgd| j|d W d    n1 s@0    Y  d S )Nz	.*bound.*r   r   r	  r  r:  )r   r	   rE   r
   r   r}   r{   )r^   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 ]R\}}tj| jddg|d|| jdd id}|d	 s\J |d
 t|j| jdd qd S )Nri  r9  r)   r   r	  r  Zfinite_diff_rel_step)ry   rz   r{   r   r|   r   r  r4   r   )	rl  rm  r
   r   r}   r   r   r(   rX   )r^   ro  Zargssr{   ry   r   r)   r)   r*    test_minimize_l_bfgs_b_bounds_FD  s    z1TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds_FDN)r  )r  )r  )rp   rq   rr   r_   r}   r{   r5  r8  r  r;  r   r  r   r<  r=  r)   r)   r)   r*   r2    s   



r2  c                   @   sN  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dg d/d0d1 Zd2S )4TestOptimizeScalarc                 C   s
   d| _ d S )Nr/   )rX   r]   r)   r)   r*   r_     s    zTestOptimizeScalar.setup_methodr/   c                 C   s   || d d S )zObjective functionr-   r   r)   )r^   r(   r  r)   r)   r*   r}     s    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 s0    Y  d}tjt|d
  t j| jdd W d    n1 s0    Y  d S )Nr4   r   r  rI  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   rX   r   r	   rE   )r^   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 ]H}t j| jddd}t j| j|dd}|d |d  }}t|| | qd}tjt|d  t j| jdd W d    n1 s,0    Y  d}tjt|d  t j| jdd W d    n1 sp0    Y  d S )Nr4   r   r?  r@  TrA  r   rB  r  )r   r#   r   )rY   r   r-   rD  r   rE  rF  rG  )	r
   goldenr}   r   rX   r   r   r	   rE   )r^   r(   Zmaxiter_test_casesrY   rI   Znfev0r~   r  r)   r)   r*   test_golden  s,    0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#   rR  r   r   r4   )	r
   	fminboundr}   r   rX   r%   rA   rD   rE   r  r)   r)   r*   test_fminbound  s     z!TestOptimizeScalar.test_fminboundc                 C   sn   t jtdd& t| jtdd W d    n1 s:0    Y  t| jdtd}t	|| j
dd d S )Nz.*must be finite scalars.*r   r#   r-   r#   r   r4   r   )r   r	   rE   r
   rM  r}   r%   rV   rA   r   rX   r  r)   r)   r*   test_fminbound_scalar'  s    4z(TestOptimizeScalar.test_fminbound_scalarc                 C   s   dd }t |dd d S )Nc                 S   s   | d S r  r)   r'   r)   r)   r*   r}   /  s    z,TestOptimizeScalar.test_gh11207.<locals>.funr   )r
   rM  )r^   r}   r)   r)   r*   test_gh11207.  s    zTestOptimizeScalar.test_gh11207c                 C   s4  t | jj}t|| jdd t j| jdd}|js8J t j| jdtddd}|jrZJ 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 )Nr4   r   ZBrentr   rQ   r  r   r?  )r/   )bracketry   rz   )rz   ry   rB  rK  )r   r#   ZBounded)r   ry   rz   r#   rR  )r#   r   boundedr   r/   )r   r#   r   rz   ry   r-   r  )r
   minimize_scalarr}   r(   r   rX   r   r  r%   rA   rD   rE   rV   r  r)   r)   r*   test_minimize_scalar3  sr    









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)   r6   r   c                 [   s   |d |d  d }| |}	d}
d}d}d}|r|s||k rd}|d7 }|| || fD ]0}| |g|R  }|
d7 }
||	k rX|}	|}d}qX|d ur|| |d ur,|
|kr,d}qq,t j|	|||
|dkdS )Nr#   r   r  TFr  r  )r}   rR  ry   r(  r  rY   r  r|   r  r  r  r  r  r  r  r  r)   r)   r*   r  q  s0    
z?TestOptimizeScalar.test_minimize_scalar_custom.<locals>.custmin)r   r   r  r  )rR  rz   r|   r4   r   )r)   Nr6   r   N)r
   rU  r}   r  r   r(   rX   )r^   r  r   r)   r)   r*   test_minimize_scalar_customo  s      

z.TestOptimizeScalar.test_minimize_scalar_customc                 C   s   t j| jdd d S )Nr/   ry   r
   rU  r}   r]   r)   r)   r*   &test_minimize_scalar_coerce_args_param  s    z9TestOptimizeScalar.test_minimize_scalar_coerce_args_paramrz   )rH  rS  rK  c                 C   s"   dD ]}t j| jd|id qd S )N)r   r#   r-   rQ   rv   )r|   rY  )r^   rz   rv   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sLJ t|dsZJ t|d	shJ t|d
svJ t|dsJ d S )NrS  r   rG  r   rz   r(   r   r  r}   r~   r   )r
   rU  r}   r  )r^   rz   rT  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rvd|ini }tj	|fd|i||t
ddd}t|jd W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr1   r   c                    s<    d  d7  <  d dkr"t jS | d dt |   S d S )Nr   r#   r   r-   r6   )r%   r^  r9   r'   r  r)   r*   rh     s    z0TestOptimizeScalar.test_nan_values.<locals>.funcrE  r@  r   rb  r  r  r  rS  r   rR  r{  r  r   F)r%   r0   r3   r   r   r  r  r  r
   rU  r  r   r   )r^   rz   rh   rR  r   r  rT  r   r)   r  r*   r    s$    
z"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   s   | d S r  r)   r'   r)   r)   r*   rg     s    zCTestOptimizeScalar.test_minimize_scalar_defaults_gh10911.<locals>.fr   r   r   )r#   r   r3  rJ  )r   r|   r#   )r
   rU  r   r(   )r^   rg   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>0    Y  t jt|d& tjtjtjdfd W d    n1 s0    Y  d S )Nz+Optimization bounds must be finite scalars.r   r#   r  )	r   r	   rE   r
   rU  r%   r9   rP  r^  r)  r)   r)   r*   'test_minimize_non_finite_bounds_gh10911  s
    4z:TestOptimizeScalar.test_minimize_non_finite_bounds_gh10911rH  rK  c                 C   sH   d}t jt|d" tjtj|dd W d    n1 s:0    Y  d S )Nz'Use of `bounds` is incompatible with...r   rO  rz   r   )r   r	   rE   r
   rU  r%   r9   )r^   rz   r/  r)   r)   r*   2test_minimize_unbounded_method_with_bounds_gh10911  s    zETestOptimizeScalar.test_minimize_unbounded_method_with_bounds_gh10911r  r  r#   r4   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r||jj  kr ksn J d S )Nc                    s   t | d  S Nr   )r%   rA   Zreshaper'   ra  r)   r*   rg     s    zITestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196.<locals>.f)r   r?   rS  )rR  r  )rz   r  )r  updater
   rU  r(   shaper}   )	r^   rz   r  ra  rg   r  brT  r   r)   re  r*   +test_minimize_scalar_dimensionality_gh16196  s    z>TestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196)rS  rH  rK  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 sp0    Y  d|d< tj|f||d| d S )Nc                 S   s   | d d S r,   r)   r'   r)   r)   r*   rg     s    zBTestOptimizeScalar.test_minimize_scalar_warnings_gh1953.<locals>.frS  r   rR  rI  r   TrQ   r  r-  r   r   Frv   )r   r  r
   rC  rU  )r^   rz   rg   rT  Zkwdr|   r)   r)   r*   $test_minimize_scalar_warnings_gh1953  s    
$z7TestOptimizeScalar.test_minimize_scalar_warnings_gh1953N)r/   )rp   rq   rr   r_   r}   rI  r   r  r  rL  rN  rP  rQ  rV  rW  rZ  r   r[  r\  r  r]  r^  r`  r   ri  rj  r)   r)   r)   r*   r>    s:   


<#



	

r>  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>0    Y  t jt|d  t|dtj W d    n1 s|0    Y  t jt|d tj|dd W d    n1 s0    Y  t jt|d tj|dd W d    n1 s0    Y  d	d }d
}t jt|d" tj|dddd W d    n1 sB0    Y  d S )Nc                 S   s   d| k | dk @ r| d S dS Nr	  r#   r-   g      Y@r)   r'   r)   r)   r*   rg     s    z3TestBracket.test_errors_and_status_false.<locals>.f9The algorithm terminated without finding a valid bracket.r   r	  r#   r@  r@  c                 S   s<   d| d  d| d   d| d   d| d   d|   d S )	NrF  r   r      rQ      r-   r#   r)   r'   r)   r)   r*   rg     s    z8No valid bracket was found before the iteration limit...r   rP   r   r  )	r   r	   r`   r
   rR  r%   rP  rH  rK  )r^   rg   r  r)   r)   r*   test_errors_and_status_false  s    ,.,,z(TestBracket.test_errors_and_status_falserz   )rH  rK  c                 C   sb   dd }d}t j|d|d}|jr&J ||jv s4J |jdksBJ |jdksPJ |jdks^J d S )	Nc                 S   s   d| k | dk @ r| d S dS rl  r)   r'   r)   r)   r*   rg   '  s    z9TestBracket.test_minimize_scalar_success_false.<locals>.frm  r@  )rR  rz   rQ   r   r   )r
   rU  r   r  r~   r   r}   )r^   rz   rg   r  r   r)   r)   r*   "test_minimize_scalar_success_false$  s    
z.TestBracket.test_minimize_scalar_success_falseN)	rp   rq   rr   r   r  r  rp  r   rq  r)   r)   r)   r*   rk    s   

rk  c                   C   s   t ttjtjdd d S )Ng{GzrJ  )rD   rE   r
   rH  r%   r=   r)   r)   r)   r*   test_brent_negative_tolerance4  s    rr  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   rN   r   r
  r{   rm   r  rz   r#   rR  r   )r%   rA   r
   r   r   r   r   r   r  r   r(   r^   rI   r   r)   r)   r*   test_rosenbrock9  s    
zTestNewtonCg.test_rosenbrockc                 C   sT   t t}tjt|ttddd}|js0J |j	t
|jtdd t
|jtdd d S )Nr
  r4   )r{   rm   rz   r  rR  r   r   )r%   rA   rH   r
   r   
himmelblaurF   rG   r   r  r   r(   himmelblau_xoptr}   himmelblau_minrv  r)   r)   r*   test_himmelblauC  s    
zTestNewtonCg.test_himmelblauc                 C   sV   t ddg}tjtj|tjdddd}|js8J |jt|j	t ddgdd	 d S )
Nr   rN   rj  r   r
  ru  r#   rR  r   )
r%   rA   r
   r   r   r   r   r  r   r(   rv  r)   r)   r*   test_finite_differenceO  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 rt  )r%   rA   r
   r   r   r   r   r   r  r   r(   rv  r)   r)   r*   test_hessian_update_strategyY  s    
z)TestNewtonCg.test_hessian_update_strategyN)rp   rq   rr   rw  r{  r|  r}  r)   r)   r)   r*   rs  8  s   

rs  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 qLt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 qd S )N)333333r	  r   r  )r   r#   ffffff@rQ   rR   r   r   r   )rR   r-   r  r   rN   r   r   r   r~  r   rR   r#   r   r   r	  r#   rR   r   r#   r   r   r  rR   r   r   r#   r  rQ   )rN   r#   r   r   )rN   r   r	  r-   r/   )r  r   r	  r-   gffffff?g333333@)rN   r   r	  r   r4   r   g333333)r
   r-  Z_line_for_searchr%   rA   r   rP  )Zline_for_searchlower_boundupper_boundrI   x1	all_testsr(   alphaZlminZlmaxmimar)   r)   r*   test_line_for_searchd  sT    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 ]\}}| ||||dd\}	}
}t|	||| dd t|
|| dd t||| dd | |||d|||d\}	}
}t|	||| dd t|
|| dd t||| dd qd S )Nc                 S   s   t | t g d d S N)r  r  r/   皙ٿr-   r%   r:   rA   r'   r)   r)   r*   rh     s    z$test_linesearch_powell.<locals>.funcr  r   r  r	  r  r-   r  r/   r  r  r  r   r#   r         ?rR   r   r#   r#   皙?r  r   r	  r#   r   )fvalr  r4   r   r  r  r  r  )r
   r-  _linesearch_powellr%   rA   rP  r   Zlinesearch_powellrh   r>  r  r  r  r  xilrg   rj   r2   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 qt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 ]h\}}| |||d|||d\}	}
}t|	||||  dd t|
|||  dd t||| dd qt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 ]`\}}| |||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 ]h\}}| |||d|||d\}	}
}t|	||||  dd t|
|||  dd t||| dd qjd S )"Nc                 S   s   t | t g d d S r  r  r'   r)   r)   r*   rh     s    z,test_linesearch_powell_bounded.<locals>.funcr  g       r   r  r  r	  r  r-   r  r/   r  r  r  r  r  r  r  r  r   r  r4   r   g333333ӿrQ   g?r   rO   g333333ÿ)r  r   r   r-   r   g333333)r
   r-  r  r%   rA   r   rP  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   g333333?r{  c                    s8   | \}}|  j k r$|  jk s(J |d |d  S r  )lbr@   ub)r(   r  rh  r  r)   r*   r}   J	  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 r  r$   r'   r)   r)   r*   rh   T	  s    z test_powell_limits.<locals>.funcrP   r  )r}   rI   rz   r   )r
   r   r   )r}   rh   r)   r  r*   test_powell_limitsF	  s    r  c                   @   s   e Zd Zdd ZdS )	TestRosenc                 C   sH   t g d}t g d}t||}t t||}t|| d S )N)rQ   r   r   )r-   r-   r-   )r%   rA   r
   rosen_hess_prodra   r   r   )r^   r(   rj   hpZdothpr)   r)   r*   	test_hess]	  s
    zTestRosen.test_hessN)rp   rq   rr   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.
    ro  r   r)   )rj   r(   r  r  rh  r)   r)   r*   rx  f	  s    rx  c                 C   sn   | \}}t d|d  d| |  d|  d|d   d d|d  d| |  d|d   d|  d gS )Nr   rQ   *   r-         r  r  rj   r(   r  r)   r)   r*   rF   q	  s    2.rF   c                 C   s^   | \}}t d|d  d|  d d| d|  gd| d|  d| d|d   d ggS )Nrn  r-   r   r  r  r  r  r)   r)   r*   rG   w	  s    *&rG   gHzGѿgrQ   r-   rR   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   r?   r   r  r#   r  r-   r  r'   r)   r)   r*   rh   	  s    z0test_minimize_multiple_constraints.<locals>.funcc                 S   s   t | d gS r"   r  r'   r)   r)   r*   func1	  s    z1test_minimize_multiple_constraints.<locals>.func1c                 S   s   t | d gS r  r  r'   r)   r)   r*   r  	  s    z1test_minimize_multiple_constraints.<locals>.func2r  r  c                 S   s   d| d | d  | d   S )Nr	  r   r#   r-   r)   r'   r)   r)   r*   rg   	  s    z-test_minimize_multiple_constraints.<locals>.frB  r  r  )}   r   r   rJ  r   r  )rh   r  r  r  rg   r   r)   r)   r*   "test_minimize_multiple_constraints	  s    r  c                   @   s   e Zd Zdd Z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   )rR   rx  )rI   r
   r   rh   r   r{   r   rm   r  ro   r   r]   r)   r)   r*   r_   	  s    
z)TestOptimizeResultAttributes.setup_methodc              
   C   s   g d}ddgi}t D ]}t <}|td tj| j| j|| j| j	| j
d}W d    n1 sb0    Y  |D ]8}||v r||| v rqpt||sJ |t|v spJ qpt|jtsJ qd S )N)r   r~   r(   r   r   r}   r  r  r   z7Method .+ does not use (gradient|Hessian.*) information)rz   r{   rm   ro   )r   r   r  r  r
   r   rh   rI   r{   rm   ro   r  dirr  r  str)r^   
attributesskiprz   r  r   	attributer)   r)   r*   test_attributes_present	  s"    
$z4TestOptimizeResultAttributes.test_attributes_presentN)rp   rq   rr   r_   r  r)   r)   r)   r*   r  	  s   r  c                 G   s^   | \}}|\}}}}}}	}
}}}}}}||d  || |  ||d   ||  ||  |	 S r  r)   r  r   r(   r  r  rh  r  r  r   rg   r  r  r.  r   r  r  r  r)   r)   r*   f1	  s    r  c                 G   sP   | \}}|\}}}}}}	}
}}}}}}|
 t || d || d   |  S r  r$   r  r)   r)   r*   f2	  s    r  c                 G   sP   | \}}|\}}}}}}	}
}}}}}}| t || d || d   |  S r  r$   r  r)   r)   r*   f3	  s    r  c                 G   s0   t | g|R  t| g|R   t| g|R   S r8   )r  r  r  r  r   r)   r)   r*   
brute_func	  s    r  c                   @   sD   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S )	TestBrutec                 C   s4   d| _ tdddtdddf| _tddg| _d S )N)r-   rQ   r   r   r   r   ,   r	  r-   r  r#   rI  rP   rA  r         ?g_}gi?)r   slicerrangesr%   rA   rX   r]   r)   r)   r*   r_   	  s    zTestBrute.setup_methodc                 G   s   t |g|R  S r8   )r  )r^   r  r   r)   r)   r*   r  	  s    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ry   r   finishr   r   r   r#   )	r
   bruter  r  r   r   r   rX   r   )r^   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   r-   )rD  rg  r'   r)   r)   r*   rg   	  s    zTestBrute.test_1D.<locals>.fr@  rQ   )ZNsr  )r
   r  r  r)   r)   r*   test_1D	  s    zTestBrute.test_1Dc                 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  r-   )ry   r   r  workersr	  r   )r
   r  r  r  r   r   )r^   r  Z	resbrute1r)   r)   r*   test_workers	  s    zTestBrute.test_workersc                    sd   t jd  fdd}d}tjt|d& tj|| j| j	dd W d    n1 sV0    Y  d S )Nr1   c                    s     dd S r"  r#  r  r$  r)   r*   rh   

  s    z,TestBrute.test_runtime_warning.<locals>.funczFfinal optimization did not succeed.*|Maximum number of function eval.*r   T)ry   rv   )
r%   r0   r)  r   r  r  r
   r  r  r   )r^   Zcapsysrh   r/  r)   r$  r*   r  
  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(   ry   r)   r)   r*   rg   
  s    z+TestBrute.test_coerce_args_param.<locals>.frA  r   r  r-   rX  r   )r
   r  r  r   )r^   rg   r  r)   r)   r*   test_coerce_args_param
  s    z TestBrute.test_coerce_args_paramN)
rp   rq   rr   r_   r  r  r  r  r  r  r)   r)   r)   r*   r  	  s   

r  c                     s   dd l } dd lfddfddd  fdd} fd	d
}| j F}g }||| ||| |D ]}|  q|W d    n1 s0    Y  d S )Nr   c                    s     d | d d S )Nr6   r   r-   sleepr'   timer)   r*   
objective1!
  s    
z*test_cobyla_threadsafe.<locals>.objective1c                    s     d | d d d S )Nr6   r   r#   r-   r  r'   r  r)   r*   
objective2%
  s    
z*test_cobyla_threadsafe.<locals>.objective2COBYLAc                      s   t jdg dS NrR   r   r  r)   )
min_methodr  r)   r*   
minimizer1+
  s    z*test_cobyla_threadsafe.<locals>.minimizer1c                      s   t jdg dS r  r  r)   )r  r  r)   r*   
minimizer20
  s    z*test_cobyla_threadsafe.<locals>.minimizer2)concurrent.futuresr  ZfuturesZThreadPoolExecutorrc   Zsubmitr  )Z
concurrentr  r  pooltasksrO  r)   )r  r  r  r  r*   test_cobyla_threadsafe
  s    r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestIterationLimitsc                 C   s
   d| _ d S r  )r  r]   r)   r)   r*   r_   A
  s    z TestIterationLimits.setup_methodc                 C   s\   |  j d7  _ t|d d |d d  t|d |d  }}t|d | |d  S )Nr#   r   r-   r{  rP   )r  r%   rd  Zarctan2r9   )r^   r  rJ   rO  r)   r)   r*   	slow_funcD
  s    4zTestIterationLimits.slow_funcc                 C   s   |  dd d S )Nr'     check_limitsr]   r)   r)   r*   test_neldermead_limitI
  s    z)TestIterationLimits.test_neldermead_limitc                 C   s   |  dd d S )Nr  rS   r  r]   r)   r)   r*   test_powell_limitL
  s    z%TestIterationLimits.test_powell_limitc              	   C   s0  ddgddgddgfD ]}dD ]^}d| _ tj| j||d|id}| j |d ksTJ |d	 rn|d |k s~J q |d |ks J q dD ]F}tj| j||d
|id}|d	 r|d |ksJ q|d |ksJ qddgddgdtjgfD ]\}}d| _ tj| j||||dd}| j |d ks J |d	 rL|d |k rF|d |kshJ q|d |ks|d |ksJ qtjd gd tjgfD ]\}}d| _ tj| j||||dd}| j |d ksJ |d	 r|d u r|d |d k sJ n|d |d ks&J n(|d |d ks~|d |d ks~J q~qd S )Nr6   r#   r-   )r   i    r   r(  r   r~   r   rY   r   r   r  )rY   r(  )r  r
   r   r  r%   rP  )r^   rz   Zdefault_itersZstart_vZmfevr   Zmitr)   r)   r*   r  O
  s^    

 

"


z TestIterationLimits.check_limitsN)rp   rq   rr   r_   r  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 ]0}t j| tdg|||d}|jjd
ks^J q^d S )Nc                 S   s   | |  S r8   r)   r'   r)   r)   r*   r}   
  s    z2test_result_x_shape_when_len_x_is_one.<locals>.func                 S   s   d|  S Nr  r)   r'   r)   r)   r*   r{   
  s    z2test_result_x_shape_when_len_x_is_one.<locals>.jacc                 S   s   t dggS r  r  r'   r)   r)   r*   rm   
  s    z3test_result_x_shape_when_len_x_is_one.<locals>.hess)r'  r   rx   r   r  rh  r  r  r6   r   rb  )rq  ru  rr  rv  rs  r
  rt  )r
   r   r%   rA   r(   rg  )r}   r{   rm   rn  rz   r   r)   r)   r*   %test_result_x_shape_when_len_x_is_one
  s    r  c                   @   s   e Zd Zdd Zdd ZdS )FunctionWithGradientc                 C   s
   d| _ d S r  )number_of_callsr]   r)   r)   r*   r  
  s    zFunctionWithGradient.__init__c                 C   s$   |  j d7  _ t|d d| fS r,   )r  r%   r:   r  r)   r)   r*   r  
  s    zFunctionWithGradient.__call__Nr  r)   r)   r)   r*   r  
  s   r  c                   C   s   t  S r8   )r  r)   r)   r)   r*   function_with_gradient
  s    r  c                 C   s   t | }tddg}t||d | jdks2J t||d|  | jdksXJ dt|d| ddd	 | jdksJ dd S )
NrN   r  r7  r#   r-   zHfunction is not recomputed if gradient is requested after function valueg      4@(different input triggers new computationr  )r   r%   rA   r   r  
derivativer  memoized_functionrI   r)   r)   r*   )test_memoize_jac_function_before_gradient
  s    r  c                 C   s   t | }tddg}t||d|  | jdks8J t||d | jdksXJ dt|d| d| dd	 | jdksJ dd S )
NrN   r  r-   r#   r7  zHfunction is not recomputed if function value is requested after gradientr   r  r  )r   r%   rA   r   r  r  r  r)   r)   r*   )test_memoize_jac_gradient_before_function
  s    r  c                 C   s   t | }|j}t }tddg}t||d||dd}| jdksFJ ||d  | jdksbJ ||d  | 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.
    rN   rP   r)   Nr#   r6   r-   r?   rQ   )	r   r  r
   r   r%   rA   r   r  r}   )r  r  r{   rm   rI   Zscalar_functionr)   r)   r*   test_memoize_jac_with_bfgs
  s    r  c                   C   sF   t  , tjdd tj tjdd W d    n1 s80    Y  d S )Nc                 S   s   t | d gS r  r  r'   r)   r)   r*   r1  
  r   ztest_gh12696.<locals>.<lambda>Fr   )r   r
   rM  r%   r   r)   r)   r)   r*   test_gh12696
  s    r  c                     s  t jd t j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   r-   r	  r  )rQ   r-   r-   r  Tc                    s,   |r| j dksJ |r(t|      d S rd  )r  r   )r(   Z
check_sizecheck_values)i_ebr  r)   r*   check_x
  s    z(setup_test_equal_bounds.<locals>.check_xc                    s    |  t | S r8   r.  r'   r  r)   r*   rh   
  s    z%setup_test_equal_bounds.<locals>.funcc                    s    |  t | S r8   )r
   r   r'   r  r)   r*   rk   
  s    z%setup_test_equal_bounds.<locals>.gradc                    s    |  d S r8   r)   r  r  r)   r*   r     s    z)setup_test_equal_bounds.<locals>.callbackc                    s    | dd | dd d S )NFr  r   r#   r)   r'   r  r)   r*   constraint1  s    z,setup_test_equal_bounds.<locals>.constraint1c                    s"    | dd t | }d|d< |S )NFr  r#   r   r%   Z
zeros_liker(   Zdcr  r)   r*   	jacobian1  s    
z*setup_test_equal_bounds.<locals>.jacobian1c                    s    | dd | dd d S )NFr  r-   rQ   rP   r)   r'   r  r)   r*   constraint2  s    z,setup_test_equal_bounds.<locals>.constraint2c                    s"    | dd t | }d|d< |S )NFr  r#   r-   r  r  r  r)   r*   	jacobian2  s    
z*setup_test_equal_bounds.<locals>.jacobian2)r  r  rh  Fr4  c                    s    | | fS r8   r)   r'   r  r)   r*   r1  #  r   z)setup_test_equal_bounds.<locals>.<lambda>c                 S   s   t t| |S r8   )listzipr  r  r)   r)   r*   r1  '  r   r3  )	rn  kwdsbound_typesr  	callbacksr  r  rI   r  )TT)r%   r0   r3   rf  rA   r   rP  r   )rI   r  r  r  r  r  r  Zc1aZc1bZc2aZc2brn  r  r  r  r  datar)   )r  rh   rk   r  r  r*   setup_test_equal_bounds
  sP    r  z0Failures due to floating point issues, not logicrn  r  
bound_typer  r  r  r  c                 C   s  t  dkr2| dkr2|d du r2|dur2td td td  }}td	 td
  }}|\}	}
|	rt| dksttd |	|
k}|||}||| ||	|d tjf i |}tjtj|| tj	||
d}|j
sJ t|j|jdd t|j|jdd |s|d du rtj|j|< |jjd dks*J 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 )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
    aarch64rh  r{   FNzTolerance violation on aarchr  r  rI   r  r  z)Only SLSQP supports nonlinear constraints)rI   rz   r   r  r  )rz   r{   r   r  gTqs*>r   gMb@?r   r   r4   c                 S   s,   t t jdt jdg}| |ddg< t|S )Nr-   r	  r   )r%   rA   r^  r
   r   )r(   Znew_xr)   r)   r*   r}   t  s    ztest_equal_bounds.<locals>.funr-   r_  g>)platformmachiner   r  eb_datarf  r
   r   r   r   r   r   r}   r(   r%   r^  r{   rg  r  r   )rz   r  r   r  r  r  r  rI   r  Ztest_constraintsZreference_constraintsZ	fd_neededr   r   expectedr}   Zfd_resr)   r)   r*   test_equal_boundsB  sJ    






r  c           	      C   s  ddd}ddg}d}t j|||| d}|js2J t|j|dd	g |jdksTJ |jd
ksbJ d}t j|||| |d}|jsJ t|j|dd	gd |  dkrdd }t|t	j
 d}t j|||| |gd}|jdu sJ t|j|dd	g |jdksJ d}|j|sJ t|t	j
 d}t j|||| |gd}|jdu sTJ t|j|dd	g |jdksxJ d}|j|sJ d S )Nr#   c                 S   s   t j| | S r8   )r%   ZlinalgZnorm)r(   p1r)   r)   r*   rg     s    z test_all_bounds_equal.<locals>.frc  )r-   r-   )rN   r  r  rN   r  z/All independent variables were fixed by bounds.)r-   rT  r-   r  c                 S   s
   t | S r8   r  r'   r)   r)   r*   con  s    z"test_all_bounds_equal.<locals>.conrR   )r   rz   r  Fz3All independent variables were fixed by bounds, butr   Tz8All independent variables were fixed by bounds at values)r#   )r
   r   r   r   r}   r~   r  upperr   r%   rP  r  )	rz   rg   r   rI   r   ry   r  Znlcr  r)   r)   r*   test_all_bounds_equal  s@    


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sZJ d S )Nc                 S   s(   | d d | d d  | d | d   S )Nr   rQ   r#   r-   r)   r'   r)   r)   r*   rg     s    ztest_eb_constraints.<locals>.fc                 S   s$   | d | d  | d  | d  d S )Nr   r#   r-   rQ   (   r)   r'   r)   r)   r*   cfun  s    z!test_eb_constraints.<locals>.cfunr  r  )r   r{  r   )r   r   r#   )r#   r-   rQ   r   r  )rI   rz   r   r  r   r}   r  )rg   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|| qLd S )N)r   rU  rootZroot_scalarZlinprogZquadratic_assignmentZekkir   )r   ZmaximizeZmaximize_scalar)
r   r   r   r   r   r   itemsr   rD   rE   )Zsolver_methodsZsolverrn  rz   Zunknown_solver_methodr)   r)   r*   test_show_options  s     r  c                  C   s8   t jddgddgd} t jt jtddgd| d d S )Nr7  rx  r  r   r   r+  )r
   r   r   r   r%   rA   r  r)   r)   r*   test_bounds_with_list  s    r  c            
      C   s   dd } dd }dd }g d}g d}t d	d
 }tD ]T}d }d }||v rR|}||v r^|}tj| ||||d}	t|	jt t |dd q:d S )Nc                 S   s*   t t | }| |8 } | | 9 } t | S r8   )r%   rC   r  r:   r  r)   r)   r*   fquad  s    z/test_x_overwritten_user_function.<locals>.fquadc                 S   s(   t t | }| d9 } | d| 8 } | S r  )r%   rC   r  r  r)   r)   r*   	fquad_jac  s    z3test_x_overwritten_user_function.<locals>.fquad_jacc                 S   s   t t | d S r  )r%   r   r  r'   r)   r)   r*   
fquad_hess  s    z4test_x_overwritten_user_function.<locals>.fquad_hess)r  ru  rr  rv  rs  rq  )ru  rr  rv  rs  rq  r   r/   rt  g-C6*?r   )	r%   r(  r   r
   r   r   r(   rC   r  )
r  r  r  Zmeth_jacZ	meth_hessrI   methr{   rm   r   r)   r)   r*    test_x_overwritten_user_function  s    r  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 ]h}t|t js`J t|dsnJ t|ds|J t|dsJ t|d	sJ t|d
sJ t|dsLJ qLd S )Nc                 S   s   | d S r  r)   r'   r)   r)   r*   rh     s    zDTestGlobalOptimization.test_optimize_result_attributes.<locals>.funcr#   )rI   )rA  r   r(   r   r  r}   r~   r   )	r
   ZbasinhoppingZdifferential_evolutionZshgoZdual_annealingdirectr  r   r  )r^   rh   r  r  r)   r)   r*   test_optimize_result_attributes  s    z6TestGlobalOptimization.test_optimize_result_attributesN)rp   rq   rr   r  r)   r)   r)   r*   r    s   r  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_fprimerH   rx  r   rF   rG   )r  r  r)   r)   r*   test_approx_fprime)  s    r  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*   rg   8  s    ztest_gh12594.<locals>.frG  r   r  r   r   r+  )r   r
   r   r%   rA   r   r}   r(   )rg   r   r   r   r)   r)   r*   test_gh125943  s     r  r
  rq  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shJ |j	|j	ksxJ |j
|j
ksJ d S )Nc                    s    t | S r8   )r   r'   r  r)   r*   sparse_rosen_hessM  s    z.test_sparse_hessian.<locals>.sparse_rosen_hessr  rt  )r
   r   r   r   r   r   r}   r(   r~   r   Znhev)rz   r  r  rI   Z
res_sparseZ	res_denser)   r  r*   test_sparse_hessianD  s    	

r  )urs   rl  r  numpyr%   Znumpy.testingr   r   r   r   r   r   r   r   r	   rD   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!   rK   rL   rt   r*  r0  r2  r6  r;  r=  r?  rE  rQ  rU  rV  rX  rY  rZ  r[  r  r   r1  r2  r>  rk  rr  rs  r  r  r  r  r  rx  rF   rG   rH   ry  rz  r  r  r  r  r  r  r  r  r  r  r  Zfixturer  r  r  r  r  r  r  Zxfail_on_32bitr  r
  r  r  r  r  r  r  r  r  r)   r)   r)   r*   <module>   s   $ 50    

L*      	

=  .),?&}"J#B	
	T
>
+(
