ó
î&]\c           @` s•  d  Z  d d l m Z m Z m Z d d l Z d d l m Z m Z m	 Z	 d d l
 m Z d d l Z d d l m Z m Z d d l m Z m Z d d l m Z m Z m Z m Z d	 „  Z d
 „  Z d „  Z d „  Z d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ  d e f d „  ƒ  YZ! d e f d „  ƒ  YZ" d e f d „  ƒ  YZ# d e f d „  ƒ  YZ$ d e f d „  ƒ  YZ% d e f d „  ƒ  YZ& d S(   sA   
Unit tests for the basin hopping global minimization algorithm.
i    (   t   divisiont   print_functiont   absolute_importN(   t   assert_almost_equalt   assert_equalt   assert_(   t   raises(   t   cost   sin(   t   basinhoppingt   OptimizeResult(   t   Storaget   RandomDisplacementt
   Metropolist   AdaptiveStepsizec         C` sW   t  d |  d ƒ |  d |  } t j d t d |  d ƒ d |  d ƒ } | | f S(   Ng      -@g333333Ó?gš™™™™™É?g      -Àg       @(   R   t   npt   arrayR   (   t   xt   ft   df(    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   func1d   s     -c         C` sD   t  d |  d d ƒ |  d d |  d |  d d |  d } | S(   Ng      -@i    g333333Ó?i   gš™™™™™É?(   R   (   R   R   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   func2d_nograd   s    @c         C` sŸ   t  d |  d d ƒ |  d d |  d |  d d |  d } t j d ƒ } d t d |  d d ƒ d |  d d | d <d |  d d | d <| | f S(	   Ng      -@i    g333333Ó?i   gš™™™™™É?i   g      -Àg       @(   R   R   t   zerosR   (   R   R   R   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   func2d   s
    @0c         C` s›   d |  d d d |  d |  d d |  d d d |  d } t  j d ƒ } d |  d d |  d d | d <d |  d d |  d | d <| | f S(   Ng       @i    i   i   g      @g      @(   R   R   (   R   R   R   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   func2d_easyderiv$   s
    B"t   MyTakeStep1c           B` s    e  Z d  Z d „  Z d „  Z RS(   sf   use a copy of displace, but have it set a special parameter to
    make sure it's actually being used.c         C` s    t  |  _ t t |  ƒ j ƒ  d  S(   N(   t   Falset   been_calledt   superR   t   __init__(   t   self(    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR   0   s    	c         C` s   t  |  _ t t |  ƒ j | ƒ S(   N(   t   TrueR   R   R   t   __call__(   R   R   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR    4   s    	(   t   __name__t
   __module__t   __doc__R   R    (    (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR   -   s   	c         C` s0   d } |  t  j j | | t  j |  ƒ ƒ 7}  |  S(   sw   redo RandomDisplacement in function form without the attribute stepsize
    to make sure everything still works ok
    g      à?(   R   t   randomt   uniformt   shape(   R   t   s(    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   myTakeStep29   s    &t   MyAcceptTestc           B` s    e  Z d  Z d „  Z d „  Z RS(   sŽ   pass a custom accept test

    This does nothing but make sure it's being used and ensure all the
    possible return values are accepted
    c      	   C` sL   t  |  _ d |  _ t  d t t j t ƒ t j t  ƒ g  i  d d g	 |  _ d  S(   Ni    s   force accepti   (   R   R   t   ncallsR   R   t   bool_t   testres(   R   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR   H   s    		c         K` sN   t  |  _ |  j d 7_ |  j d t |  j ƒ k  rF |  j |  j d St  Sd  S(   Ni   (   R   R   R*   t   lenR,   (   R   t   kwargs(    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR    N   s
    	(   R!   R"   R#   R   R    (    (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR)   B   s   	t
   MyCallBackc           B` s    e  Z d  Z d „  Z d „  Z RS(   s˜   pass a custom callback function

    This makes sure it's being used.  It also returns True after 10
    steps to ensure that it's stopping early.

    c         C` s   t  |  _ d |  _ d  S(   Ni    (   R   R   R*   (   R   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR   ^   s    	c         C` s/   t  |  _ |  j d 7_ |  j d k r+ t  Sd  S(   Ni   i
   (   R   R   R*   (   R   R   R   t   accepted(    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR    b   s    	(   R!   R"   R#   R   R    (    (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR/   W   s   	t   TestBasinHoppingc           B` s¡   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 d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C` s‰   d d d g f |  _  d t j d d g ƒ f |  _ d |  _ d |  _ t |  _ t j j	 d ƒ i d d 6t
 d	 6|  _ i d d 6|  _ d
 S(   s]    Tests setup.

        Run tests based on the 1-D and 2-D functions described above.
        g      ð?gö(\ÂõÈ¿gš™™™™™¹¿i   id   iÒ  s   L-BFGS-Bt   methodt   jacN(   t   x0R   R   t   solt   tolt   niterR   t   dispR$   t   seedR   R.   t   kwargs_nograd(   R   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   setup_methodk   s    			c         C` sJ   d } t  t t t |  j | d d ƒt  t t t |  j | d d ƒd  S(   Ni   t	   take_stept   accept_test(   t   assert_raisest	   TypeErrorR	   R   R4   (   R   t   i(    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_TypeError~   s
    c      	   C` sX   d } t  t |  j | d |  j d |  j d |  j ƒ} t | j |  j | |  j	 ƒ d  S(   Ni    t   minimizer_kwargsR7   R8   (
   R	   R   R4   R.   R7   R8   R   R   R5   R6   (   R   R@   t   res(    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_1d_gradˆ   s    c      	   C` sk   d } t  t |  j | d |  j d |  j d |  j ƒ} t | j |  j | |  j	 ƒ t
 | j d k ƒ d  S(   Ni   RB   R7   R8   i    (   R	   R   R4   R.   R7   R8   R   R   R5   R6   R   t   nfev(   R   R@   RC   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_2d   s
    c      	   C` sw   d } |  j  j ƒ  } d | d <t t |  j | d | d |  j d |  j ƒ} t | j d k ƒ t	 | j | j
 ƒ d  S(   Ni   t   BFGSR2   RB   R7   R8   i    (   R.   t   copyR	   R   R4   R7   R8   R   RE   R   t   njev(   R   R@   RB   RC   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt	   test_njev—   s    
c      	   C` sŽ   |  j  j ƒ  } d | d <t t d d g d | d |  j d |  j ƒ} t t | j d ƒ ƒ t | j	 ƒ \ } } t
 | j j | |  j ƒ d  S(   NRG   R2   g        RB   R7   R8   R3   (   R.   RH   R	   R   R7   R8   R   t   hasattrt   lowest_optimization_resultR   R   R3   R6   (   R   RB   RC   t   _t   jacobian(    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_jac£   s    
c      	   C` sX   d } t  t |  j | d |  j d |  j d |  j ƒ} t | j |  j | |  j	 ƒ d  S(   Ni   RB   R7   R8   (
   R	   R   R4   R:   R7   R8   R   R   R5   R6   (   R   R@   RC   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_2d_nograd´   s
    	c      
   C` sš   d } d d d d d d g } t  j  |  j ƒ } xc | D][ } | | d <t t |  j | d	 | d
 |  j d |  j ƒ} t | j |  j	 | |  j
 ƒ q7 Wd  S(   Ni   t   CGRG   s	   Newton-CGs   L-BFGS-Bt   TNCt   SLSQPR2   RB   R7   R8   (   RH   R.   R	   R   R4   R7   R8   R   R   R5   R6   (   R   R@   t   methodsRB   R2   RC   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_all_minimizers¼   s    
c      
   C` s¾   d } d d d d d d d d	 g } t  j  |  j ƒ } x | D]y } | | d
 <t t |  j | d | d |  j d |  j ƒ} |  j } | d	 k r™ d } n  t | j	 |  j
 | d | ƒq= Wd  S(   Ni   RQ   RG   s   L-BFGS-BRR   RS   s   Nelder-Meadt   Powellt   COBYLAR2   RB   R7   R8   i   t   decimal(   RH   R:   R	   R   R4   R7   R8   R6   R   R   R5   (   R   R@   RT   RB   R2   RC   R6   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_all_nograd_minimizersÉ   s    
		c         C` s   t  ƒ  } | j } d } t t |  j | d |  j d |  j d |  j d | ƒ} t | j	 |  j
 | |  j ƒ t | j ƒ t | | j k ƒ d  S(   Ni   RB   R7   R8   R<   (   R   t   stepsizeR	   R   R4   R.   R7   R8   R   R   R5   R6   R   R   (   R   t   takestept   initial_step_sizeR@   RC   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_pass_takestepÚ   s    			c         C` sd   t  } d } t t |  j | d |  j d |  j d |  j d | ƒ} t | j |  j	 | |  j
 ƒ d  S(   Ni   RB   R7   R8   R<   (   R(   R	   R   R4   R:   R7   R8   R   R   R5   R6   (   R   R[   R@   RC   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_pass_simple_takestepè   s    		c         C` sR   t  ƒ  } d } t t |  j | d |  j d d d |  j d | ƒt | j ƒ d  S(   Ni   RB   R7   i
   R8   R=   (   R)   R	   R   R4   R.   R8   R   R   (   R   R=   R@   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_pass_accept_testò   s
    	c         C` s{   t  ƒ  } d } t t |  j | d |  j d d d |  j d | ƒ} t | j ƒ t d | j d k ƒ t	 | j
 d ƒ d  S(	   Ni   RB   R7   i   R8   t   callbacki    i
   (   R/   R	   R   R4   R.   R8   R   R   t   messageR   t   nit(   R   R`   R@   RC   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_pass_callbacký   s    	c      	   C` sq   d } t  d d ƒ |  j d <d |  _ t t |  j | d |  j d |  j d |  j ƒ} t | j d | j	 ƒ d  S(	   Ni   t   maxiteri    t   optionsi
   RB   R7   R8   (
   t   dictR.   R7   R	   R   R4   R8   R   Rb   t   minimization_failures(   R   R@   RC   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_minimizer_fail
  s    	c      	   C` s6   d } t  t |  j | d |  j d d d |  j ƒd  S(   Ni    RB   R7   R8   (   R	   R   R4   R.   R8   (   R   R@   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_niter_zero  s    c         ` s·   i d d 6t  d 6} g  ‰  ‡  f d †  } t t d d g d | d d d	 | d
 d ƒg  ‰ ‡ f d †  } t t d d g d | d d d	 | d
 d ƒt t j ˆ  ƒ t j ˆ ƒ ƒ d  S(   Ns   L-BFGS-BR2   R3   c         ` s   ˆ  j  | ƒ d  S(   N(   t   append(   R   R   R0   (   t   f_1(    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR`   !  s    g      ð?RB   R7   i
   R`   R9   c         ` s   ˆ  j  | ƒ d  S(   N(   Rj   (   R   R   R0   (   t   f_2(    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt	   callback2)  s    (   R   R	   R   R   R   R   (   R   RB   R`   Rm   (    (   Rk   Rl   sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_seed_reproducibility  s    c         C` s^   d } t  t |  j | d |  j d |  j d |  j d d ƒ} t | j |  j | |  j	 ƒ d  S(   Ni    RB   R7   R8   t   T(
   R	   R   R4   R.   R7   R8   R   R   R5   R6   (   R   R@   RC   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_monotonic_basin_hopping0  s    (   R!   R"   R;   RA   RD   RF   RJ   RO   RP   RU   RY   R]   R^   R_   Rc   Rh   Ri   Rn   Rp   (    (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR1   i   s"   		
									
					t   Test_Storagec           B` s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C` sO   t  j d ƒ |  _ d |  _ t ƒ  } |  j | _ |  j | _ t | ƒ |  _ d  S(   Ni   i    (	   R   R   R4   t   f0R
   R   t   funR   t   storage(   R   t   minres(    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR;   9  s    		c         C` s   t  ƒ  } |  j d | _ |  j d | _ |  j j | ƒ } |  j j ƒ  } t |  j | j ƒ t |  j | j ƒ t	 | ƒ d  S(   Ni   (
   R
   R4   R   Rr   Rs   Rt   t   updatet
   get_lowestR   R   (   R   t
   new_minrest   retRu   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_higher_f_rejectedC  s    	c         C` s„   t  ƒ  } |  j d | _ |  j d | _ |  j j | ƒ } |  j j ƒ  } t |  j | j k ƒ t |  j | j k ƒ t | ƒ d  S(   Ni   (	   R
   R4   R   Rr   Rs   Rt   Rv   Rw   R   (   R   Rx   Ry   Ru   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_lower_f_acceptedN  s    	(   R!   R"   R;   Rz   R{   (    (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyRq   8  s   	
	t   Test_RandomDisplacementc           B` s   e  Z d  „  Z d „  Z RS(   c         C` sC   d |  _  t d |  j  ƒ |  _ d |  _ t j |  j g ƒ |  _ d  S(   Ng      ð?RZ   ià“ (   RZ   R   t   displacet   NR   R   R4   (   R   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR;   [  s    		c         C` s]   |  j  |  j ƒ } d |  j d d } t t j | ƒ d d ƒ t t j | ƒ | d ƒ d  S(   Ng       @i   i   g        i   (   R}   R4   RZ   R   R   t   meant   var(   R   R   t   v(    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_randoma  s    (   R!   R"   R;   R‚   (    (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR|   Z  s   	t   Test_Metropolisc           B` s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C` s   d |  _  t |  j  ƒ |  _ d  S(   Ng       @(   Ro   R   t   met(   R   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR;   l  s    	c         C` s1   |  j  d d d d ƒ } t | t ƒ s- t ‚ d  S(   Nt   f_newg        t   f_oldg      ð?(   R„   t
   isinstancet   boolt   AssertionError(   R   Ry   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_boolean_returnp  s    c         C` s    t  |  j d d d d ƒ ƒ d  S(   NR…   g        R†   g      ð?(   R   R„   (   R   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR{   v  s    c         C` s0   t  t |  j d d ƒt  t |  j d d ƒd  S(   NR†   g      ð?R…   (   R>   t   KeyErrorR„   (   R   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_KeyErrory  s    c         C` sx   t  } t  } xQ t d ƒ D]C } | r/ | r/ Pn  |  j d d d d ƒ } | rV t } q t } q Wt | ƒ t | ƒ d  S(   Niè  R…   g      ð?R†   g      à?(   R   t   rangeR„   R   R   (   R   t
   one_acceptt
   one_rejectR@   Ry   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_accept~  s    	

c         C` s9   t  d ƒ } t j d d ƒ  | j d d ƒ Wd  QXd  S(   Ni   t   overt   raisei    iÐ  (   R   R   t   errstatet   accept_reject(   R   R„   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_GH7495  s    (   R!   R"   R;   RŠ   R{   RŒ   R   R•   (    (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyRƒ   k  s   					t   Test_AdaptiveStepsizec           B` s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C` sO   d |  _  t d |  j  ƒ |  _ d |  _ t d |  j d t d |  j ƒ |  _ d  S(   Ng      ð?RZ   g      à?R[   t   verboset   accept_rate(   RZ   R   t   tst   target_accept_rateR   R   R[   (   R   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR;   –  s
    		c         C` sz   d } |  j  | ƒ |  j  j t ƒ x7 t |  j  j ƒ D]# } |  j  | ƒ |  j  j t ƒ q6 Wt |  j j |  j k ƒ d  S(   Ng        (	   R[   t   reportR   R   t   intervalR   R   R™   RZ   (   R   R   R@   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_adaptive_increase  s    c         C` sz   d } |  j  | ƒ |  j  j t ƒ x7 t |  j  j ƒ D]# } |  j  | ƒ |  j  j t ƒ q6 Wt |  j j |  j k  ƒ d  S(   Ng        (	   R[   R›   R   R   Rœ   R   R   R™   RZ   (   R   R   R@   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_adaptive_decrease§  s    c         C` sa   d } x; t  |  j j d ƒ D]# } |  j | ƒ |  j j t ƒ q Wt |  j j |  j k ƒ d  S(   Ng        i   (   R   R[   Rœ   R›   R   R   R™   RZ   (   R   R   R@   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_all_accepted±  s
    c         C` sa   d } x; t  |  j j d ƒ D]# } |  j | ƒ |  j j t ƒ q Wt |  j j |  j k  ƒ d  S(   Ng        i   (   R   R[   Rœ   R›   R   R   R™   RZ   (   R   R   R@   (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   test_all_rejected¹  s
    (   R!   R"   R;   R   Rž   RŸ   R    (    (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyR–   •  s
   		
	
	('   R#   t
   __future__R    R   R   RH   t   numpy.testingR   R   R   t   pytestR   R>   t   numpyR   R   R   t   scipy.optimizeR	   R
   t   scipy.optimize._basinhoppingR   R   R   R   R   R   R   R   R   R(   t   objectR)   R/   R1   Rq   R|   Rƒ   R–   (    (    (    sF   lib/python2.7/site-packages/scipy/optimize/tests/test__basinhopping.pyt   <module>   s*   "							Ï"*