o
    ZhL                     @  s   d Z ddlmZ ddlZddlZddl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mZ G dd	 d	ZG d
d deZdS )z7Replacements for sys.displayhook that publish over ZMQ.    )annotationsN)DisplayHook)Sessionextract_header)AnyDictInstance)encode_images
json_cleanc                   @  s4   e Zd ZdZdZdd Zdd Zdd Zd	d
 ZdS )ZMQDisplayHookzOA simple displayhook that publishes the object's repr over a ZeroMQ
    socket.s   execute_resultc                 C  s   || _ || _i | _dS )zInitialize the hook.N)session
pub_socketparent_header)selfr   r    r   L/var/www/html/lang_env/lib/python3.10/site-packages/ipykernel/displayhook.py__init__   s   
zZMQDisplayHook.__init__c                 C  s   dS )z$This method is replaced in kernelappr   r   r   r   r   r   get_execution_count   s   z"ZMQDisplayHook.get_execution_countc                 C  s^   |du rdS |t _tj  tj  |  dt|ii d}| jj	| j
d|| j| jd dS )zHandle a hook call.Nz
text/plain)execution_countdatametadataexecute_result)parentident)builtins_sysstdoutflushstderrr   reprr   sendr   r   topic)r   objcontentsr   r   r   __call__"   s   



zZMQDisplayHook.__call__c                 C     t || _dS )zSet the parent header.Nr   r   r   r   r   r   r   
set_parent3      zZMQDisplayHook.set_parentN)	__name__
__module____qualname____doc__r#   r   r   r&   r*   r   r   r   r   r      s    r   c                   @  sf   e Zd ZU dZdZeeddZeddZ	e
i Zded< dd Zd	d
 Zdd ZdddZdd ZdS )ZMQShellDisplayHookzA displayhook subclass that publishes data using ZeroMQ. This is intended
    to work with an InteractiveShell instance. It sends a dict of different
    representations of the object.NT)
allow_nonezdict[str, t.Any] | Nonemsgc                 C  r'   )z%Set the parent for outbound messages.Nr(   r)   r   r   r   r*   D   r+   zZMQShellDisplayHook.set_parentc                 C  s*   | j r| j jdi i d| jd| _dS dS )zStart the display hook.r   )r   r   )r   N)r   r2   r   r   r   r   r   start_displayhookH   s   z%ZMQShellDisplayHook.start_displayhookc                 C  s   | j r| j| j d d< dS dS )zWrite the output prompt.contentr   N)r2   Zprompt_countr   r   r   r   write_output_promptT   s   z'ZMQShellDisplayHook.write_output_promptc                 C  s2   | j rtt|| j d d< || j d d< dS dS )z!Write format data to the message.r4   r   r   N)r2   r
   r	   )r   Zformat_dictZmd_dictr   r   r   write_format_dataY   s   z%ZMQShellDisplayHook.write_format_datac                 C  sP   t j  t j  | jr#| jd d r#| jr#| jj| j| j| jd d| _dS )z%Finish up all displayhook activities.r4   r   )r   N)	r   r   r   r    r2   r   r"   r   r#   r   r   r   r   finish_displayhook_   s
   


z&ZMQShellDisplayHook.finish_displayhook)N)r,   r-   r.   r/   r#   r   r   r   r   r   r   r   __annotations__r*   r3   r5   r6   r7   r   r   r   r   r0   8   s   
 

r0   )r/   
__future__r   r   r   typingtZIPython.core.displayhookr   Zjupyter_client.sessionr   r   Z	traitletsr   r   r   Zipykernel.jsonutilr	   r
   r   r0   r   r   r   r   <module>   s    &