U
    »mœdjq  ã                   @   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   úX/home/sam/Atlas/atlas_env/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ydZ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 ra   r   r+   r   r   r   r9     s    zStructTestInfeasible.g2c                 C   s   | d  | d  d S ra   r   r+   r   r   r   rH     s    zStructTestInfeasible.g3c                 C   s   | d  | d  d  S ra   r   r+   r   r   r   rI     s    zStructTestInfeasible.g4NrJ   r   r   r   r   r`   ú   s   r`   )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©rm   )r   r&   r   r   ÚloggingÚinfor   r)   Útestingr   r%   r   r   r   Zxlr   Zfunl)
ÚtestrU   Ú	test_atolrf   rg   rh   ri   rj   rk   Úresr   r   r   Úrun_test  s<       ý

þ

þ

þ

þru   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©ru   Ú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©ru   Útest1_2rz   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©ru   Útest1_3rz   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©ru   Útest2_1rz   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©ru   Útest2_2rz   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©ru   Útest3_1rz   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   ©rf   rj   N©ru   Útest4_1©r   rj   r   r   r   Útest_f4_sobol]  s    z(TestShgoSobolTestFunctions.test_f4_sobolc                 C   s   t tdd� dS )úNLP: Eggholder, multimodalé@   )rf   N©ru   Útest5_1rz   r   r   r   Útest_f5_1_sobole  s    z*TestShgoSobolTestFunctions.test_f5_1_sobolc                 C   s   t tddd� dS )r•   rc   r>   )rf   rg   Nr—   rz   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   rv   :  s   
rv   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 )rw   r#   Ú
simplicial©rf   rk   Nrx   rz   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|   rz   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   rz   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Ÿ   )rg   rj   rk   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‡   rz   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‹   rz   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‘   rz   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   rf   rj   rg   rk   )ru   ÚtestLJ)r   rj   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Ÿ   ©rf   rg   rk   r|   rz   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Ÿ   ©rf   rg   rj   rk   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#   rd   r­   r|   rz   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#   rd   )re   rf   rg   rk   rb   rl   rn   )r   r„   r&   r   r   r)   rq   r   r%   r   r   r   ©r   rt   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©rg   rk   rh   rj   ©rf   rk   rh   rj   N©ry   r„   r   r&   r   ©r   r·   rr   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#   rd   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   rt   Ú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¤   Nrb   rŸ   ©rf   rs   rj   rk   ©r’   r   ru   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_iterNrb   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   rb   rd   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Î   Nrd   ©re   rf   rg   rj   rk   rb   rl   )r„   r   r   r&   r   r   r)   rq   r   r%   r   ©r   rj   rt   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©re   rb   rl   N©
r   ry   r&   r   r   r)   rq   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 1rd   )re   rk   rb   rl   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Ÿ   ©re   rj   rk   rb   rl   rn   N©r   rŒ   r&   r   r   r)   rq   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Ø   rb   rl   rn   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)Úmethodre   úSolver = {}úd====================================================================================================rc   çü©ñÒMbP?rd   ©rf   rs   ri   rk   N)rŒ   r   r¶   Úformatru   )r   Úsolverri   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ftolrb   r©   Tr   )re   ri   rj   N©r   rŒ   r&   r   r   )r   ri   rj   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Þ   rc   rß   rd   rà   N)ro   rp   rá   ru   ry   )r   râ   rè   ré   ri   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¯   rx   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ä   rz   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#   Nrd   r¯   )r   ry   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#   Nrd   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   rd   r¯   Nrx   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Ÿ   )rk   rj   ri   Nr|   )r   rj   ri   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)rf   Údr   r   r   Úsample�  s    z9TestShgoArguments.test_17_custom_sampling.<locals>.sampler0   r    Nrx   )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æ   rq   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@   Nrd   r¯   F)	r   r’   r&   r   r)   rq   Ú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)rk   N)Úassert_raisesÚ
ValueErrorr   ry   r&   r   rz   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@   rd   ©rf   rj   rk   Fé   N)	r   Ú
test_tabler&   r   r)   rq   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)   rq   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   ry   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  rd   ©re   rf   rj   rk   FN©	r   Útest_infeasibler&   r   r   r)   rq   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�   rd   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Î   Nrd   rÐ   )r„   r   r&   r   r   r   ÚUserWarningr   )r   rj   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_   )ri   rj   r   )Zx0r   N)	r   r   r  r   r)   rq   r   r   r%   )r   r   r"  r#  ré   r!  Zderivative_funcsrj   ri   r   rt   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   rb   rc   NNNNrd   )-ro   r)   Znumpy.testingr   r›   r   r  r   Zscipy.optimizer   r   r   Zscipy.optimize._shgor   r	   r   r    ry   r}   r€   r/   ræ   r„   rˆ   r6   rŒ   r<   r’   rK   r˜   rO   rR   r   rþ   ZboundsLJrª   r]   r  r`   r  ru   rv   rž   r¬   r  r   r   r   r   Ú<module>   sÒ   

ÿÿÿ÷    üñ
üþ"
   ÿýþûþþþ       þ
"94  