
    Ug`3                     T    d Z ddlmZmZ ddlZddlZddlmZm	Z	  G d d          Z
dS )z.
Unit test for DIRECT optimization algorithm.
    )assert_allcloseassert_array_lessN)directBoundsc            	       b   e Zd Zd Zd Zd Zd Zd Zd Ze	j
                            ddd	g          d
             Ze	j
                            ddd	g          d             Ze	j
                            ddd	g          d             Ze	j
                            ddd	g          d             Ze	j
                            dddg          e	j
                            ddd	g          d                         Ze	j
                            dddg          e	j
                            ddd	g          d                         Ze	j
                            dg d          e	j
                            ddd	g          d                         Zd Ze	j
                            ddd	g          d             Ze	j
                            ddd	g          d             Ze	j
                            ddd	g          d             Ze	j
                            ddd	g          d             Ze	j
                            ddd	g          e	j
                            dg d          d                          Ze	j
        j        e	j
                            ddd	g          d!                         Ze	j
                            ddd	g          d"             Ze	j
                            dd#d$g          d%             Ze	j
                            dd#d$g          d&             Ze	j
                            dd#d$g          d'             Ze	j
                            d(g d)          d*             Ze	j
                            d+g d)          d,             Z d- Z!d. Z"e	j
                            d/g d0          d1             Z#e	j
                            d/ e$d2d#gd3d4g           e$e%j&         d#gd3e%j&        g          g          d5             Z'd6 Z(e	j
                            dd7d8d8gd9g          d:             Z)d;S )<
TestDIRECTc                     d| _         ddgz  | _        t          j        d          | _        d| _        t          ddgddg          | _        d| _        d S )	Nr      )   r
           g      g      @  )		fun_callsbounds_spherenpzerosoptimum_sphere_posoptimum_spherer   bounds_stylinski_tangmaxiter)selfs    _/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/optimize/tests/test_direct.pysetup_methodzTestDIRECT.setup_method   sT    y["$(5//!%+S#JR%A%A"    c                 n    | xj         dz  c_         t          j        |                                          S )N   )r   r   squaresumr   xs     r   spherezTestDIRECT.sphere   s,    !y||!!!r   c                 |    t          j        |          dk    rt                      dt          j        |          z  S Nr   r   )r   r   ZeroDivisionErrorr    s     r   invzTestDIRECT.inv   s1    6!99>>#%%%{r   c                     t           j        S N)r   nanr    s     r   nan_funzTestDIRECT.nan_fun   	    vr   c                     t           j        S r(   )r   infr    s     r   inf_funzTestDIRECT.inf_fun"   r+   r   c                 d    |\  }}d|dz  d|dz  z  z
  d|z  z   |dz  z   d|dz  z  z
  d|z  z   z  S )Ng      ?r
             )r   posr!   ys       r   styblinski_tangzTestDIRECT.styblinski_tang%   sO    1adR!Q$Y&Q.A5QT	AAEIJJr   locally_biasedTFc                    t          | j        | j        |          }t          |j        | j        dd           t          |j        | j        dd           t          j	        | j                  }t          |d d df         |j                   t          |j        |d d df                    |j        dt          | j                  dz   z  k    sJ |j        | j        k    sJ |j        | j        k    sJ d S )	Nr7   MbP?rtolatolh㈵>r=   r<   r   r   r   )r   r"   r   r   r!   r   funr   r   asarrayr   nfevlenr   nitr   )r   r7   res_boundss       r   test_directzTestDIRECT.test_direct)   s   T[$"4$24 4 4 	t6!	. 	. 	. 	.!44dKKKK *T/00'!!!Q$-///#%A/// x43t'9#:#:Q#>?????x4>)))) w$,&&&&&&r   c                 2   t          | j        | j        |          }d }t          | j        | j        ||          }t          |j        |j                   |j        |j        k    sJ |j        |j        k    sJ |j        |j        k    sJ |j        |j        k    sJ |j	        |j	        k    sJ t          |j        |j                   |j
        |j
        k    sJ t          |j        | j        dd           t          |j	        | j        dd           d S )Nr9   c                 V    d| z  } t          j        |           }t          d           |S )Nr1   z+DIRECT minimization algorithm callback test)r   r   print)r!   dummys     r   callbackz1TestDIRECT.test_direct_callback.<locals>.callbackG   s,    !AIaLLE?@@@Lr   )r7   rL   r:   r;   r>   r?   )r   r"   r   r   r!   rD   rB   statussuccessr@   messager   r   )r   r7   rE   rL   res_callbacks        r   test_direct_callbackzTestDIRECT.test_direct_callbackA   s]    T[$"4$24 4 4	 	 	 dk4+=-;'/1 1 1 	|~...w,*****x<,,,,,z\00000{l22222w,*****|~...{l22222 	(?!	. 	. 	. 	.($*=!	. 	. 	. 	. 	. 	.r   c                     ddgz  }t          j        t                    5  t          | j        ||           d d d            d S # 1 swxY w Y   d S Nr
   )i
   )boundsr7   )pytestraisesr%   r   r&   r   r7   rU   s      r   test_exceptionzTestDIRECT.test_exceptiona   s    I;],-- 	2 	248F"02 2 2 2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   AA	A	c                 @    ddgz  }t          | j        ||           d S rS   )r   r*   rX   s      r   test_nanzTestDIRECT.test_nanh   s7    I;t|F,	. 	. 	. 	. 	. 	.r   len_tolr:   -C6?c                     ddgz  }t          | j        ||d|          }|j        dk    sJ |j        sJ t	          |j        t          j        d                     d| }|j        |k    sJ d S )Nr
   g      $      $@gKH9)rU   r\   vol_tolr7   r2   r   zjThe side length measure of the hyperrectangle containing the lowest function value found is below len_tol=	r   r"   rM   rN   r   r!   r   r   rO   )r   r\   r7   rU   rE   rO   s         r   test_len_tolzTestDIRECT.test_len_toln   s     K=T[">C C CzQ{rx///(%( ( {g%%%%%%r   ra   ư>g:0yE>c                     ddgz  }t          | j        ||d|          }|j        dk    sJ |j        sJ t	          |j        t          j        d                     d| }|j        |k    sJ d S )Nr
   r_   r   )rU   ra   r\   r7   r   z]The volume of the hyperrectangle containing the lowest function value found is below vol_tol=rb   )r   ra   r7   rU   rE   rO   s         r   test_vol_tolzTestDIRECT.test_vol_tol|   s     K=T[@ @ @zQ{rx///F<CF F{g%%%%%%r   
f_min_rtol)r:   r>   gHz>c                     d}ddgz  }t          | j        ||||          }|j        dk    sJ |j        sJ |j        |d|z   z  k     sJ d| d}|j        |k    sJ d S )N      ?r
   )       r`   )rU   f_minrg   r7   r   z9The best function value found is within a relative error=z$ of the (known) global optimum f_min)r   r"   rM   rN   r@   rO   )r   rg   r7   rk   rU   rE   rO   s          r   
test_f_minzTestDIRECT.test_f_min   s    
 J<T[u *$24 4 4 zQ{w"z/22222M&M M M{g%%%%%%r   c                     t          j        |d         |z
            t          j        |d         |z
                                            z   S r$   )r   r   r   )r   r!   abs       r   circle_with_argszTestDIRECT.circle_with_args   s=    y1""RYqtax%8%8%<%<%>%>>>r   c                     ddgz  }t          | j        |dd|          }t          |j        t	          j        ddg          d           d S )	Nr1   )rj          @)r   r   i  )argsmaxfunr7   ri   r>   r<   )r   rp   r   r!   r   array)r   r7   rU   rE   s       r   test_f_circle_with_argsz"TestDIRECT.test_f_circle_with_args   sZ    K=T*F$24 4 4rxR11======r   c                     d}t          | j        | j        ||          }|j        du sJ |j        dk    sJ |j        |k    sJ d| }|j        |k    sJ d S )Nd   )rt   r7   Fr   z:Number of function evaluations done is larger than maxfun=)r   r6   r   rN   rM   rB   rO   )r   r7   rt   resultrO   s        r   test_failure_maxfunzTestDIRECT.test_failure_maxfun   s    
 ,d.H%nF F F~&&&&}!!!!{f$$$$2)/2 2~((((((r   c                     d}t          | j        | j        ||          }|j        du sJ |j        dk    sJ |j        |k    sJ d| }|j        |k    sJ d S )NrT   )r   r7   Fr1   z,Number of iterations is larger than maxiter=)r   r6   r   rN   rM   rD   rO   )r   r7   r   rz   rO   s        r   test_failure_maxiterzTestDIRECT.test_failure_maxiter   s    
 ,d.H 'H H H~&&&&}!!!!zW$$$$JJJ~((((((r   c                    g d}g d}t          j        g d          }t          t          ||                    }t	          ||          }t          | j        ||          }t          | j        ||          }|j        |j        k    sJ |j        |j        k    sJ |j	        |j	        k    sJ |j
        |j
        k    sJ t          |j        |j                   t          |j        |d           d S )N)g      ri         )      g      @      @)r   ri   r   r9   g{Gz?ru   )r   rv   listzipr   r   r"   rB   rO   rN   rD   r   r!   )	r   r7   lbubx_opt
bounds_old
bounds_newres_old_boundsres_new_boundss	            r   test_bounds_variantszTestDIRECT.test_bounds_variants   s    ^^]]''#b"++&&
B^^
Z/=? ? ?Z/=? ? ? "n&99999%)?????%)?????!^%77777(.*:;;;(%d;;;;;;r   eps)r>   r]   r:   c                 n    t          | j        | j        |d|          }|j        dk    sJ |j        sJ d S )Nrd   )r   ra   r7   r
   )r   r6   r   rM   rN   )r   r   r7   rz   s       r   test_epsilonzTestDIRECT.test_epsilon   sS     ,d.H'57 7 7 }!!!!~r   c                 L    dgdz  }t          | j        |dd|          }|J d S )N)r   g      4@ry   i i@B )rt   r   r7   )r   r"   r   r7   rU   rz   s       r   test_no_segmentation_faultz%TestDIRECT.test_no_segmentation_fault   sF    
 #VH 'H H H!!!!!r   c                 H    dgdz  }t          | j        ||          }|J d S )N)r   r   r1   r9   )r   r.   r   s       r   test_inf_funzTestDIRECT.test_inf_fun   s>     qf'57 7 7!!!!!r   r1   c                     d}t          j        t          |          5  t          | j        | j        |           d d d            d S # 1 swxY w Y   d S )Nz len_tol must be between 0 and 1.match)r\   rV   rW   
ValueErrorr   r6   r   )r   r\   	error_msgs      r   test_len_tol_validationz"TestDIRECT.test_len_tol_validation       6	]:Y777 	$ 	$4')C"$ $ $ $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$   AAAc                     d}t          j        t          |          5  t          | j        | j        |           d d d            d S # 1 swxY w Y   d S )Nz vol_tol must be between 0 and 1.r   )ra   r   )r   ra   r   s      r   test_vol_tol_validationz"TestDIRECT.test_vol_tol_validation   r   r   c                     d}t          j        t          |          5  t          | j        | j        |d           d d d            d S # 1 swxY w Y   d S )Nz#f_min_rtol must be between 0 and 1.r   r   )rg   rk   r   )r   rg   r   s      r   test_fmin_rtol_validationz$TestDIRECT.test_fmin_rtol_validation  s    9	]:Y777 	4 	44')C(4 4 4 4	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   A		AArt   )g      ?string)r   r1   c                     d}t          j        t          |          5  t          | j        | j        |           d d d            d S # 1 swxY w Y   d S )Nzmaxfun must be of type int.r   rt   r   )r   rt   r   s      r   test_maxfun_wrong_typez!TestDIRECT.test_maxfun_wrong_type  s    1	]:Y777 	" 	"4')C " " " "	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"r   r   c                     d}t          j        t          |          5  t          | j        | j        |           d d d            d S # 1 swxY w Y   d S )Nzmaxiter must be of type int.r   r   r   )r   r   r   s      r   test_maxiter_wrong_typez"TestDIRECT.test_maxiter_wrong_type  s    2	]:Y777 	$ 	$4')C"$ $ $ $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$r   c                     d}t          j        t          |          5  t          | j        | j        d           d d d            d S # 1 swxY w Y   d S )Nzmaxiter must be > 0.r   r   r   r   r   r   s     r   test_negative_maxiterz TestDIRECT.test_negative_maxiter  s    *	]:Y777 	 	4')C   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   c                     d}t          j        t          |          5  t          | j        | j        d           d d d            d S # 1 swxY w Y   d S )Nzmaxfun must be > 0.r   r   r   r   r   s     r   test_negative_maxfunzTestDIRECT.test_negative_maxfun  s    )	]:Y777 	 	4')C   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r   rU   )rU   rr   r   c                     d}t          j        t          |          5  t          | j        |           d d d            d S # 1 swxY w Y   d S )Nz5bounds must be a sequence or instance of Bounds classr   rV   rW   r   r   r6   r   rU   r   s      r   test_invalid_bounds_typez#TestDIRECT.test_invalid_bounds_type"  s    0	]:Y777 	1 	14'000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1   AAAr   r   r   c                     d}t          j        t          |          5  t          | j        |           d d d            d S # 1 swxY w Y   d S )Nz#Bounds are not consistent min < maxr   r   r   s      r   test_incorrect_boundsz TestDIRECT.test_incorrect_bounds)  s     :	]:Y777 	1 	14'000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1r   c                     d}t          t          j         dgdt          j        g          }t          j        t
          |          5  t          | j        |           d d d            d S # 1 swxY w Y   d S )NzBounds must not be inf.r   r   r   )r   r   r-   rV   rW   r   r   r6   )r   r   rU   s      r   test_inf_boundszTestDIRECT.test_inf_bounds3  s    -	"&"BF|44]:Y777 	1 	14'000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   A**A.1A.biasr   rr   c                     d}t          j        t          |          5  t          | j        | j        |           d d d            d S # 1 swxY w Y   d S )Nz%locally_biased must be True or False.r   r9   r   )r   r7   r   s      r   test_locally_biased_validationz)TestDIRECT.test_locally_biased_validation9  s    ;	]:Y777 	2 	24')C"02 2 2 2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2r   N)*__name__
__module____qualname__r   r"   r&   r*   r.   r6   rV   markparametrizerG   rQ   rY   r[   rc   rf   rl   rp   rw   r{   r}   r   r   xslowr   r   r   r   r   r   r   r   r   r   r   r   r)   r   r   r   r3   r   r   r   r      s         " " "  
    K K K [-e}==' ' >='. [-e}==. . >=.> [-e}==2 2 >=2 [-e}==. . >=.
 [Yt55[-e}==
& 
& >= 65
& [Yt55[-e}==	& 	& >= 65	& [\+=+=+=>>[-e}==& & >= ?>&? ? ? [-e}==> > >=> [-e}==) ) >=) [-e}==) ) >=) [-e}==< < >=<* [-e}==[U$6$6$677  87 >= [[-e}==" " >= " [-e}==" " >=" [YQ00$ $ 10$ [YQ00$ $ 10$ [\B7334 4 434 [X'>'>'>??" " @?" [Y(?(?(?@@$ $ A@$     [X'8'8'8991 1 :91 [X$fc2YQ88$frvgr]RLAA  
1 1 
1
1 1 1 [-A/CDD2 2 ED2 2 2r   r   )__doc__numpy.testingr   r   rV   numpyr   scipy.optimizer   r   r   r3   r   r   <module>r      s    . . . . . . . .      ) ) ) ) ) ) ) )s2 s2 s2 s2 s2 s2 s2 s2 s2 s2r   