
    ^h                     x    S r  " S S\5      r0 rS r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r	g	)
ao  Infrastructure for registering and firing callbacks on application events.

Unlike :mod:`IPython.core.hooks`, which lets end users set single functions to
be called at specific times, or a collection of alternative methods to try,
callbacks are designed to be used by extension authors. A number of callbacks
can be registered for the same event without needing to be aware of one another.

The functions defined in this module are no-ops indicating the names of available
events and the arguments which will be passed to them.

.. note::

   This API is experimental in IPython 2.0, and may be revised in future versions.
c                   4    \ rS rSrSrS	S jrS rS rS rSr	g)
EventManager   a  Manage a collection of events and a sequence of callbacks for each.

This is attached to :class:`~IPython.core.interactiveshell.InteractiveShell`
instances as an ``events`` attribute.

.. note::

   This API is experimental in IPython 2.0, and may be revised in future versions.
c                 V    Xl         U Vs0 s H  oD/ _M     snU l        X0l        gs  snf )a=  Initialise the :class:`CallbackManager`.

Parameters
----------
shell
    The :class:`~IPython.core.interactiveshell.InteractiveShell` instance
available_events
    An iterable of names for callback events.
print_on_error:
    A boolean flag to set whether the EventManager will print a warning which a event errors.
N)shell	callbacksprint_on_error)selfr   available_eventsr   ns        M/home/james-whalen/.local/lib/python3.13/site-packages/IPython/core/events.py__init__EventManager.__init__   s.     
(89(81B$(89, :s   &c                     [        U5      (       d  [        SU-  5      eX R                  U   ;  a  U R                  U   R                  U5        gg)a  Register a new event callback.

Parameters
----------
event : str
    The event for which to register this callback.
function : callable
    A function to be called on the given event. It should take the same
    parameters as the appropriate callback prototype.

Raises
------
TypeError
    If ``function`` is not callable.
KeyError
    If ``event`` is not one of the known events.
zNeed a callable, got %rN)callable	TypeErrorr   appendr	   eventfunctions      r   registerEventManager.register,   sK    $ !!5@AA>>%00NN5!((2 1    c                     X R                   U   ;   a  U R                   U   R                  U5      $ [        SR                  X!5      5      e)z'Remove a callback from the given event.z0Function {!r} is not registered as a {} callback)r   remove
ValueErrorformatr   s      r   
unregisterEventManager.unregisterC   sC    ~~e,,>>%(//99KRRS[cddr   c           
         U R                   U   SS  H  n U" U0 UD6  M     g! [        [        4 aJ    U R                  (       a  [	        SR                  XAX#5      5        U R                  R                  5          Mj  f = f)zCall callbacks for ``event``.

Any additional arguments are passed to all callbacks registered for this
event. Exceptions raised by callbacks are caught, and a message printed.
Nz@Error in callback {} (for {}), with arguments args {},kwargs {}:)r   	ExceptionKeyboardInterruptr   printr   r   showtraceback)r	   r   argskwargsfuncs        r   triggerEventManager.triggerJ   s{     NN5)!,D	+d%f% - 01 +&&Zaa 
 

((*+s   $AA>=A>)r   r   r   N)T)
__name__
__module____qualname____firstlineno____doc__r   r   r   r'   __static_attributes__ r   r   r   r      s    - 3.e+r   r   c                 ,    U [         U R                  '   U $ )N)r
   r)   )callback_functions    r   _define_eventr2   _   s    3D&//0r   c                      g)zFires before code is executed in response to user/frontend action.

This includes comm and widget messages and silent execution, as well as user
code cells.
Nr/   r/   r   r   pre_executer4   j        	r   c                     g)zFires before user-entered code runs.

Parameters
----------
info : :class:`~IPython.core.interactiveshell.ExecutionInfo`
    An object containing information used for the code execution.
Nr/   )infos    r   pre_run_cellr8   s        	r   c                      g)zFires after code is executed in response to user/frontend action.

This includes comm and widget messages and silent execution, as well as user
code cells.
Nr/   r/   r   r   post_executer;   ~   r5   r   c                     g)zFires after user-entered code runs.

Parameters
----------
result : :class:`~IPython.core.interactiveshell.ExecutionResult`
    The object which will be returned as the execution result.
Nr/   )results    r   post_run_cellr>      r9   r   c                     g)a/  Fires after initialisation of :class:`~IPython.core.interactiveshell.InteractiveShell`.

This is before extensions and startup scripts are loaded, so it can only be
set by subclassing.

Parameters
----------
ip : :class:`~IPython.core.interactiveshell.InteractiveShell`
    The newly initialised shell.
Nr/   )ips    r   shell_initializedrA      s     	r   N)
r-   objectr   r
   r2   r4   r8   r;   r>   rA   r/   r   r   <module>rC      s    I+6 I+X   	 	 	 	 	 	 	 	 	 	r   