
    9i              	          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\\\\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   )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      U/var/www/html/land-doc-ocr/venv/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   r2   r3   s   `` r   __call__scope.__call__>   s     	t	# 
	# r   )r   r   r   r   )__name__
__module____qualname____firstlineno____doc__strr   dictMetricValueTyper   r   r#   r&   r,   r5   __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_nsrG   rF   r   )r   rI   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   rF   r#   rG   rL   rM   r   r   r   )r   rE   rI   s     r   r#   cpu_timed_scope._exit_scope`   sW    !!??&||~7H!!$'',@(+KL 'r   )rG   r   )r7   r8   r9   r:   r;   r<   r   r=   floatr   r   r#   r?   __classcell__)rI   s   @r   rB   rB   K   sL    HS H8De4D+E HQU H HM Mr   rB   )r   r   r   r   c                *   [        5       (       d  g [        R                  " 5       n[        [        S/ 5      [        l        [        R
                  R                  X 45        [        R                  " X 5        U(       a  [        R                  " X!5        U$ )Nscopes)	r   r   r   getattrthread_local_scopesrT   appendr   r   r   s      r   r   r   i   si    				!B!()<h!K%%rj1"#b*Ir   c                   [        5       (       d  g [        R                  R                  5       u  p#U (       a  X:w  a  [	        SU  SU 35      eU (       d  Un [
        R                  " X 5        U(       a  [
        R                  " X!5        U$ )NzScope name mismatch: z != )r   rV   rT   poprH   r   r"   r   )r   r   r   popped_names       r   r"   r"   u   sq    )00446OB#0d;-HII"b*Ir   r   )	threadingrL   	functoolsr   typingr   r   flagsr   triton._C.libprotonr	   r   localrV   rQ   intr>   r   rB   r<   r=   r   r"   r@   r   r   <module>rb      s       " # 3oo' s
#: :zMe M< OS 	c 	xS/5I0J'K 	W_`cWd 	^b Xc] xS/EY@Z7[ gopsgt r   