
Yc           @   s_   d  d l  Z d  d l Z d d l m Z d g Z d d d  Z d   Z d	   Z d
   Z	 d S(   iNi   (   t
   autotimeitt   bench_detailedt   nansumg        c   	      C   sG  |  d k rL t  j d d t } | j   x | D] } t | |  q2 Wn  | d k  sd | d k rs t d   n  d } d |  GHd | t  j t j f GHd	 | GH| d k r d
 | GHn d | | d f GHd GHd GHt |  |  } xY | D]Q } | d } t	 | d | d | d  } d | | d j
 d  | d f GHq Wd S(   s=  
    Benchmark a single function in detail or, optionally, all functions.

    Parameters
    ----------
    function : str, optional
        Name of function, as a string, to benchmark. Default ('nansum') is
        to benchmark bn.nansum. If `function` is 'all' then detailed
        benchmarks are run on all bottleneck functions.
    fraction_nan : float, optional
        Fraction of array elements that should, on average, be NaN. The
        default (0.0) is not to set any elements to NaN.

    Returns
    -------
    A benchmark report is printed to stdout.

    t   allt	   as_stringi    i   s1   `fraction_nan` must be between 0 and 1, inclusives       s   %s benchmarks   %sBottleneck %s; Numpy %ss0   %sSpeed is NumPy time divided by Bottleneck times$   %sNone of the array elements are NaNs3   %s%.1f%% of the array elements are NaN (on average)id   t    s-      Speed  Call                          Arrayt   namet
   statementst   setupt   repeats   %8.1f  %s   %si   N(   t   bnt   get_functionst   Truet   sortR   t
   ValueErrort   __version__t   npt
   benchsuitet   timert   ljust(	   t   functiont   fraction_nant   funcst   funct   tabt   suitet   testR   t   speed(    (    sB   lib/python2.7/site-packages/bottleneck/benchmark/bench_detailed.pyR   	   s,    
		
c      	   C   sz   t  |   d k r! t d   n  t j d d  7 t |  d | d | } t |  d | d | } Wd  QX| | } | S(   Ni   s   Two statements needed.t   invalidt   ignorei    R	   i   (   t   lenR   R   t   errstateR    (   R   R   R	   t   t0t   t1R   (    (    sB   lib/python2.7/site-packages/bottleneck/benchmark/bench_detailed.pyR   <   s    
c      
   C   s  d } d j  g  | j d  D] } | j   ^ q  } |  t j d d t k r[ d } ns |  d k rp d } n^ |  t j d d t k r d	 } n: |  d k r d } n% |  d k r d } n t d |    t   } |  } g  } x | D] } | | d	 }	 |	 d  k rq n  | d }
 | d } i  } | |	 |
 g | d <d |	 d |	 g | d <| | | | | | |
 | | f | d <| | d <| j	 |  q W| S(   Ns+  
        from bottleneck import %s as bn_fn
        try: from numpy import %s as sl_fn
        except ImportError: from bottleneck.slow import %s as sl_fn

        # avoid all-nan slice warnings from np.median and np.nanmedian
        if "%s" == "median": from bottleneck.slow import median as sl_fn
        if "%s" == "nanmedian": from bottleneck.slow import nanmedian as sl_fn

        from numpy import array, nan
        from numpy.random import RandomState
        rand = RandomState(123).rand

        a = %s
        if %s != 0: a[a < %s] = nan
    s   
t   reduceR   i    t   rankdatat   nanrankdatat   movei   t	   partitiont   argpartitiont   pushi   t   replacei   s   `function` (%s) not recognizediR   t   bn_fnt   sl_fnR   R   R	   (   R#   R$   (   R&   R'   R(   (
   t   joint   splitt   stripR
   R   R   R   t   get_instructionst   Nonet   append(   R   R   R   t   st   indext   instructionst   fR   t   instructiont	   signaturet   arrayR	   t   run(    (    sB   lib/python2.7/site-packages/bottleneck/benchmark/bench_detailed.pyR   F   s<    1						


c          C   sC   d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. g }  |  S(/   Ns   rand(1)s   (a)s   (a, 1)s   (a, 0)s   (a, np.nan, 0)i
   s   rand(10)s   (a, 2)s	   rand(100)s   (a, 20)i   s
   rand(1000)s   (a, 200)i   s   rand(1000000)i   s   rand(10, 10)s   rand(100, 100)s   rand(1000, 1000)s   rand(100000, 2)s   (a, 20, axis=0)s   (a, 200, axis=0)s   rand(100, 100, 100)s   (a, 20, axis=1)s   (a, 20, axis=2)s
   array(1.0)s	   (a, 0, 2)(   s   rand(1)s   (a)s   (a, 1)s   (a, 0)s   (a, np.nan, 0)i
   (   s   rand(10)s   (a)s   (a, 2)s   (a, 2)s   (a, np.nan, 0)i
   (   s	   rand(100)s   (a)s   (a, 20)s   (a, 20)s   (a, np.nan, 0)i   (   s
   rand(1000)s   (a)s   (a, 200)s   (a, 200)s   (a, np.nan, 0)i   (   s   rand(1000000)s   (a)s   (a, 200)s   (a, 200)s   (a, np.nan, 0)i   (   s   rand(10, 10)s   (a)s   (a, 2)s   (a, 2)s   (a, np.nan, 0)i   (   s   rand(100, 100)s   (a)s   (a, 20)s   (a, 20)s   (a, np.nan, 0)i   (   s   rand(1000, 1000)s   (a)s   (a, 200)s   (a, 200)s   (a, np.nan, 0)i   (   s   rand(10, 10)s   (a, 1)NNNi   (   s   rand(100, 100)s   (a, 1)NNNi   (   s   rand(1000, 1000)s   (a, 1)NNNi   (   s   rand(100000, 2)s   (a, 1)s   (a, 1)s   (a, 1)Ni   (   s   rand(10, 10)s   (a, 0)NNNi   (   s   rand(100, 100)s   (a, 0)s   (a, 20, axis=0)NNi   (   s   rand(1000, 1000)s   (a, 0)s   (a, 200, axis=0)NNi   (   s   rand(100, 100, 100)s   (a, 0)s   (a, 20, axis=0)s   (a, 20, axis=0)Ni   (   s   rand(100, 100, 100)s   (a, 1)s   (a, 20, axis=1)s   (a, 20, axis=1)Ni   (   s   rand(100, 100, 100)s   (a, 2)s   (a, 20, axis=2)s   (a, 20, axis=2)s   (a, np.nan, 0)i   (   s
   array(1.0)s   (a)NNs	   (a, 0, 2)i
   (   R0   (   R4   (    (    sB   lib/python2.7/site-packages/bottleneck/benchmark/bench_detailed.pyR/   ~   s                                                                                                   	(
   t   numpyR   t
   bottleneckR
   R    t   __all__R   R   R   R/   (    (    (    sB   lib/python2.7/site-packages/bottleneck/benchmark/bench_detailed.pyt   <module>   s   	3	
	8