
    h                        S SK r S SKrS SKrS SKrS SKJr  S SKJr  SSKJ	r	J
r
  SSKJrJrJr  S SKJr  SrS	\4S
 jrS\S	\4S jrS\S	S4S jr SSSSSS.S\\   S\\   S\\   S\\   S\\   4
S jjjrSS\\   S	S4S jjrSS\\   S	S4S jjrSS\\   S\S	S4S jjr     S S\\   S\\   S\\   S\\   S\\   4
S jjr SSSSSSS.S\\   S\\   S\\   S\\   S\\   4
S jjjrg)!    N)knobs)proton   )register_triton_hookunregister_triton_hook)set_profiling_offset_profiling_onis_command_line)Optionalr   returnc                      [         R                  R                  R                  R	                  5       R
                  n U S:X  a  gU S:X  a  g[        S5      e)Ncudacuptihip	roctracerz/No backend is available for the current target.)tritonruntimedriveractiveget_current_targetbackend
ValueError)r   s    Q/var/www/fran/franai/venv/lib/python3.13/site-packages/triton/profiler/profile.py_select_backendr      sH    nn##**==?GGG&	E	JKK    r   c                     SnU S:X  an  [         R                  R                  nUcQ  [        [        R
                  " [        5      R                  R                  R                  5       S-  S-  S-  S-  5      nU$ )N r   backendsnvidialib)	r   r   	cupti_dirstrpathlibPath__file__parentabsolute)r   lib_paths     r   _get_backend_default_pathr)      sj    H'<<)) 7<<188??HHJZWZbbejjmttuHOr   c                 z    U S:X  a5  SS/nU H*  n[         R                  " US 5      c  M  [        SU S35      e   g g )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` instead)osgetenvr   )r   hip_device_envsenvs      r   
_check_envr1   %   sV    +02HI"Cyyd#/ I#  OZ  [  # r   shadowtreecontextdatar   hooknamer5   r6   r7   c                    [        5       (       a  gU c  [        n Uc
  [        5       n[        U5        [	        U5      n[        5         U(       a  US:X  a
  [        5         [        R                  " XX#U5      $ )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 [None, "cupti", "cupti_pcsampling", "roctracer"].
                             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   r1   r)   r	   r   	libprotonstart)r8   r5   r6   r   r7   backend_paths         r   r<   r<   /   sc    J |#!#w,W5L ??4$FFr   sessionc                     [        5       (       a  U S:w  a  [        S5      eU c  [        R                  " 5         g[        R                  " U 5        g)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;   activate_allactivater>   s    r   rA   rA   h   s>     W\`aa 7#r   c                     [        5       (       a  U S:w  a  [        S5      eU c  [        R                  " 5         g[        R                  " U 5        g)z
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;   deactivate_all
deactivaterB   s    r   rE   rE   {   s>     W\bcc  "W%r   output_formatc                     U c+  [        5         [        R                  " U5        [        5         g[	        5       (       a  U S:w  a  [        S5      e[        R                  " X5        g)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;   finalize_allr   r
   r   finalize)r>   rF   s     r   rI   rI      sL     }- Adee72r   c                 Z   ^ ^^^^^ [         R                  " T 5      UUUU UU4S j5       nU$ )z
Context manager for profiling. Internally use only.

Args:
    See start() for the arguments.

Returns:
    wrapper (function): The wrapped function.
c                  H   > [        T	TTTTS9nT" U 0 UD6n[        U5        U$ )Nr4   )r<   rE   )
argskwargsr>   retr   r5   r6   funcr7   r8   s
       r   wrapper_profiling.<locals>.wrapper   s2    gD'PTUD#F#7
r   )	functoolswraps)rO   r8   r5   r6   r   r7   rP   s   `````` r   
_profilingrT      s,    $ __T   Nr   r8   r5   r6   r   r7   c          	      F   ^^^^^ U c  UUUUU4S jnU$ [        U TTTTTS9$ )z
Decorator for profiling.

Usage:

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

Args:
    See start() for the arguments.

Returns:
    decorator (function): The decorator function.
c           	          > [        U TTTTTS9$ )NrU   rT   )fr   r5   r6   r7   r8   s    r   	decoratorprofile.<locals>.decorator   s    adG$PW^bccr   rU   rX   )rO   r8   r5   r6   r   r7   rZ   s    ````` r   profiler\      s6    4 |	d 	d  $T7w]abbr   )N)Nhatchet)Nr2   r3   NN)rR   r   r-   r#   r   triton._C.libprotonr   r;   r7   r   r   flagsr   r	   r
   typingr   r:   r"   r   r)   r1   r<   intrA   rE   rI   rT   r\    r   r   <module>rc      s     	   3 > G G  L L	s 	s 	   6G & !6G
3-6G c]6G 3-	6G
 c]6G 3-6Gr$hsm $t $&& & &&3hsm 33 3t 32 % !
3- c] 3-	
 c] 3-: 
"c % !"c 3-"c c]	"c
 3-"c c]"c 3-"cr   