
&]\c           @   s   d  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 m Z m Z m Z m Z d d
 l m Z d d l m Z d e f d     YZ d S(   s4   
Unit tests for the dual annealing global optimizer
i(   t   dual_annealing(   t   VisitingDistribution(   t   ObjectiveFunWrapper(   t   EnergyState(   t   LocalSearchWrapper(   t   rosent	   rosen_derN(   t   assert_equalt   TestCaset   assert_allcloset   assert_array_less(   t   raises(   t   check_random_statet   TestDualAnnealingc           B   s7  e  Z d    Z d   Z d   Z d! d  Z 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 d   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 d   Z d   Z  d   Z! d    Z" RS(#   c         C   s   d   |  _  d g d |  _ |  j d |  _ d |  _ d |  _ d |  _ d	 |  _ d
 |  _ t |  j  |  _	 d |  _
 d |  _ d  S(   Nc         S   s   t  j S(   N(   t   npt   inf(   t   x(    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   <lambda>   s    g{Gzg{Gz@i   i   i  in  g?g(\@i  i    (   g{Gzg{Gz@(   t	   weirdfunct	   ld_boundst	   hd_boundst   nbtestvaluest   high_temperaturet   low_temperaturet   qvt   seedR   t   rst   nb_fun_callt   ngev(   t   self(    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   setUp   s    						c         C   s   d  S(   N(    (   R   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   tearDown(   s    c         C   s   | d k r t  Sd  S(   Ng      ?(   t   True(   R   R   t   ft   context(    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   callback+   s    c         C   st   | r | } n d } t  j | | d d t  j d t  j | |   d t  j |  | } |  j d 7_ | S(   Ni    i   i
   i   (   R   t   sumt   cost   pit   sizeR   (   R   R   t   argst   shiftt   y(    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   func1   s    	Lc         C   s   |  j  d 7_  t | |  S(   Ni   (   R   R   (   R   R   R(   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   rosen_der_wrapper<   s    c   	      C   s   t  t |  j    } t j | d  } t j | d  } | j } t | | |  j |  j  } t j	 |  } | j
 | d |  j  } t t j | d  t  t j	 |  } | j
 | | |  j  } t t j | d d  t  d  S(   Ni    i   (   t   listt   zipR   R   t   arrayR'   R   R   R   t   zerost   visitingR   R   t	   not_equalR    (	   R   t   lut   lowert   uppert   dimt   vdt   valuest
   x_step_lowt   x_step_high(    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_visiting_stepping@   s    	c         C   s   t  t |  j    } t j | d  } t j | d  } t | | |  j |  j  } t j |  j	  } x0 t j
 |  j	  D] } | j |  j  | | <q{ Wt t j |  d  t d t j |   d  S(   Ni    i   g|=g    _B(   R-   R.   R   R   R/   R   R   R   R0   R   t   aranget   visit_fnR   R
   t   mint   max(   R   R3   R4   R5   R7   R8   t   i(    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt#   test_visiting_dist_high_temperatureO   s    c         C   sy   t  |  j  } t t |  j    } t j | d  } t j | d  } t | |  } t t	 | j
 | t d    d  S(   Ni    i   (   R   R   R-   R.   R   R   R/   R   t   assert_raisest
   ValueErrort   resetR   t   None(   R   t   owfR3   R4   R5   t   es(    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt
   test_reset^   s    c         C   s8   t  |  j |  j d |  j } t | j d d d d  S(   NR   g        t   atolg-q=(   R    R+   R   R   R	   t   fun(   R   t   ret(    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_low_dimf   s    c         C   s/   t  |  j |  j  } t | j d d d d  S(   Ng        RI   g-q=(   R    R+   R   R	   RJ   (   R   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_high_dimk   s    c         C   s5   t  |  j |  j d t } t | j d d d d  S(   Nt   no_local_searchg        RI   g-C6?(   R    R+   R   R    R	   RJ   (   R   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_low_dim_no_lso   s    	c         C   s5   t  |  j |  j d t } t | j d d d d  S(   NRN   g        RI   g-C6?(   R    R+   R   R    R	   RJ   (   R   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_high_dim_no_lst   s    	c         C   s,   t  |  j |  j  } t |  j | j  d  S(   N(   R    R+   R   R   R   t   nfev(   R   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_nb_fun_cally   s    c         C   s2   t  |  j |  j d t } t |  j | j  d  S(   NRN   (   R    R+   R   R    R   R   RQ   (   R   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_nb_fun_call_no_ls}   s    	c         C   s   t  t t |  j |  j  d  S(   N(   RB   RC   R    R   R   (   R   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_max_reinit   s    c         C   s   d } t  |  j |  j d | } t  |  j |  j d | } t  |  j |  j d | } t | j | j  t | j | j  d  S(   Ni  R   (   R    R+   R   R   R   (   R   R   t   res1t   res2t   res3(    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_reproduce   s    c         C   s)   d d d g } t  t t |  j |  d  S(   Ng{Gzg{Gz@i   i    (   g{Gzg{Gz@(   i   i    (   g{Gz@g{Gz@(   RB   RC   R    R+   (   R   t   wrong_bounds(    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_bounds_integrity   s    c         C   s   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(
   Nii   i    (   ii   (   ii   (   ii   (   ii   (   ii   (   ii   (   R   R   RB   RC   R    R+   t   nan(   R   t   invalid_bounds(    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_bound_validity   s    c         C   sf   t  |  j |  j d d } t t t |  j  t j t j  t j	  } | j
 d | k sb t  d  S(   Nt   maxfunid   (   R    R+   R   R>   R?   t   lenR   t   LS_MAXITER_RATIOt   LS_MAXITER_MINt   LS_MAXITER_MAXRQ   t   AssertionError(   R   RK   t   ls_max_iter(    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_max_fun_ls   s    	c         C   s:   t  |  j |  j d t d d } | j d k s6 t  d  S(   NRN   R^   i  (   R    R+   R   R    RQ   Rc   (   R   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_max_fun_no_ls   s    c         C   s4   t  |  j |  j d d } | j d k s0 t  d  S(   Nt   maxiteri  (   R    R+   R   t   nitRc   (   R   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_maxiter   s    c         C   s5   t  |  j |  j d d } t | j d d d d  S(   NR(   gn!	@RI   gư>(   gn!	@(   R    R+   R   R	   RJ   (   R   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_fun_args_ls   s    	c         C   s;   t  |  j |  j d d d t } t | j d d d d  S(   NR(   gn!	@RN   RI   g-C6?(   gn!	@(   R    R+   R   R    R	   RJ   (   R   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_fun_args_no_ls   s    c         C   sP   t  |  j |  j d |  j } | j d k s3 t  d | j d k sL t  d  S(   NR#   g      ?s
   stop earlyi    (   R    R+   R   R#   RJ   Rc   t   message(   R   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_callback_stop   s    c         C   sB   i d d 6} t  |  j |  j d | } t | j d d d d  S(   Ns   Nelder-Meadt   methodt   local_search_optionsg        RI   gư>(   R    R+   R   R	   RJ   (   R   t   minimizer_optsRK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_neldermed_ls_minimizer   s
    
	c         C   sB   i d d 6} t  |  j |  j d | } t | j d d d d  S(   Nt   PowellRn   Ro   g        RI   g:0yE>(   R    R+   R   R	   RJ   (   R   Rp   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_powell_ls_minimizer   s
    
	c         C   sB   i d d 6} t  |  j |  j d | } t | j d d d d  S(   Nt   CGRn   Ro   g        RI   g:0yE>(   R    R+   R   R	   RJ   (   R   Rp   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_cg_ls_minimizer   s
    
	c         C   sB   i d d 6} t  |  j |  j d | } t | j d d d d  S(   Nt   BFGSRn   Ro   g        RI   g:0yE>(   R    R+   R   R	   RJ   (   R   Rp   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_bfgs_ls_minimizer   s
    
	c         C   sB   i d d 6} t  |  j |  j d | } t | j d d d d  S(   Nt   TNCRn   Ro   g        RI   g:0yE>(   R    R+   R   R	   RJ   (   R   Rp   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_tnc_ls_minimizer   s
    
	c         C   sB   i d d 6} t  |  j |  j d | } t | j d d d d  S(   Nt   COBYLARn   Ro   g        RI   gh㈵>(   R    R+   R   R	   RJ   (   R   Rp   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_colyba_ls_minimizer   s
    
	c         C   sB   i d d 6} t  |  j |  j d | } t | j d d d d  S(   Nt   SLSQPRn   Ro   g        RI   gHz>(   R    R+   R   R	   RJ   (   R   Rp   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_slsqp_ls_minimizer   s
    
	c         C   sB   t  t t |  j |  j d d t  t t |  j |  j d d d  S(   Nt   restart_temp_ratioi   i    (   RB   RC   R    R+   R   (   R   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_wrong_restart_temp   s    c         C   sD   i |  j  d 6} t t |  j d | } | j |  j k s@ t  d  S(   Nt   jacRo   (   R,   R    R   R   t   njevR   Rc   (   R   Rp   RK   (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   test_gradient_gnev  s
    	(    (    (#   t   __name__t
   __module__R   R   R#   R+   R,   R;   RA   RH   RL   RM   RO   RP   RR   RS   RT   RX   RZ   R]   Re   Rf   Ri   Rj   Rk   Rm   Rq   Rs   Ru   Rw   Ry   R{   R}   R   R   (    (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyR      sB   														
																	(   t   __doc__t   scipy.optimizeR    t   scipy.optimize._dual_annealingR   R   R   R   R   R   t   numpyR   t   numpy.testingR   R   R	   R
   t   pytestR   RB   t   scipy._lib._utilR   R   (    (    (    sH   lib/python2.7/site-packages/scipy/optimize/tests/test__dual_annealing.pyt   <module>   s   "