class CompilationCallbackHandler: def __init__(self): self.start_callbacks = [] self.end_callbacks = [] def register_start_callback(self, callback): """ Register a callback function to be called when the compilation starts. Args: - callback (callable): The callback function to register. """ self.start_callbacks.append(callback) return callback def register_end_callback(self, callback): """ Register a callback function to be called when the compilation ends. Args: - callback (callable): The callback function to register. """ self.end_callbacks.append(callback) return callback def remove_start_callback(self, callback): """ Remove a registered start callback function. Args: - callback (callable): The callback function to remove. """ self.start_callbacks.remove(callback) def remove_end_callback(self, callback): """ Remove a registered end callback function. Args: - callback (callable): The callback function to remove. """ self.end_callbacks.remove(callback) def run_start_callbacks(self): """ Execute all registered start callbacks. """ for callback in self.start_callbacks: callback() def run_end_callbacks(self): """ Execute all registered end callbacks. """ for callback in self.end_callbacks: callback() def clear(self): """ Clear all registered callbacks. """ self.start_callbacks.clear() self.end_callbacks.clear() callback_handler = CompilationCallbackHandler() def on_compile_start(callback): """ Decorator to register a callback function for the start of the compilation. """ callback_handler.register_start_callback(callback) return callback def on_compile_end(callback): """ Decorator to register a callback function for the end of the compilation. """ callback_handler.register_end_callback(callback) return callback