Ë
    g^(h‘  ã                   óÌ   — d Z ddlZddlm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 e G d„ d	«      «       Z e«       Zd
eg df   deg df   fd„Zd
eg df   deg df   fd„Zy)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)Ú	Generator)Úcontextmanager)Ú	dataclassÚfield)ÚAnyÚCallableÚOptional)Újustknobs_checkc                   óÀ  — e Zd ZU  ee¬«      Zeeg df      ed<    ee¬«      Zeeg df      ed<    eddd¬«      Z	e
e   ed<    eddd¬«      Zeed	<    eej                  dd¬
«      Zej                  ed<   deg df   deg df   fd„Zdeg df   deg df   fd„Zdeg df   ddfd„Zdeg df   ddfd„Zdd„Zdd„Zedefd„«       Zededeef   fd„«       Zdd„Zy)ÚCompilationCallbackHandler)Údefault_factoryNÚstart_callbacksÚend_callbacksF)ÚdefaultÚinitÚreprÚ8_CompilationCallbackHandler__prevent_duplicate_callbacksr   Ú6_CompilationCallbackHandler__pending_callbacks_counter)r   r   r   Ú;_CompilationCallbackHandler__pending_callbacks_counter_lockÚcallbackÚreturnc                 ó<   — | j                   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     úT/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/callback.pyÚregister_start_callbackz2CompilationCallbackHandler.register_start_callback2   s   € ð 	×Ñ×#Ñ# HÔ-Øˆó    c                 ó<   — | j                   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_callback>   s   € ð 	×Ñ×!Ñ! (Ô+Øˆr   c                 ó:   — | j                   j                  |«       y)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_callbackH   s   € ð 	×Ñ×#Ñ# HÕ-r   c                 ó:   — | j                   j                  |«       y)z‹
        Remove a registered end callback function.

        Args:
        - callback (Callable): The callback function to remove.
        N)r   r"   r   s     r   Úremove_end_callbackz.CompilationCallbackHandler.remove_end_callbackQ   s   € ð 	×Ñ×!Ñ! (Õ+r   c                 ó4   — | j                   D ]	  } |«        Œ y)z9
        Execute all registered start callbacks.
        N)r   r   s     r   Úrun_start_callbacksz.CompilationCallbackHandler.run_start_callbacksZ   s   € ð ×,Ñ,ò 	ˆHÙ�Jñ	r   c                 ó4   — | j                   D ]	  } |«        Œ y)z7
        Execute all registered end callbacks.
        N)r   r   s     r   Úrun_end_callbacksz,CompilationCallbackHandler.run_end_callbacksa   s   € ð ×*Ñ*ò 	ˆHÙ�Jñ	r   c                 óR   — | j                   €t        d«      | _         | j                   S )Nz*pytorch/dynamo:prevent_duplicate_callbacks)r   r
   ©r   s    r   Úprevent_duplicate_callbacksz6CompilationCallbackHandler.prevent_duplicate_callbacksh   s,   € à×-Ñ-Ð5Ü1@Ø<ó2ˆDÔ.ð ×1Ñ1Ð1r   c              #   ó  K  — | j                   r®	 | j                  5  | j                  dk(  r| j                  «        | xj                  dz  c_        ddd«       d–— | j                  5  | j                  dkD  sJ d«       ‚| j                  dk(  r| j	                  «        | xj                  dz  c_        ddd«       y	 | j                  «        d–— | j	                  «        y# 1 sw Y   Œ“xY w# 1 sw Y   yxY w# | j                  5  | j                  dkD  sJ d«       ‚| j                  dk(  r| j	                  «        | xj                  dz  c_        ddd«       w # 1 sw Y   w xY wxY w# | j	                  «        w xY w­w)zc
        Context manager to install the callbacks and run them when the context is exited.
        r   é   Nz1Pending callbacks counter cannot become negative.)r,   r   r   r'   r)   r+   s    r   Úinstall_callbacksz,CompilationCallbackHandler.install_callbacksp   sh  è ø€ ð
 ×+Ò+ð:Ø×:Ñ:ñ :Ø×7Ñ7¸1Ò<Ø×0Ñ0Ô2Ø×4Ò4¸Ñ9Õ4÷:ó à×:Ñ:ñ :Ø×;Ñ;¸aÒ?ð ØKóÐ?ð ×7Ñ7¸1Ò<Ø×.Ñ.Ô0Ø×4Ò4¸Ñ9Õ4÷:ð :ð)Ø×(Ñ(Ô*Ûà×&Ñ&Õ(÷%:ð :ú÷:ð :û�T×:Ñ:ñ :Ø×;Ñ;¸aÒ?ð ØKóÐ?ð ×7Ñ7¸1Ò<Ø×.Ñ.Ô0Ø×4Ò4¸Ñ9Õ4÷:÷ :ñ :þð ×&Ñ&Õ(üs}   ‚F �C; œ5C#ÁC; ÁF Á)AC/Â4	F Â>E+ ÃF Ã#C,Ã(C; Ã/C8Ã4F Ã;E(ÄAEÅ	E(ÅE%Å!E(Å(F Å+E=Å=F c                 ól   — | j                   j                  «        | j                  j                  «        y)z1
        Clear all registered callbacks.
        N)r   Úclearr   r+   s    r   r1   z CompilationCallbackHandler.clear‹   s(   € ð 	×Ñ×"Ñ"Ô$Ø×Ñ× Ñ Õ"r   )r   N)Ú__name__Ú
__module__Ú__qualname__r   Úlistr   r   Ú__annotations__r   r   r	   Úboolr   ÚintÚ	threadingÚLockr   r   r    r#   r%   r'   r)   Úpropertyr,   r   r   r   r/   r1   © r   r   r   r   %   se  … á05ÀdÔ0K€O�T˜( 2 t 8Ñ,Ñ-ÓKÙ.3ÀDÔ.I€M�4˜  T Ñ*Ñ+ÓIá49Ø˜5 uô5Ð! 8¨D¡>ó ñ (-°Q¸UÈÔ'OÐ ÓOÙ7<Ø!Ÿ™¨U¸ô8Ð$ i§n¡nó ð
Ø   T Ñ*ð
à	�"�d�(Ñ	ó
ð¨h°r¸4°xÑ.@ð ÀXÈbÐRVÈhÑEWó ð.¨h°r¸4°xÑ.@ð .ÀTó .ð,¨H°R¸°XÑ,>ð ,À4ó ,óóð ð2¨Tò 2ó ð2ð ð) 9¨T°3¸¨^Ñ#<ò )ó ð)ô4#r   r   r   r   c                 ó0   — t         j                  | «       | S )zU
    Decorator to register a callback function for the start of the compilation.
    )Úcallback_handlerr   ©r   s    r   Úon_compile_startr@   –   s   € ô ×,Ñ,¨XÔ6Ø€Or   c                 ó0   — t         j                  | «       | S )zS
    Decorator to register a callback function for the end of the compilation.
    )r>   r    r?   s    r   Úon_compile_endrB   ž   s   € ô ×*Ñ*¨8Ô4Ø€Or   )Ú__doc__r9   Úcollections.abcr   Ú
contextlibr   Údataclassesr   r   Útypingr   r   r	   Útorch._utils_internalr
   r   r>   r@   rB   r<   r   r   ú<module>rI      s“   ðñó6 Ý %Ý %ß (ß *Ñ *å 1ð ÷j#ð j#ó ðj#ñZ .Ó/Ð ð˜x¨¨D¨Ñ1ð °h¸rÀ4¸xÑ6Hó ð˜X b¨$ hÑ/ð °H¸RÀ¸XÑ4Fô r   