
    eF                     B    d dl Zd dlZddlmZ dgZddZd Zd	 Zd
 Z	dS )    N   )
autotimeitbench_detailednansum        c                    | dk    r?t          j        dd          }|                                 |D ]}t          ||           |dk     s|dk    rt	          d          d}t          d| z             t          |d	t           j        d
t          j                   t          d|z             |dk    rt          d|z             nt          d||dz  fz             t          d           t          d           t          | |          }|D ]a}|d         }t          |d         |d         |d                   }t          d||d         
                    d          |d         fz             bdS )a=  
    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.

    allT	as_stringr   r   z1`fraction_nan` must be between 0 and 1, inclusivez    z%s benchmarkzBottleneck z; Numpy z0%sSpeed is NumPy time divided by Bottleneck timez$%sNone of the array elements are NaNz3%s%.1f%% of the array elements are NaN (on average)d    z-   Speed  Call                          Arrayname
statementssetuprepeatz%8.1f  %s   %s   N)bnget_functionssortr   
ValueErrorprint__version__np
benchsuitetimerljust)	functionfraction_nanfuncsfunctabsuitetestr   speeds	            Clib/python3.11/site-packages/bottleneck/benchmark/bench_detailed.pyr   r      s   ( 5 $777

 	/ 	/D4....a<!++LMMM
C 
.8
#$$$	bnnnbnn
MNNN	
<s
BCCCq4s:;;;;AL3&'(	
 	
 	
 
"III	
9:::x..E F FF|d<($w-hHH%ar):):DG!DDEEEEF F    c                    t          |           dk    rt          d          t          j        d          5  t	          | d         ||          }t	          | d         ||          }d d d            n# 1 swxY w Y   ||z  }|S )N   zTwo statements needed.ignore)invalidr   )r   r   )lenr   r   errstater   )r   r   r   t0t1r$   s         r%   r   r   =   s    
:!1222	X	&	&	& = =
1uV<<<
1uV<<<= = = = = = = = = = = = = = = GELs   1A55A9<A9c           
         d}d                     d |                    d          D                       }| t          j        dd          v rd}nD| dv rd}n=| t          j        d	d          v rd
}n"| dv rd}n| dk    rd}nt	          d| z            t                      }| }g }|D ]c}||d
z            }||d         }	|d         }
i }||z   |	g|d<   d|z   d|z   g|d<   |||||||	||fz  |d<   |
|d<   |                    |           d|S )Na+  
        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
    
c                 6    g | ]}|                                 S  )strip).0ss     r%   
<listcomp>zbenchsuite.<locals>.<listcomp>Z   s     <<<Qqwwyy<<<r&   reduceTr
   r   )rankdatananrankdatamover   )	partitionargpartitionpushr(   replace   z`function` (%s) not recognizedr   bn_fnsl_fnr   r   r   )joinsplitr   r   r   get_instructionsappend)r   r   r   indexinstructionsfr"   instruction	signaturearrayr   runs               r%   r   r   G   s   E  II<<%++d*;*;<<<==E 2#H=====	0	0	0	R%f===	=	=	:	:	:	Y		9HDEEE $%%LAE#  	*	AR9}e,F$y0'I2EFL1aAulLQQGHSLr&   c                      g d} | S )N))zrand(1)(a)(a, 1)(a, 0)(a, np.nan, 0)
   )zrand(10)rO   (a, 2)rT   rR   rS   )z	rand(100)rO   (a, 20)rU   rR      )z
rand(1000)rO   (a, 200)rW   rR   r?   )zrand(1000000)rO   rW   rW   rR   r(   )rand(10, 10)rO   rT   rT   rR   rV   )rand(100, 100)rO   rU   rU   rR   r?   )rand(1000, 1000)rO   rW   rW   rR   r(   )rX   rP   NNNrV   )rY   rP   NNNr?   )rZ   rP   NNNr(   )zrand(100000, 2)rP   rP   rP   Nr(   )rX   rQ   NNNrV   )rY   rQ   (a, 20, axis=0)NNr?   )rZ   rQ   z(a, 200, axis=0)NNr(   )rand(100, 100, 100)rQ   r[   r[   Nr(   )r\   rP   (a, 20, axis=1)r]   Nr(   )r\   rT   (a, 20, axis=2)r^   rR   r(   )z
array(1.0)rO   NNz	(a, 0, 2)rS   r2   )rH   s    r%   rE   rE   ~   s    4 4 4Ll r&   )r   r   )
numpyr   
bottleneckr   r   __all__r   r   r   rE   r2   r&   r%   <module>rb      s            " " " " " "
2F 2F 2F 2Fj  4 4 4n8 8 8 8 8r&   