o
    ^i                     @  s^   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ G d	d
 d
ZdS )zAn output widget mimic.    )annotations)Any)KernelClient)NotebookNode)output_from_msg   )
json_cleanc                   @  sp   e Zd ZdZd+ddZd,ddZd-ddZ			d.d/dd Z			d.d0d!d"Zd1d%d&Z	d2d'd(Z
d3d)d*ZdS )4OutputWidgetz+This class mimics a front end output widgetcomm_idstrstatedict[str, Any]kernel_clientr   executorr   returnNonec                 C  s@   || _ || _|| _|| _d| j  d| _| jd | _d| _dS )zInitialize the widget.zcomm-%sasciioutputsFN)r
   r   r   r   encodetopicr   clear_before_next_output)selfr
   r   r   r    r   Q/home/ubuntu/hpml_nyu/venv/lib/python3.10/site-packages/nbclient/output_widget.py__init__   s   
zOutputWidget.__init__outslist[NotebookNode]msg
cell_indexintc                 C  s\   |d | _ |d }|drd| _dS g | _|   t| jdr,| j| jj| j d< dS dS )zClear output.parent_headercontentwaitTwidget_stater   N)	r    getr   r   
sync_statehasattrr   r#   r
   )r   r   r   r   r!   r   r   r   clear_output   s   


zOutputWidget.clear_outputc                 C  s$   d| j i}d|g d}| | dS )zSync state.r   update)methodr   buffer_pathsN)r   send)r   r   r   r   r   r   r%   *   s   
zOutputWidget.sync_stateNmsg_typedatadict[str, Any] | Nonemetadatabufferslist[Any] | Nonekeysc                 K  sd   |du ri n|}|du ri n|}t td|| jd|}| jjj||| j|d}| jj| dS )z*Helper for sending a comm message on IOPubN)r-   r
   )r!   parentr/   r   )	r   dictr
   r   sessionr   r    shell_channelr+   )r   r,   r-   r/   r0   r2   r!   r   r   r   r   _publish_msg0   s   	
zOutputWidget._publish_msgc                 C  s   | j d|||d dS )zSend a comm message.comm_msg)r-   r/   r0   N)r7   )r   r-   r/   r0   r   r   r   r+   A   s   zOutputWidget.send
display_id
str | Nonec                 C  s   | j r	g | _d| _ |d | _t|}| jr@| jd }|d dkr9|d dkr9|d |d kr9|d  |d 7  < n| j| n| j| |   t| jdr\| j| jj| j	 d	< d
S d
S )zHandle output.Fr    output_typestreamnametextr#   r   N)
r   r   r    r   appendr%   r&   r   r#   r
   )r   r   r   r9   r   outputlast_outputr   r   r   rA   J   s"   

zOutputWidget.outputc                 C  sL   d|v r$| d}|r| j||  || _dS | j| j|  || _dS dS )zSet the state.msg_idN)r$   r   register_output_hookrC   remove_output_hook)r   r   rC   r   r   r   	set_statef   s   


zOutputWidget.set_statec                 C  sH   |d }|d }|| j krtd|d }d|v r"| |d  dS dS )zHandle a message.r!   r
   zMismatched comm idr-   r   N)r
   AssertionErrorrF   )r   r   r!   r
   r-   r   r   r   
handle_msgq   s   
zOutputWidget.handle_msg)
r
   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   )NNN)r,   r   r-   r.   r/   r.   r0   r1   r2   r   r   r   )r-   r.   r/   r.   r0   r1   r   r   )
r   r   r   r   r9   r:   r   r   r   r   )r   r   r   r   )r   r   r   r   )__name__
__module____qualname____doc__r   r'   r%   r7   r+   rA   rF   rH   r   r   r   r   r	      s     


	
	
r	   N)rL   
__future__r   typingr   jupyter_client.clientr   nbformatr   nbformat.v4r   jsonutilr   r	   r   r   r   r   <module>   s    