
    S_fc                        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	      Zd
 Z G d de      Z eddgd d g      Z eddgd d g      Z eddgd d g      Z  G d de      Z! e!dgdgd ejD                  dgdgdgdgdgdgdgdgdgdgg
       ejD                  g d             Z# e!d!gdgdg ejD                  dgg       ejD                  dg             Z$ G d" d#e      Z% e%d$d%gd&d'gd()      Z& G d* d+e      Z' e'd,gd-z  g d.d/)      Z( G d0 d1e      Z) e)d2d2gd3gd4d5g6      Z* G d7 d8e      Z+d9Z, e- e.d:gd9z  d;gd9z              Z/ e+e/d<gd6      Z0 G d= d>e      Z1 e1d?gd@z  dA ejd                  d@      dBz
  6      Z3 G dC dDe      Z4 e4d,d,gdEgdFdFg6      Z5 G dG dHe      Z6 e6d$dIgdd6      Z7e
jp                  js                  dJ      	 	 	 d[dK       Z: G dL dM      Z; G dN dO      Z< G dP dQ      Z= G dR dS      Z> G dT dU      Z?dV Z@e
jp                  j                  dW      dX        ZBdY ZCdZ ZDy)\    N)Pool)assert_allcloseIS_PYPY)raiseswarns)shgoBoundsminimize_scalarminimizerosen	rosen_der
rosen_hessNonlinearConstraint)new_constraint_to_old)SHGOc                       e Zd Z	 	 ddZy)StructTestFunctionNc                 J    || _         || _        || _        || _        || _        y Nbounds
expected_xexpected_funexpected_xlexpected_funl)selfr   r   r   r   r   s         ?lib/python3.12/site-packages/scipy/optimize/tests/test__shgo.py__init__zStructTestFunction.__init__   s(    $(&*    )NNN)__name__
__module____qualname__r    r   r   r   r      s    8<15+r   r   c                     g }| Ct        | t        t        f      s| f} n	 | D ]  } |j                  d| d        t        |      }|S d }|S )Nineqtypefun)
isinstancetuplelistappend)gconss     r   wrap_constraintsr/      sg    D}!eT]+A 	$AKK !# $	$ T{ K Kr   c                   (    e Zd Zd Zd Z ee      Zy)StructTest1c                 $    |d   dz  |d   dz  z   S Nr         r#   r   xs     r   fzStructTest1.f,       tqy1Q419$$r   c                 8    t        j                  | d      dz
   S )Nr   axisg      @numpysumr7   s    r   r-   zStructTest1.g/   s    11%+,,r   Nr    r!   r"   r8   r-   r/   r.   r#   r   r   r1   r1   +   s    %- ADr   r1   )   )r   r   r   r5   NNc                   ,    e Zd ZdZd Zd Z ee      Zy)StructTest2zN
    Scalar function with several minima to test all minimiser retrievals
    c                 8    |dz
  t        j                  |      z  S )N   )r>   sinr6   s     r   r8   zStructTest2.fB   s    B%))A,&&r   c                 6    dt        j                  | d      z
  S )N:   r   r;   r=   r@   s    r   r-   zStructTest2.gE   s    EIIaa(((r   Nr    r!   r"   __doc__r8   r-   r/   r.   r#   r   r   rG   rG   =   s    ') ADr   rG   )r   <   g⡽4$?0_r<g GK@g
]<@gI{_H@gi<&,@g>E@gqŤCQ4@g8$B@go.n:@g^5	>@)
rP   gs8g^V&+6g+?-2g+!/gN|1(gc=C#g^\gNg自ݿr   )r   g      @c                   V    e Zd ZdZd Zd Zd Zd Z eede	j                        ZefZy)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                 *    d|d   dz  z  |d   dz  z   S )Ng{Gz?r   r4   r5   r#   r6   s     r   r8   zStructTest3.f|   s"    qtk!QqTaK//r   c                     | d   | d   z  dz
  S )Nr   r5         9@r#   r@   s    r   g1zStructTest3.g1   s    tad{T!!r   c                 *    | d   dz  | d   dz  z   dz
  S )Nr   r4   r5   rU   r#   r@   s    r   g2zStructTest3.g2   s"    tqy1Q419$t++r   c                 F    | d   | d   z  dz
  | d   dz  | d   dz  z   dz
  fS )Nr   r5   rU   r4   r#   r@   s    r   r-   zStructTest3.g   s8    tad{T!1Q419qtqy#84#???r   r   N)r    r!   r"   rN   r8   rV   rX   r-   r   npinf_StructTest3__nlcr.   r#   r   r   rR   rR   j   s7    "0",@  1bff-E8Dr   rR   )r4   2   )r   r]   g'In/@gS[:XL?      @)r   r   r   c                   J    e Zd ZdZd Zd Zd Zd Zd ZeeeefZ	 e
e	      Zy)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                     |d   dz
  dz  d|d   dz
  dz  z  z   |d   dz  z   d|d   d	z
  dz  z  z   d|d   d
z  z  z   d|d   dz  z  z   |d
   dz  z   d|d   z  |d
   z  z
  d|d   z  z
  d|d
   z  z
  S )Nr   
   r4      r5               rC         r#   r6   s     r   r8   zStructTest4.f   s    1q 1!r	a'7#77!A$!)CqtbyQ&&')+adai8:;adai-HJKKK ad(QqT/" %'1I. 12AaD9 	r   c                 n    d| d   dz  z  d| d   dz  z  z   | d   z   d| d   dz  z  z   d| d   z  z   dz
   S )Nr4   r   rf   r5   re   rc      r#   r@   s    r   rV   zStructTest4.g1   s^    QqTQYQqTQY.15AaDAIEqt8!" # 	#r   c                 \    d| d   z  d| d   z  z   d| d   dz  z  z   | d   z   | d   z
  dz
   S )	Nrh   r   rf   r5   rb   r4   re   g     q@r#   r@   s    r   rX   zStructTest4.g2   sH    QqTA!H$rAaDAI~5!<qtCeKLLr   c                 V    d| d   z  | d   dz  z   d| d   dz  z  z   d| d   z  z
  dz
   S )	N   r   r5   r4   rC   rc   ri      r#   r@   s    r   g3zStructTest4.g3   sC    adQqTQY&QqTQY6QqTACGHHr   c                     d| d   dz  z  | d   dz  z   d| d   z  | d   z  z
  d| d   dz  z  z   d| d   z  z   d| d   z  z
   S )	Nre   r   r4   r5   rf   rc   rg   rC   r#   r@   s    r   g4zStructTest4.g4   sn    QqTQY1*Q1X!_<q1Q419}Lqt8 1Q4i( ) 	)r   Nr    r!   r"   rN   r8   rV   rX   rp   rr   r-   r/   r.   r#   r   r   r`   r`      s<    #MI) 
RRAADr   r`   )irb   rh   )gܤ@g$H8?g	޿g0ev@gn8)gk_@/?g0g+?gP{[
E@c                   &    e Zd Zd ZdZ ee      Zy)StructTest5c                    |d   dz    t        j                  t        j                  t        |d   dz  |d   dz   z                     z  |d   t        j                  t        j                  t        |d   |d   dz   z
                    z  z
  S Nr5   g     G@r          @r>   rJ   sqrtabsr6   s     r   r8   zStructTest5.f   s    A$+))EJJs1Q4#:1+E'FGHIA$5::c!A$!A$+2F.G#HIIJ 	r   NrA   r#   r   r   ru   ru      s     	AADr   ru   )i i   g g      @gyCy@)r   r   r   c                   *    e Zd ZdZd ZdZ ee      Zy)StructTestLJzZ
    LennardJones objective function. Used to test symmetry constraints
    settings.
    c                    t        d|        |d   | _        t        | j                  dz        }d}t        |dz
        D ]z  }t        |dz   |      D ]f  }d|z  }d|z  }||   ||   z
  }	||dz      ||dz      z
  }
||dz      ||dz      z
  }|	|	z  |
|
z  z   ||z  z   }||z  |z  }|dkD  sY|d|z  dz
  |z  z  }h | |S )	Nzx = r   rf           r5   r4         ?rx   )printNintrange)r   r7   argsksijabxdydzdeduds                 r   r8   zStructTestLJ.f   s   QCja
Oq1u 
	/A1q5!_ 	/EEqTAaD[q1uX!a%(q1uX!a%("WrBw&b0"Wr\8#(S.B..A	/
	/ r   NrM   r#   r   r   r}   r}      s    
( 	AADr   r}   rC   g            @      c                   &    e Zd Zd ZdZ ee      Zy)StructTestSc                 `    |d   dz
  dz  |d   dz
  dz  z   |d   dz
  dz  z   |d   dz
  dz  z   S )Nr         ?r4   r5   rf   r#   r6   s     r   r8   zStructTestS.f   sS    1!QqTCZA$55Q4#:!#$'(tcza&78 	9r   NrA   r#   r   r   r   r      s    9 	AADr   r   )r   rx   re   r   r   c                   &    e Zd Zd ZdZ ee      Zy)StructTestTablec                 &    |d   dk(  r	|d   dk(  ryy)Nr         @r5   r]   d   r#   r6   s     r   r8   zStructTestTable.f  s    Q43;1Q43;r   NrA   r#   r   r   r   r   
  s     	AADr   r   r]   r   c                   J    e Zd ZdZd Zd Zd Zd Zd ZeeeefZ	 e
e	      Zy)StructTestInfeasiblez0
    Test function with no feasible domain.
    c                 $    |d   dz  |d   dz  z   S r3   r#   )r   r7   r   s      r   r8   zStructTestInfeasible.f  r9   r   c                     | d   | d   z   dz
  S Nr   r5   r#   r@   s    r   rV   zStructTestInfeasible.g1"  s    tad{Qr   c                      | d   | d   z   dz
   S r   r#   r@   s    r   rX   zStructTestInfeasible.g2%  s    1!q!!r   c                      | d    | d   z   dz
  S r   r#   r@   s    r   rp   zStructTestInfeasible.g3(  s    !uqt|ar   c                 "    | d    | d   z   dz
   S r   r#   r@   s    r   rr   zStructTestInfeasible.g4+  s    A$1!""r   Nrs   r#   r   r   r   r     s:    %" # 
RRAADr   r   )rB   r5   
Not a testc
                    t        | j                  | j                  || j                  |||||||	      }
t	        d|
        t        j                  d|
        | j                  7t        j                  j                  |
j                  | j                  ||       | j                  6t        j                  j                  |
j                  | j                  |       | j                  6t        j                  j                  |
j                  | j                  |       | j                   6t        j                  j                  |
j"                  | j                   |       y )N)	r   constraintsniterscallbackminimizer_kwargsoptionssampling_methodworkerszres = rtolatolr   )r   r8   r   r.   r   logginginfor   r>   testingr   r7   r   r(   r   xlr   funl)testr   	test_atolr   r   r   r   r   r   r   ress              r   run_testr   8  s3    tvvt{{499%( 0'.AC
 
F3%.LL6# "%%ceeT__+4+4 	& 	6
 $%%cgg&*&7&7+4 	& 	6 #%%cff&*&6&6+4 	& 	6 %%%chh&*&8&8+4 	& 	6 r   c                   x    e Zd ZdZd Zd Zd Zd Zd Zd Z	e
j                  j                  d        Zd	 Zd
 Zy)TestShgoSobolTestFunctionsz8
    Global optimisation tests with Sobol sampling:
    c                 "    t        t               y)VMultivariate test function 1:
        x[0]**2 + x[1]**2 with bounds=[(-1, 6), (-1, 6)]Nr   test1_1r   s    r   test_f1_1_sobolz*TestShgoSobolTestFunctions.test_f1_1_sobola       	r   c                 "    t        t               y)zUMultivariate test function 1:
         x[0]**2 + x[1]**2 with bounds=[(0, 1), (0, 1)]Nr   test1_2r   s    r   test_f1_2_sobolz*TestShgoSobolTestFunctions.test_f1_2_sobolf  r   r   c                 .    ddi}t        t        |       y)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   s     r   test_f1_3_sobolz*TestShgoSobolTestFunctions.test_f1_3_sobolk  s     4.'*r   c                 "    t        t               y)RUnivariate test function on
        f(x) = (x - 30) * sin(x) with bounds=[(0, 60)]Nr   test2_1r   s    r   test_f2_1_sobolz*TestShgoSobolTestFunctions.test_f2_1_sobolq  r   r   c                 "    t        t               y)NUnivariate test function on
        f(x) = (x - 30) * sin(x) bounds=[(0, 4.5)]Nr   test2_2r   s    r   test_f2_2_sobolz*TestShgoSobolTestFunctions.test_f2_2_sobolv  r   r   c                 "    t        t               y)%NLP: Hock and Schittkowski problem 18Nr   test3_1r   s    r   test_f3_sobolz(TestShgoSobolTestFunctions.test_f3_sobol{  s
    r   c                 0    ddi}t        t        d|       y)?NLP: (High dimensional) Hock and Schittkowski 11 problem (HS11)infty_constraintsFi  r   r   Nr   test4_1r   s     r   test_f4_sobolz(TestShgoSobolTestFunctions.test_f4_sobol  s     '.GW5r   c                 &    t        t        d       y)NLP: Eggholder, multimodalrO   )r   Nr   test5_1r   s    r   test_f5_1_sobolz*TestShgoSobolTestFunctions.test_f5_1_sobol  s     	Br   c                 (    t        t        dd       y)r   rO   rc   )r   r   Nr   r   s    r   test_f5_2_sobolz*TestShgoSobolTestFunctions.test_f5_2_sobol  s     	Ba(r   N)r    r!   r"   rN   r   r   r   r   r   r   pytestmarkslowr   r   r   r#   r   r   r   r   [  sM    


+

 [[6 6 
)r   r   c                      e Zd ZdZd Zd Zd Zd Zd Zd Z	e
j                  j                  d        Zd	 Zd
 Zd Zd Ze
j                  j%                  d      d        Ze
j                  j%                  d      d        Zy)TestShgoSimplicialTestFunctionsz=
    Global optimisation tests with Simplicial sampling:
    c                 (    t        t        dd       y)r   r5   
simplicialr   r   Nr   r   s    r   test_f1_1_simplicialz4TestShgoSimplicialTestFunctions.test_f1_1_simplicial       	A|<r   c                 (    t        t        dd       y)zTMultivariate test function 1:
        x[0]**2 + x[1]**2 with bounds=[(0, 1), (0, 1)]r5   r   r   Nr   r   s    r   test_f1_2_simplicialz4TestShgoSimplicialTestFunctions.test_f1_2_simplicial  r   r   c                 (    t        t        dd       y)z_Multivariate test function 1: x[0]**2 + x[1]**2
        with bounds=[(None, None),(None, None)]rc   r   r   Nr   r   s    r   test_f1_3_simplicialz4TestShgoSimplicialTestFunctions.test_f1_3_simplicial  r   r   c                 4    ddi}t        t        dd|d       y)r   minimize_every_iterF   rh   r   r   r   r   r   Nr   r   s     r   test_f2_1_simplicialz4TestShgoSimplicialTestFunctions.test_f2_1_simplicial  s!     )%0Cq'!-	/r   c                 (    t        t        dd       y)r   r5   r   r   Nr   r   s    r   test_f2_2_simplicialz4TestShgoSimplicialTestFunctions.test_f2_2_simplicial  r   r   c                 (    t        t        dd       y)r   r5   r   r   Nr   r   s    r   test_f3_simplicialz2TestShgoSimplicialTestFunctions.test_f3_simplicial  s    A|<r   c                 (    t        t        dd       y)r   r5   r   r   Nr   r   s    r   test_f4_simplicialz2TestShgoSimplicialTestFunctions.test_f4_simplicial  r   r   c                 <    ddd}d}t        t        |d|dd       y)	z&LJ: Symmetry-constrained test functionTsymmetryr   rC   ,  r5   r   r   r   r   r   r   Nr   testLJr   r   r   s      r   test_lj_symmetry_oldz4TestShgoSimplicialTestFunctions.test_lj_symmetry_old  s*    #!dc !-	/r   c                 D    dgdz  dd}d}t        t        |d|dd	       y
)z&LJ: Symmetry constrained test functionr   rC   Tr  r  r  r5   r   r	  Nr
  r  s      r   test_f5_1_lj_symmetryz5TestShgoSimplicialTestFunctions.test_f5_1_lj_symmetry  s0     !uqy!dc !-	/r   c                 :    ddgdd}t        t        d|dd       y)	z"Symmetry constrained test functionr   Tr  r   r5   r   r   r   r   r   Nr   r   s     r   test_f5_2_cons_symmetryz7TestShgoSimplicialTestFunctions.test_f5_2_cons_symmetry  s)     !1v! 	C !-	/r   c                 :    g ddd}t        t        d|dd       y)	z)Assymmetrically constrained test function)r   r   r   rf   Tr  i'  r5   r   r  N)r   test_sr   s     r   test_f5_3_cons_symmetryz7TestShgoSimplicialTestFunctions.test_f5_3_cons_symmetry  s&    +! 	5 !-	/r   r   c                     ddfdd}t        t        j                  ddgz  |      }|j                  sJ t	        |j
                  dd	
       t	        |j                  d       y)zOReturn a minimum on a perfectly symmetric problem, based on
            gh10429r   eqc                 4    t        j                  |       z
  S r   )r>   mean)r7   avgs    r   <lambda>zFTestShgoSimplicialTestFunctions.test_f0_min_variance.<locals>.<lambda>  s    uzz!}s/B r   r&   rC   rD   r   r   r   V瞯<r   N)r   r>   varsuccessr   r(   r7   )r   r.   r   r  s      @r   test_f0_min_variancez4TestShgoSimplicialTestFunctions.test_f0_min_variance  sY     %BC 599Q&\tD{{{/s#r   c                     d }dg}t        ||      }t        ||d         }|j                  sJ t        |j                  |j                         t        |j
                  |j
                  d       y)zRReturn a minimum on a perfectly symmetric 1D problem, based on
            gh10538c                     | | dz
  z  | dz
  z  S )Nr   r   r#   r@   s    r   r(   zDTestShgoSimplicialTestFunctions.test_f0_min_variance_1D.<locals>.fun  s    C=AG,,r   rD   )r   r   ư>)r   N)r   r
   r  r   r(   r7   )r   r(   r   r   refs        r   test_f0_min_variance_1Dz7TestShgoSimplicialTestFunctions.test_f0_min_variance_1D  s^    
	- 3v&c&)4{{{)suu40r   N)r    r!   r"   rN   r   r   r   r   r   r  r   r   r   r  r  r  r  r  skipr   r%  r#   r   r   r   r     s    =
=
=
/=
= [[= =//// [[l#
$ $
$ [[l#1 $1r   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j                  j                  d        Ze
j                  j                  d	        Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Ze
j                  j3                  exr ej8                  dk(  d      d        Zd Ze
j                  j?                  d      d        Z d Z!d Z"d Z#d Z$d Z%d  Z&d! Z'd" Z(d# Z)e
j                  jU                  d$g d%      d&        Z+d' Z,d( Z-y))*TestShgoArgumentsc                 *    t        t        ddd       y)z>Iterative simplicial sampling on TestFunction 1 (multivariate)Nr4   r   r   r   r   r   r   s    r   test_1_1_simpl_iterz%TestShgoArguments.test_1_1_simpl_iter  s    D<Hr   c                 4    ddi}t        t        dd|d       y)z3Iterative simplicial on TestFunction 2 (univariate)r   FN	   r   r   r   r   s     r   test_1_2_simpl_iterz%TestShgoArguments.test_1_2_simpl_iter  s    (%0D7!-	/r   c                 *    t        t        ddd       y)z9Iterative Sobol sampling on TestFunction 1 (multivariate)Nr5   sobolr*  r   r   s    r   test_2_1_sobol_iterz%TestShgoArguments.test_2_1_sobol_iter  s    D7Cr   c                 d   t        t        j                  t        j                  t        j                  ddd      }t
        j                  j                  |j                  t        j                  dd       t
        j                  j                  |j                  t        j                  d       y)z7Iterative Sobol sampling on TestFunction 2 (univariate)Nr5   r0  )r   r   r   r   h㈵>r   r   )r   r   r8   r   r.   r>   r   r   r7   r   r(   r   r   r   s     r   test_2_2_sobol_iterz%TestShgoArguments.test_2_2_sobol_iter  st    799gnn',,G= 	%%ceeW-?-?d+/ 	& 	1%%cggw/C/C$%Or   c           
          d }t         t        fD ]P  }t        |j                  |j                  dd|ddi       t        |j                  |j                  dd|ddi       R y)	zKIterative sampling on TestFunction 1 and 2  (multi and univariate)
        c                     t        d       y Nz Local minimization callback testr   r@   s    r   callback_funczATestShgoArguments.test_3_1_disp_simplicial.<locals>.callback_func      45r   r5   r   r   Tr   r   r   r   r   r   r   r   Nr   r   r   r8   r   r   r:  r   s      r   test_3_1_disp_simplicialz*TestShgoArguments.test_3_1_disp_simplicial  sf    	6 g& 	ADA!-'&$A <'&$A		Ar   c           
          d }t         t        fD ]P  }t        |j                  |j                  dd|ddi       t        |j                  |j                  dd|ddi       R y	)
zAIterative sampling on TestFunction 1 and 2 (multi and univariate)c                     t        d       y r8  r9  r@   s    r   r:  z<TestShgoArguments.test_3_2_disp_sobol.<locals>.callback_func*  r;  r   r5   r0  r   Tr<  r   r=  Nr>  r?  s      r   test_3_2_disp_sobolz%TestShgoArguments.test_3_2_disp_sobol'  se    	6 g& 	ADAw'&$A <'&$A		Ar   c                     t        d dgd      }t        d dg      }t        |j                  |j                         t        |j                  |j                         y)zMUsing `args` used to cause `shgo` to fail; see #14589, #15986,
        #16506c                     | |z  |z   S r   r#   )r7   yzs      r   r  z5TestShgoArguments.test_args_gh14589.<locals>.<lambda>7  s    A	 r   )r   rf   )r5   r4   )funcr   r   c                     d| z  dz   S )Nr4   r5   r#   r@   s    r   r  z5TestShgoArguments.test_args_gh14589.<locals>.<lambda>9  s    !a%!) r   )rH  r   N)r   r   r(   r7   )r   r   r$  s      r   test_args_gh14589z#TestShgoArguments.test_args_gh145894  sJ     16( +VH=)suu%r   c                 T    t         j                  ddd}t        t         dd|d       y)z,Test known function minima stopping criteriar#  T)f_minf_tolr   Nr3  r   r   r   r   r   r   r   r   r   s     r   test_4_1_known_f_minz&TestShgoArguments.test_4_1_known_f_min=  s/     $00 *.0 	DD'!-	/r   c                 V    t         j                  dddd}t        t         dd|d       y)	z+Test Global mode limiting local evaluationsr#  Tr5   )rL  rM  r   
local_iterNr3  r   rN  rO  r   s     r   test_4_2_known_f_minz&TestShgoArguments.test_4_2_known_f_minH  s2     ))#' 	DD'!-	/r   c           	         t         j                  ddddd}t        t         j                  t         j                  t         j
                  dd|d      }t        j                  j                  |j                  t         j                  d	d	
       y)z8Test Global mode limiting local evaluations for 1D funcsr#  Tr5   FrL  rM  r   rR  r   Nr0  r   r   r   r   r   r3  r   )r   r   r   r8   r   r.   r>   r   r   r7   r   r   r   r   s      r   test_4_4_known_f_minz&TestShgoArguments.test_4_4_known_f_minU  st     ))#'!&( 799gnn',,w#*, 	%%ceeW-?-?d+/ 	& 	1r   c                     t        t        j                  t        j                  t        j                        }t
        j                  j                  |j                  t        j                  dd       y)z;Test Default simplicial sampling settings on TestFunction 1r   r3  r   N
r   r   r8   r   r.   r>   r   r   r7   r   r4  s     r   test_5_1_simplicial_arglessz-TestShgoArguments.test_5_1_simplicial_arglesse  sF    799gnn',,G%%ceeW-?-?d+/ 	& 	1r   c                     t        t        j                  t        j                  t        j                  d      }t
        j                  j                  |j                  t        j                  dd       y)z6Test Default sobol sampling settings on TestFunction 1r0  r   r   r3  r   Nr[  r4  s     r   test_5_2_sobol_arglessz(TestShgoArguments.test_5_2_sobol_arglessk  sK    799gnn',,#*,%%ceeW-?-?d+/ 	& 	1r   c                 j   ddi}t        t        j                  t        j                  t        j                  |d      }t
        j                  j                  |j                  t        j                  dd       t
        j                  j                  |j                  t        j                  d       y)	:Test that maximum iteration option works on TestFunction 3max_iterr4   r   r   r   r   r3  r   r   Nr   r   r8   r   r.   r>   r   r   r7   r   r(   r   rW  s      r   test_6_1_simplicial_max_iterz.TestShgoArguments.test_6_1_simplicial_max_iterr  z    q/799gnn',,"LB%%ceeW-?-?d+/ 	& 	1%%cggw/C/C$%Or   c                 j   ddi}t        t        j                  t        j                  t        j                  |d      }t
        j                  j                  |j                  t        j                  dd       t
        j                  j                  |j                  t        j                  d       y)	ra  min_iterr4   r   rc  r3  r   r   Nrd  rW  s      r   test_6_2_simplicial_min_iterz.TestShgoArguments.test_6_2_simplicial_min_iter{  rf  r   c                 `    dD ])  }|t         j                  d}t        t         dd|d       + y)z@Test the minimizer_kwargs arguments for solvers with constraints)COBYLASLSQP)methodr   r   MbP?r0  r   r   r   r   N)r   r.   r   )r   solverr   s      r   test_7_1_minkwargsz$TestShgoArguments.test_7_1_minkwargs  s;     * 	.F +1/6|| =Wt&6%,.	.r   c                     ddi}ddi}t        t        j                  t        j                  t        j                  d   ||       y)z'Test the minimizer_kwargs default initsftolr3  r   Tr   )r   r   r   Nr   r   r8   r   r.   )r   r   r   s      r   test_7_2_minkwargsz$TestShgoArguments.test_7_2_minkwargs  s9    "D>4.WYYGLLO.	Ar   c                     dD ]O  }d }d }|||d}t        j                  d|        t        j                  d       t        t        dd|d	
       Q y)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                 \    t        j                  d| d   z  d| d   z  g      j                  S )Nr4   r   r5   )r>   arrayTr@   s    r   jacz1TestShgoArguments.test_7_3_minkwargs.<locals>.jac  s,    {{A!Ha!A$h#78:::r   c                 8    t        j                  ddgddgg      S Nr4   r   )r>   r~  r@   s    r   hessz2TestShgoArguments.test_7_3_minkwargs.<locals>.hess  s    {{QFQF#344r   )rm  r  r  z	Solver = zd====================================================================================================r   rn  r0  ro  N)r   r   r   r   )r   rp  r  r  r   s        r   test_7_3_minkwargsz$TestShgoArguments.test_7_3_minkwargs  se    ' 	.F;5 +1'*(, . LL9VH-.LL#Wt&6%,.	.r   c                 6    ddd}t        t        d d |d       y )Nr5   T)minhgrdr   r   r   r   r   s     r   test_8_homology_group_diffz,TestShgoArguments.test_8_homology_group_diff  s$    *.0 	Dg!-	/r   c                 z    t        t        j                  t        j                  t        j                  d          y)'Test single function constraint passingr   rZ  Nrt  r   s    r   test_9_cons_gzTestShgoArguments.test_9_cons_g  s    WYYGLLODr   win32z2Failing and fix in PyPy not planned (see gh-18632))reasonc                 n    ddi}d }t        |t        j                  d|      }|j                  dk(  sJ y)r  maxtimer  c                 .    t        j                  d       y)Ng+=r   )timesleepr@   s    r   r8   z0TestShgoArguments.test_10_finite_time.<locals>.f  s    JJur   rc   )r   r   r5   N)r   r   r   nit)r   r   r8   r   s       r   test_10_finite_timez%TestShgoArguments.test_10_finite_time  s9     e$	 1gnnAw?ww!||r   c                    ddd}t        t        j                  t        j                  dd|d      }t        j
                  j                  d|j                  d          t        j
                  j                  d|j                  d	          y)
*Test to cover the case where f_lowest == 0r   T)rL  r   rb   Nr0  r   r   r5   )r   r   r8   r   r>   r   assert_equalr7   rW  s      r   test_11_f_min_0z!TestShgoArguments.test_11_f_min_0  sf    !799gnn$"G=""1ceeAh/""1ceeAh/r   z no way of currently testing thisc                     ddd}t        t        j                  t        j                  dd|d      }t        j
                  j                  d|j                         y)r  r  r   )r  rL  r5   Nr0  r   )r   r   r8   r   r>   r   r  r(   rW  s      r   test_12_sobol_inf_consz(TestShgoArguments.test_12_sobol_inf_cons  sH     $!799gnn"G=""30r   c                 V    d }dgdz  }t        ||d      }|j                  dd       y)	z-Test init of high-dimensional sobol sequencesc                      yNr   r#   r@   s    r   r8   z/TestShgoArguments.test_13_high_sobol.<locals>.f      r   rE   )   r0  r   r4   r]   N)r   sampling_function)r   r8   r   SHGOcs       r   test_13_high_sobolz$TestShgoArguments.test_13_high_sobol  s4    	 !B&Q82&r   c                 0    ddi}t        t        d|       y)z6Test limited local iterations for a pseudo-global moderR  re   rO   r   Nr   r   s     r   test_14_local_iterz$TestShgoArguments.test_14_local_iter  s    #B0r   c                 4    ddi}t        t        dd|d       y)z9Test minimize every iter options and cover function cacher   Tr5   rh   r0  r   Nr   r   s     r   test_15_min_every_iterz(TestShgoArguments.test_15_min_every_iter  s    ($/AQ!(	*r   c                 :    ddi}ddi}t        t        d||       y)z:Test disp=True with minimizers that do not support bounds r   Trm  znelder-meadr   )r   r   r   Nr   )r   capsysr   r   s       r   test_16_disp_bounds_minimizerz/TestShgoArguments.test_16_disp_bounds_minimizer  s)    4.$m4, 3C	Er   c                 .    d }t        t        d|       y)=Test the functionality to add custom sampling methods to shgoc                 F    t         j                  j                  | |f      S )N)size)r>   randomuniform)r   ds     r   samplez9TestShgoArguments.test_17_custom_sampling.<locals>.sample  s    <<''aV'44r   rI   r   Nr   )r   r  s     r   test_17_custom_samplingz)TestShgoArguments.test_17_custom_sampling  s    	5 	B7r   c                    d }g d}g d}t        t        ||            }t        ||      }t        ||      }t        ||      }|j                  |j                  k(  sJ |j
                  |j
                  k(  sJ |j                  |j                  k(  sJ t        j                  g d      }t        j                  j                  |j                  |       t        j                  j                  |j                  |j                         y )Nc                 H    t        j                  |       j                         S r   )r>   squarer?   r@   s    r   r8   z1TestShgoArguments.test_18_bounds_class.<locals>.f  s    <<?&&((r   )g      r   g      )r   r   r^   )r   r   r   )r+   zipr	   r   nfevmessager  r>   r~  r   r   r7   )	r   r8   lbub
bounds_old
bounds_newres_old_boundsres_new_boundsx_opts	            r   test_18_bounds_classz&TestShgoArguments.test_18_bounds_class  s    	) #b"+&
B^
a,a,""n&9&9999%%)?)????%%)?)????M*%%n&6&6>%%n&6&6&4&6&6	8r   c                 L   t        d      5 }t        t        d|j                         ddd       t        t        dt               t        d      5 }t        t        d|j                         ddd       t        t        dt               y# 1 sw Y   fxY w# 1 sw Y   ,xY w)r  r4   rI   )r   r   N)r   r   r   mapr  )r   ps     r   test_19_parallelizationz)TestShgoArguments.test_19_parallelization  sx     !W 	3WAEE2	3B,!W 	2Vr1551	22s+	3 	3	2 	2s   BBBB#c                     d }d }dgdz  }d }d }d }d|d	d
d|dd|df}t        ||dd|       t        ||dd|d       y)z0Test that constraints can be passed to argumentsc                    | d   dz    t        j                  t        j                  t        | d   dz  | d   dz   z                     z  | d   t        j                  t        j                  t        | d   | d   dz   z
                    z  z
  S rw   ry   r@   s    r   	eggholderz=TestShgoArguments.test_20_constrained_args.<locals>.eggholder!  s    dTkNii

3qtczQqTD[/I+J KLMdUYYuzz#adadTk6J2K'LMMN r   c                 H    d| d   z  d| d   z  z   d| d   z  z   d| d   z  z   S )	Nǧ8@r   g     :@r5   '   r4   g     @D@rf   r#   r@   s    r   r8   z5TestShgoArguments.test_20_constrained_args.<locals>.f'  s7    1Q4<%!A$,.ad:UQqT\IIr   r   r   re   c                 Z    |dz  | d   z  |dz  | d   z  z   d| d   z  z   d| d   z  z   d	z
  S )
Ngffffff@r   gffffff@r5   g333333&@r4   g?rf   rc   r#   )r7   r   s     r   g1_modifiedz?TestShgoArguments.test_20_constrained_args.<locals>.g1_modified,  sT    s7QqT>AGadN2TAaD[@3J D  r   c                     d| d   z  d| d   z  z   d| d   z  z   d| d   z  z   d	z
  d
t        j                  d| d   dz  z  d| d   dz  z  z   d| d   dz  z  z   d| d   dz  z  z         z  z
  S )Nrd   r   g'@r5   gfffffD@r4   gJ@rf      gRQ?gQ?gRQ?g     4@gףp=
?)r>   rz   r@   s    r   rX   z6TestShgoArguments.test_20_constrained_args.<locals>.g20  s    1Iqt+dQqTk9D1Q4KG"Lejj!	)9D1Q419<L)L+/!A$!)+;*<>BQqTQY>N*O P PP r   c                 6    | d   | d   z   | d   z   | d   z   dz
  S Nr   r5   r4   rf   r#   r@   s    r   h1z6TestShgoArguments.test_20_constrained_args.<locals>.h16  s+    Q4!A$;1%!,q00r   r%   )r   )r'   r(   r   r&   r  r  r5   )r   r   r   r0  )r   r   r   r   N)r   )r   r  r8   r   r  rX   r  r.   s           r   test_20_constrained_argsz*TestShgoArguments.test_20_constrained_args  st    		J !			1  TB+b)+ 	Q#QD9Q#QD$	&r   c           
      L   d }t        |ddgddgg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
      }t        |g d|d	      }|j                  sJ t        |j                  |j                         t        |j
                  |j
                  d       y)z|Test that shgo can handle objective functions that return the
        gradient alongside the objective value. Fixes gh-13547c                 ^    t        j                  t        j                  | d            d| z  fS Nr4   )r>   r?   powerr@   s    r   rH  z2TestShgoArguments.test_21_1_jac_true.<locals>.funcF  s%    99U[[A./Q66r   rB   r5   r4   r   rc   r0  rl  T)rm  r  )r   r   r   r   r   c                 <    t        j                  | dz        d| z  fS r  r=   r@   s    r   rH  z2TestShgoArguments.test_21_1_jac_true.<locals>.funcR  s    99Q!V$a!e++r   r   rf   )r   r   r   )r5   r5   r5   r5   r5   )x0r   r  r  r   N)r   r   r  r   r(   r7   )r   rH  r   r   r$  s        r   test_21_1_jac_truez$TestShgoArguments.test_21_1_jac_trueB  s    	7 	GaV$#(/=	
	, q'Aq6B7QFQF;4/6t$DFt!{{{)suu51r   
derivativer  r  hesspc                 r   d }d }d }d }|||d}|||   i}ddi}dg}	t        ||	||	      }
t        |fd
g|	d||}|
j                  sJ t        j                  j                  |
j                  |j                         t        j                  j                  |
j                  |j                         y)zzshgo used to raise an error when passing `options` with 'jac'
        # see gh-12963. check that this is resolved
        c                 6    d| d   z  | d   z  d| d   z  z   dz   S )Nrf   r   r4   rc   r#   r@   s    r   	objectivezATestShgoArguments.test_21_2_derivative_options.<locals>.objectivee  s*    qt8ad?Q1X-11r   c                     d| d   z  dz   S )NrC   r   r4   r#   r@   s    r   gradientz@TestShgoArguments.test_21_2_derivative_options.<locals>.gradienth  s    qt8a<r   c                      yNrC   r#   r@   s    r   r  z<TestShgoArguments.test_21_2_derivative_options.<locals>.hessk  r  r   c                     d|z  S r  r#   )r7   r  s     r   r  z=TestShgoArguments.test_21_2_derivative_options.<locals>.hesspn  s    q5Lr   r  rm  trust-constr)ir   r   r   r   )r  r   N)r   r   r  r>   r   r   r(   r7   )r   r  r  r  r  r  derivative_funcsr   r   r   r   r$  s               r   test_21_2_derivative_optionsz.TestShgoArguments.test_21_2_derivative_options_  s    	2	 		 $,TEJ/
;<$n59f7G"$y "aS ";K " " {{{%%cggsww7%%ceeSUU3r   c                 @   g d}t         t        d}ddi}t        t        |||      }t	        t        t        j                  d      fddi|}|j                  sJ t        |j                  |j                         t        |j                  |j                  d       y	)
zsEnsure the Hessian gets passed correctly to the local minimizer
        routine. Previous report gh-14533.
        )r   g?r  r   gffffff?r  r  )r  r  rm  rz  r  rc   r  r   N)r   r   r   r   r   r>   zerosr  r   r(   r7   )r   r   r   r   r   r$  s         r   test_21_3_hess_options_rosenz.TestShgoArguments.test_21_3_hess_options_rosen  s     D#Z8$k25&3C"$uekk!n "[ " "{{{)suu51r   c                    d }dd d}dg}t        ||d|d      }t        |t        j                  d	      |d|
      }|j                  sJ t        |j                  |j                         t        |j                  |j                         y)zwshgo used to raise an error when passing `args` with Sobol sampling
        # see gh-12114. check that this is resolvedc                     | d   |z  S r  r#   )r7   r   s     r   r(   z6TestShgoArguments.test_21_arg_tuple_sobol.<locals>.fun  s    Q419r   r%   c                     | d   dz
  S r   r#   r@   s    r   r  z;TestShgoArguments.test_21_arg_tuple_sobol.<locals>.<lambda>  s    1 r   r&   r   rb   )r5   r0  )r   r   r   r5   )r   r   r   N)r   r   r>   r  r  r   r(   r7   )r   r(   r   r   r   r$  s         r   test_21_arg_tuple_sobolz)TestShgoArguments.test_21_arg_tuple_sobol  s}    	 !'/AB3T{#*,sEKKN6#.0{{{)suu%r   N).r    r!   r"   r+  r.  r1  r5  r@  rC  rJ  r   r   r   rP  rS  rX  r\  r_  re  ri  rq  ru  r  r  r  xfailr   sysplatformr  r  r&  r  r  r  r  r  r  r  r  r  r  parametrizer  r  r  r#   r   r   r(  r(    sf   I/DPAA& [[/ / [[
/ 
/1 11PP
.A.(/E [[w:3<<7#:G  I
I
0 [[?@	1 A	1	'1
*E88*,"&H2: [[\+CD4 E4>2&r   r(  c                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestShgoFailuresc                    ddi}t        t        j                  t        j                  dd|d      }t        j
                  j                  d|j                         t        j
                  j                  d|j                         y)z'Test failure on insufficient iterationsmaxiterr4   Nr0  r   Fre   )	r   r   r8   r   r>   r   r  r  tnevrW  s      r   test_1_maxiterzTestShgoFailures.test_1_maxiter  s\    a.799gnn"G= 	""5#++6""1chh/r   c                 l    t        t        t        t        j                  t        j
                  d       y)z$Rejection of unknown sampling method	not_Sobolr  N)assert_raises
ValueErrorr   r   r8   r   r   s    r   test_2_samplingz TestShgoFailures.test_2_sampling  s    j$		7>>&1	3r   c                    ddd}t        t        j                  t        j                  d|d      }t        j
                  j                  d|j                         t        j
                  j                  d|j                         y	)
zoCheck that the routine stops when no minimiser is found
           after maximum specified function evaluationsrb   T)maxfevr   rf   r0  r   r   r   Frd   N)	r   
test_tabler8   r   r>   r   r  r  r  rW  s      r   test_3_1_no_min_pool_sobolz+TestShgoFailures.test_3_1_no_min_pool_sobol  sb      ! :<<!2!2a#*,""5#++6""2sxx0r   c                     ddd}t        t        j                  t        j                  d|d      }t        j
                  j                  d|j                         y)	zoCheck that the routine stops when no minimiser is found
           after maximum specified sampling evaluationsrb   Tmaxevr   rf   r   r  FN)r   r  r8   r   r>   r   r  r  rW  s      r   test_3_2_no_min_pool_simplicialz0TestShgoFailures.test_3_2_no_min_pool_simplicial  sH     !:<<!2!2a#/1""5#++6r   c                 T    ddg}t        t        t        t        j                  |       y)zSpecified bounds ub > lb)rC   rf   rf   rc   Nr  r   r   r   r8   r   r   s     r   test_4_1_bound_errz#TestShgoFailures.test_4_1_bound_err  s    &!j$		6:r   c                 T    ddg}t        t        t        t        j                  |       y)z)Specified bounds are of the form (lb, ub))rf   rc   rc   r  Nr  r  s     r   test_4_2_bound_errz#TestShgoFailures.test_4_2_bound_err  s    V$j$		6:r   c                     ddd}t        t        j                  t        j                  t        j                  d|d      }t
        j                  j                  d|j                         y)zxEnsures the algorithm terminates on infeasible problems
           after maxev is exceeded. Use infty constraints optionr   Tr  r0  r   r   r   r   FN	r   test_infeasibler8   r   r.   r>   r   r  r  rW  s      r   test_5_1_1_infeasible_sobolz,TestShgoFailures.test_5_1_1_infeasible_sobol  sW      ! ?$$o&<&<.33sG#*, 	""5#++6r   c                     dddd}t        t        j                  t        j                  t        j                  d|d      }t
        j                  j                  d|j                         y)zEnsures the algorithm terminates on infeasible problems
           after maxev is exceeded. Do not use infty constraints optionr   TF)r	  r   r   r0  r  Nr  rW  s      r   test_5_1_2_infeasible_sobolz,TestShgoFailures.test_5_1_2_infeasible_sobol  sZ      (-/ ?$$o&<&<.33sG#*, 	""5#++6r   c                     ddd}t        t        j                  t        j                  t        j                  d|d      }t
        j                  j                  d|j                         y)z[Ensures the algorithm terminates on infeasible problems
           after maxev is exceeded.i  Fr  r   r   r  Nr  rW  s      r   test_5_2_infeasible_simplicialz/TestShgoFailures.test_5_2_infeasible_simplicial  sW     ! " ?$$o&<&<.33sG#/1 	""5#++6r   c                     t         j                  dz   ddddd}t         j                  t         j                  f}t         j                  dd|dd	}t        t        t        g|i | y)
z<Test Global mode limiting local evaluations with f* too highrx   r#  Tr5   FrU  Nr0  rV  )r   r   r8   r   r.   r   UserWarningr   )r   r   r   kwargss       r   test_6_1_lower_known_f_minz+TestShgoFailures.test_6_1_lower_known_f_min  si     ))C/#'!&( 		7>>*!($%,	 	k41$1&1r   c                     ddl mm} g d}fdd_         ||      }t	        |j
                  |j                  j                         y )Nr   )r   r   r   r4   r!  r!  r!  r!  c                 >    xj                   dz  c_          |       S Nr5   )r  )r7   r(   r   s    r   r(   z"TestShgoFailures.test.<locals>.fun  s    HHMH8Or   )scipy.optimizer   r   r  r   r7   r(   )r   r   r   resultr(   r   s       @@r   r   zTestShgoFailures.test  s=    .9	 c6"fhh

CHH-r   N)r    r!   r"   r  r  r  r
  r  r  r  r  r  r  r   r#   r   r   r  r    s9    03

17;
;

77
72$.r   r  c                       e Zd Zd Zd Zy)TestShgoReturnsc                     g d}fdd_         t        |      }t        j                  j	                  j                   |j                          y )Nr   c                 D    xj                   dz  c_         t        |       S r#  r  r   r7   r(   s    r   r(   z3TestShgoReturns.test_1_nfev_simplicial.<locals>.fun      HHMH8Or   r   r  r   r>   r   r  r   r   r%  r(   s      @r   test_1_nfev_simplicialz&TestShgoReturns.test_1_nfev_simplicial  s>    9	 c6"""388V[[9r   c                     g d}fdd_         t        |d      }t        j                  j	                  j                   |j                          y )Nr   c                 D    xj                   dz  c_         t        |       S r#  r*  r+  s    r   r(   z.TestShgoReturns.test_1_nfev_sobol.<locals>.fun'  r,  r   r   r0  r  r-  r.  s      @r   test_1_nfev_sobolz!TestShgoReturns.test_1_nfev_sobol$  s@    9	 c67;""388V[[9r   N)r    r!   r"   r/  r2  r#   r   r   r'  r'    s    
:
:r   r'  c                     d } t        | dgdg      }t        |t        j                  ddg            }t	        t
        ddg|d      }t        j                  t        j                  |j                  dz        dk\        sJ t        j                  t        j                  |j                  dz        d	k        sJ |j                  sJ y )
Nc                 ^    t        j                  |       } t        j                  | dz        gS r  rZ   asarrayr?   r@   s    r   quadz$test_vector_constraint.<locals>.quad3  $    JJqMqAvr   g@rf   r   r  r0  r^  r4   r   )
r   r   rZ   r~  r   r   allr?   r7   r  )r7  nlcoldcr   s       r   test_vector_constraintr<  1  s      dSEA3
/C bhhSz&:;D
uw(dG
TC66"&&#%%!$+,,,66"&&#%%A&#-...;;;r   zignore:delta_gradc                  `   d } t        | dgdg      }ddi}t        t        ddg|d|      }t        j                  t        j
                  |j                  d	z        dk\        sJ t        j                  t        j
                  |j                  d	z        d
k        sJ |j                  sJ y )Nc                 ^    t        j                  |       } t        j                  | dz        gS r  r5  r@   s    r   r7  ztest_trust_constr.<locals>.quadB  r8  r   g@rf   rm  r  r  r0  )r   r   r   r4   r   )r   r   r   rZ   r9  r?   r7   r  )r7  r:  r   r   s       r   test_trust_constrr?  @  s      dSEA3
/C .1 	')C 66"&&#%%!$+,,,66"&&#%%A&#-...;;;r   c                     dgdz  } d }t        |dd      }t        t        | |      }t        t	        j
                  |j                        d       d }d|d}t        t        | |      }t        t	        j
                  |j                        d       d	gd
z  } d }d|d}t        d | |d      }t        t	        j
                  |j                        d       y )N)g?r   r4   c                     | d   | d   z   S r   r#   r@   s    r   faultyz)test_equality_constraints.<locals>.faulty[  s    tad{r   333333@r  c                     | d   | d   z   dz
  S )Nr   r5   rC  r#   r@   s    r   rB  z)test_equality_constraints.<locals>.faultyb  s    tad{S  r   r  r&   r  re   c                 6    | d   | d   z   | d   z   | d   z   dz
  S r  r#   r@   s    r   rB  z)test_equality_constraints.<locals>.faultyk  s+    tad{QqT!AaD(1,,r   c                 .    t        j                  |        S r   )rZ   prodr@   s    r   r  z+test_equality_constraints.<locals>.<lambda>q  s    BGGAJ, r   r0  )r   r   r   r   )r   r   r   r   rZ   r?   r7   )r   rB  r:  r   r   s        r   test_equality_constraintsrH  W  s    \AF fc3
/C
uV
5CBFF355M3'!  /K
uV
=CBFF355M3'Z!^F-  /K
	C BFF355M3'r   c                      d } | dd}dddddd	}t        t        d
gdz  ||      }|j                  d   j                         dk(  sJ |j                  d   d   dk(  sJ y )Nc                 8    t        j                  | dz        dz
  S r  )rZ   r?   r@   s    r   r.   ztest_gh16971.<locals>.consy  s    vvad|ar   r%   )r(   r'   rk  rc   r   g?)rhobegtolcatol)rm  r   r  r4   )r   r   rm  cobylar   rM  )r   r   r   lower)r.   cr   r   s       r   test_gh16971rQ  x  s      f%At<
 	y{<L	A h'--/8;;;i(1T999r   )	r#   r3  r   NNNNr0  r5   )Er   r  r>   rZ   r  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/   r1   r   r   r   rG   r~  r   r   rR   r   r`   r   ru   r   r}   r   r+   r  boundsLJr  r   onesr  r   r  r   r  r   r&  r   r   r   r(  r  r'  r<  filterwarningsr?  rH  rQ  r#   r   r   <module>rY     sM    
      2  1H H H = %+ + $  gw/"#Q)
ff-"#Q)
lL9"#Q)$  gY",#/ #.%++
|0;}0:|0;}0;}0:|0;}0;}0;}0;}	/> 	#? %0EKK 1K %L!. hZ",$0>"-%++
|n"=$/EKK$?	#$ #J gw/",j!9#&$ D i]Q."L#.$  k;7$7#8"&!57
% < TFQJ	*+	X$(6!%	
$  
XL1,"% *

1 3
(  Y	$:+-$),c
4

- 0 'w.@4826) ,9=;?./  D3) 3)ti1 i1X]& ]&Bq. q.j: :4 /0 1,(B:r   