
    
9j                        S SK Jr  S SKrS SKrS SKrS SKJrJrJrJ	r	  S SK
JrJrJr  S SKJr  \R                   S 5       r\ " S S\5      5       rg)	    )annotationsN)Magicsmagics_classline_cell_magicneeds_local_scope)argumentmagic_argumentsparse_argstring)	benchmarkc                     [         R                  " [        5      n 0 nU R                  R	                  5        H=  u  p#UR
                  [         R                  R                  :w  d  M/  UR
                  X'   M?     U$ )z9Extract default parameter values from benchmark function.)inspect	signaturer   
parametersitemsdefault	Parameterempty)sigdefaults
param_nameparams       V/home/wildlama/miniconda3/lib/python3.13/site-packages/cupyx/profiler/_timeit_magic.py_get_benchmark_defaultsr      s^     

I
&CH ^^113
==G--333#(==H  4 O    c                  $   \ rS rSrSr\\\" 5       \" SS\	\
" 5       S   S\
" 5       S    S3S9\" S	S
\	\
" 5       S   S\
" 5       S    S3S9\" S\\
" 5       S   S\
" 5       S    S3S9\" SSSS9SS j5       5       5       5       5       5       5       rSrg)GPUTimeitMagics   z7GPU-aware timing magics using cupyx.profiler.benchmark.z-nz
--n-repeatn_repeatzNumber of repeats (default: ))typer   helpz-wz
--n-warmupn_warmupz Number of warmup runs (default: z--max-durationmax_durationz&Maximum duration in seconds (default: code*zCode to benchmark)nargsr!   Nc                F  ^ ^^ [        T R                  U5      nUc2  SR                  UR                  5      R	                  5       mUUU 4S jnO[
        R                  " U5      mUUU 4S jn[        UUR                  UR                  UR                  S9n[        U5        g)a  Time code with GPU synchronization.

Works as both line and cell magic.

Line magic usage:
    %gpu_timeit [-n N_REPEAT] [-w N_WARMUP] [--max-duration SEC] expression

Cell magic usage:
    %%gpu_timeit [-n N_REPEAT] [-w N_WARMUP] [--max-duration SEC]
    <code>

Examples:
    %gpu_timeit cp.random.random((1000, 1000)).sum()
    %gpu_timeit -n 100 --max-duration 5 cp.arange(1024**3).sum()

    %%gpu_timeit -n 100
    x = cp.random.random((1000, 1000))
    result = x @ x.T
N c                 F   > [        T TR                  R                  T5      $ N)evalshelluser_nsr$   local_nsselfs   r   run'GPUTimeitMagics.gpu_timeit.<locals>.runT   s    D$**"4"4h??r   c                 H   > [        T TR                  R                  T5        g r*   )execr,   r-   r.   s   r   r1   r2   Z   s    T4::--x8r   )r   r"   r#   )r
   
gpu_timeitjoinr$   striptextwrapdedentr   r   r"   r#   print)r0   linecellr/   argsr1   resultr$   s   `  `   @r   r5   GPUTimeitMagics.gpu_timeit    s    \ t5<88DII&,,.D@ @ ??4(D9 ]]]]**	
 	fr    )NN)__name__
__module____qualname____firstlineno____doc__r   r   r	   r   intr   floatr5   __static_attributes__r@   r   r   r   r      s    Al')*5,.z:;1> l')*5,.z:;1> u').95').9:!= c *	   2*r   r   )
__future__r   	functoolsr   r8   IPython.core.magicr   r   r   r   IPython.core.magic_argumentsr   r	   r
   cupyx.profilerr   cacher   r   r@   r   r   <module>rO      s`    "      %   Ff F Fr   