
    Iriw"                        d dl Z d dlZd dlmZ d dlmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ d dlmZmZ d	Zd
efdZdedeeeef                  d
efdZded
dfdZ	 d!dddddddee         dee         dee         dee         deeeef                  dee         fdZd!dee         d
dfdZd!dee         d
dfdZd"dee         dee         d
dfdZ	 	 	 	 	 	 d#dee         dee         dee         dee         dee         dee         fdZ	 d!ddddddddee         dee         dee         dee         dee         dee         fd ZdS )$    N)proton)getenv   )flags)HookManager
LaunchHookInstrumentationHook)BaseMode)OptionalUnionr   returnc                      t           j        j        j                                        j        } | dk    rdS | dk    rdS t          d          )Ncudacuptihip	roctracerz/No backend is available for the current target.)tritonruntimedriveractiveget_current_targetbackend
ValueError)r   s    o/var/www/html/bestrading.cuttalo.com/models/btc_v9/venv/lib/python3.11/site-packages/triton/profiler/profile.py_select_backendr      sM    n#*==??GG&w	E		{JKKK    r   modec                     | dk    r8t           j        j        j                                        j        }|r| d| n|S |rt          |          ndS )Ninstrumentation: )r   r   r   r   r   r   str)r   r   prefixs      r   _get_mode_strr$      s]    ###&-@@BBJ%)5&!!4!!!v5$3t999"$r   c                    | dk    r,ddg}|D ]%}t          |d           t          d| d          &t          j        j        j                                        D ]\  }}|j        }t          |d           ht          t          j        j        |          }|Gt          j        	                    |          x}r&t          j        
                    ||d                    d S )Nr   HIP_VISIBLE_DEVICESCUDA_VISIBLE_DEVICESz3Proton does not work when the environment variable zK is set on AMD GPUs. Please unset it and use `ROCR_VISIBLE_DEVICES` insteadr   )r   r   r   knobsr   knob_descriptorsitemskeygetattrtoenvsetenv)r   hip_device_envsenvattrdescr+   valenv_vals           r   
_check_envr5      s   +02HI" 	 	Cc4  ,  [#  [  [  [   - l):@@BB 9 9
dh#t$&,-t44C$l005557 9L''WQZ8889 9r   shadowtreecontextdatar   r   hooknamer9   r:   r;   c                   t           j        st          j        j        j        rdS dt           _        | t          n| } |t                      n|}t          ||          }t          |           t          j        | ||||          }|dk    r!t          j        t                      |           |dk    r"t          j        t!          |          |           |S )a	  
    Start profiling with the given name and backend.

    Usage:

        ```python
        proton.start("my_profile")
        # do something
        proton.finalize()
        ```

    Args:
        name (str, optional): The name (with path) of the profiling session.
                              If not provided, the default name is "~/proton.<suffix>", where suffix is the default
                              format according to the data type. For example, if data is "tree", the default name is "~/proton.hatchet".
        context (str, optional): The context to use for profiling.
                                 Available options are ["shadow", "python"].
                                 Defaults to "shadow".
        data (str, optional): The data structure to use for profiling.
                              Available options are ["tree", "trace"].
                              Defaults to "tree".
        backend (str, optional): The backend to use for profiling.
                                 Available options are [None, "cupti", "roctracer", "instrumentation"].
                                 Defaults to None, which automatically selects the backend matching the current active runtime.
        mode (Union[str, BaseMode], optional): The "mode" to use for profiling, which is specific to the backend.
                                               Can be a string or an instance of BaseMode (or any subclass thereof).
                                               Defaults to None.
                                               For "cupti", available options are [None, "pcsampling"].
                                               For "roctracer", available options are [None].
                                               For "instrumentation", available options are [None].
                                               Each mode has a set of control knobs following with the mode name.
                                               For example, "pcsampling" has an "interval" control knob, expressed as "pcsampling:interval=1000".
        hook (str, optional): The hook to use for profiling.
                              Available options are [None, "launch"].
                              Defaults to None.
    Returns:
        session (int): The session ID of the profiling session.
    NTr   r   )r   command_liner   r(   r   disableprofiling_onDEFAULT_PROFILE_NAMEr   r$   r5   	libprotonstartr   registerr   r	   )r<   r9   r:   r   r   r;   mode_strsessions           r   rC   rC   2   s    ^  V\08 E#'<TD#*?oGWd++HwodGT7HEEGxZ\\7333###066@@@Nr   rF   c                     t           j        r| dk    rt          d          t          j        |            | t          j                     dS t          j        |            dS )z
    Activate the specified session.
    The profiling session will be active and data will be recorded.

    Args:
        session (int): The session ID of the profiling session. Defaults to None (all sessions)

    Returns:
        None
    r   zEOnly one session can be activated when running from the command line.N)r   r>   r   r   activaterB   activate_allrF   s    r   rH   rH   x   si      bgll`aaa!!!     7#####r   c                     t           j        r| dk    rt          d          t          j        |            | t          j                     dS t          j        |            dS )a  
    Stop the specified session.
    The profiling session's data will still be in the memory, but no more data will be recorded.

    Args:
        session (int): The session ID of the profiling session. Defaults to None (all sessions)

    Returns:
        None
    r   zGOnly one session can be deactivated when running from the command line.N)r   r>   r   r   
deactivaterB   deactivate_allrJ   s    r   rL   rL      si      dgllbccc7### """""W%%%%%r   r!   output_formatc                     t          j        |            | "dt          _        t	          j        |           dS t          j        r| dk    rt          d          t	          j        | |           dS )a  
    Finalizes a profiling session.
    Flush and write the profiling data to the file specified by the session name.

    Args:
        session (int, optional): The session ID to finalize. If None, all sessions are finalized. Defaults to None.
        output_format (str, optional): The output format for the profiling results.
                                       Available options are ["hatchet", "chrome_trace"].

    Returns:
        None
    NFr   zEOnly one session can be finalized when running from the command line.)	r   
unregisterr   r@   rB   finalize_allr>   r   finalize)rF   rN   s     r   rR   rR      su     7###"}----- 	f'Q,,deee7M22222r   c                 ^     t          j                    fd            }|S )z
    Context manager for profiling. Internally use only.

    Args:
        See start() for the arguments.

    Returns:
        wrapper (function): The wrapped function.
    c                  `    t          
	          } | i |}t          |           |S )Nr8   )rC   rL   )argskwargsrF   retr   r9   r:   funcr;   r   r<   s       r   wrapperz_profiling.<locals>.wrapper   sF    gD'PT[_```dD#F##7
r   )	functoolswraps)rX   r<   r9   r:   r   r   r;   rY   s   ``````` r   
_profilingr\      s^    & _T           Nr   r<   r9   r:   r   r   r;   c          	      V    | fd}|S t          |           S )z
    Decorator for profiling.

    Usage:

    ```python
    @proton.profile
    def foo():
        pass
    ```

    Args:
        See start() for the arguments.

    Returns:
        decorator (function): The decorator function.
    Nc           	      0    t          |           S )Nr]   r\   )fr   r9   r:   r;   r   r<   s    r   	decoratorzprofile.<locals>.decorator   s#    adG$PW^bimnnnnr   r]   r`   )rX   r<   r9   r:   r   r   r;   rb   s    `````` r   profilerc      st    6 |	o 	o 	o 	o 	o 	o 	o 	o 	o 	o  $T7w]ahlmmmmr   )N)Nr!   )Nr6   r7   NNN)rZ   r   triton._C.libprotonr   rB   triton._C.libtritonr   r   hooksr   r   r	   r   r
   typingr   r   rA   r"   r   r$   r5   rC   intrH   rL   rR   r\   rc    r   r   <module>rj      so        3 3 3 3 3 3 & & & & & &       ? ? ? ? ? ? ? ? ? ?       " " " " " " " " L L L L L%3 %huS(]/C&D % % % % %9 9 9 9 9 9( C & !+/C C C
3-C c]C 3-	C
 c]C 5h'
(C 3-C C C CL$ $hsm $t $ $ $ $,& & & & & & &,3 3hsm 38C= 3RV 3 3 3 34 % ! 
3- c] 3-	
 c] 3- 3-   < 
#n % !#n #n #n 3-#n c]	#n
 3-#n c]#n 3-#n 3-#n #n #n #n #n #nr   