
ʽXc           @   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 m Z m Z m Z d e f d	     YZ e d
 k r e   n  d S(   s@   
Unit tests for the differential global minimization algorithm.
i(   t   _differentialevolution(   t   DifferentialEvolutionSolver(   t   differential_evolutionN(   t   rosen(   t   assert_equalt   TestCaset   assert_allcloset   run_module_suitet   assert_almost_equalt   assert_string_equalt   assert_raisest   assert_t   TestDifferentialEvolutionSolverc           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 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   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   setUp   s    			!c         C   s   t  j |  j   d  S(   N(   R   R   R   (   R   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   tearDown#   s    c         C   s   | d d S(   Ni    i   (    (   R   t   x(    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyR   &   s    c         C   sR  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   randtobest1exp(   R   R   R   R   R"   t   mutation_funct   __name__(   R   t   solver(    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test__strategy_resolves)   sd    																				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   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test__mutate1h   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   R5   R6   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test__mutate2r   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   R/   R   (   R   R5   R6   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test__randtobest1~   s    c         C   s>   d } t  |  j |  j d | } |  j | j t |   d  S(   Ng      ?i   R   (   g      ?i   (   R   R   R   t   assertEqualt   dithert   list(   R   R   R3   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test_can_init_with_dithering   s
    			c         C   s   t  } d } |  j t t | |  j d | d } |  j t t | |  j d | d t j f } |  j 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   assertRaisest
   ValueErrorR   R   R   t   nanR   t   scalet   NoneR;   (   R   t   funcR   R3   (    (    sP   /tmp/pip-build-7oUkmx/scipy/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   R6   (    (    sP   /tmp/pip-build-7oUkmx/scipy/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   R6   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test__unscale_parameters   s    !c         C   sN   t  j d d d d d g  } |  j j |  t t  j | d k  t  d  S(   Ng?ig       @g     r@gh㈵i   (   R   R   R   t   _ensure_constraintR   t   allt   True(   R   R6   (    (    sP   /tmp/pip-build-7oUkmx/scipy/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   R3   R5   (    (    sP   /tmp/pip-build-7oUkmx/scipy/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   RM   R   R!   (   R   R3   R5   (    (    sP   /tmp/pip-build-7oUkmx/scipy/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(   RK   (   t   paramt   convergence(    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   callback   s    RS   s8   callback function requested stop early by returning True(   i    i   (   i    i   (   R   R   R	   t   message(   R   R   RS   R5   (    (    sP   /tmp/pip-build-7oUkmx/scipy/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   tupleR?   (   R!   t   args(    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyR      s    RX   t   polishi   (   ii
   (   g      ?g       @g      @(   R   RK   R   RN   (   R   R   RX   R   R5   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test_args_tuple_is_passed   s    			c         C   s/   t  } d g } |  j t t | | d d d  S(   Nii   R"   t   abc(   ii   (   R   R>   R?   R   (   R   RC   R   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test_init_with_invalid_strategy   s    		c         C   sj   t  } d g } |  j t t | |  d g } |  j t t | |  d d g } |  j t t | |  d  S(   Nii   i   i   (   iN(   ii   (   i   i   i   (   R   RB   R>   R?   R   (   R   RC   R   (    (    sP   /tmp/pip-build-7oUkmx/scipy/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   RB   t   _select_samplesR   t   lent   uniqueR   (
   R   R   R   R3   t	   candidatet   r1t   r2t   r3t   r4t   r5(    (    sP   /tmp/pip-build-7oUkmx/scipy/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   RM   R   t   successt   FalseRT   (   R   R3   R5   (    (    sP   /tmp/pip-build-7oUkmx/scipy/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  d  S(
   Nt   maxfuni   RY   i   s9   Maximum number of function evaluations has been exceeded.R   i   i(   i)   (	   R   R   R   Rn   RM   R   t   nfevRm   RT   (   R   R3   R5   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test_maxfun_stops_solve  s"    					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   RM   R   R   t   argmint   population_energies(   R   R3   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test_quadratic8  s
    			
c         C   s   t  |  j d g d d d  S(   Niid   Rs   g{Gz?(   iid   (   R   R   (   R   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test_quadratic_from_diff_ev@  s    		c      	   C   se   t  |  j d g d t d d d d } t  |  j d	 g d t d d d d } t | j | j  d  S(
   Niid   RY   t   seedi   Rs   g      ?(   iid   (   iid   (   R   R   Rn   R   R!   (   R   R5   t   result2(    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test_seed_gives_repeatabilityF  s    						c         C   s,   t  t |  j d d d d } | j   d  S(   NR"   R#   Rl   i   (   R   R   R   RM   (   R   R3   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test_exp_runsS  s
    		c         C   s+   d d g } t  t | d d d d } d  S(	   Nii   R   i  Rl   i   (   ii   (   ii   (   R   R   (   R   R   R5   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test_gh_4511_regression\  s    c         C   sO   t  t |  j d d } | j   t t j | j  d  t | j d  d  S(   NR   i   i    i   (	   R   R   R   t   _calculate_population_energiesR   R   Rt   Ru   t   _nfev(   R   R3   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt"   test_calculate_population_energiesd  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   Rp   i   i    i  (   R   R   R   t   nextR   R   t   sizeR~   R
   t   StopIterationt	   enumerateR   (   R   R3   R!   RN   t   it   solnt	   x_currentt   fun_current(    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test_iterationn  s    	c         C   s?   t  t |  j d d d t } | j   t | j d k   d  S(   NRs   g?RY   (   R   R   R   Rn   RM   R   RR   (   R   R3   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test_convergence  s    	
c         C   s,   t  t |  j d d  d d  } | j   d  S(   NRl   Rp   (   R   R   R   RB   RM   (   R   R3   (    (    sP   /tmp/pip-build-7oUkmx/scipy/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    d  S(   Nt   rubbisht   initi    (   R
   R?   R   R   R   t   init_population_randomR   R~   R   R   RJ   t   isinfRu   t   init_population_lhs(   R   R3   (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   test_population_initiation  s    

(!   R2   t
   __module__R   R    R   R4   R7   R8   R9   R=   RD   RF   RH   RL   RO   RP   RU   RZ   R\   R]   Rk   Ro   Rr   Rv   Rw   Rz   R{   R|   R   R   R   R   R   (    (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyR      s>   				?	
												
		
										
				t   __main__(   t   __doc__t   scipy.optimizeR    t%   scipy.optimize._differentialevolutionR   R   t   numpyR   R   t   numpy.testingR   R   R   R   R   R	   R
   R   R   R2   (    (    (    sP   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test__differential_evolution.pyt   <module>   s   : 