
    e                     2   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 ddlmZmZmZ d	d
lmZ d	dlmZ  ej        d          5  d dlmZ ddd           n# 1 swxY w Y   d Z G d de          Zd Zej                            e           dS )    N)BytesIO)
bothmethod   )HoloMap)Store   )	HTML_TAGS
MIME_TYPESRenderer   )	callbacks) clean_internal_figure_propertiesCRITICALc                 6   t          |            |                     di           }|                    d          rd|d<   t          j        j        | fd|d|}t          j                    D ]+}|j        D ]!}|j	        
                    ||fd|           ",|S )zG
    Custom Plotly pane constructor for use by the HoloViews Pane.
    config
responsivestretch_bothsizing_modemouseup)viewport_update_policyr   c                 N    |                     || j        | j        j                  S )N)#update_streams_from_property_updatenewobjobject)eventclsprops      Blib/python3.11/site-packages/holoviews/plotting/plotly/renderer.py<lambda>z&_PlotlyHoloviewsPane.<locals>.<lambda>$   s(    ;;ei)9      )r   popgetpnpanePlotlyr   valuescallback_propertiesparamwatch)fig_dictkwargsr   plotly_panecallback_clscallback_props         r   _PlotlyHoloviewsPaner0      s     %X...\\(B''Fzz, / .}'. :)(.: :28: :K "(**  )= 	 	M##".]       	 r!   c                        e Zd Z ej        dd          Z ej        dg dd          Z ej        dg dd	          Zg d
g ddZ	ddgZ
dZdZed fd	            ZddZed             Zedd            Z xZS )PlotlyRendererplotlyzThe backend name.)defaultdocauto)htmlpngsvgr6   zc
        Output render format for static figures. If None, no figure
        rendering will occur. )r4   objectsr5   )scrubberwidgetsgifNr6   zu
        Output render multi-frame (typically animated) format. If
        None, no multi-frame rendering will occur.)r7   r8   r9   )r<   r;   r=   r6   )figholomapr;   r<   FTNc                 2    t                      j        ||fi |}|                    di           }t          |           t	          j        |                                          }||d<   |                    di                               dd           |S )z
        Given a HoloViews Viewable return a corresponding figure dictionary.
        Allows cleaning the dictionary of any internal properties that were added
        r   layouttemplateN)superget_plot_stater#   r   goFigureto_dictr"   )self_or_clsr   r5   rendererr,   r+   r   	__class__s          r   rD   zPlotlyRenderer.get_plot_stateE   s     *577)#xBB6BBh++ 	)222 9X&&..00# 	Xr""&&z4888r!   c                    |dk    ridd l m} ddlm} ddlm}m}m}	 |	j        dk    }
|
s
 |             t          |          }g }t          |          D ]}|                    |           t                      }t          j        |                     |                    }|                    |dd          }|                    |           |                    |                    |                     |
s
 |             t                      }d	| j        z  d
z  }|d                             |d|dd          d|d           |                    d           |                                }nu|dv r_dd l m} t          j        |                     |                    }|                    ||          }|dk    r|                    d          }nt3          d|           |r}t5          j        |                              d          }t8          |         t:          |         }}t:          d                             ||          }|                    ||d          }|S |S )Nr=   r   )Image)ensure_servershutdown_serverstatusrunningr8   F)validateg      ?i  GIFr   T)formatappend_imagessave_alldurationloop)r8   r9   r9   zutf-8zUnsupported format: base64)	mime_typeb64 )srcrY   css)	plotly.ioioPILrL   plotly.io.orcarM   rN   rO   statelenrangeupdater   rE   rF   rD   to_imagewriteappendopenfpssaveseekreaddecode
ValueErrorrX   	b64encoder
   r	   rS   )selfplotfmt	as_scriptr,   piorL   rM   rN   rO   rP   nframesframesi	img_bytesfigureimgbiorV   datarZ   rY   tagr\   divs                            r   _figure_datazPlotlyRenderer._figure_dataZ   s   %<<######!!!!!!MMMMMMMMMMli/G  $iiGF7^^ 5 5A#II	4#6#6t#<#<==ll655lAA$$$ejj334444 "!!!))C48T)H1INN3uF122J$(8!  E E EHHQKKK88::DDN""###### Yt2248899F<<,,De||{{7++9C99::: 	"4((//88C)#	#YH%,,yc,JJC**	r*BBCJr!   c                    |dz  }t          |t                    r|j        n|}t          j        | j                                     t          |          d           }|                    |d          j	        }|                    d|j
                  |z  }|                    d|j                  |z  }t          |t          |          t          |                    S )Ng      Y@rr   widthheight)r   r   )
isinstancer   lastr   registrybackendr#   typelookup_optionsoptionsr   r   dictint)r   r   percent_sizefactorrr   r   r   r   s           r   plot_optionszPlotlyRenderer.plot_options   s    %$S'22;chh~ck*..tCyy$??%%c622:GTZ0069Xt{33f<G3u::c&kkBBBBr!   c                     ddl }d| _        dt          t          j        ddg          vr&t          j        j                            d           dS dS )z6
        Loads the plotly notebook resources.
        r   NTr3   _loaded_extensions)panel.models.plotly_loadedgetattrr$   	extensionr   rh   )r   inlinepanels      r   load_nbzPlotlyRenderer.load_nb   s[    
 	#"""72<1EzRRRRL+228<<<<< SRr!   )NN)F)T)__name__
__module____qualname__r)   Stringr   ObjectSelectorr>   r?   mode_formatsr<   r   _render_with_panelr   rD   r   classmethodr   r   __classcell__)rJ   s   @r   r2   r2   -   sF       el81DEEEG
%
v7U7U7U \" # # #C #e"6,: ,: ,:@67 7 7G 211EEEG GL 9%GG     Z(0 0 0 0f C C [C = = = [= = = = =r!   r2   c                 R    | dk    r t           t          j        j        j        d<   d S d S )Nr3   )r0   r$   r%   	HoloViews_panes)rI   s    r   _activate_plotly_backendr      s-    8-A *** r!   )rX   r_   r   r   r$   r)   param.parameterizedr   corer   core.optionsr   rI   r	   r
   r   r   utilr   logging_levelplotly.graph_objs
graph_objsrE   r0   r2   r   _backend_switch_hooksrh    r!   r   <module>r      s               * * * * * *       ! ! ! ! ! ! 6 6 6 6 6 6 6 6 6 6             2 2 2 2 2 2U$$ # #""""""# # # # # # # # # # # # # # #  6s= s= s= s= s=X s= s= s=lB B B   " "#; < < < < <s   AA"%A"