~L idZddlZddlZddlmZddlmZddlmZm Z ddl m Z m Z GddejZeGd d ZeGd d ZeZd e egdfde egdffdZd e egdfde egdffdZy)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) dataclassfield)AnyCallableceZdZdZdZdZdZy)CallbackTriggerN)__name__ __module__ __qualname__DYNAMO LAZY_BACKWARDTRITON_AUTOTUNINGCUDAGRAPH_RECORDING\/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/torch/_dynamo/callback.pyr r $s FMrr c"eZdZUeed<eed<y) CallbackArgscallback_trigger compile_idN)rrrr __annotations__strrrrrr/s %%Orrc eZdZUeeZeeegdfed<eeZ eeegdfed<edddZ e ed<ee jdd Ze jed <d eegdfd eegdffd Zd eegdfd eegdffdZd eegdfd dfdZd eegdfd dfdZded dfdZded dfdZededed edeeffdZddZy)CompilationCallbackHandler)default_factoryNstart_callbacks end_callbacksrF)defaultinitrepr6_CompilationCallbackHandler__pending_callbacks_counter)r!r%r&;_CompilationCallbackHandler__pending_callbacks_counter_lockcallbackreturnc<|jj||S)z Register a callback function to be called when the compilation starts. Args: - callback (Callable): The callback function to register. )r"appendselfr)s rregister_start_callbackz2CompilationCallbackHandler.register_start_callback?s ##H-rc<|jj||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 rregister_end_callbackz0CompilationCallbackHandler.register_end_callbackKs !!(+rc:|jj|y)z Remove a registered start callback function. Args: - callback (Callable): The callback function to remove. N)r"remover-s rremove_start_callbackz0CompilationCallbackHandler.remove_start_callbackWs ##H-rc:|jj|y)z Remove a registered end callback function. Args: - callback (Callable): The callback function to remove. N)r#r3r-s rremove_end_callbackz.CompilationCallbackHandler.remove_end_callback`s !!(+rargsc6|jD] }|| y)z9 Execute all registered start callbacks. N)r"r.r7r)s rrun_start_callbacksz.CompilationCallbackHandler.run_start_callbacksis ,, H TN rc6|jD] }|| y)z7 Execute all registered end callbacks. N)r#r9s rrun_end_callbacksz,CompilationCallbackHandler.run_end_callbacksps ** H TN rtriggerrc#Kt||} |j5|xjdz c_|jdk(r|j|dddd|j5|jdkDsJd|jdk(r|j ||xjdzc_dddy#1swYnxYw#1swYyxYw#|j5|jdkDsJd|jdk(r|j ||xjdzc_dddw#1swYwxYwxYww)zc Context manager to install the callbacks and run them when the context is exited. r Nrz1Pending callbacks counter cannot become negative.)rr(r'r:r<)r.r=rr7s rinstall_callbacksz,CompilationCallbackHandler.install_callbackswsBGZ0 666 300A5033q8,,T2 3 66 677!;G;33q8**4000A50  6 6  3 3  6 666 677!;G;33q8**4000A50  6 6 6se E C6B? C E*A C 6 E?CC CE E$A D90 E9E >EEc|jj|jj|jdk(sJy)z1 Clear all registered callbacks. rN)r"clearr#r')r.s rrAz CompilationCallbackHandler.clears< ""$   "//1444r)r*N)rrrrlistr"rrrr#r'int threadingLockr(r/r1r4r6r:r<rr rrrr?rArrrr r 5st4#789W:?PT:UM4,!567U',QU'OO7<!U8$inn  ,!56  <.$& '   ,!56  <.$& ' .h ~t7K.L.QU.,Hl^T5I,J,t, lt6&6476 4c> "66,5rr r)r*c0tj||S)zU Decorator to register a callback function for the start of the compilation. )callback_handlerr/r)s ron_compile_startrIs ,,X6 Orc0tj||S)zS Decorator to register a callback function for the end of the compilation. )rGr1rHs ron_compile_endrKs **84 Or)__doc__enumrDcollections.abcr contextlibr dataclassesrrtypingrrEnumr rr rGrIrKrrrrSs6 %%( dii    ^5^5 ^5B./ ~t+, |nd"# ~t+, |nd"#r