U
    h                     @   sD  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	m
Z
mZ d dlmZ dZedd	d
Zddddddee ee ee ee ee dddZdee ddddZd ee ddddZd!ee eddddZd"ee ee ee ee ee dddZd#ddddddee ee ee ee ee dddZdS )$    N)proton   )register_triton_hookunregister_triton_hook)set_profiling_offset_profiling_onis_command_line)Optionalr   )returnc                  C   s4   t jjj j} | dkrdS | dkr(dS tdd S )NcudaZcuptiZhipZ	roctracerz/No backend is available for the current target.)tritonruntimeZdriverZactiveZget_current_targetbackend
ValueError)r    r   I/var/www/html/venv/lib/python3.8/site-packages/triton/profiler/profile.py_select_backend   s    r   shadowtreecontextdatar   hooknamer   r   r   r   c                C   sL   t  r
dS | dkrt} |dkr$t }t  |r<|dkr<t  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.hatchet".
        backend (str, optional): The backend to use for profiling.
                                 Available options are ["cupti"].
                                 Defaults to None, which automatically selects the backend matching the current active runtime.
        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"].
                              Defaults to "tree".
        hook (str, optional): The hook to use for profiling.
                              Available options are [None, "triton"].
                              Defaults to None.
    Returns:
        session (int): The session ID of the profiling session.
    Nr   )r   DEFAULT_PROFILE_NAMEr   r   r   	libprotonstartr   r   r   r   r      s    %r   )sessionr
   c                 C   s$   t  r| dkrtdt|  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 0 (the first session started.)

    Returns:
        None
    r   zEOnly one session can be activated when running from the command line.N)r   r   r   activater   r   r   r   r   K   s    r   c                 C   s$   t  r| dkrtdt|  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 0 (the first session started.)

    Returns:
        None
    r   zGOnly one session can be deactivated when running from the command line.N)r   r   r   
deactivater    r   r   r   r!   [   s    r!   hatchet)r   output_formatr
   c                 C   sF   | dkr t   t| t  n"t r6| dkr6tdt| | 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.
                                       Aavailable options are ["hatchet"].

    Returns:
        None
    Nr   zEOnly one session can be finalized when running from the command line.)r   r   Zfinalize_allr   r   r   finalize)r   r#   r   r   r   r$   k   s    
r$   c                    s$   t  fdd}|S )z
    Context manager for profiling. Internally use only.

    Args:
        See start() for the arguments.

    Returns:
        wrapper (function): The wrapped function.
    c                     s(   t  d}| |}t| |S )Nr   )r   r!   )argskwargsr   retr   r   r   funcr   r   r   r   wrapper   s    
z_profiling.<locals>.wrapper)	functoolswraps)r)   r   r   r   r   r   r*   r   r(   r   
_profiling   s    r-   c                   s8   | dkr  fdd}|S t |  dS d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                    s   t |  dS )Nr   r-   )fr   r   r   r   r   r   r   	decorator   s    zprofile.<locals>.decoratorr   r.   )r)   r   r   r   r   r   r1   r   r0   r   profile   s    r2   )N)r   )r   )Nr"   )Nr   r   NN)N)r+   r   Ztriton._C.libprotonr   r   r   r   r   flagsr   r   r   typingr	   r   strr   r   intr   r!   r$   r-   r2   r   r   r   r   <module>   sb    5      