o
    i                 
   @   s  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 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 Z.dd Z/d d! Z0d"d# Z1d$d% Z2d&d' Z3G d(d) d)e)Z4G d*d+ d+e)Z5G d,d- d-e)Z6G d.d/ d/e)Z7G d0d1 d1e(Z8ej9:d2g d3d4d5 Z;G d6d7 d7Z<G d8d9 d9Z=G d:d; d;Z>d<d= Z?G d>d? d?Z@d@dA ZAdBdC ZBdDdE ZCdFdG ZDG dHdI dIZEdJdK ZFdLdM ZGdNdO ZHdPdQgZIdRdSgZJdTZKdUdV ZLG dWdX dXZMdYdZ ZNd[d\ ZOd]d^ ZPd_d` ZQG dadb dbZRdcdd ZSG dedf dfZTdgdh ZUG didj djZVejWdkdl ZXdmdn ZYdodp ZZdqdr Z[dsdt Z\dudv Z]e] Z^ej9_dwej9:d2e^dx ej9:dye^dy ej9:dze^d{ ej9:d|e^d| ej9:d}e^d~ dd Z`ej9:d2e^dx dd Zadd Zbdd Zcdd Zddd ZeG dd dZfdd Zgdd Zhd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OptimizeResultc               	   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    q/var/www/html/eduruby.in/lip-sync/lip-sync-env/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_expit*       z"test_check_grad.<locals>.der_expit      ?r   random  )	directionseedư>)epsilon)r.   r+   r,   皙?Hz>c                 S   s   | t |   S N)r   sinsumr   r    r    r!   x_sinxB      ztest_check_grad.<locals>.x_sinxc                 S   s   t | | t |   S r1   r   r2   cosr   r    r    r!   
der_x_sinxE      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rr4   r8   r    r    r!   test_check_grad#   sL   







rF   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   r<   FKzerosZfloat64startparamssolutionmaxiter	funccalls	gradcallstraceselfr    r    r!   setup_method^   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)rU   RuntimeErrorr   dotrO   logr3   r   rP   rW   appendcopy)rY   r   log_pdotlogZfr    r    r!   funcl   s   
zCheckOptimize.funcc                 C   sV   |  j d7  _ t| j|}ttt|}t|| }t| j || j S r   )	rV   r   r\   rO   r]   r3   r   Z	transposerP   rY   r   r`   ra   pr    r    r!   gradv   s
   zCheckOptimize.gradc                 C   s`   t | j|}t tt |}t || }t | jjt t || jt | jj| S r1   )r   r\   rO   r]   r3   r   TZdiagrd   r    r    r!   hess}   s   
"zCheckOptimize.hessc                 C   s   t | ||S r1   )r   r\   rh   rY   r   re   r    r    r!   hessp   r5   zCheckOptimize.hesspN)	__name__
__module____qualname____doc__rZ   rc   rf   rh   rj   r    r    r    r!   rG   X   s    
rG   c                   @   s   e Zd Zdd Zdd Zdd Zejddd	 Z	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d Zdd Zd d! 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dksaJ | j| jdkskJ | jt	| jdd g dg dgddd d S )NFrT   disp
return_allr    CG)argsmethodjacoptionsr   funnfevnjevstatusT)rT   full_outputrq   retallr-   atol	      r%      )r         rK   )r   g;ӱ.g)`$|;?+=r0   r   rtol)use_wrapperrT   rq   r
   minimizerc   rR   rf   fmin_cgr   rS   rU   rV   rW   )	rY   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         rK   r%   r   )rE   r    r    r!   rb      s   z8CheckOptimizeParameterized.test_cg_cornercase.<locals>.fg      rL   G   rs   ru   rK   h㈵>r   )r   Zlinspacer
   r   successr   r   )rY   rb   rD   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dkskJ | j| jdksuJ | jt	| jdd g dg dgddd d S )NFrp   BFGSr    rv   ru   rt   rw   r   rx   rv   Zhess_invry   rz   r{   Trt   rT   r|   rq   r}   r-   r~   
         )r   g&/LgB__E7?)r   g$g
|3?r   r0   r   )r   rT   rq   r
   r   rc   rR   rf   	fmin_bfgsr   rS   rU   rV   rW   )rY   r   r   r   r   ZgoptZHoptr   r   r   r   r    r    r!   	test_bfgs   s<   

z$CheckOptimizeParameterized.test_bfgs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 r1   )r   er   r    r    r!   rc         z;CheckOptimizeParameterized.test_bfgs_infinite.<locals>.funcc                    s
    |  S r1   r    r   rc   r    r!   fprime      
z=CheckOptimizeParameterized.test_bfgs_infinite.<locals>.fprimer   ignore)overrq   r   r    r   r   rq   )r   errstater   rq   r
   r   r   isfinite)rY   r   rD   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 )Ng?ffffff?皙?ffffff?333333?bfgsZxrtolMbP?ru   rw   gtol)r
   r   rosennit)rY   rD   r   refr    r    r!   test_bfgs_xrtol   s   

z*CheckOptimizeParameterized.test_bfgs_xrtolc           
   	   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
dksrJ | j
| jdks|J | jd S )NFrp   r    Powellrt   ru   rw   r   rx   direcr   ry   r{   Tr   r-   r~   r   h㈵>   r   )r   rT   rq   r
   r   rc   rR   fmin_powellr   rS   rU   rV   
rY   r   r   r   r   r   numiterr   r   r   r    r    r!   test_powell   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 )NFrp   r    r   r   r   rx   r   r   ry   r{   Tr   "   '   )病~W?f"Bܿg%?)r   r   g:&?)gSϼW?gf"Bg{år?)r   r   {år?)gB?r   r   r   r0   r   )
r   rT   rq   r
   r   rc   rR   r   r   rW   r   r    r    r!   test_powell_gh14014  s2   
z.CheckOptimizeParameterized.test_powell_gh14014c                 C   s   dd | j D }| jrM| j| jdd}tj| j| j d|d|d}|d |d	 }}|| jks0J t| || | j	d
dd | jdksFJ | j
dksOJ d S d S )Nc                 S   s   g | ]	}t j t jfqS r    )r   pi).0_r    r    r!   
<listcomp>8  s    zBCheckOptimizeParameterized.test_powell_bounded.<locals>.<listcomp>Frp   r    r   )rt   boundsru   rw   r   ry   r-   r   r      r   )rR   r   rT   rq   r
   r   rc   rU   r   rS   rV   )rY   r   r   r   r   r   r    r    r!   test_powell_bounded5  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s]J | j
| jdksgJ | jt| jdd g dg dgddd d S )NFrp   r    Nelder-meadr   r   rx   r   ry   r{   Tr   r-   r~      r   L   N   )g	dװ?g]fgt䝁?)gә ?g#=^goT?r   r0   r   )r   rT   rq   r
   r   rc   rR   fminr   rS   rU   rV   rW   )	rY   r   r   r   r   r   r   r   r   r    r    r!   test_neldermeadN  s6   
z*CheckOptimizeParameterized.test_neldermeadc              
   C   sH  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dksJ | j| jdksJ | jt	| jdd g dg dgddd d S )N)r   rL   .rL   r   r/   FTrT   rq   rr   initial_simplexr    r   r   r   rx   r   ry   r{   Zallvecsr   rt   rT   r|   rq   r}   r   r-   r~   d   2   4   )gIt?g?'ΛTgx8?)gҢ_׆?goMg囎|52?r   r0   r   )r   rQ   rR   ranger   rT   r
   r   rc   r   r   rS   rU   rV   rW   )rY   simplexjr   r   r   r   r   r   r   r   r    r    r!   test_neldermead_initial_simplexm  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)rL   r%   r%   .r   r/   )rL   rL   Fr   r    r   r   Tr   )r   rQ   rR   r   r^   r   rT   r?   r@   r
   r   rc   r   )rY   Zbad_simplicesr   r   r   r    r    r!   #test_neldermead_initial_simplex_bad  s8   



z>CheckOptimizeParameterized.test_neldermead_initial_simplex_badc                 C   s6   ddi}t j| j| jd| jd|d}|jdksJ d S )NrT   	Newton-CGr    ru   rv   rt   rw   r   )r
   r   rc   rR   rf   r{   )rY   r   resultr    r    r!   test_ncg_negative_maxiter  s   z4CheckOptimizeParameterized.test_ncg_negative_maxiterc              
   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d
ksHJ | j| jdksRJ | jt	| jdd g dg dgddd d S )NFrp   r   r    r   r   r   r-   r~   r      rL      (6-H=g?g4u3?r   g_g/N3?r0   r   )r   rT   rq   r
   r   rc   rR   rf   fmin_ncgr   rS   rU   rV   rW   rY   r   r   r   r    r    r!   test_ncg  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d
ksLJ | j| jdksVJ | jt
| jdd g dg dgddd d S )NFrp   r   r    )ru   rv   rh   rt   rw   r   )Zfhessrt   rT   r|   rq   r}   r-   r~   r      rL   r   r   r   r0   r   )r   rT   rq   r
   r   rc   rR   rf   rh   r   r   rS   rU   rV   rW   r   r    r    r!   test_ncg_hess  :   
z(CheckOptimizeParameterized.test_ncg_hessc                 C   r   )NFrp   r   r    )ru   rv   rj   rt   rw   r   )Zfhess_prt   rT   r|   rq   r}   r-   r~   r   r   rL   r   r   r   r0   r   )r   rT   rq   r
   r   rc   rR   rf   rj   r   r   rS   rU   rV   rW   r   r    r    r!   test_ncg_hessp  r   z)CheckOptimizeParameterized.test_ncg_hesspN)rk   rl   rm   r   r   r   pytestmarkfilterwarningsr   r   r   xfailr   r   r   r   r   r   r   r   r   r    r    r    r!   ro      s$    
"
	"
 (!"ro   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   rN   r)   r   rngr    r!   cost%  r   ztest_maxfev_test.<locals>.cost)r   r   r   )r   Nelder-Meadr   maxfevr   ry   )r   r)   default_rngr
   r   )r   Zimaxfevru   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 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 r1   r    r   r    r    r!   func_5     z8test_wrap_scalar_function_with_validation.<locals>.func_r   r   r   zToo many function callsmatch@The user-provided objective function must return a scalar value.)
r
   	_optimizeZ'_wrap_scalar_function_maxfun_validationr   Zasarrayr   r?   Z_MaxFuncCallErrorr@   r<   )r  Zfcallsrc   imsgr    r    r!   )test_wrap_scalar_function_with_validation3  s$   "r  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 )Nr
  r  c                 S   r  r1   r    r   r    r    r!   <lambda>P      z.test_obj_func_returns_scalar.<locals>.<lambda>r   r   r   )r?   r@   r
   r   r   r<   r  r    r    r!   test_obj_func_returns_scalarK  s    "r  c                  C   s4   t g d} tjjtj| dd}|jdksJ d S )Nr   :0yE>)xatoliS  )r   r<   r
   	_minimize_minimize_neldermeadr   r   )rD   r   r    r    r!   test_neldermead_iteration_numS  s
   r  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 r1   )Zdtyper   float32r
   r   r   r    r    r!   rosen_]  s   
z*test_neldermead_respect_fp.<locals>.rosen_r  r   )r   r<   Zastyper  r
   r   )rD   r  r    r    r!   test_neldermead_respect_fpZ  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!   rc   g  r9   z)test_neldermead_xatol_fatol.<locals>.funcr   r%   r   )rT   r  Zfatol)r
   r  r  r   r    r    r!   test_neldermead_xatol_fatold  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      t | d S Nr%   r   r3   r   r    r    r!   rc   o  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   )rc   p0r   r    r    r!   test_neldermead_adaptiven  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!   rc     r   z/test_bounded_powell_outsidebounds.<locals>.func)r   r   r#  r#  )rK   gr   r   ru   rM   r-   r~   Tr   r   r   r   )r   r   r   )r   r   r   r   )r   ru   rw   )g      r   r   Fr   )r   r
   OptimizeWarningr   r   r   r   r<   lenr   r   r{   )rc   r   rD   r   r   r    r    r!   !test_bounded_powell_outsidebounds}  s&    r)  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!   rc     r   z+test_bounded_powell_vs_powell.<locals>.func))r   )皙)r   gffffff"@)r$  gffffff@g/)g gr   r   r.  绽|=ftolZxtolr   r   rM   r-   r~   )rw   r   ru   )r   r,  r   r   r.  )Nr   r,  r   )r$  Nr-  c                 S   sz   t | d  t | d  t | d  | d   t | d  }|t t | d | d  t | d  8 }|d S Nr   r   r%   r6   r   tr    r    r!   rc     s   D.)r.  r   rL   )r   r   r   r   r%  g8:}?r   )gb4F@g:gW?@)r
   r   r   r   rx   r   r<   infry   r   r'  )rc   r   rD   rw   Z
res_powellZres_bounded_powellre   r    r    r!   test_bounded_powell_vs_powell  sb   




r6  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    .ArL   r  r0  )ru   r   rw   rH   c                 S   s   t |  S r1   r   r   r    r    r!   rb        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   r=   r3   r;   r   r    r    r!   rb        .gwc                 S   r9  )Nr   r   r   r   r:  r   r    r    r!   rb     r;  gB+Iar0   r   c                 S   s^   t t | d d d  t t | dd  d  }|t | dkr*d9 }|S d9 }|S )Nr%   r   r/   r   r   r   r:  r3  r    r    r!   rb     s
   :g     @@r   g 4&k\)r   r5  r
   r   r   rx   )kwargsrD   rb   r   r    r    r!   &test_onesided_bounded_powell_stability  s$   r=  c                   @      e Zd ZdZdZdS )TestOptimizeWrapperDispTNrk   rl   rm   r   rq   r    r    r    r!   r?        r?  c                   @      e Zd ZdZdZdS )TestOptimizeWrapperNoDispTFNr@  r    r    r    r!   rC    rA  rC  c                   @   rB  )TestOptimizeNoWrapperDispFTNr@  r    r    r    r!   rD    rA  rD  c                   @   r>  )TestOptimizeNoWrapperNoDispFNr@  r    r    r    r!   rE  !  rA  rE  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ejjd!d"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/d0d1 Zd2d3 Zejd+g d4d5d6 Zejd+g d7d8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$ejd+g dBdCdD Z%ejd+g dEdFdG Z&ejd*ejd+e'ejdHg dIdJdK Z(dLdM Z)ejd+dNdOdP Z*ejd+g dQdRdS Z+dTS )U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   r  r1   r    r   r    r    r!   rc   *  r  z.TestOptimizeSimple.test_bfgs_nan.<locals>.funcc                 S   
   t | S r1   r   Z	ones_liker   r    r    r!   r   ,  r   z0TestOptimizeSimple.test_bfgs_nan.<locals>.fprimer   )r   invalidFr   )r   nanr   r
   r   isnan)rY   rc   r   rD   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 r1   r   rJ  r   r    r    r!   rc   7     z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.funcr   rI  r   rx   r   Fc                 S   s   | dkrdS t jS Nr   rN  r   r    r    r!   rc   @  r5   c                 S   rG  r1   rH  r   r    r    r!   r   B  r   z7TestOptimizeSimple.test_bfgs_nan_return.<locals>.fprime)rv   )r   r   r
   r   rK  )rY   rc   r   r   r    r    r!   test_bfgs_nan_return3  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 )NrI   r    F)r.   rt   rT   rq   r-   r~   )r   sqrtspacingr)   randr(  rS   r
   r   rc   rR   rT   r   )rY   r.   r   r    r    r!   test_bfgs_numerical_jacobianJ  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   rs   TNC2-point3-pointN)ru   rv   r-   r~   )		itertoolsproductr
   r   rc   rR   r   r   rS   )rY   methodsjacsru   rv   r   r    r    r!   test_finite_differences_jacV  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ru   rv   rh   )ra  rb  doglegtrust-exact)r   r
   r   r[  r\  r   rc   rR   rf   r   r   r	   r@   )rY   r]  Zhessesru   rh   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rI   r    r   r    r    r!   rb   z  s   z/TestOptimizeSimple.test_bfgs_gh_2169.<locals>.f      $@Fr   rI   r8  r   r   )r
   r   r   )rY   rb   Zxsr    r    r!   test_bfgs_gh_2169y  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!   rb     s   
z:TestOptimizeSimple.test_bfgs_double_evaluations.<locals>.fr   Tr0   )ru   rv   tol)setr
   r   rY   rb   r    rl  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s+J | j| j	dks5J | j	t| j
dd g dg d	gd
dd d S )Nr    )rt   rT   r-   r~   r   r   rL   )g><gwT볹gUuAX?)rM   gHg!mʲ3?r   r0   r   )r
   fmin_l_bfgs_brc   rR   rf   rT   r   rS   rU   rV   rW   rY   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_gradrT   r-   r~   )r
   rs  rc   rR   rT   r   rS   rt  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 r1   rc   rf   r   rX   r    r!   rx     r#   z4TestOptimizeSimple.test_l_bfgs_b_funjac.<locals>.funrT   r-   r~   )r
   rs  rR   rT   r   rc   rS   )rY   rx   r   r   r   ru  r    rX   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 rQ  )r   rx   r   rX   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   rx   r   rY   r   r    r    r!   __call__  s   zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__call__Nrk   rl   rm   r|  r~  r    r    r    r!   Callback  s    r  rM   l-bfgs-brT   r   )ru   callbackrw   r   Fz+STOP: TOTAL NO. of ITERATIONS REACHED LIMIT)r
   r   r   r   r   r   r   rx   r{   r   message)rY   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s*J d | _| _	tj| j| jd|d}| j|jksCJ t| |j| | jdd d | _| _	tj| j| jd	d|d
}| j|jkslJ t| |j| | jdd d S )NFrq   rT   L-BFGS-Bru   rv   rw   r-   r~   r   r   rZ  rv   ru   rw   )rT   r
   r   rc   rR   rf   r   r   rS   rV   rz   rU   ry   )rY   r   rE   rar    r    r!   test_minimize_l_bfgs_b  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/   r8  r0   r/  F)rq   rT   r1  r  r  r   )	rT   r
   r   rc   rR   rf   r   r   rS   )rY   Zv0ro  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 )N333333rI   r  Fr   )rq   Zmaxlsr  )r
   r   r   r   r<   	rosen_derr   )rY   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   rN   c                    s    | } | |S r1   )r^   )r   valuerb   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 r1   r    )r   r  yr    r    r!   	<genexpr>  s    zPTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.<genexpr>)
r
   r   r  r   fullrs  max	enumerateminr   )rY   grD   r  lowZmediumhighr  kr  targetZxminr   ru  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rx   r   r   ry   r   )r   r   sizer_   r
   r   )rx   rD   rt   r  stepsizerT   r  rw   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   rI   r8  rh  r    Nr/   r   N)r
   r   r   dictr   r   )rY   r  rD   r   r    r    r!   test_custom$  s   
zTestOptimizeSimple.test_customz$output not reliable on all platformsr   c                 C   s6  t jddgt jdd}t jdi |ddi | \}}d|vr%d|vs'J t jdi |dd	i | \}}d|v rAd|vsCJ t jdi |dd
i | \}}d|v r]d|v s_J t jdi |d
dd | \}}d|vrzd|vs|J t jdi |ddd | \}}d|v rd|v sJ d S )Nr   rL   )rL   r   r  )rc   rD   r   r   iprintr   r  z
At iterater   r   F)r  rq   Tr    )r
   r   r  rs  Z
readouterr)rY   Zcapfdr<  outr   r    r    r!   test_gh13321J  s$   
zTestOptimizeSimple.test_gh13321c                    s<   ddg d fdd}ddg}t jt j|| d d S )N)r.  r%   )r   rL   constraintsc                    s(   |d  u sJ |d u sJ t  S )Nr   r  r
   r   )rx   rD   rw   r   r  r    r!   r  r  s   z0TestOptimizeSimple.test_gh10771.<locals>.custminr   )ru   r   r  )r
   r   r   )rY   r  rD   r    r  r!   test_gh10771l  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 )Nr%   r   r   r    zr   r  r    r    r!   rc   }  s   z<TestOptimizeSimple.test_minimize_tol_parameter.<locals>.funcc                 S   s:   | \}}t d| |d  d|d   d|d  | gS )Nr%   r   rL   r   r<   r  r    r    r!   dfunc  s   2z=TestOptimizeSimple.test_minimize_tol_parameter.<locals>.dfunc	nelder-meadpowellcgr   	newton-cgr  tnccobylaslsqpr  r  r  r   r/  )rv   ro  ru   rI   z: z vs. )r
   r   r   )rY   rc   r  ru   rv   Zsol1Zsol2r    r    r!   test_minimize_tol_parameter{  s   :z.TestOptimizeSimple.test_minimize_tol_parameterr   ignore::RuntimeWarningru   )r   r   r   r   r   rs  fmin_tnc
fmin_slsqpc           	         sb   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!d  tdD rJ d S )"N)r  rs  c                 S   s   t | t | fS r1   )r
   r   r  r   r    r    r!   rc     r#   zDTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.funcr   r   r  r   iterr  r   r  )r   r   i  rT   c                     s    |d< t j| i |S )Nru   r
   r   )akwr   r    r!   routine  s   zGTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.routiner  r  rw   ry  )r   r   )r  rv   rb  re  ra  rd  r`  rh   c                    s(   t | tjrJ  | t| f d S r1   )
isinstancer
   r   r^   r   r_   )r   rt   r<  )resultsr    r!   r    s   zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.callbackr  r%   c                 s   s"    | ]\}}t ||kV  qd S r1   )r   r;   r   r   r  r    r    r!   r    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    s   & )r
   r   r  
rosen_hessr   rQ   
startswithgetattrr  r(  r;   anyr[  combinations)	rY   ru   rc   rv   rh   rD   r<  r  r  r    )ru   r  r!   #test_minimize_callback_copies_array  sB   










"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 r$   r    r   r    r    r!   rc     r7  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  rj  r  ry  r  r  r  zSLSQP returns slightly worse)
r   r<   r  r
   r   r   r   rx   r   r   )	rY   ru   rc   r  rD   Zf0rv   rw   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)rI   r        @r  r%   )r3   r   r<   r   r    r    r!   rb     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  r.  r   r   r   )r   r<   Zconcatenater\   r   r  r    r    r!   cons  s   $z:TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.cons)rK   rI   r(   r  r  ineqtyperx   ru   r  )rM   r%   r   r   rL   g-q=r~   )r   r<   r
   r   r   r   )rY   rb   r  rD   r   r    r    r!   test_slsqp_respect_bounds  s   
"z,TestOptimizeSimple.test_slsqp_respect_bounds)r  r   rs   r   r   r  SLSQPr`  rd  ra  re  rb  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rf|jdkshJ d S d S )Nr   r   r    ry  r   )r   rv   r  rh   rz   r  r   )r   rQ   r   r
   r   r  r  r  rf   rh   r   rx   r   ry   hasattrrz   Zngevr{   )rY   ru   MAXITERrD   sfr<  r   r    r    r!   test_respect_maxiter   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   T)rT   rq   zMaximum number of iterationsr  r   r   )r   rQ   r   r
   r   r  r  r   warnsRuntimeWarningr  r  rx   r   )rY   ru   rD   r  rw   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 )Nr:   r   皙?r   Q?r%   r  r   r    r    r!   rx   :  s   ,zRTestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints.<locals>.funr  r  r   r`  ry  )r  rv   rh   ru   rw   )	r
   r   r  r  r   rQ   r   r  r   )	rY   r  rb   rv   rh   rx   r  rD   r   r    r    r!   2test_respect_maxiter_trust_constr_ineq_constraints1  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!   rb   F     z6TestOptimizeSimple.test_minimize_automethod.<locals>.fc                 S   s   | d S r  r    r   r    r    r!   r  I  r  z9TestOptimizeSimple.test_minimize_automethod.<locals>.consrg  r  r  )r  )r   r   r   )r  r   r   r   r   r0   r~   r%   r   )r   r<   r
   r   r   r   r   )
rY   rb   r  rD   Zsol_0Zsol_1Zsol_2Zsol_3Zsol_4r   r    r    r!   test_minimize_automethodE  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!   Ya  r5   z=TestOptimizeSimple.test_minimize_coerce_args_param.<locals>.Yc                 S   s   d| |  S r  r    r  r    r    r!   dY_dxd  r7  zATestOptimizeSimple.test_minimize_coerce_args_param.<locals>.dY_dx)rL   r   r   r   r   r   r%   r   r   rL   r   r   )rv   rt   ru   r1   )r   r<   r)   Zrandnr(  r
   r   )rY   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 ]q\}|dv r,td d	}nt }d
k r8|dv r8qdgd g tj||||d}d| |}|jsWJ |t|jdg|d |j	dksiJ |d
kr|dv r{t d d|d q d dkr d dk sJ |q	 qd S )N)gJz5r   gd~QJ)rs   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   r%   )r=   r  AssertionErrorr   Zfirst_step_sizescalerD   r    r!   rb   r  s
   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.fc                    s   t  | d d  gS Nr   r   r  r   )r  r    r!   r  y  r9   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.g)rs   r   r  )r   r/  )r  r         r  z{} {}: {}: {}rI   err_msgrL   r   g)\(?rK   )
r[  r\  r  r
   r   formatr   r   r   r   )	rY   scalesr]  rb   r  ru   rw   r   r  r    r  r!   test_initial_step_scalingk  s8   "z,TestOptimizeSimple.test_initial_step_scaling)r  r  r  r   r  r  r  r  r  r`  rd  ra  re  rb  c                    sh  t jd dg dd } fdd}dd }d	d
 }t dg}|dv }|dv }||g}	|r2|gn|d g}
|r;|gn|d g}|dkrHt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 qqW d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr*   r   c                 S   rM  r1   rN  r   r    r    r!   rc     rO  z0TestOptimizeSimple.test_nan_values.<locals>.funcc                    s,    d  d7  <  d dkrt jS t j S r2  )r   rJ  r)   rU  r   countr    r!   func2  s   
z1TestOptimizeSimple.test_nan_values.<locals>.func2c                 S   s   t dgS NrI   r  r   r    r    r!   rf     r7  z0TestOptimizeSimple.test_nan_values.<locals>.gradc                 S      t dggS r  r  r   r    r    r!   rh     r   z0TestOptimizeSimple.test_nan_values.<locals>.hessrI   r  rb  re  ra  rd  rb  re  ra  rd  r  rj  r  ry  r   rP  delta_grad == 0.*.*does not use Hessian.*.*does not use gradient.*)rv   rh   ru   rw   F)r   r)   r,   r<   r  r   r   filterUserWarningr  r[  r\  r
   r   r   r   )rY   ru   rc   r  rf   rh   rD   Z
needs_gradZ
needs_hessfuncsZgradsZhesssrw   suprb   r  hr   r    r  r!   test_nan_values  s2   Pz"TestOptimizeSimple.test_nan_values)r  r  r   r  r  r  r  r`  rd  ra  re  rb  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D ]}t| j|d  | j| rltd| qUd S )	Nr  r  r   rP  r  rc  r   zDuplicate evaluations made by )rf   rh   r   r   r   r  r  r
   r   rc   rR   r   r(  rW   Zarray_equalr[   )rY   ru   rv   rh   r  r  r    r    r!   test_duplicate_evaluations  s(    z-TestOptimizeSimple.test_duplicate_evaluationsnew_cb_interface)r   r   r%   c           
         sF  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	 tjdi |ddii}	|j|	jks}J t|j|	j |j|	j  krksJ  J |j|dkrdndksJ d S )Nc                       d _ t| S NF)flagr
   r   r   rb   r    r!   rb        
z9TestOptimizeSimple.test_callback_stopiteration.<locals>.fFc                    r  r  )r   r
   r  r   r!  r    r!   r    r"  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.gc                    r  r  )r   r
   r  r   r!  r    r!   r    r"  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.hr   r   c                    s   | j | jks
J    d S r1   rx   r   )intermediate_resultr  rb   r    r!   callback_interface     
zJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interfacer%   c                       s    e Zd Zdef fddZdS )z@TestOptimizeSimple.test_callback_stopiteration.<locals>.Callbackr$  c                    s   |j |jks
J    d S r1   r#  )rY   r$  r%  r    r!   r~    r'  zITestOptimizeSimple.test_callback_stopiteration.<locals>.Callback.__call__N)rk   rl   rm   r   r~  r    r%  r    r!   r    s    r  c                    s
      d S r1   r    )Zxkrt   )r  r    r!   r&    r   c                      s.     j d7  _ d _ j krd _t d S )Nr   FT)r  r   StopIterationr    )r  rT   r    r!   r    s   
z@TestOptimizeSimple.test_callback_stopiteration.<locals>.callbackr   r  )rD   ru   rx   rv   rh   r  r  rw   rT   r`  rL   c   r    )	r   r  r
   r   rx   r   r   r   r{   )
rY   ru   r  r  r  r&  r  r<  r   r   r    )r  rb   rT   r!   test_callback_stopiteration  s2   
 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   r  r1   r    r   r    r    r!   r  '  r  z4TestOptimizeSimple.test_ndim_error.<locals>.<lambda>)r%   r   )r?   r@   r
   r   r   onesrY   r  r    r    r!   test_ndim_error$  s   "z"TestOptimizeSimple.test_ndim_error)r  r  r  r  r  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!   rb   ,  r   z:TestOptimizeSimple.test_minimize_invalid_bounds.<locals>.fr   r%   rL   r   z?The number of bounds is not compatible with the length of `x0`.r  )r   r%   rL   rD   ru   r   )r   r   r   )rL   r   r%   z:An upper bound is less than the corresponding lower bound.)r   r   r	   r@   r
   r   )rY   ru   rb   r   r  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  rv   Tr   r  Maximum numberr  c                 S   rG  r1   r
   r   r   r    r    r!   r  C     
 zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>r   r   Frq   c                 S   rG  r1   r1  r   r    r    r!   r  G  r2  )r
   r  r  r'  r   r  r   )rY   ru   r<  warning_typerw   r    r    r!   test_minimize_warnings_gh19539  s$   

z0TestOptimizeSimple.test_minimize_warnings_gh1953N),rk   rl   rm   rL  rR  rV  r_  rf  ri  rr  rv  rw  rz  r  r  r  r  r  r  r   r   r   r  r  r  r   parametrizer   r  r  r  r  r  r  r  r  r  r  r  r   r*  r-  r/  r4  r    r    r    r!   rF  &  sj    		&
!

<


4
-

6
rF  ru   )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   r  r  r   r   r    r    r!   rb   Q  r   z$test_minimize_with_scalar.<locals>.f   )rn  r   r%  rM   r   r~   )r
   r   r   r   r   )ru   rb   r   r    r    r!   test_minimize_with_scalarK  s   
r7  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   rS   rX   r    r    r!   rZ   Z  r"  zTestLBFGSBBounds.setup_methodr  c                 C   s    d| |d | |d |   S )NrI   r   r   r    ri   r    r    r!   rx   ^  r'   zTestLBFGSBBounds.func                 C   s   ||d  S r   r    ri   r    r    r!   rv   a  r7  zTestLBFGSBBounds.jacc                 C   s   |  ||| ||fS r1   rx   rv   ri   r    r    r!   fjd  r9   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   taskr-   r~   )r
   rs  rx   rv   r   r   rS   rY   r   rb   ru  r    r    r!   test_l_bfgs_b_boundsg  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  )rt   r   r   r<  r-   r~   )r
   rs  r;  r   r   rS   r=  r    r    r!   rz  n  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  ru   rv   r   r   r  r-   r~   )r
   r   rx   rv   r   r   r   rS   )rY   r   r    r    r!   test_minimize_l_bfgs_b_boundsu  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  r@  )r   r	   r@   r
   r   rx   rv   )rY   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 )NrX  r?  r    r   r   r  Zfinite_diff_rel_step)rt   ru   rv   r   rw   r   r  r-   r~   )	r[  r\  r
   r   rx   r   r   r   rS   )rY   r^  Zargssrv   rt   r   r    r    r!    test_minimize_l_bfgs_b_bounds_FD  s   z1TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds_FDNr?  )rk   rl   rm   rZ   rx   rv   r;  r>  rz  rA  r   r   r5  rB  rC  r    r    r    r!   r8  Y  s    



r8  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   
   d| _ d S )Nr(   )rS   rX   r    r    r!   rZ     r   zTestOptimizeScalar.setup_methodr(   c                 C   s   || d d S )zObjective functionr%   r   r    )rY   r   r  r    r    r!   rx        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 )Nr-   r~   r  r.  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
   brentrx   r   rS   r   r	   r@   )rY   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 )Nr-   r~   rG  rH  TrI  r   rJ  ro  )r   r   r   )rT   r|   r%   rL  r  rM  rN  rO  )	r
   goldenrx   r   rS   r   r   r	   r@   )rY   r   Zmaxiter_test_casesrT   rD   Znfev0ry   r  r    r    r!   test_golden  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   r8  r~   r   r-   )	r
   	fminboundrx   r   rS   r   r<   r?   r@   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w   Y  t| jdtd}t	|| j
dd d S )Nz.*must be finite scalars.*r  r   r%   r   r   r-   r~   )r   r	   r@   r
   rU  rx   r   rQ   r<   r   rS   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!   rx     r  z,TestOptimizeScalar.test_gh11207.<locals>.funr   )r
   rU  )rY   rx   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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 )Nr-   r~   ZBrentr   rL   ry  r   rG  r(   )bracketrt   ru   )ru   rt   rJ  rS  )r   r   ZBounded)r   rt   ru   r   r8  )r   r   boundedr   r(   )r   r   r   ru   rt   r%   r%  )r
   minimize_scalarrx   r   r   rS   r   r  r   r<   r?   r@   rQ   r}  r    r    r!   test_minimize_scalar  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  )rx   r[  rt   r  r  rT   r  rw   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[  ru   rw   r-   r~   r  )r
   r^  rx   r  r   r   rS   )rY   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 )Nr(   rt   r
   r^  rx   rX   r    r    r!   &test_minimize_scalar_coerce_args_paramI  s   z9TestOptimizeScalar.test_minimize_scalar_coerce_args_paramru   )rP  r\  rS  c                 C   s"   dD ]}t j| jd|id qd S )N)r   r   r%   rL   rq   )rw   rb  )rY   ru   rq   r    r    r!   	test_dispM  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   r+  r   ru   r   r   r  rx   ry   r   )r
   r^  rx   r  )rY   ru   r<  r   r    r    r!   test_result_attributesS  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 )Nr*   r   c                    s8    d  d7  <  d dkrt jS | d dt |   S )Nr   r   r   r%   r/   )r   rJ  r2   r   r  r    r!   rc   f  s   z0TestOptimizeScalar.test_nan_values.<locals>.funcrM  r#  r   rP  r  r  r  r\  r   r[  rj  ry  r   F)r   r)   r,   r   r   r  r  r  r
   r^  r  r   r   )rY   ru   rc   r[  r   r  r<  r   r    r  r!   r  ^  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!   rb     r  zCTestOptimizeScalar.test_minimize_scalar_defaults_gh10911.<locals>.fr   r  r~   )r   r   r  r/  )r   rw   r   )r
   r^  r   r   )rY   rb   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	   r@   r
   r^  r   r2   r5  rJ  r,  r    r    r!   'test_minimize_non_finite_bounds_gh10911  s   "z:TestOptimizeScalar.test_minimize_non_finite_bounds_gh10911rP  rS  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  rW  ru   r   )r   r	   r@   r
   r^  r   r2   )rY   ru   r  r    r    r!   2test_minimize_unbounded_method_with_bounds_gh10911  s   "zETestOptimizeScalar.test_minimize_unbounded_method_with_bounds_gh10911r  ro  r   r-   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   r<   Zreshaper   rj  r    r!   rb     r#   zITestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196.<locals>.f)r,  r:   r\  )r[  r  )ru   ro  )r  updater
   r^  r   shaperx   )	rY   ru   ro  rj  rb   r  br<  r   r    rn  r!   +test_minimize_scalar_dimensionality_gh16196  s   :z>TestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196)r\  rP  rS  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  r$   r    r   r    r    r!   rb     r7  zBTestOptimizeScalar.test_minimize_scalar_warnings_gh1953.<locals>.fr\  r   r[  r.  r   TrL   r  r0  r  r   Frq   )r   r  r
   r'  r^  )rY   ru   rb   r<  Zkwdrw   r    r    r!   $test_minimize_scalar_warnings_gh1953  s   
z7TestOptimizeScalar.test_minimize_scalar_warnings_gh1953NrZ  )rk   rl   rm   rZ   rx   rQ  r   r   r   rT  rV  rX  rY  r_  r`  rc  r5  rd  re  r  rf  rg  ri  r   rr  rs  r    r    r    r!   rD    s<    


<#



	

rD  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   r%   g      Y@r    r   r    r    r!   rb        z3TestBracket.test_errors_and_status_false.<locals>.f9The algorithm terminated without finding a valid bracket.r  r   r   r#  rH  c                 S   s<   d| d  d| d   d| d   d| d   d|   d S )	Nr*  r   r      rL      r%   r   r    r   r    r    r!   rb     s   <z8No valid bracket was found before the iteration limit...r   rK   r   ry  )	r   r	   r[   r
   r[  r   r5  rP  rS  )rY   rb   r  r    r    r!   test_errors_and_status_false  s&   "z(TestBracket.test_errors_and_status_falseru   )rP  rS  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   ru  rv  r    r   r    r    r!   rb     rw  z9TestBracket.test_minimize_scalar_success_false.<locals>.frx  r#  )r[  ru   rL   r   r   )r
   r^  r   r  ry   r   rx   )rY   ru   rb   r  r   r    r    r!   "test_minimize_scalar_success_false  s   
z.TestBracket.test_minimize_scalar_success_falseN)	rk   rl   rm   r   r   r   r{  r5  r|  r    r    r    r!   rt    s
    

rt  c                   C   s   t ttjtjdd d S )Ng{GzrR  )r?   r@   r
   rP  r   r7   r    r    r    r!   test_brent_negative_tolerance  r9   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  rI   r   r   rv   rh   ro  ru   r   r8  r   )r   r<   r
   r   r   r  r  r   r  r   r   rY   rD   r   r    r    r!   test_rosenbrock  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   r-   )rv   rh   ru   ro  r8  r   r~   )r   r<   rC   r
   r   
himmelblaurA   rB   r   r  r   r   himmelblau_xoptrx   himmelblau_minr  r    r    r!   test_himmelblau  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  rI   rY  r   r   r  r   r8  r   )
r   r<   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   r<   r
   r   r   r  r   r   r  r   r   r  r    r    r!   test_hessian_update_strategy  s   
z)TestNewtonCg.test_hessian_update_strategyN)rk   rl   rm   r  r  r  r  r    r    r    r!   r~    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@rL   rM   r   r   r   )rM   r%   r  r   rI   r   r   r   r  r   rM   r   r   r   r   r   rM   r   r   r   r   r  rM   r   r   r   r  rL   )rI   r   r   r   )rI   r   r   r%   r(   )r  r   r   r%   gffffff?g333333@)rI   r   r   r   r-   r~   g333333)r
   r  Z_line_for_searchr   r<   r   r5  )Zline_for_searchlower_boundupper_boundrD   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)r  r  r(   皙ٿr%   r   r3   r<   r   r    r    r!   rc   _  rw  z$test_linesearch_powell.<locals>.funcr  r   r  r   r  r%   r  r(   r  r  r  r   r   r         ?rM   r   r   r   皙?r  r   r   r   r   )fvalro  r-   r~   ro  r  r  r  )r
   r  _linesearch_powellr   r<   r5  r   Zlinesearch_powellrc   r!  r  r  r  r  xilrb   re   r+   r    r    r!   test_linesearch_powellZ  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!   rc     rw  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  r-   r~   g333333ӿrL   g?r  rJ   g333333ÿ)r  r   r   r%   r   g333333)r
   r  r  r   r<   r   r5  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?rj  c                    s8   | \}}|  j k r|  jk sJ |d |d  S r  )lbr;   ub)r   r  rq  r  r    r!   rx   	  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!   rc   	  r'  z test_powell_limits.<locals>.funcrK   r  )rx   rD   ru   r   )r
   r   r   )rx   rc   r    r  r!   test_powell_limits  s   r  c                   @      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)rL   r   r   )r%   r%   r%   )r   r<   r
   rosen_hess_prodr\   r  r   )rY   r   re   hpZdothpr    r    r!   	test_hess	  s
   zTestRosen.test_hessN)rk   rl   rm   r  r    r    r    r!   r  	      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.
    rz  r   r    )re   r   r  r  rq  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   rL   *   r%         r   r  re   r   r  r    r    r!   rA   (	  s   2.rA   c                 C   s^   | \}}t d|d  d|  d d| d|  gd| d|  d| d|d   d ggS )Nry  r%   r   r  r  r  r  r    r    r!   rB   .	  s   *&rB   gHzGѿgrL   r%   rM   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!   rc   ;	     0z0test_minimize_multiple_constraints.<locals>.funcc                 S      t | d gS r   r  r   r    r    r!   func1>	     z1test_minimize_multiple_constraints.<locals>.func1c                 S   r  r  r  r   r    r    r!   r  A	  r  z1test_minimize_multiple_constraints.<locals>.func2r  r  c                 S   s   d| d | d  | d   S )Nr   r   r   r%   r    r   r    r    r!   rb   H	  rw  z-test_minimize_multiple_constraints.<locals>.fr&  r  r  )}   r   r   r/  r~   )r
   r   r   r   )rc   r  r  r  rb   r   r    r    r!   "test_minimize_multiple_constraints9	  s   r  c                   @   r{  )TestOptimizeResultAttributesc                 C   s8   ddg| _ tj| _tj| _tj| _tj| _	ddg| _
d S )Nr   )rM   rg  )rD   r
   r   rc   r  rv   r  rh   r  rj   r   rX   r    r    r!   rZ   R	  s   
z)TestOptimizeResultAttributes.setup_methodc              
   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   ry   r   r   r{   rx   r  r  r   z7Method .+ does not use (gradient|Hessian.*) information)ru   rv   rh   rj   )r   r   r  r  r
   r   rc   rD   rv   rh   rj   r  dirr  r  str)rY   
attributesskipru   r  r   	attributer    r    r!   test_attributes_presentZ	  s&   
z4TestOptimizeResultAttributes.test_attributes_presentN)rk   rl   rm   rZ   r  r    r    r    r!   r  O	  s    r  c                 G   s^   | \}}|\}}}}}}	}
}}}}}}||d  || |  ||d   ||  ||  |	 S r  r    r  r   r   r  r  rq  r  ru  r   rb   r  r  r  r   r  r  r  r    r    r!   f1q	  s   8r  c                 G   sP   | \}}|\}}}}}}	}
}}}}}}|
 t || d || d   |  S r  r   r  r    r    r!   f2w	     *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 r1   )r  r  r  r  r   r    r    r!   
brute_func	  r  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%   rL   r   r   r   r   ,   r   r%   r  r   r.  rK   r$  r         ?g_}gi?)r   slicerrangesr   r<   rS   rX   r    r    r!   rZ   	  s   zTestBrute.setup_methodc                 G   s   t |g|R  S r1   )r  )rY   r  r   r    r    r!   r  	  rF  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rt   r|   finishr   r   r~   r   )	r
   bruter  r  r   r   r   rS   r   )rY   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%   )r(  rp  r   r    r    r!   rb   	  s   zTestBrute.test_1D.<locals>.fr#  rL   )ZNsr  )r
   r  rq  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%   )rt   r|   r  workersr   r   )r
   r  r  r  r   r   )rY   r  Z	resbrute1r    r    r!   test_workers	  s   zTestBrute.test_workersc                    sb   t jd  fdd}tjtdd tj|| j| j	dd W d    d S 1 s*w   Y  d S )Nr*   c                    r   r   r   r  r   r    r!   rc   	  r   z,TestBrute.test_runtime_warning.<locals>.funcz)Either final optimization did not succeedr  T)rt   rq   )
r   r)   r  r   r  r  r
   r  r  r   )rY   rc   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 rQ  r    r   rt   r    r    r!   rb   	  r7  z+TestBrute.test_coerce_args_param.<locals>.fr$  r   r  r%   ra  r   )r
   r  r  r   )rY   rb   r  r    r    r!   test_coerce_args_param	  s   z TestBrute.test_coerce_args_paramN)
rk   rl   rm   rZ   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 $}g }||| ||| |D ]}|  q>W d    d S 1 sPw   Y  d S )Nr   c                    s     d | d d S )Nr/   r   r%   sleepr   timer    r!   
objective1	  s   
z*test_cobyla_threadsafe.<locals>.objective1c                    s     d | d d d S )Nr/   r   r   r%   r  r   r  r    r!   
objective2	  s   
z*test_cobyla_threadsafe.<locals>.objective2COBYLAc                         t jdg dS NrM   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  futuresThreadPoolExecutorr^   submitr   )
concurrentr  r  pooltasksr4  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   rE  rQ  )r  rX   r    r    r!   rZ   	  r   z TestIterationLimits.setup_methodc                 C   s\   |  j d7  _ t|d d |d d  t|d |d }}t|d | |d  S )Nr   r   r%   rj  rK   )r  r   rS  Zarctan2r2   )rY   r  rE   r4  r    r    r!   	slow_func	  s   4zTestIterationLimits.slow_funcc                 C      |  dd d S )Nr     check_limitsrX   r    r    r!   test_neldermead_limit 
  r  z)TestIterationLimits.test_neldermead_limitc                 C   r  )Nr  rN   r  rX   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 ]/}d| _ tj| j||d|id}| j |d ks)J |d	 r6|d |k s5J q|d |ks>J qdD ]#}tj| j||d
|id}|d	 r\|d |ks[J qA|d |ksdJ qAddgddgdtjgfD ]>\}}d| _ tj| j||||dd}| j |d ksJ |d	 r|d |k r|d |ksJ qq|d |ks|d |ksJ qqtjd gd tjgfD ]O\}}d| _ tj| j||||dd}| 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   r%   )r   i    r   r  r   ry   r   rT   r   r   r  )rT   r  )r  r
   r   r  r   r5  )rY   ru   Zdefault_itersZstart_vZmfevr   Zmitr    r    r!   r  
  sb   

 

(z TestIterationLimits.check_limitsN)rk   rl   rm   rZ   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 ]}t j| tdg|||d}|jjd
ksGJ q/d S )Nc                 S   s   | |  S r1   r    r   r    r    r!   rx   6
  r  z2test_result_x_shape_when_len_x_is_one.<locals>.func                 S   s   d|  S Nr  r    r   r    r    r!   rv   9
  r  z2test_result_x_shape_when_len_x_is_one.<locals>.jacc                 S   r  r  r  r   r    r    r!   rh   <
  r   z3test_result_x_shape_when_len_x_is_one.<locals>.hess)r  r   rs   r   r  rW  r  r  r/   r   rk  )r`  rd  ra  re  rb  r   rc  )r
   r   r   r<   r   rp  )rx   rv   rh   r]  ru   r   r    r    r!   %test_result_x_shape_when_len_x_is_one5
  s   r  c                   @   r{  )FunctionWithGradientc                 C   rE  rQ  )number_of_callsrX   r    r    r!   r|  O
  r   zFunctionWithGradient.__init__c                 C   s$   |  j d7  _ t|d d| fS r$   )r  r   r3   r}  r    r    r!   r~  R
  s   zFunctionWithGradient.__call__Nr  r    r    r    r!   r  N
  s    r  c                   C   s   t  S r1   )r  r    r    r    r!   function_with_gradientW
  s   r  c                 C   s   t | }tddg}t||d | jdksJ t||d|  | jdks,J dt|d| ddd	 | jdks@J dd S )
NrI   r  r  r   r%   zHfunction is not recomputed if gradient is requested after function valueg      4@(different input triggers new computationr  )r   r   r<   r   r  
derivativer  memoized_functionrD   r    r    r!   )test_memoize_jac_function_before_gradient\
  s   r  c                 C   s   t | }tddg}t||d|  | jdksJ t||d | jdks,J dt|d| d| dd	 | jdksCJ dd S )
NrI   r  r%   r   r  zHfunction is not recomputed if function value is requested after gradientr   r  r  )r   r   r<   r   r  r  r   r    r    r!   )test_memoize_jac_gradient_before_functiono
  s   r  c                 C   s   t | }|j}t }tddg}t||d||dd}| jdks#J ||d  | jdks1J ||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.
    rI   rK   r    Nr   r/   r%   r:   rL   )	r   r  r
   r   r   r<   r   r  rx   )r  r  rv   rh   rD   Zscalar_functionr    r    r!   test_memoize_jac_with_bfgs
  s   r  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!   r  
      ztest_gh12696.<locals>.<lambda>Fr   )r   r
   rU  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  )rL   r%   r%   r  Tc                    s0   |r	| j dks	J |rt|      d S d S rm  )r  r   )r   Z
check_sizecheck_values)i_ebr  r    r!   check_x
  s
   z(setup_test_equal_bounds.<locals>.check_xc                        |  t | S r1   r1  r   r	  r    r!   rc   
     
z%setup_test_equal_bounds.<locals>.funcc                    r
  r1   )r
   r  r   r  r    r!   rf   
  r  z%setup_test_equal_bounds.<locals>.gradc                    s    |  d S r1   r    r  r  r    r!   r  
  r7  z)setup_test_equal_bounds.<locals>.callbackc                    s    | dd | dd d S )NFr  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   Z
zeros_liker   Zdcr  r    r!   	jacobian1
     
z*setup_test_equal_bounds.<locals>.jacobian1c                    s    | dd | dd d S )NFr  r%   rL   rK   r    r   r  r    r!   constraint2
  r  z,setup_test_equal_bounds.<locals>.constraint2c                    r  )NFr  r   r%   r  r  r  r    r!   	jacobian2
  r  z*setup_test_equal_bounds.<locals>.jacobian2)r  r  rW  Fr:  c                    s    | | fS r1   r    r   rx  r    r!   r  
  r  z)setup_test_equal_bounds.<locals>.<lambda>c                 S   s   t t| |S r1   )listzipr  r  r    r    r!   r  
  s    r9  )	r]  kwdsbound_typesr  	callbacksr  r  rD   r  )TT)r   r)   r,   rU  r<   r   r5  r   )rD   r  r  r  r  r  r  Zc1aZc1bZc2aZc2br]  r  r  r  r  datar    )r	  rc   rf   r  r  r!   setup_test_equal_bounds
  sP   r  z0Failures due to floating point issues, not logicr]  r  
bound_typer  r  r  r  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
    aarch64rW  rv   FNzTolerance violation on aarchr  r  rD   r  r  z)Only SLSQP supports nonlinear constraints)rD   ru   r   r  r  )ru   rv   r   r  r-   r   gMb@?r   r   c                 S   s,   t t jdt jdg}| |ddg< t|S )Nr%   r   r   )r   r<   rJ  r
   r   )r   Znew_xr    r    r!   rx   *  s   
ztest_equal_bounds.<locals>.funr%   rh  g>r    )platformmachiner   r  eb_dataro  r
   r   r   r  r   r   rx   r   r   rJ  rv   rp  r  r   )ru   r  r  r  r  r  r  rD   r  Ztest_constraintsZreference_constraintsZ	fd_neededr   r   expectedrx   Zfd_resr    r    r!   test_equal_bounds
  sF   





r%  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 r1   )r   ZlinalgZnorm)r   p1r    r    r!   rb   @  r  z test_all_bounds_equal.<locals>.frl  )r%   r%   )rI   r  r%  rI   r  z/All independent variables were fixed by bounds.)r%   r]  r%   r  c                 S   rG  r1   r   r   r    r    r!   conQ  r   z"test_all_bounds_equal.<locals>.conrM   )r   ru   r  Fz3All independent variables were fixed by bounds, butr   Tz8All independent variables were fixed by bounds at valuesrk  )r
   r   r   r   rx   ry   r  upperr   r   r5  r  )	ru   rb   r   rD   r   rt   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   rL   r   r%   r    r   r    r    r!   rb   k  s   (ztest_eb_constraints.<locals>.fc                 S   s$   | d | d  | d  | d  d S )Nr   r   r%   rL   (   r    r   r    r    r!   cfunn  s   $z!test_eb_constraints.<locals>.cfunr  r  )r   rj  r   )r   r   r   )r   r%   rL   r   r  )rD   ru   r   r  r   rx   r  )rb   r+  r  r   r    r    r!   test_eb_constraintsh  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   r?   r@   )Zsolver_methodsZsolverr]  ru   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 )Nr  rg  r  r   r   r.  )r
   r   r   r   r   r<   r  r    r    r!   test_bounds_with_list  s   
r0  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 r1   )r   r>   r  r3   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   r>   r  r  r    r    r!   	fquad_jac  s   z3test_x_overwritten_user_function.<locals>.fquad_jacc                 S   s   t t | d S r  )r   eyer  r   r    r    r!   
fquad_hess  r#   z4test_x_overwritten_user_function.<locals>.fquad_hess)r  rd  ra  re  rb  r`  )rd  ra  re  rb  r`  r   r(   rc  g-C6*?r~   )	r   r+  r   r
   r   r   r   r>   r  )
r1  r2  r4  Zmeth_jacZ	meth_hessrD   methrv   rh   r   r    r    r!    test_x_overwritten_user_function  s    r6  c                   @   r  )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!   rc     r  zDTestGlobalOptimization.test_optimize_result_attributes.<locals>.funcr   )rD   )r$  r   r   r   r  rx   ry   r   )	r
   ZbasinhoppingZdifferential_evolutionZshgoZdual_annealingdirectr  r   r  )rY   rc   r  r   r    r    r!   test_optimize_result_attributes  s    z6TestGlobalOptimization.test_optimize_result_attributesN)rk   rl   rm   r9  r    r    r    r!   r7    r  r7  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_fprimerC   r  r   rA   rB   )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!   rb     rw  ztest_gh12594.<locals>.fr+  r   r  )r   r   r   r.  )r   r
   r   r   r<   r   rx   r   )rb   r   r   r   r    r    r!   test_gh12594  s    r;  )irn   r[  r!  numpyr   Znumpy.testingr   r   r   r   r   r   r   r   r	   r?   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   rF   rG   ro   r  r  r  r  r  r  r"  r)  r6  r=  r?  rC  rD  rE  rF  r   r5  r7  r8  rD  rt  r}  r~  r  r  r  r  r  r  rA   rB   rC   r  r  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/  r0  r6  r7  r:  r;  r    r    r    r!   <module>   s    $50   

L*      +

=  .),?&}"J#A	
	T
>
+(
