o
    tf                     @  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-d/d!d"Zd0d$d%Z	d1d&d'Z
d2d(d)ZdS )3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   encodeZtopicr   clear_before_next_output)selfr
   r   r   r    r   _/var/www/html/software/conda/envs/catlas/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   Z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   Zshell_channelr)   )r   r*   r+   r-   r.   r0   r    r   r   r   r   _publish_msg0   s   	
zOutputWidget._publish_msgc                 C  s   | j d|||d dS )zSend a comm message.Zcomm_msg)r+   r-   r.   N)r4   )r   r+   r-   r.   r   r   r   r)   A   s   zOutputWidget.send
display_idc                 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   r5   r   outputZlast_outputr   r   r   r<   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   Zregister_output_hookr=   Zremove_output_hook)r   r   r=   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
   AssertionErrorr>   )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,   r.   r/   r0   r   r   r   )r+   r,   r-   r,   r.   r/   r   r   )
r   r   r   r   r5   r   r   r   r   r   )r   r   r   r   )r   r   r   r   )__name__
__module____qualname____doc__r   r&   r$   r4   r)   r<   r>   r@   r   r   r   r   r	      s     


	
	
r	   N)rD   
__future__r   typingr   Zjupyter_client.clientr   Znbformatr   Znbformat.v4r   Zjsonutilr   r	   r   r   r   r   <module>   s    