
    `i                     @    d dl Z d dlmZ d dlmZ  G d d          ZdS )    N)cuda)runtimec                   4    e Zd ZdZ	 d	dZd Zd Zd Zd ZdS )

time_rangea  Mark function calls with ranges using NVTX/rocTX. This object can be
    used either as a decorator or a context manager.

    When used as a decorator, the decorated function calls are marked as
    ranges:

    >>> from cupyx.profiler import time_range
    >>> @time_range()
    ... def function_to_profile():
    ...     pass

    When used as a context manager, it describes the enclosed block as a nested
    range:

    >>> from cupyx.profiler import time_range
    >>> with time_range('some range in green', color_id=0):
    ...    # do something you want to measure
    ...    pass

    The marked ranges are visible in the profiler (such as nvvp, nsys-ui, etc)
    timeline.

    Args:
        message (str): Name of a range. When used as a decorator, the default
            is ``func.__name__``.
        color_id: range color ID
        argb_color: range color in ARGB (e.g. 0xFF00FF00 for green)
        sync (bool): If ``True``, waits for completion of all outstanding
            processing on GPU before calling :func:`cupy.cuda.nvtx.RangePush()`
            or :func:`cupy.cuda.nvtx.RangePop()`

    .. seealso:: :func:`cupy.cuda.nvtx.RangePush`,
        :func:`cupy.cuda.nvtx.RangePop`
    NFc                     t           j        j        st          d          ||t	          d          || _        ||nd| _        || _        || _        d S )Nznvtx is not installedz3Only either color_id or argb_color can be specified)	r   nvtx	availableRuntimeError
ValueErrormessagecolor_id
argb_colorsync)selfr   r   r   r   s        n/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/cupyx/profiler/_time_range.py__init__ztime_range.__init__/   si    y" 	86777J$:E   $,$8b$			    c                    | j         t          d          | j        rt          j                     | j        +t          j                            | j         | j                   n*t          j        	                    | j         | j
                   | S )NzCwhen used as a context manager, the message argument cannot be None)r   r   r   r   deviceSynchronizer   r   r	   
RangePushC	RangePushr   )r   s    r   	__enter__ztime_range.__enter__=   s    <   9 	(%'''?&I  t????Idm<<<r   c                 v    | j         rt          j                     t          j                                         d S N)r   r   r   r   r	   RangePop)r   exc_type	exc_value	tracebacks       r   __exit__ztime_range.__exit__J   s5    9 	(%'''	r   c                 "    | j         || _         | S r   )r   )r   r   s     r   _recreate_cmztime_range._recreate_cmO   s    <"DLr   c                 J     t          j                   fd            }|S )Nc                  |                         j                  5   | i |cd d d            S # 1 swxY w Y   d S r   )r"   __name__)argskwargsfuncr   s     r   innerz"time_range.__call__.<locals>.innerU   s    ""4=11 - -tT,V,,- - - - - - - - - - - - - - - - - -s   155)	functoolswraps)r   r(   r)   s   `` r   __call__ztime_range.__call__T   s>    				- 	- 	- 	- 	- 
		- r   )NNNF)	r%   
__module____qualname____doc__r   r   r    r"   r,    r   r   r   r      sv        ! !H FK       
  
    r   r   )r*   cupyr   cupy_backends.cuda.apir   r   r0   r   r   <module>r3      sq              * * * * * *N N N N N N N N N Nr   