o
    Ö­j|›  ã                   @   s<  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¡			PdfdQdR„ƒ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   ú\/var/www/html/CropPilot/venv/lib/python3.10/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   sR   g }| d ur%t | ttfƒs| f} n	 | D ]
} | d| dœ¡ qt|ƒ}|S 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   ó   |d d |d d  S ©Nr   é   é   r   ©r   Úxr   r   r   Úf+   ó   zStructTest1.fc                 C   s   t j| dd�d  S )Nr   ©Úaxisg      @©ÚnpÚsum©r1   r   r   r   r(   .   ó   zStructTest1.gN©r   r   r   r2   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é   )r7   Úsinr0   r   r   r   r2   A   ó   zStructTest2.fc                 C   s   dt j| dd� S )Né:   r   r4   r6   r9   r   r   r   r(   D   rC   zStructTest2.gN©r   r   r   Ú__doc__r2   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	½‚Ã>@)
rH   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   r0   r   r   r   r2   {   ó   zStructTest3.fc                 C   s   | d | d  d S )Nr   r/   ç      9@r   r9   r   r   r   Úg1~   r:   zStructTest3.g1c                 C   s   | d d | d d  d S )Nr   r.   r/   rK   r   r9   r   r   r   Úg2�   rJ   zStructTest3.g2c                 C   s0   | d | d  d | d d | d d  d fS )Nr   r/   rK   r.   r   r9   r   r   r   r(   ‡   ó   0zStructTest3.gr   N)r   r   r   rF   r2   rL   rM   r(   r   r7   ÚinfÚ_StructTest3__nlcr)   r   r   r   r   rI   i   s    
rI   )r.   é2   )r   rQ   g'ò�InŸ/@gS[Ú:XLù?ç      @)r   r   r   c                   @   óL   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   r0   r   r   r   r2   œ   s&   .ÿÿÿÿÿÿý
ý
ýzStructTest4.fc                 C   sJ   d| d d  d| d d   | d  d| d d   d| d   d  S )Nr.   r   rY   r/   rX   rV   é   r   r9   r   r   r   rL   £   s
   6
ÿÿzStructTest4.g1c                 C   s>   d| d  d| d   d| d d   | d  | d  d  S )	Nr[   r   rY   r/   rU   r.   rX   g      q@r   r9   r   r   r   rM   §   s   >zStructTest4.g2c                 C   s:   d| d  | d d  d| d d   d| d   d  S )	Né   r   r/   r.   r=   rV   r\   éÄ   r   r9   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 )	NrX   r   r.   r/   rY   rV   rZ   r=   r   r9   r   r   r   Úg4­   s
   >
ÿ
ÿzStructTest4.g4N©r   r   r   rF   r2   rL   rM   r`   ra   r(   r*   r)   r   r   r   r   rT   ”   s    rT   )iöÿÿÿrU   r[   )g¹ââ¨Ü¤@g$H¥ØÑ8ÿ?g„ßÍ	�Þ¿g0eà€v@gnÞ8)Ìûã¿g k_@/œð?g0g¶+ô�ù?gÙP{[
E…@c                   @   ó    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   ç       @©r7   rB   ÚsqrtÚabsr0   r   r   r   r2   ¾   ó   4*ÿÿzStructTest5.fNr;   r   r   r   r   rd   ½   ó    rd   )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}t|d |ƒD ]J}d| }d| }|| ||  }	||d  ||d   }
||d  ||d   }|	|	 |
|
  ||  }|| | }|dkrn|d| d | 7 }q$q|S )	Nzx = r   rY   ç        r/   r.   ç      ð?rf   )ÚprintÚNÚintÚrange)r   r1   ÚargsÚkÚsÚiÚjÚaÚbÚxdÚydÚzdÚedÚudr   r   r   r2   Ó   s$   
€÷zStructTestLJ.fNrE   r   r   r   r   rl   Í   s
    rl   r=   g      Àç      @ç      ð¿c                   @   rc   )ÚStructTestSc                 C   s@   |d d d |d d d  |d d d  |d d d  S )Nr   ç      à?r.   r/   rY   r   r0   r   r   r   r2   û   s
   ÿÿzStructTestS.fNr;   r   r   r   r   r�   ú   s    r�   )r   rf   rX   rm   r‚   c                   @   rc   )ÚStructTestTablec                 C   s    |d dkr|d dkrdS dS )Nr   ç      @r/   rQ   éd   r   r0   r   r   r   r2   
  s   zStructTestTable.fNr;   r   r   r   r   rƒ   	  rk   rƒ   rQ   r„   c                   @   rS   )ÚStructTestInfeasiblez0
    Test function with no feasible domain.
    c                 G   r,   r-   r   )r   r1   rs   r   r   r   r2     r3   zStructTestInfeasible.fc                 C   s   | d | d  d S ©Nr   r/   r   r9   r   r   r   rL   !  r:   zStructTestInfeasible.g1c                 C   s   | d | d  d  S r‡   r   r9   r   r   r   rM   $  ó   zStructTestInfeasible.g2c                 C   s   | d  | d  d S r‡   r   r9   r   r   r   r`   '  rˆ   zStructTestInfeasible.g3c                 C   s   | d  | d  d  S r‡   r   r9   r   r   r   ra   *  r3   zStructTestInfeasible.g4Nrb   r   r   r   r   r†     s    r†   )r<   r/   ú
Not a testr   çñhãˆµøä>r…   Úsobolr/   c
                 C   sÈ   t | j| j|| j|||||||	d�}
td|
› �ƒ t d|
› �¡ | jd ur2tj	j
|
j| j||d� | jd urBtj	j
|
j| j|d� | jd urRtj	j
|
j| j|d� | jd urbtj	j
|
j| j|d� d S )N)	rs   ÚconstraintsÚnÚitersÚcallbackÚminimizer_kwargsÚoptionsÚsampling_methodÚworkerszres = ©ÚrtolÚatol©r–   )r   r2   r   r)   ro   ÚloggingÚinfor   r7   Útestingr   r1   r   r#   r   Úxlr   Úfunl)Útestrs   Ú	test_atolr�   rŽ   r�   r�   r‘   r’   r“   Úresr   r   r   Úrun_test7  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   ó   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_sobol`  ó   z*TestShgoSobolTestFunctions.test_f1_1_sobolc                 C   r¢   )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_sobole  r¨   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_sobolj  s   z*TestShgoSobolTestFunctions.test_f1_3_sobolc                 C   r¢   )úRUnivariate test function on
        f(x) = (x - 30) * sin(x) with bounds=[(0, 60)]N©r    Útest2_1r¦   r   r   r   Útest_f2_1_sobolp  r¨   z*TestShgoSobolTestFunctions.test_f2_1_sobolc                 C   r¢   )úNUnivariate test function on
        f(x) = (x - 30) * sin(x) bounds=[(0, 4.5)]N©r    Útest2_2r¦   r   r   r   Útest_f2_2_sobolu  r¨   z*TestShgoSobolTestFunctions.test_f2_2_sobolc                 C   r¢   )ú%NLP: Hock and Schittkowski problem 18N©r    Útest3_1r¦   r   r   r   Útest_f3_sobolz  s   z(TestShgoSobolTestFunctions.test_f3_sobolc                 C   ó   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, multimodalrG   )r�   N©r    Útest5_1r¦   r   r   r   Útest_f5_1_sobol…  s   z*TestShgoSobolTestFunctions.test_f5_1_sobolc                 C   ó   t tddd� dS )rÄ   rG   rV   )r�   rŽ   NrÅ   r¦   r   r   r   Útest_f5_2_sobolŠ  ó   z*TestShgoSobolTestFunctions.test_f5_2_sobolN)r   r   r   rF   r§   r«   r°   r´   r¸   r¼   ÚpytestÚmarkÚslowrÃ   rÇ   rÉ   r   r   r   r   r¡   Z  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e
j d¡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   rÈ   )r£   r/   Ú
simplicial©r�   r’   Nr¤   r¦   r   r   r   Útest_f1_1_simplicial™  rÊ   z4TestShgoSimplicialTestFunctions.test_f1_1_simplicialc                 C   rÈ   )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ž  rÊ   z4TestShgoSimplicialTestFunctions.test_f1_2_simplicialc                 C   rÈ   )z_Multivariate test function 1: x[0]**2 + x[1]**2
        with bounds=[(None, None),(None, None)]rV   rÏ   rÐ   Nr­   r¦   r   r   r   Útest_f1_3_simplicial£  rÊ   z4TestShgoSimplicialTestFunctions.test_f1_3_simplicialc                 C   ó   ddi}t tdd|dd� dS )r±   Úminimize_every_iterFéÈ   r[   rÏ   ©r�   rŽ   r‘   r’   Nr²   r¯   r   r   r   Útest_f2_1_simplicial¨  s   

ÿz4TestShgoSimplicialTestFunctions.test_f2_1_simplicialc                 C   rÈ   )rµ   r/   rÏ   rÐ   Nr¶   r¦   r   r   r   Útest_f2_2_simplicial¯  rÊ   z4TestShgoSimplicialTestFunctions.test_f2_2_simplicialc                 C   rÈ   )r¹   r/   rÏ   rÐ   Nrº   r¦   r   r   r   Útest_f3_simplicial´  s   z2TestShgoSimplicialTestFunctions.test_f3_simplicialc                 C   rÈ   )r¾   r/   rÏ   rÐ   NrÁ   r¦   r   r   r   Útest_f4_simplicial¸  rÊ   z2TestShgoSimplicialTestFunctions.test_f4_simplicialc                 C   s&   dddœ}d}t t|d|ddd� dS )	z&LJ: Symmetry-constrained test functionT©Úsymmetryr¬   ©r=   é,  r/   rÏ   ©rs   r�   r‘   rŽ   r’   N©r    ÚtestLJ©r   r‘   rs   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   r=   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_symmetryrU   c                 C   s$   g d¢ddœ}t td|ddd� dS )	z(Asymmetrically constrained test function)r   r   r   rY   TrÜ   i'  r/   rÏ   ræ   N)r    Útest_sr¯   r   r   r   Útest_f5_3_cons_symmetryÙ  s   ÿ
ýz7TestShgoSimplicialTestFunctions.test_f5_3_cons_symmetryr‰   c                    sV   d‰ d‡ fdd„dœ}t tjddg |d�}|jsJ ‚t|jd	d
d� t|jdƒ dS )zOReturn a minimum on a perfectly symmetric problem, based on
            gh10429r‚   Úeqc                    s   t  | ¡ˆ  S r   )r7   Úmeanr9   ©Úavgr   r   Ú<lambda>é  s    zFTestShgoSimplicialTestFunctions.test_f0_min_variance.<locals>.<lambda>r!   r=   r>   ©r   rŒ   r   çVçž¯Ò<r—   N)r   r7   ÚvarÚsuccessr   r#   r1   )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sJ ‚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 )Nrn   r‚   r   r9   r   r   r   r#   ö  r:   zDTestShgoSimplicialTestFunctions.test_f0_min_variance_1D.<locals>.funr>   )r   r   ç�íµ ÷Æ°>)r•   N)r   r	   rò   r   r#   r1   )r   r#   r   rŸ   Úrefr   r   r   Útest_f0_min_variance_1Dñ  s   
z7TestShgoSimplicialTestFunctions.test_f0_min_variance_1DN)r   r   r   rF   rÑ   rÒ   rÓ   rØ   rÙ   rÚ   rË   rÌ   rÍ   rÛ   rä   rå   rç   Ú	fail_slowré   Úskipró   rö   r   r   r   r   rÎ   ”  s&    
	

	




rÎ   c                   @   sr  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oae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&e
j 'd=¡d>d?„ ƒZ(d@dA„ Z)dBdC„ Z*e
j +dDg dE¢¡dFdG„ ƒZ,dHdI„ Z-dJdK„ Z.dLS )MÚTestShgoArgumentsc                 C   ó   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  ó   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  ó   

ÿz%TestShgoArguments.test_1_2_simpl_iterc                 C   rú   )z9Iterative Sobol sampling on TestFunction 1 (multivariate)Nr/   r‹   rû   r©   r¦   r   r   r   Útest_2_1_sobol_iter  rý   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/   r‹   )rŒ   r�   rŽ   r’   rŠ   r”   r—   )r   r³   r2   r   r)   r7   rš   r   r1   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   ó   t dƒ d S ©Nz Local minimization callback test©ro   r9   r   r   r   Úcallback_func  ó   zATestShgoArguments.test_3_1_disp_simplicial.<locals>.callback_funcr/   rÏ   r¬   T©rŽ   r’   r�   r‘   ©r�   r’   r�   r‘   N©r¥   r³   r   r2   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   r  r  r  r9   r   r   r   r  )  r  z<TestShgoArguments.test_3_2_disp_sobol.<locals>.callback_funcr/   r‹   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   )r1   ÚyÚzr   r   r   rî   6  ó    z5TestShgoArguments.test_args_gh14589.<locals>.<lambda>)r   rY   )r/   r.   )Úfuncr   rs   c                 S   s   d|  d S )Nr.   r/   r   r9   r   r   r   rî   8  r  )r  r   N)r   r   r#   r1   )r   rŸ   rõ   r   r   r   Útest_args_gh145893  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Õ   NrŠ   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_iterNrŠ   rÏ   r  r  r¯   r   r   r   Útest_4_2_known_f_minG  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¿   Nr‹   ©rŒ   r�   rŽ   r‘   r’   rŠ   r”   )r³   r   r   r2   r   r)   r7   rš   r   r1   r   ©r   r‘   rŸ   r   r   r   Útest_4_4_known_f_minT  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Œ   rŠ   r”   N©
r   r¥   r2   r   r)   r7   rš   r   r1   r   r  r   r   r   Útest_5_1_simplicial_arglessc  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 1r‹   ©rŒ   r’   rŠ   r”   Nr   r  r   r   r   Útest_5_2_sobol_arglessh  s   ÿz(TestShgoArguments.test_5_2_sobol_arglessc                 C   óR   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 3Úmax_iterr.   rÏ   ©rŒ   r‘   r’   rŠ   r”   r—   N©r   r»   r2   r   r)   r7   rš   r   r1   r   r#   r   r  r   r   r   Útest_6_1_simplicial_max_itern  ó   ÿz.TestShgoArguments.test_6_1_simplicial_max_iterc                 C   r$  )	r%  Úmin_iterr.   rÏ   r'  rŠ   r”   r—   Nr(  r  r   r   r   Útest_6_2_simplicial_min_iterv  r*  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ÚCOBYQAÚSLSQP)ÚmethodrŒ   r…   çü©ñÒMbP?r‹   ©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 initsÚftolrŠ   r¬   Tr   )rŒ   r�   r‘   N©r   r»   r2   r   r)   )r   r�   r‘   r   r   r   Útest_7_2_minkwargsŠ  s
   
ÿz$TestShgoArguments.test_7_2_minkwargsc                 C   sV   dD ]&}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-MeadÚPowellÚCGÚBFGSú	Newton-CGzL-BFGS-BÚTNCÚdoglegz	trust-ncgztrust-exactztrust-krylovc                 S   s    t  d| d  d| d  g¡jS )Nr.   r   r/   )r7   ÚarrayÚTr9   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   )r7   r>  r9   r   r   r   Úhess™  rˆ   z2TestShgoArguments.test_7_3_minkwargs.<locals>.hess)r0  r@  rB  z	Solver = zd====================================================================================================r…   r1  r‹   r2  N)r˜   r™   r    r¥   )r   r3  r@  rB  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)Ú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  Nr6  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sJ ‚dS )	rF  Úmaxtimerð   c                 S   s   t  d¡ dS )Ng›+¡†›„=rm   )ÚtimeÚsleepr9   r   r   r   r2   ¶  s   
z0TestShgoArguments.test_10_finite_time.<locals>.frV   )rŽ   r‘   r/   N)r   r¥   r   Únit)r   r‘   r2   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 == 0rm   T)r  r¬   rU   Nr‹   r×   r   r/   )r   rª   r2   r   r7   rš   Úassert_equalr1   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 )rO  rð   rm   )rJ  r  r/   Nr‹   r×   )r   rª   r2   r   r7   rš   rP  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   ó   dS ©Nr   r   r9   r   r   r   r2   ×  ó   z/TestShgoArguments.test_13_high_sobol.<locals>.fr?   é)   r‹   ©r’   r.   rQ   N)r   Úsampling_function)r   r2   r   ÚSHGOcr   r   r   Útest_13_high_sobolÔ  s   
z$TestShgoArguments.test_13_high_sobolc                 C   r½   )z6Test limited local iterations for a pseudo-global moder  rX   rG   rÀ   NrÅ   r¯   r   r   r   Útest_14_local_iterß  s   z$TestShgoArguments.test_14_local_iterc                 C   rÔ   )z9Test minimize every iter options and cover function cacherÕ   Tr/   r[   r‹   r×   Nr¤   r¯   r   r   r   Útest_15_min_every_iterä  r   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¬   Tr0  znelder-meadrÏ   )r’   r‘   r�   Nr©   )r   Ú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)r7   ÚrandomÚuniform)r�   Údr   r   r   Úsampleô  rC   z9TestShgoArguments.test_17_custom_sampling.<locals>.samplerA   rÐ   Nr¤   )r   rd  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s*J ‚|j|jks2J ‚|j|jks:J ‚t g d¢¡}tj	 
|j|¡ tj	 
|j|j¡ d S )Nc                 S   s   t  | ¡ ¡ S r   )r7   Úsquarer8   r9   r   r   r   r2   û  s   z1TestShgoArguments.test_18_bounds_class.<locals>.f)g      Àrn   g      À)r€   r„   rR   )r€   rn   rm   )r&   Úzipr   r   ÚnfevÚmessagerò   r7   r>  rš   r   r1   )	r   r2   ÚlbÚubÚ
bounds_oldÚ
bounds_newÚres_old_boundsÚres_new_boundsÚx_optr   r   r   Útest_18_bounds_classù  s   


z&TestShgoArguments.test_18_bounds_classrU   c                 C   s�   t dƒ�}ttd|jd� W d  ƒ n1 sw   Y  ttdtd� t dƒ�}ttd|jd� W d  ƒ n1 s:w   Y  ttdtd� dS )r_  r.   rA   )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 re   rg   r9   r   r   r   Ú	eggholder  rj   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@rY   r   r9   r   r   r   r2   !  rN   z5TestShgoArguments.test_20_constrained_args.<locals>.f©r   rn   rX   c                 S   s<   |d | d  |d | d   d| d   d| d   d	 S )
Ngffffff@r   gffffff@r/   g333333&@r.   gÍÌÌÌÌÌô?rY   rV   r   )r1   rv   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 )NrW   r   gÍÌÌÌÌÌ'@r/   gfffffæD@r.   gÍÌÌÌÌJ@rY   é   gR¸…ëQú?gìQ¸…ëÑ?gR¸…ëQÈ?g     €4@g×£p=
×ã?)r7   rh   r9   r   r   r   rM   *  s   2>ÿÿÿz6TestShgoArguments.test_20_constrained_args.<locals>.g2c                 S   ó$   | d | d  | d  | d  d S ©Nr   r/   r.   rY   r   r9   r   r   r   Úh12  ó   $z6TestShgoArguments.test_20_constrained_args.<locals>.h1r    )r   )r"   r#   rs   r!   rê   rß   r/   )r�   rŽ   rŒ   r‹   )r�   rŽ   rŒ   r’   N)r   )r   ru  r2   r   rx  rM   r|  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sFJ ‚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.   )r7   r8   Úpowerr9   r   r   r   r  B  s   z2TestShgoArguments.test_21_1_jac_true.<locals>.funcr<   r/   r.   r…   rV   r‹   r/  T)r0  r@  )r   r�   rŽ   r’   r�   c                 S   s   t  | d ¡d|  fS r  r6   r9   r   r   r   r  N  rˆ   r   rY   )r   r’   r�   )r/   r/   r/   r/   r/   )Úx0r   r@  rð   r—   N)r   r
   rò   r   r#   r1   )r   r  r   rŸ   rõ   r   r   r   Útest_21_1_jac_true>  s&   û	"ÿÿ
z$TestShgoArguments.test_21_1_jac_trueÚ
derivative©r@  rB  Ú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 )NrY   r   r.   rV   r   r9   r   r   r   Ú	objectivea  r}  zATestShgoArguments.test_21_2_derivative_options.<locals>.objectivec                 S   s   d| d  d S )Nr=   r   r.   r   r9   r   r   r   Úgradientd  ó   z@TestShgoArguments.test_21_2_derivative_options.<locals>.gradientc                 S   rS  ©Nr=   r   r9   r   r   r   rB  g  rU  z<TestShgoArguments.test_21_2_derivative_options.<locals>.hessc                 S   s   d| S r‰  r   )r1   rs  r   r   r   r…  j  s   z=TestShgoArguments.test_21_2_derivative_options.<locals>.hesspr„  r0  útrust-constr)iœÿÿÿr…   ©r�   r‘   r   )r�  r   N)r   r
   rò   r7   rš   r   r#   r1   )r   rƒ  r†  r‡  rB  r…  Ú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s(J ‚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š™™™™™ù?rŽ  ©r   gffffffö?r�  r�  )r@  rB  r0  r;  r‹  rV   rð   r—   N)r   r   r   r   r
   r7   Úzerosrò   r   r#   r1   )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s(J ‚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 rT  r   )r1   rt   r   r   r   r#   Ž  r  z6TestShgoArguments.test_21_arg_tuple_sobol.<locals>.funr    c                 S   s   | d d S r‡   r   r9   r   r   r   rî   ‘  r  z;TestShgoArguments.test_21_arg_tuple_sobol.<locals>.<lambda>r!   ©r   rU   )r/   r‹   )rs   rŒ   r’   r/   )r   rs   rŒ   N)r   r
   r7   r�  rò   r   r#   r1   )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,  r4  r7  rC  rE  rG  Úxfailr   ÚsysÚplatformrN  rQ  rø   rR  rZ  r[  r\  r^  re  rq  r÷   rt  r~  r‚  Úparametrizer�  r‘  r“  r   r   r   r   rù     sV    	


ÿ





&
rù   c                   @   sl   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ejj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.   Nr‹   r×   FrX   )	r   rÂ   r2   r   r7   rš   rP  rò   Ú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 methodÚ	not_SobolrW  N)Úassert_raisesÚ
ValueErrorr   r¥   r2   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 evaluationsrU   T)Úmaxfevr¬   rY   r‹   ©r�   r‘   r’   FrW   N)	r   Ú
test_tabler2   r   r7   rš   rP  rò   rh  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 evaluationsrU   T©Úmaxevr¬   rY   rÏ   r¡  FN)r   r¢  r2   r   r7   rš   rP  rò   r  r   r   r   Útest_3_2_no_min_pool_simplicialº  s   ÿÿz0TestShgoFailures.test_3_2_no_min_pool_simplicialc                 C   ó   ddg}t tttj|ƒ dS )zSpecified bounds ub > lb)r=   rY   ©rY   rV   N©r�  rž  r   r¥   r2   ©r   r   r   r   r   Útest_4_1_bound_errÃ  ó   z#TestShgoFailures.test_4_1_bound_errc                 C   r§  )z)Specified bounds are of the form (lb, ub))rY   rV   rV   r¨  Nr©  rª  r   r   r   Útest_4_2_bound_errÈ  r¬  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¤  r‹   ©rŒ   r�   r‘   r’   FN©	r   Útest_infeasibler2   r   r)   r7   rš   rP  rò   r  r   r   r   Útest_5_1_1_infeasible_sobolÍ  ó   ÿ
þ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¿   r‹   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æ  r²  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 highrf   rô   Tr/   Fr  Nr‹   r  )r³   r   r2   r   r)   r   ÚUserWarningr   )r   r‘   rs   Ú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.   r¹  r¹  r¹  r¹  c                    s   ˆ  j d7  _ ˆ| ƒS ©Nr/   )rh  r9   ©r#   r   r   r   r#   	  ó   z"TestShgoFailures.test.<locals>.fun)Úscipy.optimizer   r   rh  ro   r1   r#   )r   r   r   Úresultr   r»  r   r�     s   
zTestShgoFailures.testN)r   r   r   r›  rŸ  r£  r¦  r«  r­  r±  r³  r´  rË   rÌ   Úthread_unsafer·  r�   r   r   r   r   r˜  ž  s    
	
r˜  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 )Nr¸  c                    ó   ˆ  j d7  _ t| ƒS rº  ©rh  r   r9   ©r#   r   r   r#     r¼  z3TestShgoReturns.test_1_nfev_simplicial.<locals>.funr   ©rh  r   r7   rš   rP  ©r   r   r¾  r   rÃ  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 )Nr¸  c                    rÁ  rº  rÂ  r9   rÃ  r   r   r#   $  r¼  z.TestShgoReturns.test_1_nfev_sobol.<locals>.funr   r‹   rW  rÄ  rÅ  r   rÃ  r   Útest_1_nfev_sobol!  s
   z!TestShgoReturns.test_1_nfev_sobolN)r   r   r   rÆ  rÇ  r   r   r   r   rÀ    s    rÀ  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	sCJ ‚d S )Nc                 S   ó   t  | ¡} t  | d ¡gS r  ©r7   Úasarrayr8   r9   r   r   r   Úquad0  ó   
z$test_vector_constraint.<locals>.quadgš™™™™™@rY   rn   r’  r‹   r"  r.   r„   )
r   r   r7   r>  r   r   Úallr8   r1   rò   )rË  ÚnlcÚoldcrŸ   r   r   r   Útest_vector_constraint.  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¡s*J ‚t t |jd
 ¡dk¡s9J ‚|js>J ‚d S )Nc                 S   rÈ  r  rÉ  r9   r   r   r   rË  ?  rÌ  ztest_trust_constr.<locals>.quadgÍÌÌÌÌÌ@rY   r0  rŠ  r’  r‹   )rŒ   r’   r�   r.   r„   )r   r   r   r7   rÍ  r8   r1   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ÍÌÌÌÌÌì?r   r.   c                 S   s   | d | d  S r‡   r   r9   r   r   r   ÚfaultyX  rˆ  z)test_equality_constraints.<locals>.faultyç333333@rï   c                 S   s   | d | d  d S )Nr   r/   rÓ  r   r9   r   r   r   rÒ  _  r:   rê   r!   rw  rX   c                 S   rz  r{  r   r9   r   r   r   rÒ  h  r}  c                 S   s   t  | ¡ S r   )r7   Úprodr9   r   r   r   rî   n  r  z+test_equality_constraints.<locals>.<lambda>r‹   )r   rŒ   r’   rn   )r   r   r   r   r7   r8   r1   )r   rÒ  rÎ  rŸ   rŒ   r   r   r   Útest_equality_constraintsT  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s(J ‚|jd d dks3J ‚d S )Nc                 S   s   t  | d ¡d S rA  r6   r9   r   r   r   r)   v  rC   ztest_gh16971.<locals>.consr    )r#   r"   r-  rV   r‚   gš™™™™™©?)ÚrhobegÚtolÚcatol)r0  r‘   r’  r.   )rŒ   r�   r0  Úcobylar‘   rØ  )r   r   r�   Úlower)r)   Úcr�   ru   r   r   r   Útest_gh16971u  s   

þÿrÜ  )	r   rŠ   r…   NNNNr‹   r/   )Er˜   r•  Únumpyr7   rK  Úmultiprocessingr   Únumpy.testingr   r   rË   r   r�  r   r½  r   r   r	   r
   r   r   r   r   Úscipy.optimize._constraintsr   Úscipy.optimize._shgor   r   r*   r+   r¥   rª   r®   r@   r>  r³   r·   rI   r»   rT   rÂ   rd   rÆ   rl   rp   r&   rg  ÚboundsLJrâ   r�   Úonesrè   rƒ   r¢  r†   r°  rÌ   rø   r    r¡   rÎ   rù   r˜  rÀ  rÐ  ÚfilterwarningsrÑ  rÕ  rÜ  r   r   r   r   Ú<module>   sÊ    (

ÿÿÿ÷ð
ü%þ
"ýþþ
	þþþ
þ":m    v

!