B
    &[_?                 @   s  d dl mZmZ d dlZd dlmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ e
 dZ!e
 d	Z"e
 d
Z#G dd de$Z%e% Z&[%d>ddZ'e Z(e(e&d< e(e&d< e(e&d< e(e&d< i Z)ee)de&d< ee)dde&d< ee)de&d< ee)de&d< ee)de&d< e e&d< e e&d< e e&d< e*ddd Z+ef e+e&d!< ef e+Z,e,e&d"< e,e&d#< ef e+e&d$< ef e+e&d%< ee)de&d&< ee)d'd(e&d'< ee)d)d(e&d)< ee)d*d(e&d*< ee)dd+e&d,< ee)d-d+e&d.< e e&d/< e e&d0< dZ-ej./d1dZ0e0rye&1e0 W n& e2k
r   e2d2j3e0d3Y nX e0Z-nbe!re!4 re-syd dl5Z6dZ-W n e7k
r   Y nX e-sej89d4rdZ-e-sd5ej.krdZ-e-sd6ej.krdZ-e-s(d7ej.kr(dZ-e-s>d8ej.kr>dZ-e-sTd9ej.krTdZ-e-sd:ej.kryd d;l:m;Z; e;  d$Z-W n e2k
r   Y nX e-se!4 j<j=d<krd&Z-e-sd=Z-n2d dl>Z>ye>/  d&Z-W n e>j?k
r   Y nX de&_@e-e&_AdS )?    )absolute_importdivisionN)copy)LooseVersion)optional_imports)MimetypeRendererExternalRendererPlotlyRendererNotebookRendererKaggleRendererAzureRendererColabRendererJsonRendererPngRendererJpegRendererSvgRendererPdfRendererBrowserRendererIFrameRendererSphinxGalleryHtmlRendererSphinxGalleryOrcaRendererCoCalcRendererDatabricksRenderer)validate_coerce_fig_to_dictZIPythonzIPython.displaynbformatc               @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zi fddZedd Zejdd Zedd Zejdd ZefddZdd Zd d! Zd"d# Zd)d%d&Zd*d'd(Zd$S )+RenderersConfigzI
    Singleton object containing the current renderer configurations
    c             C   s"   i | _ d | _g | _d| _g | _d S )NF)
_renderers_default_name_default_renderers_render_on_display_to_activate)self r"   8/tmp/pip-install-l29rncou/plotly/plotly/io/_renderers.py__init__.   s
    zRenderersConfig.__init__c             C   s
   t | jS )N)lenr   )r!   r"   r"   r#   __len__7   s    zRenderersConfig.__len__c             C   s
   || j kS )N)r   )r!   itemr"   r"   r#   __contains__:   s    zRenderersConfig.__contains__c             C   s
   t | jS )N)iterr   )r!   r"   r"   r#   __iter__=   s    zRenderersConfig.__iter__c             C   s   | j | }|S )N)r   )r!   r'   rendererr"   r"   r#   __getitem__@   s    
zRenderersConfig.__getitem__c             C   s0   t |ttfs"tdjt|d|| j|< d S )NzhRenderer must be a subclass of MimetypeRenderer or ExternalRenderer.
    Received value with type: {typ})typ)
isinstancer   r   
ValueErrorformattyper   )r!   keyvaluer"   r"   r#   __setitem__D   s
    zRenderersConfig.__setitem__c             C   s   | j |= | j|krd | _d S )N)r   _default)r!   r2   r"   r"   r#   __delitem__P   s    
zRenderersConfig.__delitem__c             C   s
   | j  S )N)r   keys)r!   r"   r"   r#   r7   X   s    zRenderersConfig.keysc             C   s
   | j  S )N)r   items)r!   r"   r"   r#   r8   [   s    zRenderersConfig.itemsc             K   s*   x$t |f| D ]\}}|| |< qW dS )aj  
        Update one or more renderers from a dict or from input keyword
        arguments.

        Parameters
        ----------
        d: dict
            Dictionary from renderer names to new renderer objects.

        kwargs
            Named argument value pairs where the name is a renderer name
            and the value is a new renderer object
        N)dictr8   )r!   dkwargskvr"   r"   r#   update^   s    zRenderersConfig.updatec             C   s   | j S )a  
        The default renderer, or None if no there is no default

        If not None, the default renderer is used to render
        figures when the `plotly.io.show` function is called on a Figure.

        If `plotly.io.renderers.render_on_display` is True, then the default
        renderer will also be used to display Figures automatically when
        displayed in the Jupyter Notebook

        Multiple renderers may be registered by separating their names with
        '+' characters. For example, to specify rendering compatible with
        the classic Jupyter Notebook, JupyterLab, and PDF export:

        >>> import plotly.io as pio
        >>> pio.renderers.default = 'notebook+jupyterlab+pdf'

        The names of available renderers may be retrieved with:

        >>> import plotly.io as pio
        >>> list(pio.renderers)

        Returns
        -------
        str
        )r   )r!   r"   r"   r#   defaultp   s    zRenderersConfig.defaultc                sH   |sd _ g  _d S  |}| _  fdd|D  _t j _d S )N c                s   g | ]} | qS r"   r"   ).0name)r!   r"   r#   
<listcomp>   s    z+RenderersConfig.default.<locals>.<listcomp>)r   r   _validate_coerce_rendererslistr    )r!   r3   renderer_namesr"   )r!   r#   r?      s    
c             C   s   | j S )z
        If True, the default mimetype renderers will be used to render
        figures when they are displayed in an IPython context.

        Returns
        -------
        bool
        )r   )r!   r"   r"   r#   render_on_display   s    
z!RenderersConfig.render_on_displayc             C   s   t || _d S )N)boolr   )r!   valr"   r"   r#   rG      s    c                sJ    fdd| j D }x|r.|d}|  qW  fdd| j D | _ dS )z
        Activate all renderers that are waiting in the _to_activate list

        Parameters
        ----------
        cls
            Only activate renders that are subclasses of this class
        c                s   g | ]} rt | r|qS r"   )r.   )rA   r)clsr"   r#   rC      s    z?RenderersConfig._activate_pending_renderers.<locals>.<listcomp>r   c                s   g | ]} rt | s|qS r"   )r.   )rA   rJ   )rK   r"   r#   rC      s    N)r    popactivate)r!   rK   Zto_activate_with_clsr+   r"   )rK   r#   _activate_pending_renderers   s
    

z+RenderersConfig._activate_pending_renderersc                sJ   t |tjstd|d} fdd|D }|rFtdt||S )a=  
        Input a string and validate that it contains the names of one or more
        valid renderers separated on '+' characters.  If valid, return
        a list of the renderer names

        Parameters
        ----------
        renderers_string: str

        Returns
        -------
        list of str
        z&Renderer must be specified as a string+c                s   g | ]}| kr|qS r"   r"   )rA   rB   )r!   r"   r#   rC      s    z>RenderersConfig._validate_coerce_renderers.<locals>.<listcomp>z'
Invalid named renderer(s) received: {})r.   sixstring_typesr/   splitr0   str)r!   renderers_stringrF   invalidr"   )r!   r#   rD      s    
z*RenderersConfig._validate_coerce_renderersc             C   s   dj t| j|  dS )NzuRenderers configuration
-----------------------
    Default renderer: {default}
    Available renderers:
{available}
)r?   	available)r0   reprr?   _available_renderers_str)r!   r"   r"   r#   __repr__   s    zRenderersConfig.__repr__c             C   s$   d tjtt| dddd}|S )ze
        Return nicely wrapped string representation of all
        available renderer names
        
G   z        z	         )widthinitial_indentsubsequent_indent)jointextwrapwraprW   rE   )r!   rV   r"   r"   r#   rX      s    

z(RenderersConfig._available_renderers_strNc       
         s   |rB  |} fdd|D }x2|D ]}t|tr&|  q&W n jtd  j}i }xZ|D ]R}t|tr^t|}x*| D ]\}}	t||r~t	|||	 q~W |
|| q^W |S )aY  
        Build a mime bundle dict containing a kev/value pair for each
        MimetypeRenderer specified in either the default renderer string,
        or in the supplied renderers_string argument.

        Note that this method skips any renderers that are not subclasses
        of MimetypeRenderer.

        Parameters
        ----------
        fig_dict: dict
            Figure dictionary
        renderers_string: str or None (default None)
            Renderer string to process rather than the current default
            renderer string

        Returns
        -------
        dict
        c                s   g | ]} | qS r"   r"   )rA   rB   )r!   r"   r#   rC     s    z6RenderersConfig._build_mime_bundle.<locals>.<listcomp>)rK   )rD   r.   r   rM   rN   r   r   r8   hasattrsetattrr>   Zto_mimebundle)
r!   fig_dictrT   r;   rF   renderers_listr+   bundler<   r=   r"   )r!   r#   _build_mime_bundle   s"    





z"RenderersConfig._build_mime_bundlec       	         s   |rB  |} fdd|D }x2|D ]}t|tr&|  q&W n jtd  j}xT|D ]L}t|trZt|}x*| D ]\}}t||rzt	||| qzW |
| qZW dS )a?  
        Perform external rendering for each ExternalRenderer specified
        in either the default renderer string, or in the supplied
        renderers_string argument.

        Note that this method skips any renderers that are not subclasses
        of ExternalRenderer.

        Parameters
        ----------
        fig_dict: dict
            Figure dictionary
        renderers_string: str or None (default None)
            Renderer string to process rather than the current default
            renderer string

        Returns
        -------
        None
        c                s   g | ]} | qS r"   r"   )rA   rB   )r!   r"   r#   rC   D  s    z?RenderersConfig._perform_external_rendering.<locals>.<listcomp>)rK   N)rD   r.   r   rM   rN   r   r   r8   rb   rc   render)	r!   rd   rT   r;   rF   re   r+   r<   r=   r"   )r!   r#   _perform_external_rendering-  s    





z+RenderersConfig._perform_external_rendering)N)N)__name__
__module____qualname____doc__r$   r&   r(   r*   r,   r4   r6   r7   r8   r>   propertyr?   setterrG   objectrN   rD   rY   rX   rg   ri   r"   r"   r"   r#   r   )   s*   	
.r   Tc             K   sv   t | |}tj|fd|i|}|r\ts0tdtrFttjtdk rNtdtj|dd tj	|fd|i| dS )a  
    Show a figure using either the default renderer(s) or the renderer(s)
    specified by the renderer argument

    Parameters
    ----------
    fig: dict of Figure
        The Figure object or figure dict to display

    renderer: str or None (default None)
        A string containing the names of one or more registered renderers
        (separated by '+' characters) or None.  If None, then the default
        renderers specified in plotly.io.renderers.default are used.

    validate: bool (default True)
        True if the figure should be validated before being shown,
        False otherwise.

    Returns
    -------
    None
    rT   z<Mime type rendering requires ipython but it is not installedz4.2.0zDMime type rendering requires nbformat>=4.2.0 but it is not installedT)rawN)
r   	renderersrg   ipython_displayr/   r   r   __version__displayri   )Zfigr+   validater;   rd   rf   r"   r"   r#   show_  s    
rw   Zplotly_mimetypeZ
jupyterlabZnteractZvscode)configZnotebook)rx   	connectedZnotebook_connectedZkaggleZazureZcolabZcocalcZ
databricksjsoni  i  )heightr\   ZpngZjpegZjpgsvgZpdfZbrowserZfirefox)rx   ZusingZchromeZchromium)rx   Zinclude_plotlyjsiframeZcdnZiframe_connectedZsphinx_galleryZsphinx_gallery_pngZPLOTLY_RENDERERzb
Invalid named renderer(s) specified in the 'PLOTLY_RENDERER'
environment variable: {env_renderer})env_rendererz/kaggle/inputZAZURE_NOTEBOOKS_HOSTZ
VSCODE_PIDZNTERACT_EXEZCOCALC_PROJECT_IDZDATABRICKS_RUNTIME_VERSIONZSPYDER_ARGS)validate_executableZTerminalInteractiveShellzplotly_mimetype+notebook)NT)B
__future__r   r   r`   r   rP   osZdistutils.versionr   Zplotlyr   Zplotly.io._base_renderersr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zplotly.io._utilsr   Z
get_moduleZipythonrs   r   rp   r   rr   rw   Zplotly_rendererrx   r9   Z
img_kwargsZjpeg_rendererZdefault_rendererenvirongetr~   rD   r/   r0   Zget_ipythonZgoogle.colabZgoogleImportErrorpathexistsZplotly.io.orcar   	__class__rj   Z
webbrowserErrorrG   r?   r"   r"   r"   r#   <module>   s   P


  3
0





