Ë
    Ûéñi÷  ã            	       ó
  — d dl Z d dlZd dlmZ d dlmZmZ ddlmZ d dlm	Z
  e j                  «       Zeeef   Z G d„ d«      Z G d	„ d
e«      Zddœdedeeeef      dee   fd„Zdddœdee   deeeef      dee   fd„Zy)é    N©Úwraps)ÚOptionalÚUnioné   )Úflags)Úprotonc                   óT   — e Zd ZdZddedeeeef      ddfd„Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)Úscopea  
    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                 ó.   — || _         || _        d | _        y ©N©r   r   Úid)Úselfr   r   s      úW/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/triton/profiler/scope.pyÚ__init__zscope.__init__%   s   € ØˆŒ	ØˆŒØˆ�ó    c                 ó  — t         j                  sy t        j                  «       | _        t        j
                  | j                  | j                  «       | j                  r+t        j                  | j                  | j                  «       y y r   )	r   Úprofiling_onÚ	libprotonÚrecord_scoper   Úenter_scoper   r   Úadd_metrics©r   s    r   Ú_enter_scopezscope._enter_scope*   sZ   € Ü×!Ò!ØÜ×(Ñ(Ó*ˆŒÜ×Ñ˜dŸg™g t§y¡yÔ1Ø�<Š<Ü×!Ñ! $§'¡'¨4¯<©<Õ8ð r   c                 ó’   — t         j                  r| j                  €y t        j                  | j                  | j
                  «       y r   )r   r   r   r   Ú
exit_scoper   r   s    r   Ú_exit_scopezscope._exit_scope2   s.   € Ü×!Ò! T§W¡W _ØÜ×Ñ˜TŸW™W d§i¡iÕ0r   c                 ó&   — | j                  «        | S r   )r   r   s    r   Ú	__enter__zscope.__enter__7   s   € Ø×ÑÔØˆr   c                 ó$   — | j                  «        y r   )r!   )r   Úexc_typeÚ	exc_valueÚ	tracebacks       r   Ú__exit__zscope.__exit__;   s   € Ø×ÑÕr   c                 ó2   ‡ ‡— t        ‰«      ˆˆ fd„«       }|S )Nc                  ó€   •— ‰j                  «        	  ‰| i |¤Ž‰j                  «        S # ‰j                  «        w xY wr   )r   r!   )ÚargsÚkwargsÚfuncr   s     €€r   Úwrapperzscope.__call__.<locals>.wrapper@   s:   ø€ à×ÑÔð#Ù˜TÐ, VÑ,à× Ñ Õ"ø�× Ñ Õ"ús   “+ «=r   )r   r-   r.   s   `` r   Ú__call__zscope.__call__>   s    ù€ ä	ˆt‹ô	#ó 
ð	#ð ˆr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   ÚdictÚMetricValueTyper   r   r!   r#   r(   r/   © r   r   r   r      sJ   „ ññ,˜Sð ¨8°D¸¸oÐ9MÑ4NÑ+Oð Ð[_ó ò
9ò1ò
òó
r   r   c                   óV   ‡ — e Zd ZdZd	dedeeeef      ddfˆ fd„Zˆ fd„Z	ˆ fd„Z
ˆ xZS )
Úcpu_timed_scopezÈ
    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                 óX   •— t         ‰| �  ||«       d | _        |rd|v rt        d«      ‚y y )NÚcpu_timez'The metric name 'cpu_time' is reserved.)Úsuperr   Ú
start_timeÚ
ValueError)r   r   r   Ú	__class__s      €r   r   zcpu_timed_scope.__init__T   s6   ø€ Ü‰Ñ˜˜wÔ'ØˆŒÙ�z WÑ,ÜÐFÓGÐGð -ˆ7r   c                 óv   •— t         j                  sy t        j                  «       | _        t
        ‰| �  «        y r   )r   r   ÚtimeÚtime_nsr=   r<   r   )r   r?   s    €r   r   zcpu_timed_scope._enter_scopeZ   s'   ø€ Ü×!Ò!ØÜŸ,™,›.ˆŒÜ‰ÑÕr   c                 óä   •— t         j                  sy t        ‰| �  «        | j                  �Dt        j                  «       | j                  z
  }t        j                  | j                  d|i«       y y )Nzcpu_time (ns)(exc))
r   r   r<   r!   r=   rA   rB   r   r   r   )r   r;   r?   s     €r   r!   zcpu_timed_scope._exit_scope`   sW   ø€ Ü×!Ò!ØÜ‰ÑÔØ�?‰?Ð&Ü—|‘|“~¨¯©Ñ7ˆHÜ×!Ñ! $§'¡'Ð,@À(Ð+KÕLð 'r   r   )r0   r1   r2   r3   r4   r   r5   Úfloatr   r   r!   Ú__classcell__)r?   s   @r   r9   r9   K   sF   ø„ ññH˜Sð H¨8°D¸¸e¸Ñ4DÑ+Eð HÐQUõ Hô÷Mð Mr   r9   )r   r   r   r   c                ó"  — t         j                  sy t        j                  «       }t	        t
        dg «      t
        _        t
        j                  j                  || f«       t        j                  || «       |rt        j                  ||«       |S )NÚscopes)
r   r   r   r   ÚgetattrÚthread_local_scopesrG   Úappendr   r   r   s      r   r   r   i   so   € Ü×ÒØÜ	×	Ñ	Ó	!€BÜ!(Ô)<¸hÈÓ!KÔÔÜ×Ñ×%Ñ% r¨4 jÔ1Ü×Ñ˜"˜dÔ#ÙÜ×Ñ˜b 'Ô*Ø€Ir   c                óþ   — t         j                  sy t        j                  j	                  «       \  }}| r| |k7  rt        d| › d|› �«      ‚| s|} t        j                  || «       |rt        j                  ||«       |S )NzScope name mismatch: z != )	r   r   rI   rG   Úpopr>   r   r    r   )r   r   r   Úpopped_names       r   r    r    u   sy   € ä×ÒØÜ)×0Ñ0×4Ñ4Ó6�O€BˆÙ�˜Ò#ÜÐ0°°°d¸;¸-ÐHÓIÐIÙØˆÜ×Ñ˜˜TÔ"ÙÜ×Ñ˜b 'Ô*Ø€Ir   r   )Ú	threadingrA   Ú	functoolsr   Útypingr   r   r   Útriton._C.libprotonr	   r   ÚlocalrI   rD   Úintr6   r   r9   r4   r5   r   r    r7   r   r   ú<module>rT      sÀ   ðÛ Û Ý ß "å Ý 3à%�i—o‘oÓ'Ð à˜˜s˜
Ñ#€÷:ñ :ôzM�eô Mð< OSò 	�cð 	 x°°S¸/Ð5IÑ0JÑ'Kð 	ÐW_Ð`cÑWdó 	ðÐ^bò �X˜c‘]ð °xÀÀSÈ/ÐEYÑ@ZÑ7[ð ÐgoÐpsÑgtô r   