o
    Û—¦ia  ã                   @   sÄ   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  ¡ Zeeef Zeeeef ZG dd„ dƒZd	ddd
œdededeeeef  deeeef  def
dd„Zddedefdd„ZdS )é    N©Úwraps)ÚOptionalÚUnioné   )Úget_profiling_on)Úprotonc                
   @   sb   e Zd ZdZ		ddedeeeef  deeeef  ddfdd„Z	d	d
„ Z
ddd„Zd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Ú
propertiesÚreturnc                 C   s   || _ || _|| _d S ©N)r
   r   r   )Úselfr
   r   r   © r   úS/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/triton/profiler/scope.pyÚ__init__%   s   
zscope.__init__c                 C   sT   t ƒ s| S t ¡ | _t | j| j¡ | jrt | j| j¡ | jr(t 	| j| j¡ | S r   )
r   Ú	libprotonÚrecord_scopeÚidÚenter_scoper
   r   Úadd_metricsr   Úset_properties)r   r   r   r   Ú	__enter__+   s   
zscope.__enter__c                 C   s   t ƒ sd S t | j| j¡ d S r   )r   r   Ú
exit_scoper   r
   )r   Úexc_typeÚ	exc_valueÚ	tracebackr   r   r   Ú__exit__6   s   zscope.__exit__c                    s   t ˆ ƒ‡ ‡fdd„ƒ}|S )Nc                     sj   t ƒ r"t ¡ }t |ˆj¡ ˆjrt |ˆj¡ ˆjr"t |ˆj¡ ˆ | i |¤Ž}t ƒ r3t 	|ˆj¡ |S r   )
r   r   r   r   r
   r   r   r   r   r   )ÚargsÚkwargsr   Úret©Úfuncr   r   r   Úwrapper=   s   zscope.__call__.<locals>.wrapperr   )r   r#   r$   r   r"   r   Ú__call__;   s   zscope.__call__)NN)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   ÚdictÚMetricValueTypeÚPropertyValueTyper   r   r   r%   r   r   r   r   r	      s    ÿÿ
ÿ
r	   F)Ú	triton_opr   r   r
   r.   r   r   r   c                C   st   t ƒ sdS t ¡ }ttdƒsg t_tj || f¡ |r"t || ¡ nt || ¡ |r0t 	||¡ |r8t 
||¡ |S )NéÿÿÿÿÚscopes)r   r   r   ÚhasattrÚthread_local_scopesr0   ÚappendÚenter_opr   r   r   )r
   r.   r   r   r   r   r   r   r   N   s   
r   c                 C   s<   t ƒ sdS tj ¡ \}}| rt ||¡ |S t ||¡ |S )Nr/   )r   r2   r0   Úpopr   Úexit_opr   )r.   r   r
   r   r   r   r   a   s   ÿr   )F)Ú	threadingÚ	functoolsr   Útypingr   r   Úflagsr   Útriton._C.libprotonr   r   Úlocalr2   ÚfloatÚintr,   r*   r-   r	   Úboolr+   r   r   r   r   r   r   Ú<module>   s"    @ÿÿ
ÿ