§
    ŠŠtj¡  ã                   óH  — d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
 ddlmZ  G d„ dej        ¦  «        Ze	 G d	„ d
¦  «        ¦   «         Ze	 G d„ d¦  «        ¦   «         Z e¦   «         Zdeegdf         deegdf         fd„Zdeegdf         deegdf         fd„ZdS )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                   ó   — e Zd ZdZdZdZdZdS )ÚCallbackTriggeré   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚDYNAMOÚLAZY_BACKWARDÚTRITON_AUTOTUNINGÚCUDAGRAPH_RECORDING© ó    úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_dynamo/callback.pyr
   r
   $   s&   € € € € € à€Fà€MàÐàÐÐÐr   r
   c                   ó$   — e Zd ZU eed<   eed<   dS )ÚCallbackArgsÚcallback_triggerÚ
compile_idN)r   r   r   r
   Ú__annotations__Ústrr   r   r   r   r   /   s%   € € € € € € à%Ð%Ð%Ñ%Ø€O€O�O€O€Or   r   c            
       óú  — e Zd ZU  ee¬¦  «        Zeeegdf                  ed<    ee¬¦  «        Z	eeegdf                  ed<    eddd¬¦  «        Z
eed<    eej        dd¬	¦  «        Zej        ed
<   deegdf         deegdf         fd„Zdeegdf         deegdf         fd„Zdeegdf         ddfd„Zdeegdf         ddfd„Zdeddfd„Zdeddfd„Zededededeef         fd„¦   «         Zdd„ZdS )ÚCompilationCallbackHandler)Ú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                 ó:   — | j                              |¦  «         |S )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_callbackz2CompilationCallbackHandler.register_start_callback?   s    € ð 	Ô×#Ò# HÑ-Ô-Ð-Øˆr   c                 ó:   — | j                              |¦  «         |S )z§
        Register a callback function to be called when the compilation ends.

        Args:
        - callback (Callable): The callback function to register.
        )r#   r,   r-   s     r   Úregister_end_callbackz0CompilationCallbackHandler.register_end_callbackK   s    € ð 	Ô×!Ò! (Ñ+Ô+Ð+Øˆr   c                 ó:   — | j                              |¦  «         dS )z�
        Remove a registered start callback function.

        Args:
        - callback (Callable): The callback function to remove.
        N)r"   Úremover-   s     r   Úremove_start_callbackz0CompilationCallbackHandler.remove_start_callbackW   s!   € ð 	Ô×#Ò# HÑ-Ô-Ð-Ð-Ð-r   c                 ó:   — | j                              |¦  «         dS )z‹
        Remove a registered end callback function.

        Args:
        - callback (Callable): The callback function to remove.
        N)r#   r3   r-   s     r   Úremove_end_callbackz.CompilationCallbackHandler.remove_end_callback`   s!   € ð 	Ô×!Ò! (Ñ+Ô+Ð+Ð+Ð+r   Úargsc                 ó0   — | j         D ]} ||¦  «         ŒdS )z9
        Execute all registered start callbacks.
        N)r"   ©r.   r7   r)   s      r   Úrun_start_callbacksz.CompilationCallbackHandler.run_start_callbacksi   s/   € ð Ô,ð 	ð 	ˆHØˆH�T‰NŒNˆNˆNð	ð 	r   c                 ó0   — | j         D ]} ||¦  «         ŒdS )z7
        Execute all registered end callbacks.
        N)r#   r9   s      r   Úrun_end_callbacksz,CompilationCallbackHandler.run_end_callbacksp   s/   € ð Ô*ð 	ð 	ˆHØˆH�T‰NŒNˆNˆNð	ð 	r   Útriggerr   c              #   ó‚  K  — t          ||¦  «        }	 | j        5  | xj        dz  c_        | j        dk    r|                      |¦  «         ddd¦  «         n# 1 swxY w Y   dV — | j        5  | j        dk    rt	          d¦  «        ‚| j        dk    r|                      |¦  «         | xj        dz  c_        ddd¦  «         dS # 1 swxY w Y   dS # | j        5  | j        dk    rt	          d¦  «        ‚| j        dk    r|                      |¦  «         | xj        dz  c_        ddd¦  «         w # 1 swxY w Y   w xY w)zc
        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'   r:   ÚAssertionErrorr<   )r.   r=   r   r7   s       r   Úinstall_callbacksz,CompilationCallbackHandler.install_callbacksw   sD  è è € õ ˜G ZÑ0Ô0ˆð	6ØÔ6ð 3ð 3ØÐ0Ô0°AÑ5Ð0Ô0ØÔ3°qÒ8Ð8Ø×,Ò,¨TÑ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð ˆEˆEˆEàÔ6ð 6ð 6ØÔ3°qÒ8Ð8Ý(ØKñô ð ð Ô3°qÒ8Ð8Ø×*Ò*¨4Ñ0Ô0Ð0ØÐ0Ô0°AÑ5Ð0Ô0ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6ð 6ð 6ø�Ô6ð 6ð 6ØÔ3°qÒ8Ð8Ý(ØKñô ð ð Ô3°qÒ8Ð8Ø×*Ò*¨4Ñ0Ô0Ð0ØÐ0Ô0°AÑ5Ð0Ô0ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6ð 6øøøsf   ”C ›1AÁC ÁAÁC ÁAÁ C Á.ACÃC
ÃC
ÃD>ÃAD2Ä&D>Ä2D6Ä6D>Ä9D6Ä:D>c                 ó°   — | j                              ¦   «          | j                             ¦   «          | j        dk    rt	          d| j        › d�¦  «        ‚dS )z1
        Clear all registered callbacks.
        r   zCannot clear callbacks while z are pendingN)r"   Úclearr#   r'   r?   )r.   s    r   rB   z CompilationCallbackHandler.clear�   sg   € ð 	Ô×"Ò"Ñ$Ô$Ð$ØÔ× Ò Ñ"Ô"Ð"ØÔ+¨qÒ0Ð0Ý Ø^°Ô0PÐ^Ð^Ð^ñô ð ð 1Ð0r   )r*   N)r   r   r   r   Úlistr"   r   r   r   r#   r'   ÚintÚ	threadingÚLockr(   r/   r1   r4   r6   r:   r<   r   r
   r   r   r   r@   rB   r   r   r   r    r    5   s9  € € € € € € à<A¸EÐRVÐ<WÑ<WÔ<W€O�T˜( L >°4Ð#7Ô8Ô9ÐWÐWÑWØ:?¸%ÐPTÐ:UÑ:UÔ:U€M�4˜ , °Ð!5Ô6Ô7ÐUÐUÑUà', u°Q¸UÈÐ'OÑ'OÔ'OÐ ÐOÐOÑOØ7<°uØ!œ¨U¸ð8ñ 8ô 8Ð$ i¤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ð 6ñ „^ð6ð.	ð 	ð 	ð 	ð 	ð 	r   r    r)   r*   c                 ó:   — t                                | ¦  «         | S )zU
    Decorator to register a callback function for the start of the compilation.
    )Úcallback_handlerr/   ©r)   s    r   Úon_compile_startrJ   ž   s   € õ ×,Ò,¨XÑ6Ô6Ð6Ø€Or   c                 ó:   — t                                | ¦  «         | S )zS
    Decorator to register a callback function for the end of the compilation.
    )rH   r1   rI   s    r   Úon_compile_endrL   ¨   s   € õ ×*Ò*¨8Ñ4Ô4Ð4Ø€Or   )Ú__doc__ÚenumrE   Úcollections.abcr   r   Ú
contextlibr   Údataclassesr   r   Útypingr   ÚEnumr
   r   r    rH   rJ   rL   r   r   r   ú<module>rT      sª  ððð ð6 €€€Ø Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø %Ð %Ð %Ð %Ð %Ð %Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð ðð ð ð ð �d”iñ ô ð ð ðð ð ð ð ñ ô ñ „ðð
 ðbð bð bð bð bñ bô bñ „ðbðJ .Ð-Ñ/Ô/Ð ðØ˜�~ tÐ+Ô,ðàˆ|ˆn˜dÐ"Ô#ðð ð ð ðØ˜�~ tÐ+Ô,ðàˆ|ˆn˜dÐ"Ô#ðð ð ð ð ð r   