o
    û›hÎ  ã                   @   s\   d Z ddlZddlmZ ddlmZ ddlmZ ddlZ	G dd„ deƒZ
G d	d
„ d
e
ƒZdS )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_datac                       sJ   e Zd ZdZd‡ fdd„	Zddd„Zddddœdd
d„Zddd„Z‡  ZS )ÚDisplayPublisherz¤A 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                    s   || _ tƒ j|i |¤Ž d S ©N)ÚshellÚsuperÚ__init__)Úselfr   ÚargsÚkwargs©Ú	__class__© úMc:\Users\shubh\Videos\agent\nova\Lib\site-packages\IPython/core/displaypub.pyr
   )   s   zDisplayPublisher.__init__c                 C   s<   t |tƒstd| ƒ‚|durt |tƒstd| ƒ‚dS dS )zÆValidate 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Úmetadatar   r   r   Ú_validate_data-   s   

þzDisplayPublisher._validate_dataF©Ú	transientÚupdateÚreturnc          
      K   sn   i }| j durt| j di ƒ}| ¡ D ]\}}	||v r(|	|| | |d¡ƒ  dS qd|v r5t|d ƒ dS dS )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.
        NZmime_renderersz
text/plain)r   ÚgetattrÚitemsÚgetÚprint)
r   r   r   Úsourcer   r   r   ÚhandlersÚmimeÚhandlerr   r   r   Úpublish?   s   -
þÿzDisplayPublisher.publishc                 C   s0   t ddd� tj ¡  t ddd� tj ¡  dS )z.Clear the output of the cell receiving output.z[2KÚ )ÚendN)r   ÚsysÚstdoutÚflushÚstderr©r   Úwaitr   r   r   Úclear_outputx   s   
zDisplayPublisher.clear_outputr   ©NN)r   N©F)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r$   r-   Ú__classcell__r   r   r   r   r   "   s    
9r   c                       sF   e Zd ZU dZeƒ Zeed< 	d
dddœdd„Zd‡ fdd	„	Z‡  Z	S )ÚCapturingDisplayPublisherzA DisplayPublisher that storesÚoutputsNFr   c                C   s   | j  ||||dœ¡ d S )N)r   r   r   r   )r6   Úappend)r   r   r   r    r   r   r   r   r   r$   …   s   üÿz!CapturingDisplayPublisher.publishc                    s   t t| ƒ |¡ | j ¡  d S r   )r	   r5   r-   r6   Úclearr+   r   r   r   r-   ‘   s   z&CapturingDisplayPublisher.clear_outputr.   r/   )
r0   r1   r2   r3   r   r6   Ú__annotations__r$   r-   r4   r   r   r   r   r5   €   s   
 ÿÿr5   )r3   r'   Ztraitlets.config.configurabler   Z	traitletsr   Zdisplay_functionsr   ÚtypingÚtr   r5   r   r   r   r   Ú<module>   s    ^