
    e'                        d Z ddlZddlZddlmZ ddlmZ ddlZddlmZ ddl	m
Z
 ddlZddl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 dd
lmZmZmZ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( ddl)m*Z*m+Z+ da,dZ-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d(dZ5ed             Z6d Z7e7d             Z8e7d             Z9e7d             Z:e7d              Z;d)d"Z<d# Z=d$ Z>e7d%             Z?e7d&             Z@dZAd' ZBdS )*zH
Definition and registration of display hooks for the IPython Notebook.
    N)contextmanagerwraps)get_ipython)HTML   )
AdjointLayoutCompositeOverlayDimensioned
DynamicMapEmpty	GridSpaceHoloMapLayoutNdLayoutViewableElement)FileArchive)AbbreviatedExceptionSkipRenderingStoreStoreOptions)unique_dimkeys)mimebundle_to_html)Plot)
MIME_TYPES)OutputSettings   )	OptsMagicOutputMagicTc                 L    t           j                            d|  d           d S )Nz+Animation longer than the max_frames limit z;
skipping rendering to avoid unexpected lengthy computations.
If desired, the limit can be increased using:
hv.output(max_frames=<insert number>))sysstderrwrite
max_framess    ?lib/python3.11/site-packages/holoviews/ipython/display_hooks.pymax_frame_warningr'   -   s<    J	0j 	0 	0 	0        c                 ^    t          j        |           }|r|S t          j        |            dS )z5Hook to process the object currently being displayed.N)r   process_elementr   info)objinvalid_optionss     r&   process_objectr.   5   s4    /44O..Sr(   c                 &   t          |           }|rt          t          |                     d S t          t          |           S t          j        }t          j        |         }|j        dk    r|                    d          } |j	        | fi |S )Npdfpng)fig)
r.   displayr   render_animr   current_backend	renderersr2   instance
components)r,   kwargsr+   backendrenderers        r&   renderr<   <   s    #D T

3#Gw'H |u$$$//8s--f---r(   c                 |   t          | t                    rt          |           n| } t          j        }t          j        |         }|                    |           } || fi |                    | |j                  }|j	        dk    r+|j
                            d          d         j        d         n|j	        }|||fS )zD
    Returns plot, renderer and format for single frame export.
    autoexistingr2   r   )
isinstancer	   r   r   r5   r6   plotting_classplot_optionssizer2   paramobjects)r,   r:   r;   plot_clsplotfmts         r&   single_frame_plotrI   O   s     $C77
@&+++SC#Gw'H&&s++H8CEE800hmDDEEDlf$$ >!!*--e4<Q??*2, 3r(   c                     t          |           \  }}}|                    d           d|                    ||          iS )z0Only display the first frame of an animated plotr   	text/html)rI   updatehtmlr,   rG   r;   rH   s       r&   first_framerO   _   s>    +C00D(CKKNNNtS1122r(   c                     t          |           \  }}}t          t          |          dz            }|                    |           d|                    ||          iS )zAOnly display the (approximately) middle frame of an animated plotr   rK   )rI   intlenrL   rM   )r,   rG   r;   rH   middle_frames        r&   rS   rS   e   sX    +C00D(Cs4yy1}%%LKKtS1122r(   c                     t          |           \  }}}|                    t          |                     d|                    ||          iS )z/Only display the last frame of an animated plotrK   )rI   rL   rR   rM   rN   s       r&   
last_framerU   l   sG    +C00D(CKKD		tS1122r(   c                 b    dt           _        t          j        | |          }dt           _        |S )NFstateT)r   _deep_indexabler   rX   )elementrX   optstates      r&   dynamic_optstater\   v   s,    !&J!'666H!%JOr(   c              #   r   K   t          |           }	 d V  d S # t          $ r t          | |            w xY w)NrW   )r\   	Exception)rZ   r[   s     r&   option_stater_   }   sV      ((H   1111s    6c                 <     t                      fd            }|S )z
    A decorator to wrap display hooks that return a MIME bundle or None.
    Additionally it handles adding output to the notebook archive, saves
    files specified with the output magic and handles tracebacks.
    c                 ,   t           j        i i fS 	 t          j        d         } 
| |          }|i i fS |\  }}t          d         |v r t          |          |d<   |t          d         = ddg}t          
fd|D                       sKt          t          j	                  t          ur+d|v r't          j	                            | |d                    t          j        d	         }|r0t           j        t           j                                     | |           ||fS # t          $ rA}|j        r,t           j                            t'          |                     i i fcY d }~S d }~wt(          $ r}d
                    t-          j        |j        |j        |j                            at7          |j        j        t'          |j                                      d
d                    }d}	d dj        dd|	i|ii fcY d }~S d }~wt>          $ r  w xY w)Nr%   r$   jsrK   png_displaysvg_displayc              3   L   K   | ]}j                             |          V  d S N)__name__endswith).0suffixfns     r&   	<genexpr>z0display_hook.<locals>.wrapped.<locals>.<genexpr>   s3      TTr{++F33TTTTTTr(   )rM   filename
z<br>)namemessagez=<i> [Call holoviews.ipython.show_traceback() for details]</i>z<b>{name}</b>{msg}<br>{message}msg ) r   r5   r   optionsr   r   anytypehvarchiver   addr6   saver   warnr!   r"   r#   strr   join	tracebackformat_exceptionetypevalueFULL_TRACEBACKdictrg   replaceformatr^   )rZ   r%   
mimebundle	mime_datamime_metadatadisabled_suffixesrm   er+   rq   rk   s             r&   wrappedzdisplay_hook.<locals>.wrapped   sk     (r6M!	'/=JG
;;;J!2v'1$I}$9,,);I)F)F	+&j./ "/ >TTTTBSTTTTT I
##;66;);S;SJNN7;1GNHHH%-j9H O 56;;GXNNNm++ 	 	 	v )
  Q(((r6MMMMMM# 	` 	` 	`!YYy'A!'BC'BC+(O (O P PN QW- #AG 4 4T& A AC C CDRC!I!B!I!Z!Zc!ZUY!Z!Z[]________ 	 	 		s6   $D C%D 
H(6E$H$H1BH>HHr   )rk   r   s   ` r&   display_hookr      s6     2YY& & & & Y&N Nr(   c                     t          |           }|rt          t          |                     d S t          j        }t          |           t          j        |         vrd S t          |           S rf   )r.   r3   r   r   r5   ru   registryr<   )rZ   r%   r+   r:   s       r&   element_displayr      sa    '""D T

t#GG}}EN7333t'??r(   c                     t          | t          t          f          sd S t          |           dk    rt          | t                    sd S t          |           |k    rt	          |           d S t          |           S )Nr   )r@   r   r   rR   r'   r<   )vmapr%   s     r&   map_displayr      sm    dWj122?44
4yyA~~jz::~t	TZ		*%%%t$<<r(   c                 l   t          | t                    r:t          |                               | j                            d                    } t          | t          t
          f          sd S t          t          |           d                   }||k    rt          |           d S t          |           S )NrG   r   )
r@   r	   r   optsgetr   rR   r   r'   r<   )layoutr%   nframess      r&   layout_displayr      s    &-(( >$$V[__V%<%<==fvx011>$$.((+,,G*%%%t&>>r(   c                     t          | t                    sd S t          t          |           d                   }||k    rt	          |           d S t          |           S )Nr   )r@   r   rR   r   r'   r<   )gridr%   r   s      r&   grid_displayr      sZ    dI&&3tt.&&q)**G*%%%t$<<r(   Fc                 6   t          j                    s$t          | t                    rt	          d          d}t          | t
                    r8t          |           5  t          |           }ddd           n# 1 swxY w Y   nWt          | t          t          f          r8t          |           5  t          |           }ddd           n# 1 swxY w Y   nt          | t          t          t          f          r7t          |           5  t          |           }ddd           n# 1 swxY w Y   nt          | t          t           f          r7t          |           5  t#          |           }ddd           n# 1 swxY w Y   nWt          | t$                    rt'          |           }n2t          | t(                    ri i f}n| }|                    dd          }|r|S t          |t,                    r|\  }}n|i }}t/          j        j        |f||d|S )z
    Renders any HoloViews object to HTML and displays it
    using the IPython display function. If raw is enabled
    the raw HTML is returned instead of displaying it directly.
    z^To use display on a HoloViews object ensure a backend is loaded using the holoviews extension.TNrawF)r   metadata)r   loaded_backendsr@   r   RuntimeErrorr   r_   r   r
   r   r   r   r   r	   r   r   r   r   r   r<   r   poptupleIPythonr3   )r,   
raw_outputr9   r   outputdatar   s          r&   r3   r3      s     "" )z#{'C'C ) ( ) ) 	) C#y!! '# 	' 	'!#&&F	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'	C*O<	=	= '# 	* 	*$S))F	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*	C&(M:	;	; '# 	) 	)#C((F	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)	C':.	/	/ 	'# 	& 	& %%F	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&	C		 '	C		 'bjj&& $	FE	"	" $hhh?"4NS8NNvNNNsH   A::A>A>2CCCD((D,/D,E;;E?E?c                     dt           j        vrd S t                      }|j        j        d         j        sd S t          | d          S )NrM   z
text/plainT)r   )r   display_formatsr   display_formatter
formatterspprintr3   )r,   ips     r&   pprint_displayr     sN    U***t 
B*<8? t34((((r(   c                    |t           j        vrdS t          |           }|rt          t	          |                     dS t           j        }t          |           t           j        |         vrdS t           j        |         }|	                    |           }||j
                            d          d         j        vrdS  |||          \  }}|d         |ii fS )zj
    Used to render elements to an image format (svg or png) if requested
    in the display formats.
    Nr?   r2   rH   	mime_type)r   r   r.   r3   r   r5   ru   r   r6   get_plotrD   rE   )rZ   r%   rH   r+   r:   r;   rG   r   s           r&   image_displayr   "  s    
 %'''t'""D T

#GG}}EN7333tw'HW%%D (.((44U;CCCt$C(((JD$t$b((r(   c                 &    t          | |d          S )zM
    Used to render elements to PNG if requested in the display formats.
    r1   r   r   rZ   r%   s     r&   rc   rc   <      
 *%8888r(   c                 &    t          | |d          S )zM
    Used to render elements to SVG if requested in the display formats.
    svgr   r   r   s     r&   rd   rd   D  r   r(   c                 6    | j                             |           S rf   )r;   r8   )rG   s    r&   plot_displayr   P  s    =##D)))r(   rf   )F)C__doc__r!   r}   
contextlibr   	functoolsr   r   r   IPython.displayr   	holoviewsrv   corer	   r
   r   r   r   r   r   r   r   r   core.ior   core.optionsr   r   r   r   core.traversalr   	core.utilr   plottingr   plotting.rendererr   util.settingsr   magicsr   r   r   ABBREVIATE_TRACEBACKSr'   r.   r<   rI   rO   rS   rU   r\   r_   r   r   r   r   r   r3   r   r   rc   rd   r4   r   rr   r(   r&   <module>r      sS    


     % % % % % %                                                     " ! ! ! ! ! S S S S S S S S S S S S + + + + + + * * * * * *       * * * * * * * * * * * * * * * * * * * *      . . .&   3 3 33 3 33 3 3      . . .b 
 
 
 
 
 
 
 
 
   &O &O &O &OR) ) )) ) )4 9 9 9 9 9 9 * * * * *r(   