
    ;;i                         d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
Z e       Z G d d	e      Z G d
 de      Zy)a  An interface for publishing rich data to frontends.

There are two components of the display system:

* Display formatters, which take a Python object and compute the
  representation of the object in various formats (text, HTML, SVG, etc.).
* The display publisher that is used to send the representation data to the
  various frontends.

This module defines the logic display publishing. The display publisher uses
the ``display_data`` message type that is defined in the IPython messaging
spec.
    N)Configurable)List   )publish_display_data)HistoryOutputc                   n     e Zd ZdZd fd	ZddZd Zd Zd Zde	fddd		 dd
Z
ed        ZddZ xZS )DisplayPublisherzA traited class that publishes display data to frontends.

    Instances of this class are created by the main IPython object and should
    be accessed there.
    Nc                     || _         d| _        d| _        | j                   r| j                          t	        |   |i | y )NF)shell_is_publishing_in_post_execute_setup_execution_trackingsuper__init__)selfr   argskwargs	__class__s       T/home/rose/Desktop/poly/venv/lib/python3.12/site-packages/IPython/core/displaypub.pyr   zDisplayPublisher.__init__+   s?    
# %::**,$)&)    c                     t        |t              st        d|z        |t        |t              st        d|z        yy)zValidate the display data.

        Parameters
        ----------
        data : dict
            The formata data dictionary.
        metadata : dict
            Any metadata for the data.
        zdata must be a dict, got: %rNz metadata must be a dict, got: %r)
isinstancedict	TypeError)r   datametadatas      r   _validate_datazDisplayPublisher._validate_data3   sJ     $%:TABBh- BT IJJ .  r   c                     | j                   j                  j                  d| j                         | j                   j                  j                  d| j                         y)z%Set up hooks to track execution statepost_executepre_executeN)r   eventsregister_on_post_execute_on_pre_executer   s    r   r   z*DisplayPublisher._setup_execution_trackingD   sB    

"">43H3HI

""=$2F2FGr   c                     d| _         y)z%Called at start of post_execute phaseTNr   r%   s    r   r#   z!DisplayPublisher._on_post_executeI   s
     $r   c                     d| _         y)z$Called at start of pre_execute phaseFNr'   r%   s    r   r$   z DisplayPublisher._on_pre_executeM   s
     %r   F	transientupdatec                D   |t         urddl}|j                  dt        d       i }| j                  t        | j                  di       }| j                  j                  j                  }	| j                  j                  dz
  }
| j                  r| j                  j                  dz
  }
|	|
   j                  t        d|	             |j                         D ]'  \  }}||v s |||   |j                  |d              y d
| _        d|v rt        |d          d| _        y)a  Publish data and metadata to all frontends.

        See the ``display_data`` message in the messaging documentation for
        more details about this message type.

        The following MIME types are currently implemented:

        * text/plain
        * text/html
        * text/markdown
        * text/latex
        * application/json
        * application/javascript
        * image/png
        * image/jpeg
        * image/svg+xml

        Parameters
        ----------
        data : dict
            A dictionary having keys that are valid MIME types (like
            'text/plain' or 'image/svg+xml') and values that are the data for
            that MIME type. The data itself must be a JSON'able data
            structure. Minimally all data should have the 'text/plain' data,
            which can be displayed by all frontends. If more than the plain
            text is given, it is up to the frontend to decide which
            representation to use.
        metadata : dict
            A dictionary for metadata related to the data. This can contain
            arbitrary key, value pairs that frontends can use to interpret
            the data.  Metadata specific to each mime-type can be specified
            in the metadata dict with the same mime-type keys as
            the data itself.
        source : str, deprecated
            Unused.
        transient : dict, keyword-only
            A dictionary for transient data.
            Data in this dictionary should not be persisted as part of saving this output.
            Examples include 'display_id'.
        update : bool, keyword-only, default: False
            If True, only update existing outputs with the same display_id,
            rather than creating a new output.
        r   NzThe 'source' parameter is deprecated since IPython 3.0 and will be ignored (this warning is present since 9.0). `source` parameter will be removed in the future.   )
stacklevelmime_renderersr   display_data)output_typebundleTz
text/plainF)	_sentinelwarningswarnDeprecationWarningr   getattrhistory_manageroutputsexecution_countr   appendr   itemsgetr   print)r   r   r   sourcer*   r+   r   r4   handlersr9   target_execution_countmimehandlers                r   publishzDisplayPublisher.publishR   s   l "MMi"	   ::!tzz+;R@H**,,44!%!;!;a!?   &*ZZ%?%?!%C"&'..nTB	
 &^^-MD't|T
HLLt$<= .
 #4$|$%#r   c                     | j                   S N)r   r%   s    r   is_publishingzDisplayPublisher.is_publishing   s    """r   c                     t        dd       t        j                  j                          t        dd       t        j                  j                          y)z.Clear the output of the cell receiving output.z[2K )endN)r>   sysstdoutflushstderr)r   waits     r   clear_outputzDisplayPublisher.clear_output   s6    kr"

kr"

r   rF   )returnNF)__name__
__module____qualname____doc__r   r   r   r#   r$   r3   rD   propertyrG   rP   __classcell__r   s   @r   r	   r	   $   sd    *K"H
%& 	X$ X$ 
X$t # #r   r	   c                   P     e Zd ZU dZ e       Zeed<   	 dddddZd	 fd	Z xZ	S )
CapturingDisplayPublisherzA DisplayPublisher that storesr9   NFr)   c                D    | j                   j                  ||||d       y )N)r   r   r*   r+   )r9   r;   )r   r   r   r?   r*   r+   s         r   rD   z!CapturingDisplayPublisher.publish   s'     	$& 		
r   c                 `    t         t        |   |       | j                  j	                          y rF   )r   r[   rP   r9   clear)r   rO   r   s     r   rP   z&CapturingDisplayPublisher.clear_output   s%    ';DA 	r   )NNrR   )
rS   rT   rU   rV   r   r9   __annotations__rD   rP   rX   rY   s   @r   r[   r[      s0    (FGT +/

=A%

 r   r[   )rV   rK   traitlets.config.configurabler   	traitletsr   display_functionsr   historyr   typingtobjectr3   r	   r[    r   r   <module>rh      sE   "  6  4 "  H	Q| Qh 0 r   