o
    tBh                 
   @   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 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$ 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! Z.d"d# Z/d$d% Z0G d&d' d'e'Z1G d(d) d)e'Z2G d*d+ d+e'Z3G d,d- d-e'Z4G d.d/ d/e&Z5ej67d0g d1d2d3 Z8G d4d5 d5Z9G d6d7 d7Z:d8d9 Z;G d:d; d;Z<d<d= Z=d>d? Z>d@dA Z?G dBdC dCZ@dDdE ZAdFdG ZBdHdI ZCdJdKgZDdLdMgZEdNZFdOdP ZGG dQdR dRZHdSdT ZIdUdV ZJdWdX ZKdYdZ ZLG d[d\ d\ZMd]d^ ZNG d_d` d`ZOdadb ZPG dcdd ddZQejRdedf ZSdgdh ZTdidj ZUdkdl ZVdmdn ZWdodp ZXeX ZYej6Zdqej67d0eYdr ej67dseYds ej67dteYdu ej67dveYdv ej67dweYdx dydz Z[ej67d0eYdr d{d| Z\d}d~ Z]dd Z^dd Z_dd Z`G dd dZad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_SCALAR_METHODS)LINPROG_METHODS)ROOT_METHODS)ROOT_SCALAR_METHODS)QUADRATIC_ASSIGNMENT_METHODS)ScalarFunction
FD_METHODS)
MemoizeJacshow_optionsc               	   C   s6  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	 d S )Nc                 S   s   ddt |    S N   npexpx r   y/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_optimize.pylogit%      ztest_check_grad.<locals>.logitc                 S   s    t |  dt |   d  S Nr      r   r   r   r   r   	der_logit(       z"test_check_grad.<locals>.der_logit      ?r   random  )	directionseedư>)epsilon)r,   r)   r*   皙?Hz>c                 S   s   | t |   S N)r   sinsumr   r   r   r   x_sinx@      ztest_check_grad.<locals>.x_sinxc                 S   s   t | | t |   S r/   r   r0   cosr   r   r   r   
der_x_sinxC      z#test_check_grad.<locals>.der_x_sinxr#   皙?random_projection)	r   arrayr
   
check_gradr   absarangeassert_raises
ValueError)r    r$   x0rr2   r6   r   r   r   test_check_grad!   sD   







rB   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zerosfloat64startparamssolutionmaxiter	funccalls	gradcallstraceselfr   r   r   setup_methodW   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)rR   RuntimeErrorr   dotrK   logr1   r   rL   rT   appendcopy)rV   r   log_pdotlogZfr   r   r   funce   s   
zCheckOptimize.funcc                 C   sV   |  j d7  _ t| j|}ttt|}t|| }t| j || j S r   )	rS   r   rY   rK   rZ   r1   r   	transposerL   rV   r   r]   r^   pr   r   r   grado   s
   zCheckOptimize.gradc                 C   s`   t | j|}t tt |}t || }t | jjt t || jt | jj| S r/   )r   rY   rK   rZ   r1   r   Tdiagrb   r   r   r   hessv   s   
"zCheckOptimize.hessc                 C   s   t | ||S r/   )r   rY   rg   rV   r   rc   r   r   r   hessp}   r3   zCheckOptimize.hesspN)	__name__
__module____qualname____doc__rW   r`   rd   rg   ri   r   r   r   r   rC   Q   s    
rC   c                   @   s   e Z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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rQ   disp
return_allr   CG)argsmethodjacoptionsr   funnfevnjevstatusT)rQ   full_outputrp   retallr+   atol	      r#      )r         rG   )r   g;ӱ.g)`$|;?+=r.   r~   rtol)use_wrapperrQ   rp   r
   minimizer`   rO   rd   fmin_cgr   rP   rR   rS   rT   )	rV   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         rG   r#   r   )rA   r   r   r   r_      s   z8CheckOptimizeParameterized.test_cg_cornercase.<locals>.fg      rH   G   rr   rt   rG   h㈵>r   )r   linspacer
   r   successr   r   )rV   r_   r@   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 )NFro   BFGSr   ru   rt   rs   rv   r   rw   ru   hess_invrx   ry   rz   Trs   rQ   r{   rp   r|   r+   r}   
         )r   g&/LgB__E7?)r   g$g
|3?r   r.   r   )r   rQ   rp   r
   r   r`   rO   rd   	fmin_bfgsr   rP   rR   rS   rT   )rV   r   r   r   r   goptHoptr   r   r   r   r   r   r   	test_bfgs   s<   

z$CheckOptimizeParameterized.test_bfgsc              	      s   dd   fdd}dg}t jdd2 | jr*d| ji}tj ||dd	|d
d }n
tj ||| jd}t  |r=J W d    d S 1 sHw   Y  d S )Nc                 S   s   t j|    S r/   )r   er   r   r   r   <lambda>       z?CheckOptimizeParameterized.test_bfgs_infinite.<locals>.<lambda>c                    s
    |  S r/   r   r   r`   r   r   r         
 r   ignore)overrp   r   r   r   r   rp   )r   errstater   rp   r
   r   r   isfinite)rV   fprimer@   r   r   r   r   r   test_bfgs_infinite   s   
"z-CheckOptimizeParameterized.test_bfgs_infinitec           
   	   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 )NFro   r   Powellrs   rt   rv   r   rw   direcnitrx   rz   Tr   r+   r}   r   gh㈵>   r   )r   rQ   rp   r
   r   r`   rO   fmin_powellr   rP   rR   rS   
rV   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 )NFro   r   r   r   r   rw   r   r   rx   rz   Tr   "   '   )病~W?f"Bܿg%?)r   r   g:&?)gSϼW?gf"Bg{år?)r   r   {år?)gB?r   r   r   r.   r   )
r   rQ   rp   r
   r   r`   rO   r   r   rT   r   r   r   r   test_powell_gh14014   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	 |d
 |d |d |d f\}}}}}}	|| jksAJ t| || | j	dd | jdksVJ | j
dks_J d S d S )Nc                 S   s   g | ]	}t j t jfqS r   )r   pi).0_r   r   r   
<listcomp>%  s    zBCheckOptimizeParameterized.test_powell_bounded.<locals>.<listcomp>Fro   r   r   )rs   boundsrt   rv   r   rw   r   r   rx   rz   r+   r}      r   )rO   r   rQ   rp   r
   r   r`   rR   r   rP   rS   )
rV   r   r   r   r   r   r   r   r   r   r   r   r   test_powell_bounded"  s(   z.CheckOptimizeParameterized.test_powell_boundedc           	   	   C   s   | j r.| j| jdd}tj| j| jdd|d}|d |d |d |d	 |d
 f\}}}}}ntj| j| jd| jd| jdd}|\}}}}}t| || | j	dd | j
dks]J | j
| jdksgJ | jt| jdd g dg dgddd d S )NFro   r   Nelder-meadr   r   rw   r   rx   rz   Tr   r+   r}      r   L   N   )g	dװ?g]fgt䝁?)gә ?g#=^goT?r   r.   r   )r   rQ   rp   r
   r   r`   rO   fminr   rP   rR   rS   rT   )	rV   r   r   r   r   r   r   r   r   r   r   r   test_neldermead?  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   rH   .rH   r   r-   FTrQ   rp   rq   initial_simplexr   r   r   r   rw   r   rx   rz   allvecsr   rs   rQ   r{   rp   r|   r   r+   r}   d   2   4   )gIt?g?'ΛTgx8?)gҢ_׆?goMg囎|52?r   r.   r   )r   rM   rO   ranger   rQ   r
   r   r`   r   r   rP   rR   rS   rT   )rV   simplexjr   r   r   r   r   r   r   r   r   r   r   test_neldermead_initial_simplex^  sF   


z:CheckOptimizeParameterized.test_neldermead_initial_simplexc                 C   s   g }t d}| jd d |d< tdD ]}||d |f  d7  < q|| t d}|| |D ].}| jrP| jdd|d}ttt	j
| j| jd	d
|d q4ttt	j| j| jd	| jddd|d
 q4d S )N)rH   r#   r#   .r   r-   )rH   rH   Fr   r   r   r   Tr   )r   rM   rO   r   r[   r   rQ   r>   r?   r
   r   r`   r   )rV   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 )NrQ   	Newton-CGr   rt   ru   rs   rv   r   )r
   r   r`   rO   rd   rz   )rV   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 )NFro   r   r   r   r   r   r+   r}   r      rH      (6-H=g?g4u3?r   g_g/N3?r.   r   )r   rQ   rp   r
   r   r`   rO   rd   fmin_ncgr   rP   rR   rS   rT   rV   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 )NFro   r   r   )rt   ru   rg   rs   rv   r   )fhessrs   rQ   r{   rp   r|   r+   r}   r      rH   r   r   r   r.   r   )r   rQ   rp   r
   r   r`   rO   rd   rg   r   r   rP   rR   rS   rT   r   r   r   r   test_ncg_hess  :   
z(CheckOptimizeParameterized.test_ncg_hessc                 C   r   )NFro   r   r   )rt   ru   ri   rs   rv   r   )fhess_prs   rQ   r{   rp   r|   r+   r}   r   r   rH   r   r   r   r.   r   )r   rQ   rp   r
   r   r`   rO   rd   ri   r   r   rP   rR   rS   rT   r   r   r   r   test_ncg_hessp  r   z)CheckOptimizeParameterized.test_ncg_hesspN)rj   rk   rl   r   r   r   r   r   pytestmarkxfailr   r   r   r   r   r   r   r   r   r   r   r   r   rn      s     ""
 (!"rn   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                    s     dd S )Nr   rJ   )r'   r   rngr   r   cost     ztest_maxfev_test.<locals>.cost)r   r   r   )r   Nelder-Meadr   maxfevrt   rv   rx   )r   r'   default_rngr
   r   )r   imaxfevrt   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 r/   r   r   r   r   r   func_&  s   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
   	_optimize'_wrap_scalar_function_maxfun_validationr   asarrayr   r>   _MaxFuncCallErrorr?   r:   )r   fcallsr`   imsgr   r   r   )test_wrap_scalar_function_with_validation$  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   r/   r   r   r   r   r   r   A      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_scalar<  s    "r  c                  C   s4   t g d} tjjtj| dd}|jdksJ d S )N)g?ffffff?皙?ffffff?333333?:0yE>)xatoliS  )r   r:   r
   	_minimize_minimize_neldermeadrosenr   )r@   r   r   r   r   test_neldermead_iteration_numD  s
   r  c               	   C   sD   dd } t jj| ddgdddd tt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   r   N  s    z-test_neldermead_xatol_fatol.<locals>.<lambda>r   r#   MbP?)rQ   r  fatol)xtolftolrQ   )r
   r  r  r   DeprecationWarningr   r   r   r   test_neldermead_xatol_fatolK  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   r1   r   r   r   r   r   X  r   z*test_neldermead_adaptive.<locals>.<lambda>)gM@'?gOC?g~?g -?g?g#j?g ?g~^g?gܠr#?g^cǽ?g)i	?g'?g?g1?g[VΤ?r   r   FadaptiveTr   )r
   r   r   r   )r`   p0r   r   r   r   test_neldermead_adaptiveW  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   r   i  r   z3test_bounded_powell_outsidebounds.<locals>.<lambda>)r   r   r"  r"  )rG   gr   r   rt   rI   r+   r}   Tr   r   r   r   )r   r   r   )r   r   r   r   )r   rt   rv   )g      r   r   Fr   )r   r
   OptimizeWarningr   r   r   r   r:   lenr   r   rz   )r`   r   r@   r   r   r   r   r   !test_bounded_powell_outsideboundse  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   r     r   z/test_bounded_powell_vs_powell.<locals>.<lambda>))r   )皙)r   gffffff"@)r#  gffffff@g/)g gr  r   r-  绽|=r  r  r   r   rI   r+   r}   )rv   r   rt   )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#   r4   r   tr   r   r   r`     s   D.z+test_bounded_powell_vs_powell.<locals>.func)r-  r   rH   )r   r   r   r   r$  g8:}?r   )gb4F@g:gW?@)r
   r   r   r   rw   r   r:   infrx   r   r&  )r`   r   r@   rv   
res_powellres_bounded_powellrc   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    .ArH   r  r/  )rt   r   rv   rD   c                 S   s   t |  S r/   r  r   r   r   r   r     s    z8test_onesided_bounded_powell_stability.<locals>.<lambda>g    `F-C6?r}   c                 S   .   t t | d  t | dkrd S d S )Nr-   r   r   r   r   r<   r1   allr   r   r   r   r_        .z1test_onesided_bounded_powell_stability.<locals>.fgwc                 S   r8  )Nr   r   r   r   r9  r   r   r   r   r_     r;  gB+Iar.   r   c                 S   s^   t t | d d d  t t | dd  d  }|t | dkr*d9 }|S d9 }|S )Nr#   r   r-   r   r   r   r9  r1  r   r   r   r_     s
   :g     @@r   g 4&k\)r   r3  r
   r   r   rw   )kwargsr@   r_   r   r   r   r   &test_onesided_bounded_powell_stability  s$   r=  c                   @      e Zd ZdZdZdS )TestOptimizeWrapperDispTNrj   rk   rl   r   rp   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                   @   sJ  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%g d&e d'd( Zejd%g d)d*d+ Zd,d- Zejd%g d.d/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z ejd%g d9d:d; Z!ejd%g d<d=d> Z"d?S )@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   r/   r   r   r   r   r   r     r
  z2TestOptimizeSimple.test_bfgs_nan.<locals>.<lambda>c                 S   
   t | S r/   r   	ones_liker   r   r   r   r     r   r   )r   invalidFr   )r   nanr   r
   r   isnan)rV   r`   r   r@   r   r   r   r   test_bfgs_nan  s   "z TestOptimizeSimple.test_bfgs_nanc                 C   s   dd }t jdd t|d}W d    n1 sw   Y  t |d s)J |d du s1J d	d }d
d }t jdd tj|d|d}W d    n1 sRw   Y  t |d s`J |d du shJ d S )Nc                 S      t jS r/   r   rK  r   r   r   r   r     s    z9TestOptimizeSimple.test_bfgs_nan_return.<locals>.<lambda>r   rJ  r   rw   r   Fc                 S   s   | dkrdS t jS Nr   rO  r   r   r   r   r   "  s    c                 S   rG  r/   rH  r   r   r   r   r   #  r   )ru   )r   r   r
   r   rL  )rV   r`   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 )NrE   r   F)r,   rs   rQ   rp   r+   r}   )r   sqrtspacingr'   randr'  rP   r
   r   r`   rO   rQ   r   )rV   r,   r   r   r   r   test_bfgs_numerical_jacobian*  s   "
z/TestOptimizeSimple.test_bfgs_numerical_jacobianc                 C   s^   g d}g d}t ||D ]\}}tj| j| j||d}t| |j| | jdd qd S )N)r   rr   TNC2-point3-pointN)rt   ru   r+   r}   )		itertoolsproductr
   r   r`   rO   r   r   rP   )rV   methodsjacsrt   ru   r   r   r   r   test_finite_differences_jac6  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rt   ru   rg   )ra  rb  doglegtrust-exact)r   r
   r   r[  r\  r   r`   rO   rd   r   r   r	   r?   )rV   r]  hessesrt   rg   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rE   r   r   r   r   r   r_   Z  s   z/TestOptimizeSimple.test_bfgs_gh_2169.<locals>.f      $@Fr   rE   r7  r   r~   )r
   r   r   )rV   r_   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   xpseenr   r   r_   d  s   
z:TestOptimizeSimple.test_bfgs_double_evaluations.<locals>.fbfgsTr.   )rt   ru   tol)setr
   r   rV   r_   r   ro  r   test_bfgs_double_evaluationsb  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   )rs   rQ   r+   r}   r   r   rH   )g><gwT볹gUuAX?)rI   gHg!mʲ3?r   r.   r   )r
   fmin_l_bfgs_br`   rO   rd   rQ   r   rP   rR   rS   rT   rV   r   r   r   dr   r   r   test_l_bfgs_bm  s    

z TestOptimizeSimple.test_l_bfgs_bc                 C   sB   t j| j| jd| jd}|\}}}t| || | jdd d S )NT)approx_gradrQ   r+   r}   )r
   rw  r`   rO   rQ   r   rP   rx  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 r/   r`   rd   r   rU   r   r   rw     r!   z4TestOptimizeSimple.test_l_bfgs_b_funjac.<locals>.funrQ   r+   r}   )r
   rw  rO   rQ   r   r`   rP   )rV   rw   r   r   r   ry  r   rU   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   rw   r   rU   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  rw   r   rV   r   r   r   r   __call__  s   zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__call__Nrj   rk   rl   r  r  r   r   r   r   Callback  s    r  rI   l-bfgs-brQ   r   )rt   callbackrv   r   Fz+STOP: TOTAL NO. of ITERATIONS REACHED LIMIT)r
   r   r  r   r   r   r   rw   rz   r   message)rV   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)rp   rQ   L-BFGS-Brt   ru   rv   r+   r}   r   r   rZ  ru   rt   rv   )rQ   r
   r   r`   rO   rd   r   r   rP   rS   ry   rR   rx   )rV   r   rA   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-   r7  r.   r.  F)rp   rQ   r  r  r  r   )	rQ   r
   r   r`   rO   rd   r   r   rP   )rV   v0rs  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 )N333333rE   r  Fr   )rp   maxlsr  )r
   r   r  r   r:   	rosen_derr   )rV   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   rJ   c                    s    | } | |S r/   )r[   )r   valuer_   valuesr   r   objfun  s   
zMTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.objfun)   r   i,  )r   maxfunc                 s   s    | ]	\}}||fV  qd S r/   r   )r   r  yr   r   r   	<genexpr>  s    zPTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.<genexpr>)
r
   r  r  r   fullrw  max	enumerateminr   )rV   gr@   r  lowmediumhighr  kr  targetxminr   ry  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rw   r   r   rx   r   )r   r   sizer\   r
   OptimizeResult)rw   r@   rs   r   stepsizerQ   r  rv   bestxbestyfuncallsniterimprovedstopdimstestxtestyr   r   r   custmin  s<   

z/TestOptimizeSimple.test_custom.<locals>.custmin)g??r  g?r  皙?r  r   rE   r7  ri  r   Nr-   r   N)r
   r   r  dictr   r   )rV   r  r@   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)r-  r#   )r   rH   constraintsc                    s(   |d  u sJ |d u sJ t  S )Nr   r  r
   r  )rw   r@   rv   r   r  r   r   r  0  s   z0TestOptimizeSimple.test_gh10771.<locals>.custminr   )rt   r   r  )r
   r   r  )rV   r  r@   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 sFJ d|||j||jf q
d S )Nc                 S   s$   | \}}|d |d  |d  d S )Nr#   r   r   r   zr   r  r   r   r   r`   ;  s   z<TestOptimizeSimple.test_minimize_tol_parameter.<locals>.funcc                 S   s:   | \}}t d| |d  d|d   d|d  | gS )Nr#   r   rH   r   r:   r  r   r   r   dfunc?  s   2z=TestOptimizeSimple.test_minimize_tol_parameter.<locals>.dfunc	nelder-meadpowellcgrr  	newton-cgr  tnccobylaslsqpr  r  r  r   r.  )ru   rs  rt   rE   z%s: %s vs. %s)r
   r   r   )rV   r`   r  rt   ru   sol1sol2r   r   r   test_minimize_tol_parameter9  s   4z.TestOptimizeSimple.test_minimize_tol_parameterrt   )r   r   r   r   r   rw  fmin_tnc
fmin_slsqpc           	         sP   dv r	dd }n	t j}t j}t j}td}i } dr:tt  } dkr,d|d< n' d	kr5d
|d< nd|d< n fdd} dkrLtd
d|d< ntdd|d<  dv r\||d< n dv re||d< n dv rq||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  rw  c                 S   s   t | t | fS r/   )r
   r  r  r   r   r   r   r   Z      zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<lambda>r   r   r  r   iterr  r   r  rQ   c                     s    |d< t j| i |S )Nrt   r
   r   )akwr   r   r   routinem  s   zGTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.routiner  )r  rv   r~  )r   r   )r  ru   rb  re  ra  rd  r`  rg   c                    s     | t| f d S r/   )r[   r   r\   )r   rs   r<  )resultsr   r   r    r7   zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.callbackr  r#   c                 s   s"    | ]\}}t ||kV  qd S r/   )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   may_share_memoryr  r   r   r   r    s   & )r
   r  r  
rosen_hessr   rM   
startswithgetattrr  r'  r:  anyr[  combinations)	rV   rt   r`   ru   rg   r@   r<  r  r  r   )rt   r  r   #test_minimize_callback_copies_arrayQ  s>   








"z6TestOptimizeSimple.test_minimize_callback_copies_arrayr  c                 C   s   dd }dd }t dg}||}|}|dv rd }tj||||tddd	}t||j|j |d
kr9t	d ||j|ksBJ d S )Nc                 S   s   | d d S r"   r   r   r   r   r   r`        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  rl  r~  r  r  zSLSQP returns slightly worse)
r   r:   r
   r   r  r   r   rw   r   r   )rV   rt   r`   r  r@   f0ru   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)rE   r        @g      @r#   )r1   r   r:   r   r   r   r   r_     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:   concatenaterY   r   r  r   r   r   cons  s   $z:TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.cons)rG   rE   r&   r  r  ineqtyperw   rt   r  )rI   r#   r   r   rH   g-q=r}   )r   r:   r
   r   r   r   )rV   r_   r  r@   r   r   r   r   test_slsqp_respect_bounds  s   
"z,TestOptimizeSimple.test_slsqp_respect_bounds)r   r   rr   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   r~  r   )r   ru   r  rg   ry   r  r   )r   rM   r   r
   r  r  r  r  rd   rg   r   rw   r   rx   hasattrry   ngevrz   )rV   rt   MAXITERr@   sfr<  r   r   r   r   test_respect_maxiter  s(   



z'TestOptimizeSimple.test_respect_maxiterc           	   
   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 )Nr8   r   皙?r   Q?r#   r  r   r   r   r   r     s   , zWTestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints.<locals>.<lambda>r  r  r   r`  r~  )r  ru   rg   rt   rv   )	r
   r  r  r  r   rM   r   r  r   )	rV   r  r_   ru   rg   rw   r  r@   r   r   r   r   2test_respect_maxiter_trust_constr_ineq_constraints  s   
zETestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraintsc           
      C   s   dd }dd }t dg}t||}tj||d|dgd}tj||d	gd
}tj||d|dgd	gd}tj||d|dgdgd}|||||fD ]}	|	jsSJ qLt|jddd t|jddd t|jddd t|jddd t|jddd d S )Nc                 S      | d S r  r   r   r   r   r   r_        z6TestOptimizeSimple.test_minimize_automethod.<locals>.fc                 S   s   | d S r  r   r   r   r   r   r    r  z9TestOptimizeSimple.test_minimize_automethod.<locals>.consrh  r  r  )r  )r   r   r   )r  r   r   r   r   r.   r}   r#   r   )r   r:   r
   r   r   r   r   )
rV   r_   r  r@   sol_0sol_1sol_2sol_3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  r3   z=TestOptimizeSimple.test_minimize_coerce_args_param.<locals>.Yc                 S   s   d| |  S r  r   r  r   r   r   dY_dx  r  zATestOptimizeSimple.test_minimize_coerce_args_param.<locals>.dY_dx)rH   r   r   r   r   r   r#   r   r   rH   r   r   )ru   rs   rt   r/   )r   r:   r'   randnr'  r
   r   )rV   r	  r
  r  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)rr   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   first_step_sizescaler@   r   r   r_     s
   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.fc                    s   t  | d d  gS )Nr   r   r  r   )r  r   r   r     r7   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.g)rr   r   r  )gtolr.  )r  r         r  z{0} {1}: {2}: {3}rE   err_msgrH   r   g)\(?rG   )
r[  r\  r  r
   r   formatr   r   r   r   )	rV   scalesr]  r_   r  rt   rv   r   r  r   r  r   test_initial_step_scaling  s8   "z,TestOptimizeSimple.test_initial_step_scaling)r  r  r  rr  r  r  r  r  r  r`  rd  ra  re  rb  c                    sR  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}t jddZ t >}|td |td |td t	
|	|
|D ]\}}}dg tj|||||tddd}t|jd qcW d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr(   r   c                 S   rN  r/   rO  r   r   r   r   r`   Q  s   z0TestOptimizeSimple.test_nan_values.<locals>.funcc                    s,    d  d7  <  d dkrt jS t j S r0  )r   rK  r'   rU  r   countr   r   func2T  s   
z1TestOptimizeSimple.test_nan_values.<locals>.func2c                 S   s   t dgS NrE   r  r   r   r   r   rd   [  r  z0TestOptimizeSimple.test_nan_values.<locals>.gradc                 S      t dggS r  r  r   r   r   r   rg   ^  r   z0TestOptimizeSimple.test_nan_values.<locals>.hessrE   r  rb  re  ra  rd  rb  re  ra  rd  r   rP  delta_grad == 0.*.*does not use Hessian.*.*does not use gradient.*rl  r~  )ru   rg   rt   rv   F)r   r'   r*   r:   r   r   filterUserWarningRuntimeWarningr[  r\  r
   r   r  r   r   )rV   rt   r`   r  rd   rg   r@   
needs_grad
needs_hessfuncsgradshessssupr_   r  hr   r   r  r   test_nan_valuesF  s0   Pz"TestOptimizeSimple.test_nan_values)r  r  rr  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 {})rd   rg   r   r   r   r#  r$  r
   r   r`   rO   r   r'  rT   array_equalrX   r  )rV   rt   ru   rg   r+  r  r   r   r   test_duplicate_evaluationsw  s(    z-TestOptimizeSimple.test_duplicate_evaluationsN)#rj   rk   rl   rM  rR  rV  r_  rg  rk  rv  rz  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   rF    sL    			&
8

4
,rF  rt   )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   r_     r   z$test_minimize_with_scalar.<locals>.f   )rq  r   r$  rI   r   r}   )r
   r   r   r   r   )rt   r_   r   r   r   r   test_minimize_with_scalar  s   
r2  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   rP   rU   r   r   r   rW     s   
zTestLBFGSBBounds.setup_methodr  c                 C   s    d| |d | |d |   S )NrE   r   r   r   rh   r   r   r   rw     r%   zTestLBFGSBBounds.func                 C   s   ||d  S r   r   rh   r   r   r   ru     r  zTestLBFGSBBounds.jacc                 C   s   |  ||| ||fS r/   rw   ru   rh   r   r   r   fj  r7   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
   rw  rw   ru   r   r   rP   rV   r   r_   ry  r   r   r   test_l_bfgs_b_bounds  s   z%TestLBFGSBBounds.test_l_bfgs_b_boundsc                 C   sL   t j| jddgd| jd\}}}|d dksJ |d t|| jdd d S )	Nr   r   r  )rs   r   r   r7  r+   r}   )r
   rw  r6  r   r   rP   r8  r   r   r   r    s
   z%TestLBFGSBBounds.test_l_bfgs_b_funjacc                 C   sH   t j| jddgd| j| jd}|d sJ |d t|j| jdd d S )	Nr   r   r  rt   ru   r   r   r  r+   r}   )r
   r   rw   ru   r   r   r   rP   )rV   r   r   r   r   test_minimize_l_bfgs_b_bounds  s
   z.TestLBFGSBBounds.test_minimize_l_bfgs_b_boundsr   )r   r   r  c                 C   sP   t jtdd tj| jddgd| j|d W d    d S 1 s!w   Y  d S )Nz
.*bounds.*r   r   r   r  r;  )r   r	   r?   r
   r   rw   ru   )rV   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  finite_diff_rel_step)rs   rt   ru   r   rv   r   r  r+   r}   )	r[  r\  r
   r   rw   r   r   r   rP   )rV   r^  argssru   rs   r   r   r   r    test_minimize_l_bfgs_b_bounds_FD  s   z1TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds_FDNr:  )rj   rk   rl   rW   rw   ru   r6  r9  r  r<  r   r   r0  r=  r@  r   r   r   r   r3    s    



r3  c                   @   s   e Zd Zdd Z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ejdg ddd Zejdg ddd Zejdg ddd ZdS ) TestOptimizeScalarc                 C   
   d| _ d S )Nr&   )rP   rU   r   r   r   rW        
zTestOptimizeScalar.setup_methodr&   c                 C   s   || d d S )zObjective functionr#   r  r   )rV   r   r  r   r   r   rw        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 S )	Nr+   r}   r  r-  brackTr{   r   ir      )r
   brentrw   r   rP   r  r   r   r   
test_brent  s   zTestOptimizeScalar.test_brentc                 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 S )Nr+   r}   rE  rF  TrH  r   rI  rs  )r   r   r   )rQ   r{   r#   )r
   goldenrw   r   rP   r   )rV   r   maxiter_test_casesrQ   r@   nfev0rx   r   r   r   test_golden  s"   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   r7  r}   r   r+   )	r
   	fminboundrw   r   rP   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 scalar.*r   )r   r#   r   r   r+   r}   )r   r	   r?   r
   rR  rw   r   rM   r:   r   rP   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   rw     r  z,TestOptimizeScalar.test_gh11207.<locals>.funr   )r
   rR  )rV   rw   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}   Brentr   rH   r~  r   rE  r&   )bracketrs   rt   )rt   rs   rI  rN  )r   r   Bounded)r   rs   rt   r   r7  )r   r   boundedr   r&   )r   r   r   rt   rs   r#   r$  )r
   minimize_scalarrw   r   r   rP   r   r  r   r:   r>   r?   rM   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  )rw   rX  rs   r   r  rQ   r  rv   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  )rX  rt   rv   r+   r}   r  )r
   r\  rw   r  r   r   rP   )rV   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&   )rs   r
   r\  rw   rU   r   r   r   &test_minimize_scalar_coerce_args_param  s   z9TestOptimizeScalar.test_minimize_scalar_coerce_args_paramrt   )rK  rZ  rN  c                 C   s"   dD ]}t j| jd|id qd S )N)r   r   r#   rH   rp   )rv   r_  )rV   rt   rp   r   r   r   	test_disp  s   zTestOptimizeScalar.test_dispc                 C   sn   t j| j|ddgd}t|dsJ t|dsJ t|ds J t|ds'J t|ds.J t|d	s5J d S )
Nr*  r   rt   r   r   r   r  rw   rx   r   )r
   r\  rw   r  )rV   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L t 0}|td	 |td
 |td dg tj	||||t
ddd}t|jd W d    n1 sPw   Y  W d    d S W d    d S 1 shw   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   rK  r0   r   r  r   r   r`     s   z0TestOptimizeScalar.test_nan_values.<locals>.func)r   r   r   r"  r   rP  r   r!  r"  rl  r~  )rX  r   rt   rv   F)r   r'   r*   r   r   r#  r$  r%  r
   r\  r  r   r   )rV   rt   r`   rX  r   r+  r   r   r  r   r-    s    Pz"TestOptimizeScalar.test_nan_valuesNrW  )rj   rk   rl   rW   rw   rL  rQ  rS  rT  rU  r]  r^  r`  r   r   r0  ra  rc  r-  r   r   r   r   rA    s"    
<#


rA  c                   C   s   t ttjtjdd d S )Ng{GzrM  )r>   r?   r
   rK  r   r5   r   r   r   r   test_brent_negative_tolerance  r7   rd  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  rE   r   r   ru   rg   rs  rt   r   r7  r   )r   r:   r
   r   r  r  r  r   r  r   r   rV   r@   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+   )ru   rg   rt   rs  r7  r   r}   )r   r:   himmelblau_x0r
   r   
himmelblauhimmelblau_gradhimmelblau_hessr   r  r   r   himmelblau_xoptrw   himmelblau_minrh  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  rE   rY  r   r   rg  r   r7  r   )
r   r:   r
   r   r  r  r   r  r   r   rh  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 rf  )r   r:   r
   r   r  r  r   r   r  r   r   rh  r   r   r   test_hessian_update_strategy  s   
z)TestNewtonCg.test_hessian_update_strategyN)rj   rk   rl   ri  rp  rq  rr  r   r   r   r   re    s
    

re  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@rH   rI   r   r   r   )rI   r#   r  r   rE   r   r   r   rs  r  rI   r   r   r   r   r   rI   r   r   r   r   rt  rI   r   r   r   r  rH   )rE   r   r   r   )rE   r   r   r#   r&   )r  r   r   r#   gffffff?g333333@)rE   r   r   r   r+   r}   g333333)r
   r  _line_for_searchr   r:   r   r3  )line_for_searchlower_boundupper_boundr@   x1	all_testsr   alphalmin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   r1   r:   r   r   r   r   r   %      z(test_linesearch_powell.<locals>.<lambda>ru  r   rv  r   rw  r#   rx  r&   ry  r  r  r   r   r         ?rI   r   r   r   皙?r  r   r   r   r   )fvalrs  r+   r}   rs  r|  r}  r  )r
   r  _linesearch_powellr   r:   r3  r   linesearch_powellr`   r   r  r|  r}  r  xilr_   rc   r)   r   r   r   test_linesearch_powell   s<   

r  c               
   C   s  t jj} dd }tg d}||}tdgd }tdgd }tg ddftg d	d
ftg ddftg ddftg ddftg ddftg ddff}|D ]/\}}| |||d|||d\}	}
}t|	||| dd t|
|| dd t||| dd q_tdgd dg }tdgd dg }tg ddftg d	dftg ddftg ddftg ddftg ddftg ddff}|D ]/\}}| |||d|||d\}	}
}t|	||| dd t|
|| dd t||| dd qtg d}||}tg dd ftg d	dftg ddftg dd!ff}|D ]4\}}| |||d|||d\}	}
}t|	||||  dd t|
|||  dd t||| dd q@tg d}||}tdtj tj dg}ttjdtjdg}tg ddftg d	dftg ddftg ddftg ddftg ddftg ddff}|D ]0\}}| |||d|||d\}	}
}t|	||| dd t|
|| dd t||| dd qtg d}||}tg dd ftg d	dftg ddftg dd!ff}|D ]4\}}| |||d|||d\}	}
}t|	||||  dd t|
|||  dd t||| dd q4d S )"Nc                 S   r  r  r  r   r   r   r   r   J  r  z0test_linesearch_powell_bounded.<locals>.<lambda>ru  g       r   r  rv  r   rw  r#   rx  r&   ry  r  r  r  r  r  r  r  r   r  r+   r}   g333333ӿrH   g?r  rF   g333333ÿ)r  r   r   r#   r  g333333)r
   r  r  r   r:   r   r3  r  r   r   r   test_linesearch_powell_boundedE  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)rH   r   r   )r#   r#   r#   )r   r:   r
   rosen_hess_prodrY   r  r   )rV   r   rc   hpdothpr   r   r   	test_hess  s
   zTestRosen.test_hessN)rj   rk   rl   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.
       r   r   )rc   r   r  r  br   r   r   rk    s   rk  c                 C   sn   | \}}t d|d  d| |  d|  d|d   d d|d  d| |  d|d   d|  d gS )Nr   rH   *   r#         r   r  rc   r   r  r   r   r   rl    s   2.rl  c                 C   s^   | \}}t d|d  d|  d d| d|  gd| d|  d| d|d   d ggS )N   r#   r   r  r  r  r  r   r   r   rm    s   *&rm  gHzGѿgrH   r#   rI   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   r8   r   r  r   r  r#   r  r   r   r   r   r`        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    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   r     r  z4test_minimize_multiple_constraints.<locals>.<lambda>r%  r  r  )}   r   r   r.  r}   )r
   r   r   r   )r`   r  r  r  r_   r   r   r   r   "test_minimize_multiple_constraints  s   r  c                   @   r  )TestOptimizeResultAttributesc                 C   s8   ddg| _ tj| _tj| _tj| _tj| _	ddg| _
d S )Nr   )rI   rh  )r@   r
   r  r`   r  ru   r  rg   r  ri   r   rU   r   r   r   rW      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   rx   r   r   rz   rw   r  r  r   z7Method .+ does not use (gradient|Hessian.*) information)rt   ru   rg   ri   )r   r   r#  r%  r
   r   r`   r@   ru   rg   ri   r  dir
isinstancer  str)rV   
attributesskiprt   r+  r   	attributer   r   r   test_attributes_present  s&   
z4TestOptimizeResultAttributes.test_attributes_presentN)rj   rk   rl   rW   r  r   r   r   r   r    s    r  c                 G   s^   | \}}|\}}}}}}	}
}}}}}}||d  || |  ||d   ||  ||  |	 S r  r   r  r   r   r  r  r  r  ry  r   r_   r  r,  r  r   r  r  r  r   r   r   f1  s   8r  c                 G   sP   | \}}|\}}}}}}	}
}}}}}}|
 t || d || d   |  S r  r   r  r   r   r   f2%     *r  c                 G   sP   | \}}|\}}}}}}	}
}}}}}}| t || d || d   |  S r  r   r  r   r   r   f3+  r  r  c                 G   s0   t | g|R  t| g|R   t| g|R   S r/   )r  r  r  )r  r   r   r   r   
brute_func1  r  r  c                   @   4   e Z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#   rH   r   r   r   r   ,   r   r#   r  r   r-  rG   r#  r   g      ?g_}gi?)r   slicerrangesr   r:   rP   rU   r   r   r   rW   7  s   zTestBrute.setup_methodc                 G   s   t |g|R  S r/   )r  )rV   r  r   r   r   r   r  <  rD  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rs   r{   finishr   r  r}   r   )	r
   bruter  r  r   r   r   rP   r   )rV   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'  shaper   r   r   r   r_   Z  s   zTestBrute.test_1D.<locals>.fr"  rH   )Nsr  )r
   r  ru  r   r   r   test_1DW  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#   )rs   r{   r  workersr   r   )r
   r  r  r  r   r   )rV   r  	resbrute1r   r   r   test_workersa  s   zTestBrute.test_workersN)rj   rk   rl   rW   r  r  r  r  r   r   r   r   r  5  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   
objective1t  s   
z*test_cobyla_threadsafe.<locals>.objective1c                    s     d | d d d S )Nr-   r   r   r#   r  r   r  r   r   
objective2x  s   
z*test_cobyla_threadsafe.<locals>.objective2COBYLAc                         t jdg dS NrI   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tasksr2  r   r   )r  r  r  r  r   test_cobyla_threadsafem  s   
"r  c                   @   r  )TestIterationLimitsc                 C   rB  rQ  )r  rU   r   r   r   rW     rC  z TestIterationLimits.setup_methodc                 C   s\   |  j d7  _ t|d d |d d  t|d |d }}t|d | |d  S )Nr   r   r#   rl  rG   )r  r   rS  arctan2r0   )rV   r  rA   r2  r   r   r   	slow_func  s   4zTestIterationLimits.slow_funcc                 C      |  dd d S )Nr      check_limitsrU   r   r   r   test_neldermead_limit  r  z)TestIterationLimits.test_neldermead_limitc                 C   r  )Nr  rJ   r  rU   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   rx   r   rQ   r   r   r  )rQ   r   )r  r
   r   r  r   r3  )rV   rt   default_itersstart_vmfevr   mitr   r   r   r    sb   

 

(z TestIterationLimits.check_limitsN)rj   rk   rl   rW   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 r/   r   r   r   r   r   rw     r  z2test_result_x_shape_when_len_x_is_one.<locals>.func                 S   s   d|  S Nr  r   r   r   r   r   ru     r  z2test_result_x_shape_when_len_x_is_one.<locals>.jacc                 S   r  r  r  r   r   r   r   rg     r   z3test_result_x_shape_when_len_x_is_one.<locals>.hess)r   r   rr   r   r  rW  r  r  r-   r   r   )r`  rd  ra  re  rb  r   rc  )r
   r   r   r:   r   r  )rw   ru   rg   r]  rt   r   r   r   r   %test_result_x_shape_when_len_x_is_one  s   r  c                   @   r  )FunctionWithGradientc                 C   rB  rQ  )number_of_callsrU   r   r   r   r    rC  zFunctionWithGradient.__init__c                 C   s$   |  j d7  _ t|d d| fS r"   )r  r   r1   r  r   r   r   r    s   zFunctionWithGradient.__call__Nr  r   r   r   r   r    s    r  c                   C   s   t  S r/   )r  r   r   r   r   function_with_gradient  s   r  c                 C   s   t | }tddg}t||d | j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 )
NrE   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_functionr@   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 )
NrE   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_function	  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.
    rE   rG   r   Nr   r-   r#   r8   rH   )	r   r  r
   r   r   r:   r   r  rw   )r  r  ru   rg   r@   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   7	      ztest_gh12696.<locals>.<lambda>Fr   )r   r
   rR  r   r   r   r   r   r   test_gh126963	  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  )rH   r#   r#   r  Tc                    s0   |r	| j dks	J |rt|      d S d S )Nr   )r  r   )r   
check_sizecheck_values)i_eblbr   r   check_xD	  s
   z(setup_test_equal_bounds.<locals>.check_xc                        |  t | S r/   )r
   r  r   r  r   r   r`   J	     
z%setup_test_equal_bounds.<locals>.funcc                    r  r/   )r
   r  r   r  r   r   rd   N	  r  z%setup_test_equal_bounds.<locals>.gradc                    s    |  d S r/   r   )r   rs   r  r   r   r  R	  r  z)setup_test_equal_bounds.<locals>.callbackc                    s    | dd | dd d S )NFr  r   r   r   r   r  r   r   constraint1U	     z,setup_test_equal_bounds.<locals>.constraint1c                    "    | dd t | }d|d< |S )NFr	  r   r   r   
zeros_liker   dcr  r   r   	jacobian1Y	     
z*setup_test_equal_bounds.<locals>.jacobian1c                    s    | dd | dd d S )NFr	  r#   rH   rG   r   r   r  r   r   constraint2_	  r  z,setup_test_equal_bounds.<locals>.constraint2c                    r  )NFr	  r   r#   r  r  r  r   r   	jacobian2c	  r  z*setup_test_equal_bounds.<locals>.jacobian2)r  r  rW  Fr5  c                    s    | | fS r/   r   r   r}  r   r   r   u	  r  z)setup_test_equal_bounds.<locals>.<lambda>c                 S   s   t t| |S r/   )listzipr  ubr   r   r   r   y	  r   r4  )	r]  kwdsbound_typesr  	callbacksr  r  r@   r  )TT)r   r'   r*   rU  r:   r   r3  r   )r@   r  r  r
  r  r  r  c1ac1bc2ac2br]  r  r  r  r  datar   )r  r`   rd   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  ru   FNzTolerance violation on aarchr  r  r@   r  r  z)Only SLSQP supports nonlinear constraints)r@   rt   r   r  r  )rt   ru   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:   rK  r
   r  )r   new_xr   r   r   rw   	  s   
ztest_equal_bounds.<locals>.funr#   rb  g>r   )platformmachiner   r  eb_dataupdater
   r   r  r  r   r   rw   r   r   rK  ru   r  r  r   )rt   r  r"  r  r  r  r  r@   r  test_constraintsreference_constraints	fd_neededr   r   expectedrw   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 d
}t j|||| |d}|js;J t|j|dd	gd |  dkr{dd }t|tj	 d}t j|||| |gd}|jdu sjJ t|j|dd	g |jdks}J d S d S )Nr   c                 S   s   t j| | S r/   )r   linalgnorm)r   p1r   r   r   r_   	  r  z test_all_bounds_equal.<locals>.f)r   r   )r#   r#   )rE   r  r$  rE   r  )r#   r[  r#   r  c                 S   rG  r/   r  r   r   r   r   con	  rC  z"test_all_bounds_equal.<locals>.conrI   )r   rt   r  Fr  )
r
   r   r   r   rw   rx   upperr   r   r3  )rt   r_   r   r@   r   rs   r2  nlcr   r   r   test_all_bounds_equal	  s,   


	r5  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   rH   r   r#   r   r   r   r   r   r_   	  s   (ztest_eb_constraints.<locals>.fc                 S   s$   | d | d  | d  | d  d S )Nr   r   r#   rH   (   r   r   r   r   r   cfun	  s   $z!test_eb_constraints.<locals>.cfunr  r  )r   rl  r   )r   r   r   )r   r#   rH   r   r  )r@   rt   r   r  r   rw   r  )r_   r7  r  r   r   r   r   test_eb_constraints	  s   
r8  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\  rootroot_scalarlinprogquadratic_assignmentekkir  )r   maximizemaximize_scalar)
r   r   r   r   r   r   itemsr   r>   r?   )solver_methodssolverr]  rt   unknown_solver_methodr   r   r   test_show_options
  s$   rD  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  rh  r  r   r   )r@   rt   r   )r
   r   r   r  r   r:   r   r   r   r   test_bounds_with_list&
  s   
rE  c            
      C   s   dd } dd }dd }g d}g d}t d	d
 }tD ]*}d }d }||v r)|}||v r/|}tj| ||||d}	t|	jt t |dd qd S )Nc                 S   s*   t t | }| |8 } | | 9 } t | S r/   )r   r=   r  r1   r  r   r   r   fquad2
  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_jac8
  s   z3test_x_overwritten_user_function.<locals>.fquad_jacc                 S   s   t t | d S r  )r   eyer  r   r   r   r   r   >
  r  z2test_x_overwritten_user_function.<locals>.<lambda>)r  rd  ra  re  rb  r`  )rd  ra  re  rb  r`  r   r&   rc  g-C6*?r}   )	r   onesr   r
   r   r   r   r=   r  )
rF  rG  
fquad_hessmeth_jac	meth_hessr@   methru   rg   r   r   r   r    test_x_overwritten_user_function.
  s    rN  c                   @   r  )TestGlobalOptimizationc                 C   s   dd }t j|ddt |dgt |dgt |dgg}|D ]4}t|t js*J t|ds1J t|ds8J t|ds?J t|d	sFJ t|d
sMJ t|dsTJ q d S )Nc                 S   r  r  r   r   r   r   r   r`   X
  r  zDTestGlobalOptimization.test_optimize_result_attributes.<locals>.funcr   )r@   )r#  r   r   r   r  rw   rx   r   )r
   basinhoppingdifferential_evolutionshgodual_annealingr  r  r  )rV   r`   r  r   r   r   r   test_optimize_result_attributesW
  s   z6TestGlobalOptimization.test_optimize_result_attributesN)rj   rk   rl   rT  r   r   r   r   rO  U
  r  rO  )brm   r[  r%  numpyr   numpy.testingr   r   r   r   r   r   r   r   r	   r>   scipyr
   scipy.optimize._minimizer   r   r   r   scipy.optimize._linprogr   scipy.optimize._rootr   scipy.optimize._root_scalarr   scipy.optimize._qapr   (scipy.optimize._differentiable_functionsr   r   scipy.optimize._optimizer   r   rB   rC   rn   r   r	  r  r  r  r!  r(  r6  r=  r?  rC  rD  rE  rF  r   r0  r2  r3  rA  rd  re  r  r  r  r  rk  rl  rm  rj  rn  ro  r  r  r  r  r  r  r  r  r  r  r  fixturer  r  r  r  r   r!  r'  xfail_on_32bitr.  r5  r8  rD  rE  rN  rO  r   r   r   r   <module>   s    $00   K)     

= U,?%|"8#A	
	T
>
'