U
    Q»{jjq  ã                   @   s¨  d dl Z d dlZd dlmZ d dlZd dlmZmZ d dlm	Z	m
Z
mZ d dlmZ G dd„ dƒZdd	„ ZG d
d„ deƒZeddgd d gd�Zeddgd d gd�Zeddgd d gd�ZG dd„ deƒZedgdgde dgdgdgdgdgdgdgdgdgdgg
¡e dddd d!d"d#d$d%d&g
¡d'�Zed(gdgdge dgg¡e dg¡d'�ZG d)d*„ d*eƒZed+d,gd-d.gd/d0�ZG d1d2„ d2eƒZed3gd4 d5d6d7d8d9d:d;gd<d0�ZG d=d>„ d>eƒZed?d?gd@gdAdBgdC�ZG dDdE„ dEeƒZdFZe e!dGgdF dHgdF ƒƒZ"ee"dIgdJdJdKdJdJdLgdC�Z#G dMdN„ dNeƒZ$e$d3d3gdOgdPdPgdC�Z%G dQdR„ dReƒZ&e&d+dSgdddC�Z'dbdXdY„Z(G dZd[„ d[ƒZ)G d\d]„ d]ƒZ*G d^d_„ d_ƒZ+G d`da„ daƒZ,dS )cé    N)Úassert_allclose)ÚraisesÚwarns)ÚshgoÚBoundsÚminimize)ÚSHGOc                   @   s   e Zd Zddd„ZdS )ÚStructTestFunctionNc                 C   s"   || _ || _|| _|| _|| _d S ©N©ÚboundsÚ
expected_xÚexpected_funÚexpected_xlÚexpected_funl)Úselfr   r   r   r   r   © r   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/scipy/optimize/tests/test__shgo.pyÚ__init__   s
    zStructTestFunction.__init__)NNN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r	   
   s       ÿr	   c                 C   sX   g }| d k	rPt | ƒtk	r,t | ƒtk	r,| f} n | D ]} | d| dœ¡ q0t|ƒ}nd }|S )NZineq)ÚtypeÚfun)r   ÚtupleÚlistÚappend)ÚgÚconsr   r   r   Úwrap_constraints   s    ÿ

r   c                   @   s$   e Zd Zdd„ Zdd„ ZeeƒZdS )ÚStructTest1c                 C   s   |d d |d d  S ©Nr   é   é   r   ©r   Úxr   r   r   Úf%   s    zStructTest1.fc                 C   s   t j| dd�d  S )Nr   ©Zaxisg      @©ÚnumpyÚsum©r%   r   r   r   r   (   s    zStructTest1.gN©r   r   r   r&   r   r   r   r   r   r   r   r    $   s   r    )éÿÿÿÿé   )r   r   )r   r#   )NNc                   @   s(   e Zd ZdZdd„ Zdd„ ZeeƒZdS )ÚStructTest2zN
    Scalar function with several minima to test all minimizer retrievals
    c                 C   s   |d t  |¡ S )Né   )r)   Úsinr$   r   r   r   r&   ;   s    zStructTest2.fc                 C   s   dt j| dd� S )Né:   r   r'   r(   r+   r   r   r   r   >   s    zStructTest2.gN©r   r   r   Ú__doc__r&   r   r   r   r   r   r   r   r/   6   s   r/   )r   é<   gâ¡½4$’ø?gÕ0ðš_r<Àg±ç ûG‚K@gô½
]<@gøI{¤½_H@gÌi<&,@g–±»å>E@gºqÅ¤CQ4@g‹8øž$B@gÜo.n:@g^5	½‚Ã>@g³Ê¾sÿ8Àg^ÑÖV&+6Àg+Ô?-«¸2Àg+ä!¾ÙÉ/ÀgÛN|1ç(Àgc’ä=C#Àg¾^Ì\ÕÀg´ÄN¡ˆÀgêíè‡ªÝ¿r   )r   g      @c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ ZeefZeeƒZ	dS )	ÚStructTest3a�  
    Hock and Schittkowski 18 problem (HS18). Hoch and Schittkowski (1981)
    http://www.ai7.uni-bayreuth.de/test_problem_coll.pdf
    Minimize: f = 0.01 * (x_1)**2 + (x_2)**2

    Subject to: x_1 * x_2 - 25.0 >= 0,
                (x_1)**2 + (x_2)**2 - 25.0 >= 0,
                2 <= x_1 <= 50,
                0 <= x_2 <= 50.

    Approx. Answer:
        f([(250)**0.5 , (2.5)**0.5]) = 5.0


    c                 C   s   d|d d  |d d  S )Ng{®Gáz„?r   r"   r#   r   r$   r   r   r   r&   s   s    zStructTest3.fc                 C   s   | d | d  d S )Nr   r#   ç      9@r   r+   r   r   r   Úg1v   s    zStructTest3.g1c                 C   s   | d d | d d  d S )Nr   r"   r#   r7   r   r+   r   r   r   Úg2y   s    zStructTest3.g2N)
r   r   r   r4   r&   r8   r9   r   r   r   r   r   r   r   r6   b   s   r6   )r"   é2   )r   r:   g'ò�InŸ/@gS[Ú:XLù?ç      @)r   r   r   c                   @   sL   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZeeeefZ	e
e	ƒZdS )ÚStructTest4zÑ
    Hock and Schittkowski 11 problem (HS11). Hoch and Schittkowski (1981)

    NOTE: Did not find in original reference to HS collection, refer to
          Henderson (2015) problem 7 instead. 02.03.2016
    c                 C   sœ   |d d d d|d d d   |d d  d|d d	 d   d|d d
   d|d d   |d
 d  d|d  |d
   d|d   d|d
   S )Nr   é
   r"   é   r#   é   é   é   é   r.   é   é   r   r$   r   r   r   r&   �   s&    .ÿÿÿÿÿÿý
ý
ýzStructTest4.fc                 C   sJ   d| d d  d| d d   | d  d| d d   d| d   d  S )Nr"   r   rA   r#   r@   r>   é   r   r+   r   r   r   r8   –   s
    6
ÿÿzStructTest4.g1c                 C   s>   d| d  d| d   d| d d   | d  | d  d  S )	NrC   r   rA   r#   r=   r"   r@   g      q@r   r+   r   r   r   r9   š   s    zStructTest4.g2c                 C   s:   d| d  | d d  d| d d   d| d   d  S )	Né   r   r#   r"   r.   r>   rD   éÄ   r   r+   r   r   r   Úg3�   s    zStructTest4.g3c                 C   sZ   d| d d  | d d  d| d  | d   d| d d   d| d   d| d    S )	Nr@   r   r"   r#   rA   r>   rB   r.   r   r+   r   r   r   Úg4    s
    >
ÿ
ÿzStructTest4.g4N©r   r   r   r4   r&   r8   r9   rH   rI   r   r   r   r   r   r   r   r<   ‡   s   r<   )iöÿÿÿr=   rC   g¹ââ¨Ü¤@g$H¥ØÑ8ÿ?g„ßÍ	�Þ¿g0eà€v@gnÞ8)Ìûã¿g k_@/œð?g0g¶+ô�ù?gÙP{[
E…@c                   @   s    e Zd Zdd„ ZdZeeƒZdS )ÚStructTest5c              
   C   sb   |d d  t  t  t|d d |d d  ƒ¡¡ |d t  t  t|d |d d  ƒ¡¡  S )Nr#   g     €G@r   ç       @)r)   r1   ÚsqrtÚabsr$   r   r   r   r&   ±   s
    &ÿ*þzStructTest5.fNr,   r   r   r   r   rK   °   s   rK   )i þÿÿi   gŽÎÆ ý�Àg      €@gøž™yµCy@)r   r   r   c                   @   s$   e Zd ZdZdd„ ZdZeeƒZdS )ÚStructTestLJzV
    LennardJones objective function. Used to test symmetry constraints settings.
    c                 G   sÖ   |d | _ t| j d ƒ}d}t|d ƒD ]¨}t|d |ƒD ]”}d| }d| }|| ||  }	||d  ||d   }
||d  ||d   }|	|	 |
|
  ||  }|| | }|dkr:|d| d | 7 }q:q(|S )Nr   rA   ç        r#   r"   ç      ð?rL   )ÚNÚintÚrange)r   r%   ÚargsÚkÚsÚiÚjÚaÚbZxdZydÚzdZedZudr   r   r   r&   Å   s    
zStructTestLJ.fNr3   r   r   r   r   rO   À   s   rO   r.   g      Àg      @ç      ð¿g/ÛUrý]¾g‚žö) Àg=íS ø¿c                   @   s    e Zd Zdd„ ZdZeeƒZdS )ÚStructTestTablec                 C   s$   |d dkr|d dkrdS dS d S )Nr   ç      @r#   r:   éd   r   r$   r   r   r   r&   ë   s    zStructTestTable.fNr,   r   r   r   r   r^   ê   s   r^   r:   r_   c                   @   sL   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZeeeefZ	e
e	ƒZdS )ÚStructTestInfeasiblez0
    Test function with no feasible domain.
    c                 G   s   |d d |d d  S r!   r   )r   r%   rU   r   r   r   r&   ÿ   s    zStructTestInfeasible.fc                 C   s   | d | d  d S ©Nr   r#   r   r+   r   r   r   r8     s    zStructTestInfeasible.g1c                 C   s   | d | d  d  S rb   r   r+   r   r   r   r9     s    zStructTestInfeasible.g2c                 C   s   | d  | d  d S rb   r   r+   r   r   r   rH     s    zStructTestInfeasible.g3c                 C   s   | d  | d  d  S rb   r   r+   r   r   r   rI     s    zStructTestInfeasible.g4NrJ   r   r   r   r   ra   ú   s   ra   )r-   r#   r   çñhãˆµøä>é€   Úsobolc	           
      C   s²   t | j| j|| j||||||d�
}	t |	¡ | jd k	rNtjj	|	j
| j||d� | jd k	rntjj	|	j| j|d� | jd k	rŽtjj	|	j| j|d� | jd k	r®tjj	|	j| j|d� d S )N)rU   ÚconstraintsÚnÚitersÚcallbackÚminimizer_kwargsÚoptionsÚsampling_method©ZrtolÚatol©rn   )r   r&   r   r   ÚloggingÚinfor   r)   Útestingr   r%   r   r   r   Zxlr   Zfunl)
ÚtestrU   Ú	test_atolrg   rh   ri   rj   rk   rl   Úresr   r   r   Úrun_test  s<       ý

þ

þ

þ

þrv   c                   @   s`   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	e
jjdd„ ƒZdd„ Zdd„ ZdS )ÚTestShgoSobolTestFunctionsz8
    Global optimization tests with Sobol sampling:
    c                 C   s   t tƒ dS )úVMultivariate test function 1:
        x[0]**2 + x[1]**2 with bounds=[(-1, 6), (-1, 6)]N©rv   Útest1_1©r   r   r   r   Útest_f1_1_sobol@  s    z*TestShgoSobolTestFunctions.test_f1_1_sobolc                 C   s   t tƒ dS )zUMultivariate test function 1:
         x[0]**2 + x[1]**2 with bounds=[(0, 1), (0, 1)]N©rv   Útest1_2r{   r   r   r   Útest_f1_2_sobolE  s    z*TestShgoSobolTestFunctions.test_f1_2_sobolc                 C   s   t tƒ dS )z_Multivariate test function 1:
        x[0]**2 + x[1]**2 with bounds=[(None, None),(None, None)]N©rv   Útest1_3r{   r   r   r   Útest_f1_3_sobolJ  s    z*TestShgoSobolTestFunctions.test_f1_3_sobolc                 C   s   t tƒ dS )úRUnivariate test function on
        f(x) = (x - 30) * sin(x) with bounds=[(0, 60)]N©rv   Útest2_1r{   r   r   r   Útest_f2_1_sobolO  s    z*TestShgoSobolTestFunctions.test_f2_1_sobolc                 C   s   t tƒ dS )úNUnivariate test function on
        f(x) = (x - 30) * sin(x) bounds=[(0, 4.5)]N©rv   Útest2_2r{   r   r   r   Útest_f2_2_sobolT  s    z*TestShgoSobolTestFunctions.test_f2_2_sobolc                 C   s   t tƒ dS )ú%NLP: Hock and Schittkowski problem 18N©rv   Útest3_1r{   r   r   r   Útest_f3_sobolY  s    z(TestShgoSobolTestFunctions.test_f3_sobolc                 C   s   ddi}t td|d� dS )ú?NLP: (High-dimensional) Hock and Schittkowski 11 problem (HS11)Úinfty_constraintsFi   ©rg   rk   N©rv   Útest4_1©r   rk   r   r   r   Útest_f4_sobol]  s    z(TestShgoSobolTestFunctions.test_f4_sobolc                 C   s   t tdd� dS )úNLP: Eggholder, multimodalé@   )rg   N©rv   Útest5_1r{   r   r   r   Útest_f5_1_sobole  s    z*TestShgoSobolTestFunctions.test_f5_1_sobolc                 C   s   t tddd� dS )r–   rd   r>   )rg   rh   Nr˜   r{   r   r   r   Útest_f5_2_soboli  s    z*TestShgoSobolTestFunctions.test_f5_2_sobolN)r   r   r   r4   r|   r   r‚   r†   rŠ   rŽ   ÚpytestÚmarkÚslowr•   rš   r›   r   r   r   r   rw   :  s   
rw   c                   @   sX   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	e
jjdd„ ƒZdd„ ZdS )ÚTestShgoSimplicialTestFunctionsz=
    Global optimization tests with Simplicial sampling:
    c                 C   s   t tddd� dS )rx   r#   Ú
simplicial©rg   rl   Nry   r{   r   r   r   Útest_f1_1_simplicialx  s    z4TestShgoSimplicialTestFunctions.test_f1_1_simplicialc                 C   s   t tddd� dS )zTMultivariate test function 1:
        x[0]**2 + x[1]**2 with bounds=[(0, 1), (0, 1)]r#   r    r¡   Nr}   r{   r   r   r   Útest_f1_2_simplicial}  s    z4TestShgoSimplicialTestFunctions.test_f1_2_simplicialc                 C   s   t tddd� dS )z_Multivariate test function 1: x[0]**2 + x[1]**2
        with bounds=[(None, None),(None, None)]r#   r    r¡   Nr€   r{   r   r   r   Útest_f1_3_simplicial‚  s    z4TestShgoSimplicialTestFunctions.test_f1_3_simplicialc                 C   s   ddi}t td|dd� dS )rƒ   Úminimize_every_iterFrC   r    )rh   rk   rl   Nr„   r”   r   r   r   Útest_f2_1_simplicial‡  s    ÿz4TestShgoSimplicialTestFunctions.test_f2_1_simplicialc                 C   s   t tddd� dS )r‡   r#   r    r¡   Nrˆ   r{   r   r   r   Útest_f2_2_simplicialŽ  s    z4TestShgoSimplicialTestFunctions.test_f2_2_simplicialc                 C   s   t tddd� dS )r‹   r#   r    r¡   NrŒ   r{   r   r   r   Útest_f3_simplicial“  s    z2TestShgoSimplicialTestFunctions.test_f3_simplicialc                 C   s   t tddd� dS )r�   r#   r    r¡   Nr’   r{   r   r   r   Útest_f4_simplicial—  s    z2TestShgoSimplicialTestFunctions.test_f4_simplicialc                 C   s&   dddœ}d}t t|d|ddd� dS )z&LJ: Symmetry-constrained test functionT)ZsymmetryÚdisp)r.   Nr@   r    )rU   rg   rk   rh   rl   )rv   ÚtestLJ)r   rk   rU   r   r   r   Útest_lj_symmetryœ  s    ÿ þz0TestShgoSimplicialTestFunctions.test_lj_symmetryN)r   r   r   r4   r¢   r£   r¤   r¦   r§   r¨   rœ   r�   rž   r©   r¬   r   r   r   r   rŸ   s  s   
rŸ   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
jjdd„ ƒZe
jjdd„ ƒZe
jj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/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Z d7d8„ Z!d9S ):ÚTestShgoArgumentsc                 C   s   t tdddd� dS )z>Iterative simplicial sampling on TestFunction 1 (multivariate)Nr"   r    ©rg   rh   rl   r}   r{   r   r   r   Útest_1_1_simpl_iter¨  s    z%TestShgoArguments.test_1_1_simpl_iterc                 C   s   ddi}t tdd|dd� dS )z3Iterative simplicial on TestFunction 2 (univariate)r¥   FNrC   r    ©rg   rh   rk   rl   r„   r”   r   r   r   Útest_1_2_simpl_iter¬  s    
ÿz%TestShgoArguments.test_1_2_simpl_iterc                 C   s   t tdddd� dS )z9Iterative Sobol sampling on TestFunction 1 (multivariate)Nr#   re   r®   r}   r{   r   r   r   Útest_2_1_sobol_iter²  s    z%TestShgoArguments.test_2_1_sobol_iterc                 C   sL   t tjtjtjdddd�}tjj|jtj	ddd� tjj|j
tjdd� dS )z7Iterative Sobol sampling on TestFunction 2 (univariate)Nr#   re   )rf   rg   rh   rl   rc   rm   ro   )r   r…   r&   r   r   r)   rr   r   r%   r   r   r   ©r   ru   r   r   r   Útest_2_2_sobol_iter¶  s      ÿÿz%TestShgoArguments.test_2_2_sobol_iterc              	   C   sR   dd„ }t tfD ]<}t|j|jdd|ddid� t|j|jdd|ddid� qd	S )
zCIterative sampling on TestFunction 1 and 2  (multi- and univariate)c                 S   s   t dƒ d S ©Nz Local minimization callback test©Úprintr+   r   r   r   Úcallback_funcÂ  s    zATestShgoArguments.test_3_1_disp_simplicial.<locals>.callback_funcr#   r    rª   T©rh   rl   ri   rk   ©rg   rl   ri   rk   N©rz   r…   r   r&   r   ©r   r¸   rs   r   r   r   Útest_3_1_disp_simplicial¿  s     þ ÿz*TestShgoArguments.test_3_1_disp_simplicialc              	   C   sR   dd„ }t tfD ]<}t|j|jdd|ddid� t|j|jdd|ddid	� qd
S )zBIterative sampling on TestFunction 1 and 2 (multi- and univariate)c                 S   s   t dƒ d S rµ   r¶   r+   r   r   r   r¸   Ï  s    z<TestShgoArguments.test_3_2_disp_sobol.<locals>.callback_funcr#   re   rª   Tr¹   r    rº   Nr»   r¼   r   r   r   Útest_3_2_disp_sobolÌ  s     ÿ ÿz%TestShgoArguments.test_3_2_disp_sobolc                 C   sF   t dd„ dgdd�}t dd„ dgd�}t|j|jƒ t|j|jƒ d S )Nc                 S   s   | | | S r
   r   )r%   ÚyÚzr   r   r   Ú<lambda>Û  ó    z5TestShgoArguments.test_args_gh14589.<locals>.<lambda>)r   rA   )r#   r"   )Úfuncr   rU   c                 S   s   d|  d S )Nr"   r#   r   r+   r   r   r   rÁ   Ü  rÂ   )rÃ   r   )r   r   r   r%   )r   ru   Úrefr   r   r   Útest_args_gh14589Ù  s    z#TestShgoArguments.test_args_gh14589c                 C   s$   t jdddœ}tt dd|dd� dS )z,Test known function minima stopping criteriaç�íµ ÷Æ°>T)Úf_minÚf_tolr¥   Nrc   r    ©rg   rt   rk   rl   ©r“   r   rv   r”   r   r   r   Útest_4_1_known_f_minà  s    þ
ÿz&TestShgoArguments.test_4_1_known_f_minc                 C   s&   t jddddœ}tt dd|dd� dS )	ú*Test Global mode limiting local evalutionsrÆ   Tr#   )rÇ   rÈ   r¥   Ú
local_iterNrc   r    rÉ   rÊ   r”   r   r   r   Útest_4_2_known_f_minë  s    û
ÿz&TestShgoArguments.test_4_2_known_f_minc                 C   s(   t jdddddœ}tt dd|dd	� d
S )rÌ   rÆ   Tr#   F©rÇ   rÈ   r¥   rÍ   r�   i   rc   re   rÉ   NrÊ   r”   r   r   r   Útest_4_3_known_f_minø  s    ú
ÿz&TestShgoArguments.test_4_3_known_f_minc              	   C   sJ   t jdddddœ}tt jt jt jdd|dd�}tjj|j	t j
d	d	d
� dS )z<Test Global mode limiting local evalutions for 1-D functionsrÆ   Tr#   FrÏ   Nre   ©rf   rg   rh   rk   rl   rc   rm   )r…   r   r   r&   r   r   r)   rr   r   r%   r   ©r   rk   ru   r   r   r   Útest_4_4_known_f_min  s    ú  þÿz&TestShgoArguments.test_4_4_known_f_minc                 C   s0   t tjtjtjd�}tjj|jtj	ddd� dS )z;Test Default simplicial sampling settings on TestFunction 1©rf   rc   rm   N©
r   rz   r&   r   r   r)   rr   r   r%   r   r³   r   r   r   Útest_5_1_simplicial_argless  s    ÿz-TestShgoArguments.test_5_1_simplicial_arglessc                 C   s2   t tjtjtjdd�}tjj|jtj	ddd� dS )z6Test Default sobol sampling settings on TestFunction 1re   )rf   rl   rc   rm   NrÕ   r³   r   r   r   Útest_5_2_sobol_argless  s    ÿÿz(TestShgoArguments.test_5_2_sobol_arglessc                 C   sR   ddi}t tjtjtj|dd�}tjj|jtj	ddd� tjj|j
tjdd� dS )	ú:Test that maximum iteration option works on TestFunction 3Zmax_iterr"   r    ©rf   rk   rl   rc   rm   ro   N©r   r�   r&   r   r   r)   rr   r   r%   r   r   r   rÒ   r   r   r   Útest_6_1_simplicial_max_iter#  s     ÿÿz.TestShgoArguments.test_6_1_simplicial_max_iterc                 C   sR   ddi}t tjtjtj|dd�}tjj|jtj	ddd� tjj|j
tjdd� dS )	rØ   Zmin_iterr"   r    rÙ   rc   rm   ro   NrÚ   rÒ   r   r   r   Útest_6_2_simplicial_min_iter,  s     ÿÿz.TestShgoArguments.test_6_2_simplicial_min_iterc                 C   sB   dD ]8}|t jdœ}td |¡ƒ tdƒ tt dd|dd� qd	S )
z@Test the minimizer_kwargs arguments for solvers with constraints)ZCOBYLAZSLSQP)Úmethodrf   úSolver = {}úd====================================================================================================rd   çü©ñÒMbP?re   ©rg   rt   rj   rl   N)r�   r   r·   Úformatrv   )r   Úsolverrj   r   r   r   Útest_7_1_minkwargs5  s    ÿ ÿz$TestShgoArguments.test_7_1_minkwargsc                 C   s0   ddi}ddi}t tjtjtjd ||d� dS )z'Test the minimizer_kwargs default initsZftolrc   rª   Tr   )rf   rj   rk   N©r   r�   r&   r   r   )r   rj   rk   r   r   r   Útest_7_2_minkwargsB  s     ÿz$TestShgoArguments.test_7_2_minkwargsc                 C   sV   dD ]L}dd„ }dd„ }|||dœ}t  d |¡¡ t  d¡ ttd	d
|dd� qdS )z?Test minimizer_kwargs arguments for solvers without constraints)zNelder-MeadZPowellZCGZBFGSz	Newton-CGzL-BFGS-BZTNCZdoglegz	trust-ncgztrust-exactztrust-krylovc                 S   s    t  d| d  d| d  g¡jS )Nr"   r   r#   )r)   ÚarrayÚTr+   r   r   r   ÚjacN  s    z1TestShgoArguments.test_7_3_minkwargs.<locals>.jacc                 S   s   t  ddgddgg¡S )Nr"   r   )r)   rç   r+   r   r   r   ÚhessQ  s    z2TestShgoArguments.test_7_3_minkwargs.<locals>.hess)rÝ   ré   rê   rÞ   rß   rd   rà   re   rá   N)rp   rq   râ   rv   rz   )r   rã   ré   rê   rj   r   r   r   Útest_7_3_minkwargsI  s    þ
 ÿz$TestShgoArguments.test_7_3_minkwargsc                 C   s    dddœ}t td d |dd� d S )Nr#   T)Zminhgrdr¥   r    r°   ry   r”   r   r   r   Útest_8_homology_group_diff\  s    ÿ
ÿz,TestShgoArguments.test_8_homology_group_diffc                 C   s   t tjtjtjd d� dS )ú'Test single function constraint passingr   rÔ   Nrå   r{   r   r   r   Útest_9_cons_gc  s    zTestShgoArguments.test_9_cons_gc                 C   s$   ddi}t tjtjdd|dd� dS )rí   ÚmaxtimeçVçž¯Ò<r#   Nre   r°   )r   rz   r&   r   r”   r   r   r   Útest_10_finite_timeg  s
     ÿz%TestShgoArguments.test_10_finite_timec                 C   s&   dddœ}t tjtjdd|dd� dS ©z*Test to cover the case where f_lowest == 0rð   rP   )rï   rÇ   r#   Nre   r°   ©r   r~   r&   r   r”   r   r   r   Útest_11_f_min_timem  s    ÿ ÿz$TestShgoArguments.test_11_f_min_timec                 C   s&   dddœ}t tjtjdd|dd� dS rò   ró   r”   r   r   r   Útest_12_sobol_inf_const  s    ÿ ÿz(TestShgoArguments.test_12_sobol_inf_consc                 C   s   ddi}t td|d� dS )z6Test limited local iterations for a pseudo-global moderÍ   r@   r—   r‘   Nr˜   r”   r   r   r   Útest_14_local_iter{  s    z$TestShgoArguments.test_14_local_iterc                 C   s   ddi}t tdd|dd� dS )z9Test minimize every iter options and cover function cacher¥   Tr#   rC   re   r°   Nry   r”   r   r   r   Útest_15_min_every_iter€  s    
ÿz(TestShgoArguments.test_15_min_every_iterc                 C   s$   ddi}ddi}t td||d� dS )z:Test disp=True with minimizers that do not support bounds rª   TrÝ   znelder-meadr    )rl   rk   rj   Nr}   )r   rk   rj   r   r   r   Útest_16_disp_bounds_minimizer†  s     ÿz/TestShgoArguments.test_16_disp_bounds_minimizerc                 C   s   dd„ }t td|d� dS )z=Test the functionality to add custom sampling methods to shgoc                 S   s   t jj| |fd�S )N)Úsize)r)   ÚrandomÚuniform)rg   Údr   r   r   Úsample�  s    z9TestShgoArguments.test_17_custom_sampling.<locals>.sampler0   r¡   Nry   )r   rý   r   r   r   Útest_17_custom_sampling�  s    z)TestShgoArguments.test_17_custom_samplingc           	      C   s®   dd„ }dddg}dddg}t t||ƒƒ}t||ƒ}t||ƒ}t||ƒ}|j|jksXt‚|j|jksht‚|j|jksxt‚t 	ddd	g¡}tj
 |j|¡ tj
 |j|j¡ d S )
Nc                 S   s   t  | ¡ ¡ S r
   )r)   Zsquarer*   r+   r   r   r   r&   –  s    z1TestShgoArguments.test_18_bounds_class.<locals>.fg      ÀrQ   g      Àr]   r_   r;   rP   )r   Úzipr   r   ÚnfevÚAssertionErrorÚmessageÚsuccessr)   rç   rr   r   r%   )	r   r&   ZlbZubZ
bounds_oldZ
bounds_newZres_old_boundsZres_new_boundsZx_optr   r   r   Útest_18_bounds_class”  s    





ÿz&TestShgoArguments.test_18_bounds_classN)"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   r­   §  s>   	



		r­   c                   @   sx   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ej ddddg¡dd„ ƒZdS )ÚTestShgoFailuresc                 C   sD   ddi}t tjtjdd|dd�}tj d|j¡ tj d|j¡ dS )z'Test failure on insufficient iterationsÚmaxiterr"   r@   Nre   r°   F)	r   r“   r&   r   r)   rr   Úassert_equalr  r   rÒ   r   r   r   Útest_1_maxiter¬  s     ÿzTestShgoFailures.test_1_maxiterc                 C   s   t tttjtjdd� dS )z$Rejection of unknown sampling methodZ	not_Sobol)rl   N)Úassert_raisesÚ
ValueErrorr   rz   r&   r   r{   r   r   r   Útest_2_samplingµ  s    ÿz TestShgoFailures.test_2_samplingc                 C   sD   dddœ}t tjtjd|dd�}tj d|j¡ tj d|j¡ d	S )
zoCheck that the routine stops when no minimiser is found
           after maximum specified function evaluationsr=   T)Zmaxfevrª   r@   re   ©rg   rk   rl   Fé   N)	r   Ú
test_tabler&   r   r)   rr   r  r  r   rÒ   r   r   r   Útest_3_1_no_min_pool_sobolº  s    ÿÿz+TestShgoFailures.test_3_1_no_min_pool_sobolc                 C   s4   dddœ}t tjtjd|dd�}tj d|j¡ dS )	zoCheck that the routine stops when no minimiser is found
           after maximum specified sampling evaluationsr=   T©Úmaxevrª   rA   r    r  FN)r   r  r&   r   r)   rr   r  r  rÒ   r   r   r   Útest_3_2_no_min_pool_simplicialÅ  s    ÿÿz0TestShgoFailures.test_3_2_no_min_pool_simplicialc                 C   s   ddg}t tttj|ƒ dS )zSpecified bounds ub > lb)r.   rA   ©rA   r>   N©r	  r
  r   rz   r&   ©r   r   r   r   r   Útest_4_1_bound_errÎ  s    z#TestShgoFailures.test_4_1_bound_errc                 C   s   ddg}t tttj|ƒ dS )z)Specified bounds are of the form (lb, ub))rA   r>   r>   r  Nr  r  r   r   r   Útest_4_2_bound_errÓ  s    z#TestShgoFailures.test_4_2_bound_errc                 C   s8   dddœ}t tjtjtjd|dd�}tj d|j¡ dS )zxEnsures the algorithm terminates on infeasible problems
           after maxev is exceeded. Use infty constraints optionr—   Tr  re   ©rf   rg   rk   rl   FN©	r   Útest_infeasibler&   r   r   r)   rr   r  r  rÒ   r   r   r   Útest_5_1_1_infeasible_sobolØ  s    ÿ
  þz,TestShgoFailures.test_5_1_1_infeasible_sobolc                 C   s:   ddddœ}t tjtjtjd|dd�}tj d|j¡ dS )zEnsures the algorithm terminates on infeasible problems
           after maxev is exceeded. Do not use infty constraints optionr—   TF)r  rª   r�   re   r  Nr  rÒ   r   r   r   Útest_5_1_2_infeasible_sobolä  s    þ
  þz,TestShgoFailures.test_5_1_2_infeasible_sobolc                 C   s8   dddœ}t tjtjtjd|dd�}tj d|j¡ dS )z[Ensures the algorithm terminates on infeasible problems
           after maxev is exceeded.iè  Fr  r`   r    r  Nr  rÒ   r   r   r   Útest_5_2_infeasible_simplicialñ  s    ÿ
  þz/TestShgoFailures.test_5_2_infeasible_simplicialc                 C   sJ   t jd dddddœ}t jt jf}t jdd|dd	œ}tttf|ž|Ž dS )
z;Test Global mode limiting local evalutions with f* too highrL   rÆ   Tr#   FrÏ   Nre   rÑ   )r…   r   r&   r   r   r   ÚUserWarningr   )r   rk   rU   Úkwargsr   r   r   Útest_6_1_lower_known_f_miný  s    úüz+TestShgoFailures.test_6_1_lower_known_f_minÚ
derivativeré   rê   Úhesspc                 C   s¢   dd„ }dd„ }dd„ }dd„ }|||d	œ}||| i}d
di}dg}	t ||	||d�}
t|fdg|	dœ||—Ž}|
jszt‚tj |
j|j¡ tj |
j|j¡ dS )zzshgo used to raise an error when passing `options` with 'jac'
        # see gh-12829. check that this is resolved
        c                 S   s$   d| d  | d  d| d   d S )NrA   r   r"   r>   r   r+   r   r   r   Ú	objective  s    z@TestShgoFailures.test_21_2_derivative_options.<locals>.objectivec                 S   s   d| d  d S )Nr.   r   r"   r   r+   r   r   r   Úgradient  s    z?TestShgoFailures.test_21_2_derivative_options.<locals>.gradientc                 S   s   dS ©Nr.   r   r+   r   r   r   rê     s    z;TestShgoFailures.test_21_2_derivative_options.<locals>.hessc                 S   s   d| S r%  r   )r%   Úpr   r   r   r"    s    z<TestShgoFailures.test_21_2_derivative_options.<locals>.hessp)ré   rê   r"  rÝ   ztrust-constr)iœÿÿÿr`   )rj   rk   r   )Zx0r   N)	r   r   r  r  r)   rr   r   r   r%   )r   r!  r#  r$  rê   r"  Zderivative_funcsrk   rj   r   ru   rÄ   r   r   r   Útest_21_2_derivative_options  s"    ÿÿ
z-TestShgoFailures.test_21_2_derivative_optionsN)r   r   r   r  r  r  r  r  r  r  r  r  r   rœ   r�   Zparametrizer'  r   r   r   r   r  «  s   		r  )r   rc   rd   NNNNre   )-rp   r)   Znumpy.testingr   rœ   r   r	  r   Zscipy.optimizer   r   r   Zscipy.optimize._shgor   r	   r   r    rz   r~   r�   r/   rç   r…   r‰   r6   r�   r<   r“   rK   r™   rO   rR   r   rÿ   ZboundsLJr«   r^   r  ra   r  rv   rw   rŸ   r­   r  r   r   r   r   Ú<module>   sÒ   

ÿÿÿ÷    üñ
üþ"
   ÿýþûþþþ       þ
"94  