
    Foj              	       <   S SK r S SKrS SKJr  S SKJrJrJrJr  SSK	J	r	  SSK
JrJr  S SKJr  \ R                   " 5       r\\\\\   \\   4   r " S S	5      r " S
 S\5      rSS.S\S\\\\4      S\\   4S jjrSSS.S\\   S\\\\4      S\\   4S jjjrg)    Nwraps)OptionalUnionAnySequence   )flags)transform_tensor_metricsset_metric_kernels)protonc                   `    \ rS rSrSrSS\S\\\\4      SS4S jjr	S r
S	 rS
 rS rS rSrg)scope   a  
A context manager and decorator for entering and exiting a scope.

Usage:
    context manager:
    ```python
    with proton.scope("test0", {metric_name: metric_value}):
        foo[1,](x, y)
    ```

    decorator:
    ```python
    @proton.scope("test0", {metric_name: metric_value})
    def foo(x, y):
        ...
    ```

Args:
    name (str): The name of the scope.
    metrics (dict[str, float], optional): The metrics of the scope. Default is None.
Nnamemetricsreturnc                 *    Xl         X l        S U l        g Nr   r   id)selfr   r   s      O/mnt/workspace/venv-train/lib/python3.13/site-packages/triton/profiler/scope.py__init__scope.__init__&   s    	    c                 Z   [         R                  (       d  g [        R                  " 5       U l        [        R
                  " U R                  U R                  5        U R                  (       a?  [        5         [        R                  " U R                  /[        U R                  5      Q76   g g r   )r
   profiling_on	libprotonrecord_scoper   enter_scoper   r   r   add_metricsr   r   s    r   _enter_scopescope._enter_scope+   si    !!((*dggtyy1<< !!$''S,DT\\,RS r   c                     [         R                  (       a  U R                  c  g [        R                  " U R                  U R
                  5        g r   )r
   r   r   r   
exit_scoper   r#   s    r   _exit_scopescope._exit_scope4   s.    !!TWW_TWWdii0r   c                 &    U R                  5         U $ r   )r$   r#   s    r   	__enter__scope.__enter__9   s    r   c                 $    U R                  5         g r   )r(   )r   exc_type	exc_value	tracebacks       r   __exit__scope.__exit__=   s    r   c                 4   ^ ^ [        T5      UU 4S j5       nU$ )Nc                     > TR                  5          T" U 0 UD6TR                  5         $ ! TR                  5         f = fr   )r$   r(   )argskwargsfuncr   s     r   wrapperscope.__call__.<locals>.wrapperB   s:    #T,V,  "  "s   + =r   )r   r7   r8   s   `` r   __call__scope.__call__@   s     	t	# 
	# r   )r   r   r   r   )__name__
__module____qualname____firstlineno____doc__strr   dictr   r   r$   r(   r+   r1   r:   __static_attributes__ r   r   r   r      sH    ,S 8DcN+C t 
T1

r   r   c                   h   ^  \ rS rSrSrSS\S\\\\4      SS4U 4S jjjr	U 4S jr
U 4S	 jrS
rU =r$ )cpu_timed_scopeM   z
A scope that measures elapsed time (cpu_time).

Args:
    name (str): The name of the scope.
    metrics (dict[str, float], optional): Additional metrics to add. Default is None.
Nr   r   r   c                 d   > [         TU ]  X5        S U l        U(       a  SU;   a  [        S5      eg g )Ncpu_timez'The metric name 'cpu_time' is reserved.)superr   
start_time
ValueError)r   r   r   	__class__s      r   r   cpu_timed_scope.__init__V   s4    'zW,FGG -7r   c                    > [         R                  (       d  g [        R                  " 5       U l        [
        TU ]  5         g r   )r
   r   timetime_nsrK   rJ   r$   )r   rM   s    r   r$   cpu_timed_scope._enter_scope\   s'    !!,,.r   c                    > [         R                  (       d  g U R                  bE  [        R                  " 5       U R                  -
  n[
        R                  " U R                  SU05        [        TU ]%  5         g )Nzcpu_time (ns)(exc))
r
   r   rK   rP   rQ   r   r"   r   rJ   r(   )r   rI   rM   s     r   r(   cpu_timed_scope._exit_scopeb   sR    !!??&||~7H!!$'',@(+KLr   )rK   r   )r<   r=   r>   r?   r@   rA   r   rB   r   r   r$   r(   rC   __classcell__)rM   s   @r   rF   rF   M   sH    HS H8DcN+C Ht H H r   rF   )r   r   r   r   c                ^   [         R                  (       d  g [        R                  " 5       n[	        [
        S/ 5      [
        l        [
        R                  R                  X 45        [        R                  " X 5        U(       a*  [        5         [        R                  " U/[        U5      Q76   U$ )Nscopes)r
   r   r   r    getattrthread_local_scopesrW   appendr!   r   r"   r   r   s      r   r!   r!   k   sz    				!B!()<h!K%%rj1"#bE#;G#DEIr   c                L   [         R                  (       d  g [        R                  R	                  5       u  p#U (       a  X:w  a  [        SU  SU 35      eU (       d  Un U(       a*  [        5         [        R                  " U/[        U5      Q76   [        R                  " X 5        U$ )NzScope name mismatch: z != )r
   r   rY   rW   poprL   r   r   r"   r   r'   )r   r   r   popped_names       r   r'   r'   x   s    )00446OB#0d;-HIIbE#;G#DE"Ir   r   )	threadingrP   	functoolsr   typingr   r   r   r   r
   metricr   r   triton._C.libprotonr   r   localrY   floatintMetricValueTyper   rF   rA   rB   r!   r'   rD   r   r   <module>rg      s       1 1  @ 3oo' sHUOXc]BC; ;|e < CG 
c 
xS#X'? 
8TW= 
RV Xc] xS#X7O [cdg[h r   