
    9i*#                     T   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
Jr  SSKJrJrJr  SSKJr  S SKJrJr  S	rS
\4S jrS\S
\4S jrS\S\\\\4      S
\4S jrS\S
S4S jr S!SSSSSS.S\\   S\\   S\\   S\\   S\\\\4      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\\   S\\   4S jjr  S!SSSSSSS.S\\   S\\   S\\   S\\   S\\   S\\   4S  jjjr!g)$    N)knobs)proton   )set_profiling_offset_profiling_onis_command_line)HookManager
LaunchHookInstrumentationHook)BaseMode)OptionalUnionr   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    W/var/www/html/land-doc-ocr/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   modec                     U S:X  aL  [         R                  R                  R                  R	                  5       R
                  nU(       a  U SU 3$ U$ U(       a  [        U5      $ S$ )Ninstrumentation:r    )r   r   r   r   r   r   r%   )r   r-   prefixs      r   _get_mode_strr2   &   sX    ##&&--@@BJJ%)&4&!5v53t9$"$r   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_envr:   -   sV    +02HI"Cyyd#/ I#  OZ  [  # r   shadowtreecontextdatar   r-   hooknamer>   r?   r@   c                v   [        5       (       a  g[        5         U c  [        OU n Uc
  [        5       OUn[	        U5      n[        X45      n[        U5        [        R                  " XX#Xv5      nUS:X  a  [        R                  " [        5       U5        US:X  a   [        R                  " [        U5      U5        U$ )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.
Nr   r/   )r   r   DEFAULT_PROFILE_NAMEr   r,   r2   r:   	libprotonstartr	   registerr
   r   )	rA   r>   r?   r   r-   r@   backend_pathmode_strsessions	            r   rE   rE   7   s    ^ #'<TD#*?oG,W5LW+Hw oodTHSGxZ\73##06@Nr   rI   c                     [        5       (       a  U S:w  a  [        S5      e[        R                  " U 5        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	   activaterD   activate_allrI   s    r   rK   rK   ~   sL     W\`aa! 7#r   c                     [        5       (       a  U S:w  a  [        S5      e[        R                  " U 5        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	   
deactivaterD   deactivate_allrM   s    r   rO   rO      sL     W\bcc7#  "W%r   output_formatc                     [         R                  " U 5        U c!  [        5         [        R                  " U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.
                                   Available options are ["hatchet", "chrome_trace"].

Returns:
    None
Nr   zEOnly one session can be finalized when running from the command line.)r	   
unregisterr   rD   finalize_allr   r   finalize)rI   rQ   s     r   rU   rU      sT     7#}-Adee72r   c                 ^   ^ ^^^^^^ [         R                  " T 5      U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            	      J   > [        T
TTTT	TS9nT" U 0 UD6n[        U5        U$ )Nr=   )rE   rO   )argskwargsrI   retr   r>   r?   funcr@   r-   rA   s       r   wrapper_profiling.<locals>.wrapper   s5    gD'PT[_`D#F#7
r   )	functoolswraps)r[   rA   r>   r?   r   r-   r@   r\   s   ``````` r   
_profilingr`      s,    & __T   Nr   rA   r>   r?   r   r-   r@   c          
      L   ^^^^^^ U c  UUUUUU4S jnU$ [        U T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TS9$ )Nra   r`   )fr   r>   r?   r@   r-   rA   s    r   	decoratorprofile.<locals>.decorator   s    adG$PW^bimnnr   ra   rd   )r[   rA   r>   r?   r   r-   r@   rf   s    `````` r   profilerh      s9    6 |	o 	o  $T7w]ahlmmr   )N)Nr    )Nr;   r<   NNN)"r^   r   r6   r&   r   triton._C.libprotonr   rD   flagsr   r   r   hooksr	   r
   r   r-   r   typingr   r   rC   r%   r   r,   r2   r:   rE   intrK   rO   rU   r`   rh    r   r   <module>ro      sK     	   3 G G ? ?  " L L	s 	s 	%3 %huS(]/C&D % %   D & !+/D
3-D c]D 3-	D
 c]D 5h'
(D 3-DN$hsm $t $,& & &,3hsm 38C= 3RV 34 % !
3- c] 3-	
 c] 3- 3-< 
#n % !#n 3-#n c]	#n
 3-#n c]#n 3-#n 3-#nr   