§
    9˜ºhM  ã            
       ó   — 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œdededeeeef                  defd„Zddedeeeef                  defd„ZdS )é    N©Úwraps)ÚOptionalÚUnioné   )Úget_profiling_on)Úprotonc                   ób   — 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dS )Ú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                 ó0   — || _         || _        d | _        d S ©N)r   r   Úid)Úselfr   r   s      ú]/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/triton/profiler/scope.pyÚ__init__zscope.__init__%   s   € ØˆŒ	ØˆŒØˆŒˆˆó    c                 óä   — t          ¦   «         sd S t          j        ¦   «         | _        t          j        | j        | j        ¦  «         | j        r!t          j        | j        | j        ¦  «         d S d S r   )r   Ú	libprotonÚrecord_scoper   Úenter_scoper   r   Úadd_metrics©r   s    r   Ú_enter_scopezscope._enter_scope*   sm   € ÝÑ!Ô!ð 	ØˆFÝÔ(Ñ*Ô*ˆŒÝÔ˜dœg t¤yÑ1Ô1Ð1ØŒ<ð 	9ÝÔ! $¤'¨4¬<Ñ8Ô8Ð8Ð8Ð8ð	9ð 	9r   c                 ór   — t          ¦   «         r| j        €d S t          j        | j        | j        ¦  «         d S r   )r   r   r   Ú
exit_scoper   r   s    r   Ú_exit_scopezscope._exit_scope2   s8   € ÝÑ!Ô!ð 	 T¤W _ØˆFÝÔ˜TœW d¤iÑ0Ô0Ð0Ð0Ð0r   c                 ó.   — |                       ¦   «          | S r   )r   r   s    r   Ú	__enter__zscope.__enter__7   s   € Ø×ÒÑÔÐØˆr   c                 ó.   — |                       ¦   «          d S r   )r   )r   Úexc_typeÚ	exc_valueÚ	tracebacks       r   Ú__exit__zscope.__exit__;   s   € Ø×ÒÑÔÐÐÐr   c                 ó@   ‡ ‡— t          ‰¦  «        ˆˆ fd„¦   «         }|S )Nc                  ó˜   •— ‰                      ¦   «          	  ‰| i |¤Ž‰                     ¦   «          S # ‰                     ¦   «          w xY wr   )r   r   )ÚargsÚkwargsÚfuncr   s     €€r   Úwrapperzscope.__call__.<locals>.wrapper@   sY   ø€ à×ÒÑÔÐð#Ø�t˜TÐ, VÐ,Ð,à× Ò Ñ"Ô"Ð"Ð"ø�× Ò Ñ"Ô"Ð"Ð"øøøs	   —3 ³A	r   )r   r+   r,   s   `` r   Ú__call__zscope.__call__>   s9   øø€ å	ˆt‰Œð	#ð 	#ð 	#ð 	#ð 	#ñ 
Œð	#ð ˆr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   ÚdictÚMetricValueTyper   r   r   r!   r&   r-   © r   r   r   r      s§   € € € € € ðð ð,ð ˜Sð ¨8°D¸¸oÐ9MÔ4NÔ+Oð Ð[_ð ð ð ð ð
9ð 9ð 9ð1ð 1ð 1ð
ð ð ðð ð ð
ð 
ð 
ð 
ð 
r   r   c                   ób   ‡ — 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                 óˆ   •— t          ¦   «                              ||¦  «         d | _        |rd|v rt          d¦  «        ‚d S d S )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   sX   ø€ Ý‰Œ×Ò˜˜wÑ'Ô'Ð'ØˆŒØð 	H�z WÐ,Ð,ÝÐFÑGÔGÐGð	Hð 	HÐ,Ð,r   c                 ó˜   •— t          ¦   «         sd S t          j        ¦   «         | _        t	          ¦   «                              ¦   «          d S r   )r   ÚtimeÚtime_nsr;   r:   r   )r   r=   s    €r   r   zcpu_timed_scope._enter_scopeZ   s?   ø€ ÝÑ!Ô!ð 	ØˆFÝœ,™.œ.ˆŒÝ‰Œ×ÒÑÔÐÐÐr   c                 óè   •— t          ¦   «         sd S t          ¦   «                              ¦   «          | j        �9t	          j        ¦   «         | j        z
  }t          j        | j        d|i¦  «         d S d S )Nzcpu_time (ns)(exc))	r   r:   r   r;   r?   r@   r   r   r   )r   r9   r=   s     €r   r   zcpu_timed_scope._exit_scope`   so   ø€ ÝÑ!Ô!ð 	ØˆFÝ‰Œ×ÒÑÔÐØŒ?Ð&Ý”|‘~”~¨¬Ñ7ˆHÝÔ! $¤'Ð,@À(Ð+KÑLÔLÐLÐLÐLð 'Ð&r   r   )r.   r/   r0   r1   r2   r   r3   Úfloatr   r   r   Ú__classcell__)r=   s   @r   r7   r7   K   sµ   ø€ € € € € ðð ðHð H˜Sð H¨8°D¸¸e¸Ô4DÔ+Eð HÐQUð Hð Hð Hð Hð Hð Hðð ð ð ð ðMð Mð Mð Mð Mð Mð Mð Mð Mr   r7   F)Ú	triton_opr   r   rD   r   r   c                óV  — t          ¦   «         sdS t          j        ¦   «         }t          t          dg ¦  «        t          _        t          j                             || f¦  «         |rt          j        || ¦  «         nt          j        || ¦  «         |rt          j	        ||¦  «         |S )NéÿÿÿÿÚscopes)
r   r   r   ÚgetattrÚthread_local_scopesrG   ÚappendÚenter_opr   r   )r   rD   r   r   s       r   r   r   i   s¥   € ÝÑÔð ØˆrÝ	Ô	Ñ	!Ô	!€BÝ!(Õ)<¸hÈÑ!KÔ!KÕÔÝÔ×%Ò% r¨4 jÑ1Ô1Ð1Øð (ÝÔ˜2˜tÑ$Ô$Ð$Ð$åÔ˜b $Ñ'Ô'Ð'Øð +ÝÔ˜b 'Ñ*Ô*Ð*Ø€Ir   c                 óð   — t          ¦   «         sdS t          j                             ¦   «         \  }}| rt	          j        ||¦  «         nt	          j        ||¦  «         |rt	          j        ||¦  «         |S )NrF   )r   rI   rG   Úpopr   Úexit_opr   r   )rD   r   r   r   s       r   r   r   x   s~   € ÝÑÔð ØˆrÝ"Ô)×-Ò-Ñ/Ô/�H€BˆØð 'ÝÔ˜"˜dÑ#Ô#Ð#Ð#åÔ˜R Ñ&Ô&Ð&Øð +ÝÔ˜b 'Ñ*Ô*Ð*Ø€Ir   )FN)Ú	threadingr?   Ú	functoolsr   Útypingr   r   Úflagsr   Útriton._C.libprotonr	   r   ÚlocalrI   rB   Úintr4   r   r7   r2   Úboolr3   r   r   r5   r   r   ú<module>rW      s|  ðØ Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à #Ð #Ð #Ð #Ð #Ð #Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à%�i”oÑ'Ô'Ð à˜˜s˜
Ô#€ð:ð :ð :ð :ð :ñ :ô :ð :ðzMð Mð Mð Mð M�eñ Mô Mð Mð< 16Ðgkð ð ð �cð ¨ð ÀÈÈcÐSbÐNbÔIcÔ@dð Ðpsð ð ð ð ð
ð 
˜$ð 
°¸$¸sÀOÐ?SÔ:TÔ1Uð 
Ðadð 
ð 
ð 
ð 
ð 
ð 
r   