
    Pi@                         d Z ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
mZ dd	lZdd	lZdd
lmZmZmZ ddlmZ ddlmZ dd	lZ G d d          Zd	S )z4
Unit tests for the dual annealing global optimizer
    )dual_annealingBounds)EnergyState)LocalSearchWrapper)ObjectiveFunWrapper)StrategyChain)VisitingDistribution)rosen	rosen_derN)assert_equalassert_allcloseassert_array_less)raises)check_random_statec                   p   e Zd Zd Zd Zd,dZd,dZej        	                    dg d          d             Z
ej        	                    dg d	          d
             Zd Zd Zej                            d          d             Zd Zej                            d          d             Zd Zd Zd Zej                            d          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej        	                    d g d!          d"             Z!d# Z"d$ Z#ej                            d          d%             Z$ej        	                    d&g d'          d(             Z%ej                            d          d)             Z&ej                            d          d*             Z'd+S )-TestDualAnnealingc                     d | _         dgdz  | _        | j        dz  | _        d| _        d| _        d| _        d| _        d	| _        t          j	                    | _
        t          j	                    | _        d S )
Nc                     t           j        S N)npinfxs    }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/scipy/optimize/tests/test__dual_annealing.py<lambda>z0TestDualAnnealing.setup_method.<locals>.<lambda>   s    26     {Gz{Gz@      i  in  g?(\@  )	weirdfunc	ld_bounds	hd_boundsnbtestvalueshigh_temperaturelow_temperatureqvseed	threadinglocalnb_fun_callngevselfs    r   setup_methodzTestDualAnnealing.setup_method   sq    ))'1,!+  $"	$?,,O%%			r   c                     |dk    rdS d S )N      ?T )r1   r   fcontexts       r   callbackzTestDualAnnealing.callback+   s     884 8r   r5   c           	      @   |r|}nd}t          j        ||z
  dz  dt          j        dt           j        z  ||z
  z            z  z
            dt          j        |          z  z   |z   }t          | j        d          sd| j        _        | j        xj        dz  c_        |S )Nr   r    
   c   )r   sumcospisizehasattrr.   r;   )r1   r   argsshiftys        r   funczTestDualAnnealing.func1   s     	EEEFAI!#b26!be)I3 , , '   

?+-23t'-- 	#!"Dar   c                     t          | j        d          sd| j        _        | j        xj        dz  c_        t          |g|R  S )Nr;   r   r<   )rA   r/   r;   r   )r1   r   rB   s      r   rosen_der_wrapperz#TestDualAnnealing.rosen_der_wrapper>   sG    ty#&& 	DIK	q"T""""r   r*   )g?g(\?r    r"   333333@c                 l   t           j                            d          }t          t	          | j                   }t          j        |d                   }t          j        |d                   }|j        }t          ||||          }t          j	        |          }|
                    |d| j                  }	t          t          j        |	d          d           t          j	        |          }|
                    ||| j                  }
t          t          j        |
d         d          d           d S )Nr#   r   r<   T)r   randomdefault_rnglistzipr%   arrayr@   r	   zerosvisitingr(   r   	not_equal)r1   r*   rnglulowerupperdimvdvalues
x_step_lowx_step_highs              r   test_visiting_steppingz(TestDualAnnealing.test_visiting_steppingF   s    i##D))#t~&''AAj!%C88#[[D,ABB
R\*a00$777#kk&#t/DEER\+a.!44d;;;;;r   )g      @r"   rH   c                    t           j                            d          }t          t	          | j                   }t          j        |d                   }t          j        |d                   }t          ||||          }|                    | j	        | j
                  }t          t          j        |          d           t          dt          j        |                     d S )Nr#   r   r<   g|=g    _B)r   rJ   rK   rL   rM   r%   rN   r	   visit_fnr(   r'   r   minmax)r1   r*   rR   rS   rT   rU   rW   rX   s           r   #test_visiting_dist_high_temperaturez5TestDualAnnealing.test_visiting_dist_high_temperatureW   s    i##D))#t~&''AA!%C88 T2D4EFF 	"&..%000%00000r   c                 >   t          | j                  }t          t          | j                   }t          j        |d                   }t          j        |d                   }t          ||          }t          t          |j
        |t          d                      d S )Nr   r<   )r   r$   rL   rM   r%   r   rN   r   assert_raises
ValueErrorresetr   )r1   owfrS   rT   rU   ess         r   
test_resetzTestDualAnnealing.test_resetj   s{    !$.11#t~&''AA&&j"(C1CD1I1IJJJJJr   c                     t          | j        | j        | j                  }t	          |j        dd           |j        sJ d S NrR           g-q=atol)r   rE   r%   r+   r   funsuccessr1   rets     r   test_low_dimzTestDualAnnealing.test_low_dimr   sM    It~496 6 6%0000{{r   r:   c                     t          | j        | j        | j                  }t	          |j        dd           |j        sJ d S ri   )r   rE   r&   r+   r   rn   ro   rp   s     r   test_high_dimzTestDualAnnealing.test_high_dimx   sF    TYDIFFF%0000{{r   c                 x    t          | j        | j        d| j                  }t	          |j        dd           d S )NT)no_local_searchr+   rk   -C6?rl   r   rE   r%   r+   r   rn   rp   s     r   test_low_dim_no_lsz$TestDualAnnealing.test_low_dim_no_ls~   sE    TY-1	C C C$//////r   c                 x    t          | j        | j        d| j                  }t	          |j        dd           d S )NTrv   rR   rk   giUMu?rl   )r   rE   r&   r+   r   rn   rp   s     r   test_high_dim_no_lsz%TestDualAnnealing.test_high_dim_no_ls   sE    TY-1tyB B B&111111r   c                     d| j         _        t          | j        | j        | j                  }t          | j         j        |j                   d S )Nr   rj   r.   r;   r   rE   r%   r+   r   nfevrp   s     r   test_nb_fun_callz"TestDualAnnealing.test_nb_fun_call   sE    TYDIFFFT%'22222r   c                     d| j         _        t          | j        | j        d| j                  }t          | j         j        |j                   d S )Nr   Tr{   r~   rp   s     r   test_nb_fun_call_no_lsz(TestDualAnnealing.test_nb_fun_call_no_ls   sQ    TY-1tyB B BT%'22222r   c                 R    t          t          t          | j        | j                   d S r   )rb   rc   r   r$   r%   r0   s    r   test_max_reinitz!TestDualAnnealing.test_max_reinit   s+    j.$.n	& 	& 	& 	& 	&r   c                 4   t          | j        | j        | j                  }t          | j        | j        | j                  }t          | j        | j        | j                  }t	          |j        |j                   t	          |j        |j                   d S )Nrj   )r   rE   r%   r+   r   r   )r1   res1res2res3s       r   test_reproducez TestDualAnnealing.test_reproduce   s    diTYGGGdiTYGGGdiTYGGG 	TVTV$$$TVTV$$$$$r   c                 &   t           j                            d          }t          | j        | j        |          }t           j                            d          }t          | j        | j        |          }t          |j        |j                   d S )Nr<   rj   )r   rJ   rK   r   rE   r%   r   r   )r1   rR   r   r   s       r   test_rand_genzTestDualAnnealing.test_rand_gen   sz     i##A&&diSAAAi##A&&diSAAA 	TVTV$$$$$r   c                 P    g d}t          t          t          | j        |           d S )N)r   )r<   r   )r   r   )rb   rc   r   rE   )r1   wrong_boundss     r   test_bounds_integrityz'TestDualAnnealing.test_bounds_integrity   s4    <<<j.$)"	$ 	$ 	$ 	$ 	$r   c                 4   dt           j         dfdg}t          t          t          | j        |           ddt           j        fdg}t          t          t          | j        |           ddt           j        fdg}t          t          t          | j        |           d S )N)   r   )r   r   rb   rc   r   rE   nan)r1   invalid_boundss     r   test_bound_validityz%TestDualAnnealing.test_bound_validity   s    !RVGQ<9j.$)$	& 	& 	&!Arv;8j.$)$	& 	& 	&!Arv;8j.$)$	& 	& 	& 	& 	&r   c                     d }t          t          ddgddg                    }t          j        t          d          5  t          ||d|d	
           d d d            d S # 1 swxY w Y   d S )Nc                 <    t          j        | dz
  | dz
  z            S Nr   r<   r   r=   r   s    r   rE   zKTestDualAnnealing.test_deprecated_local_search_options_bounds.<locals>.func       61q5QU+,,,r   r      r   Method CG cannot handle matchCGmethodboundsr   minimizer_kwargs)rL   rM   pytestwarnsRuntimeWarningr   r1   rE   r   s      r   +test_deprecated_local_search_options_boundsz=TestDualAnnealing.test_deprecated_local_search_options_bounds   s    	- 	- 	-c2r(QF++,, \.0KLLL 	E 	E,0F!C!CE E E E	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es    A##A'*A'c                 
   d }t          t          ddgddg                    }t          ||d|d           t          j        t
          d	
          5  t          ||d|d           d d d            d S # 1 swxY w Y   d S )Nc                 <    t          j        | dz
  | dz
  z            S r   r   r   s    r   rE   z<TestDualAnnealing.test_minimizer_kwargs_bounds.<locals>.func   r   r   r   r   r   r   SLSQPr   r   r   r   r   )rL   rM   r   r   r   r   r   s      r   test_minimizer_kwargs_boundsz.TestDualAnnealing.test_minimizer_kwargs_bounds   s   	- 	- 	-c2r(QF++,,(/6BB	D 	D 	D 	D
 \.0KLLL 	E 	E,0F!C!CE E E E	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   A88A<?A<c                    t          | j        | j        d| j                  }t	          t          t          | j                  t          j        z  t          j	                  t          j
                  }|j        d|z   k    sJ |j        rJ d S )Nd   )maxfunrR   )r   rE   r%   r+   r^   r_   lenr   LS_MAXITER_RATIOLS_MAXITER_MINLS_MAXITER_MAXr   ro   )r1   rq   ls_max_iters      r   test_max_fun_lsz!TestDualAnnealing.test_max_fun_ls   s    TYs!%, , , #"4"EE-/ / -/ / x3,,,,,;r   c                 x    t          | j        | j        dd| j                  }|j        dk    sJ |j        rJ d S )NTi  )rv   r   rR   )r   rE   r%   r+   r   ro   rp   s     r   test_max_fun_no_lsz$TestDualAnnealing.test_max_fun_no_ls   sL    TY-1#49N N Nx3;r   c                 d    t          | j        | j        d| j                  }|j        dk    sJ d S )Ni  )maxiterrR   )r   rE   r%   r+   nitrp   s     r   test_maxiterzTestDualAnnealing.test_maxiter   s8    TY!%, , ,w#~~~~~~r   c                 x    t          | j        | j        d| j                  }t	          |j        dd           d S )Nn!	@)rB   rR   r   ư>rl   rx   rp   s     r   test_fun_args_lsz"TestDualAnnealing.test_fun_args_ls   sB    TY#-DI? ? ?t444444r   c                 z    t          | j        | j        dd| j                  }t	          |j        dd           d S )Nr   T)rB   rv   rR   r   rw   rl   rx   rp   s     r   test_fun_args_no_lsz%TestDualAnnealing.test_fun_args_no_ls   sG    TY#.!%, , , 	t444444r   c                     t          | j        | j        | j        | j                  }|j        dk    sJ d|j        d         v sJ |j        rJ d S )N)r8   rR   r4   z
stop earlyr   )r   rE   r%   r8   r+   rn   messagero   rp   s     r   test_callback_stopz$TestDualAnnealing.test_callback_stop   se     TY&*mD D Dw#~~~~s{1~----;r   zmethod, atol))zNelder-Meadgh㈵>)COBYLAgh㈵>)COBYQA:0yE>)Powellr   )r   r   )BFGSr   )TNCr   )r   gH׊>c                     t          | j        | j        t          |          | j                  }t          |j        d|           d S )Nr   r   rR   rk   rl   )r   rE   r%   dictr+   r   rn   )r1   r   rm   rq   s       r   test_multi_ls_minimizerz)TestDualAnnealing.test_multi_ls_minimizer  sR     TY.2&.A.A.A!%, , , 	$//////r   c                     t          t          t          | j        | j        d           t          t          t          | j        | j        d           d S )Nr<   )restart_temp_ratior   )rb   rc   r   rE   r%   r0   s    r   test_wrong_restart_tempz)TestDualAnnealing.test_wrong_restart_temp  sX    j.$)n	< 	< 	< 	<j.$)n	< 	< 	< 	< 	< 	<r   c                     d| j         i}t          t          | j        || j                  }|j        | j        j        k    sJ d S )Njacr   )rG   r   r
   r%   r+   njevr/   r;   )r1   minimizer_optsrq   s      r   test_gradient_gnevz$TestDualAnnealing.test_gradient_gnev  sT    4)
 UDN.<!%, , , x49;&&&&&&r   c           	          d }dgdz  }dgdz  }t          |t          t          ||                    d          }t          |j        g dd	           t          |j        d
d	           d S )Nc                     t          j        | | z  dt          j        dt           j        z  | z            z  z
            dt          j        |           z  z   S Nr:   r    r   r=   r>   r?   r@   r   s    r   rE   z3TestDualAnnealing.test_from_docstring.<locals>.func(  sE    6!a%"rva"%i!m'<'<"<<==RWQZZOOr   r   r:   r   r#   r   rR   )
g[tP2gf0g˯>g,1gft;gh<g#0g(<geԑ:gi5g:0ye>rl   rk   g-a=)r   rL   rM   r   r   rn   )r1   rE   lwuprq   s        r   test_from_docstringz%TestDualAnnealing.test_from_docstring&  s    	P 	P 	PWr\Vb[T$s2r{{*;*;FFF* * * 15		6 	6 	6 	6
 	666666r   z'new_e, temp_step, accepted, accept_rate))r   r     g]'?)r   r    r   gr(?)r:   r   in  gD?)r:   <   i  gt%?)r    r   i  gw?c           	         t          d          }d}d}d}d}	t          |          D ]n}
t          d d           }|                    |	dg           t	          |d d d ||          }||_        |                    d|dg           |j        |k    r|dz  }o||k    sJ dd|z
  ||	z
  z  |z  z
  }|dk    rdn+t          j	        t          j
        |          d|z
  z            }t          ||           d S )	N{   r   r   r   r<   )rT   rU   r    )jex_visit)r   ranger   update_currentr   temperature_stepaccept_rejectcurrent_energyr   explogr   )r1   new_e	temp_stepacceptedaccept_raterscount_accepted
iterationsaccept_paramr   _energy_statechainpqvrates                  r    test_accept_reject_probabilisticz2TestDualAnnealing.test_accept_reject_probabilistic4  s:     $$
z"" 	$ 	$A&T>>>L''<<<!dD$LB BE &/E" !uqc:::*e33!#)))) 1|#(>?)KK1HHqq"&L8H)I"J"Jk*****r   c                    d }dgdz  }dgdz  }d|d<   d|d<   d	|d
<   d|d<   t          ||          }t          ||d          }t          t          ||                    }t          ||d          }t	          |j        |j        d           t	          |j        t          j        dd
          d           t	          |j        |j        d           |j	        |j	        k    sJ d S )Nc                     t          j        | | z  dt          j        dt           j        z  | z            z  z
            dt          j        |           z  z   }|S r   r   )r   r6   s     r   rE   z1TestDualAnnealing.test_bounds_class.<locals>.funca  sI    q1urBF1ru9q=$9$999::R"'!**_LAHr   r   r   r   g       r   g      r<   r4      g       @r!   r#   r   r   rl   gHz>g&.>)
r   r   rL   rM   r   r   r   arangern   r   )r1   rE   r   r   r   ret_bounds_class
bounds_oldret_bounds_lists           r   test_bounds_classz#TestDualAnnealing.test_bounds_class^  s   	 	 	 Wq[VaZ 1111 B)$v4HHH#b"++&&
(jdKKK 	(*O,=DIIII(*BIb!,<,<4HHHH+-=-AMMMM#'7'<<<<<<<r   c                 T  	 t           j                            d          }d }d }d 		fd}t          |dddgddgg|t	          d	
                    }t          |dddgddgg|t	          d	|                    }t          |dddgddgg|t	          d|	                    }t          |dddgddgg|t	          d||                    }t          |j        |j        d           t          |j        |j        d           t          |j        |j        d           d S )Nl   ]k@A`Q c                 T    t          j        t          j        | |z                      S r   )r   r=   r   r   powers     r   r6   zETestDualAnnealing.test_callable_jac_hess_with_args_gh11052.<locals>.f  s     6"&e,,---r   c                 H    t          j        | |z            |z  | |dz
  z  z  S )Nr<   )r   r   r	  s     r   r   zGTestDualAnnealing.test_callable_jac_hess_with_args_gh11052.<locals>.jac  s)    6!u*%%-eai0@@@r   c                     t          j        |t          j        | |z            z  | |dz
  z  z  || |z  z  |z   dz
  z            S )Nr    r<   )r   diagr   r	  s     r   hesszHTestDualAnnealing.test_callable_jac_hess_with_args_gh11052.<locals>.hess  sU    7qEz***Q519-==e#e+a/1  r   c                 "     | |          |z  S r   r5   )r   pr
  r  s      r   hesspzITestDualAnnealing.test_callable_jac_hess_with_args_gh11052.<locals>.hessp  s    45>>A%%r   )r    r   r<   zL-BFGS-Br   )rB   r   rR   r   )r   r   z	newton-cg)r   r   r  )r   r   r  r   )rtol)r   rJ   rK   r   r   r   rn   )
r1   rR   r6   r   r  r   r   r   res4r  s
            @r   (test_callable_jac_hess_with_args_gh11052z:TestDualAnnealing.test_callable_jac_hess_with_args_gh11052{  s    i##$899	. 	. 	.	A 	A 	A	 	 		& 	& 	& 	& 	& aeaVaV4D#/3:/F/F/FH H HaeaVaV4D#/3:8;0= 0= 0=> > > aeaVaV4D#/3;8;$0H 0H 0HI I I aeaVaV4D#/3;8;50J 0J 0JK K K 	$(6666$(6666$(666666r   N)r5   )(__name__
__module____qualname__r2   r8   rE   rG   r   markparametrizer[   r`   rg   rr   	fail_slowrt   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r5   r   r   r   r      sy       & & &      # # # # [T#<#<#<==< < >=<  [T#4#4#4551 1 651$K K K   [2  
0 0 0
 [22 2 2
3 3 3
3 3 3& & & [2% % %% % %$ $ $
	& 	& 	&
E 
E 
EE E E 	 	 	    5 5 55 5 5   [^ 	. 	. 	. 	 	0 0	 	0< < <' ' ' [27 7 7 [F I I I  !+ !+ !+F [2= = =8 [2#7 #7 #7 #7 #7r   r   )__doc__scipy.optimizer   r   scipy.optimize._dual_annealingr   r   r   r   r	   r
   r   r   numpyr   numpy.testingr   r   r   r   rb   scipy._lib._utilr   r,   r   r5   r   r   <module>r!     s:  
  2 1 1 1 1 1 1 1 6 6 6 6 6 6 = = = = = = > > > > > > 8 8 8 8 8 8 ? ? ? ? ? ? + + + + + + + +      J J J J J J J J J J * * * * * * / / / / / /    F7 F7 F7 F7 F7 F7 F7 F7 F7 F7r   