a
    ‡ù»jGî ã                
   @   s0  d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
mZmZ ddlZddlmZ ddlmZ ddlmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddl m!Z!m"Z" ddl#m$Z$m%Z%m&Z& ddl'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 dd„ Z2G dd„ dƒZ3G dd„ de3ƒZ4dd„ Z5dd„ Z6dd„ Z7dd„ Z8dd„ Z9d d!„ Z:d"d#„ Z;d$d%„ Z<d&d'„ Z=d(d)„ Z>G d*d+„ d+e4ƒZ?G d,d-„ d-e4ƒZ@G d.d/„ d/e4ƒZAG d0d1„ d1e4ƒZBG d2d3„ d3e3ƒZCejD Ed4g d5¢¡d6d7„ ƒZFG d8d9„ d9ƒZGG d:d;„ d;ƒZHG d<d=„ d=ƒZId>d?„ ZJG d@dA„ dAƒZKdBdC„ ZLdDdE„ ZMdFdG„ ZNdHdI„ ZOG dJdK„ dKƒZPdLdM„ ZQdNdO„ ZRdPdQ„ ZSdRdSgZTdTdUgZUdVZVdWdX„ ZWG dYdZ„ dZƒZXd[d\„ ZYd]d^„ ZZd_d`„ Z[dadb„ Z\G dcdd„ ddƒZ]dedf„ Z^G dgdh„ dhƒZ_didj„ Z`G dkdl„ dlƒZaejbdmdn„ ƒZcdodp„ Zddqdr„ Zedsdt„ Zfdudv„ Zgdwdx„ Zhehƒ ZiejD jdy¡ejD Ed4eidz ¡ejD Ed{eid{ ¡ejD Ed|eid} ¡ejD Ed~eid~ ¡ejD Edeid€ ¡d�d‚„ ƒƒƒƒƒƒZkejD Ed4eidz ¡dƒd„„ ƒZld…d†„ Zmd‡dˆ„ Znd‰dŠ„ Zod‹dŒ„ ZpG d�dŽ„ dŽƒZqd�d�„ Zrd‘d’„ ZsejD Ed4d“d”g¡ejD Ed•e,e-e.e/e0e1g¡d–d—„ ƒƒZtdS )˜z·
Unit tests for optimization routines from optimize.py

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

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

é    N)Úassert_allcloseÚassert_equalÚassert_almost_equalÚassert_no_warningsÚassert_warnsÚassert_array_lessÚsuppress_warnings)Úraises)Úoptimize)ÚBoundsÚNonlinearConstraint)ÚMINIMIZE_METHODSÚMINIMIZE_METHODS_NEW_CBÚMINIMIZE_SCALAR_METHODS)ÚLINPROG_METHODS)ÚROOT_METHODS)ÚROOT_SCALAR_METHODS)ÚQUADRATIC_ASSIGNMENT_METHODS)ÚScalarFunctionÚ
FD_METHODS)Ú
MemoizeJacÚshow_optionsÚOptimizeResult)ÚrosenÚ	rosen_derÚ
rosen_hess)Ú
coo_matrixÚ
csc_matrixÚ
csr_matrixÚ	coo_arrayÚ	csr_arrayÚ	csc_arrayc               	   C   sX  dd„ } dd„ }t  dg¡}t | ||¡}t|dƒ tj| ||ddd	�}t|dƒ tj| ||d
d�}t|dƒ tj| ||d
ddd�}t|dƒ ttj| ||dd�d ƒ}|dks´J ‚ttj| ||dddd�d ƒ}|dksÞJ ‚dd„ }dd„ }t  ddd¡}tj|||ddd	�}t|dƒ tttj|||ddd	� tjt	t
tddd	�}|dk �sTJ ‚d S )Nc                 S   s   ddt  |  ¡  S ©Né   ©ÚnpÚexp©Úx© r)   úHE:\soccer\ml_env\Lib\site-packages\scipy/optimize/tests/test_optimize.pyÚexpit*   s    ztest_check_grad.<locals>.expitc                 S   s    t  |  ¡dt  |  ¡ d  S ©Nr#   é   r$   r'   r)   r)   r*   Ú	der_expit-   s    z"test_check_grad.<locals>.der_expitç      ø?r   ÚrandoméÒ  )Ú	directionÚseedç�íµ ÷Æ°>)Úepsilon)r5   r2   r3   çš™™™™™¹?çH¯¼šò×z>c                 S   s   | t  | ¡  ¡ S ©N)r%   ÚsinÚsumr'   r)   r)   r*   Úx_sinxE   s    ztest_check_grad.<locals>.x_sinxc                 S   s   t  | ¡| t  | ¡  S r8   ©r%   r9   Úcosr'   r)   r)   r*   Ú
der_x_sinxH   s    z#test_check_grad.<locals>.der_x_sinxr-   çš™™™™™É?Zrandom_projectionÚallg�íµ ÷Æ >)r%   Úarrayr
   Z
check_gradr   ÚabsÚarangeÚassert_raisesÚ
ValueErrorÚhimmelblau_gradÚhimmelblau_hessÚhimmelblau_x0)r+   r.   Úx0Úrr;   r>   r)   r)   r*   Útest_check_grad&   sL    

ÿ

ÿ
ÿÿ
ÿ
þ
ÿrK   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚCheckOptimizezÂ Base test case for a simple constrained entropy maximization problem
    (the machine translation example of Berger et al in
    Computational Linguistics, vol 22, num 1, pp 39--72, 1996.)
    c                 C   sv   t  g d¢g d¢g d¢g d¢g d¢g¡| _t  g d¢¡| _t  dt j¡| _t  g d¢¡| _d| _d	| _	d	| _
g | _d S )
N©r#   r#   r#   )r#   r#   r   )r#   r   r#   )r#   r   r   )ç      ð?ç333333Ó?ç      à?é   )ç        g¾š\¼ºËà¿g¢ß)ªŸ3ß?éè  r   )r%   rA   ÚFÚKÚzerosZfloat64ÚstartparamsÚsolutionÚmaxiterÚ	funccallsÚ	gradcallsÚtrace©Úselfr)   r)   r*   Úsetup_methoda   s    
üzCheckOptimize.setup_methodc                 C   sj   |  j d7  _ | j dkr tdƒ‚t | j|¡}t tt |¡ƒ¡}|t | j|¡ }| j	 
t |¡¡ |S )Nr#   ip  z+too many iterations in optimization routine)rZ   ÚRuntimeErrorr%   ÚdotrT   Úlogr:   r&   rU   r\   ÚappendÚcopy)r^   r(   Úlog_pdotÚlogZÚfr)   r)   r*   Úfunco   s    
zCheckOptimize.funcc                 C   sV   |  j d7  _ t | j|¡}t tt |¡ƒ¡}t || ¡}t | j ¡ |¡| j S r"   )	r[   r%   ra   rT   rb   r:   r&   Z	transposerU   ©r^   r(   re   rf   Úpr)   r)   r*   Úgrady   s
    zCheckOptimize.gradc                 C   s`   t  | j|¡}t  tt  |¡ƒ¡}t  || ¡}t  | jjt  t  |¡| jt  | jj|¡ ¡¡S r8   )r%   ra   rT   rb   r:   r&   ÚTZdiagri   r)   r)   r*   Úhess€   s    
"ÿzCheckOptimize.hessc                 C   s   t  |  |¡|¡S r8   )r%   ra   rm   ©r^   r(   rj   r)   r)   r*   Úhessp‡   s    zCheckOptimize.hesspN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r_   rh   rk   rm   ro   r)   r)   r)   r*   rL   [   s   
rL   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	j
 d¡dd„ ƒZdd„ Zdd„ Zdd„ Ze	j
 ddgddgddgddgg¡dd„ ƒZdd „ Ze	j
jd!d"�d#d$„ ƒZd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9S ):ÚCheckOptimizeParameterizedc           	   
   C   s   | j r`| j| jddœ}tj| j| jdd| j|d�}|d |d |d |d	 |d
 f\}}}}}n2tj| j| j| jd| jd| jdd�}|\}}}}}t	|  |¡|  | j
¡dd� | jdksÂJ | jƒ‚| jdksÖJ | jƒ‚t	| jdd… g d¢g d¢gddd� d S )NF©rY   ÚdispÚ
return_allr)   ÚCG)ÚargsÚmethodÚjacÚoptionsr(   ÚfunÚnfevÚnjevÚstatusT)rY   Úfull_outputrv   Úretallr4   ©Úatolé	   é   r-   é   )r   ç      à¿rP   )r   gÃ;Ó±.à¿g)`$|;¾ß?ç›+¡†›„=r7   ©r„   Úrtol)Úuse_wrapperrY   rv   r
   Úminimizerh   rW   rk   Úfmin_cgr   rX   rZ   r[   r\   )	r^   ÚoptsÚresÚparamsÚfoptÚ
func_callsÚ
grad_callsÚwarnflagÚretvalr)   r)   r*   Útest_cg�   s6    ÿþ ÿ
ýÿÿýz"CheckOptimizeParameterized.test_cgc                 C   sN   dd„ }t  ddd¡D ]2}tj||gdd�}|js6J ‚t|jdgd	d
� qd S )Nc                 S   s   ddt  d| d  ¡ d  S )Ng      @r#   ç      ø¿rP   r-   r$   )rJ   r)   r)   r*   rg   ­   s    z8CheckOptimizeParameterized.test_cg_cornercase.<locals>.fg      è¿rQ   éG   rx   ©rz   rP   çñhãˆµøä>©r‹   )r%   Zlinspacer
   r�   Úsuccessr   r(   )r^   rg   rI   Úsolr)   r)   r*   Útest_cg_cornercase¬   s
    
z-CheckOptimizeParameterized.test_cg_cornercasec              
   C   s  | j rp| j| jddœ}tj| j| j| jdd|d�}|d |d |d |d	 |d
 |d |d f\}}}}}}}	n6tj| j| j| jd| jd| jdd�}
|
\}}}}}}}	t	|  |¡|  | j
¡dd� | jdksÖJ | jƒ‚| jdksêJ | jƒ‚t	| jdd… g d¢g d¢gddd� d S )NFru   ÚBFGSr)   ©r{   rz   ry   r|   r(   r}   r{   Zhess_invr~   r   r€   T©ry   rY   r�   rv   r‚   r4   rƒ   é
   é   é   )r   g˜&ó/LÍà¿gB__E7ß?)r   g$ŸÙÜËà¿gÂ
|²3ß?r‰   r7   rŠ   )rŒ   rY   rv   r
   r�   rh   rW   rk   Ú	fmin_bfgsr   rX   rZ   r[   r\   )r^   r�   r�   r‘   r’   ZgoptZHoptr“   r”   r•   r–   r)   r)   r*   Ú	test_bfgs·   s<    ÿþþýÿ
ÿÿýz$CheckOptimizeParameterized.test_bfgsc                 C   sj   t jtdd��H t g d¢¡}| jt d¡ dœ}tjtj	|dd|d� W d   ƒ n1 s\0    Y  d S )	Nú+'hess_inv0' matrix isn't positive definite.©Úmatch©gÍÌÌÌÌÌô?çffffffæ?çš™™™™™é?çffffffþ?ç333333ó?é   ©rv   Ú	hess_inv0r    r)   ©rI   rz   ry   r|   )
Úpytestr	   rE   r%   rA   rv   Úeyer
   r�   r   )r^   rI   r�   r)   r)   r*   Útest_bfgs_hess_inv0_negÙ   s    ÿz2CheckOptimizeParameterized.test_bfgs_hess_inv0_negc                 C   st   t jtdd��R t g d¢¡}t d¡}d|d< | j|dœ}tjtj	|dd	|d
� W d   ƒ n1 sf0    Y  d S )Nr¨   r©   r«   r°   r   ©r   r   r±   r    r)   r³   )
r´   r	   rE   r%   rA   rµ   rv   r
   r�   r   )r^   rI   r²   r�   r)   r)   r*   Útest_bfgs_hess_inv0_semiposã   s    
ÿz6CheckOptimizeParameterized.test_bfgs_hess_inv0_semiposc                 C   sn   t j}t g d¢¡}| jdt d¡ dœ}t j||dd|d�}t j||ddd| jid�}t|j|jd	d
� d S )Nr«   ç{®Gáz„?r°   r±   r    r)   r³   rv   r4   rƒ   )	r
   r   r%   rA   rv   rµ   r�   r   r}   )r^   r}   rI   r�   r�   Zres_truer)   r)   r*   Útest_bfgs_hess_inv0_sanityï   s    ÿÿz5CheckOptimizeParameterized.test_bfgs_hess_inv0_sanityúignore::UserWarningc              	      sœ   dd„ ‰ ‡ fdd„}dg}t jdd��b | jrTd| ji}tjˆ ||d	d
|d�d }ntjˆ ||| jd�}t  ˆ |ƒ¡rzJ ‚W d   ƒ n1 sŽ0    Y  d S )Nc                 S   s   t j|    S r8   )r%   Úer'   r)   r)   r*   rh   ý   s    z;CheckOptimizeParameterized.test_bfgs_infinite.<locals>.funcc                    s
   ˆ | ƒ S r8   r)   r'   ©rh   r)   r*   Úfprimeÿ   s    z=CheckOptimizeParameterized.test_bfgs_infinite.<locals>.fprimer   Úignore)Úoverrv   r    r)   r¡   r(   ©rv   )r%   ÚerrstaterŒ   rv   r
   r�   r¦   Úisfinite)r^   r¾   rI   r�   r(   r)   r½   r*   Útest_bfgs_infiniteú   s    
ÿÿz-CheckOptimizeParameterized.test_bfgs_infinitec                 C   sL   g d¢}t jt j|dddid�}t jt j|dddid�}|j|jksHJ ‚d S )Nr«   ÚbfgsZxrtolçü©ñÒMbP?©rz   r|   Úgtol©r
   r�   r   Únit)r^   rI   r�   Úrefr)   r)   r*   Útest_bfgs_xrtol  s    
ÿ
ÿz*CheckOptimizeParameterized.test_bfgs_xrtolc                 C   sL   g d¢}t jt j|dddid�}t jt j|dddid�}|j|jksHJ ‚d S )N©gš™™™™™$@g33333³4@gš™™™™™%@r®   ç333333ó¿rÅ   Úc1ç:Œ0âŽyE>rÇ   r6   )r
   r�   r   r~   )r^   rI   Zres_c1_smallZ
res_c1_bigr)   r)   r*   Útest_bfgs_c1  s    
ÿ
ÿz'CheckOptimizeParameterized.test_bfgs_c1c                 C   sL   g d¢}t jt j|dddid�}t jt j|dddid�}|j|jksHJ ‚d S )Nr«   rÅ   Úc2çÍÌÌÌÌÌì?rÇ   r¹   rÉ   )r^   rI   Zres_defaultZres_modr)   r)   r*   Útest_bfgs_c2  s    
ÿ
ÿz'CheckOptimizeParameterized.test_bfgs_c2rÏ   rÒ   rP   r-   çš™™™™™¹¿r6   r?   c                 C   sT   t jtdd��2 g d¢}tjtj|d||dœd� W d   ƒ n1 sF0    Y  d S )Nz'c1' and 'c2'r©   rÍ   Úcg)rÏ   rÒ   rÇ   )r´   r	   rE   r
   r�   r   )r^   rÏ   rÒ   rI   r)   r)   r*   Útest_invalid_c1_c2)  s
    ÿz-CheckOptimizeParameterized.test_invalid_c1_c2c           
   	   C   sü   | j rd| j| jddœ}tj| j| jdd|d�}|d |d |d |d	 |d
 |d f\}}}}}}n0tj| j| jd| jd| jdd�}	|	\}}}}}}t|  |¡|  | j	¡dd� t|dd … | j	dd … dd� | j
dksäJ | j
ƒ‚| jdksøJ | jƒ‚d S )NFru   r)   ÚPowell©ry   rz   r|   r(   r}   ÚdirecrÊ   r~   r€   Tr¢   r4   rƒ   r#   çñhãˆµøÔ>éˆ   r   )rŒ   rY   rv   r
   r�   rh   rW   Úfmin_powellr   rX   rZ   r[   ©
r^   r�   r�   r‘   r’   rÚ   Únumiterr“   r•   r–   r)   r)   r*   Útest_powell2  s,    ÿÿþýÿ z&CheckOptimizeParameterized.test_powellzeThis part of test_powell fails on some platforms, but the solution returned by powell is still valid.)Úreasonc           
   	   C   sÐ   | j rd| j| jddœ}tj| j| jdd|d�}|d |d |d |d	 |d
 |d f\}}}}}}n0tj| j| jd| jd| jdd�}	|	\}}}}}}t| j	dd… g d¢g d¢g d¢g d¢g d¢gddd� d S )NFru   r)   rØ   rÙ   r(   r}   rÚ   rÊ   r~   r€   Tr¢   é"   é'   )ç—…~¿ûWç?çÒf"¬BÜ¿g¼€ˆ%Þ?)rä   rå   g:&ÃëÀÞ?)g»SÏ¼ûW÷?gÒf"¬Bì¿g{žÃ¥ørî?)rä   rå   ç{žÃ¥ørÞ?)gÌB¿ßý«û?rå   ræ   r‰   r7   rŠ   )
rŒ   rY   rv   r
   r�   rh   rW   rÝ   r   r\   rÞ   r)   r)   r*   Útest_powell_gh14014T  s2    ÿÿþýüúz.CheckOptimizeParameterized.test_powell_gh14014c                 C   sž   dd„ | j D ƒ}| jrš| j| jddœ}tj| j| j d|d|d�}|d |d	  }}|| jks`J ‚t|  |¡|  | j	¡d
dd� | jdksŒJ ‚| j
dksšJ ‚d S )Nc                 S   s   g | ]}t j t jf‘qS r)   )r%   Úpi)Ú.0Ú_r)   r)   r*   Ú
<listcomp>z  ó    zBCheckOptimizeParameterized.test_powell_bounded.<locals>.<listcomp>Fru   r)   rØ   )ry   Úboundsrz   r|   r(   r~   r4   r›   rŠ   é¯   r   )rW   rŒ   rY   rv   r
   r�   rh   rZ   r   rX   r[   )r^   rí   r�   r�   r‘   r“   r)   r)   r*   Útest_powell_boundedw  s     ÿþÿ	z.CheckOptimizeParameterized.test_powell_boundedc           	   	   C   sø   | j r\| j| jddœ}tj| j| jdd|d�}|d |d |d |d	 |d
 f\}}}}}n.tj| j| jd| jd| jdd�}|\}}}}}t|  |¡|  | j	¡dd� | j
dksºJ | j
ƒ‚| jdksÎJ | jƒ‚t| jdd… g d¢g d¢gddd� d S )NFru   r)   úNelder-meadrÙ   r(   r}   rÊ   r~   r€   Tr¢   r4   rƒ   é§   r   éL   éN   )g	dÀ£×°È?g÷×]fùä¿gtÛ×ä��Ö?)gÓ™ �…É?gäÌ#=^ä¿gÝÃoT¸ïÖ?r‰   r7   rŠ   )rŒ   rY   rv   r
   r�   rh   rW   Úfminr   rX   rZ   r[   r\   )	r^   r�   r�   r‘   r’   rß   r“   r•   r–   r)   r)   r*   Útest_neldermead�  s6    ÿÿþýÿÿýz*CheckOptimizeParameterized.test_neldermeadc              
   C   sL  t  d¡}| j|d< tdƒD ]}||d |f  d7  < q| jr¬| jdd|dœ}tj| j| jd	d
|d�}|d |d |d |d |d f\}}}}}	t	|d d |d ƒ n.tj
| j| jd	| jddd|d�}
|
\}}}}}	t	|  |¡|  | j¡dd� | jdk�sJ | jƒ‚| jdk�s"J | jƒ‚t	| jdd… g d¢g d¢gddd� d S )N)r‡   rQ   .rQ   r#   r6   FT©rY   rv   rw   Úinitial_simplexr)   rð   rÙ   r(   r}   rÊ   r~   r€   Zallvecsr   ©ry   rY   r�   rv   r‚   r÷   r4   rƒ   éd   é2   é4   )gÔItžÊÌÂ?gà?'Î›Tà¿gxÅ8 áÞ?)gÓÒ¢_×†Â?gœoMçà¿gå›Ž|52ß?r‰   r7   rŠ   )r%   rV   rW   ÚrangerŒ   rY   r
   r�   rh   r   rô   rX   rZ   r[   r\   )r^   ÚsimplexÚjr�   r�   r‘   r’   rß   r“   r•   r–   r)   r)   r*   Útest_neldermead_initial_simplex¯  sF    

ÿÿüýÿÿýz:CheckOptimizeParameterized.test_neldermead_initial_simplexc                 C   sÊ   g }t  d¡}| jd d… |d< tdƒD ]}||d |f  d7  < q(| |¡ t  d¡}| |¡ |D ]\}| jr | jdd|dœ}ttt	j
| j| jd	d
|d� qhttt	j| j| jd	| jddd|d�
 qhd S )N)rQ   r-   r-   .r#   r6   )rQ   rQ   Frö   r)   rð   rÙ   Trø   )r%   rV   rW   rü   rc   rŒ   rY   rD   rE   r
   r�   rh   rô   )r^   Zbad_simplicesrý   rþ   r�   r)   r)   r*   Ú#test_neldermead_initial_simplex_bad×  s6    



ÿúüz>CheckOptimizeParameterized.test_neldermead_initial_simplex_badc                 C   sZ   dd„ }t j|dgdgdd�}t|jdgƒ t j|ddgdd	gdd�}t|jddgƒ d S )
Nc                 S   s   t  | d ¡S ©Nr-   ©r%   r:   r'   r)   r)   r*   Úquadú  s    z>CheckOptimizeParameterized.test_neldermead_x0_ub.<locals>.quadr#   )r   rN   únelder-mead©rí   rz   r   r-   )r#   ç      @©r
   r�   r   r(   )r^   r  r�   r)   r)   r*   Útest_neldermead_x0_ubö  s    üüz0CheckOptimizeParameterized.test_neldermead_x0_ubc                 C   s6   ddi}t j| j| jd| jd|d�}|jdks2J ‚d S )NrY   éÿÿÿÿú	Newton-CGr)   ©rz   r{   ry   r|   r#   )r
   r�   rh   rW   rk   r€   )r^   r�   Úresultr)   r)   r*   Útest_ncg_negative_maxiter  s    þz4CheckOptimizeParameterized.test_ncg_negative_maxiterc                 C   sX   dd„ }dd„ }dg}d}t j|||dt|d�d	�}|jdksBJ ‚t|jd tjƒ d S )
Nc                 S   s   t  | d ¡S ©Nr   )r%   r=   r'   r)   r)   r*   Úcosine  s    z=CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.cosinec                 S   s   t  | d ¡ S r  )r%   r9   r'   r)   r)   r*   r{     s    z:CheckOptimizeParameterized.test_ncg_zero_xtol.<locals>.jacr6   r   ú	newton-cg)Úxtol)rI   r{   rz   r|   )r
   r�   Údictr€   r   r(   r%   rè   )r^   r  r{   rI   r  r  r)   r)   r*   Útest_ncg_zero_xtol  s    üz-CheckOptimizeParameterized.test_ncg_zero_xtolc              
   C   sÎ   | j r8| j| jddœ}tj| j| jd| jd|d�d }n$tj| j| j| jd| jd| jdd�}|}t	|  |¡|  | j
¡dd	� | jd
ks�J | jƒ‚| jdks¤J | jƒ‚t	| jdd… g d¢g d¢gddd� d S )NFru   r
  r)   r  r(   r¢   r4   rƒ   r†   é   rQ   r°   ©ç(Æ6-H=�¾g×?üºËà¿g4 u¦3ß?©r  g_êþéºËà¿gþ/N±§3ß?r7   rŠ   )rŒ   rY   rv   r
   r�   rh   rW   rk   Úfmin_ncgr   rX   rZ   r[   r\   ©r^   r�   r–   r‘   r)   r)   r*   Útest_ncg'  s6    ÿþþýÿÿýz#CheckOptimizeParameterized.test_ncgc                 C   sÖ   | j r<| j| jddœ}tj| j| jd| j| jd|d�d }n(tj	| j| j| j| jd| jd| jdd�	}|}t
|  |¡|  | j¡dd	� | jd
ks˜J | jƒ‚| jdks¬J | jƒ‚t
| jdd… g d¢g d¢gddd� d S )NFru   r
  r)   )rz   r{   rm   ry   r|   r(   )Zfhessry   rY   r�   rv   r‚   r4   rƒ   r†   é   rQ   r°   r  r  r7   rŠ   )rŒ   rY   rv   r
   r�   rh   rW   rk   rm   r  r   rX   rZ   r[   r\   r  r)   r)   r*   Útest_ncg_hessH  s:    ÿýýüÿÿýz(CheckOptimizeParameterized.test_ncg_hessc                 C   sÖ   | j r<| j| jddœ}tj| j| jd| j| jd|d�d }n(tj	| j| j| j| jd| jd| jdd�	}|}t
|  |¡|  | j¡dd	� | jd
ks˜J | jƒ‚| jdks¬J | jƒ‚t
| jdd… g d¢g d¢gddd� d S )NFru   r
  r)   )rz   r{   ro   ry   r|   r(   )Zfhess_pry   rY   r�   rv   r‚   r4   rƒ   r†   r  rQ   r°   r  r  r7   rŠ   )rŒ   rY   rv   r
   r�   rh   rW   rk   ro   r  r   rX   rZ   r[   r\   r  r)   r)   r*   Útest_ncg_hesspj  s:    ÿýýüÿÿýz)CheckOptimizeParameterized.test_ncg_hesspN)rp   rq   rr   r—   rŸ   r§   r¶   r¸   rº   r´   ÚmarkÚfilterwarningsrÄ   rÌ   rÑ   rÔ   Úparametrizer×   rà   Úxfailrç   rï   rõ   rÿ   r   r  r  r  r  r  r  r)   r)   r)   r*   rt   ‹   s:   "


	
þ
"
 (!"rt   c                     s\   t j d¡‰ ‡ fdd„} dD ]:}dD ]0}tj| ˆ  d¡|d|id�}|d	 |ks$J ‚q$qd S )
Nl	   û<vgðRàI*q4Ì c                    s   ˆ   d¡d S ©Nr#   rS   ©r0   r'   ©Úrngr)   r*   Úcost�  s    ztest_maxfev_test.<locals>.cost)r#   r£   rú   )rØ   úNelder-Meadr£   ÚmaxfevrÇ   r~   )r%   r0   Údefault_rngr
   r�   )r&  Zimaxfevrz   r  r)   r$  r*   Útest_maxfev_test�  s    þr*  c                  C   sô   dd„ } t j | t d¡d¡\}}tdƒD ]&}|t |¡ƒ |d |d ks*J ‚q*d}tt jj|d�� |t |¡ƒ W d   ƒ n1 sŠ0    Y  t j | t d¡d¡\}}d}tt|d��" |t 	ddg¡ƒ W d   ƒ n1 sæ0    Y  d S )	Nc                 S   s   | S r8   r)   r'   r)   r)   r*   Úfunc_   s    z8test_wrap_scalar_function_with_validation.<locals>.func_r#   r°   r   zToo many function callsr©   ú@The user-provided objective function must return a scalar value.)
r
   Ú	_optimizeZ'_wrap_scalar_function_maxfun_validationr%   Zasarrayrü   rD   Z_MaxFuncCallErrorrE   rA   )r+  Zfcallsrh   ÚiÚmsgr)   r)   r*   Ú)test_wrap_scalar_function_with_validationž  s     ÿ,ÿr0  c                  C   sR   d} t t| d��. tjdd„ t ddg¡dd� W d   ƒ n1 sD0    Y  d S )Nr,  r©   c                 S   s   | S r8   r)   r'   r)   r)   r*   Ú<lambda>»  rì   z.test_obj_func_returns_scalar.<locals>.<lambda>r#   r    rš   )rD   rE   r
   r�   r%   rA   r©   r)   r)   r*   Útest_obj_func_returns_scalar¶  s    r2  c                  C   s4   t  g d¢¡} tjjtj| dd�}|jdks0J ‚d S )Nr«   rÐ   )ÚxatoliS  )r%   rA   r
   Ú	_minimizeÚ_minimize_neldermeadr   rÊ   )rI   r�   r)   r)   r*   Útest_neldermead_iteration_num¾  s
    ÿr6  c                  C   s2   t  ddg¡ t j¡} dd„ }tj|| dd� d S )Nç      @ç      @c                 S   s   | j tjksJ ‚t | ¡S r8   )Zdtyper%   Úfloat32r
   r   r'   r)   r)   r*   Úrosen_È  s    z*test_neldermead_respect_fp.<locals>.rosen_r'  rš   )r%   rA   Zastyper9  r
   r�   )rI   r:  r)   r)   r*   Útest_neldermead_respect_fpÅ  s    r;  c                  C   s&   dd„ } t jj| ddgdddd� d S )Nc                 S   s   | d d | d d  S ©Nr   r-   r#   r)   r'   r)   r)   r*   rh   Ò  s    z)test_neldermead_xatol_fatol.<locals>.funcr#   r-   rÆ   )rY   r3  Zfatol)r
   r4  r5  r½   r)   r)   r*   Útest_neldermead_xatol_fatolÏ  s    ÿr=  c                  C   sR   dd„ } g d¢}t j| |dd�}t|jdƒ t j| |dddid	�}t|jdƒ d S )
Nc                 S   s   t  | d ¡S r  r  r'   r)   r)   r*   rh   Ú  s    z&test_neldermead_adaptive.<locals>.func)géÍM@¸'Ä?güOÄC”ÆÞ?gµ§¢€~Ü?gê -Û?g¾ã¬€®ã?g#¹ÂÜj­Ô?gûù îï?g~ê³^gžÜ?gÜ r#—Åè?g^c¸¶Ç½é?g)þÖëi	×?g±Ùô÷'è?g‚Ž™Òýï?g1…›Òä?g[ÕVÎ¤¸?r'  rš   FZadaptiveTrÇ   )r
   r�   r   r�   )rh   Úp0r�   r)   r)   r*   Útest_neldermead_adaptiveÙ  s    
ÿr?  c                  C   s  dd„ } d}g d¢}t tjƒ�" tj| ||dd�}W d   ƒ n1 sF0    Y  t|jt dgt|ƒ ¡dd	� t	|j
d
ƒ t	|jdƒ g d¢g d¢g d¢g}t tjƒ�( tj| ||dd|id�}W d   ƒ n1 sÖ0    Y  t|jt g d¢¡dd	� t	|j
dƒ t	|jdƒ d S )Nc                 S   s   t  | d ¡S r  r  r'   r)   r)   r*   rh   ì  s    z/test_bounded_powell_outsidebounds.<locals>.func)©r	  r#   r@  r@  )éüÿÿÿrP   gš™™™™™é¿rØ   r  rR   r4   rƒ   Tr   ©r   r   r   )r   r#   r   )r   r   r#   rÚ   )rí   rz   r|   )g      Àr   r   Fr‡   )r   r
   ÚOptimizeWarningr�   r   r(   r%   rA   Úlenr   r�   r€   )rh   rí   rI   r�   rÚ   r)   r)   r*   Ú!test_bounded_powell_outsideboundsè  s"    0 þ$rE  c                  C   s  dd„ } d}g d¢}dddœ}t j| |d|d�}t|jd	d
d� t|jd	d
d� t j| |||dd�}t g d¢¡}t|j|d
d� t|j| |ƒd
d� dtj dfdtjfddf}t j| |||dd�}t g d¢¡}t|j|d
d� t|j| |ƒd
d� dd„ } dgd }g d¢}t j| |dd�}t j| ||dd�}t|jdd
d� t|jdd
d� tj tjfgd }t j| ||dd�}t|j|jd
d� t|j|jd
d� t|j|jd
d� g d¢}dgd }t	t j
ƒ�" t j| ||dd�}W d   ƒ n1 �sö0    Y  t|jdd
d� d S )Nc                 S   s   t  | d ¡S r  r  r'   r)   r)   r*   rh     s    z+test_bounded_powell_vs_powell.<locals>.func))éûÿÿÿr	  )éöÿÿÿrÕ   )r#   gffffff"@)rA  gffffff@©gÍÌÌÌÌÌ/Àéþÿÿÿ)gÍÌÌÌÌÌ ÀgÍÌÌÌÌÌÀr®   r   rI  ç»½×Ùß|Û=©Úftolr  rØ   rÇ   rR   r4   rƒ   )r|   rí   rz   )r	  rÕ   r#   r   rI  )Nr	  rÕ   r#   )rA  NrH  c                 S   sz   t  | d  ¡t  | d ¡ t  | d  | d  ¡ t  | d ¡ }|t  t  | d | d  ¡t  | d ¡ ¡8 }|d S ©Nr   r#   r-   r<   ©r(   Útr)   r)   r*   rh   -  s    D.)rI  r°   rQ   )rˆ   rˆ   rˆ   rš   r  g´£8“ç:}?r   )gbšŽ¥4»F@gìæ†:ÀgžWÀ�¿?@)r
   r�   r   r(   r}   r%   rA   Úinfr~   r   rC  )rh   rí   rI   r|   Z
res_powellZres_bounded_powellrj   r)   r)   r*   Útest_bounded_powell_vs_powell  s`    

þ
þ
þþ
þ&rQ  c                  C   sî   dt j dfgd dddœdœ} g d¢}dd	„ }tj||fi | ¤Ž}t|jd
dd� dd	„ }tj||fi | ¤Ž}t|jdƒ dd	„ }tj||fi | ¤Ž}t|jddd� dd	„ }t j dfgd | d< tj||fi | ¤Ž}t|jddd� d S )NrØ   g    €„.ArQ   rÐ   rK  )rz   rí   r|   rM   c                 S   s   t  | ¡ S r8   r  r'   r)   r)   r*   rg   _  s    z1test_onesided_bounded_powell_stability.<locals>.fg    `ãFÁç-Cëâ6?rƒ   c                 S   s,   t  t  | ¡¡d  t  | dk¡r&dnd S )Nr6   r   r#   r	  ©r%   rB   r:   r@   r'   r)   r)   r*   rg   e  s    gw£ÖÆÀc                 S   s,   t  t  | ¡¡d  t  | dk¡r&dnd S )Nr£   r   r#   r	  rS  r'   r)   r)   r*   rg   l  s    gB+¢IñaÍr7   rœ   c                 S   sX   t  t  | d d… ¡¡d  t  t  | dd … ¡¡d  }|t  | dk¡rNdnd9 }|S )Nr-   r°   r6   r   r#   r	  rS  rN  r)   r)   r*   rg   s  s    :g     @�@rí   g 4&õk\Ã)r%   rP  r
   r�   r   r}   )ÚkwargsrI   rg   r�   r)   r)   r*   Ú&test_onesided_bounded_powell_stabilityS  s$    þrU  c                   @   s   e Zd ZdZdZdS )ÚTestOptimizeWrapperDispTN©rp   rq   rr   rŒ   rv   r)   r)   r)   r*   rV  }  s   rV  c                   @   s   e Zd ZdZdZdS )ÚTestOptimizeWrapperNoDispTFNrW  r)   r)   r)   r*   rX  ‚  s   rX  c                   @   s   e Zd ZdZdZdS )ÚTestOptimizeNoWrapperDispFTNrW  r)   r)   r)   r*   rY  ‡  s   rY  c                   @   s   e Zd ZdZdZdS )ÚTestOptimizeNoWrapperNoDispFNrW  r)   r)   r)   r*   rZ  Œ  s   rZ  c                   @   sè  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zej d%¡ej d&¡ej d'g d(¢e ¡d)d*„ ƒƒƒZej d'g d+¢¡d,d-„ ƒZd.d/„ Zej d'g d0¢¡d1d2„ ƒZej d'g d3¢¡d4d5„ ƒZd6d7„ Zd8d9„ Z d:d;„ Z!d<d=„ Z"ej d'g d>¢¡d?d@„ ƒZ#ej d'g dA¢¡dBdC„ ƒZ$ej d&¡ej d'e%¡ej dDg dE¢¡dFdG„ ƒƒƒZ&dHdI„ Z'ej d'dJ¡dKdL„ ƒZ(ej d'g dM¢¡dNdO„ ƒZ)dPS )QÚTestOptimizeSimplec                 C   sn   dd„ }dd„ }t jg}t jddd��4 tj|||dd�}t  ||ƒ¡sLJ ‚W d   ƒ n1 s`0    Y  d S )	Nc                 S   s   | S r8   r)   r'   r)   r)   r*   rh   •  s    z.TestOptimizeSimple.test_bfgs_nan.<locals>.funcc                 S   s
   t  | ¡S r8   ©r%   Z	ones_liker'   r)   r)   r*   r¾   —  s    z0TestOptimizeSimple.test_bfgs_nan.<locals>.fprimer¿   )rÀ   ÚinvalidFrÁ   )r%   ÚnanrÂ   r
   r¦   Úisnan)r^   rh   r¾   rI   r(   r)   r)   r*   Útest_bfgs_nan“  s    z TestOptimizeSimple.test_bfgs_nanc                 C   sÔ   dd„ }t jdd�� t |d¡}W d   ƒ n1 s60    Y  t  |d ¡sRJ ‚|d du sbJ ‚d	d„ }d
d„ }t jdd��  tj|d|d�}W d   ƒ n1 s¤0    Y  t  |d ¡sÀJ ‚|d du sÐJ ‚d S )Nc                 S   s   t jS r8   ©r%   r^  r'   r)   r)   r*   rh   ¢  s    z5TestOptimizeSimple.test_bfgs_nan_return.<locals>.funcr¿   ©r]  r   r}   r�   Fc                 S   s   | dkrdS t jS r  ra  r'   r)   r)   r*   rh   «  s    c                 S   s
   t  | ¡S r8   r\  r'   r)   r)   r*   r¾   ­  s    z7TestOptimizeSimple.test_bfgs_nan_return.<locals>.fprime)r{   )r%   rÂ   r
   r�   r_  )r^   rh   r  r¾   r)   r)   r*   Útest_bfgs_nan_returnž  s    *.z'TestOptimizeSimple.test_bfgs_nan_returnc                 C   s^   t  t  d¡¡t j t| jƒ¡ }tj| j	| j
|d| jdd�}t|  	|¡|  	| j¡dd� d S )NrN   r)   F)r5   ry   rY   rv   r4   rƒ   )r%   ÚsqrtÚspacingr0   ÚrandrD  rX   r
   r¦   rh   rW   rY   r   )r^   r5   r‘   r)   r)   r*   Útest_bfgs_numerical_jacobianµ  s    "þÿz/TestOptimizeSimple.test_bfgs_numerical_jacobianc                 C   s^   g d¢}g d¢}t  ||¡D ]<\}}tj| j| j||d�}t|  |j¡|  | j¡dd� qd S )N)r    rx   ÚTNC©ú2-pointú3-pointN)rz   r{   r4   rƒ   )	Ú	itertoolsÚproductr
   r�   rh   rW   r   r(   rX   )r^   ÚmethodsÚjacsrz   r{   r  r)   r)   r*   Útest_finite_differences_jacÁ  s    ÿÿz.TestOptimizeSimple.test_finite_differences_jacc              	   C   s¸   g d¢}t tjf }t ||¡D ]<\}}|tju r8|ƒ }tj| j| j|| j|d�}|j	s J ‚q g d¢}|D ]H}t
 t¡�* tj| j| j|| jd d� W d   ƒ qj1 s¨0    Y  qjd S )N)útrust-constrr
  ú	trust-ncgútrust-krylov©rz   r{   rm   )rr  rs  Údoglegútrust-exact)r   r
   r    rl  rm  r�   rh   rW   rk   r�   r´   r	   rE   )r^   rn  Zhessesrz   rm   r  r)   r)   r*   Útest_finite_differences_hessÊ  s"    
þþz/TestOptimizeSimple.test_finite_differences_hessc                 C   s.   dd„ }t j|dgdd�}t|dddd� d S )	Nc                 S   s   | dk rdS | d|   S d S )Nr   g÷BŒþÿÿïrN   r)   r'   r)   r)   r*   rg   å  s    z/TestOptimizeSimple.test_bfgs_gh_2169.<locals>.fç      $@FrÁ   rN   rR  ©r‹   r„   )r
   r¦   r   )r^   rg   Zxsr)   r)   r*   Útest_bfgs_gh_2169ä  s    z$TestOptimizeSimple.test_bfgs_gh_2169c                    s*   ‡ fdd„}t ƒ ‰ tj|ddddd� d S )Nc                    s2   | d }|ˆ vsJ ‚ˆ   |¡ d| d  d|  fS )Nr   r£   r-   é   )Úadd)r(   Zxp©Úseenr)   r*   rg   ï  s    
z:TestOptimizeSimple.test_bfgs_double_evaluations.<locals>.féœÿÿÿrÅ   Tr7   )rz   r{   Útol)Úsetr
   r�   ©r^   rg   r)   r}  r*   Útest_bfgs_double_evaluationsí  s    z/TestOptimizeSimple.test_bfgs_double_evaluationsc                 C   s”   t j| j| j| jd| jd�}|\}}}t|  |¡|  | j¡dd� | jdksVJ | jƒ‚| j	dksjJ | j	ƒ‚t| j
dd… g d¢g d	¢gd
dd� d S )Nr)   )ry   rY   r4   rƒ   r†   r°   rQ   )gžÈî°>Í<gwTë³¹ à¿gÓUuAXß?)rR   g¿‹ŒHóËà¿g!mÊ²3ß?r‰   r7   rŠ   )r
   Úfmin_l_bfgs_brh   rW   rk   rY   r   rX   rZ   r[   r\   ©r^   r–   r‘   r’   Údr)   r)   r*   Útest_l_bfgs_bø  s     þ
ÿÿýz TestOptimizeSimple.test_l_bfgs_bc                 C   sB   t j| j| jd| jd�}|\}}}t|  |¡|  | j¡dd� d S )NT)Zapprox_gradrY   r4   rƒ   )r
   r„  rh   rW   rY   r   rX   r…  r)   r)   r*   Útest_l_bfgs_b_numjac  s    þ
ÿz'TestOptimizeSimple.test_l_bfgs_b_numjacc                    sJ   ‡ fdd„}t j|ˆ jˆ jd�}|\}}}tˆ  |¡ˆ  ˆ j¡dd� d S )Nc                    s   ˆ   | ¡ˆ  | ¡fS r8   ©rh   rk   r'   r]   r)   r*   r}     s    z4TestOptimizeSimple.test_l_bfgs_b_funjac.<locals>.fun©rY   r4   rƒ   )r
   r„  rW   rY   r   rh   rX   )r^   r}   r–   r‘   r’   r†  r)   r]   r*   Útest_l_bfgs_b_funjac  s    
ÿ
ÿz'TestOptimizeSimple.test_l_bfgs_b_funjacc                 C   s„   G dd„ dƒ}|ƒ }t jt jddgd|ddid�}t|jdƒ t|j|jƒ t|j|jƒ t|jdƒ |j	d	u stJ ‚t|j
d
ƒ d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z:TestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callbackc                 S   s   d| _ d | _d | _d S r  )rÊ   r}   r(   r]   r)   r)   r*   Ú__init__+  s    zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__init__c                 S   s$   || _ t |¡| _|  jd7  _d S r"   )r(   r
   r   r}   rÊ   ©r^   r(   r)   r)   r*   Ú__call__0  s    zCTestOptimizeSimple.test_l_bfgs_b_maxiter.<locals>.Callback.__call__N©rp   rq   rr   rŒ  rŽ  r)   r)   r)   r*   ÚCallback*  s   r�  rR   úl-bfgs-brY   r°   )rz   Úcallbackr|   r#   Fz+STOP: TOTAL NO. of ITERATIONS REACHED LIMIT)r
   r�   r   r   rÊ   r   r(   r}   r€   r�   Úmessage)r^   r�  Úcr�   r)   r)   r*   Útest_l_bfgs_b_maxiter'  s    ÿÿz(TestOptimizeSimple.test_l_bfgs_b_maxiterc                 C   sú   d| j dœ}tj| j| jd| j|d�}t|  |j¡|  | j¡dd� | j	|j
ksTJ ‚d | _| _	tj| j| jd|d�}| j|jks†J ‚t|  |j¡|  | j¡dd� d | _| _	tj| j| jd	d|d
�}| j|jksØJ ‚t|  |j¡|  | j¡dd� d S )NF©rv   rY   úL-BFGS-B©rz   r{   r|   r4   rƒ   r   rÇ   rk  ©r{   rz   r|   )rY   r
   r�   rh   rW   rk   r   r(   rX   r[   r   rZ   r~   )r^   r�   rJ   Úrar)   r)   r*   Útest_minimize_l_bfgs_bA  s2    þÿÿÿÿÿz)TestOptimizeSimple.test_minimize_l_bfgs_bc                 C   sv   d }dD ]h}d| j |dœ}tj| j| jd| j|d�}|  |j¡}|d u rN|}n||k sZJ ‚t||  | j¡|d� qd S )N)r6   rR  r7   rJ  F)rv   rY   rL  r—  r˜  rœ   )	rY   r
   r�   rh   rW   rk   r(   r   rX   )r^   Zv0r€  r�   rž   Úvr)   r)   r*   Útest_minimize_l_bfgs_b_ftol]  s    þz.TestOptimizeSimple.test_minimize_l_bfgs_b_ftolc                 C   s6   t jt jt ddg¡dt jdddœd�}|jr2J ‚d S )NrÎ   rN   r—  Fr#   )rv   Zmaxlsr˜  )r
   r�   r   r%   rA   r   r�   )r^   rž   r)   r)   r*   Útest_minimize_l_bfgs_maxlsn  s
    þz-TestOptimizeSimple.test_minimize_l_bfgs_maxlsc                    s¦   t j‰ t j}g ‰t dd¡}‡ ‡fdd„}d\}}}t j||||d� tdd„ tˆ|d … ƒD ƒƒ\}}|| }	tˆd |… ƒ}
t jˆ |||	d�\}}}t	||
ƒ d S )	Nr†   rS   c                    s   ˆ | ƒ}ˆ  |¡ |S r8   )rc   )r(   Úvalue©rg   Úvaluesr)   r*   Úobjfun|  s    
zMTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.objfun)é   rù   i,  )r¾   Úmaxfunc                 s   s   | ]\}}||fV  qd S r8   r)   )ré   r.  Úyr)   r)   r*   Ú	<genexpr>†  rì   zPTestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruption.<locals>.<genexpr>)
r
   r   r   r%   Úfullr„  ÚmaxÚ	enumerateÚminr   )r^   ÚgrI   r¢  ÚlowZmediumÚhighrœ  Úkr¤  ÚtargetZxminrô   r†  r)   r   r*   Ú*test_minimize_l_bfgs_b_maxfun_interruptionu  s    
"z=TestOptimizeSimple.test_minimize_l_bfgs_b_maxfun_interruptionc                 C   sB   ddd„}g d¢}t jt j||tdd�d	�}t|jd
ddd� d S )Nr)   r6   rù   c                 [   sê   |}| |ƒ}	d}
d}d}d}|rÒ|sÒ||k rÒd}|d7 }t t |¡ƒD ]ˆ}|| | || | fD ]B}t |¡}|||< | |g|¢R Ž }|
d7 }
||	k rb|}	|}d}qb|d ur¶||ƒ |d urF|
|krFd} qqFqtj|	|||
|dkd�S )Nr#   r   TF©r}   r(   rÊ   r~   r�   )rü   r%   Úsizerd   r
   r   )r}   rI   ry   r(  ÚstepsizerY   r’  r|   ÚbestxÚbestyÚfuncallsÚniterÚimprovedÚstopÚdimÚsÚtestxÚtestyr)   r)   r*   Úcustmin‘  s6    

ÿz/TestOptimizeSimple.test_custom.<locals>.custmin)gš™™™™™õ?rÓ   r­   çš™™™™™ñ?r¯   çš™™™™™©?©r³  rÇ   rN   rR  ry  )r)   Nr6   rù   N)r
   r�   r   r  r   r(   )r^   r¾  rI   r�   r)   r)   r*   Útest_custom�  s      ÿ
ÿzTestOptimizeSimple.test_customc                    s<   ddg‰ d‰‡ ‡fdd„}ddg}t jt j||ˆ ˆd� d S )N)rI  r-   )r   rQ   Úconstraintsc                    s(   |d ˆ u sJ ‚|d ˆu s J ‚t  ¡ S )Nrí   rÃ  ©r
   r   )r}   rI   r|   ©rí   rÃ  r)   r*   r¾  »  s    z0TestOptimizeSimple.test_gh10771.<locals>.custminr#   )rz   rí   rÃ  )r
   r�   r   )r^   r¾  rI   r)   rÅ  r*   Útest_gh10771µ  s    ÿzTestOptimizeSimple.test_gh10771c                 C   s˜   dd„ }dd„ }dD ]~}|dv r&d }n|}t j|ddg|d|d	�}t j|ddg|d
|d	�}||jƒ||jƒk sJ |› d||jƒ› d||jƒ› �ƒ‚qd S )Nc                 S   s$   | \}}|d |d  |d  d S )Nr-   r‡   r#   r)   ©Úzr(   r¥  r)   r)   r*   rh   Æ  s    z<TestOptimizeSimple.test_minimize_tol_parameter.<locals>.funcc                 S   s:   | \}}t  d| |d  d|d   d|d  | g¡S )Nr-   r‡   rQ   ©r%   rA   rÇ  r)   r)   r*   ÚdfuncÊ  s    z=TestOptimizeSimple.test_minimize_tol_parameter.<locals>.dfunc©	r  ÚpowellrÖ   rÅ   r  r‘  ÚtncÚcobylaÚslsqp©r  rÌ  rÎ  r#   rJ  )r{   r€  rz   rN   ú: z vs. )r
   r�   r(   )r^   rh   rÊ  rz   r{   Zsol1Zsol2r)   r)   r*   Útest_minimize_tol_parameterÄ  s    ÿÿÿz.TestOptimizeSimple.test_minimize_tol_parameterr»   úignore::RuntimeWarningrz   )rô   rÝ   rŽ   r¦   r  r„  Úfmin_tncÚ
fmin_slsqpc           
         sl  ˆ dv rdd„ }nt j}t j}t j}t d¡}i }ˆ  d¡r†tt ˆ ƒ}ˆ dkrXd|d< q¸ˆ d	krjd
|d< q¸ˆ dv r|d|d< q¸d|d< n2‡ fdd„}ˆ dkrªtd
d�|d< ntdd�|d< ˆ dv rÊ||d< n*ˆ dv rÜ||d< nˆ dv rô||d< ||d< g ‰‡fdd„}|||fd|i|¤Ž t	ˆƒdk�s,J ‚t
dd „ ˆD ƒƒ�sDJ ‚t ˆd¡}	td!d „ |	D ƒƒ�rhJ ‚d S )"N)rÔ  r„  c                 S   s   t  | ¡t  | ¡fS r8   )r
   r   r   r'   r)   r)   r*   rh   è  s    zDTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.funcr£   rô   rÕ  r°   ÚiterrÔ  rù   r¤  )rô   rÝ   i¬  rY   c                     s   ˆ |d< t j| i |¤ŽS )Nrz   ©r
   r�   )ÚaÚkwrš   r)   r*   Úroutineþ  s    zGTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.routinerÍ  ©r¤  r|   rŠ  )r  r¾   )r  r{   ©rs  rv  rr  ru  rq  rm   c                    s(   t | tjƒrJ ‚ˆ  | t | ¡f¡ d S r8   )Ú
isinstancer
   r   rc   r%   rd   )r(   ry   rT  )Úresultsr)   r*   r’    s    zHTestOptimizeSimple.test_minimize_callback_copies_array.<locals>.callbackr’  r-   c                 s   s    | ]\}}t  ||k¡V  qd S r8   )r%   r@   ©ré   r(   r¥  r)   r)   r*   r¦    rì   zITestOptimizeSimple.test_minimize_callback_copies_array.<locals>.<genexpr>c                 s   s&   | ]\}}t  |d  |d  ¡V  qdS )r   N)r%   Zmay_share_memoryrß  r)   r)   r*   r¦    rì   )r
   r   r   r   r%   rV   Ú
startswithÚgetattrr  rD  r@   rl  ÚcombinationsÚany)
r^   rz   rh   r{   rm   rI   rT  rÚ  r’  râ  r)   )rz   rÞ  r*   Ú#test_minimize_callback_copies_arrayÝ  sD    










z6TestOptimizeSimple.test_minimize_callback_copies_arrayrË  c           	      C   sž   dd„ }dd„ }t  dg¡}||ƒ}|}|dkr:tdd�ntdd	�}|d
v rPd }tj|||||d�}t||jƒ|jƒ |dkrˆt 	d¡ ||jƒ|ksšJ ‚d S )Nc                 S   s   | d d S r,   r)   r'   r)   r)   r*   rh   '  s    z1TestOptimizeSimple.test_no_increase.<locals>.funcc                 S   s   d| d  d d S )Nr-   r#   r	  r)   r'   r)   r)   r*   Úbad_grad*  s    z5TestOptimizeSimple.test_no_increase.<locals>.bad_gradç       @rÍ  r{  rÛ  rŠ  rÐ  r™  rÏ  zSLSQP returns slightly worse)
r%   rA   r  r
   r�   r   r(   r}   r´   r!  )	r^   rz   rh   rå  rI   Zf0r{   r|   rž   r)   r)   r*   Útest_no_increase   s    ÿ
z#TestOptimizeSimple.test_no_increasec                 C   sX   dd„ }dd„ }t  g d¢¡}tj||dd|dœd	�}t|jt  g d
¢¡d dd� d S )Nc                 S   s   t | t g d¢¡ d ƒS )N)rN   ræ  r  r8  r-   )r:   r%   rA   r'   r)   r)   r*   rg   ?  s    z7TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.fc                 S   s:   t  g d¢g d¢g¡}t  t  || ¡t  ddg¡ | g¡S )N)r	  r	  r	  r	  )éýÿÿÿrè  rI  r	  r°   r£   )r%   rA   Zconcatenatera   ©r(   rØ  r)   r)   r*   ÚconsB  s    z:TestOptimizeSimple.test_slsqp_respect_bounds.<locals>.cons)rP   rN   r/   ræ  rÏ  Úineq©Útyper}   ©rz   rÃ  )rR   r-   r°   r¤   rQ   gê-�™—q=rƒ   )r%   rA   r
   r�   r   r(   )r^   rg   rê  rI   r�   r)   r)   r*   Útest_slsqp_respect_bounds=  s    
ÿz,TestOptimizeSimple.test_slsqp_respect_bounds)r'  rØ   rx   r    r
  r—  ÚSLSQPrq  ru  rr  rv  rs  c                 C   sÐ   d}t  d¡}ttj|dtjtjd d ƒ}|t|d�dœ}|dv rL|j|d< n|dv rh|j|d< |j	|d	< tj
|j|fi |¤Ž}|j|ksŒJ ‚|j|jksœJ ‚t|d
ƒr¶|j|jks¶J ‚|dkrÌ|jdksÌJ ‚d S )Nr‡   r£   r)   rŠ  rÇ   )r
  r{   rÜ  rm   r   rð  r…   )r%   rV   r   r
   r   r   r   r  rk   rm   r�   r}   rÊ   r~   Úhasattrr   Zngevr€   )r^   rz   ÚMAXITERrI   ÚsfrT  rž   r)   r)   r*   Útest_respect_maxiterK  s$    
ÿ


z'TestOptimizeSimple.test_respect_maxiter)r'  rØ   rô   rÝ   c                 C   sž   t  d¡}ttj|dtjtjd d ƒ}dddœ}tjt	dd��N | 
d¡rhtt|ƒ}||j|fi |¤Ž ntj|j|||d	� W d   ƒ n1 s�0    Y  d S )
Nr£   r)   r#   T)rY   rv   zMaximum number of iterationsr©   rô   rÇ   )r%   rV   r   r
   r   r   r   r´   ÚwarnsÚRuntimeWarningrà  rá  r}   r�   )r^   rz   rI   ró  r|   rÚ  r)   r)   r*   Útest_runtime_warningm  s    
ÿ
ÿ

z'TestOptimizeSimple.test_runtime_warningc           	   
   C   sd   d}t j}t j}t j}dd„ }d|dœf}t d¡}t j|||||dt|d�d	�}|j|ks`J ‚d S )
Nr‡   c                 S   s,   t  d| d  d| d   d| d   g¡S )Nr?   r   çš™™™™™Ù?r#   ç…ëQ¸Õ?r-   rÉ  r'   r)   r)   r*   r}   …  s    zRTestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraints.<locals>.funrë  rì  r£   rq  rŠ  )rÃ  r{   rm   rz   r|   )	r
   r   r   r   r%   rV   r�   r  rÊ   )	r^   rò  rg   r{   rm   r}   rê  rI   rž   r)   r)   r*   Ú2test_respect_maxiter_trust_constr_ineq_constraints|  s    ÿ
þzETestOptimizeSimple.test_respect_maxiter_trust_constr_ineq_constraintsc           
      C   sü   dd„ }dd„ }t  dg¡}t ||¡}tj||d|dœgd�}tj||d	gd
�}tj||d|dœgd	gd�}tj||d|dœgdgd�}|||||fD ]}	|	js˜J ‚q˜t|jddd� t|jddd� t|jddd� t|jddd� t|jddd� d S )Nc                 S   s   | d S r  r)   r'   r)   r)   r*   rg   ‘  s    z6TestOptimizeSimple.test_minimize_automethod.<locals>.fc                 S   s   | d S r  r)   r'   r)   r)   r*   rê  ”  s    z9TestOptimizeSimple.test_minimize_automethod.<locals>.consrx  rë  rì  )rÃ  )r°   r£   ©rí   )rÃ  rí   ©r#   r£   r   r7   rƒ   r-   r°   )r%   rA   r
   r�   r�   r   r(   )
r^   rg   rê  rI   Zsol_0Zsol_1Zsol_2Zsol_3Zsol_4rž   r)   r)   r*   Útest_minimize_automethod�  s.    
ÿ
þ
þz+TestOptimizeSimple.test_minimize_automethodc                 C   sH   dd„ }ddd„}t  g d¢¡}t j t|ƒ¡}tj||||dd� d S )	Nc                 S   s   t  | | d ¡S r  r  ©r(   r”  r)   r)   r*   ÚY¬  s    z=TestOptimizeSimple.test_minimize_coerce_args_param.<locals>.Yc                 S   s   d| |  S r  r)   rþ  r)   r)   r*   ÚdY_dx¯  s    zATestOptimizeSimple.test_minimize_coerce_args_param.<locals>.dY_dx)rQ   r#   r‡   r#   r°   r…   r-   r¥   r°   rQ   r°   r    )r{   ry   rz   )N)r%   rA   r0   ZrandnrD  r
   r�   )r^   rÿ  r   r”  Zxinitr)   r)   r*   Útest_minimize_coerce_args_paramª  s
    
z2TestOptimizeSimple.test_minimize_coerce_args_paramc           	         s.  g d¢}g d¢}‡ ‡‡fdd„}‡fdd„}t  ||¡D ]ð\‰}|dv rXtˆd d	�}ntƒ }ˆd
k rp|dv rpq8dg‰d g‰ tj|ˆ|||d�}|› dˆ› dˆ › d|› �}|js¸J |ƒ‚t|jdg|d� |jdksÜJ |ƒ‚ˆd
kr8|dv �rtˆ d d|d� n$ˆ d dk�rˆ d dk �s(J |ƒ‚q8q8d S )N)g¸ÔJzî�5r#   gšd~ÅQJ)rx   r    r—  r
  c                    s`   ˆ d d u r4| d ˆd kr4t | d ˆd  ƒˆ d< t | ƒ ¡ dkrLtdƒ‚ˆ| d d d  S )Nr   g     ˆÃ@zOptimization stepped far away!r#   r-   )rB   r¨  ÚAssertionErrorr'   ©Zfirst_step_sizeÚscalerI   r)   r*   rg   ½  s
    z7TestOptimizeSimple.test_initial_step_scaling.<locals>.fc                    s   t  ˆ | d d  g¡S ©Nr   r#   rÉ  r'   )r  r)   r*   r«  Ä  s    z7TestOptimizeSimple.test_initial_step_scaling.<locals>.g)rx   r    rÐ   )rÈ   rJ  )r—  r
  ç      ð¿r™  ú rÑ  rN   ©Úerr_msgrQ   r   g)\�Âõ(ð?rP   )	rl  rm  r  r
   r�   r�   r   r(   rÊ   )	r^   Úscalesrn  rg   r«  rz   r|   r�   r	  r)   r  r*   Útest_initial_step_scaling¶  s0    ÿ
&z,TestOptimizeSimple.test_initial_step_scaling)r  rÌ  rÖ   rÅ   r  r‘  rÍ  rÎ  rÏ  rq  ru  rr  rv  rs  c                    sZ  t j d¡ dg‰ dd„ }‡ fdd„}dd„ }d	d
„ }t  dg¡}|dv }|dv }||g}	|rd|gn|d g}
|rv|gn|d g}|dkr�tdd�ntdd�}t jdd��ž tƒ �v}| td¡ | t	d¡ | t	d¡ t
 |	|
|¡D ]2\}}}dg‰ tj||||||d�}t|jdƒ qâW d   ƒ n1 �s,0    Y  W d   ƒ n1 �sL0    Y  d S )Nr1   r   c                 S   s   t jS r8   ra  r'   r)   r)   r*   rh   ó  s    z0TestOptimizeSimple.test_nan_values.<locals>.funcc                    s0   ˆ d  d7  < ˆ d dkr"t jS t j ¡ S d S rM  )r%   r^  r0   rf  r'   ©Úcountr)   r*   Úfunc2ö  s    z1TestOptimizeSimple.test_nan_values.<locals>.func2c                 S   s   t  dg¡S ©NrN   rÉ  r'   r)   r)   r*   rk   ý  s    z0TestOptimizeSimple.test_nan_values.<locals>.gradc                 S   s   t  dgg¡S r  rÉ  r'   r)   r)   r*   rm      s    z0TestOptimizeSimple.test_nan_values.<locals>.hessrN   ©r  rs  rv  rr  ru  ©rs  rv  rr  ru  rÍ  r{  rÛ  rŠ  r¿   rb  údelta_grad == 0.*ú.*does not use Hessian.*ú.*does not use gradient.*)r{   rm   rz   r|   F)r%   r0   r3   rA   r  rÂ   r   ÚfilterÚUserWarningrö  rl  rm  r
   r�   r   r�   )r^   rz   rh   r  rk   rm   rI   Z
needs_gradZ
needs_hessÚfuncsZgradsZhesssr|   Úsuprg   r«  Úhrž   r)   r  r*   Útest_nan_valuesè  s.    ÿz"TestOptimizeSimple.test_nan_values)r  rÖ   rÅ   r‘  rÍ  rÎ  rÏ  rq  ru  rr  rv  rs  c              	   C   sÞ   d  }}|dv r| j }|dv r$| j}tjdd��Z tƒ �4}| td¡ tj| j	| j
|||d� W d   ƒ n1 sr0    Y  W d   ƒ n1 s�0    Y  tdt| jƒƒD ].}t | j|d  | j| ¡rªtd|› �ƒ‚qªd S )	Nr  r  r¿   rb  r  rt  r#   zDuplicate evaluations made by )rk   rm   r%   rÂ   r   r  r  r
   r�   rh   rW   rü   rD  r\   Zarray_equalr`   )r^   rz   r{   rm   r  r.  r)   r)   r*   Útest_duplicate_evaluations  s    ÿBÿz-TestOptimizeSimple.test_duplicate_evaluationsÚnew_cb_interface)r   r#   r-   c           
         sL  ‡fdd„‰dˆ_ ‡fdd„}‡fdd„}d‰|d	krF‡ ‡fd
d„}n0|dkrjG ‡ ‡fdd„dƒ}|ƒ }n‡ fdd„}‡ ‡fdd„‰ dˆ _dˆ _ dgd |ˆ||dœ}tjf i |¤d|i¤Ž}|dkrÎˆd	 ‰tjf i |¤ddˆii¤Ž}	|j|	jksúJ ‚t|j|	jƒ |j|	j  k�r$ˆk�s*n J ‚|j|dk�r<dndk�sHJ ‚d S )Nc                    s   dˆ _ t | ¡S ©NF)Úflagr
   r   r'   ©rg   r)   r*   rg   ;  s    z9TestOptimizeSimple.test_callback_stopiteration.<locals>.fFc                    s   dˆ _ t | ¡S r  )r  r
   r   r'   r  r)   r*   r«  @  s    z9TestOptimizeSimple.test_callback_stopiteration.<locals>.gc                    s   dˆ _ t | ¡S r  )r  r
   r   r'   r  r)   r*   r  D  s    z9TestOptimizeSimple.test_callback_stopiteration.<locals>.hr°   r#   c                    s   | j ˆ| jƒksJ ‚ˆ ƒ  d S r8   ©r}   r(   ©Úintermediate_result©r’  rg   r)   r*   Úcallback_interfaceK  s    zJTestOptimizeSimple.test_callback_stopiteration.<locals>.callback_interfacer-   c                       s    e Zd Zedœ‡ ‡fdd„ZdS )z@TestOptimizeSimple.test_callback_stopiteration.<locals>.Callbackr!  c                    s   |j ˆ|jƒksJ ‚ˆ ƒ  d S r8   r   )r^   r"  r#  r)   r*   rŽ  P  s    zITestOptimizeSimple.test_callback_stopiteration.<locals>.Callback.__call__N)rp   rq   rr   r   rŽ  r)   r#  r)   r*   r�  O  s   r�  c                    s
   ˆ ƒ  d S r8   r)   )Zxkry   )r’  r)   r*   r$  U  s    c                      s.   ˆ  j d7  _ dˆ _ˆ j ˆkr*dˆ _tƒ ‚d S )Nr#   FT)r.  r  ÚStopIterationr)   )r’  rY   r)   r*   r’  X  s
    
z@TestOptimizeSimple.test_callback_stopiteration.<locals>.callbackr   r¿  )rI   rz   r}   r{   rm   r’  r  r|   rY   rq  rQ   éc   )	r  r.  r
   r�   r}   r   r(   rÊ   r€   )
r^   rz   r  r«  r  r$  r�  rT  r�   rË   r)   )r’  rg   rY   r*   Útest_callback_stopiteration4  s2    
ÿ"z.TestOptimizeSimple.test_callback_stopiterationc                 C   sJ   d}t t|d��& t dd„ t d¡¡ W d   ƒ n1 s<0    Y  d S )Nz"'x0' must only have one dimension.r©   c                 S   s   | S r8   r)   r'   r)   r)   r*   r1  p  rì   z4TestOptimizeSimple.test_ndim_error.<locals>.<lambda>)r-   r#   )rD   rE   r
   r�   r%   Úones©r^   r/  r)   r)   r*   Útest_ndim_errorm  s    z"TestOptimizeSimple.test_ndim_error)r  r‘  rÍ  rÌ  rÎ  rq  c                 C   sÀ   dd„ }t ddgddgƒ}d}tjt|d��& tj|g d	¢||d
� W d   ƒ n1 sX0    Y  t g d¢g d¢ƒ}d}tjt|d��& tj|g d	¢||d
� W d   ƒ n1 s²0    Y  d S )Nc                 S   s   t  | d ¡S r  r  r'   r)   r)   r*   rg   u  s    z:TestOptimizeSimple.test_minimize_invalid_bounds.<locals>.fr#   r-   rQ   r‡   z?The number of bounds is not compatible with the length of `x0`.r©   )r#   r-   rQ   ©rI   rz   rí   )r#   r¥   r#   )rQ   r‡   r-   z:An upper bound is less than the corresponding lower bound.)r   r´   r	   rE   r
   r�   )r^   rz   rg   rí   r/  r)   r)   r*   Útest_minimize_invalid_boundsr  s    4z/TestOptimizeSimple.test_minimize_invalid_bounds)rÅ   rÖ   r  rÌ  c                 C   s°   |dkri ndt ji}|dkr"tnt j}dddœ}tj|dd��2 t jdd	„ d
d
gf||dœ|¤Ž W d   ƒ n1 sx0    Y  d|d< t jdd	„ d
d
gf||dœ|¤Ž d S )NrÌ  r{   Tr£   r–  úMaximum numberr©   c                 S   s
   t  | ¡S r8   ©r
   r   r'   r)   r)   r*   r1  Œ  rì   zBTestOptimizeSimple.test_minimize_warnings_gh1953.<locals>.<lambda>r   rÇ   Frv   c                 S   s
   t  | ¡S r8   r.  r'   r)   r)   r*   r1  �  rì   )r
   r   rö  rC  r´   rõ  r�   )r^   rz   rT  Zwarning_typer|   r)   r)   r*   Útest_minimize_warnings_gh1953‚  s"    ÿ
ÿÿ$ÿÿz0TestOptimizeSimple.test_minimize_warnings_gh1953N)*rp   rq   rr   r`  rc  rg  rp  rw  rz  rƒ  r‡  rˆ  r‹  r•  r›  r�  rž  r°  rÂ  rÆ  rÒ  r´   r  r  r   r   rä  rç  rï  rô  r÷  rú  rý  r  r  r  r  r   r'  r*  r,  r/  r)   r)   r)   r*   r[  ‘  sd   		&

þÿ=


2
-

6
r[  rz   )r‘  rÍ  rØ   r'  c                 C   s<   dd„ }t j|ddg| d�}|js&J ‚t|jdgdd� d S )	Nc                 S   s   t  | d ¡S r  r  r'   r)   r)   r*   rg   š  s    z$test_minimize_with_scalar.<locals>.fé   )r  rù   r  rR   r›   rƒ   )r
   r�   r�   r   r(   )rz   rg   r�   r)   r)   r*   Útest_minimize_with_scalar”  s    
r1  c                   @   sz   e Zd Zdd„ Zddd„Zddd„Zddd	„Zd
d„ Zdd„ Zdd„ Z	e
j dddgddgddgg¡dd„ ƒZdd„ ZdS )ÚTestLBFGSBBoundsc                 C   s   d| _ d| _d S )N))r#   N©NN)r#   r   )rí   rX   r]   r)   r)   r*   r_   £  s    zTestLBFGSBBounds.setup_methodræ  c                 C   s    d| |d | |d |   S )NrN   r   r#   r)   rn   r)   r)   r*   r}   §  s    zTestLBFGSBBounds.func                 C   s   ||d  S r"   r)   rn   r)   r)   r*   r{   ª  s    zTestLBFGSBBounds.jacc                 C   s   |   ||¡|  ||¡fS r8   ©r}   r{   rn   r)   r)   r*   Úfj­  s    zTestLBFGSBBounds.fjc                 C   sN   t j| jddg| j| jd�\}}}|d dks:J |d ƒ‚t|| jdd� d S )Nr   r	  )r¾   rí   r•   Útaskr4   rƒ   )r
   r„  r}   r{   rí   r   rX   ©r^   r(   rg   r†  r)   r)   r*   Útest_l_bfgs_b_bounds°  s    þz%TestLBFGSBBounds.test_l_bfgs_b_boundsc                 C   sL   t j| jddgd| jd�\}}}|d dks8J |d ƒ‚t|| jdd� d S )	Nr   r	  ©ræ  )ry   rí   r•   r6  r4   rƒ   )r
   r„  r5  rí   r   rX   r7  r)   r)   r*   r‹  ·  s
    ÿz%TestLBFGSBBounds.test_l_bfgs_b_funjacc                 C   sH   t j| jddgd| j| jd�}|d s2J |d ƒ‚t|j| jdd� d S )	Nr   r	  r—  ©rz   r{   rí   r�   r“  r4   rƒ   )r
   r�   r}   r{   rí   r   r(   rX   )r^   r�   r)   r)   r*   Útest_minimize_l_bfgs_b_bounds¾  s
    ÿz.TestLBFGSBBounds.test_minimize_l_bfgs_b_boundsrí   )r£   r#   rü  c                 C   sN   t jtdd��, tj| jddgd| j|d� W d   ƒ n1 s@0    Y  d S )Nz	.*bound.*r©   r   r	  r—  r:  )r´   r	   rE   r
   r�   r}   r{   )r^   rí   r)   r)   r*   Ú'test_minimize_l_bfgs_b_incorrect_boundsÅ  s    ÿz8TestLBFGSBBounds.test_minimize_l_bfgs_b_incorrect_boundsc              
   C   st   g d¢}ddg}t  ||¡D ]R\}}tj| jddg|d|| jdd id�}|d	 s\J |d
 ƒ‚t|j| jdd� qd S )Nri  r9  r)   r   r	  r—  Zfinite_diff_rel_step)ry   rz   r{   rí   r|   r�   r“  r4   rƒ   )	rl  rm  r
   r�   r}   rí   r   r(   rX   )r^   ro  Zargssr{   ry   r�   r)   r)   r*   Ú test_minimize_l_bfgs_b_bounds_FDÏ  s    ýz1TestLBFGSBBounds.test_minimize_l_bfgs_b_bounds_FDN)ræ  )ræ  )ræ  )rp   rq   rr   r_   r}   r{   r5  r8  r‹  r;  r´   r  r   r<  r=  r)   r)   r)   r*   r2  ¢  s   


ý
r2  c                   @   sN  e Zd Zdd„ Zd3dd„Zdd„ Zej d¡d	d
„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zej dg d¢¡dd„ ƒZej dg d¢¡dd„ ƒZej d¡ej dg d¢¡dd„ ƒƒZdd „ Zd!d"„ Zej dd#d$g¡d%d&„ ƒZej d'¡ej de¡ej d(d)d*g¡ej d+g d,¢¡d-d.„ ƒƒƒƒZej dg d/¢¡d0d1„ ƒZd2S )4ÚTestOptimizeScalarc                 C   s
   d| _ d S )Nr/   )rX   r]   r)   r)   r*   r_   à  s    zTestOptimizeScalar.setup_methodr/   c                 C   s   || d d S )zObjective functionr-   r­   r)   )r^   r(   rØ  r)   r)   r*   r}   ã  s    zTestOptimizeScalar.func                 C   s  t  | j¡}t|| jdd� t j| jdd�}t|| jdd� t j| jdd�}t|d | jdd� t j| jdd�}t|| jdd� d	}tjt|d
��  t j| jdd� W d   ƒ n1 s¸0    Y  d}tjt|d
��  t j| jdd� W d   ƒ n1 sú0    Y  d S )Nr4   rƒ   ©rè  rI  ©Z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   rX   r´   r	   rE   )r^   r(   r“  r)   r)   r*   Ú
test_brentç  s    .zTestOptimizeScalar.test_brentr»   c                 C   s~  t  | j¡}t|| jdd� t j| jdd�}t|| jdd� t j| jdd�}t|d | jdd� t j| jdd�}t|| jdd� t j| jdd	�}t|| jƒ g d
¢}|D ]H}t j| jddd�}t j| j|dd�}|d |d  }}t|| |ƒ q¨d}tjt|d��  t j| jdd� W d   ƒ n1 �s,0    Y  d}tjt|d��  t j| jdd� W d   ƒ n1 �sp0    Y  d S )Nr4   rƒ   r?  r@  TrA  r   rB  ©r€  )r   r#   r°   )rY   r�   r-   rD  r©   rE  rF  rG  )	r
   Úgoldenr}   r   rX   r   r´   r	   rE   )r^   r(   Zmaxiter_test_casesrY   rI   Znfev0r~   r“  r)   r)   r*   Útest_goldenü  s,    0zTestOptimizeScalar.test_goldenc                 C   s†   t  | jdd¡}t|ddd� t  | jdd¡}t|| jdd� t  | jt dg¡t dg¡¡}t|| jdd� ttt j| jddƒ d S )Nr   r#   rR  rƒ   r°   r4   )	r
   Ú	fminboundr}   r   rX   r%   rA   rD   rE   r�  r)   r)   r*   Útest_fminbound  s     z!TestOptimizeScalar.test_fminboundc                 C   sn   t jtdd��& t | jt d¡d¡ W d   ƒ n1 s:0    Y  t | jdt d¡¡}t	|| j
dd� d S )Nz.*must be finite scalars.*r©   ©r#   r-   r#   r°   r4   rƒ   )r´   r	   rE   r
   rM  r}   r%   rV   rA   r   rX   r�  r)   r)   r*   Útest_fminbound_scalar'  s    4z(TestOptimizeScalar.test_fminbound_scalarc                 C   s   dd„ }t  |dd¡ d S )Nc                 S   s   | d S r  r)   r'   r)   r)   r*   r}   /  s    z,TestOptimizeScalar.test_gh11207.<locals>.funr   )r
   rM  )r^   r}   r)   r)   r*   Útest_gh11207.  s    zTestOptimizeScalar.test_gh11207c                 C   s4  t  | j¡j}t|| jdd� t j| jdd�}|js8J ‚t j| jdtdd�d�}|jrZJ ‚t j| jdd	dd
�j}t|| jdd� t j| jdd	d�j}t|| jdd� t j| jdd	dd
�j}t|| jdd� t j| jdd	dd
�j}t|| jdd� t j| jdd	d�j}t|| jdd� t j| jdd	dd
�j}t|| jdd� t j| jdd	dd�j}t|ddd� t j| jdd	dd�j}t|| jdd� t j| jt 	dg¡t 	dg¡ft 	dg¡fdd�j}t|| jdd� t
tt j| jddd	d� t
tt j| jt d¡dfdd	d� t j| jdt 	d¡fdd�j}t|| jdd� d S )Nr4   rƒ   ZBrentrš   rQ   rŠ  rÇ   r?  )r/   )Úbracketry   rz   )rz   ry   rB  rK  )r   r#   ZBounded)rí   ry   rz   r#   rR  )r#   r°   Úboundedr°   r/   )r°   r#   ©rí   rz   ry   r-   r  )r
   Úminimize_scalarr}   r(   r   rX   r�   r  r%   rA   rD   rE   rV   r�  r)   r)   r*   Útest_minimize_scalar3  sr    

ÿ

ÿ
ÿ
ÿ
ÿ
ÿ
ÿÿÿ
ÿýÿÿÿz'TestOptimizeScalar.test_minimize_scalarc                 C   s:   ddd„}t j| jd|tdd�d	�}t|j| jd
d� d S )Nr)   r6   rù   c                 [   sÊ   |d |d  d }| |ƒ}	d}
d}d}d}|r²|s²||k r²d}|d7 }|| || fD ]0}| |g|¢R Ž }|
d7 }
||	k rX|}	|}d}qX|d urš||ƒ |d ur,|
|kr,d}q²q,t j|	|||
|dkd�S )Nr#   r   ræ  TFr±  rÄ  )r}   rR  ry   r(  r³  rY   r’  r|   r´  rµ  r¶  r·  r¸  r¹  r¼  r½  r)   r)   r*   r¾  q  s0    
ÿz?TestOptimizeScalar.test_minimize_scalar_custom.<locals>.custmin)r   r‡   rÀ  rÁ  )rR  rz   r|   r4   rƒ   )r)   Nr6   rù   N)r
   rU  r}   r  r   r(   rX   )r^   r¾  r�   r)   r)   r*   Útest_minimize_scalar_customo  s      ÿ

þz.TestOptimizeScalar.test_minimize_scalar_customc                 C   s   t j| jdd� d S )Nr/   ©ry   ©r
   rU  r}   r]   r)   r)   r*   Ú&test_minimize_scalar_coerce_args_param’  s    z9TestOptimizeScalar.test_minimize_scalar_coerce_args_paramrz   )rH  rS  rK  c                 C   s"   dD ]}t j| jd|id� qd S )N)r   r#   r-   rQ   rv   )r|   rY  )r^   rz   rv   r)   r)   r*   Ú	test_disp–  s    zTestOptimizeScalar.test_dispc                 C   sˆ   |dkrdddgini }t j| jfd|i|¤Ž}t|dƒs>J ‚t|dƒsLJ ‚t|dƒsZJ ‚t|d	ƒshJ ‚t|d
ƒsvJ ‚t|dƒs„J ‚d S )NrS  rí   rG  r£   rz   r(   r�   r“  r}   r~   rÊ   )r
   rU  r}   rñ  )r^   rz   rT  r  r)   r)   r*   Útest_result_attributesœ  s    z)TestOptimizeScalar.test_result_attributesc              	      sì   t j d¡ dg‰ ‡ fdd„}d}d}t jdd��¦ tƒ �€}| td	¡ | td
¡ | td¡ dg‰ |dkrvd|ini }tj	|fd|i|¤|t
dd�dœ¤Ž}t|jdƒ W d   ƒ n1 sÀ0    Y  W d   ƒ n1 sÞ0    Y  d S )Nr1   r   c                    s<   ˆ d  d7  < ˆ d dkr"t jS | d dt  | ¡  S d S )Nr   r#   r‡   r-   r6   )r%   r^  r9   r'   r  r)   r*   rh   ¯  s    z0TestOptimizeScalar.test_nan_values.<locals>.funcrE  r@  r¿   rb  r  r  r  rS  rí   rR  r{  rŠ  rÇ   F)r%   r0   r3   rÂ   r   r  r  rö  r
   rU  r  r   r�   )r^   rz   rh   rR  rí   r  rT  rž   r)   r  r*   r  §  s$    ÿþ
z"TestOptimizeScalar.test_nan_valuesc                 C   sF   dd„ }t  |¡}t|jddd� t j|dddid	�}t|jd
ƒ d S )Nc                 S   s   | d S r  r)   r'   r)   r)   r*   rg   É  s    zCTestOptimizeScalar.test_minimize_scalar_defaults_gh10911.<locals>.fr   rÐ   rƒ   )r#   rù   r3  rJ  )rí   r|   r#   )r
   rU  r   r(   )r^   rg   r�   r)   r)   r*   Ú%test_minimize_scalar_defaults_gh10911Æ  s    
ÿz8TestOptimizeScalar.test_minimize_scalar_defaults_gh10911c                 C   s�   d}t jt|d��& tjtjdtjfd� W d   ƒ n1 s>0    Y  t jt|d��& tjtjtjdfd� W d   ƒ n1 s‚0    Y  d S )Nz+Optimization bounds must be finite scalars.r©   r#   rû  )	r´   r	   rE   r
   rU  r%   r9   rP  r^  r)  r)   r)   r*   Ú'test_minimize_non_finite_bounds_gh10911Ó  s
    4z:TestOptimizeScalar.test_minimize_non_finite_bounds_gh10911rH  rK  c                 C   sH   d}t jt|d��" tjtj|dd� W d   ƒ n1 s:0    Y  d S )Nz'Use of `bounds` is incompatible with...r©   rO  ©rz   rí   )r´   r	   rE   r
   rU  r%   r9   )r^   rz   r/  r)   r)   r*   Ú2test_minimize_unbounded_method_with_bounds_gh10911Ü  s    zETestOptimizeScalar.test_minimize_unbounded_method_with_bounds_gh10911rÓ  r€  r#   r4   Úfshape)r)   ©r#   ©r#   r#   c           	         s”   ‡ fdd„}d\}}|dkr*t ||fd�nt ||fd�}| t ||d�¡ tj|fi |¤Ž}|jj|jj  krŠ||jƒj  krŠˆ ks�n J ‚d S )Nc                    s   t  | d ¡ ˆ ¡S ©Nr‡   )r%   rA   Zreshaper'   ©ra  r)   r*   rg   ì  s    zITestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196.<locals>.f)rÕ   r?   rS  )rR  rû  )rz   r€  )r  Úupdater
   rU  r(   Úshaper}   )	r^   rz   r€  ra  rg   rØ  ÚbrT  r�   r)   re  r*   Ú+test_minimize_scalar_dimensionality_gh16196ä  s    ÿz>TestOptimizeScalar.test_minimize_scalar_dimensionality_gh16196)rS  rH  rK  c                 C   sž   dd„ }i }|dkrdnd}ddg||< dd	d
œ}t jtjdd��( tj|f||dœ|¤Ž W d   ƒ n1 sp0    Y  d|d< tj|f||dœ|¤Ž d S )Nc                 S   s   | d d S r,   r)   r'   r)   r)   r*   rg   û  s    zBTestOptimizeScalar.test_minimize_scalar_warnings_gh1953.<locals>.frS  rí   rR  rI  r£   TrQ   r–  r-  r©   rÇ   Frv   )r´   rõ  r
   rC  rU  )r^   rz   rg   rT  Zkwdr|   r)   r)   r*   Ú$test_minimize_scalar_warnings_gh1953÷  s    
ÿ$z7TestOptimizeScalar.test_minimize_scalar_warnings_gh1953N)r/   )rp   rq   rr   r_   r}   rI  r´   r  r  rL  rN  rP  rQ  rV  rW  rZ  r   r[  r\  r  r]  r^  r`  r   ri  rj  r)   r)   r)   r*   r>  ß  s:   


<#



	

r>  c                   @   s6   e Zd Zej d¡dd„ ƒZej dd¡dd„ ƒZdS )	ÚTestBracketrÓ  c                 C   sP  dd„ }d}t jt|d�� t |dd¡ W d   ƒ n1 s>0    Y  t jt|d��  t |dtj¡ W d   ƒ n1 s|0    Y  t jt|d�� tj|dd� W d   ƒ n1 s¸0    Y  t jt|d�� tj|dd� W d   ƒ n1 sô0    Y  d	d„ }d
}t jt|d��" tj|dddd� W d   ƒ n1 �sB0    Y  d S )Nc                 S   s   d| k | dk @ r| d S dS ©Nr	  r#   r-   g      Y@r)   r'   r)   r)   r*   rg     s    z3TestBracket.test_errors_and_status_false.<locals>.fú9The algorithm terminated without finding a valid bracket.r©   r	  r#   r@  r@  c                 S   s<   d| d  d| d   d| d   d| d   d|   d S )	NrF  r°   r‡   é   rQ   é   r-   r#   r)   r'   r)   r)   r*   rg     s    z8No valid bracket was found before the iteration limit...rˆ   rP   r£   rŠ  )	r´   r	   r`   r
   rR  r%   rP  rH  rK  )r^   rg   r“  r)   r)   r*   Útest_errors_and_status_false  s    ,.,,z(TestBracket.test_errors_and_status_falserz   )rH  rK  c                 C   sb   dd„ }d}t j|d|d�}|jr&J ‚||jv s4J ‚|jdksBJ ‚|jdksPJ ‚|jdks^J ‚d S )	Nc                 S   s   d| k | dk @ r| d S dS rl  r)   r'   r)   r)   r*   rg   '  s    z9TestBracket.test_minimize_scalar_success_false.<locals>.frm  r@  )rR  rz   rQ   r   rù   )r
   rU  r�   r“  r~   rÊ   r}   )r^   rz   rg   r“  r�   r)   r)   r*   Ú"test_minimize_scalar_success_false$  s    
z.TestBracket.test_minimize_scalar_success_falseN)	rp   rq   rr   r´   r  r  rp  r   rq  r)   r)   r)   r*   rk    s   

rk  c                   C   s   t ttjtjdd� d S )Ng{®Gáz„¿rJ  )rD   rE   r
   rH  r%   r=   r)   r)   r)   r*   Útest_brent_negative_tolerance4  s    rr  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestNewtonCgc                 C   sX   t  ddg¡}tjtj|tjtjddd�}|js:J |jƒ‚t	|j
t  ddg¡dd� d S ©	NrÎ   rN   r›   r
  ©r{   rm   r€  rz   r#   rR  rœ   )r%   rA   r
   r�   r   r   r   r�   r“  r   r(   ©r^   rI   rž   r)   r)   r*   Útest_rosenbrock9  s    
üzTestNewtonCg.test_rosenbrockc                 C   sT   t  t¡}tjt|ttddd�}|js0J |j	ƒ‚t
|jtdd� t
|jtdd� d S )Nr
  r4   )r{   rm   rz   r€  rR  rœ   rƒ   )r%   rA   rH   r
   r�   Ú
himmelblaurF   rG   r�   r“  r   r(   Úhimmelblau_xoptr}   Úhimmelblau_minrv  r)   r)   r*   Útest_himmelblauC  s    
ûzTestNewtonCg.test_himmelblauc                 C   sV   t  ddg¡}tjtj|tjdddd�}|js8J |jƒ‚t|j	t  ddg¡dd	� d S )
NrÎ   rN   rj  r›   r
  ru  r#   rR  rœ   )
r%   rA   r
   r�   r   r   r�   r“  r   r(   rv  r)   r)   r*   Útest_finite_differenceO  s    
üz#TestNewtonCg.test_finite_differencec                 C   sZ   t  ddg¡}tjtj|tjt ¡ ddd�}|js<J |jƒ‚t	|j
t  ddg¡dd� d S rt  )r%   rA   r
   r�   r   r   r    r�   r“  r   r(   rv  r)   r)   r*   Útest_hessian_update_strategyY  s    
üz)TestNewtonCg.test_hessian_update_strategyN)rp   rq   rr   rw  r{  r|  r}  r)   r)   r)   r*   rs  8  s   

rs  c                  C   s  t jj} t g d¢¡}t g d¢¡}t g d¢¡}t g d¢¡}|t g d¢¡ddf|t g d¢¡d	d
f|t g d¢¡ddf|t g d¢¡ddf|t g d¢¡d	d
f|t g d¢¡ddf|t g d¢¡ddf|t g d¢¡ddf|t g d¢¡dd	f|t g d¢¡ddf|t g d¢¡ddf|t g d¢¡dd	f|t g d¢¡ddff}|D ]<\}}}}	| ||||ƒ\}
}t|
|dd� t||	dd� �qLt tj d	tj dg¡}t tjd
dtjg¡}|t g d¢¡tj tjf|t g d¢¡d	d
f|t g d¢¡tj df|t g d¢¡dtjf|t g d¢¡d	d
f|t g d¢¡dtjf|t g d¢¡tj tjf|t g d¢¡dd	f|t g d¢¡tj df|t g d¢¡dtjf|t g d¢¡dd	f|t g d¢¡dtjff}|D ]<\}}}}	| ||||ƒ\}
}t|
|dd� t||	dd� �qÎd S )N)ç333333Àr	  r˜   rè  )r®   r#   çffffff@rQ   ©rR   r   r   r   )rR   r-   rè  r   ©rN   r   r   r   r~  r®   ©rR   r#   r   r   r	  r#   ©rR   r   r#   r   r˜   r  ©rR   r   r   r#   rè  rQ   )rN   r#   r   r   )rN   r   r	  r-   r/   )ræ  r   r	  r-   gffffffî?g333333@)rN   r   r	  r   r4   rƒ   g333333À)r
   r-  Z_line_for_searchr%   rA   r   rP  )Zline_for_searchÚlower_boundÚupper_boundrI   Úx1Ú	all_testsr(   ÚalphaZlminZlmaxÚmiÚmar)   r)   r*   Útest_line_for_searchd  sT    óôrŒ  c               
   C   sz  t jj} dd„ }t g d¢¡}||ƒ}t tj gd ¡}t tjgd ¡}t g d¢¡dft g d¢¡dft g d	¢¡d
ft g d¢¡dft g d¢¡dft g d¢¡dft g d¢¡dff}|D ]°\}}| ||||dd�\}	}
}t|	||| ƒdd� t|
|| dd� t||| dd� | |||d|||d�\}	}
}t|	||| ƒdd� t|
|| dd� t||| dd� qÄd S )Nc                 S   s   t  | t  g d¢¡ d ¡S ©N)r  ræ  r/   çš™™™™™Ù¿r-   ©r%   r:   rA   r'   r)   r)   r*   rh   ¨  s    z$test_linesearch_powell.<locals>.funcr€  r‡   r�  r	  r‚  r-   rƒ  r/   r„  rŽ  ©r  r   r#   r   ç      ô?©rR   r   r#   r#   çš™™™™™á?©ræ  r   r	  r#   çÍÌÌÌÌÌä¿r›   )Úfvalr€  r4   rƒ   ©r€  r…  r†  r–  )r
   r-  Ú_linesearch_powellr%   rA   rP  r   ©Zlinesearch_powellrh   r>  r–  r…  r†  rˆ  ÚxiÚlrg   rj   r2   r)   r)   r*   Útest_linesearch_powell£  s:    ù
ÿ
ýrœ  c               
   C   sØ  t jj} dd„ }t g d¢¡}||ƒ}t dgd ¡}t dgd ¡}t g d¢¡dft g d	¢¡d
ft g d¢¡dft g d¢¡dft g d¢¡dft g d¢¡dft g d¢¡dff}|D ]^\}}| |||d|||d�\}	}
}t|	||| ƒdd� t|
|| dd� t||| dd� 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 ]h\}}| |||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 ]`\}}| |||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 ]h\}}| |||d|||d�\}	}
}t|	||||  ƒdd� t|
|||  dd� t||| dd� �qjd S )"Nc                 S   s   t  | t  g d¢¡ d ¡S r�  r�  r'   r)   r)   r*   rh   Î  s    z,test_linesearch_powell_bounded.<locals>.funcr€  g       Àr‡   ræ  r�  r	  r‚  r-   rƒ  r/   r„  rŽ  r�  r‘  r’  r“  r”  r•  r›   r—  r4   rƒ   g333333Ó¿rQ   gÍÌÌÌÌÌÜ?rÓ   rO   g333333Ã¿)r  r   r   r-   r¬   g333333À)r
   r-  r˜  r%   rA   r   rP  r™  r)   r)   r*   Útest_linesearch_powell_boundedÉ  s¾    ù

ýù

ýü
ýù

ýü
ýr�  c                     sl   t  ddgddg¡‰ ‡ fdd„} t j| ddgdˆ d� t jdgdgd	gd
�‰ dd„ }t j|dgdˆ d� d S )Nr   g333333ã?r{  c                    s8   | \}}| ˆ j k ¡ r$| ˆ jk ¡ s(J ‚|d |d  S r  )Úlbr@   Úub)r(   rØ  rh  rû  r)   r*   r}   J	  s     ztest_powell_limits.<locals>.funrØ   r+  r#   T)rž  rŸ  Zkeep_feasiblec                 S   s   | dkr| dksJ ‚t  | ¡S r  r$   r'   r)   r)   r*   rh   T	  s    z test_powell_limits.<locals>.funcrP   rÌ  )r}   rI   rz   rí   )r
   r   r�   )r}   rh   r)   rû  r*   Útest_powell_limitsF	  s    r   c                   @   s   e Zd Zdd„ ZdS )Ú	TestRosenc                 C   sH   t  g d¢¡}t  g d¢¡}t ||¡}t  t |¡|¡}t||ƒ d S )N)rQ   r‡   r°   )r-   r-   r-   )r%   rA   r
   Úrosen_hess_prodra   r   r   )r^   r(   rj   ÚhpZdothpr)   r)   r*   Ú	test_hess]	  s
    zTestRosen.test_hessN)rp   rq   rr   r¤  r)   r)   r)   r*   r¡  [	  s   r¡  c                 C   s8   | \}}|| | d }|||  d }|| ||  S )zx
    R^2 -> R^1 test function for optimization. The function has four local
    minima where himmelblau(xopt) == 0.
    ro  r†   r)   )rj   r(   r¥  rØ  rh  r)   r)   r*   rx  f	  s    rx  c                 C   sn   | \}}t  d|d  d| |  d|  d|d   d d|d  d| |  d|d   d|  d g¡S )Nr‡   rQ   é*   r-   é   é   r  rÉ  ©rj   r(   r¥  r)   r)   r*   rF   q	  s    2.ÿrF   c                 C   s^   | \}}t  d|d  d|  d d| d|  gd| d|  d| d|d   d gg¡S )Nrn  r-   r‡   r¥  r§  rÉ  r¨  r)   r)   r*   rG   w	  s    *&ÿrG   gHáz®GÑ¿gÍÌÌÌÌÌì¿rQ   r-   rR   c                  C   sj   dd„ } dd„ }dd„ }d| dœd|dœd|dœf}d	d
„ }t j|g d¢d|d�}t|jg d¢dd� d S )Nc                 S   s0   t  dd| d   d| d   d| d   g¡S )Né   r?   r   rø  r#   rù  r-   rÉ  r'   r)   r)   r*   rh   „	  s    z0test_minimize_multiple_constraints.<locals>.funcc                 S   s   t  | d g¡S r"   rÉ  r'   r)   r)   r*   Úfunc1‡	  s    z1test_minimize_multiple_constraints.<locals>.func1c                 S   s   t  | d g¡S r  rÉ  r'   r)   r)   r*   r  Š	  s    z1test_minimize_multiple_constraints.<locals>.func2rë  rì  c                 S   s   d| d | d  | d   S )Nr	  r   r#   r-   r)   r'   r)   r)   r*   rg   ‘	  s    z-test_minimize_multiple_constraints.<locals>.frB  rð  rî  )é}   r   r   rJ  rƒ   r  )rh   rª  r  rê  rg   r�   r)   r)   r*   Ú"test_minimize_multiple_constraints‚	  s    þr¬  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestOptimizeResultAttributesc                 C   s8   ddg| _ tj| _tj| _tj| _tj| _	ddg| _
d S )Nr°   )rR   rx  )rI   r
   r   rh   r   r{   r   rm   r¢  ro   rí   r]   r)   r)   r*   r_   ›	  s    
z)TestOptimizeResultAttributes.setup_methodc              
   C   sÀ   g d¢}ddgi}t D ]¤}tƒ �<}| td¡ tj| j| j|| j| j	| j
d�}W d   ƒ n1 sb0    Y  |D ]8}||v rŠ||| v rŠqpt||ƒs˜J ‚|t|ƒv spJ ‚qpt|jtƒsJ ‚qd S )N)rÊ   r~   r(   r�   r€   r}   r“  rÎ  rÊ   z7Method .+ does not use (gradient|Hessian.*) information)rz   r{   rm   ro   )r   r   r  rö  r
   r�   rh   rI   r{   rm   ro   rñ  ÚdirrÝ  r“  Ústr)r^   Ú
attributesÚskiprz   r  r�   Ú	attributer)   r)   r*   Útest_attributes_present£	  s"    
ÿþ$z4TestOptimizeResultAttributes.test_attributes_presentN)rp   rq   rr   r_   r³  r)   r)   r)   r*   r­  ˜	  s   r­  c                 G   s^   | \}}|\}}}}}}	}
}}}}}}||d  || |  ||d   ||  ||  |	 S r  r)   ©rÈ  r‘   r(   r¥  rØ  rh  r”  r†  r¼   rg   r«  r  r.  rþ   r®  r›  r  r)   r)   r*   Úf1º	  s    rµ  c                 G   sP   | \}}|\}}}}}}	}
}}}}}}|
 t  || d || d   | ¡ S r  r$   r´  r)   r)   r*   Úf2À	  s    r¶  c                 G   sP   | \}}|\}}}}}}	}
}}}}}}| t  || d || d   | ¡ S r  r$   r´  r)   r)   r*   Úf3Æ	  s    r·  c                 G   s0   t | g|¢R Ž t| g|¢R Ž  t| g|¢R Ž  S r8   )rµ  r¶  r·  ©rÈ  r‘   r)   r)   r*   Ú
brute_funcÌ	  s    r¹  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )Ú	TestBrutec                 C   s4   d| _ tdddƒtdddƒf| _t ddg¡| _d S )N)r-   rQ   r†   r¤   r…   r£   é,   r	  r-   r§  r#   rI  rP   rA  r‡   ç      Ð?g_}ú×èð¿g•÷iÃþîü?)r‘   ÚsliceÚrrangesr%   rA   rX   r]   r)   r)   r*   r_   Ò	  s    zTestBrute.setup_methodc                 G   s   t |g|¢R Ž S r8   )r¹  )r^   rÈ  r‘   r)   r)   r*   r¹  ×	  s    zTestBrute.brute_funcc                 C   sÔ   t jt| j| jdt jd�}t|d | jdd� t|d t| jg| j¢R Ž dd� t jt| j| jdt jd�}t|d | jdd� t|d t| jg| j¢R Ž dd� t j| j| j| jdt jd�}t|d | jdd� d S )NT©ry   r�   Úfinishr   rÆ   rƒ   r#   )	r
   Úbruter¹  r¾  r‘   rô   r   rX   r�   )r^   Úresbruter)   r)   r*   Ú
test_bruteÛ	  s(    ÿÿþÿþzTestBrute.test_brutec                 C   s    dd„ }t j|dgdd d� d S )Nc                 S   s,   t | jƒdksJ ‚| jd dks$J ‚| d S )Nr#   r   r-   )rD  rg  r'   r)   r)   r*   rg   õ	  s    zTestBrute.test_1D.<locals>.fr@  rQ   )ZNsrÀ  )r
   rÁ  r‚  r)   r)   r*   Útest_1Dò	  s    zTestBrute.test_1Dc                 C   sZ   t jt| j| jdd d�}t jt| j| jdd dd�}t|d |d ƒ t|d |d ƒ d S )NTr¿  r-   )ry   r�   rÀ  Úworkersr	  r   )r
   rÁ  r¹  r¾  r‘   r   )r^   rÂ  Z	resbrute1r)   r)   r*   Útest_workersü	  s    ÿÿzTestBrute.test_workersc                    sd   t j d¡‰ ‡ fdd„}d}tjt|d��& tj|| j| j	dd� W d   ƒ n1 sV0    Y  d S )Nr1   c                    s   ˆ   d¡d S r"  r#  r¸  r$  r)   r*   rh   

  s    z,TestBrute.test_runtime_warning.<locals>.funczFfinal optimization did not succeed.*|Maximum number of function eval.*r©   T)ry   rv   )
r%   r0   r)  r´   rõ  rö  r
   rÁ  r¾  r‘   )r^   Zcapsysrh   r/  r)   r$  r*   r÷  
  s
    zTestBrute.test_runtime_warningc                 C   s0   dd„ }t j|tdddƒfdd�}t|dƒ d S )	Nc                 W   s   | |d  S r  r)   ©r(   ry   r)   r)   r*   rg   
  s    z+TestBrute.test_coerce_args_param.<locals>.frA  r‡   r¼  r-   rX  r   )r
   rÁ  r½  r   )r^   rg   rÂ  r)   r)   r*   Útest_coerce_args_param
  s    z TestBrute.test_coerce_args_paramN)
rp   rq   rr   r_   r¹  rÃ  rÄ  rÆ  r÷  rÈ  r)   r)   r)   r*   rº  Ð	  s   

rº  c                     s¬   dd l } dd l‰‡fdd„‰‡fdd„‰d‰ ‡ ‡fdd„}‡ ‡fd	d
„}| j ¡ �F}g }| | |¡¡ | | |¡¡ |D ]}| ¡  q|W d   ƒ n1 sž0    Y  d S )Nr   c                    s   ˆ   d¡ | d d S )Nr6   r   r-   ©Úsleepr'   ©Útimer)   r*   Ú
objective1!
  s    
z*test_cobyla_threadsafe.<locals>.objective1c                    s   ˆ   d¡ | d d d S )Nr6   r   r#   r-   rÉ  r'   rË  r)   r*   Ú
objective2%
  s    
z*test_cobyla_threadsafe.<locals>.objective2ÚCOBYLAc                      s   t jˆdgˆ d�S ©NrR   rš   r×  r)   )Ú
min_methodrÍ  r)   r*   Ú
minimizer1+
  s    þz*test_cobyla_threadsafe.<locals>.minimizer1c                      s   t jˆdgˆ d�S rÐ  r×  r)   )rÑ  rÎ  r)   r*   Ú
minimizer20
  s    þz*test_cobyla_threadsafe.<locals>.minimizer2)Úconcurrent.futuresrÌ  ZfuturesZThreadPoolExecutorrc   Zsubmitr  )Z
concurrentrÒ  rÓ  ÚpoolÚtasksrO  r)   )rÑ  rÍ  rÎ  rÌ  r*   Útest_cobyla_threadsafe
  s    r×  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestIterationLimitsc                 C   s
   d| _ d S r  )r¶  r]   r)   r)   r*   r_   A
  s    z TestIterationLimits.setup_methodc                 C   s\   |  j d7  _ t |d d |d d  ¡t |d |d ¡ }}t |d | ¡|d  S )Nr#   r   r-   r{  rP   )r¶  r%   rd  Zarctan2r9   )r^   rœ  rJ   rO  r)   r)   r*   Ú	slow_funcD
  s    4zTestIterationLimits.slow_funcc                 C   s   |   dd¡ d S )Nr'  éÈ   ©Úcheck_limitsr]   r)   r)   r*   Útest_neldermead_limitI
  s    z)TestIterationLimits.test_neldermead_limitc                 C   s   |   dd¡ d S )NrÌ  rS   rÛ  r]   r)   r)   r*   Útest_powell_limitL
  s    z%TestIterationLimits.test_powell_limitc              	   C   s0  ddgddgddgfD �]}dD ]^}d| _ tj| j||d|id�}| j |d ksTJ ‚|d	 rn|d |k s~J ‚q |d |ks J ‚q dD ]F}tj| j||d
|id�}|d	 rº|d |ksÊJ ‚q„|d |ks„J ‚q„ddgddgdtjgfD ]„\}}d| _ tj| j||||dœd�}| j |d k�s J ‚|d	 �rL|d |k �rF|d |k�shJ ‚qä|d |ksä|d |ksäJ ‚qätjd gd tjgfD ]ª\}}d| _ tj| j||||dœd�}| j |d k�sºJ ‚|d	 �rþ|d u �ræ|d |d k �süJ ‚n|d |d k�s&J ‚n(|d |d k�s~|d |d k�s~J ‚�q~qd S )Nr6   r#   r-   )rú   iô  éˆ  r   r(  rÇ   r~   r�   rY   rÊ   rú   rß  )rY   r(  )r¶  r
   r�   rÙ  r%   rP  )r^   rz   Zdefault_itersZstart_vZmfevr�   Zmitr)   r)   r*   rÜ  O
  s^    
þ
þ 
ÿþ
"
ÿþ

ÿz TestIterationLimits.check_limitsN)rp   rq   rr   r_   rÙ  rÝ  rÞ  rÜ  r)   r)   r)   r*   rØ  =
  s
   rØ  c                  C   s”   dd„ } dd„ }dd„ }g d¢}|D ],}t j| t dg¡|d	�}|jjd
ks$J ‚q$g d¢}|D ]0}t j| t dg¡|||d�}|jjd
ks^J ‚q^d S )Nc                 S   s   | |  S r8   r)   r'   r)   r)   r*   r}   €
  s    z2test_result_x_shape_when_len_x_is_one.<locals>.func                 S   s   d|  S ©Nræ  r)   r'   r)   r)   r*   r{   ƒ
  s    z2test_result_x_shape_when_len_x_is_one.<locals>.jacc                 S   s   t  dgg¡S rà  rÉ  r'   r)   r)   r*   rm   †
  s    z3test_result_x_shape_when_len_x_is_one.<locals>.hess)r'  rØ   rx   r    r—  rh  rÏ  rð  r6   rš   rb  )rq  ru  rr  rv  rs  r
  rt  )r
   r�   r%   rA   r(   rg  )r}   r{   rm   rn  rz   r�   r)   r)   r*   Ú%test_result_x_shape_when_len_x_is_one
  s    ÿrá  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚFunctionWithGradientc                 C   s
   d| _ d S r  )Únumber_of_callsr]   r)   r)   r*   rŒ  ™
  s    zFunctionWithGradient.__init__c                 C   s$   |  j d7  _ t |d ¡d| fS r,   )rã  r%   r:   r�  r)   r)   r*   rŽ  œ
  s    zFunctionWithGradient.__call__Nr�  r)   r)   r)   r*   râ  ˜
  s   râ  c                   C   s   t ƒ S r8   )râ  r)   r)   r)   r*   Úfunction_with_gradient¡
  s    rä  c                 C   s„   t | ƒ}t ddg¡}t||ƒdƒ | jdks2J ‚t| |¡d| ƒ | jdksXJ dƒ‚t|d| ƒddd	� | jdks€J dƒ‚d S )
NrN   ræ  r7  r#   r-   zHfunction is not recomputed if gradient is requested after function valueg      4@ú(different input triggers new computationr  )r   r%   rA   r   rã  Ú
derivative©rä  Úmemoized_functionrI   r)   r)   r*   Ú)test_memoize_jac_function_before_gradient¦
  s    ÿþÿré  c                 C   sŠ   t | ƒ}t ddg¡}t| |¡d| ƒ | jdks8J ‚t||ƒdƒ | jdksXJ dƒ‚t| d| ¡d| dd	� | jdks†J dƒ‚d S )
NrN   ræ  r-   r#   r7  zHfunction is not recomputed if function value is requested after gradientr‡   rå  r  )r   r%   rA   r   ræ  rã  rç  r)   r)   r*   Ú)test_memoize_jac_gradient_before_function¹
  s    ÿþÿrê  c                 C   s‚   t | ƒ}|j}t ¡ }t ddg¡}t||d||ddƒ}| jdksFJ ‚| |d ¡ | jdksbJ ‚| |d ¡ | jd	ks~J ‚dS )
z¹ Tests that using MemoizedJac in combination with ScalarFunction
        and BFGS does not lead to repeated function evaluations.
        Tests changes made in response to GH11868.
    rN   rP   r)   Nr#   r6   r-   r?   rQ   )	r   ræ  r
   r    r%   rA   r   rã  r}   )rä  rè  r{   rm   rI   Zscalar_functionr)   r)   r*   Útest_memoize_jac_with_bfgsÌ
  s    ÿrë  c                   C   sF   t ƒ �, tjdd„ tj tjdd� W d   ƒ n1 s80    Y  d S )Nc                 S   s   t  | d g¡S r  rÉ  r'   r)   r)   r*   r1  å
  rì   ztest_gh12696.<locals>.<lambda>FrÁ   )r   r
   rM  r%   rè   r)   r)   r)   r*   Útest_gh12696á
  s    ÿrì  c                     s”  t j d¡ t j d¡} t  g d¢¡‰t  g d¢¡}ˆ|k‰d‡‡fdd„	‰ ‡ fdd	„‰‡ fd
d„‰‡ fdd„}‡ fdd„}‡ fdd„}‡ fdd„}‡ fdd„}t|t j dƒ}t|t j d|ƒ}t|t j dƒ}	t|t j d|ƒ}
d}ˆddœˆˆdœ‡‡fdd„ddœf}dd„ tf}dg g f||f|
|
f|g|gf|	g|
gf||	g||
gf||
g||
gf||
g||
gff	}d |f}|||||ˆ|| ˆdœ	}|S )Nr   r‡   )r   r-   r	  r  )rQ   r-   r-   r  Tc                    s,   |r| j dksJ ‚|r(t| ˆ  ˆˆ  ƒ d S rd  )r²  r   )r(   Z
check_sizeÚcheck_values)Úi_ebrž  r)   r*   Úcheck_xò
  s    z(setup_test_equal_bounds.<locals>.check_xc                    s   ˆ | ƒ t  | ¡S r8   r.  r'   ©rï  r)   r*   rh   ø
  s    z%setup_test_equal_bounds.<locals>.funcc                    s   ˆ | ƒ t  | ¡S r8   )r
   r   r'   rð  r)   r*   rk   ü
  s    z%setup_test_equal_bounds.<locals>.gradc                    s   ˆ | ƒ d S r8   r)   rÇ  rð  r)   r*   r’     s    z)setup_test_equal_bounds.<locals>.callbackc                    s   ˆ | dd� | dd… d S )NF©rí  r   r#   r)   r'   rð  r)   r*   Úconstraint1  s    z,setup_test_equal_bounds.<locals>.constraint1c                    s"   ˆ | dd� t  | ¡}d|d< |S )NFrñ  r#   r   ©r%   Z
zeros_like©r(   Zdcrð  r)   r*   Ú	jacobian1  s    
z*setup_test_equal_bounds.<locals>.jacobian1c                    s   ˆ | dd� | dd… d S )NFrñ  r-   rQ   rP   r)   r'   rð  r)   r*   Úconstraint2  s    z,setup_test_equal_bounds.<locals>.constraint2c                    s"   ˆ | dd� t  | ¡}d|d< |S )NFrñ  r#   r-   ró  rô  rð  r)   r*   Ú	jacobian2  s    
z*setup_test_equal_bounds.<locals>.jacobian2)r—  rð  rh  Fr4  c                    s   ˆ | ƒˆ| ƒfS r8   r)   r'   r‰  r)   r*   r1  #  rì   z)setup_test_equal_bounds.<locals>.<lambda>c                 S   s   t t| |ƒƒS r8   )ÚlistÚzip©rž  rŸ  r)   r)   r*   r1  '  rì   r3  )	rn  ÚkwdsÚbound_typesrÃ  Ú	callbacksrž  rŸ  rI   rî  )TT)r%   r0   r3   rf  rA   r   rP  r   )rI   rŸ  r’  rò  rõ  rö  r÷  Zc1aZc1bZc2aZc2brn  rû  rü  rÃ  rý  Údatar)   )rï  rh   rk   rî  rž  r*   Úsetup_test_equal_boundsê
  sP    ÿþÿûþrÿ  z0Failures due to floating point issues, not logicrn  rû  Ú
bound_typerü  rÃ  r’  rý  c                 C   s¸  t  ¡ dkr2| dkr2|d du r2|dur2t d¡ td td  }}td	 td
  }}|\}	}
|	rt| dkstt d¡ |	|
k}|||ƒ}| || ||	|dœ¡ tjf i |¤Ž}tjtj|| tj	||
d�}|j
sÐJ ‚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 )z½
    Tests that minimizers still work if (bounds.lb == bounds.ub).any()
    gh12502 - Divide by zero in Jacobian numerical differentiation when
    equality bounds constraints are used
    Úaarch64rh  r{   FNzTolerance violation on aarchrž  rŸ  rI   rî  rð  z)Only SLSQP supports nonlinear constraints)rI   rz   rí   rÃ  r’  )rz   r{   rí   rÃ  gTäqs*¹>rœ   gü©ñÒMb@?r   r‡   r4   c                 S   s,   t  t jdt jdg¡}| |ddg< t |¡S )Nr-   r	  r   )r%   rA   r^  r
   r   )r(   Znew_xr)   r)   r*   r}   t  s    ztest_equal_bounds.<locals>.funr-   r_  g�íµ ÷ÆÀ>)ÚplatformÚmachiner´   r±  Úeb_datarf  r
   r�   r   r   r�   r   r}   r(   r%   r^  r{   rg  rÝ  r   )rz   rû  r   rÃ  r’  rž  rŸ  rI   rî  Ztest_constraintsZreference_constraintsZ	fd_neededrí   r�   Úexpectedr}   Zfd_resr)   r)   r*   Útest_equal_boundsB  sJ    
ÿÿ



ÿþ

ýr  c           	      C   s’  ddd„}ddg}d}t j|||| d�}|js2J ‚t|j|dd	gƒƒ |jdksTJ ‚|jd
ksbJ ‚d}t j|||| |d�}|js„J ‚t|j|dd	gdƒƒ |  ¡ dk�rŽdd„ }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 ‚t|t	j
 dƒ}t j|||| |gd�}|jdu �sTJ ‚t|j|dd	gƒƒ |jdk�sxJ ‚d}|j |¡�sŽJ ‚d S )Nr#   c                 S   s   t j | ¡| S r8   )r%   ZlinalgZnorm)r(   Úp1r)   r)   r*   rg   Š  s    z test_all_bounds_equal.<locals>.frc  )r-   r-   )rN   r  r  rN   ræ  z/All independent variables were fixed by bounds.)r-   rT  r-   rð  c                 S   s
   t  | ¡S r8   r  r'   r)   r)   r*   Úcon›  s    z"test_all_bounds_equal.<locals>.conrR   )rí   rz   rÃ  Fz3All independent variables were fixed by bounds, butr‡   Tz8All independent variables were fixed by bounds at values)r#   )r
   r�   r�   r   r}   r~   r“  Úupperr   r%   rP  rà  )	rz   rg   rí   rI   r�   ry   r  Znlcr“  r)   r)   r*   Útest_all_bounds_equal†  s@    


ÿÿr
  c                  C   s^   dd„ } dd„ }d|dœg}dgd }d	|d
< t j| g d¢d||d� |d d |ksZJ ‚d S )Nc                 S   s(   | d d | d d  | d | d   S )Nr   rQ   r#   r-   r)   r'   r)   r)   r*   rg   µ  s    ztest_eb_constraints.<locals>.fc                 S   s$   | d | d  | d  | d  d S )Nr   r#   r-   rQ   é(   r)   r'   r)   r)   r*   Úcfun¸  s    z!test_eb_constraints.<locals>.cfunrë  rì  )r   r{  r‡   )r°   r°   r#   )r#   r-   rQ   r‡   rð  )rI   rz   rí   rÃ  r   r}   r×  )rg   r  rÃ  rí   r)   r)   r*   Útest_eb_constraints²  s    
ûr  c                  C   sh   t tttttdœ} |  ¡ D ]\}}|D ]}t||ƒ q&qddddœ}| ¡ D ]\}}tt	t||ƒ qLd S )N)r�   rU  ÚrootZroot_scalarZlinprogZquadratic_assignmentZekkirÖ   )r�   ZmaximizeZmaximize_scalar)
r   r   r   r   r   r   Úitemsr   rD   rE   )Zsolver_methodsZsolverrn  rz   Zunknown_solver_methodr)   r)   r*   Útest_show_optionsÉ  s     úýr  c                  C   s8   t jddgddgd�} t jt jt ddg¡d| d� d S )Nr7  rx  rú  r…   rØ   r+  )r
   r   r�   r   r%   rA   rû  r)   r)   r*   Útest_bounds_with_listá  s    ÿr  c            
      C   s”   dd„ } dd„ }dd„ }g d¢}g d¢}t  d	¡d
 }tD ]T}d }d }||v rR|}||v r^|}tj| ||||d�}	t|	jt  t  |¡¡dd� q:d S )Nc                 S   s*   t  t  | ¡¡}| |8 } | | 9 } t  | ¡S r8   )r%   rC   r²  r:   ré  r)   r)   r*   Úfquadí  s    z/test_x_overwritten_user_function.<locals>.fquadc                 S   s(   t  t  | ¡¡}| d9 } | d| 8 } | S r  )r%   rC   r²  ré  r)   r)   r*   Ú	fquad_jacó  s    z3test_x_overwritten_user_function.<locals>.fquad_jacc                 S   s   t  t  | ¡¡d S rà  )r%   rµ   r²  r'   r)   r)   r*   Ú
fquad_hessù  s    z4test_x_overwritten_user_function.<locals>.fquad_hess)r  ru  rr  rv  rs  rq  )ru  rr  rv  rs  rq  r°   r/   rt  g-Cëâ6*?rƒ   )	r%   r(  r   r
   r�   r   r(   rC   r²  )
r  r  r  Zmeth_jacZ	meth_hessrI   Úmethr{   rm   r�   r)   r)   r*   Ú test_x_overwritten_user_functioné  s    r  c                   @   s   e Zd Zdd„ ZdS )ÚTestGlobalOptimizationc                 C   sº   dd„ }t j|dd�t  |dg¡t  |dg¡t  |dg¡t  |dg¡g}|D ]h}t|t jƒs`J ‚t|dƒsnJ ‚t|dƒs|J ‚t|dƒsŠJ ‚t|d	ƒs˜J ‚t|d
ƒs¦J ‚t|dƒsLJ ‚qLd S )Nc                 S   s   | d S r  r)   r'   r)   r)   r*   rh     s    zDTestGlobalOptimization.test_optimize_result_attributes.<locals>.funcr#   )rI   )rA  r‡   r(   r�   r“  r}   r~   rÊ   )	r
   ZbasinhoppingZdifferential_evolutionZshgoZdual_annealingÚdirectrÝ  r   rñ  )r^   rh   rÞ  r  r)   r)   r*   Útest_optimize_result_attributes  s    üz6TestGlobalOptimization.test_optimize_result_attributesN)rp   rq   rr   r  r)   r)   r)   r*   r    s   r  c                  C   s@   t  tt¡} t| ttƒdd� t  tt¡}t|ttƒdd� d S )NrÛ   rœ   )r
   Zapprox_fprimerH   rx  r   rF   rG   )r«  r  r)   r)   r*   Útest_approx_fprime)  s    r  c                  C   s€   dd„ } t ddgddgd�}tj| dd|d�}t t ddg¡t ddg¡d�}tj| dd|d�}t|j|jƒ t|j|jƒ d S )	Nc                 S   s   | d d | d d d  S r<  r)   r'   r)   r)   r*   rg   8  s    ztest_gh12594.<locals>.frG  r£   rú  r·   rØ   r+  )r   r
   r�   r%   rA   r   r}   r(   )rg   rí   r�   rË   r)   r)   r*   Útest_gh125943  s     r  r
  rq  Úsparse_typec                    sŒ   ‡ fdd„}ddg}t jt|| t|d�}t jt|| ttd�}t|j|jƒ t|j|jƒ |j|jkshJ ‚|j	|j	ksxJ ‚|j
|j
ksˆJ ‚d S )Nc                    s   ˆ t | ƒƒS r8   )r   r'   ©r  r)   r*   Úsparse_rosen_hessM  s    z.test_sparse_hessian.<locals>.sparse_rosen_hessræ  rt  )r
   r�   r   r   r   r   r}   r(   r~   r   Znhev)rz   r  r  rI   Z
res_sparseZ	res_denser)   r  r*   Útest_sparse_hessianD  s    	
ÿ
ÿr  )urs   rl  r  Únumpyr%   Znumpy.testingr   r   r   r   r   r   r   r´   r	   rD   Zscipyr
   Zscipy.optimize._minimizer   r   r   r   r   Zscipy.optimize._linprogr   Zscipy.optimize._rootr   Zscipy.optimize._root_scalarr   Zscipy.optimize._qapr   Z(scipy.optimize._differentiable_functionsr   r   Zscipy.optimize._optimizer   r   r   Zscipy.optimizer   r   r   Zscipy.sparser   r   r   r   r    r!   rK   rL   rt   r*  r0  r2  r6  r;  r=  r?  rE  rQ  rU  rV  rX  rY  rZ  r[  r  r   r1  r2  r>  rk  rr  rs  rŒ  rœ  r�  r   r¡  rx  rF   rG   rH   ry  rz  r¬  r­  rµ  r¶  r·  r¹  rº  r×  rØ  rá  râ  Zfixturerä  ré  rê  rë  rì  rÿ  r  Zxfail_on_32bitr  r
  r  r  r  r  r  r  r  r  r)   r)   r)   r*   Ú<module>   sØ   $ 50    

L*      	þ

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