o
    ij                     @   sD  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
j89dK			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
j8Ad_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   n/var/www/html/eduruby.in/lip-sync/lip-sync-env/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   s\   g }| d ur*t | turt | tur| f} n	 | D ]
} |d| d qt|}|S d }|S )N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      |d d |d d  S Nr         r   r   xr   r   r   f,      zStructTest1.fc                 C   s   t j| ddd  S )Nr   Zaxisg      @numpysumr0   r   r   r   r'   /      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   )r5   sinr/   r   r   r   r1   B      zStructTest2.fc                 C   s   dt j| dd S )N:   r   r3   r4   r7   r   r   r   r'   E   rA   zStructTest2.gNr   r   r   __doc__r1   r'   r)   r(   r   r   r   r   r>   =   s
    r>   )r   <   g⡽4$?0_r<g GK@g
]<@gI{_H@gi<&,@g>E@gqŤCQ4@g8$B@go.n:@g^5	>@)
rF   gs8g^V&+6g+?-2g+!/gN|1(gc=C#g^\gN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{Gz?r   r-   r.   r   r/   r   r   r   r1   |      zStructTest3.fc                 C   s   | d | d  d S )Nr   r.         9@r   r7   r   r   r   g1   r8   zStructTest3.g1c                 C   s   | d d | d d  d S )Nr   r-   r.   rI   r   r7   r   r   r   g2   rH   zStructTest3.g2c                 C   s0   | d | d  d | d d | d d  d fS )Nr   r.   rI   r-   r   r7   r   r   r   r'         0zStructTest3.gr   N)r   r   r   rD   r1   rJ   rK   r'   r   npinfZ_StructTest3__nlcr(   r   r   r   r   rG   j   s    
rG   )r-   2   )r   rO   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   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   rW   r.   rV   rT      r   r7   r   r   r   rJ      s
   6
zStructTest4.g1c                 C   s>   d| d  d| d   d| d d   | d  | d  d  S )	NrY   r   rW   r.   rS   r-   rV   g     q@r   r7   r   r   r   rK      s   >zStructTest4.g2c                 C   s:   d| d  | d d  d| d d   d| d   d  S )	N   r   r.   r-   r;   rT   rZ      r   r7   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 )	NrV   r   r-   r.   rW   rT   rX   r;   r   r7   r   r   r   g4   s
   >

zStructTest4.g4Nr   r   r   rD   r1   rJ   rK   r^   r_   r'   r)   r(   r   r   r   r   rR      s    rR   )irS   rY   )gܤ@g$H8?g	޿g0ev@gn8)gk_@/?g0g+?gP{[
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          @r5   r@   sqrtabsr/   r   r   r   r1      
   &*zStructTest5.fNr9   r   r   r   r   rb          rb   )i i   g g      @gyCy@)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   rW           r.   r-         ?rd   )printNintrange)r   r0   argsksijabZxdZydZzdZedZudr   r   r   r1      s$   
zStructTestLJ.fNrC   r   r   r   r   rj      s
    rj   r;   g            @      c                   @   ra   )StructTestSc                 C   s@   |d d d |d d d  |d d d  |d d d  S )Nr         ?r-   r.   rW   r   r/   r   r   r   r1      s
   zStructTestS.fNr9   r   r   r   r   rz      s    rz   )r   rd   rV   rk   r{   c                   @   ra   )StructTestTablec                 C   s    |d dkr|d dkrdS dS )Nr         @r.   rO   d   r   r/   r   r   r   r1     s   zStructTestTable.fNr9   r   r   r   r   r|   
  ri   r|   rO   r}   c                   @   rQ   )StructTestInfeasiblez0
    Test function with no feasible domain.
    c                 G   r+   r,   r   )r   r0   rq   r   r   r   r1     r2   zStructTestInfeasible.fc                 C   s   | d | d  d S Nr   r.   r   r7   r   r   r   rJ   "  r8   zStructTestInfeasible.g1c                 C   s   | d | d  d  S r   r   r7   r   r   r   rK   %     zStructTestInfeasible.g2c                 C   s   | d  | d  d S r   r   r7   r   r   r   r^   (  r   zStructTestInfeasible.g3c                 C   s   | d  | d  d  S r   r   r7   r   r   r   r_   +  r2   zStructTestInfeasible.g4Nr`   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)	rq   constraintsniterscallbackminimizer_kwargsoptionssampling_methodworkerszres = rtolatolr   )r   r1   r   r(   rm   logginginfor   r5   testingr   r0   r   r#   r   Zxlr   Zfunl)testrq   	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      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     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_sobolf  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_sobolk  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_sobolq  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_sobolv  r   z*TestShgoSobolTestFunctions.test_f2_2_sobolc                 C   r   )%NLP: Hock and Schittkowski problem 18Nr   test3_1r   r   r   r   test_f3_sobol{  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, multimodalrE   )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   rE   rT   )r   r   Nr   r   r   r   r   test_f5_2_sobol     z*TestShgoSobolTestFunctions.test_f5_2_sobolN)r   r   r   rD   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   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)]rT   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   rY   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Zsymmetryr   r;   ,  r.   r   rq   r   r   r   r   Nr   testLJr   r   rq   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_symmetryc                 C   s$   g ddd}t td|ddd dS )	z)Assymmetrically constrained test function)r   r   r   rW   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   )r5   meanr7   Zavgr   r   <lambda>  s    zFTestShgoSimplicialTestFunctions.test_f0_min_variance.<locals>.<lambda>r!   r;   r<   r   r   r   V瞯<r   N)r   r5   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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 )Nrl   r{   r   r7   r   r   r   r#     r8   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   rD   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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&d=d> Z'd?d@ Z(dAdB Z)e
j*dCg dDdEdF Z+dGdH Z,dIdJ Z-dKS )L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   r1   r   r(   r5   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      t d d S Nz Local minimization callback testrm   r7   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   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   r   r   r   r7   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   )r0   yzr   r   r   r   7      z5TestShgoArguments.test_args_gh14589.<locals>.<lambda>)r   rW   )r.   r-   )funcr   rq   c                 S   s   d|  d S )Nr-   r.   r   r7   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   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 evalutionsr   Tr.   )r  r	  r   
local_iterNr   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   Nr   r   r   r   r   r   r   r   )r   r   r   r1   r   r(   r5   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   r   r   N
r   r   r1   r   r(   r5   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 1r   r   r   r   r   Nr  r   r   r   r   test_5_2_sobol_arglessk  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 3Zmax_iterr-   r   r   r   r   r   r   r   Nr   r   r1   r   r(   r5   r   r   r0   r   r#   r   r  r   r   r   test_6_1_simplicial_max_iterr     z.TestShgoArguments.test_6_1_simplicial_max_iterc                 C   r  )	r  Zmin_iterr-   r   r  r   r   r   Nr  r  r   r   r   test_6_2_simplicial_min_iter{  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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 initsZftolr   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 ]&}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.   )r5   arrayTr7   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   )r5   r)  r7   r   r   r   hess  r   z2TestShgoArguments.test_7_3_minkwargs.<locals>.hess)r!  r+  r-  z	Solver = zd====================================================================================================r~   r"  r   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sJ dS )	r0  maxtimer   c                 S   s   t d dS )Ng+=rk   )timesleepr7   r   r   r   r1     s   
z0TestShgoArguments.test_10_finite_time.<locals>.frT   )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 == 0rk   T)r  r   rS   Nr   r   r   r.   )r   r   r1   r   r5   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 )r9  r   rk   )r4  r  r.   Nr   r   )r   r   r1   r   r5   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      dS Nr   r   r7   r   r   r   r1        z/TestShgoArguments.test_13_high_sobol.<locals>.fr=   )   r   r   r-   rO   N)r   Zsampling_function)r   r1   r   Z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  rV   rE   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.   rY   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   Tr!  znelder-meadr   )r   r   r   Nr   )r   r   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)r5   randomuniform)r   dr   r   r   sample  rA   z9TestShgoArguments.test_17_custom_sampling.<locals>.sampler?   r   Nr   )r   rK  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   )r5   Zsquarer6   r7   r   r   r   r1     s   z1TestShgoArguments.test_18_bounds_class.<locals>.f)g      rl   g      )ry   r}   rP   )ry   rl   rk   )r%   zipr   r   nfevmessager   r5   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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 )rF  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 rc   re   r7   r   r   r   	eggholder!  rh   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@rW   r   r7   r   r   r   r1   '  rL   z5TestShgoArguments.test_20_constrained_args.<locals>.fr   rl   rV   c                 S   s<   |d | d  |d | d   d| d   d| d   d	 S )
Ngffffff@r   gffffff@r.   g333333&@r-   g?rW   rT   r   )r0   rt   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 )NrU   r   g'@r.   gfffffD@r-   gJ@rW      gRQ?gQ?gRQ?g     4@gףp=
?)r5   rf   r7   r   r   r   rK   0  s   2$z6TestShgoArguments.test_20_constrained_args.<locals>.g2c                 S   $   | d | d  | d  | d  d S Nr   r.   r-   rW   r   r7   r   r   r   h16     $z6TestShgoArguments.test_20_constrained_args.<locals>.h1r    )r   )r"   r#   rq   r!   r   r   r.   )r   r   r   r   )r   r   r   r   N)r   )r   rT  r1   r   rW  rK   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-   )r5   r6   powerr7   r   r   r   r  F  s   z2TestShgoArguments.test_21_1_jac_true.<locals>.funcr:   r.   r-   r~   rT   r   r   T)r!  r+  )r   r   r   r   r   c                 S   s   t | d d|  fS r^  r4   r7   r   r   r   r  R  r   r   rW   )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 )NrW   r   r-   rT   r   r7   r   r   r   	objectivee  r\  zATestShgoArguments.test_21_2_derivative_options.<locals>.objectivec                 S   s   d| d  d S )Nr;   r   r-   r   r7   r   r   r   gradienth     z@TestShgoArguments.test_21_2_derivative_options.<locals>.gradientc                 S   r=  Nr;   r   r7   r   r   r   r-  k  r?  z<TestShgoArguments.test_21_2_derivative_options.<locals>.hessc                 S   s   d| S rh  r   )r0   rR  r   r   r   rd  n  s   z=TestShgoArguments.test_21_2_derivative_options.<locals>.hessprc  r!  trust-constr)ir~   r   r   r   )r`  r   N)r   r
   r   r5   r   r   r#   r0   )r   rb  re  rf  r-  rd  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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?rl  r   gffffff?rm  rm  )r+  r-  r!  r(  rj  rT   r   r   N)r   r   r   r   r
   r5   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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 r>  r   )r0   rr   r   r   r   r#     r   z6TestShgoArguments.test_21_arg_tuple_sobol.<locals>.funr    c                 S   s   | d d S r   r   r7   r   r   r   r     r  z;TestShgoArguments.test_21_arg_tuple_sobol.<locals>.<lambda>r!   r   rS   )r.   r   )rq   r   r   r.   )r   rq   r   N)r   r
   r5   rn  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/  r1  Zxfailr   sysplatformr8  r;  r   r<  rB  rC  rD  rE  rL  rP  rS  r]  ra  Zparametrizerk  ro  rq  r   r   r   r   r     sT    		


		



$
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-   Nr   r   FrV   )	r   r   r1   r   r5   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_SobolrA  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 evaluationsrS   T)Zmaxfevr   rW   r   r   r   r   FrU   N)	r   
test_tabler1   r   r5   r   r:  r   rN  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 evaluationsrS   Tmaxevr   rW   r   rz  FN)r   r{  r1   r   r5   r   r:  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;   rW   rW   rT   Nrw  rx  r   r   r1   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))rW   rT   rT   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_infeasibler1   r   r(   r5   r   r:  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 highrd   r   Tr.   Fr  Nr   r  )r   r   r1   r   r(   r   UserWarningr   )r   r   rq   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.   )rN  r7   r#   r   r   r   r#        z"TestShgoFailures.test.<locals>.fun)scipy.optimizer   r   rN  rm   r0   r#   )r   r   r   resultr   r  r   r     s   
zTestShgoFailures.testN)r   r   r   rv  ry  r|  r  r  r  r  r  r  r  r   r   r   r   r   rt    s    
	rt  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  rN  r   r7   r#   r   r   r#     r  z3TestShgoReturns.test_1_nfev_simplicial.<locals>.funr   rN  r   r5   r   r:  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  r7   r  r   r   r#   '  r  z.TestShgoReturns.test_1_nfev_sobol.<locals>.funr   r   rA  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^  rM   Zasarrayr6   r7   r   r   r   quad3     
z$test_vector_constraint.<locals>.quadg@rW   rl   rp  r   r  r-   r}   )
r   r   rM   r)  r   r   allr6   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s*J tt|jd
 dks9J |js>J d S )Nc                 S   r  r^  r  r7   r   r   r   r  B  r  ztest_trust_constr.<locals>.quadg@rW   r!  ri  rp  r   )r   r   r   r-   r}   )r   r   r   rM   r  r6   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?rx   r-   c                 S   s   | d | d  S r   r   r7   r   r   r   faulty[  rg  z)test_equality_constraints.<locals>.faulty333333@r   c                 S   s   | d | d  d S )Nr   r.   r  r   r7   r   r   r   r  b  r8   r   r!   rV  rV   c                 S   rY  rZ  r   r7   r   r   r   r  k  r\  c                 S   s   t |  S r   )rM   prodr7   r   r   r   r   q  r  z+test_equality_constraints.<locals>.<lambda>r   )r   r   r   rl   )r   r   r   r   rM   r6   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s(J |jd d dks3J d S )Nc                 S   s   t | d d S r,  )rM   r6   r7   r   r   r   r(   y  rA   ztest_gh16971.<locals>.consr    )r#   r"   r  rT   r{   g?)ZrhobegZtolcatol)r!  r   rp  r-   )r   r   r!  Zcobylar   r  )r   r   r   lower)r(   cr   rs   r   r   r   test_gh16971x  s   

r  )	r   r   r~   NNNNr   r.   )Er   rr  r5   rM   r5  multiprocessingr   Znumpy.testingr   r   r   r   rw  r   r  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   rG   r   rR   r   rb   r   rj   rn   r%   rM  ZboundsLJr   rz   Zonesr   r|   r{  r   r  r   r   r   r   r   r   rt  r  r  filterwarningsr  r  r  r   r   r   r   <module>   s    (


%
"
	
":l   $u

!