
    (ThM              
           S SK r S SKrS SKJr  S SKJrJr  SSKJr  S SK	J
r  \ R                  " 5       r\\\4   r " S S5      r " S	 S
\5      rSSS.S\S\S\\\\4      S\4S jjrSS\S\\\\4      S\4S jjrg)    Nwraps)OptionalUnion   )get_profiling_on)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      M/var/www/auris/envauris/lib/python3.13/site-packages/triton/profiler/scope.py__init__scope.__init__%   s    	    c                 (   [        5       (       d  g [        R                  " 5       U l        [        R                  " U R                  U R
                  5        U R                  (       a,  [        R                  " U R                  U R                  5        g g r   )r   	libprotonrecord_scoper   enter_scoper   r   add_metricsr   s    r   _enter_scopescope._enter_scope*   sZ    !!((*dggtyy1<<!!$''4<<8 r   c                     [        5       (       a  U R                  c  g [        R                  " U R                  U R                  5        g r   )r   r   r   
exit_scoper   r   s    r   _exit_scopescope._exit_scope2   s.    !!TWW_TWWdii0r   c                 &    U R                  5         U $ r   )r   r   s    r   	__enter__scope.__enter__7   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>.wrapper@   s:    #T,V,  "  "s   + =r   )r   r1   r2   s   `` r   __call__scope.__call__>   s     	t	# 
	# r   )r   r   r   r   )__name__
__module____qualname____firstlineno____doc__strr   dictMetricValueTyper   r   r"   r%   r+   r4   __static_attributes__ r   r   r   r      sJ    ,S 8Do9M4N+O [_ 
9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_scopeK   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__T   s4    'zW,FGG -7r   c                 v   > [        5       (       d  g [        R                  " 5       U l        [        TU ]  5         g r   )r   timetime_nsrF   rE   r   )r   rH   s    r   r   cpu_timed_scope._enter_scopeZ   s'    !!,,.r   c                    > [        5       (       d  g [        TU ]	  5         U R                  bF  [        R
                  " 5       U R                  -
  n[        R                  " U R                  SU05        g g )Nzcpu_time (ns)(exc))	r   rE   r"   rF   rK   rL   r   r   r   )r   rD   rH   s     r   r"   cpu_timed_scope._exit_scope`   sW    !!??&||~7H!!$'',@(+KL 'r   )rF   r   )r6   r7   r8   r9   r:   r;   r   r<   floatr   r   r"   r>   __classcell__)rH   s   @r   rA   rA   K   sL    HS H8De4D+E HQU H HM Mr   rA   F)	triton_opr   r   rR   r   r   c                f   [        5       (       d  g[        R                  " 5       n[        [        S/ 5      [        l        [        R
                  R                  X045        U(       a  [        R                  " X05        O[        R                  " X05        U(       a  [        R                  " X25        U$ )Nscopes)
r   r   r   getattrthread_local_scopesrU   appendenter_opr   r   )r   rR   r   r   s       r   r   r   i   sz    				!B!()<h!K%%rj12$b'b*Ir   c                    [        5       (       d  g[        R                  R                  5       u  p#U (       a  [        R
                  " X#5        O[        R                  " X#5        U(       a  [        R                  " X!5        U$ )NrT   )r   rW   rU   popr   exit_opr!   r   )rR   r   r   r   s       r   r!   r!   x   sY    "))--/HB"#R&b*Ir   )FN)	threadingrK   	functoolsr   typingr   r   flagsr   triton._C.libprotonr	   r   localrW   rP   intr=   r   rA   r;   boolr<   r   r!   r?   r   r   <module>re      s       " # 3oo' s
#: :zMe M< 16gk c  cSbNbIc@d ps 
$ 
$sO?S:T1U 
ad 
r   