a
    ‡ù»jê¡  ã                   @   s>  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
Z
d dl
mZmZ d dlmZmZmZmZmZmZmZmZ d dl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 "g d ¢¡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)d*�Z&G d+d,„ d,eƒZ'e'd-gd. g d/¢d0d*�Z(G d1d2„ d2eƒZ)e)d3d3gd4gd5d6gd7�Z*G d8d9„ d9eƒZ+d:Z,e-e.d;gd: d<gd: ƒƒZ/e+e/d=gdd7�Z0G d>d?„ d?eƒZ1e1d@gdA dBe 2dA¡dC d7�Z3G dDdE„ dEeƒZ4e4d-d-gdFgdGdGgd7�Z5G dHdI„ dIeƒZ6e6d%dJgddd7�Z7e
j8 9dK¡dfdQdR„ƒZ:G dSdT„ dTƒZ;G dUdV„ dVƒZ<G dWdX„ dXƒZ=G dYdZ„ dZƒZ>G d[d\„ d\ƒZ?d]d^„ Z@e
j8 Ad_¡d`da„ ƒZBdbdc„ ZCddde„ ZDdS )gé    N)ÚPool)Úassert_allcloseÚIS_PYPY)ÚraisesÚwarns)ÚshgoÚBoundsÚminimize_scalarÚminimizeÚrosenÚ	rosen_derÚ
rosen_hessÚNonlinearConstraint)Únew_constraint_to_old)Ú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   úEE:\soccer\ml_env\Lib\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   sN   g }| d urFt | ttfƒs"| f} n | D ]} | d| dœ¡ q&t|ƒ}nd }|S )NÚineq©ÚtypeÚfun)Ú
isinstanceÚ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©r0   r   r   r   r(   /   s    zStructTest1.gN©r   r   r   r1   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 minimiser retrievals
    c                 C   s   |d t  |¡ S )Né   )r4   Úsinr/   r   r   r   r1   B   s    zStructTest2.fc                 C   s   dt j| dd� S )Né:   r   r2   r3   r6   r   r   r   r(   E   s    zStructTest2.gN©r   r   r   Ú__doc__r1   r(   r*   r)   r   r   r   r   r<   =   s   r<   )r   é<   gâ¡½4$’ø?çÕ0ðš_r<Àg±ç ûG‚K@gô½
]<@gøI{¤½_H@gÌi<&,@g–±»å>E@gºqÅ¤CQ4@g‹8øž$B@gÜo.n:@g^5	½‚Ã>@)
rC   g³Ê¾sÿ8Àg^ÑÖV&+6Àg+Ô?-«¸2Àg+ä!¾ÙÉ/ÀgÛN|1ç(Àgc’ä=C#Àg¾^Ì\ÕÀg´ÄN¡ˆÀgêíè‡ªÝ¿r   )r   g      @c                   @   sD   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zeed
e	j
ƒZef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   r1   |   s    zStructTest3.fc                 C   s   | d | d  d S )Nr   r.   ç      9@r   r6   r   r   r   Úg1   s    zStructTest3.g1c                 C   s   | d d | d d  d S )Nr   r-   r.   rE   r   r6   r   r   r   Úg2‚   s    zStructTest3.g2c                 C   s0   | d | d  d | d d | d d  d fS )Nr   r.   rE   r-   r   r6   r   r   r   r(   ˆ   s    zStructTest3.gr   N)r   r   r   rA   r1   rF   rG   r(   r   ÚnpÚinfZ_StructTest3__nlcr)   r   r   r   r   rD   j   s   rD   )r-   é2   )r   rJ   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.   é   é   é   é   r9   é   é   r   r/   r   r   r   r1   �   s&    .ÿÿÿÿÿÿý
ý
ýzStructTest4.fc                 C   sJ   d| d d  d| d d   | d  d| d d   d| d   d  S )Nr-   r   rQ   r.   rP   rN   é   r   r6   r   r   r   rF   ¤   s
    6
ÿÿzStructTest4.g1c                 C   s>   d| d  d| d   d| d d   | d  | d  d  S )	NrS   r   rQ   r.   rM   r-   rP   g      q@r   r6   r   r   r   rG   ¨   s    zStructTest4.g2c                 C   s:   d| d  | d d  d| d d   d| d   d  S )	Né   r   r.   r-   r9   rN   rT   éÄ   r   r6   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 )	NrP   r   r-   r.   rQ   rN   rR   r9   r   r6   r   r   r   Úg4®   s
    >
ÿ
ÿzStructTest4.g4N©r   r   r   rA   r1   rF   rG   rX   rY   r(   r*   r)   r   r   r   r   rL   •   s   rL   )iöÿÿÿrM   rS   )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   ç       @©r4   r>   ÚsqrtÚabsr/   r   r   r   r1   ¿   s
    &ÿ*þzStructTest5.fNr7   r   r   r   r   r[   ¾   s   r[   )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 )ÚStructTestLJzZ
    LennardJones objective function. Used to test symmetry constraints
    settings.
    c                 G   sä   t d|› �ƒ |d | _t| jd ƒ}d}t|d ƒD ]¨}t|d |ƒD ]”}d| }d| }|| ||  }	||d  ||d   }
||d  ||d   }|	|	 |
|
  ||  }|| | }|dkrH|d| d | 7 }qHq6|S )	Nzx = r   rQ   ç        r.   r-   ç      ð?r]   )ÚprintÚNÚintÚrange)r   r0   ÚargsÚkÚsÚiÚjÚaÚbZxdZydZzdZedZudr   r   r   r1   Ô   s     
zStructTestLJ.fNr@   r   r   r   r   ra   Î   s   ra   r9   g      Àç      @ç      ð¿c                   @   s    e Zd Zdd„ ZdZeeƒZdS )ÚStructTestSc                 C   s@   |d d d |d d d  |d d d  |d d d  S )Nr   ç      à?r-   r.   rQ   r   r/   r   r   r   r1   ü   s
    ÿÿzStructTestS.fNr7   r   r   r   r   rq   û   s   rq   )r   r]   rP   rb   rr   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.   rJ   éd   r   r/   r   r   r   r1     s    zStructTestTable.fNr7   r   r   r   r   rs   
  s   rs   rJ   rt   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   r0   rh   r   r   r   r1     s    zStructTestInfeasible.fc                 C   s   | d | d  d S ©Nr   r.   r   r6   r   r   r   rF   "  s    zStructTestInfeasible.g1c                 C   s   | d | d  d  S rw   r   r6   r   r   r   rG   %  s    zStructTestInfeasible.g2c                 C   s   | d  | d  d S rw   r   r6   r   r   r   rX   (  s    zStructTestInfeasible.g3c                 C   s   | d  | d  d  S rw   r   r6   r   r   r   rY   +  s    zStructTestInfeasible.g4NrZ   r   r   r   r   rv     s   rv   )r8   r.   ú
Not a testr   çñhãˆµøä>ru   Úsobolr.   c
                 C   sÈ   t | j| j|| j|||||||	d�}
td|
› �ƒ t d|
› �¡ | jd urdtj	j
|
j| j||d� | jd ur„tj	j
|
j| j|d� | jd ur¤tj	j
|
j| j|d� | jd urÄtj	j
|
j| j|d� d S )N)	rh   ÚconstraintsÚnÚitersÚcallbackÚminimizer_kwargsÚoptionsÚsampling_methodÚworkerszres = ©ÚrtolÚatol©r…   )r   r1   r   r)   rd   ÚloggingÚinfor   r4   Útestingr   r0   r   r#   r   Zxlr   Zfunl)Útestrh   Ú	test_atolr|   r}   r~   r   r€   r�   r‚   Úresr   r   r   Úrun_test8  s8    ý
þ

þ

þ

þr�   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 optimisation 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©r�   Útest1_1©r   r   r   r   Útest_f1_1_sobola  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©r�   Útest1_2r’   r   r   r   Útest_f1_2_sobolf  s    z*TestShgoSobolTestFunctions.test_f1_2_sobolc                 C   s   ddi}t t|d� dS )z_Multivariate test function 1:
        x[0]**2 + x[1]**2 with bounds=[(None, None),(None, None)]ÚdispT)r€   N©r�   Útest1_3©r   r€   r   r   r   Útest_f1_3_sobolk  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©r�   Útest2_1r’   r   r   r   Útest_f2_1_sobolq  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©r�   Útest2_2r’   r   r   r   Útest_f2_2_sobolv  s    z*TestShgoSobolTestFunctions.test_f2_2_sobolc                 C   s   t tƒ dS )ú%NLP: Hock and Schittkowski problem 18N©r�   Útest3_1r’   r   r   r   Útest_f3_sobol{  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¼  ©r|   r€   N©r�   Útest4_1rš   r   r   r   Útest_f4_sobol  s    z(TestShgoSobolTestFunctions.test_f4_sobolc                 C   s   t tdd� dS )úNLP: Eggholder, multimodalrB   )r|   N©r�   Útest5_1r’   r   r   r   Útest_f5_1_sobol†  s    z*TestShgoSobolTestFunctions.test_f5_1_sobolc                 C   s   t tddd� dS )r®   rB   rN   )r|   r}   Nr¯   r’   r   r   r   Útest_f5_2_sobol‹  s    z*TestShgoSobolTestFunctions.test_f5_2_sobolN)r   r   r   rA   r“   r–   r›   rŸ   r£   r§   ÚpytestÚmarkÚslowr­   r±   r²   r   r   r   r   rŽ   [  s   
rŽ   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d„ Zdd„ Ze
j d¡dd„ ƒZe
j d¡dd„ ƒZdS )ÚTestShgoSimplicialTestFunctionsz=
    Global optimisation tests with Simplicial sampling:
    c                 C   s   t tddd� dS )r�   r.   Ú
simplicial©r|   r�   Nr�   r’   r   r   r   Útest_f1_1_simplicialš  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)]rN   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� dS )rœ   Úminimize_every_iterFéÈ   rS   r·   ©r|   r}   r€   r�   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symmetryr—   ©r9   é,  r.   r·   ©rh   r|   r€   r}   r�   N©r�   ÚtestLJ©r   r€   rh   r   r   r   Útest_lj_symmetry_old¾  s    ÿþz4TestShgoSimplicialTestFunctions.test_lj_symmetry_oldc                 C   s,   dgd ddœ}d}t t|d|ddd	� d
S )z&LJ: Symmetry constrained test functionr   r9   TrÃ   rÄ   rÅ   r.   r·   rÆ   NrÇ   rÉ   r   r   r   Útest_f5_1_lj_symmetryÇ  s    ÿþz5TestShgoSimplicialTestFunctions.test_f5_1_lj_symmetryc                 C   s$   ddgddœ}t td|ddd� dS )	z"Symmetry constrained test functionr   TrÃ   r½   r.   r·   ©r|   r€   r}   r�   Nr�   rš   r   r   r   Útest_f5_2_cons_symmetryÑ  s    ÿþz7TestShgoSimplicialTestFunctions.test_f5_2_cons_symmetryc                 C   s$   g d¢ddœ}t td|ddd� dS )	z)Assymmetrically constrained test function)r   r   r   rQ   TrÃ   i'  r.   r·   rÌ   N)r�   Útest_srš   r   r   r   Útest_f5_3_cons_symmetryÚ  s    ÿýz7TestShgoSimplicialTestFunctions.test_f5_3_cons_symmetryrx   c                    sV   d‰ d‡ fdd„dœ}t tjddg |d�}|js6J ‚t|jd	d
d� t|jdƒ dS )zOReturn a minimum on a perfectly symmetric problem, based on
            gh10429rr   Úeqc                    s   t  | ¡ˆ  S r   )r4   Úmeanr6   ©Zavgr   r   Ú<lambda>é  ó    zFTestShgoSimplicialTestFunctions.test_f0_min_variance.<locals>.<lambda>r!   r9   r:   ©r   r{   r   çVçž¯Ò<r†   N)r   r4   ÚvarÚsuccessr   r#   r0   )r   r)   rŒ   r   rÒ   r   Útest_f0_min_varianceä  s    
z4TestShgoSimplicialTestFunctions.test_f0_min_variancec                 C   sX   dd„ }dg}t ||d�}t||d d�}|js4J ‚t|j|jƒ t|j|jdd� dS )	zRReturn a minimum on a perfectly symmetric 1D problem, based on
            gh10538c                 S   s   | | d  | d  S )Nrc   rr   r   r6   r   r   r   r#   ö  s    zDTestShgoSimplicialTestFunctions.test_f0_min_variance_1D.<locals>.funr:   )r   r   ç�íµ ÷Æ°>)r„   N)r   r	   rØ   r   r#   r0   )r   r#   r   rŒ   Úrefr   r   r   Útest_f0_min_variance_1Dñ  s    
z7TestShgoSimplicialTestFunctions.test_f0_min_variance_1DN)r   r   r   rA   r¹   rº   r»   r¿   rÀ   rÁ   r³   r´   rµ   rÂ   rÊ   rË   rÍ   rÏ   ÚskiprÙ   rÜ   r   r   r   r   r¶   •  s"   
	
	



r¶   c                   @   sf  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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jeoÂejd'kd(d)�d*d+„ ƒZd,d-„ Ze
jjd.d)�d/d0„ ƒZ d1d2„ Z!d3d4„ Z"d5d6„ Z#d7d8„ Z$d9d:„ Z%d;d<„ Z&d=d>„ Z'd?d@„ Z(dAdB„ Z)e
j *dCg dD¢¡dEdF„ ƒZ+dGdH„ Z,dIdJ„ Z-dKS )LÚTestShgoArgumentsc                 C   s   t tdddd� dS )z>Iterative simplicial sampling on TestFunction 1 (multivariate)Nr-   r·   ©r|   r}   r�   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¼   FNé	   r·   r¾   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.   rz   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.   rz   )r{   r|   r}   r�   ry   rƒ   r†   )r   rž   r1   r   r)   r4   r‰   r   r0   r   r#   r   ©r   rŒ   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 )
zKIterative sampling on TestFunction 1 and 2  (multi and univariate)
        c                 S   s   t dƒ d S ©Nz Local minimization callback test©rd   r6   r   r   r   Úcallback_func  s    zATestShgoArguments.test_3_1_disp_simplicial.<locals>.callback_funcr.   r·   r—   T©r}   r�   r~   r€   ©r|   r�   r~   r€   N©r‘   rž   r   r1   r   ©r   rè   rŠ   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 )zAIterative sampling on TestFunction 1 and 2 (multi and univariate)c                 S   s   t dƒ d S ræ   rç   r6   r   r   r   rè   *  s    z<TestShgoArguments.test_3_2_disp_sobol.<locals>.callback_funcr.   rz   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 )	zMUsing `args` used to cause `shgo` to fail; see #14589, #15986,
        #16506c                 S   s   | | | S r   r   )r0   ÚyÚzr   r   r   rÓ   7  rÔ   z5TestShgoArguments.test_args_gh14589.<locals>.<lambda>)r   rQ   )r.   r-   )Úfuncr   rh   c                 S   s   d|  d S )Nr-   r.   r   r6   r   r   r   rÓ   9  rÔ   )rñ   r   N)r   r   r#   r0   )r   rŒ   rÛ   r   r   r   Útest_args_gh145894  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 criteriarÚ   T)Úf_minÚf_tolr¼   Nry   r·   ©r|   r‹   r€   r�   ©r¬   r   r�   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 )	z+Test Global mode limiting local evaluationsrÚ   Tr.   )ró   rô   r¼   Ú
local_iterNry   r·   rõ   rö   rš   r   r   r   Útest_4_2_known_f_minH  s    û
ÿz&TestShgoArguments.test_4_2_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 )z8Test Global mode limiting local evaluations for 1D funcsrÚ   Tr.   F©ró   rô   r¼   rø   r©   Nrz   ©r{   r|   r}   r€   r�   ry   rƒ   )rž   r   r   r1   r   r)   r4   r‰   r   r0   r   ©r   r€   rŒ   r   r   r   Útest_4_4_known_f_minU  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©r{   ry   rƒ   N©
r   r‘   r1   r   r)   r4   r‰   r   r0   r   rä   r   r   r   Útest_5_1_simplicial_arglesse  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 1rz   ©r{   r�   ry   rƒ   Nrÿ   rä   r   r   r   Útest_5_2_sobol_arglessk  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·   ©r{   r€   r�   ry   rƒ   r†   N©r   r¦   r1   r   r)   r4   r‰   r   r0   r   r#   r   rü   r   r   r   Útest_6_1_simplicial_max_iterr  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  ry   rƒ   r†   Nr  rü   r   r   r   Útest_6_2_simplicial_min_iter{  s    ÿÿz.TestShgoArguments.test_6_2_simplicial_min_iterc                 C   s,   dD ]"}|t jdœ}tt dd|dd� qdS )z@Test the minimizer_kwargs arguments for solvers with constraints)ÚCOBYLAÚSLSQP)Úmethodr{   ru   çü©ñÒMbP?rz   ©r|   r‹   r   r�   N)r¦   r)   r�   )r   Úsolverr   r   r   r   Útest_7_1_minkwargs„  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ftolry   r—   Tr   )r{   r   r€   N©r   r¦   r1   r   r)   )r   r   r€   r   r   r   Útest_7_2_minkwargs�  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BFGSú	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.   )r4   ÚarrayÚTr6   r   r   r   Újacœ  s    z1TestShgoArguments.test_7_3_minkwargs.<locals>.jacc                 S   s   t  ddgddgg¡S ©Nr-   r   )r4   r  r6   r   r   r   ÚhessŸ  s    z2TestShgoArguments.test_7_3_minkwargs.<locals>.hess)r
  r  r  z	Solver = zd====================================================================================================ru   r  rz   r  N)r‡   rˆ   r�   r‘   )r   r  r  r  r   r   r   r   Útest_7_3_minkwargs—  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¾   r�   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_g²  s    zTestShgoArguments.test_9_cons_gÚwin32z2Failing and fix in PyPy not planned (see gh-18632))Úreasonc                 C   s4   ddi}dd„ }t |tjd|d�}|jdks0J ‚dS )	r  ÚmaxtimerÖ   c                 S   s   t  d¡ dS )Ng›+¡†›„=rb   )ÚtimeÚsleepr6   r   r   r   r1   ¼  s    
z0TestShgoArguments.test_10_finite_time.<locals>.frN   )r}   r€   r.   N)r   r‘   r   Únit)r   r€   r1   rŒ   r   r   r   Útest_10_finite_time¶  s    z%TestShgoArguments.test_10_finite_timec                 C   sN   dddœ}t tjtjdd|dd�}tj d|jd ¡ tj d|jd	 ¡ dS )
ú*Test to cover the case where f_lowest == 0rb   T)ró   r—   rM   Nrz   r¾   r   r.   )r   r•   r1   r   r4   r‰   Úassert_equalr0   rü   r   r   r   Útest_11_f_min_0Ä  s    ÿÿz!TestShgoArguments.test_11_f_min_0z no way of currently testing thisc                 C   s6   dddœ}t tjtjdd|dd�}tj d|j¡ dS )r"  rÖ   rb   )r  ró   r.   Nrz   r¾   )r   r•   r1   r   r4   r‰   r#  r#   rü   r   r   r   Útest_12_sobol_inf_consÎ  s    ÿÿz(TestShgoArguments.test_12_sobol_inf_consc                 C   s0   dd„ }dgd }t ||dd�}| dd¡ d	S )
z-Test init of high-dimensional sobol sequencesc                 S   s   dS ©Nr   r   r6   r   r   r   r1   Ý  s    z/TestShgoArguments.test_13_high_sobol.<locals>.fr;   é)   rz   ©r�   r-   rJ   N)r   Zsampling_function)r   r1   r   ZSHGOcr   r   r   Útest_13_high_sobolÚ  s    
z$TestShgoArguments.test_13_high_sobolc                 C   s   ddi}t td|d� dS )z6Test limited local iterations for a pseudo-global moderø   rP   rB   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.   rS   rz   r¾   Nr�   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·   )r�   r€   r   Nr”   )r   Zcapsysr€   r   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 )ú=Test the functionality to add custom sampling methods to shgoc                 S   s   t jj| |fd�S )N)Úsize)r4   ÚrandomÚuniform)r|   Údr   r   r   Úsampleú  s    z9TestShgoArguments.test_17_custom_sampling.<locals>.sampler=   r¸   Nr�   )r   r2  r   r   r   Útest_17_custom_sampling÷  s    z)TestShgoArguments.test_17_custom_samplingc           	      C   s¨   dd„ }g d¢}g d¢}t t||ƒƒ}t||ƒ}t||ƒ}t||ƒ}|j|jksTJ ‚|j|jksdJ ‚|j|jkstJ ‚t g d¢¡}tj	 
|j|¡ tj	 
|j|j¡ d S )Nc                 S   s   t  | ¡ ¡ S r   )r4   Zsquarer5   r6   r   r   r   r1     s    z1TestShgoArguments.test_18_bounds_class.<locals>.f)g      Àrc   g      À)rp   rt   rK   )rp   rc   rb   )r&   Úzipr   r   ÚnfevÚmessagerØ   r4   r  r‰   r   r0   )	r   r1   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_classc                 C   s�   t dƒ� }ttd|jd� W d  ƒ n1 s.0    Y  ttdtd� t dƒ� }ttd|jd� W d  ƒ n1 st0    Y  ttdtd� dS )r-  r-   r=   )r|   r‚   N)r   r�   r‘   ÚmaprÎ   )r   Úpr   r   r   Útest_19_parallelization  s    
.
.z)TestShgoArguments.test_19_parallelizationc                 C   sz   dd„ }dd„ }dgd }dd„ }d	d
„ }dd„ }d|ddœd|dœd|dœf}t ||dd|d� t ||dd|dd� dS )z0Test that constraints can be passed to argumentsc              
   S   sb   | d d  t  t  t| d d | d d  ƒ¡¡ | d t  t  t| d | d d  ƒ¡¡  S r\   r^   r6   r   r   r   Ú	eggholder!  s
    &ÿ*þz=TestShgoArguments.test_20_constrained_args.<locals>.eggholderc                 S   s0   d| d  d| d   d| d   d| d   S )	NgÍÌÌÌÌŒ8@r   g     À:@r.   é'   r-   g     @D@rQ   r   r6   r   r   r   r1   '  s    z5TestShgoArguments.test_20_constrained_args.<locals>.f©r   rc   rP   c                 S   s<   |d | d  |d | d   d| d   d| d   d	 S )
Ngffffff@r   gffffff@r.   g333333&@r-   gÍÌÌÌÌÌô?rQ   rN   r   )r0   rk   r   r   r   Úg1_modified,  s
    .ÿÿz?TestShgoArguments.test_20_constrained_args.<locals>.g1_modifiedc                 S   s~   d| d  d| d   d| d   d| d   d	 d
t  d| d d  d| d d   d| d d   d| d d   ¡  S )NrO   r   gÍÌÌÌÌÌ'@r.   gfffffæD@r-   gÍÌÌÌÌJ@rQ   é   gR¸…ëQú?gìQ¸…ëÑ?gR¸…ëQÈ?g     €4@g×£p=
×ã?)r4   r_   r6   r   r   r   rG   0  s    2$ÿÿÿz6TestShgoArguments.test_20_constrained_args.<locals>.g2c                 S   s$   | d | d  | d  | d  d S ©Nr   r.   r-   rQ   r   r6   r   r   r   Úh16  s    z6TestShgoArguments.test_20_constrained_args.<locals>.h1r    )r   )r"   r#   rh   r!   rÐ   rÅ   r.   )r|   r}   r{   rz   )r|   r}   r{   r�   N)r   )r   r;  r1   r   r>  rG   rA  r)   r   r   r   Útest_20_constrained_args  s    

þÿz*TestShgoArguments.test_20_constrained_argsc              	   C   s°   dd„ }t |ddgddggdddd	d
dœd� dd„ }ddgddgddgddgddgg}t ||dd	d
dœd�}t|g d¢|d
d�}|jsŒJ ‚t|j|jƒ t|j|jdd� dS )z|Test that shgo can handle objective functions that return the
        gradient alongside the objective value. Fixes gh-13547c                 S   s   t  t  | d¡¡d|  fS ©Nr-   )r4   r5   Úpowerr6   r   r   r   rñ   F  s    z2TestShgoArguments.test_21_1_jac_true.<locals>.funcr8   r.   r-   ru   rN   rz   r	  T)r
  r  )r   r|   r}   r�   r   c                 S   s   t  | d ¡d|  fS rC  r3   r6   r   r   r   rñ   R  s    r   rQ   )r   r�   r   )r.   r.   r.   r.   r.   )Úx0r   r  rÖ   r†   N)r   r
   rØ   r   r#   r0   )r   rñ   r   rŒ   rÛ   r   r   r   Útest_21_1_jac_trueB  s&    û	"ÿÿ
z$TestShgoArguments.test_21_1_jac_trueÚ
derivative©r  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s|J ‚tj |
j|j¡ tj |
j|j¡ dS )zzshgo used to raise an error when passing `options` with 'jac'
        # see gh-12963. check that this is resolved
        c                 S   s$   d| d  | d  d| d   d S )NrQ   r   r-   rN   r   r6   r   r   r   Ú	objectivee  s    zATestShgoArguments.test_21_2_derivative_options.<locals>.objectivec                 S   s   d| d  d S )Nr9   r   r-   r   r6   r   r   r   Úgradienth  s    z@TestShgoArguments.test_21_2_derivative_options.<locals>.gradientc                 S   s   dS ©Nr9   r   r6   r   r   r   r  k  s    z<TestShgoArguments.test_21_2_derivative_options.<locals>.hessc                 S   s   d| S rL  r   )r0   r9  r   r   r   rI  n  s    z=TestShgoArguments.test_21_2_derivative_options.<locals>.hessprH  r
  útrust-constr)iœÿÿÿru   ©r   r€   r   )rE  r   N)r   r
   rØ   r4   r‰   r   r#   r0   )r   rG  rJ  rK  r  rI  Zderivative_funcsr€   r   r   rŒ   rÛ   r   r   r   Útest_21_2_derivative_options_  s"    ÿÿ
z.TestShgoArguments.test_21_2_derivative_optionsc                 C   st   g d¢}t tdœ}ddi}tt|||d�}ttt d¡fddi|¤Ž}|jsPJ ‚t|j	|j	ƒ t|j
|j
dd� d	S )
zsEnsure the Hessian gets passed correctly to the local minimizer
        routine. Previous report gh-14533.
        )©r   gš™™™™™ù?rP  ©r   gffffffö?rQ  rQ  )r  r  r
  r  rN  rN   rÖ   r†   N)r   r   r   r   r
   r4   ÚzerosrØ   r   r#   r0   )r   r   r€   r   rŒ   rÛ   r   r   r   Útest_21_3_hess_options_rosen  s    
ÿÿ
z.TestShgoArguments.test_21_3_hess_options_rosenc                 C   sp   dd„ }ddd„ dœ}dg}t ||d|d	d
�}t|t d¡|d|d�}|jsPJ ‚t|j|jƒ t|j|jƒ dS )zwshgo used to raise an error when passing `args` with Sobol sampling
        # see gh-12114. check that this is resolvedc                 S   s   | d | S r&  r   )r0   ri   r   r   r   r#   ’  s    z6TestShgoArguments.test_21_arg_tuple_sobol.<locals>.funr    c                 S   s   | d d S rw   r   r6   r   r   r   rÓ   •  rÔ   z;TestShgoArguments.test_21_arg_tuple_sobol.<locals>.<lambda>r!   ©r   rM   )r.   rz   )rh   r{   r�   r.   )r   rh   r{   N)r   r
   r4   rR  rØ   r   r#   r0   )r   r#   r{   r   rŒ   rÛ   r   r   r   Útest_21_arg_tuple_sobolŽ  s    
ÿÿ
z)TestShgoArguments.test_21_arg_tuple_sobolN).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  Zxfailr   ÚsysÚplatformr!  r$  rÝ   r%  r)  r*  r+  r,  r3  r7  r:  rB  rF  ZparametrizerO  rS  rU  r   r   r   r   rÞ     sR   		


		ÿ



$
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d„ Z
dd„ Zdd„ Z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-   Nrz   r¾   FrP   )	r   r¬   r1   r   r4   r‰   r#  rØ   Ztnevrü   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_Sobolr(  N)Úassert_raisesÚ
ValueErrorr   r‘   r1   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 evaluationsrM   T)Zmaxfevr—   rQ   rz   ©r|   r€   r�   FrO   N)	r   Ú
test_tabler1   r   r4   r‰   r#  rØ   r5  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 evaluationsrM   T©Úmaxevr—   rQ   r·   r^  FN)r   r_  r1   r   r4   r‰   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)r9   rQ   ©rQ   rN   N©r[  r\  r   r‘   r1   ©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))rQ   rN   rN   rd  Nre  rf  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 optionru   Tra  rz   ©r{   r|   r€   r�   FN©	r   Útest_infeasibler1   r   r)   r4   r‰   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 optionru   TF)rb  r—   r©   rz   ri  Nrj  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è  Fra  ru   r·   ri  Nrj  rü   r   r   r   Útest_5_2_infeasible_simplicialê  s    ÿ
þz/TestShgoFailures.test_5_2_infeasible_simplicialc                 C   sP   t jd dddddœ}t jt jf}t jdd|dd	œ}tttg|¢R i |¤Ž dS )
z<Test Global mode limiting local evaluations with f* too highr]   rÚ   Tr.   Frú   Nrz   rû   )rž   r   r1   r   r)   r   ÚUserWarningr   )r   r€   rh   Úkwargsr   r   r   Útest_6_1_lower_known_f_minö  s    úüz+TestShgoFailures.test_6_1_lower_known_f_minc                    sL   ddl m‰m} g d¢}‡ ‡fdd„‰ dˆ _|ˆ |ƒ}t|j|jˆ jƒ d S )Nr   )r   r   ©©r   r-   rs  rs  rs  rs  c                    s   ˆ  j d7  _ ˆ| ƒS ©Nr.   )r5  r6   ©r#   r   r   r   r#     s    z"TestShgoFailures.test.<locals>.fun)Úscipy.optimizer   r   r5  rd   r0   r#   )r   r   r   Úresultr   ru  r   rŠ     s    
zTestShgoFailures.testN)r   r   r   rZ  r]  r`  rc  rg  rh  rl  rm  rn  rq  rŠ   r   r   r   r   rX  ¢  s   
	rX  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestShgoReturnsc                    s:   g d¢}‡ fdd„‰ dˆ _ tˆ |ƒ}tj ˆ j |j ¡ d S )Nrr  c                    s   ˆ  j d7  _ t| ƒS rt  ©r5  r   r6   ©r#   r   r   r#     s    z3TestShgoReturns.test_1_nfev_simplicial.<locals>.funr   ©r5  r   r4   r‰   r#  ©r   r   rw  r   rz  r   Útest_1_nfev_simplicial  s
    
z&TestShgoReturns.test_1_nfev_simplicialc                    s>   g d¢}‡ fdd„‰ dˆ _ tˆ |dd�}tj ˆ j |j ¡ d S )Nrr  c                    s   ˆ  j d7  _ t| ƒS rt  ry  r6   rz  r   r   r#   '  s    z.TestShgoReturns.test_1_nfev_sobol.<locals>.funr   rz   r(  r{  r|  r   rz  r   Útest_1_nfev_sobol$  s
    z!TestShgoReturns.test_1_nfev_sobolN)r   r   r   r}  r~  r   r   r   r   rx    s   rx  c                  C   sŠ   dd„ } t | dgdgƒ}t|t ddg¡ƒ}ttddg|dd�}t t |jd	 ¡dk¡s^J ‚t t |jd	 ¡d
k¡s|J ‚|j	s†J ‚d S )Nc                 S   s   t  | ¡} t  | d ¡gS rC  ©rH   Zasarrayr5   r6   r   r   r   Úquad3  s    
z$test_vector_constraint.<locals>.quadgš™™™™™@rQ   rc   rT  rz   r  r-   rt   )
r   r   rH   r  r   r   Úallr5   r0   rØ   )r€  ÚnlcZoldcrŒ   r   r   r   Útest_vector_constraint1  s    rƒ  zignore:delta_gradc                  C   s€   dd„ } t | dgdgƒ}ddi}ttddg|d|d	�}t t |jd
 ¡dk¡sTJ ‚t t |jd
 ¡dk¡srJ ‚|js|J ‚d S )Nc                 S   s   t  | ¡} t  | d ¡gS rC  r  r6   r   r   r   r€  B  s    
ztest_trust_constr.<locals>.quadgÍÌÌÌÌÌ@rQ   r
  rM  rT  rz   )r{   r�   r   r-   rt   )r   r   r   rH   r�  r5   r0   rØ   )r€  r‚  r   rŒ   r   r   r   Útest_trust_constr@  s    ûr„  c                  C   s¶   dgd } dd„ }t |ddƒ}tt| |d�}tt |j¡dƒ dd„ }d|d	œ}tt| |d�}tt |j¡dƒ d
gd } dd„ }d|d	œ}tdd„ | |dd�}tt |j¡dƒ d S )N)gÍÌÌÌÌÌì?ro   r-   c                 S   s   | d | d  S rw   r   r6   r   r   r   Úfaulty[  s    z)test_equality_constraints.<locals>.faultyç333333@rÕ   c                 S   s   | d | d  d S )Nr   r.   r†  r   r6   r   r   r   r…  b  s    rÐ   r!   r=  rP   c                 S   s$   | d | d  | d  | d  d S r@  r   r6   r   r   r   r…  k  s    c                 S   s   t  | ¡ S r   )rH   Úprodr6   r   r   r   rÓ   q  rÔ   z+test_equality_constraints.<locals>.<lambda>rz   )r   r{   r�   rc   )r   r   r   r   rH   r5   r0   )r   r…  r‚  rŒ   r{   r   r   r   Útest_equality_constraintsW  s&    



ürˆ  c                  C   sj   dd„ } | ddœ}ddddd	œd
œ}t tdgd ||d�}|jd  ¡ dksPJ ‚|jd d dksfJ ‚d S )Nc                 S   s   t  | d ¡d S r  )rH   r5   r6   r   r   r   r)   y  s    ztest_gh16971.<locals>.consr    )r#   r"   r  rN   rr   gš™™™™™©?)ZrhobegZtolÚcatol)r
  r€   rT  r-   )r{   r   r
  Zcobylar€   r‰  )r   r   r   Úlower)r)   Úcr   rj   r   r   r   Útest_gh16971x  s    

þÿrŒ  )	r   ry   ru   NNNNrz   r.   )Er‡   rV  r4   rH   r  Úmultiprocessingr   Znumpy.testingr   r   r³   r   r[  r   rv  r   r   r	   r
   r   r   r   r   Zscipy.optimize._constraintsr   Zscipy.optimize._shgor   r   r*   r+   r‘   r•   r™   r<   r  rž   r¢   rD   r¦   rL   r¬   r[   r°   ra   re   r&   r4  ZboundsLJrÈ   rq   ZonesrÎ   rs   r_  rv   rk  r´   rÝ   r�   rŽ   r¶   rÞ   rX  rx  rƒ  Úfilterwarningsr„  rˆ  rŒ  r   r   r   r   Ú<module>   sÊ   (

ÿÿÿ÷ð
ü%þ"
ýþþ	
þþþ
   þ":l   $u

!