a
    i‚j±  ã                   @   s8   d Z ddlmZmZ ddlZeed eddœdd„ZdS )zIPython utils.é    )ÚCallableÚHashableN).N)Ú
event_nameÚcallbackÚinfoÚreturnc                 C   s\   t  ¡ }t|ƒ}|jj|  D ]&}t|ddƒ|kr|j | |¡  qDq||_|j | |¡ dS )a¦  Register the IPython event once (replace the previous event if exists).

  Alias for `InteractiveShell.events.register` but replaces previous event
  if it exists.

  This avoids duplicated events after ecolab reload or running cell twice.

  Args:
    event_name: Forwarded to `ip.events.register`
    callback: Forwarded to `ip.events.register`
    info: If an event with the same info already exists, it is replaced.
  Ú__ecolab_event__N)	ÚIPythonÚget_ipythonÚhashÚeventsÚ	callbacksÚgetattrÚ
unregisterr   Úregister)r   r   r   ÚipZold_callback© r   úS/home/ghrups/robot-bench/.venv/lib/python3.9/site-packages/etils/ecolab/ip_utils.pyÚregister_once   s    r   )Ú__doc__Útypingr   r   r	   Ústrr   r   r   r   r   Ú<module>   s   ü