o
    Ö­jïñ ã                   @   s¼  d Z ddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZmZmZ ddlZddlmZ ddlZddlmZ ddlmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7 ej8j9Z9dd„ Z:G dd„ dƒZ;G dd„ de;ƒZ<dd„ Z=dd„ Z>dd„ Z?dd„ Z@d d!„ ZAd"d#„ ZBd$d%„ ZCej8jDd&d'„ ƒZEej8jDd(d)„ ƒZFd*d+„ ZGG d,d-„ d-e<ƒZHG d.d/„ d/e<ƒZIG d0d1„ d1e<ƒZJG d2d3„ d3e<ƒZKG d4d5„ d5e;ƒZLej8 Md6g d7¢¡d8d9„ ƒZNG d:d;„ d;ƒZOG d<d=„ d=ƒZPG d>d?„ d?ƒZQd@dA„ ZRG dBdC„ dCƒZSdDdE„ ZTdFdG„ ZUdHdI„ ZVdJdK„ ZWdLdM„ ZXe4G dNdO„ dOƒƒZYdPdQ„ ZZdRdS„ Z[dTdU„ Z\dVdWgZ]dXdYgZ^dZZ_d[d\„ Z`G d]d^„ d^ƒZad_d`„ Zbdadb„ Zcdcdd„ Zddedf„ ZeG dgdh„ dhƒZfej8jDej8 gdi¡djdk„ ƒƒZhG dldm„ dmƒZidndo„ ZjG dpdq„ dqƒZkejldrds„ ƒZmdtdu„ Zndvdw„ Zodxdy„ Zpdzd{„ Zqd|d}„ Zrerƒ Zsej8 td~¡ej8juejvdd€�d� d‚ dƒ d„kd~d…�ej8 Md6esd† ¡ej8 Md‡esd‡ ¡ej8 Mdˆesd‰ ¡ej8 MdŠesdŠ ¡ej8 Md‹esdŒ ¡d�dŽ„ ƒƒƒƒƒƒƒZwej8 Md6esd† ¡d�d�„ ƒZxd‘d’„ Zyd“d”„ Zzd•d–„ Z{d—d˜„ Z|G d™dš„ dšƒZ}d›dœ„ Z~d�dž„ Zej8 Md6dŸd g¡ej8 Md¡e-e.e/e0e1e2g¡d¢d£„ ƒƒZ€dS )¤zx
Unit tests for optimization routines from optimize.py

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

é    N)Úassert_allcloseÚassert_equalÚassert_almost_equalÚassert_no_warningsÚassert_warnsÚassert_array_lessÚsuppress_warnings)Úraises)Úoptimize)ÚBoundsÚNonlinearConstraint)ÚMINIMIZE_METHODSÚMINIMIZE_METHODS_NEW_CBÚMINIMIZE_SCALAR_METHODS)ÚLINPROG_METHODS)ÚROOT_METHODS)ÚROOT_SCALAR_METHODS)ÚQUADRATIC_ASSIGNMENT_METHODS)ÚScalarFunctionÚ
FD_METHODS)Ú
MemoizeJacÚshow_optionsÚOptimizeResult)ÚrosenÚ	rosen_derÚ
rosen_hess)Ú
coo_matrixÚ
csc_matrixÚ
csr_matrixÚ	coo_arrayÚ	csr_arrayÚ	csc_array)Úarray_api_compatible)Úxp_assert_equalÚarray_namespacec               	   C   sV  dd„ } dd„ }t  dg¡}t | ||¡}t|dƒ tj| ||ddd	�}t|dƒ tj| ||d
d�}t|dƒ tj| ||d
ddd�}t|dƒ ttj| ||dd�d ƒ}|dksZJ ‚ttj| ||dddd�d ƒ}|dksoJ ‚dd„ }dd„ }t  ddd¡}tj|||ddd�}t|dƒ tttj|||ddd� tjt	t
tddd�}|dk s©J ‚d S )Nc                 S   s   ddt  |  ¡  S ©Né   ©ÚnpÚexp©Úx© r,   ú_/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_optimize.pyÚexpit.   ó   ztest_check_grad.<locals>.expitc                 S   s    t  |  ¡dt  |  ¡ d  S ©Nr&   é   r'   r*   r,   r,   r-   Ú	der_expit1   ó    z"test_check_grad.<locals>.der_expitç      ø?r   ÚrandoméÒ  )Ú	directionÚseedç�íµ ÷Æ°>)Úepsilon)r:   r7   Úrngçš™™™™™¹?çH¯¼šò×z>c                 S   s   | t  | ¡  ¡ S ©N)r(   ÚsinÚsumr*   r,   r,   r-   Úx_sinxJ   ó   ztest_check_grad.<locals>.x_sinxc                 S   s   t  | ¡| t  | ¡  S r>   ©r(   r?   Úcosr*   r,   r,   r-   Ú
der_x_sinxM   ó   z#test_check_grad.<locals>.der_x_sinxr1   çš™™™™™É?)r7   r;   Úrandom_projectionÚallg�íµ ÷Æ >)r(   Úarrayr
   Ú
check_gradr   ÚabsÚarangeÚassert_raisesÚ
ValueErrorÚhimmelblau_gradÚhimmelblau_hessÚhimmelblau_x0)r.   r2   Úx0ÚrrA   rE   r,   r,   r-   Útest_check_grad*   sL   

ÿ

ÿ
ÿÿ
ÿ
þ
ÿrU   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚCheckOptimizezÂ Base test case for a simple constrained entropy maximization problem
    (the machine translation example of Berger et al in
    Computational Linguistics, vol 22, num 1, pp 39--72, 1996.)
    c                 C   s‚   t  g d¢g d¢g d¢g d¢g d¢g¡| _t  g d¢¡| _t  dt j¡| _t  g d¢¡| _d| _t	 
¡ | _t	 
¡ | _t	 
¡ | _d S )	N©r&   r&   r&   )r&   r&   r   )r&   r   r&   )r&   r   r   )ç      ð?ç333333Ó?ç      à?é   )ç        g¾š\¼ºËà¿g¢ß)ªŸ3ß?éè  )r(   rJ   ÚFÚKÚzerosÚfloat64ÚstartparamsÚsolutionÚmaxiterÚ	threadingÚlocalÚ	funccallsÚ	gradcallsÚtrace©Úselfr,   r,   r-   Úsetup_methodf   s   
ü

zCheckOptimize.setup_methodc                 C   s¬   t | jdƒs
d| j_t | jdƒsd| j_| j jd7  _| jjdkr&tdƒ‚t | j|¡}t t	t 
|¡ƒ¡}|t | j|¡ }t | jdƒsJg | j_| jj t |¡¡ |S )NÚcr   r&   ip  z+too many iterations in optimization routineÚt)Úhasattrrg   rm   rh   ÚRuntimeErrorr(   Údotr^   Úlogr@   r)   r_   ri   rn   ÚappendÚcopy)rk   r+   Úlog_pdotÚlogZÚfr,   r,   r-   Úfunct   s   zCheckOptimize.funcc                 C   sl   t | jdƒs
d| j_| j jd7  _t | j|¡}t tt |¡ƒ¡}t || ¡}t | j 	¡ |¡| j
 S )Nrm   r   r&   )ro   rh   rm   r(   rq   r^   rr   r@   r)   Ú	transposer_   ©rk   r+   ru   rv   Úpr,   r,   r-   Úgrad†   s   zCheckOptimize.gradc                 C   s`   t  | j|¡}t  tt  |¡ƒ¡}t  || ¡}t  | jjt  t  |¡| jt  | jj|¡ ¡¡S r>   )r(   rq   r^   rr   r@   r)   ÚTÚdiagrz   r,   r,   r-   Úhess�   s   
"ÿzCheckOptimize.hessc                 C   s   t  |  |¡|¡S r>   )r(   rq   r   ©rk   r+   r{   r,   r,   r-   Úhessp–   rB   zCheckOptimize.hesspN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rl   rx   r|   r   r�   r,   r,   r,   r-   rV   `   s    	rV   c                   @   s
  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	j
 d¡dd„ ƒZdd„ Zdd„ Zdd„ Ze	j
 ddgddgddgddgg¡dd„ ƒZdd „ Ze	j
jd!d"�d#d$„ ƒZd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;S )<ÚCheckOptimizeParameterizedc           	   
   C   s
  | j r0| j| jddœ}tj| j| jdd| j|d�}|d |d |d |d	 |d
 f\}}}}}ntj| j| j| jd| jd| jdd�}|\}}}}}t	|  |¡|  | j
¡dd� | jjdkscJ | jjƒ‚| jjdksoJ | jjƒ‚t	| jjdd… g d¢g d¢gddd� d S )NF©rd   ÚdispÚ
return_allr,   ÚCG)ÚargsÚmethodÚjacÚoptionsr+   ÚfunÚnfevÚnjevÚstatusT)rd   Úfull_outputrˆ   Úretallr9   ©Úatolé	   é   r1   é   )r   ç      à¿rZ   )r   gÃ;Ó±.à¿g)`$|;¾ß?ç›+¡†›„=r=   ©r–   Úrtol)Úuse_wrapperrd   rˆ   r
   Úminimizerx   rb   r|   Úfmin_cgr   rc   rg   rm   rh   ri   rn   )	rk   Ú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&   ç      ø¿rZ   r1   r'   )rT   r,   r,   r-   rw   ¼   s   z8CheckOptimizeParameterized.test_cg_cornercase.<locals>.fg      è¿r[   éG   rŠ   ©rŒ   rZ   çñhãˆµøä>©r�   )r(   Úlinspacer
   rŸ   Úsuccessr   r+   )rk   rw   rS   Úsolr,   r,   r-   Útest_cg_cornercase»   s   
ýz-CheckOptimizeParameterized.test_cg_cornercasec              
   C   s  | j r8| j| jddœ}tj| j| j| jdd|d�}|d |d |d |d	 |d
 |d |d f\}}}}}}}	ntj| j| j| jd| jd| jdd�}
|
\}}}}}}}	t	|  |¡|  | j
¡dd� | jjdksmJ | jjƒ‚| jjdksyJ | jjƒ‚t	| jjdd… g d¢g d¢gddd� d S )NFr‡   ÚBFGSr,   ©r�   rŒ   r‹   rŽ   r+   r�   r�   Úhess_invr�   r‘   r’   T©r‹   rd   r“   rˆ   r”   r9   r•   é
   é   é   )r   g˜&ó/LÍà¿gB__E7ß?)r   g$ŸÙÜËà¿gÂ
|²3ß?r›   r=   rœ   )rž   rd   rˆ   r
   rŸ   rx   rb   r|   Ú	fmin_bfgsr   rc   rg   rm   rh   ri   rn   )rk   r¡   r¢   r£   r¤   ÚgoptÚHoptr¥   r¦   r§   r¨   r,   r,   r-   Ú	test_bfgsÆ   s<   ÿþþý
ÿÿÿ
ýz$CheckOptimizeParameterized.test_bfgsc                 C   sl   t jtdd��% t g d¢¡}| jt d¡ dœ}tjtj	|dd|d� W d   ƒ d S 1 s/w   Y  d S )	Nú+'hess_inv0' matrix isn't positive definite.©Úmatch©gÍÌÌÌÌÌô?çffffffæ?çš™™™™™é?çffffffþ?ç333333ó?é   ©rˆ   Ú	hess_inv0r³   r,   ©rS   rŒ   r‹   rŽ   )
Úpytestr	   rO   r(   rJ   rˆ   Úeyer
   rŸ   r   )rk   rS   r¡   r,   r,   r-   Útest_bfgs_hess_inv0_negè   s   ÿ"üz2CheckOptimizeParameterized.test_bfgs_hess_inv0_negc                 C   sv   t jtdd��* t g d¢¡}t d¡}d|d< | j|dœ}tjtj	|dd	|d
� W d   ƒ d S 1 s4w   Y  d S )Nr¾   r¿   rÁ   rÆ   r   ©r   r   rÇ   r³   r,   rÉ   )
rÊ   r	   rO   r(   rJ   rË   rˆ   r
   rŸ   r   )rk   rS   rÈ   r¡   r,   r,   r-   Útest_bfgs_hess_inv0_semiposò   s   
ÿ"úz6CheckOptimizeParameterized.test_bfgs_hess_inv0_semiposc                 C   sn   t j}t g d¢¡}| jdt d¡ dœ}t j||dd|d�}t j||ddd| jid�}t|j|jd	d
� d S )NrÁ   ç{®Gáz„?rÆ   rÇ   r³   r,   rÉ   rˆ   r9   r•   )	r
   r   r(   rJ   rˆ   rË   rŸ   r   r�   )rk   r�   rS   r¡   r¢   Úres_truer,   r,   r-   Útest_bfgs_hess_inv0_sanityþ   s   ÿÿz5CheckOptimizeParameterized.test_bfgs_hess_inv0_sanityúignore::UserWarningc              	      sž   dd„ ‰ ‡ fdd„}dg}t jdd��2 | jr*d| ji}tjˆ ||d	d
|d�d }n
tjˆ ||| jd�}t  ˆ |ƒ¡r=J ‚W d   ƒ d S 1 sHw   Y  d S )Nc                 S   s   t j|    S r>   )r(   Úer*   r,   r,   r-   rx     ó   z;CheckOptimizeParameterized.test_bfgs_infinite.<locals>.funcc                    s
   ˆ | ƒ S r>   r,   r*   ©rx   r,   r-   Úfprime  ó   
z=CheckOptimizeParameterized.test_bfgs_infinite.<locals>.fprimer   Úignore)Úoverrˆ   r³   r,   r´   r+   ©rˆ   )r(   Úerrstaterž   rˆ   r
   rŸ   rº   Úisfinite)rk   rÖ   rS   r¡   r+   r,   rÕ   r-   Útest_bfgs_infinite	  s   
ÿÿ"ùz-CheckOptimizeParameterized.test_bfgs_infinitec                 C   sL   g d¢}t jt j|dddid�}t jt j|dddid�}|j|jks$J ‚d S )NrÁ   ÚbfgsÚxrtolçü©ñÒMbP?©rŒ   rŽ   Úgtol©r
   rŸ   r   Únit)rk   rS   r¢   Úrefr,   r,   r-   Útest_bfgs_xrtol  s   
ÿ
ÿz*CheckOptimizeParameterized.test_bfgs_xrtolc                 C   óL   g d¢}t jt j|dddid�}t jt j|dddid�}|j|jks$J ‚d S )N©gš™™™™™$@g33333³4@gš™™™™™%@rÄ   ç333333ó¿rÞ   Úc1ç:Œ0âŽyE>rá   r<   )r
   rŸ   r   r�   )rk   rS   Úres_c1_smallÚ
res_c1_bigr,   r,   r-   Útest_bfgs_c1#  s   
ÿ
ÿz'CheckOptimizeParameterized.test_bfgs_c1c                 C   rç   )NrÁ   rÞ   Úc2çÍÌÌÌÌÌì?rá   rÏ   rã   )rk   rS   Úres_defaultÚres_modr,   r,   r-   Útest_bfgs_c2.  s   
ÿ
ÿz'CheckOptimizeParameterized.test_bfgs_c2rê   rï   rZ   r1   çš™™™™™¹¿r<   rG   c                 C   sV   t jtdd�� g d¢}tjtj|d||dœd� W d   ƒ d S 1 s$w   Y  d S )Nz'c1' and 'c2'r¿   rè   Úcg)rê   rï   rá   )rÊ   r	   rO   r
   rŸ   r   )rk   rê   rï   rS   r,   r,   r-   Útest_invalid_c1_c28  s   ÿ"þz-CheckOptimizeParameterized.test_invalid_c1_c2c           
   	   C   s  | j r2| j| jddœ}tj| j| jdd|d�}|d |d |d |d	 |d
 |d f\}}}}}}ntj| j| jd| jd| jdd�}	|	\}}}}}}t|  |¡|  | j	¡dd� t|dd … | j	dd … dd� | j
jdkstJ | j
jƒ‚| jjdks€J | jjƒ‚d S )NFr‡   r,   ÚPowell©r‹   rŒ   rŽ   r+   r�   Údirecrä   r�   r’   Tr¶   r9   r•   r&   çñhãˆµøÔ>éˆ   r   )rž   rd   rˆ   r
   rŸ   rx   rb   Úfmin_powellr   rc   rg   rm   rh   ©
rk   r¡   r¢   r£   r¤   rù   Únumiterr¥   r§   r¨   r,   r,   r-   Útest_powellA  s,   ÿÿþýÿ z&CheckOptimizeParameterized.test_powellzeThis part of test_powell fails on some platforms, but the solution returned by powell is still valid.©Úreasonc           
   	   C   sÐ   | j r2| j| jddœ}tj| j| jdd|d�}|d |d |d |d	 |d
 |d f\}}}}}}ntj| j| jd| jd| jdd�}	|	\}}}}}}t| j	dd… g d¢g d¢g d¢g d¢g d¢gddd� d S )NFr‡   r,   r÷   rø   r+   r�   rù   rä   r�   r’   Tr¶   é"   é'   )ç—…~¿ûWç?çÒf"¬BÜ¿g¼€ˆ%Þ?)r  r  g:&ÃëÀÞ?)g»SÏ¼ûW÷?gÒf"¬Bì¿g{žÃ¥ørî?)r  r  ç{žÃ¥ørÞ?)gÌB¿ßý«û?r  r  r›   r=   rœ   )
rž   rd   rˆ   r
   rŸ   rx   rb   rü   r   ri   rý   r,   r,   r-   Útest_powell_gh14014c  s2   ÿÿþýü
úz.CheckOptimizeParameterized.test_powell_gh14014c                 C   s¨   dd„ | j D ƒ}| jrP| j| jddœ}tj| j| j d|d|d�}|d |d	 }}|| jjks1J ‚t	|  |¡|  | j
¡d
dd� | jjdksHJ ‚| jjdksRJ ‚d S d S )Nc                 S   s   g | ]	}t j t jf‘qS r,   )r(   Úpi)Ú.0Ú_r,   r,   r-   Ú
<listcomp>‰  s    zBCheckOptimizeParameterized.test_powell_bounded.<locals>.<listcomp>Fr‡   r,   r÷   )r‹   ÚboundsrŒ   rŽ   r+   r�   r9   r­   rœ   é¯   r   )rb   rž   rd   rˆ   r
   rŸ   rx   rg   rm   r   rc   rh   )rk   r  r¡   r¢   r£   r¥   r,   r,   r-   Útest_powell_bounded†  s$   ÿþÿ	íz.CheckOptimizeParameterized.test_powell_boundedc           	   	   C   s  | j r.| j| jddœ}tj| j| jdd|d�}|d |d |d |d	 |d
 f\}}}}}ntj| j| jd| jd| jdd�}|\}}}}}t|  |¡|  | j	¡dd� | j
jdks_J | j
jƒ‚| jjdkskJ | jjƒ‚t| jjdd… g d¢g d¢gddd� d S )NFr‡   r,   úNelder-meadrø   r+   r�   rä   r�   r’   Tr¶   r9   r•   é§   r   éL   éN   )g	dÀ£×°È?g÷×]fùä¿gtÛ×ä��Ö?)gÓ™ �…É?gäÌ#=^ä¿gÝÃoT¸ïÖ?r›   r=   rœ   )rž   rd   rˆ   r
   rŸ   rx   rb   Úfminr   rc   rg   rm   rh   ri   rn   )	rk   r¡   r¢   r£   r¤   rþ   r¥   r§   r¨   r,   r,   r-   Útest_neldermeadŸ  s6   ÿÿþýÿÿ
ýz*CheckOptimizeParameterized.test_neldermeadc              
   C   sR  t  d¡}| j|d< tdƒD ]}||d |f  d7  < q| jrV| jdd|dœ}tj| j| jd	d
|d�}|d |d |d |d |d f\}}}}}	t	|d d |d ƒ ntj
| j| jd	| jddd|d�}
|
\}}}}}	t	|  |¡|  | j¡dd� | jjdks‡J | jjƒ‚| jjdks“J | jjƒ‚t	| jjdd… g d¢g d¢gddd� d S )N)r™   r[   .r[   r&   r<   FT©rd   rˆ   r‰   Úinitial_simplexr,   r  rø   r+   r�   rä   r�   r’   Úallvecsr   ©r‹   rd   r“   rˆ   r”   r  r9   r•   éd   é2   é4   )gÔItžÊÌÂ?gà?'Î›Tà¿gxÅ8 áÞ?)gÓÒ¢_×†Â?gœoMçà¿gå›Ž|52ß?r›   r=   rœ   )r(   r`   rb   Úrangerž   rd   r
   rŸ   rx   r   r  rc   rg   rm   rh   ri   rn   )rk   Ú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)r[   r1   r1   .r&   r<   )r[   r[   Fr  r,   r  rø   Tr  )r(   r`   rb   r  rs   rž   rd   rN   rO   r
   rŸ   rx   r  )rk   Úbad_simplicesr  r  r¡   r,   r,   r-   Ú#test_neldermead_initial_simplex_badæ  s8   



ÿúüôz>CheckOptimizeParameterized.test_neldermead_initial_simplex_badc                 C   sZ   dd„ }t j|dgdgdd�}t|jdgƒ t j|ddgdd	gdd�}t|jddgƒ d S )
Nc                 S   ó   t  | d ¡S ©Nr1   ©r(   r@   r*   r,   r,   r-   Úquad	  rÔ   z>CheckOptimizeParameterized.test_neldermead_x0_ub.<locals>.quadr&   )r   rX   únelder-mead©r  rŒ   r   r1   )r&   ç      @©r
   rŸ   r   r+   )rk   r%  r¢   r,   r,   r-   Útest_neldermead_x0_ub  s   üüz0CheckOptimizeParameterized.test_neldermead_x0_ubc                 C   s6   ddi}t j| j| jd| jd|d�}|jdksJ ‚d S )Nrd   éÿÿÿÿú	Newton-CGr,   ©rŒ   r�   r‹   rŽ   r&   )r
   rŸ   rx   rb   r|   r’   )rk   r¡   Úresultr,   r,   r-   Útest_ncg_negative_maxiter  s   þz4CheckOptimizeParameterized.test_ncg_negative_maxiterc                 C   sX   dd„ }dd„ }dg}d}t j|||dt|d�d	�}|jdks!J ‚t|jd tjƒ d S )
Nc                 S   s   t  | d ¡S ©Nr   )r(   rD   r*   r,   r,   r-   Úcosine&  rÔ   z=CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.cosinec                 S   s   t  | d ¡ S r0  )r(   r?   r*   r,   r,   r-   r�   )  ó   z:CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.jacr<   r   ú	newton-cg)Úxtol)rS   r�   rŒ   rŽ   )r
   rŸ   Údictr’   r   r+   r(   r  )rk   r1  r�   rS   r4  r.  r,   r,   r-   Útest_ncg_zero_xtol$  s   üz-CheckOptimizeParameterized.test_ncg_zero_xtolc              
   C   sØ   | j r| j| jddœ}tj| j| jd| jd|d�d }ntj| j| j| jd| jd| jdd�}|}t	|  |¡|  | j
¡dd	� | jjd
ksJJ | jjƒ‚| jjdksVJ | jjƒ‚t	| jjdd… g d¢g d¢gddd� d S )NFr‡   r,  r,   r-  r+   r¶   r9   r•   r˜   é   r[   rÆ   ©ç(Æ6-H=�¾g×?üºËà¿g4 u¦3ß?©r9  g_êþéºËà¿gþ/N±§3ß?r=   rœ   )rž   rd   rˆ   r
   rŸ   rx   rb   r|   Úfmin_ncgr   rc   rg   rm   rh   ri   rn   ©rk   r¡   r¨   r£   r,   r,   r-   Útest_ncg6  s6   ÿþþýÿÿ
ýz#CheckOptimizeParameterized.test_ncgc                 C   óà   | j r| j| jddœ}tj| j| jd| j| jd|d�d }ntj	| j| j| j| jd| jd| jdd�	}|}t
|  |¡|  | j¡dd	� | jjd
ksNJ | jjƒ‚| jjdksZJ | jjƒ‚t
| jjdd… g d¢g d¢gddd� d S )NFr‡   r,  r,   )rŒ   r�   r   r‹   rŽ   r+   )Úfhessr‹   rd   r“   rˆ   r”   r9   r•   r˜   é   r[   rÆ   r8  r:  r=   rœ   )rž   rd   rˆ   r
   rŸ   rx   rb   r|   r   r;  r   rc   rg   rm   rh   ri   rn   r<  r,   r,   r-   Útest_ncg_hessW  ó:   ÿýýüÿÿ
ýz(CheckOptimizeParameterized.test_ncg_hessc                 C   r>  )NFr‡   r,  r,   )rŒ   r�   r�   r‹   rŽ   r+   )Úfhess_pr‹   rd   r“   rˆ   r”   r9   r•   r˜   r@  r[   rÆ   r8  r:  r=   rœ   )rž   rd   rˆ   r
   rŸ   rx   rb   r|   r�   r;  r   rc   rg   rm   rh   ri   rn   r<  r,   r,   r-   Útest_ncg_hesspy  rB  z)CheckOptimizeParameterized.test_ncg_hesspc                 C   s^   | j r+tj| j| jd| j| jdœd�}t|j|  | j	¡dd� | j
jdks-J | j
jƒ‚d S d S )NÚcobyqa©rd   rˆ   rá   r9   r•   éA   )rž   r
   rŸ   rx   rb   rd   rˆ   r   r�   rc   rg   rm   ©rk   r¢   r,   r,   r-   Útest_cobyqa›  s   üñz&CheckOptimizeParameterized.test_cobyqaN) r‚   rƒ   r„   r©   r²   r½   rÌ   rÎ   rÑ   rÊ   ÚmarkÚfilterwarningsrÝ   ræ   rî   ró   Úparametrizerö   rÿ   Úxfailr  r  r  r  r!  r*  r/  r6  r=  rA  rD  rI  r,   r,   r,   r-   r†   š   s>    "


	
þ
"
 (!""r†   c                     s\   t j d¡‰ ‡ fdd„} dD ]}dD ]}tj| ˆ  d¡|d|id�}|d	 |ks*J ‚qqd S )
Nl	   û<vgðRàI*q4Ì c                    ó   ˆ   d¡d S ©Nr&   r]   ©r5   r*   ©r;   r,   r-   Úcost²  rÔ   ztest_maxfev_test.<locals>.cost)r&   r·   r  )r÷   úNelder-Meadr·   Úmaxfevrá   r�   )r(   r5   Údefault_rngr
   rŸ   )rR  ÚimaxfevrŒ   r.  r,   rQ  r-   Útest_maxfev_test¯  s   þüürW  c                  C   sö   dd„ } t j | t d¡d¡\}}tdƒD ]}|t |¡ƒ |d |d ks(J ‚qd}tt jj|d�� |t |¡ƒ W d   ƒ n1 sEw   Y  t j | t d¡d¡\}}d}tt|d�� |t 	ddg¡ƒ W d   ƒ d S 1 stw   Y  d S )	Nc                 S   ó   | S r>   r,   r*   r,   r,   r-   Úfunc_Â  ó   z8test_wrap_scalar_function_with_validation.<locals>.func_r&   rÆ   r   zToo many function callsr¿   ú@The user-provided objective function must return a scalar value.)
r
   Ú	_optimizeÚ'_wrap_scalar_function_maxfun_validationr(   Úasarrayr  rN   Ú_MaxFuncCallErrorrO   rJ   )rY  Úfcallsrx   ÚiÚmsgr,   r,   r-   Ú)test_wrap_scalar_function_with_validationÀ  s$   ÿÿÿ"ÿrc  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   rX  r>   r,   r*   r,   r,   r-   Ú<lambda>Ý  ó    z.test_obj_func_returns_scalar.<locals>.<lambda>r&   r³   r¬   )rN   rO   r
   rŸ   r(   rJ   r¿   r,   r,   r-   Útest_obj_func_returns_scalarØ  s    "ÿrf  c                  C   s4   t  g d¢¡} tjjtj| dd�}|jdksJ ‚d S )NrÁ   rë   )ÚxatoliS  )r(   rJ   r
   Ú	_minimizeÚ_minimize_neldermeadr   rä   )rS   r¢   r,   r,   r-   Útest_neldermead_iteration_numà  s
   ÿrj  c                  C   s2   t  ddg¡ t j¡} dd„ }tj|| dd� d S )Nç      @ç      @c                 S   s   | j tjksJ ‚t | ¡S r>   )Údtyper(   Úfloat32r
   r   r*   r,   r,   r-   Úrosen_ê  s   
z*test_neldermead_respect_fp.<locals>.rosen_rS  r¬   )r(   rJ   Úastypern  r
   rŸ   )rS   ro  r,   r,   r-   Útest_neldermead_respect_fpç  s   rq  c                  C   s&   dd„ } t jj| ddgdddd� d S )Nc                 S   s   | d d | d d  S ©Nr   r1   r&   r,   r*   r,   r,   r-   rx   ô  rF   z)test_neldermead_xatol_fatol.<locals>.funcr&   r1   rà   )rd   rg  Úfatol)r
   rh  ri  rÕ   r,   r,   r-   Útest_neldermead_xatol_fatolñ  s   
ÿrt  c                  C   sR   dd„ } g d¢}t j| |dd�}t|jdƒ t j| |dddid	�}t|jdƒ d S )
Nc                 S   r"  r#  r$  r*   r,   r,   r-   rx   ü  rÔ   z&test_neldermead_adaptive.<locals>.func)géÍM@¸'Ä?güOÄC”ÆÞ?gµ§¢€~Ü?gê -Û?g¾ã¬€®ã?g#¹ÂÜj­Ô?gûù îï?g~ê³^gžÜ?gÜ r#—Åè?g^c¸¶Ç½é?g)þÖëi	×?g±Ùô÷'è?g‚Ž™Òýï?g1…›Òä?g[ÕVÎ¤¸?rS  r¬   FÚadaptiveTrá   )r
   rŸ   r   r°   )rx   Úp0r¢   r,   r,   r-   Útest_neldermead_adaptiveû  s   
ÿrw  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-   rx     rÔ   z/test_bounded_powell_outsidebounds.<locals>.func)©r+  r&   rx  rx  )éüÿÿÿrZ   gš™™™™™é¿r÷   r'  r\   r9   r•   Tr   ©r   r   r   )r   r&   r   )r   r   r&   rù   )r  rŒ   rŽ   )g      Àr   r   Fr™   )r   r
   ÚOptimizeWarningrŸ   r   r+   r(   rJ   Úlenr   r°   r’   )rx   r  rS   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 súw   Y  t|jdd
d� d S )Nc                 S   r"  r#  r$  r*   r,   r,   r-   rx   3  rÔ   z+test_bounded_powell_vs_powell.<locals>.func))éûÿÿÿr+  )éöÿÿÿrô   )r&   gffffff"@)ry  gffffff@©gÍÌÌÌÌÌ/Àéþÿÿÿ)gÍÌÌÌÌÌ ÀgÍÌÌÌÌÌÀrÄ   r   r�  ç»½×Ùß|Û=©Úftolr4  r÷   rá   r\   r9   r•   )rŽ   r  rŒ   )r+  rô   r&   r   r�  )Nr+  rô   r&   )ry  Nr€  c                 S   sz   t  | d  ¡t  | d ¡ t  | d  | d  ¡ t  | d ¡ }|t  t  | d | d  ¡t  | d ¡ ¡8 }|d S ©Nr   r&   r1   rC   ©r+   rn   r,   r,   r-   rx   Q  s   D.)r�  rÆ   r[   )rš   rš   rš   r¬   r'  g´£8“ç:}?r   )gbšŽ¥4»F@gìæ†:ÀgžWÀ�¿?@)r
   rŸ   r   r+   r�   r(   rJ   Úinfr�   r   r{  )rx   r  rS   rŽ   Ú
res_powellÚres_bounded_powellr{   r,   r,   r-   Útest_bounded_powell_vs_powell*  sb   	

þ
þ
þþ
þÿrŠ  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    €„.Ar[   rë   rƒ  )rŒ   r  rŽ   rW   c                 S   s   t  | ¡ S r>   r$  r*   r,   r,   r-   rw   ƒ  ó   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(   rL   r@   rI   r*   r,   r,   r-   rw   ‰  ó   .gw£ÖÆÀc                 S   r�  )Nr·   r   r&   r+  rŽ  r*   r,   r,   r-   rw   �  r�  gB+¢IñaÍr=   r®   c                 S   s^   t  t  | d d… ¡¡d  t  t  | dd … ¡¡d  }|t  | dk¡r*d9 }|S d9 }|S )Nr1   rÆ   r<   r   r&   r+  rŽ  r†  r,   r,   r-   rw   —  s
   :ÿg     @�@r  g 4&õk\Ã)r(   r‡  r
   rŸ   r   r�   )ÚkwargsrS   rw   r¢   r,   r,   r-   Ú&test_onesided_bounded_powell_stabilityw  s$   þr‘  c                   @   ó   e Zd ZdZdZdS )ÚTestOptimizeWrapperDispTN©r‚   rƒ   r„   rž   rˆ   r,   r,   r,   r-   r“  ¡  ó    r“  c                   @   ó   e Zd ZdZdZdS )ÚTestOptimizeWrapperNoDispTFNr”  r,   r,   r,   r-   r—  ¦  r•  r—  c                   @   r–  )ÚTestOptimizeNoWrapperDispFTNr”  r,   r,   r,   r-   r˜  «  r•  r˜  c                   @   r’  )ÚTestOptimizeNoWrapperNoDispFNr”  r,   r,   r,   r-   r™  °  r•  r™  c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zej d%¡ej d&¡ej d'¡ej d(g d)¢e ¡d*d+„ ƒƒƒƒZej d(g d,¢¡d-d.„ ƒZd/d0„ Zej d(g d1¢¡d2d3„ ƒZejjej d(g d4¢¡d5d6„ ƒƒZ d7d8„ Z!d9d:„ Z"d;d<„ Z#d=d>„ Z$ej d(g d?¢¡d@dA„ ƒZ%ej d(g dB¢¡dCdD„ ƒZ&ej d'¡ej d(e'¡ej dEg dF¢¡dGdH„ ƒƒƒZ(dIdJ„ Z)ej d(dK¡dLdM„ ƒZ*ejjej d(g dN¢¡dOdP„ ƒƒZ+dQS )RÚTestOptimizeSimplec                 C   sp   dd„ }dd„ }t jg}t jddd�� tj|||dd�}t  ||ƒ¡s&J ‚W d   ƒ d S 1 s1w   Y  d S )	Nc                 S   rX  r>   r,   r*   r,   r,   r-   rx   ¹  rZ  z.TestOptimizeSimple.test_bfgs_nan.<locals>.funcc                 S   ó
   t  | ¡S r>   ©r(   Ú	ones_liker*   r,   r,   r-   rÖ   »  r×   z0TestOptimizeSimple.test_bfgs_nan.<locals>.fprimerØ   )rÙ   ÚinvalidFrÚ   )r(   ÚnanrÛ   r
   rº   Úisnan)rk   rx   rÖ   rS   r+   r,   r,   r-   Útest_bfgs_nan·  s   "þz TestOptimizeSimple.test_bfgs_nanc                 C   sÔ   dd„ }t jdd�� t |d¡}W d   ƒ n1 sw   Y  t  |d ¡s)J ‚|d du s1J ‚d	d„ }d
d„ }t jdd�� tj|d|d�}W d   ƒ n1 sRw   Y  t  |d ¡s`J ‚|d du shJ ‚d S )Nc                 S   ó   t jS r>   ©r(   rŸ  r*   r,   r,   r-   rx   Æ  ó   z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.funcrØ   ©rž  r   r�   r°   Fc                 S   s   | dkrdS t jS r0  r£  r*   r,   r,   r-   rx   Ï  rB   c                 S   r›  r>   rœ  r*   r,   r,   r-   rÖ   Ñ  r×   z7TestOptimizeSimple.test_bfgs_nan_return.<locals>.fprime)r�   )r(   rÛ   r
   rŸ   r   )rk   rx   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 )NrX   r,   F)r:   r‹   rd   rˆ   r9   r•   )r(   ÚsqrtÚspacingr5   Úrandr|  rc   r
   rº   rx   rb   rd   r   )rk   r:   r£   r,   r,   r-   Útest_bfgs_numerical_jacobianÙ  s   "þ
ÿz/TestOptimizeSimple.test_bfgs_numerical_jacobianc                 C   s^   g d¢}g d¢}t  ||¡D ]\}}tj| j| j||d�}t|  |j¡|  | j¡dd� qd S )N)r³   rŠ   ÚTNC©ú2-pointú3-pointN)rŒ   r�   r9   r•   )	Ú	itertoolsÚproductr
   rŸ   rx   rb   r   r+   rc   )rk   ÚmethodsÚjacsrŒ   r�   r.  r,   r,   r-   Útest_finite_differences_jacå  s   ÿÿýz.TestOptimizeSimple.test_finite_differences_jacc              	   C   s¸   g d¢}t tjf }t ||¡D ]\}}|tju r|ƒ }tj| j| j|| j|d�}|j	s.J ‚qg d¢}|D ]$}t
 t¡� tj| j| j|| jd d� W d   ƒ n1 sTw   Y  q5d S )N)útrust-constrr,  ú	trust-ncgútrust-krylov©rŒ   r�   r   )rµ  r¶  Údoglegútrust-exact)r   r
   r³   r¯  r°  rŸ   rx   rb   r|   r°   rÊ   r	   rO   )rk   r±  ÚhessesrŒ   r   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   g÷BŒþÿÿïrX   r,   r*   r,   r,   r-   rw   	  s   z/TestOptimizeSimple.test_bfgs_gh_2169.<locals>.fç      $@FrÚ   rX   rŒ  ©r�   r–   )r
   rº   r   )rk   rw   Úxsr,   r,   r-   Útest_bfgs_gh_2169  s   z$TestOptimizeSimple.test_bfgs_gh_2169c                    s*   ‡ fdd„}t ƒ ‰ tj|ddddd� d S )Nc                    s2   | d }|ˆ vs
J ‚ˆ   |¡ d| d  d|  fS )Nr   r·   r1   é   )Úadd)r+   Úxp©Úseenr,   r-   rw     s   
z:TestOptimizeSimple.test_bfgs_double_evaluations.<locals>.féœÿÿÿrÞ   Tr=   )rŒ   r�   Útol)Úsetr
   rŸ   ©rk   rw   r,   rÃ  r-   Útest_bfgs_double_evaluations  s   z/TestOptimizeSimple.test_bfgs_double_evaluationsc                 C   sž   t j| j| j| jd| jd�}|\}}}t|  |¡|  | j¡dd� | jj	dks-J | jj	ƒ‚| j
j	dks9J | j
j	ƒ‚t| jjdd… g d¢g d	¢gd
dd� d S )Nr,   )r‹   rd   r9   r•   r˜   rÆ   r[   )gžÈî°>Í<gwTë³¹ à¿gÓUuAXß?)r\   g¿‹ŒHóËà¿g!mÊ²3ß?r›   r=   rœ   )r
   Úfmin_l_bfgs_brx   rb   r|   rd   r   rc   rg   rm   rh   ri   rn   ©rk   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)Úapprox_gradrd   r9   r•   )r
   rÊ  rx   rb   rd   r   rc   rË  r,   r,   r-   Útest_l_bfgs_b_numjac3  s   þ

ÿz'TestOptimizeSimple.test_l_bfgs_b_numjacc                    sJ   ‡ fdd„}t j|ˆ jˆ jd�}|\}}}tˆ  |¡ˆ  ˆ j¡dd� d S )Nc                    s   ˆ   | ¡ˆ  | ¡fS r>   ©rx   r|   r*   rj   r,   r-   r�   @  r/   z4TestOptimizeSimple.test_l_bfgs_b_funjac.<locals>.fun©rd   r9   r•   )r
   rÊ  rb   rd   r   rx   rc   )rk   r�   r¨   r£   r¤   rÌ  r,   rj   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 r0  )rä   r�   r+   rj   r,   r,   r-   Ú__init__O  s   
zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__init__c                 S   s$   || _ t |¡| _|  jd7  _d S r%   )r+   r
   r   r�   rä   ©rk   r+   r,   r,   r-   Ú__call__T  s   zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__call__N©r‚   rƒ   r„   rÔ  rÖ  r,   r,   r,   r-   ÚCallbackN  s    rØ  r\   úl-bfgs-brd   rÆ   )rŒ   ÚcallbackrŽ   r&   Fz+STOP: TOTAL NO. OF ITERATIONS REACHED LIMIT)r
   rŸ   r   r   rä   r   r+   r�   r’   r°   Úmessage)rk   rØ  rm   r¢   r,   r,   r-   Útest_l_bfgs_b_maxiterK  s   ÿÿz(TestOptimizeSimple.test_l_bfgs_b_maxiterc                 C   s  d| j dœ}tj| j| jd| j|d�}t|  |j¡|  | j¡dd� | j	j
|jks+J ‚d | j_
| j	_
tj| j| jd|d�}| jj
|jksGJ ‚t|  |j¡|  | j¡dd� d | j_
| j	_
tj| j| jd	d|d
�}| jj
|jkssJ ‚t|  |j¡|  | j¡dd� d S )NF©rˆ   rd   úL-BFGS-B©rŒ   r�   rŽ   r9   r•   r   rá   r®  ©r�   rŒ   rŽ   )rd   r
   rŸ   rx   rb   r|   r   r+   rc   rh   rm   r‘   rg   r�   )rk   r¡   rT   Úrar,   r,   r-   Útest_minimize_l_bfgs_be  s2   þÿÿÿÿ
ÿz)TestOptimizeSimple.test_minimize_l_bfgs_bc                 C   sv   d }dD ]4}d| j |dœ}tj| j| jd| j|d�}|  |j¡}|d u r'|}n||k s-J ‚t||  | j¡|d� qd S )N)r<   rŒ  r=   r‚  F)rˆ   rd   r„  rÞ  rß  r®   )	rd   r
   rŸ   rx   rb   r|   r+   r   rc   )rk   Úv0rÆ  r¡   r±   Úvr,   r,   r-   Útest_minimize_l_bfgs_b_ftol�  s   þôz.TestOptimizeSimple.test_minimize_l_bfgs_b_ftolc                 C   s6   t jt jt ddg¡dt jdddœd�}|jrJ ‚d S )Nré   rX   rÞ  Fr&   )rˆ   Úmaxlsrß  )r
   rŸ   r   r(   rJ   r   r°   )rk   r±   r,   r,   r-   Útest_minimize_l_bfgs_maxls’  s
   þz-TestOptimizeSimple.test_minimize_l_bfgs_maxlsc                    s¦   t j‰ t j}g ‰t dd¡}‡ ‡fdd„}d\}}}t j||||d� tdd„ tˆ|d … ƒD ƒƒ\}}|| }	tˆd |… ƒ}
t jˆ |||	d�\}}}t	||
ƒ d S )	Nr˜   r]   c                    s   ˆ | ƒ}ˆ  |¡ |S r>   )rs   )r+   Úvalue©rw   Ú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	  ra  Úyr,   r,   r-   Ú	<genexpr>ª  s   € zPTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.<genexpr>)
r
   r   r   r(   ÚfullrÊ  ÚmaxÚ	enumerateÚminr   )rk   ÚgrS   rë  ÚlowÚmediumÚhighrä  Úkrí  ÚtargetÚxminr  rÌ  r,   ré  r-   Ú*test_minimize_l_bfgs_b_maxfun_interruption™  s   
"z=TestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruptionc                 C   sF   		 ddd„}g d¢}t jt j||tdd�d	�}t|jd
ddd� d S )Nr,   r<   r  c                 [   sø   |}| |ƒ}	d}
d}d}d}|rp|sp||k rpd}|d7 }t t |¡ƒD ]D}|| | || | fD ]!}t |¡}|||< | |g|¢R Ž }|
d7 }
||	k rR|}	|}d}q1|d ur[||ƒ |d urg|
|krgd} nq#|rp|sp||k stj|	|||
|dkd�S )Nr&   r   TF©r�   r+   rä   r�   r°   )r  r(   Úsizert   r
   r   )r�   rS   r‹   rT  Ústepsizerd   rÚ  rŽ   ÚbestxÚbestyÚfuncallsÚniterÚimprovedÚstopÚdimÚsÚtestxÚtestyr,   r,   r-   Úcustminµ  s<   
€€ï
ÿz/TestOptimizeSimple.test_custom.<locals>.custmin)gš™™™™™õ?rð   rÃ   çš™™™™™ñ?rÅ   çš™™™™™©?©rþ  rá   rX   rŒ  r½  ©r,   Nr<   r  N)r
   rŸ   r   r5  r   r+   )rk   r	  rS   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�  r1   )r   r[   Úconstraintsc                    s(   |d ˆ u sJ ‚|d ˆu sJ ‚t  ¡ S )Nr  r  ©r
   r   )r�   rS   rŽ   ©r  r  r,   r-   r	  ß  s   z0TestOptimizeSimple.test_gh10771.<locals>.custminr&   )rŒ   r  r  )r
   rŸ   r   )rk   r	  rS   r,   r  r-   Útest_gh10771Ù  s   
ÿzTestOptimizeSimple.test_gh10771c                 C   s˜   dd„ }dd„ }dD ]?}|dv rd }n|}t j|ddg|d|d	�}t j|ddg|d
|d	�}||jƒ||jƒk sIJ |› d||jƒ› d||jƒ› �ƒ‚q
d S )Nc                 S   s$   | \}}|d |d  |d  d S )Nr1   r™   r&   r,   ©Úzr+   rî  r,   r,   r-   rx   ê  s   z<TestOptimizeSimple.test_minimize_tol_parameter.<locals>.funcc                 S   s:   | \}}t  d| |d  d|d   d|d  | g¡S )Nr1   r™   r[   ©r(   rJ   r  r,   r,   r-   Údfuncî  s   2z=TestOptimizeSimple.test_minimize_tol_parameter.<locals>.dfunc©
r&  Úpowellrõ   rÞ   r3  rÙ  ÚtncÚcobylarE  Úslsqp©r&  r  r  rE  r1   r‚  )r�   rÆ  rŒ   rX   ú: z vs. )r
   rŸ   r+   )rk   rx   r  rŒ   r�   Úsol1Úsol2r,   r,   r-   Útest_minimize_tol_parameterè  s    ÿÿÿôz.TestOptimizeSimple.test_minimize_tol_parameterr·   rÒ   úignore::RuntimeWarningrŒ   )r  rü   r    rº   r;  rÊ  Úfmin_tncÚ
fmin_slsqpc           
         sf  ˆ dv r	dd„ }n	t j}t j}t j}t d¡}i }ˆ  d¡rCtt ˆ ƒ}ˆ dkr,d|d< n0ˆ d	kr5d
|d< n'ˆ dv r>d|d< nd|d< n‡ fdd„}ˆ dkrUtd
d�|d< ntdd�|d< ˆ dv re||d< nˆ dv rn||d< nˆ dv rz||d< ||d< g ‰‡fdd„}|||fd|i|¤Ž t	ˆƒdks•J ‚t
dd „ ˆD ƒƒs J ‚t ˆd¡}	td!d „ |	D ƒƒr±J ‚d S )"N)r"  rÊ  c                 S   s   t  | ¡t  | ¡fS r>   )r
   r   r   r*   r,   r,   r-   rx     r/   zDTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.funcr·   r  r#  rÆ   Úiterr"  r  rí  )r  rü   i¬  rd   c                     s   ˆ |d< t j| i |¤ŽS )NrŒ   ©r
   rŸ   )ÚaÚkwr¬   r,   r-   Úroutine#  s   zGTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.routiner  ©rí  rŽ   rÑ  )r;  rÖ   )r3  r�   ©r¶  r¹  rµ  r¸  r´  r   c                    s(   t | tjƒrJ ‚ˆ  | t | ¡f¡ d S r>   )Ú
isinstancer
   r   rs   r(   rt   )r+   r‹   r�  )Úresultsr,   r-   rÚ  8  s   zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.callbackrÚ  r1   c                 s   s"   � | ]\}}t  ||k¡V  qd S r>   )r(   rI   ©r	  r+   rî  r,   r,   r-   rï  A  s   €  zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>c                 s   s(   � | ]\}}t  |d  |d  ¡V  qdS )r   N)r(   Úmay_share_memoryr-  r,   r,   r-   rï  C  s   €& )r
   r   r   r   r(   r`   Ú
startswithÚgetattrr5  r|  rI   r¯  ÚcombinationsÚany)
rk   rŒ   rx   r�   r   rS   r�  r(  rÚ  r1  r,   )rŒ   r,  r-   Ú#test_minimize_callback_copies_array  sD   









z6TestOptimizeSimple.test_minimize_callback_copies_arrayr  c           	      C   sž   dd„ }dd„ }t  dg¡}||ƒ}|}|dkrtdd�ntdd	�}|d
v r(d }tj|||||d�}t||jƒ|jƒ |dkrDt 	d¡ ||jƒ|ksMJ ‚d S )Nc                 S   ó   | d d S r0   r,   r*   r,   r,   r-   rx   L  r‹  z1TestOptimizeSimple.test_no_increase.<locals>.funcc                 S   s   d| d  d d S )Nr1   r&   r+  r,   r*   r,   r,   r-   Úbad_gradO  s   z5TestOptimizeSimple.test_no_increase.<locals>.bad_gradç       @r  rÀ  r)  rÑ  r  rà  r  zSLSQP returns slightly worse)
r(   rJ   r5  r
   rŸ   r   r+   r�   rÊ   rM  )	rk   rŒ   rx   r5  rS   Úf0r�   rŽ   r±   r,   r,   r-   Útest_no_increaseE  s   ÿ
z#TestOptimizeSimple.test_no_increasec                 C   sX   dd„ }dd„ }t  g d¢¡}tj||dd|dœd	�}t|jt  g d
¢¡d dd� d S )Nc                 S   s   t | t g d¢¡ d ƒS )N)rX   r6  r(  rl  r1   )r@   r(   rJ   r*   r,   r,   r-   rw   d  s   z7TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.fc                 S   s:   t  g d¢g d¢g¡}t  t  || ¡t  ddg¡ | g¡S )N)r+  r+  r+  r+  )éýÿÿÿr9  r�  r+  rÆ   r·   )r(   rJ   Úconcatenaterq   ©r+   r&  r,   r,   r-   Úconsg  s   $z:TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.cons)rZ   rX   r4   r6  r  Úineq©Útyper�   ©rŒ   r  )r\   r1   rÆ   r¸   r[   gê-�™—q=r•   )r(   rJ   r
   rŸ   r   r+   )rk   rw   r<  rS   r¢   r,   r,   r-   Útest_slsqp_respect_boundsb  s   
ÿ"z,TestOptimizeSimple.test_slsqp_respect_bounds)rS  r÷   rŠ   r³   r,  rÞ  ÚSLSQPr´  r¸  rµ  r¹  r¶  rE  c                 C   sî   d}t  d¡}ttj|dtjtjd d ƒ}|t|d�dœ}|dv r&|j|d< n|dv r4|j|d< |j	|d	< tj
|j|fi |¤Ž}|j|ksFJ ‚|j|jksNJ ‚t|d
ƒr[|j|jks[J ‚|dkrh|jdksfJ ‚d S |dkrs|jdksuJ ‚d S d S )Nr™   r·   r,   rÑ  rá   )r,  r�   r*  r   r‘   rB  r—   rE  r¹   )r(   r`   r   r
   r   r   r   r5  r|   r   rŸ   r�   rä   r�   ro   r‘   Úngevr’   )rk   rŒ   ÚMAXITERrS   Úsfr�  r±   r,   r,   r-   Útest_respect_maxiterp  s,   
ÿ


ÿz'TestOptimizeSimple.test_respect_maxiter)rS  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&   TrF  zMaximum number of iterationsr¿   r  rá   )r(   r`   r   r
   r   r   r   rÊ   ÚwarnsÚRuntimeWarningr/  r0  r�   rŸ   )rk   rŒ   rS   rE  rŽ   r(  r,   r,   r-   Útest_runtime_warning•  s   
ÿ
ÿ

ú"üz'TestOptimizeSimple.test_runtime_warningc           	   
   C   sd   d}t j}t j}t j}dd„ }d|dœf}t d¡}t j|||||dt|d�d	�}|j|ks0J ‚d S )
Nr™   c                 S   s,   t  d| d  d| d   d| d   g¡S )NrG   r   çš™™™™™Ù?r&   ç…ëQ¸Õ?r1   r  r*   r,   r,   r-   r�   ®  s   ,zRTestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints.<locals>.funr=  r>  r·   r´  rÑ  )r  r�   r   rŒ   rŽ   )	r
   r   r   r   r(   r`   rŸ   r5  rä   )	rk   rD  rw   r�   r   r�   r<  rS   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-   rw   º  ó   z6TestOptimizeSimple.test_minimize_automethod.<locals>.fc                 S   s   | d S r#  r,   r*   r,   r,   r-   r<  ½  rN  z9TestOptimizeSimple.test_minimize_automethod.<locals>.consr¼  r=  r>  )r  )rÆ   r·   ©r  )r  r  ©r&   r·   r   r=   r•   r1   rÆ   )r(   rJ   r
   rŸ   r°   r   r+   )
rk   rw   r<  rS   Ú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+   rm   r,   r,   r-   ÚYÕ  rB   z=TestOptimizeSimple.test_minimize_coerce_args_param.<locals>.Yc                 S   s   d| |  S r#  r,   rW  r,   r,   r-   ÚdY_dxØ  r‹  zATestOptimizeSimple.test_minimize_coerce_args_param.<locals>.dY_dx)r[   r&   r™   r&   rÆ   r—   r1   r¹   rÆ   r[   rÆ   r³   )r�   r‹   rŒ   r>   )r(   rJ   r5   Úrandnr|  r
   rŸ   )rk   rX  rY  rm   Úxinitr,   r,   r-   Útest_minimize_coerce_args_paramÓ  s
   
z2TestOptimizeSimple.test_minimize_coerce_args_paramc           	         s*  g d¢}g d¢}‡ ‡‡fdd„}‡fdd„}t  ||¡D ]v\‰}|dv r,tˆd d	�}ntƒ }ˆd
k r8|dv r8qdg‰d g‰ tj|ˆ|||d�}|› dˆ› dˆ › d|› �}|js\J |ƒ‚t|jdg|d� |jdksnJ |ƒ‚ˆd
kr‘|dv r€tˆ d d|d� qˆ d dkrŒˆ d dk s�J |ƒ‚q	 qd S )N)g¸ÔJzî�5r&   gšd~ÅQJ)rŠ   r³   rÞ  r,  c                    s`   ˆ d d u r| d ˆd krt | d ˆd  ƒˆ d< t | ƒ ¡ dkr&tdƒ‚ˆ| d d d  S )Nr   g     ˆÃ@zOptimization stepped far away!r&   r1   )rL   rñ  ÚAssertionErrorr*   ©Úfirst_step_sizeÚscalerS   r,   r-   rw   æ  s
   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.fc                    s   t  ˆ | d d  g¡S ©Nr   r&   r  r*   )r`  r,   r-   rô  í  rF   z7TestOptimizeSimple.test_initial_step_scaling.<locals>.g)rŠ   r³   rë   )râ   r‚  )rÞ  r,  ç      ð¿rà  ú r  rX   ©Úerr_msgr[   r   g)\�Âõ(ð?rZ   )	r¯  r°  r5  r
   rŸ   r°   r   r+   rä   )	rk   Úscalesr±  rw   rô  rŒ   rŽ   r¢   re  r,   r^  r-   Útest_initial_step_scalingß  s2   ÿ"áz,TestOptimizeSimple.test_initial_step_scaling)r&  r  rõ   rÞ   r3  rÙ  r  r  rE  r  r´  r¸  rµ  r¹  r¶  c                    s„  |dkr|dkrt  d¡ tj d¡‰dg‰ dd„ }‡ ‡fdd	„}d
d„ }dd„ }t dg¡}|dv }|dv }	||g}
|r@|gn|d g}|	rI|gn|d g}|dkrVtdd�ntdd�}tjdd��W tƒ �;}| 	t
d¡ | 	td¡ | 	td¡ t |
||¡D ]\}}}dg‰ tj||||||d�}t|jdƒ qW d   ƒ n1 s£w   Y  W d   ƒ d S W d   ƒ d S 1 s»w   Y  d S )Nr&   rE  z,COBYQA does not support concurrent executionr6   r   c                 S   r¢  r>   r£  r*   r,   r,   r-   rx     r¤  z0TestOptimizeSimple.test_nan_values.<locals>.funcc                    s*   ˆ d  d7  < ˆ d dkrt jS ˆ ¡ S r…  )r(   rŸ  r©  r*   ©Úcountr;   r,   r-   Úfunc2"  s   z1TestOptimizeSimple.test_nan_values.<locals>.func2c                 S   s   t  dg¡S ©NrX   r  r*   r,   r,   r-   r|   )  r‹  z0TestOptimizeSimple.test_nan_values.<locals>.gradc                 S   ó   t  dgg¡S rk  r  r*   r,   r,   r-   r   ,  rÔ   z0TestOptimizeSimple.test_nan_values.<locals>.hessrX   ©r3  r¶  r¹  rµ  r¸  ©r¶  r¹  rµ  r¸  r  rÀ  r)  rÑ  rØ   r¥  údelta_grad == 0.*ú.*does not use Hessian.*ú.*does not use gradient.*)r�   r   rŒ   rŽ   F)rÊ   Úskipr(   r5   ÚRandomStaterJ   r5  rÛ   r   ÚfilterÚUserWarningrH  r¯  r°  r
   rŸ   r   r°   )rk   rŒ   Únum_parallel_threadsrx   rj  r|   r   rS   Ú
needs_gradÚ
needs_hessÚfuncsÚgradsÚhesssrŽ   Úsuprw   rô  Úhr±   r,   rh  r-   Útest_nan_values  s6   
ÿüPûz"TestOptimizeSimple.test_nan_values)r&  rõ   rÞ   rÙ  r  r  rE  r  r´  r¸  rµ  r¹  r¶  c              	   C   sä   d  }}|dv r| j }|dv r| j}tjdd��- tƒ �}| td¡ tj| j	| j
|||d� W d   ƒ n1 s9w   Y  W d   ƒ n1 sHw   Y  tdt| jjƒƒD ]}t | jj|d  | jj| ¡rotd|› �ƒ‚qVd S )	Nrm  rn  rØ   r¥  ro  r·  r&   zDuplicate evaluations made by )r|   r   r(   rÛ   r   rt  ru  r
   rŸ   rx   rb   r  r|  ri   rn   Úarray_equalrp   )rk   rŒ   r�   r   r|  ra  r,   r,   r-   Útest_duplicate_evaluationsF  s(   ÿý€  ÿÿÿz-TestOptimizeSimple.test_duplicate_evaluationsÚnew_cb_interface)r   r&   r1   c           
         sŒ  ‡fdd„‰dˆ_ ‡fdd„}‡fdd„}d‰|d	kr#‡ ‡fd
d„}n|dkr5G ‡ ‡fdd„dƒ}|ƒ }n‡ fdd„}‡ ‡fdd„‰ dˆ _dˆ _ dgd |ˆ||dœ}tjdi |¤d|i¤Ž}|dkrgˆd	 ‰|dkrŠtjdi |¤ddˆii¤Ž}	|j|	j  kr†ˆks‰J ‚ J ‚ntjdi |¤ddˆii¤Ž}	|j|	j  kr¥ˆks¨J ‚ J ‚|j|	jks°J ‚t|j|	jƒ |j	|dv r¿dndksÄJ ‚d S )Nc                    ó   dˆ _ t | ¡S ©NF)Úflagr
   r   r*   ©rw   r,   r-   rw   g  ó   
z9TestOptimizeSimple.test_callback_stopiteration.<locals>.fFc                    r‚  rƒ  )r„  r
   r   r*   r…  r,   r-   rô  l  r†  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.gc                    r‚  rƒ  )r„  r
   r   r*   r…  r,   r-   r}  p  r†  z9TestOptimizeSimple.test_callback_stopiteration.<locals>.hrÆ   r&   c                    s   | j ˆ| jƒks
J ‚ˆ ƒ  d S r>   ©r�   r+   )Úintermediate_result©rÚ  rw   r,   r-   Úcallback_interfacew  ó   
zJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interfacer1   c                       s    e Zd Zdef‡ ‡fdd„ZdS )z@TestOptimizeSimple.test_callback_stopiteration.<locals>.Callbackrˆ  c                    s   |j ˆ|jƒks
J ‚ˆ ƒ  d S r>   r‡  )rk   rˆ  r‰  r,   r-   rÖ  |  r‹  zITestOptimizeSimple.test_callback_stopiteration.<locals>.Callback.__call__N)r‚   rƒ   r„   r   rÖ  r,   r‰  r,   r-   rØ  {  s    rØ  c                    s
   ˆ ƒ  d S r>   r,   )Úxkr‹   )rÚ  r,   r-   rŠ  �  r×   c                      s.   ˆ  j d7  _ dˆ _ˆ j ˆkrdˆ _tƒ ‚d S )Nr&   FT)ra  r„  ÚStopIterationr,   )rÚ  rd   r,   r-   rÚ  „  s   
þz@TestOptimizeSimple.test_callback_stopiteration.<locals>.callbackr   r
  )rS   rŒ   r�   r�   r   rÚ  r&  rE  rŽ   rT  rd   )r´  rE  r[   éc   r,   )
r„  ra  r
   rŸ   r�   rä   r�   r   r+   r’   )
rk   rŒ   r�  rô  r}  rŠ  rØ  r�  r¢   rå   r,   )rÚ  rw   rd   r-   Útest_callback_stopiteration`  s<   
ÿ" ýz.TestOptimizeSimple.test_callback_stopiterationc                 C   sL   d}t t|d�� t dd„ t d¡¡ W d   ƒ d S 1 sw   Y  d S )Nz"'x0' must only have one dimension.r¿   c                 S   rX  r>   r,   r*   r,   r,   r-   rd  £  re  z4TestOptimizeSimple.test_ndim_error.<locals>.<lambda>)r1   r&   )rN   rO   r
   rŸ   r(   Úones©rk   rb  r,   r,   r-   Útest_ndim_error   s   "ÿz"TestOptimizeSimple.test_ndim_error)r&  rÙ  r  r  r  rE  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-   rw   ©  rÔ   z:TestOptimizeSimple.test_minimize_invalid_bounds.<locals>.fr&   r1   r[   r™   z?The number of bounds is not compatible with the length of `x0`.r¿   )r&   r1   r[   ©rS   rŒ   r  )r&   r¹   r&   )r[   r™   r1   z:An upper bound is less than the corresponding lower bound.)r   rÊ   r	   rO   r
   rŸ   )rk   rŒ   rw   r  rb  r,   r,   r-   Útest_minimize_invalid_bounds¥  s   ÿ"ÿz/TestOptimizeSimple.test_minimize_invalid_bounds)rÞ   rõ   r3  r  c                 C   s°   |dkri ndt ji}|dkrtnt j}dddœ}tj|dd�� t jdd	„ d
d
gf||dœ|¤Ž W d   ƒ n1 s<w   Y  d|d< t jdd	„ d
d
gf||dœ|¤Ž d S )Nr  r�   Tr·   rÝ  úMaximum numberr¿   c                 S   r›  r>   ©r
   r   r*   r,   r,   r-   rd  Á  ó   
 zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>r   rá   Frˆ   c                 S   r›  r>   r–  r*   r,   r,   r-   rd  Å  r—  )r
   r   rH  r{  rÊ   rG  rŸ   )rk   rŒ   r�  Úwarning_typerŽ   r,   r,   r-   Útest_minimize_warnings_gh1953¶  s$   ÿ
ÿÿÿÿ
ÿz0TestOptimizeSimple.test_minimize_warnings_gh1953N),r‚   rƒ   r„   r¡  r¦  rª  r³  r»  r¿  rÉ  rÍ  rÏ  rÒ  rÜ  râ  rå  rç  rû  r  r  r   rÊ   rJ  Ú	fail_slowrK  rL  r   r3  r8  rA  rF  Úthread_unsaferI  rL  rV  r\  rg  r~  r€  r   r�  r’  r”  r™  r,   r,   r,   r-   rš  µ  sl    		&


þÿ=

 2
0

=
rš  rŒ   )rÙ  r  r÷   rS  rE  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-   rw   Ï  rÔ   z$test_minimize_with_scalar.<locals>.fé   )rÅ  r  r'  r\   r­   r•   )r
   rŸ   r°   r   r+   )rŒ   rw   r¢   r,   r,   r-   Útest_minimize_with_scalarÉ  s   
r�  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  rc   rj   r,   r,   r-   rl   Ø  r†  zTestLBFGSBBounds.setup_methodr6  c                 C   s    d| |d | |d |   S )NrX   r   r&   r,   r€   r,   r,   r-   r�   Ü  r3   zTestLBFGSBBounds.func                 C   s   ||d  S r%   r,   r€   r,   r,   r-   r�   ß  r‹  zTestLBFGSBBounds.jacc                 C   s   |   ||¡|  ||¡fS r>   ©r�   r�   r€   r,   r,   r-   Úfjâ  rF   zTestLBFGSBBounds.fjc                 C   sN   t j| jddg| j| jd�\}}}|d dksJ |d ƒ‚t|| jdd� d S )Nr   r+  )rÖ   r  r§   Útaskr9   r•   )r
   rÊ  r�   r�   r  r   rc   ©rk   r+   rw   rÌ  r,   r,   r-   Útest_l_bfgs_b_boundså  s   þz%TestLBFGSBBounds.test_l_bfgs_b_boundsc                 C   sL   t j| jddgd| jd�\}}}|d dksJ |d ƒ‚t|| jdd� d S )	Nr   r+  ©r6  )r‹   r  r§   r¢  r9   r•   )r
   rÊ  r¡  r  r   rc   r£  r,   r,   r-   rÒ  ì  s
   ÿz%TestLBFGSBBounds.test_l_bfgs_b_funjacc                 C   sH   t j| jddgd| j| jd�}|d sJ |d ƒ‚t|j| jdd� d S )	Nr   r+  rÞ  ©rŒ   r�   r  r°   rÛ  r9   r•   )r
   rŸ   r�   r�   r  r   r+   rc   rH  r,   r,   r-   Útest_minimize_l_bfgs_b_boundsó  s
   ÿz.TestLBFGSBBounds.test_minimize_l_bfgs_b_boundsr  )r·   r&   rP  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	   rO   r
   rŸ   r�   r�   )rk   r  r,   r,   r-   Ú'test_minimize_l_bfgs_b_incorrect_boundsú  s
   ÿ"ÿz8TestLBFGSBBounds.test_minimize_l_bfgs_b_incorrect_boundsc              
   C   st   g d¢}ddg}t  ||¡D ])\}}tj| jddg|d|| jdd id�}|d	 s.J |d
 ƒ‚t|j| jdd� qd S )Nr¬  r¥  r,   r   r+  rÞ  Úfinite_diff_rel_step)r‹   rŒ   r�   r  rŽ   r°   rÛ  r9   r•   )	r¯  r°  r
   rŸ   r�   r  r   r+   rc   )rk   r²  Úargssr�   r‹   r¢   r,   r,   r-   Ú test_minimize_l_bfgs_b_bounds_FD  s   ýúz1TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds_FDNr¥  )r‚   rƒ   r„   rl   r�   r�   r¡  r¤  rÒ  r§  rÊ   rJ  rL  r¨  r«  r,   r,   r,   r-   rž  ×  s    


ý
rž  c                   @   sV  e Zd Zdd„ Zd3dd„Zdd„ Zej d¡d	d
„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zej dg d¢¡dd„ ƒZej dg d¢¡dd„ ƒZej d¡ej dg d¢¡dd„ ƒƒZdd „ Zd!d"„ Zej dd#d$g¡d%d&„ ƒZej d'¡ej de¡ej d(d)d*g¡ej d+g d,¢¡d-d.„ ƒƒƒƒZejjej dg d/¢¡d0d1„ ƒƒZd2S )4ÚTestOptimizeScalarc                 C   s
   d| _ d S )Nr4   )rc   rj   r,   r,   r-   rl     r×   zTestOptimizeScalar.setup_methodr4   c                 C   s   || d d S )zObjective functionr1   rÃ   r,   )rk   r+   r&  r,   r,   r-   r�     ó   zTestOptimizeScalar.func                 C   s
  t  | j¡}t|| jdd� t j| jdd�}t|| jdd� t j| jdd�}t|d | jdd� t j| jdd�}t|| jdd� d	}tjt|d
�� t j| jdd� W d   ƒ n1 s\w   Y  d}tjt|d
�� t j| jdd� W d   ƒ d S 1 s~w   Y  d S )Nr9   r•   ©r9  r�  ©ÚbrackT©r“   r   ©iñÿÿÿr+  é   ú/\(f\(xb\) < f\(xa\)\) and \(f\(xb\) < f\(xc\)\)r¿   ©r+  r   r&   ú\(xa < xb\) and \(xb < xc\)©r   r+  r&   )r
   Úbrentr�   r   rc   rÊ   r	   rO   )rk   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 s•w   Y  d}tjt|d�� t j| jdd� W d   ƒ d S 1 s·w   Y  d S )Nr9   r•   r®  r¯  Tr±  r   r²  ©rÆ  )r   r&   rÆ   )rd   r“   r1   r´  r¿   rµ  r¶  r·  )	r
   Úgoldenr�   r   rc   r   rÊ   r	   rO   )rk   r+   Úmaxiter_test_casesrd   rS   Únfev0r�   rÛ  r,   r,   r-   Útest_golden1  s0   ÿ"ÿzTestOptimizeScalar.test_goldenc                 C   s†   t  | jdd¡}t|ddd� t  | jdd¡}t|| jdd� t  | jt dg¡t dg¡¡}t|| jdd� ttt j| jddƒ d S )Nr   r&   rŒ  r•   rÆ   r9   )	r
   Ú	fminboundr�   r   rc   r(   rJ   rN   rO   rÕ  r,   r,   r-   Útest_fminboundQ  s    z!TestOptimizeScalar.test_fminboundc                 C   sn   t jtdd�� t | jt d¡d¡ W d   ƒ n1 sw   Y  t | jdt d¡¡}t	|| j
dd� d S )Nz.*must be finite scalars.*r¿   ©r&   r1   r&   rÆ   r9   r•   )rÊ   r	   rO   r
   r¿  r�   r(   r`   rJ   r   rc   rÕ  r,   r,   r-   Útest_fminbound_scalar\  s
   ÿz(TestOptimizeScalar.test_fminbound_scalarc                 C   s   dd„ }t  |dd¡ d S )Nc                 S   rM  r#  r,   r*   r,   r,   r-   r�   d  rN  z,TestOptimizeScalar.test_gh11207.<locals>.funr   )r
   r¿  )rk   r�   r,   r,   r-   Útest_gh11207c  s   zTestOptimizeScalar.test_gh11207c                 C   s4  t  | j¡j}t|| jdd� t j| jdd�}|jsJ ‚t j| jdtdd�d�}|jr-J ‚t j| jdd	dd
�j}t|| jdd� t j| jdd	d�j}t|| jdd� t j| jdd	dd
�j}t|| jdd� t j| jdd	dd
�j}t|| jdd� t j| jdd	d�j}t|| jdd� t j| jdd	dd
�j}t|| jdd� t j| jdd	dd�j}t|ddd� t j| jdd	dd�j}t|| jdd� t j| jt 	dg¡t 	dg¡ft 	dg¡fdd�j}t|| jdd� t
tt j| jddd	d� t
tt j| jt d¡dfdd	d� t j| jdt 	d¡fdd�j}t|| jdd� d S )Nr9   r•   ÚBrentr¬   r[   rÑ  rá   r®  ©r4   )Úbracketr‹   rŒ   )rŒ   r‹   r²  r»  )r   r&   ÚBounded)r  r‹   rŒ   r&   rŒ  )r&   rÆ   ÚboundedrÆ   r4   )rÆ   r&   ©r  rŒ   r‹   r1   r'  )r
   Úminimize_scalarr�   r+   r   rc   r°   r5  r(   rJ   rN   rO   r`   rÕ  r,   r,   r-   Útest_minimize_scalarh  sš   

ÿ

ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿ
ÿÿÿÿÿÿ
ÿýýÿÿÿÿz'TestOptimizeScalar.test_minimize_scalarc                 C   s>   		 ddd„}t j| jd|tdd�d	�}t|j| jd
d� d S )Nr,   r<   r  c                 [   sØ   |d |d  d }| |ƒ}	d}
d}d}d}|r`|s`||k r`d}|d7 }|| || fD ]}| |g|¢R Ž }|
d7 }
||	k rD|}	|}d}q,|d urM||ƒ |d urX|
|krXd}n|r`|s`||k st j|	|||
|dkd�S )Nr&   r   r6  TFrü  r  )r�   rÆ  r‹   rT  rþ  rd   rÚ  rŽ   rÿ  r   r  r  r  r  r  r  r,   r,   r-   r	  ¦  s4   €ò
ÿz?TestOptimizeScalar.test_minimize_scalar_custom.<locals>.custmin)r   r™   r  r  )rÆ  rŒ   rŽ   r9   r•   r  )r
   rÊ  r�   r5  r   r+   rc   )rk   r	  r¢   r,   r,   r-   Útest_minimize_scalar_custom¤  s   
ÿ
þz.TestOptimizeScalar.test_minimize_scalar_customc                 C   s   t j| jdd� d S )Nr4   ©r‹   ©r
   rÊ  r�   rj   r,   r,   r-   Ú&test_minimize_scalar_coerce_args_paramÇ  s   z9TestOptimizeScalar.test_minimize_scalar_coerce_args_paramrŒ   )r¸  rÈ  r»  c                 C   s"   dD ]}t j| jd|id� qd S )N)r   r&   r1   r[   rˆ   )rŽ   rÎ  )rk   rŒ   rˆ   r,   r,   r-   Ú	test_dispË  s   ÿzTestOptimizeScalar.test_dispc                 C   sˆ   |dkr
dddgini }t j| jfd|i|¤Ž}t|dƒsJ ‚t|dƒs&J ‚t|dƒs-J ‚t|d	ƒs4J ‚t|d
ƒs;J ‚t|dƒsBJ ‚d S )NrÈ  r  r  r·   rŒ   r+   r°   rÛ  r�   r�   rä   )r
   rÊ  r�   ro   )rk   rŒ   r�  r.  r,   r,   r-   Útest_result_attributesÑ  s   z)TestOptimizeScalar.test_result_attributesc              	      sþ   t j d¡ dg‰ ‡ fdd„}d}d}t jdd��\ tƒ �@}| td	¡ | td
¡ | td¡ dg‰ |dkr;d|ini }tj	|fd|i|¤|t
dd�dœ¤Ž}t|jdƒ W d   ƒ n1 s`w   Y  W d   ƒ d S W d   ƒ d S 1 sxw   Y  d S )Nr6   r   c                    s8   ˆ d  d7  < ˆ d dkrt jS | d dt  | ¡  S )Nr   r&   r™   r1   r<   )r(   rŸ  r?   r*   ©ri  r,   r-   rx   ä  s   z0TestOptimizeScalar.test_nan_values.<locals>.funcrµ  rx  rØ   r¥  ro  rp  rq  rÈ  r  rÆ  rÀ  rÑ  rá   F)r(   r5   r8   rÛ   r   rt  ru  rH  r
   rÊ  r5  r   r°   )rk   rŒ   rx   rÆ  r  r|  r�  r±   r,   rÒ  r-   r~  Ü  s&   ÿ
þPõz"TestOptimizeScalar.test_nan_valuesc                 C   sF   dd„ }t  |¡}t|jddd� t j|dddid	�}t|jd
ƒ d S )Nc                 S   rM  r#  r,   r*   r,   r,   r-   rw   þ  rN  zCTestOptimizeScalar.test_minimize_scalar_defaults_gh10911.<locals>.fr   rë   r•   )r&   r  rg  r‚  )r  rŽ   r&   )r
   rÊ  r   r+   )rk   rw   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&   rO  )	rÊ   r	   rO   r
   rÊ  r(   r?   r‡  rŸ  r‘  r,   r,   r-   Ú'test_minimize_non_finite_bounds_gh10911  s   ÿ"ÿz:TestOptimizeScalar.test_minimize_non_finite_bounds_gh10911r¸  r»  c                 C   sJ   d}t jt|d�� tjtj|dd� W d   ƒ d S 1 sw   Y  d S )Nz'Use of `bounds` is incompatible with...r¿   rÁ  ©rŒ   r  )rÊ   r	   rO   r
   rÊ  r(   r?   )rk   rŒ   rb  r,   r,   r-   Ú2test_minimize_unbounded_method_with_bounds_gh10911  s   "ÿzETestOptimizeScalar.test_minimize_unbounded_method_with_bounds_gh10911r!  rÆ  r&   r9   Úfshape)r,   ©r&   ©r&   r&   c           	         s–   ‡ fdd„}d\}}|dkrt ||fd�nt ||fd�}| t ||d�¡ tj|fi |¤Ž}|jj|jj  krF||jƒj  krFˆ ksIJ ‚ J ‚d S )Nc                    s   t  | d ¡ ˆ ¡S ©Nr™   )r(   rJ   Úreshaper*   ©r×  r,   r-   rw   !  r/   zITestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196.<locals>.f)rô   rG   rÈ  )rÆ  rO  )rŒ   rÆ  )r5  Úupdater
   rÊ  r+   Úshaper�   )	rk   rŒ   rÆ  r×  rw   r&  Úbr�  r¢   r,   rÜ  r-   Ú+test_minimize_scalar_dimensionality_gh16196  s   ÿ:z>TestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196)rÈ  r¸  r»  c                 C   sž   dd„ }i }|dkrdnd}ddg||< dd	d
œ}t jtjdd�� tj|f||dœ|¤Ž W d   ƒ n1 s8w   Y  d|d< tj|f||dœ|¤Ž d S )Nc                 S   r4  r0   r,   r*   r,   r,   r-   rw   1  r‹  zBTestOptimizeScalar.test_minimize_scalar_warnings_gh1953.<locals>.frÈ  r  rÆ  r�  r·   Tr[   rÝ  r•  r¿   rá   Frˆ   )rÊ   rG  r
   r{  rÊ  )rk   rŒ   rw   r�  ÚkwdrŽ   r,   r,   r-   Ú$test_minimize_scalar_warnings_gh1953,  s   
ÿÿz7TestOptimizeScalar.test_minimize_scalar_warnings_gh1953NrÅ  )r‚   rƒ   r„   rl   r�   r¹  rÊ   rJ  rK  r¾  rÀ  rÂ  rÃ  rË  rÌ  rÏ  rL  rÐ  rÑ  r~  rÓ  rÔ  rÖ  r   rà  r›  râ  r,   r,   r,   r-   r¬    s>    


<#



	

r¬  c                   @   s6   e Zd Zej d¡dd„ ƒZej dd¡dd„ ƒZdS )	ÚTestBracketr!  c                 C   sP  dd„ }d}t jt|d�� t |dd¡ W d   ƒ n1 s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 s¡w   Y  d S )Nc                 S   ó   d| k | dk @ r| d S dS ©Nr+  r&   r1   g      Y@r,   r*   r,   r,   r-   rw   F  ó   z3TestBracket.test_errors_and_status_false.<locals>.fú9The algorithm terminated without finding a valid bracket.r¿   r+  r&   rx  r¯  c                 S   s<   d| d  d| d   d| d   d| d   d|   d S )	Nr~  rÆ   r™   é   r[   é   r1   r&   r,   r*   r,   r,   r-   rw   S  s   <z8No valid bracket was found before the iteration limit...rš   rZ   r·   rÑ  )	rÊ   r	   rp   r
   rÆ  r(   r‡  r¸  r»  )rk   rw   rÛ  r,   r,   r-   Útest_errors_and_status_falseC  s&   ÿÿÿÿ"ÿz(TestBracket.test_errors_and_status_falserŒ   )r¸  r»  c                 C   sb   dd„ }d}t j|d|d�}|jrJ ‚||jv sJ ‚|jdks!J ‚|jdks(J ‚|jdks/J ‚d S )	Nc                 S   rä  rå  r,   r*   r,   r,   r-   rw   ]  ræ  z9TestBracket.test_minimize_scalar_success_false.<locals>.frç  rx  )rÆ  rŒ   r[   r   r  )r
   rÊ  r°   rÛ  r�   rä   r�   )rk   rŒ   rw   rÛ  r¢   r,   r,   r-   Ú"test_minimize_scalar_success_falseZ  s   
z.TestBracket.test_minimize_scalar_success_falseN)	r‚   rƒ   r„   rÊ   rJ  rK  rê  rL  rë  r,   r,   r,   r-   rã  A  s
    

rã  c                   C   s   t ttjtjdd� d S )Ng{®Gáz„¿rº  )rN   rO   r
   r¸  r(   rD   r,   r,   r,   r-   Útest_brent_negative_tolerancej  rF   rì  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestNewtonCgc                 C   sX   t  ddg¡}tjtj|tjtjddd�}|jsJ |jƒ‚t	|j
t  ddg¡dd� d S ©	Nré   rX   r­   r,  ©r�   r   rÆ  rŒ   r&   rŒ  r®   )r(   rJ   r
   rŸ   r   r   r   r°   rÛ  r   r+   ©rk   rS   r±   r,   r,   r-   Útest_rosenbrocko  s   
üzTestNewtonCg.test_rosenbrockc                 C   sT   t  t¡}tjt|ttddd�}|jsJ |j	ƒ‚t
|jtdd� t
|jtdd� d S )Nr,  r9   )r�   r   rŒ   rÆ  rŒ  r®   r•   )r(   rJ   rR   r
   rŸ   Ú
himmelblaurP   rQ   r°   rÛ  r   r+   Úhimmelblau_xoptr�   Úhimmelblau_minrð  r,   r,   r-   Útest_himmelblauy  s   
ûzTestNewtonCg.test_himmelblauc                 C   sV   t  ddg¡}tjtj|tjdddd�}|jsJ |jƒ‚t|j	t  ddg¡dd	� d S )
Nré   rX   r­  r­   r,  rï  r&   rŒ  r®   )
r(   rJ   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(   rJ   r
   rŸ   r   r   r³   r°   rÛ  r   r+   rð  r,   r,   r-   Útest_hessian_update_strategy�  s   
üz)TestNewtonCg.test_hessian_update_strategyN)r‚   rƒ   r„   rñ  rõ  rö  r÷  r,   r,   r,   r-   rí  n  s
    

rí  c                  C   s  t jj} t g d¢¡}t g d¢¡}t g d¢¡}t g d¢¡}|t g d¢¡ddf|t g d¢¡d	d
f|t g d¢¡ddf|t g d¢¡ddf|t g d¢¡d	d
f|t g d¢¡ddf|t g d¢¡ddf|t g d¢¡ddf|t g d¢¡dd	f|t g d¢¡ddf|t g d¢¡ddf|t g d¢¡dd	f|t g d¢¡ddff}|D ]\}}}}	| ||||ƒ\}
}t|
|dd� t||	dd� q¦t 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ª   r9  )rÄ   r&   çffffff@r[   ©r\   r   r   r   )r\   r1   r9  r   ©rX   r   r   r   rø  rÄ   ©r\   r&   r   r   r+  r&   ©r\   r   r&   r   rª   rù  ©r\   r   r   r&   r9  r[   )rX   r&   r   r   )rX   r   r+  r1   r4   )r6  r   r+  r1   gffffffî?g333333@)rX   r   r+  r   r9   r•   g333333À)r
   r\  Ú_line_for_searchr(   rJ   r   r‡  )Úline_for_searchÚlower_boundÚupper_boundrS   Ú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)rb  r6  r4   çš™™™™™Ù¿r1   ©r(   r@   rJ   r*   r,   r,   r-   rx   Þ  ræ  z$test_linesearch_powell.<locals>.funcrú  r™   rû  r+  rü  r1   rý  r4   rþ  r  ©rb  r   r&   r   ç      ô?©r\   r   r&   r&   çš™™™™™á?©r6  r   r+  r&   çÍÌÌÌÌÌä¿r­   )ÚfvalrÆ  r9   r•   ©rÆ  r  r  r  )r
   r\  Ú_linesearch_powellr(   rJ   r‡  r   ©Úlinesearch_powellrx   rv  r  r  r  r  ÚxiÚlrw   r{   r7   r,   r,   r-   Útest_linesearch_powellÙ  s<   ù
ÿ
ýór  c               
   C   sÖ  t jj} dd„ }t g d¢¡}||ƒ}t dgd ¡}t dgd ¡}t g d¢¡dft g d	¢¡d
ft g d¢¡dft g d¢¡dft g d¢¡dft g d¢¡dft g d¢¡dff}|D ]/\}}| |||d|||d�\}	}
}t|	||| ƒdd� t|
|| dd� t||| dd� q_t dgd dg ¡}t dgd dg ¡}t g d¢¡dft g d	¢¡dft g d¢¡dft g d¢¡dft g d¢¡dft g d¢¡dft g d¢¡dff}|D ]/\}}| |||d|||d�\}	}
}t|	||| ƒdd� t|
|| dd� t||| dd� qát 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� �qÔt 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-   rx   	  ræ  z,test_linesearch_powell_bounded.<locals>.funcrú  g       Àr™   r6  rû  r+  rü  r1   rý  r4   rþ  r  r  r  r  r  r  r  r­   r  r9   r•   g333333Ó¿r[   gÍÌÌÌÌÌÜ?rð   rY   g333333Ã¿)rb  r   r   r1   rÂ   g333333À)r
   r\  r  r(   rJ   r   r‡  r  r,   r,   r-   Útest_linesearch_powell_boundedÿ  sÀ   ù

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

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

ýü
ýùr  c                     sl   t  ddgddg¡‰ ‡ fdd„} t j| ddgdˆ d� t jdgdgd	gd
�‰ dd„ }t j|dgdˆ d� d S )Nr   ç333333ã?rÀ  c                    s8   | \}}| ˆ j k ¡ r| ˆ jk ¡ sJ ‚|d |d  S r#  )ÚlbrI   Úub)r+   r&  rß  rO  r,   r-   r�   €	  s    ztest_powell_limits.<locals>.funr÷   r“  r&   T)r  r   Úkeep_feasiblec                 S   s   | dkr| dks
J ‚t  | ¡S ra  r'   r*   r,   r,   r-   rx   Š	  r‹  z test_powell_limits.<locals>.funcrZ   r  )r�   rS   rŒ   r  )r
   r   rŸ   )r�   rx   r,   rO  r-   Útest_powell_limits|	  s   r"  c                  C   sD   t dd„ dd„ g} | D ]}tj|ddgdd�}t |j¡sJ ‚qd S )Nc                 S   s   t  t| ƒ¡S r>   ©r(   rJ   r   r*   r,   r,   r-   rd  ’	  ó    z$test_powell_output.<locals>.<lambda>c                 S   s   t  t| ƒg¡S r>   r#  r*   r,   r,   r-   rd  ’	  ó    r  rÀ  r÷   )rS   rŒ   )r   r
   rŸ   r(   Úisscalarr�   )Úfunsr�   r¢   r,   r,   r-   Útest_powell_output‘	  s
   þr(  c                   @   sX   e Zd Zdd„ Zeddgd�ej d¡dd„ ƒƒZeddgd�ej d¡d	d
„ ƒƒZ	dS )Ú	TestRosenc                 C   s(   |  g d¢¡}tt |¡|  d¡ƒ d S )NrW   r\   )r^  r#   r
   r   ©rk   rÂ  r+   r,   r,   r-   Ú
test_rosenš	  s   
ÿzTestRosen.test_rosenz	jax.numpyz)JAX arrays do not support item assignment)ÚreasonsÚskip_xp_backendsc                 C   s4   |  g d¢¡}tt |¡|j||  d¡jd�ƒ d S )N)r&   r&   r&   r&   rX   )rm  )r^  r#   r
   r   Ú
zeros_likerm  r*  r,   r,   r-   Útest_rosen_der 	  s   
ÿzTestRosen.test_rosen_derc                 C   sd   |  d¡}t|ƒ}|  g d¢¡}|  g d¢¡}t ||¡}| ||j¡}t |¡| }t||ƒ d S )NrX   )r[   r™   rÆ   )r1   r1   r1   )r^  r$   r
   Úrosen_hess_prodrp  rm  r   r#   )rk   rÂ  ÚoneÚxp_testr+   r{   ÚhpÚdothpr,   r,   r-   Útest_hess_prod¨	  s   
zTestRosen.test_hess_prodN)
r‚   rƒ   r„   r+  r-  rÊ   rJ  Úusefixturesr/  r5  r,   r,   r,   r-   r)  ˜	  s    ÿ
ÿ
r)  c                 C   s8   | \}}|| | d }|||  d }|| ||  S )zx
    R^2 -> R^1 test function for optimization. The function has four local
    minima where himmelblau(xopt) == 0.
    ré  r˜   r,   )r{   r+   rî  r&  rß  r,   r,   r-   rò  ·	  s   rò  c                 C   sn   | \}}t  d|d  d| |  d|  d|d   d d|d  d| |  d|d   d|  d g¡S )Nr™   r[   é*   r1   é   é   r7  r  ©r{   r+   rî  r,   r,   r-   rP   Â	  s   2.ÿrP   c                 C   s^   | \}}t  d|d  d|  d d| d|  gd| d|  d| d|d   d gg¡S )Nrè  r1   r™   r7  r9  r  r:  r,   r,   r-   rQ   È	  s   *&ÿrQ   gHáz®GÑ¿gÍÌÌÌÌÌì¿r[   r1   r\   c                  C   sj   dd„ } dd„ }dd„ }d| dœd|dœd|dœf}d	d
„ }t j|g d¢d|d�}t|jg d¢dd� d S )Nc                 S   s0   t  dd| d   d| d   d| d   g¡S )Né   rG   r   rJ  r&   rK  r1   r  r*   r,   r,   r-   rx   Õ	  ó   0z0test_minimize_multiple_constraints.<locals>.funcc                 S   ó   t  | d g¡S r%   r  r*   r,   r,   r-   Úfunc1Ø	  r2  z1test_minimize_multiple_constraints.<locals>.func1c                 S   r=  r#  r  r*   r,   r,   r-   rj  Û	  r2  z1test_minimize_multiple_constraints.<locals>.func2r=  r>  c                 S   s   d| d | d  | d   S )Nr+  r   r&   r1   r,   r*   r,   r,   r-   rw   â	  ræ  z-test_minimize_multiple_constraints.<locals>.frz  rB  r@  )é}   r   r   r‚  r•   r)  )rx   r>  rj  r<  rw   r¢   r,   r,   r-   Ú"test_minimize_multiple_constraintsÓ	  s   þr@  c                   @   s(   e Zd Zdd„ Zej d¡dd„ ƒZdS )ÚTestOptimizeResultAttributesc                 C   s8   ddg| _ tj| _tj| _tj| _tj| _	ddg| _
d S )NrÆ   )r\   r¼  )rS   r
   r   rx   r   r�   r   r   r0  r�   r  rj   r,   r,   r-   rl   ì	  s   
z)TestOptimizeResultAttributes.setup_methodr1   c              
   C   sÀ   g d¢}ddgi}t D ]R}tƒ �}| td¡ tj| j| j|| j| j	| j
d�}W d   ƒ n1 s1w   Y  |D ]}||v rE||| v rEq8t||ƒsLJ ‚|t|ƒv sTJ ‚q8t|jtƒs]J ‚qd S )N)rä   r�   r+   r°   r’   r�   rÛ  r  rä   z7Method .+ does not use (gradient|Hessian.*) information)rŒ   r�   r   r�   )r   r   rt  rH  r
   rŸ   rx   rS   r�   r   r�   ro   Údirr+  rÛ  Ústr)rk   Ú
attributesrr  rŒ   r|  r¢   Ú	attributer,   r,   r-   Útest_attributes_presentô	  s&   
ÿþüðz4TestOptimizeResultAttributes.test_attributes_presentN)r‚   rƒ   r„   rl   rÊ   rJ  rš  rF  r,   r,   r,   r-   rA  é	  s    
rA  c                 G   s^   | \}}|\}}}}}}	}
}}}}}}||d  || |  ||d   ||  ||  |	 S r#  r,   ©r  r£   r+   rî  r&  rß  rm   rÌ  rÓ   rw   rô  r}  ra  r  rø  r  r`  r,   r,   r-   Úf1
  s   8rH  c                 G   sP   | \}}|\}}}}}}	}
}}}}}}|
 t  || d || d   | ¡ S r#  r'   rG  r,   r,   r-   Úf2
  ó   *rI  c                 G   sP   | \}}|\}}}}}}	}
}}}}}}| t  || d || d   | ¡ S r#  r'   rG  r,   r,   r-   Úf3
  rJ  rK  c                 G   s0   t | g|¢R Ž t| g|¢R Ž  t| g|¢R Ž  S r>   )rH  rI  rK  ©r  r£   r,   r,   r-   Ú
brute_func
  r<  rM  c                   @   sX   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zej 	d	¡d
d„ ƒZ
ejjdd„ ƒZdd„ ZdS )Ú	TestBrutec                 C   s4   d| _ tdddƒtdddƒf| _t ddg¡| _d S )N)r1   r[   r˜   r¸   r—   r·   é,   r+  r1   r9  r&   r�  rZ   ry  r™   ç      Ð?g_}ú×èð¿g•÷iÃþîü?)r£   ÚsliceÚrrangesr(   rJ   rc   rj   r,   r,   r-   rl   $
  s   zTestBrute.setup_methodc                 G   s   t |g|¢R Ž S r>   )rM  )rk   r  r£   r,   r,   r-   rM  )
  r­  zTestBrute.brute_funcc                 C   sÔ   t jt| j| jdt jd�}t|d | jdd� t|d t| jg| j¢R Ž dd� t jt| j| jdt jd�}t|d | jdd� t|d t| jg| j¢R Ž dd� t j| j| j| jdt jd�}t|d | jdd� d S )NT©r‹   r“   Úfinishr   rà   r•   r&   )	r
   ÚbruterM  rR  r£   r  r   rc   rŸ   )rk   Úresbruter,   r,   r-   Ú
test_brute-
  s(   ÿÿþÿþzTestBrute.test_brutec                 C   s    dd„ }t j|dgdd d� d S )Nc                 S   s,   t | jƒdks	J ‚| jd dksJ ‚| d S )Nr&   r   r1   )r|  rÞ  r*   r,   r,   r-   rw   G
  s   zTestBrute.test_1D.<locals>.frx  r[   )ÚNsrT  )r
   rU  rÈ  r,   r,   r-   Útest_1DD
  s   zTestBrute.test_1Dr·   c                 C   sZ   t jt| j| jdd d�}t jt| j| jdd dd�}t|d |d ƒ t|d |d ƒ d S )NTrS  r1   )r‹   r“   rT  Úworkersr+  r   )r
   rU  rM  rR  r£   r   )rk   rV  Ú	resbrute1r,   r,   r-   Útest_workersN
  s   ÿÿzTestBrute.test_workersc                    sf   t j d¡‰ ‡ fdd„}d}tjt|d�� tj|| j| j	dd� W d   ƒ d S 1 s,w   Y  d S )Nr6   c                    rN  rO  rP  rL  rQ  r,   r-   rx   ^
  rÔ   z,TestBrute.test_runtime_warning.<locals>.funczFfinal optimization did not succeed.*|Maximum number of function eval.*r¿   T)r‹   rˆ   )
r(   r5   rU  rÊ   rG  rH  r
   rU  rR  r£   )rk   Úcapsysrx   rb  r,   rQ  r-   rI  Z
  s   "ÿzTestBrute.test_runtime_warningc                 C   s0   dd„ }t j|tdddƒfdd�}t|dƒ d S )	Nc                 W   s   | |d  S r0  r,   ©r+   r‹   r,   r,   r-   rw   g
  r‹  z+TestBrute.test_coerce_args_param.<locals>.fry  r™   rP  r1   rÍ  r   )r
   rU  rQ  r   )rk   rw   rV  r,   r,   r-   Útest_coerce_args_parame
  s   z TestBrute.test_coerce_args_paramN)r‚   rƒ   r„   rl   rM  rW  rY  rÊ   rJ  rš  r\  r›  rI  r_  r,   r,   r,   r-   rN  "
  s    




rN  rÀ  c                     s®   dd l } dd l‰‡fdd„‰‡fdd„‰d‰ ‡ ‡fdd„}‡ ‡fd	d
„}| j ¡ �$}g }| | |¡¡ | | |¡¡ |D ]}| ¡  q>W d   ƒ d S 1 sPw   Y  d S )Nr   c                    s   ˆ   d¡ | d d S )Nr<   r   r1   ©Úsleepr*   ©Útimer,   r-   Ú
objective1w
  s   
z*test_cobyla_threadsafe.<locals>.objective1c                    s   ˆ   d¡ | d d d S )Nr<   r   r&   r1   r`  r*   rb  r,   r-   Ú
objective2{
  s   
z*test_cobyla_threadsafe.<locals>.objective2ÚCOBYLAc                      ó   t jˆdgˆ d�S ©Nr\   r¬   r%  r,   )Ú
min_methodrd  r,   r-   Ú
minimizer1�
  ó   þz*test_cobyla_threadsafe.<locals>.minimizer1c                      rg  rh  r%  r,   )ri  re  r,   r-   Ú
minimizer2†
  rk  z*test_cobyla_threadsafe.<locals>.minimizer2)Úconcurrent.futuresrc  ÚfuturesÚThreadPoolExecutorrs   Úsubmitr.  )Ú
concurrentrj  rl  ÚpoolÚtasksrn   r,   )ri  rd  re  rc  r-   Útest_cobyla_threadsafen
  s   
ÿ"ürt  c                   @   s@   e Zd Zdd„ Zdd„ Zej d¡dd„ ƒZdd	„ Z	d
d„ Z
dS )ÚTestIterationLimitsc                 C   ó   t  ¡ | _d S r>   )re   rf   r  rj   r,   r,   r-   rl   —
  rÔ   z TestIterationLimits.setup_methodc                 C   sr   t | jdƒs
d| j_| j jd7  _t |d d |d d  ¡t |d |d ¡}}t |d | ¡|d  S )Nrm   r   r&   r1   rÀ  rZ   )ro   r  rm   r(   r§  Úarctan2r?   )rk   rä  rT   rn   r,   r,   r-   Ú	slow_funcš
  s
   4zTestIterationLimits.slow_funcr·   c                 C   ó   |   dd¡ d S )NrS  éÈ   ©Úcheck_limitsrj   r,   r,   r-   Útest_neldermead_limit¡
  r­  z)TestIterationLimits.test_neldermead_limitc                 C   ry  )Nr  r]   r{  rj   r,   r,   r-   Útest_powell_limit¥
  r2  z%TestIterationLimits.test_powell_limitc              	   C   s(  ddgddgddgfD �]}dD ]1}d| j _tj| j||d|id�}| j j|d ks,J ‚|d	 r9|d |k s8J ‚q|d |ksAJ ‚qdD ]#}tj| j||d
|id�}|d	 r_|d |ks^J ‚qD|d |ksgJ ‚qDddgddgdtjgfD ]@\}}d| j _tj| j||||dœd�}| j j|d ks“J ‚|d	 r¦|d |k r£|d |ks¥J ‚qt|d |ks´|d |ks´J ‚qttjd gd tjgfD ]Q\}}d| j _tj| j||||dœd�}| j j|d ksÞJ ‚|d	 rü|d u rñ|d |d k sðJ ‚q¿|d |d ksûJ ‚q¿|d |d k�s|d |d k�sJ ‚q¿qd S )Nr<   r&   r1   )r  iô  éˆ  r   rT  rá   r�   r°   rd   rä   r  r  )rd   rT  )r  rm   r
   rŸ   rx  r(   r‡  )rk   rŒ   Údefault_itersÚstart_vÚmfevr¢   Úmitr,   r,   r-   r|  ¨
  sd   
þ
þ 
ÿþ€
ÿþ€òâz TestIterationLimits.check_limitsN)r‚   rƒ   r„   rl   rx  rÊ   rJ  rš  r}  r~  r|  r,   r,   r,   r-   ru  “
  s    

ru  c                  C   s”   dd„ } dd„ }dd„ }g d¢}|D ]}t j| t dg¡|d	�}|jjd
ks(J ‚qg d¢}|D ]}t j| t dg¡|||d�}|jjd
ksGJ ‚q/d S )Nc                 S   s   | |  S r>   r,   r*   r,   r,   r-   r�   Ù
  rN  z2test_result_x_shape_when_len_x_is_one.<locals>.func                 S   s   d|  S ©Nr6  r,   r*   r,   r,   r-   r�   Ü
  rN  z2test_result_x_shape_when_len_x_is_one.<locals>.jacc                 S   rl  r„  r  r*   r,   r,   r-   r   ß
  rÔ   z3test_result_x_shape_when_len_x_is_one.<locals>.hess)	rS  r÷   rŠ   r³   rÞ  r«  rf  ÚCOBYQArB  r<   r¬   rØ  )r´  r¸  rµ  r¹  r¶  r,  r·  )r
   rŸ   r(   rJ   r+   rÞ  )r�   r�   r   r±  rŒ   r¢   r,   r,   r-   Ú%test_result_x_shape_when_len_x_is_oneØ
  s   ÿýr†  c                   @   rÓ  )ÚFunctionWithGradientc                 C   rv  r>   )re   rf   Únumber_of_callsrj   r,   r,   r-   rÔ  ò
  rÔ   zFunctionWithGradient.__init__c                 C   s:   t | jdƒs
d| j_| j jd7  _t |d ¡d| fS )Nrm   r   r&   r1   )ro   rˆ  rm   r(   r@   rÕ  r,   r,   r-   rÖ  õ
  s   zFunctionWithGradient.__call__Nr×  r,   r,   r,   r-   r‡  ñ
  s    r‡  c                   C   s   t ƒ S r>   )r‡  r,   r,   r,   r-   Úfunction_with_gradientü
  s   r‰  c                 C   sŠ   t | ƒ}t ddg¡}t||ƒdƒ | jjdksJ ‚t| |¡d| ƒ | jjdks.J dƒ‚t|d| ƒddd	� | jjdksCJ dƒ‚d S )
NrX   r6  rk  r&   r1   zHfunction is not recomputed if gradient is requested after function valueg      4@ú(different input triggers new computationrd  )r   r(   rJ   r   rˆ  rm   Ú
derivative©r‰  Úmemoized_functionrS   r,   r,   r-   Ú)test_memoize_jac_function_before_gradient  s   ÿþÿrŽ  c                 C   s�   t | ƒ}t ddg¡}t| |¡d| ƒ | jjdksJ ‚t||ƒdƒ | jjdks.J dƒ‚t| d| ¡d| dd	� | jjdksFJ dƒ‚d S )
NrX   r6  r1   r&   rk  zHfunction is not recomputed if function value is requested after gradientr™   rŠ  rd  )r   r(   rJ   r   r‹  rˆ  rm   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jdks$J ‚| 	|d ¡ | jjdks3J ‚| 	|d ¡ | jjd	ksBJ ‚dS )
z¹ Tests that using MemoizedJac in combination with ScalarFunction
        and BFGS does not lead to repeated function evaluations.
        Tests changes made in response to GH11868.
    rX   rZ   r,   Nr&   r<   r1   rG   r[   )
r   r‹  r
   r³   r(   rJ   r   rˆ  rm   r�   )r‰  r�  r�   r   rS   Ú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-   rd  @  r%  ztest_gh12696.<locals>.<lambda>FrÚ   )r   r
   r¿  r(   r  r,   r,   r,   r-   Útest_gh12696<  s
   ÿ"ÿr’  c                     s’  t j d¡} |  d¡}t  g d¢¡‰t  g d¢¡}ˆ|k‰d‡‡fdd„	‰ ‡ fdd	„‰‡ fd
d„‰‡ fdd„}‡ fdd„}‡ fdd„}‡ fdd„}‡ fdd„}t|t j dƒ}t|t j d|ƒ}	t|t j dƒ}
t|t j d|ƒ}d}ˆddœˆˆdœ‡‡fdd„ddœf}dd„ tf}dg g f||	f||f|	g|	gf|
g|gf||
g|	|gf||g|	|gf|	|g|	|gff	}d |f}|||||ˆ||ˆdœ	}|S )Nr   r™   )r   r1   r+  rb  )r[   r1   r1   rb  Tc                    s0   |r	| j dks	J ‚|rt| ˆ  ˆˆ  ƒ d S d S rÚ  )rý  r   )r+   Ú
check_sizeÚcheck_values)Úi_ebr  r,   r-   Úcheck_xM  s
   ÿz(setup_test_equal_bounds.<locals>.check_xc                    ó   ˆ | ƒ t  | ¡S r>   r–  r*   ©r–  r,   r-   rx   S  ó   
z%setup_test_equal_bounds.<locals>.funcc                    r—  r>   )r
   r   r*   r˜  r,   r-   r|   W  r™  z%setup_test_equal_bounds.<locals>.gradc                    s   ˆ | ƒ d S r>   r,   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-   Úconstraint1^  ó   z,setup_test_equal_bounds.<locals>.constraint1c                    ó"   ˆ | dd� t  | ¡}d|d< |S )NFrš  r&   r   ©r(   r.  ©r+   Údcr˜  r,   r-   Ú	jacobian1b  ó   
z*setup_test_equal_bounds.<locals>.jacobian1c                    s   ˆ | dd� | dd… d S )NFrš  r1   r[   rZ   r,   r*   r˜  r,   r-   Úconstraint2h  rœ  z,setup_test_equal_bounds.<locals>.constraint2c                    r�  )NFrš  r&   r1   rž  rŸ  r˜  r,   r-   Ú	jacobian2l  r¢  z*setup_test_equal_bounds.<locals>.jacobian2)rÞ  rB  r«  Fr   c                    s   ˆ | ƒˆ| ƒfS r>   r,   r*   rÐ  r,   r-   rd  ~  r%  z)setup_test_equal_bounds.<locals>.<lambda>c                 S   s   t t| |ƒƒS r>   )ÚlistÚzip©r  r   r,   r,   r-   rd  ‚  r$  rŸ  )	r±  ÚkwdsÚbound_typesr  Ú	callbacksr  r   rS   r•  )TT)r(   r5   rs  r©  rJ   r   r‡  r   )r;   rS   r   rÚ  r›  r¡  r£  r¤  Úc1aÚc1bÚc2aÚc2br±  r¨  r©  r  rª  Údatar,   )r–  rx   r|   r•  r  r-   Úsetup_test_equal_boundsE  sP   
ÿþÿûþr°  z0Failures due to floating point issues, not logicÚdicts)ÚmodeÚ	CompilersÚfortranÚnamez
intel-llvmr   r±  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 rˆtj|j|< |jjd dks’J ‚t|j| |j| dd� |d sÖ|	sØt|tƒsÚdd„ }tj||ddg | |ddd… d�}t|j|jƒ t|jddg |jdd� dS dS dS dS )z½
    Tests that minimizers still work if (bounds.lb == bounds.ub).any()
    gh12502 - Divide by zero in Jacobian numerical differentiation when
    equality bounds constraints are used
    Úaarch64r«  r�   FNzTolerance violation on aarchr  r   rS   r•  rB  z)Only SLSQP supports nonlinear constraints)rS   rŒ   r  r  rÚ  )rŒ   r�   r  r  gTäqs*¹>r®   gü©ñÒMb@?r   r™   r9   c                 S   s,   t  t jdt jdg¡}| |ddg< t |¡S )Nr1   r+  r   )r(   rJ   rŸ  r
   r   )r+   Únew_xr,   r,   r-   r�   Ò  s   
ztest_equal_bounds.<locals>.funr1   rÕ  g�íµ ÷ÆÀ>r,   )ÚplatformÚmachinerÊ   rr  Úeb_datarÝ  r
   rŸ   r   r   r°   r   r�   r+   r(   rŸ  r�   rÞ  r+  r   )rŒ   r¨  r¶  r  rÚ  r  r   rS   r•  Útest_constraintsÚreference_constraintsÚ	fd_neededr  r¢   Úexpectedr�   Ú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rÁdd„ }t|t	j
 dƒ}t j|||| |gd�}|jdu sqJ ‚t|j|dd	gƒƒ |jdks‚J ‚d}|j |¡sŒJ ‚t|t	j
 dƒ}t j|||| |gd�}|jdu s¦J ‚t|j|dd	gƒƒ |jdks·J ‚d}|j |¡sÃJ ‚d S d S )Nr&   c                 S   s   t j | ¡| S r>   )r(   ÚlinalgÚnorm)r+   Úp1r,   r,   r-   rw   è  r2  z test_all_bounds_equal.<locals>.frÙ  )r1   r1   )rX   r(  r'  rX   r6  z/All independent variables were fixed by bounds.)r1   rÉ  r1   rB  c                 S   r›  r>   r$  r*   r,   r,   r-   Úconù  r×   z"test_all_bounds_equal.<locals>.conr\   )r  rŒ   r  Fz3All independent variables were fixed by bounds, butr™   Tz8All independent variables were fixed by bounds at valuesrØ  )r
   rŸ   r°   r   r�   r�   rÛ  Úupperr   r(   r‡  r/  )	rŒ   rw   r  rS   r¢   r‹   rÅ  Ú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   r[   r&   r1   r,   r*   r,   r,   r-   rw     s   (ztest_eb_constraints.<locals>.fc                 S   s$   | d | d  | d  | d  d S )Nr   r&   r1   r[   é(   r,   r*   r,   r,   r-   Úcfun  s   $z!test_eb_constraints.<locals>.cfunr=  r>  )r   rÀ  r™   )rÆ   rÆ   r&   )r&   r1   r[   r™   rB  )rS   rŒ   r  r  r   r�   r%  )rw   rÊ  r  r  r,   r,   r-   Útest_eb_constraints  s   
ûrË  c                  C   sh   t tttttdœ} |  ¡ D ]\}}|D ]}t||ƒ qqddddœ}| ¡ D ]\}}tt	t||ƒ q&d S )N)rŸ   rÊ  ÚrootÚroot_scalarÚlinprogÚquadratic_assignmentÚekkirõ   )rŸ   ÚmaximizeÚmaximize_scalar)
r   r   r   r   r   r   Úitemsr   rN   rO   )Úsolver_methodsÚsolverr±  rŒ   Ú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 )Nrk  r¼  r§  r—   r÷   r“  )r
   r   rŸ   r   r(   rJ   rO  r,   r,   r-   Útest_bounds_with_list?  s   
ÿrØ  c            
      C   s”   dd„ } dd„ }dd„ }g d¢}g d¢}t  d	¡d
 }tD ]*}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(   rM   rý  r@   r;  r,   r,   r-   ÚfquadK  s   
z/test_x_overwritten_user_function.<locals>.fquadc                 S   s(   t  t  | ¡¡}| d9 } | d| 8 } | S r#  )r(   rM   rý  r;  r,   r,   r-   Ú	fquad_jacQ  s   z3test_x_overwritten_user_function.<locals>.fquad_jacc                 S   s   t  t  | ¡¡d S r„  )r(   rË   rý  r*   r,   r,   r-   Ú
fquad_hessW  r/   z4test_x_overwritten_user_function.<locals>.fquad_hess)r3  r¸  rµ  r¹  r¶  r´  )r¸  rµ  r¹  r¶  r´  rÆ   r4   r·  g-Cëâ6*?r•   )	r(   r�  r   r
   rŸ   r   r+   rM   rý  )
rÙ  rÚ  rÛ  Úmeth_jacÚ	meth_hessrS   Úmethr�   r   r¢   r,   r,   r-   Ú test_x_overwritten_user_functionG  s    ørß  c                   @   s   e Zd Zdd„ ZdS )ÚTestGlobalOptimizationc                 C   sº   dd„ }t j|dd�t  |dg¡t  |dg¡t  |dg¡t  |dg¡g}|D ]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   rM  r#  r,   r*   r,   r,   r-   rx   r  rN  zDTestGlobalOptimization.test_optimize_result_attributes.<locals>.funcr&   )rS   )ry  r™   r+   r°   rÛ  r�   r�   rä   )	r
   ÚbasinhoppingÚdifferential_evolutionÚshgoÚdual_annealingÚdirectr+  r   ro   )rk   rx   r,  r.  r,   r,   r-   Útest_optimize_result_attributesq  s    üùz6TestGlobalOptimization.test_optimize_result_attributesN)r‚   rƒ   r„   ræ  r,   r,   r,   r-   rà  o  s    rà  c                  C   s@   t  tt¡} t| ttƒdd� t  tt¡}t|ttƒdd� d S )Nrú   r®   )r
   Úapprox_fprimerR   rò  r   rP   rQ   )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 rr  r,   r*   r,   r,   r-   rw   –  ræ  ztest_gh12594.<locals>.fr  r·   r§  rÍ   r÷   r“  )r   r
   rŸ   r(   rJ   r   r�   r+   )rw   r  r¢   rå   r,   r,   r-   Útest_gh12594‘  s    ré  r,  r´  Úsparse_typec                    sŒ   ‡ fdd„}ddg}t jt|| t|d�}t jt|| ttd�}t|j|jƒ t|j|jƒ |j|jks4J ‚|j	|j	ks<J ‚|j
|j
ksDJ ‚d S )Nc                    s   ˆ t | ƒƒS r>   )r   r*   ©rê  r,   r-   Úsparse_rosen_hess«  r‹  z.test_sparse_hessian.<locals>.sparse_rosen_hessr6  r·  )r
   rŸ   r   r   r   r   r�   r+   r�   r‘   Únhev)rŒ   rê  rì  rS   Ú
res_sparseÚ	res_denser,   rë  r-   Útest_sparse_hessian¢  s   	
ÿ
ÿrð  )�r…   r¯  r¹  re   Únumpyr(   Únumpy.testingr   r   r   r   r   r   r   rÊ   r	   rN   Úscipyr
   Úscipy.optimize._minimizer   r   r   r   r   Úscipy.optimize._linprogr   Úscipy.optimize._rootr   Úscipy.optimize._root_scalarr   Úscipy.optimize._qapr   Ú(scipy.optimize._differentiable_functionsr   r   Úscipy.optimize._optimizer   r   r   Úscipy.optimizer   r   r   Úscipy.sparser   r   r   r   r    r!   Úscipy.conftestr"   Úscipy._lib._array_api_no_0dr#   r$   rJ  r-  rU   rV   r†   rW  rc  rf  rj  rq  rt  rw  r›  r}  rŠ  r‘  r“  r—  r˜  r™  rš  rL  r�  rž  r¬  rã  rì  rí  r
  r  r  r"  r(  r)  rò  rP   rQ   rR   ró  rô  r@  rA  rH  rI  rK  rM  rN  rš  rt  ru  r†  r‡  Úfixturer‰  rŽ  r�  r‘  r’  r°  r»  Úxfail_on_32bitrM  Úshow_configrÁ  rÈ  rË  r×  rØ  rß  rà  rè  ré  rð  r,   r,   r,   r-   Ú<module>   sú    $ 6:    



L*      þ

=  /),?&}#L
#E
	T
ÿþ>
+(
ÿ