ó
    Eñiö  ã                   ó  • S r SSKrSSKrSSKJrJr  SSKJr  SSKJ	r	J
r
  SSKJr   " S S\R                  5      r\	 " S	 S
5      5       r\	 " S S5      5       r\" 5       rS\\/S4   S\\/S4   4S jrS\\/S4   S\\/S4   4S jrg)a  
This module provides callback management functionality for TorchDynamo's compilation process.

It implements a thread-safe system for registering, managing and executing callbacks that run
at the start and end of TorchDynamo compilations. Key features include:

- Registration and deregistration of compilation callbacks
- Thread-safe callback handling with proper locking mechanisms
- Prevention of duplicate callback execution when configured
- Decorator utilities for easy callback registration
- Context manager for controlled callback lifecycle

The module centers around the CompilationCallbackHandler class which maintains separate
lists for start and end callbacks, manages their execution order, and ensures thread-safety.
Utility decorators @on_compile_start and @on_compile_end provide a convenient way to
register compilation hooks.

Example usage:
    @on_compile_start
    def my_start_callback():
        print("Starting compilation")

    @on_compile_end
    def my_end_callback():
        print("Compilation complete")
é    N)ÚCallableÚ	Generator)Úcontextmanager)Ú	dataclassÚfield)ÚAnyc                   ó$   • \ rS rSrSrSrSrSrSrg)ÚCallbackTriggeré$   é   é   é   é   © N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚDYNAMOÚLAZY_BACKWARDÚTRITON_AUTOTUNINGÚCUDAGRAPH_RECORDINGÚ__static_attributes__r   ó    ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_dynamo/callback.pyr
   r
   $   s   † à€Fà€MàÐàÓr   r
   c                   ó*   • \ rS rSr% \\S'   \\S'   Srg)ÚCallbackArgsé/   Úcallback_triggerÚ
compile_idr   N)r   r   r   r   r
   Ú__annotations__Ústrr   r   r   r   r   r   /   s   ‡ à%Ó%Ø†Or   r   c            
       ó¬  • \ rS rSr% \" \S9r\\\/S4      \	S'   \" \S9r
\\\/S4      \	S'   \" SSSS9r\\	S	'   \" \R                  SSS
9r\R                  \	S'   S\\/S4   S\\/S4   4S jrS\\/S4   S\\/S4   4S jrS\\/S4   SS4S jrS\\/S4   SS4S jrS\SS4S jrS\SS4S jr\S\S\S\S\\4   4S j5       rSS jrSrg)ÚCompilationCallbackHandleré5   )Údefault_factoryNÚstart_callbacksÚend_callbacksr   F)ÚdefaultÚinitÚreprÚ6_CompilationCallbackHandler__pending_callbacks_counter)r&   r*   r+   Ú;_CompilationCallbackHandler__pending_callbacks_counter_lockÚcallbackÚreturnc                 ó<   • U R                   R                  U5        U$ )z‰
Register a callback function to be called when the compilation starts.

Args:
- callback (Callable): The callback function to register.
)r'   Úappend©Úselfr.   s     r   Úregister_start_callbackÚ2CompilationCallbackHandler.register_start_callback?   s   € ð 	×Ñ×#Ñ# HÔ-Øˆr   c                 ó<   • U R                   R                  U5        U$ )z‡
Register a callback function to be called when the compilation ends.

Args:
- callback (Callable): The callback function to register.
)r(   r1   r2   s     r   Úregister_end_callbackÚ0CompilationCallbackHandler.register_end_callbackK   s   € ð 	×Ñ×!Ñ! (Ô+Øˆr   c                 ó:   • U R                   R                  U5        g)zm
Remove a registered start callback function.

Args:
- callback (Callable): The callback function to remove.
N)r'   Úremover2   s     r   Úremove_start_callbackÚ0CompilationCallbackHandler.remove_start_callbackW   s   € ð 	×Ñ×#Ñ# HÕ-r   c                 ó:   • U R                   R                  U5        g)zk
Remove a registered end callback function.

Args:
- callback (Callable): The callback function to remove.
N)r(   r:   r2   s     r   Úremove_end_callbackÚ.CompilationCallbackHandler.remove_end_callback`   s   € ð 	×Ñ×!Ñ! (Õ+r   Úargsc                 ó:   • U R                    H  nU" U5        M     g)z)
Execute all registered start callbacks.
N)r'   ©r3   r@   r.   s      r   Úrun_start_callbacksÚ.CompilationCallbackHandler.run_start_callbacksi   s   € ð ×,Ô,ˆHÙ�TŽNò -r   c                 ó:   • U R                    H  nU" U5        M     g)z'
Execute all registered end callbacks.
N)r(   rB   s      r   Úrun_end_callbacksÚ,CompilationCallbackHandler.run_end_callbacksp   s   € ð ×*Ô*ˆHÙ�TŽNò +r   Útriggerr    c              #   óº  #   • [        X5      n U R                     U =R                  S-  sl        U R                  S:X  a  U R                  U5        SSS5        Sv •  U R                     U R                  S:”  d   S5       eU R                  S:X  a  U R	                  U5        U =R                  S-  sl        SSS5        g! , (       d  f       Nu= f! , (       d  f       g= f! U R                     U R                  S:”  d   S5       eU R                  S:X  a  U R	                  U5        U =R                  S-  sl        SSS5        f ! , (       d  f       f = f= f7f)zS
Context manager to install the callbacks and run them when the context is exited.
r   Nr   z1Pending callbacks counter cannot become negative.)r   r-   r,   rC   rF   )r3   rH   r    r@   s       r   Úinstall_callbacksÚ,CompilationCallbackHandler.install_callbacksw   s&  é € ô ˜GÓ0ˆð	6Ø×6Ó6Ø×0Ò0°AÑ5Õ0Ø×3Ñ3°qÓ8Ø×,Ñ,¨TÔ2÷ 7ó à×6Ó6Ø×7Ñ7¸!Ó;ð ØGóÐ;ð ×3Ñ3°qÓ8Ø×*Ñ*¨4Ô0Ø×0Ò0°AÑ5Õ0÷ 7Ð6÷ 7Õ6ú÷ 7Õ6û�×6Ó6Ø×7Ñ7¸!Ó;ð ØGóÐ;ð ×3Ñ3°qÓ8Ø×*Ñ*¨4Ô0Ø×0Ò0°AÑ5Õ0÷ 7×6Ö6ÿse   ‚E�C# ›7CÁC# ÁEÁ*ACÂ8	EÃ
CÃC# Ã
C ÃEÃ#EÃ0AEÄ>	EÅ
EÅEÅEc                 ó�   • U R                   R                  5         U R                  R                  5         U R                  S:X  d   eg)z!
Clear all registered callbacks.
r   N)r'   Úclearr(   r,   )r3   s    r   rM   Ú CompilationCallbackHandler.clearŽ   s<   € ð 	×Ñ×"Ñ"Ô$Ø×Ñ× Ñ Ô"Ø×/Ñ/°1Ó4Ð4Ñ4r   r   )r/   N)r   r   r   r   r   Úlistr'   r   r   r!   r(   r,   ÚintÚ	threadingÚLockr-   r4   r7   r;   r>   rC   rF   r   r
   r"   r   r   rJ   rM   r   r   r   r   r$   r$   5   st  ‡ á<AÐRVÑ<W€O�T˜( L >°4Ð#7Ñ8Ñ9ÓWÙ:?ÐPTÑ:U€M�4˜ , °Ð!5Ñ6Ñ7ÓUá',°Q¸UÈÑ'OÐ ÓOÙ7<Ø!Ÿ™¨U¸ñ8Ð$ i§n¡nó ð
Ø  , °Ð!5Ñ6ð
à	�<�. $Ð&Ñ	'ô
ð
Ø  , °Ð!5Ñ6ð
à	�<�. $Ð&Ñ	'ô
ð.¨h¸°~ÀtÐ7KÑ.Lð .ÐQUô .ð,¨H°l°^ÀTÐ5IÑ,Jð ,Ètô ,ð¨ð ¸ô ð lð °tô ð ð6Ø&ð6Ø47ð6à	�4˜˜c�>Ñ	"ó6ó ð6÷,5r   r$   r.   r/   c                 ó0   • [         R                  U 5        U $ )zM
Decorator to register a callback function for the start of the compilation.
)Úcallback_handlerr4   ©r.   s    r   Úon_compile_startrV   š   s   € ô ×,Ñ,¨XÔ6Ø€Or   c                 ó0   • [         R                  U 5        U $ )zK
Decorator to register a callback function for the end of the compilation.
)rT   r7   rU   s    r   Úon_compile_endrX   ¤   s   € ô ×*Ñ*¨8Ô4Ø€Or   )Ú__doc__ÚenumrQ   Úcollections.abcr   r   Ú
contextlibr   Údataclassesr   r   Útypingr   ÚEnumr
   r   r$   rT   rV   rX   r   r   r   Ú<module>r`      sÉ   ðñó6 Û ß /Ý %ß (Ý ô�d—i‘iô ð ÷ð ó ðð
 ÷^5ð ^5ó ð^5ñB .Ó/Ð ðØ˜�~ tÐ+Ñ,ðàˆ|ˆn˜dÐ"Ñ#ôðØ˜�~ tÐ+Ñ,ðàˆ|ˆn˜dÐ"Ñ#õr   