o
    hj                     @   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   Z/var/www/html/scripts/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   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   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   )r6   sinr/   r   r   r   r1   B      zStructTest2.fc                 C   s   dt j| dd S )N:   r   r3   r5   r8   r   r   r   r'   E   rB   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	>@)
rG   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   r8   r   r   r   g1   r9   zStructTest3.g1c                 C   s   | d d | d d  d S )Nr   r-   r.   rJ   r   r8   r   r   r   g2   rI   zStructTest3.g2c                 C   s0   | d | d  d | d d | d d  d fS )Nr   r.   rJ   r-   r   r8   r   r   r   r'         0zStructTest3.gr   N)r   r   r   rE   r1   rK   rL   r'   r   npinf_StructTest3__nlcr(   r   r   r   r   rH   j   s    
rH   )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   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   rY   r.   rX   rV      r   r8   r   r   r   rK      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   r8   r   r   r   rL      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   r8   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   r8   r   r   r   g4   s
   >

zStructTest4.g4Nr   r   r   rE   r1   rK   rL   r`   ra   r'   r)   r(   r   r   r   r   rT      s    rT   )irU   r[   )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          @r6   rA   sqrtabsr/   r   r   r   r1      
   &*zStructTest5.fNr:   r   r   r   r   rd          rd   )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   rY           r.   r-         ?rf   )printNintrange)r   r0   argsksijabxdydzdedudr   r   r   r1      s$   
zStructTestLJ.fNrD   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   r/   r   r   r   r1      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   r/   r   r   r   r1     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   r0   rs   r   r   r   r1     r2   zStructTestInfeasible.fc                 C   s   | d | d  d S Nr   r.   r   r8   r   r   r   rK   "  r9   zStructTestInfeasible.g1c                 C   s   | d | d  d  S r   r   r8   r   r   r   rL   %     zStructTestInfeasible.g2c                 C   s   | d  | d  d S r   r   r8   r   r   r   r`   (  r   zStructTestInfeasible.g3c                 C   s   | d  | d  d  S r   r   r8   r   r   r   ra   +  r2   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   r1   r   r(   ro   logginginfor   r6   testingr   r0   r   r#   r   xlr   funl)testrs   	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, multimodalrF   )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   rF   rV   )r   r   Nr   r   r   r   r   test_f5_2_sobol     z*TestShgoSobolTestFunctions.test_f5_2_sobolN)r   r   r   rE   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)]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_symmetryc                 C   s$   g ddd}t td|ddd dS )	z)Assymmetrically 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   )r6   meanr8   avgr   r   <lambda>  s    zFTestShgoSimplicialTestFunctions.test_f0_min_variance.<locals>.<lambda>r!   r<   r=   r   r   r   V瞯<r   N)r   r6   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 )Nrn   r   r   r8   r   r   r   r#     r9   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   rE   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(   r6   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ro   r8   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  r8   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   rY   )r.   r-   )funcr   rs   c                 S   s   d|  d S )Nr-   r.   r   r8   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(   r6   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(   r6   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 3max_iterr-   r   r   r   r   r   r   r   Nr   r   r1   r   r(   r6   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$  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 inits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-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.   )r6   arrayTr8   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   )r6   r<  r8   r   r   r   hess  r   z2TestShgoArguments.test_7_3_minkwargs.<locals>.hess)r.  r>  r@  z	Solver = zd====================================================================================================r   r/  r   r0  N)r   r   r   r   )r   r1  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)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  Nr4  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 )	rD  maxtimer   c                 S   s   t d dS )Ng+=rm   )timesleepr8   r   r   r   r1     s   
z0TestShgoArguments.test_10_finite_time.<locals>.frV   )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 == 0rm   T)r  r   rU   Nr   r   r   r.   )r   r   r1   r   r6   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 )rM  r   rm   )rH  r  r.   Nr   r   )r   r   r1   r   r6   r   rN  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   r8   r   r   r   r1        z/TestShgoArguments.test_13_high_sobol.<locals>.fr>   )   r   r   r-   rQ   N)r   sampling_function)r   r1   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   rF   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   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)r6   randomuniform)r   dr   r   r   sample  rB   z9TestShgoArguments.test_17_custom_sampling.<locals>.sampler@   r   Nr   )r   ra  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   )r6   squarer7   r8   r   r   r   r1     s   z1TestShgoArguments.test_18_bounds_class.<locals>.f)g      rn   g      )r   r   rR   )r   rn   rm   )r%   zipr   r   nfevmessager   r6   r<  r   r   r0   )	r   r1   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_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 )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 re   rg   r8   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   r8   r   r   r   r1   '  rM   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   )r0   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.   gfffffD@r-   gJ@rY      gRQ?gQ?gRQ?g     4@gףp=
?)r6   rh   r8   r   r   r   rL   0  s   2$z6TestShgoArguments.test_20_constrained_args.<locals>.g2c                 S   $   | d | d  | d  | d  d S Nr   r.   r-   rY   r   r8   r   r   r   h16     $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   rr  r1   r   ru  rL   ry  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-   )r6   r7   powerr8   r   r   r   r  F  s   z2TestShgoArguments.test_21_1_jac_true.<locals>.funcr;   r.   r-   r   rV   r   r-  T)r.  r>  )r   r   r   r   r   c                 S   s   t | d d|  fS r|  r5   r8   r   r   r   r  R  r   r   rY   )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 )NrY   r   r-   rV   r   r8   r   r   r   	objectivee  rz  zATestShgoArguments.test_21_2_derivative_options.<locals>.objectivec                 S   s   d| d  d S )Nr<   r   r-   r   r8   r   r   r   gradienth     z@TestShgoArguments.test_21_2_derivative_options.<locals>.gradientc                 S   rQ  Nr<   r   r8   r   r   r   r@  k  rS  z<TestShgoArguments.test_21_2_derivative_options.<locals>.hessc                 S   s   d| S r  r   )r0   rp  r   r   r   r  n  s   z=TestShgoArguments.test_21_2_derivative_options.<locals>.hesspr  r.  trust-constr)ir   r   r   r   )r~  r   N)r   r
   r   r6   r   r   r#   r0   )r   r  r  r  r@  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>  r@  r.  r9  r  rV   r   r   N)r   r   r   r   r
   r6   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 rR  r   )r0   rt   r   r   r   r#     r  z6TestShgoArguments.test_21_arg_tuple_sobol.<locals>.funr    c                 S   s   | d d S r   r   r8   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
   r6   r  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+  r2  r5  rA  rC  rE  xfailr   sysplatformrL  rO  r   rP  rX  rY  rZ  r[  rb  rn  rq  r{  r  parametrizer  r  r  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   FrX   )	r   r   r1   r   r6   r   rN  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_SobolrU  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 evaluationsrU   T)maxfevr   rY   r   r   r   r   FrW   N)	r   
test_tabler1   r   r6   r   rN  r   re  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  r1   r   r6   r   rN  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   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))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_infeasibler1   r   r(   r6   r   rN  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   r1   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.   )re  r8   r#   r   r   r   r#        z"TestShgoFailures.test.<locals>.fun)scipy.optimizer   r   re  ro   r0   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   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  re  r   r8   r#   r   r   r#     r  z3TestShgoReturns.test_1_nfev_simplicial.<locals>.funr   re  r   r6   r   rN  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  r8   r  r   r   r#   '  r  z.TestShgoReturns.test_1_nfev_sobol.<locals>.funr   r   rU  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|  rN   asarrayr7   r8   r   r   r   quad3     
z$test_vector_constraint.<locals>.quadg@rY   rn   r  r   r!  r-   r   )
r   r   rN   r<  r   r   allr7   r0   r   )r  nlc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  r8   r   r   r   r  B  r  ztest_trust_constr.<locals>.quadg@rY   r.  r  r  r   )r   r   r   r-   r   )r   r   r   rN   r  r7   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?r   r-   c                 S   s   | d | d  S r   r   r8   r   r   r   faulty[  r  z)test_equality_constraints.<locals>.faulty333333@r   c                 S   s   | d | d  d S )Nr   r.   r  r   r8   r   r   r   r  b  r9   r   r!   rt  rX   c                 S   rw  rx  r   r8   r   r   r   r  k  rz  c                 S   s   t |  S r   )rN   prodr8   r   r   r   r   q  r  z+test_equality_constraints.<locals>.<lambda>r   )r   r   r   rn   )r   r   r   r   rN   r7   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?  )rN   r7   r8   r   r   r   r(   y  rB   ztest_gh16971.<locals>.consr    )r#   r"   r,  rV   r   g?)rhobegtolcatol)r.  r   r  r-   )r   r   r.  cobylar   r  )r   r   r   lower)r(   cr   ru   r   r   r   test_gh16971x  s   

r  )	r   r   r   NNNNr   r.   )Er   r  r6   rN   rI  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   rH   r   rT   r   rd   r   rl   rp   r%   rd  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    (


%
"
	
":l   $u

!