
&]\c           @   s   d  Z  d d l m Z d d l m Z d d l m Z d d l Z d d l m Z d d l	 m
 Z
 m Z m Z m Z m Z d d l m Z m Z d	 e f d
     YZ d S(   s@   
Unit tests for the differential global minimization algorithm.
i(   t   _differentialevolution(   t   DifferentialEvolutionSolver(   t   differential_evolutionN(   t   rosen(   t   assert_equalt   assert_allcloset   assert_almost_equalt   assert_string_equalt   assert_(   t   raisest   warnst   TestDifferentialEvolutionSolverc           B   sU  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 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   t  j d d  |  _ t  j d d g d d g g  |  _ d d g |  _ t |  j d g  |  _ t |  j d g d d	 d
 d |  _	 t  j
 t  j d d d   j } | |  j	 _ d  S(   Nt   invalidt   raiseg        g       @i    id   i   t   popsizei   t   mutationg      ?g?g?(   g        g       @(   g        g       @(   i    id   (   i    i   (   t   npt   seterrt
   old_seterrt   arrayt   limitst   boundsR   t	   quadratict   dummy_solvert   dummy_solver2t
   atleast_2dt   aranget   Tt
   population(   t   selfR   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   setup_method   s    			!c         C   s   t  j |  j   d  S(   N(   R   R   R   (   R   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   teardown_method$   s    c         C   s   | d d S(   Ni    i   (    (   R   t   x(    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyR   '   s    c         C   s  t  t |  j d d } t | j d  t | j j d  t  t |  j d d } t | j d  t | j j d  t  t |  j d d } t | j d  t | j j d  t  t |  j d d } t | j d  t | j j d  t  t |  j d d } t | j d  t | j j d	  t  t |  j d d
 } t | j d
  t | j j d  t  t |  j d d } t | j d  t | j j d	  t  t |  j d d } t | j d  t | j j d	  t  t |  j d d } t | j d  t | j j d  t  t |  j d d } t | j d  t | j j d  t  t |  j d d } t | j d  t | j j d  t  t |  j d d } t | j d  t | j j d  d  S(   Nt   strategyt   best1expt   _best1t   best1bint   rand1bint   _rand1t   rand1expt   rand2expt   _rand2t   best2bint   _best2t   rand2bint   randtobest1bint   _randtobest1t   randtobest1expt   currenttobest1bint   _currenttobest1t   currenttobest1exp(   R   R   R   R   R!   t   mutation_funct   __name__(   R   t   solver(    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test__strategy_resolves*   sx    																								c         C   sf   t  j d g  } |  j j d  } t | |  t  j d g  } |  j j d	  } t | |  d  S(
   Ng?i   i   i   i   i   g      ?(   i   i   i   i   i   (   i   i   i   i   i   (   R   R   R   R#   R   R&   (   R   t   resultt   trial(    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test__mutate1u   s    c         C   sf   t  j d g  } |  j j d  } t | |  t  j d g  } |  j j d	  } t | |  d  S(
   Ngi   i   i   i   i   g?(   i   i   i   i   i   (   i   i   i   i   i   (   R   R   R   R+   R   R)   (   R   R7   R8   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test__mutate2   s    c         C   s5   t  j d g  } |  j j d  } t | |  d  S(   Ng333333?i   i   i   i   i   (   i   i   i   i   i   (   R   R   R   R.   R   (   R   R7   R8   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test__randtobest1   s    c         C   s8   t  j d g  } |  j j d d  } t | |  d  S(	   Ng?i   i   i   i   i   i   (   i   i   i   i   i   (   R   R   R   R1   R   (   R   R7   R8   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test__currenttobest1   s    c         C   s;   d } t  |  j |  j d | } t | j t |   d  S(   Ng      ?i   R   (   g      ?i   (   R   R   R   R   t   dithert   list(   R   R   R5   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_can_init_with_dithering   s
    			c         C   s   t  } d } t t t | |  j d | d } t t t | |  j d | d t j f } t t t | |  j d | d } t | |  j d | } t d | j  t d  | j
  d  S(	   Ng      ?i   R   ii   g?(   g      ?i   (   ii   (   R   t   assert_raisest
   ValueErrorR   R   R   t   nanR   t   scalet   NoneR=   (   R   t   funcR   R5   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt+   test_invalid_mutation_values_arent_accepted   s2    					c         C   si   t  j d g  } t d |  j j |   t  j d g d g g  |  j _ t d |  j j |   d  S(   Ng333333?i   id   g        (   R   R   R   R   t   _scale_parametersR   (   R   R8   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test__scale_parameters   s    !c         C   si   t  j d g  } t d |  j j |   t  j d g d g g  |  j _ t d |  j j |   d  S(   Ni   g333333?id   g        (   R   R   R   R   t   _unscale_parametersR   (   R   R8   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test__unscale_parameters   s    !c         C   sn   t  j d d d d d d g  } |  j j |  t | d d  t t  j | d k | d	 k  j    d  S(
   Ng?ig?g       @g     r@gh㈵i   i    i   (   R   R   R   t   _ensure_constraintR   R   t   logical_andt   all(   R   R8   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test__ensure_constraint   s    !c         C   sA   t  |  j d g  } | j   } t | j |  j | j   d  S(   Nii   (   ii   (   R   R   t   solveR   t   funR    (   R   R5   R7   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_differential_evolution   s    c         C   s8   t  |  j d g  } | j   } t | j | j  d  S(   Nii   (   ii   (   R   R   RO   R   R    (   R   R5   R7   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_best_solution_retrieval   s    c         C   sA   d d g } d d  } t  t | d | } t | j d  d  S(	   Ni    i   g        c         S   s   t  S(   N(   t   True(   t   paramt   convergence(    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   callback   s    RV   s8   callback function requested stop early by returning True(   i    i   (   i    i   (   R   R   R   t   message(   R   R   RV   R7   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_callback_terminates   s
    	c         C   sK   d
 g } d } d   } t  | | d | d t } t | j d	 d  d  S(   Nii
   g      ?g       @g      @c         W   sE   t  |  t k r! t d   n  | d | d |  | d |  d S(   Ns   args should be a tuplei    i   i   g       @(   t   typet   tupleRA   (   R    t   args(    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyR      s    R[   t   polishi   (   ii
   (   g      ?g       @g      @(   R   RS   R   RP   (   R   R   R[   R   R7   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_args_tuple_is_passed   s    			c         C   s,   t  } d g } t t t | | d d d  S(   Nii   R!   t   abc(   ii   (   R   R@   RA   R   (   R   RE   R   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_init_with_invalid_strategy   s    	c         C   sa   t  } d g } t t t | |  d g } t t t | |  d d g } t t t | |  d  S(   Nii   i   i   (   iN(   ii   (   i   i   i   (   R   RD   R@   RA   R   (   R   RE   R   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_bounds_checking  s     		c   
   
   C   s   t  j d d d j d d  } t t | d d  d   f | d d  d   f   } t d  | d d } d } | j | d	  \ } } } } }	 t t	 t  j
 t  j | | | | | |	 g    d  d  S(
   Ng      (@t   dtypet   float64i   i   i    i   R   i   (   R   R   t   reshapeR>   t   zipR   RD   t   _select_samplesR   t   lent   uniqueR   (
   R   R   R   R5   t	   candidatet   r1t   r2t   r3t   r4t   r5(    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_select_samples  s    !5!c         C   sH   t  t |  j d d } | j   } t | j t  t | j d  d  S(   Nt   maxiteri   s/   Maximum number of iterations has been exceeded.(   R   R   R   RO   R   t   successt   FalseRW   (   R   R5   R7   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_maxiter_stops_solve%  s
    	c         C   s$  t  t |  j d d d t } | j   } t | j d  t | j t  t | j d  t  t |  j d d d t d d } | j   } t | j d	  t | j t  t | j d  t  t |  j d d d t d d d
 d } | j   } t | j d  t | j t  t | j d  d  S(   Nt   maxfuni   R\   i   s9   Maximum number of function evaluations has been exceeded.R   i   i(   i)   t   updatingt   deferreds8   Maximum number of function evaluations has been reached.(	   R   R   R   Rq   RO   R   t   nfevRp   RW   (   R   R5   R7   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_maxfun_stops_solve.  s8    								c         C   sB   t  |  j d g d d } | j   t t j | j  d  d  S(   Niid   t   tolg{Gz?i    (   iid   (   R   R   RO   R   R   t   argmint   population_energies(   R   R5   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_quadratic\  s
    			
c         C   s   t  |  j d g d d d  S(   Niid   Rx   g{Gz?(   iid   (   R   R   (   R   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_quadratic_from_diff_evd  s    		c      	   C   sx   t  |  j d g d t d d d d } t  |  j d	 g d t d d d d } t | j | j  t | j | j  d  S(
   Niid   R\   t   seedi   Rx   g      ?(   iid   (   iid   (   R   R   Rq   R   R    Rv   (   R   R7   t   result2(    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_seed_gives_repeatabilityj  s    						c         C   s,   t  t |  j d d d d } | j   d  S(   NR!   R"   Ro   i   (   R   R   R   RO   (   R   R5   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_exp_runsx  s
    		c         C   s+   d d g } t  t | d d d d } d  S(	   Nii   R   i  Ro   i   (   ii   (   ii   (   R   R   (   R   R   R7   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_gh_4511_regression  s    c         C   s_   t  t |  j d d } | j | j  | j   t t j | j	  d  t | j
 d  d  S(   NR   i   i    i   (   R   R   R   t   _calculate_population_energiesR   t   _promote_lowest_energyR   R   Ry   Rz   t   _nfev(   R   R5   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt"   test_calculate_population_energies  s
    
c         C   s   t  t |  j d d d d } t |  \ } } t t j | d  d  t | j d  t t	 t |  t  t |  j  } x6 t
 |  D]( \ } } | \ } } | d k r Pq q Wt | d  d  S(   NR   i   Rs   i   i    i   i  (   R   R   R   t   nextR   R   t   sizeR   R@   t   StopIterationt	   enumerateR   (   R   R5   R    RP   t   it   solnt	   x_currentt   fun_current(    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_iteration  s    	c         C   s?   t  t |  j d d d t } | j   t | j d k   d  S(   NRx   g?R\   (   R   R   R   Rq   RO   R   RU   (   R   R5   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_convergence  s    	
c         C   s,   t  t |  j d d  d d  } | j   d  S(   NRo   Rs   (   R   R   R   RD   RO   (   R   R5   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_maxiter_none_GH5731  s    	c         C   s  t  t t t |  j f i d d 6 t t |  j  } | j   t | j d  t t	 j
 t	 j | j    | j   t | j d  t t	 j
 t	 j | j    t	 j d d d  j d d  } t t |  j d | d	 d
 d d d d d d } t | j d  t t	 j
 t	 j | j    t | j d k  t | j d k  t	 j | j |  d d  } t | j d  |  t t	 j | j d   d  t t	 j | j d   d  t	 j d d d  j d d  } t  t t t |  j f i | d 6 d  S(   Nt   rubbisht   initi    ii   i
   i   i   R!   R*   t   atolg{Gz?R}   i   R   i   (   i   i   (   R@   RA   R   R   R   t   init_population_randomR   R   R   R   RM   t   isinfRz   t   init_population_lhst   linspaceRc   t   num_population_memberst   population_shapet   clipRI   R   R   t   mint   max(   R   R5   R   t   unscaled_population(    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_population_initiation  s<    

!!c         C   s7   d   } d d g } t  | d d d	 g d t } d  S(
   Nc         S   s   |  d d k  r t  j S|  d S(   Ni    g      ?i   (   R   t   inf(   R    (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   sometimes_inf  s    i    i   R   t   disp(   i    i   (   i    i   (   i    i   (   i    i   (   R   Rq   (   R   R   R   t   x_fit(    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt    test_infinite_objective_function  s
    		c         C   s^   d d d	 d
 g } t  t | d d } t | j d k  t | j j t k  | j   d  S(   Ng        g       @i    i   Rt   Ru   (   g        g       @(   g        g       @(   i    i   (   i    i   (   R   R   R   t	   _updatingt   _mapwrappert   _mapfunct   mapRO   (   R   R   R5   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_deferred_updating  s
    c      	   C   sm   d d g } t  t |  } t | j d k  t t  - t  t | d d } t | j d k  Wd  QXd  S(	   Ng        g       @t	   immediatet   workersi   Ru   (   g        g       @(   g        g       @(   R   R   R   R   R
   t   UserWarning(   R   R   R5   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_immediate_updating  s    c         C   sg   d d g } t  t | d d d d : } t | j j d  k	  t | j d k  | j   Wd  QXd  S(	   Ng        g       @Rt   Ru   R   i   (   g        g       @(   g        g       @(   R   R   R   R   t   poolRD   R   RO   (   R   R   R5   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_parallel  s    c         C   s3   t  t d d g  } | j   t | j    d  S(   Ni    i   (   i    i   (   i    i   (   R   R   RO   R   t	   converged(   R   R5   (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   test_converged  s    
('   R4   t
   __module__R   R   R   R6   R9   R:   R;   R<   R?   RF   RH   RJ   RN   RQ   RR   RX   R]   R_   R`   Rn   Rr   Rw   R{   R|   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyR      sJ   				K	
													
		
			.							
					4				
(   t   __doc__t   scipy.optimizeR    t%   scipy.optimize._differentialevolutionR   R   t   numpyR   R   t   numpy.testingR   R   R   R   R   t   pytestR	   R@   R
   t   objectR   (    (    (    sP   lib/python2.7/site-packages/scipy/optimize/tests/test__differential_evolution.pyt   <module>   s   (