
    P/Ph@                     d   d Z ddlmZ ddlZddlZddlZddl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 ddlmZmZmZ d	d
lmZmZmZ d	dlmZmZ d ZddddddddZ G d de          Z G d de          Z G d de          Z G d d          Z ej!         G d de                      Z"dS )z,Interactive figures in the IPython notebook.    )	b64encodeN)Comm)display
JavascriptHTML)is_interactiveGcf)_Backend
CloseEventNavigationToolbar2   )FigureCanvasWebAggCoreFigureManagerWebAggNavigationToolbar2WebAgg)TimerTornadoTimerAsyncioc                      d t          j                    D             } t                      s/|                     dt	          t           j                              d                    |           S )z
    Return a string showing the figure and connection status for the backend.

    This is intended as a diagnostic tool, and not for general use.
    c                     g | ]D}d                      |j        j                                        p	d|j         |j                  ES )z{fig} - {socket}zFigure )figsocket)formatcanvasfigure	get_labelnumweb_sockets).0managers     a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/matplotlib/backends/backend_nbagg.py
<listcomp>z#connection_info.<locals>.<listcomp>   sk       
 	 	!!&0022 ,+gk++& 	" 	( 	(      zFigures pending show: 
)r
   get_all_fig_managersr   appendlenfigsjoin)results    r    connection_infor*      sq     
 /11  F  @>s38}}>>???99Vr"   z
fa fa-homezfa fa-arrow-leftzfa fa-arrow-rightzfa fa-square-ozfa fa-arrowszfa fa-floppy-o)homebackforwardzoom_to_rectmovedownloadNc                   6    e Zd Zd ej        dz   D             ZdS )NavigationIPyc                 L    g | ]!\  }}}}|t           v ||t           |         |f"S  )_FONT_AWESOME_CLASSES)r   texttooltip_text
image_filename_of_methods        r    r!   zNavigationIPy.<listcomp>8   sL     9 9 9CT<^ "777 '
3^E
 877r"   ))DownloadzDownload plotr0   r0   N)__name__
__module____qualname__r   	toolitemsr4   r"   r    r2   r2   5   s:        9 9 (1MN9 9 9IIIr"   r2   c                        e Zd ZexZZ fdZed             Zd Z	d Z
d Zed             Zed fd	            Zd	 Zd
 Zd Zd Z xZS )FigureManagerNbAggc                 Z    d| _         t                                          ||           d S )NF)_shownsuper__init__)selfr   r   	__class__s      r    rD   zFigureManagerNbAgg.__init__C   s*    %%%%%r"   c                      ||           | |          t                      r(                                                                  fd}                    d|          S )Nc                 Z                                    t          j                   d S N)mpl_disconnectr
   destroy)eventr   cidr   s    r    rK   z6FigureManagerNbAgg.create_with_canvas.<locals>.destroyO   s-    !!#&&&K     r"   close_event)r   show	draw_idlempl_connect)clscanvas_classr   r   rK   r   rM   r   s        @@@r    create_with_canvasz%FigureManagerNbAgg.create_with_canvasG   s    f%%#fc"" 	LLNNN	! 	! 	! 	! 	! 	! 	!   88r"   c                 l    t          t          t                                                               d S rI   )r   r   r@   get_javascriptrE   s    r    
display_jszFigureManagerNbAgg.display_jsV   s-     	
-<<>>??@@@@@r"   c                 p   | j         s)|                                  |                                  n| j                                         d| _         t          | d          r| j                            | j                   t                      s(ddl	m
} |j                            | j        d            d S d S )NT_cidgcfr   r	   )rB   rX   _create_commr   rP   hasattrrJ   rZ   r   matplotlib._pylab_helpersr
   r'   popr   )rE   r
   s     r    rO   zFigureManagerNbAgg.show\   s    { 	$OOK!!###
 4## 	5K&&t|444 	)555555HLL4(((((	) 	)r"   c                 <    d| _         |                                  dS )zJ
        A special method to re-show the figure in the notebook.

        FN)rB   rO   rW   s    r    reshowzFigureManagerNbAgg.reshowm   s    
 		r"   c                 *    t          | j                  S rI   )boolr   rW   s    r    	connectedzFigureManagerNbAgg.connectedu   s    D$%%%r"   Nc                 8   |t          j                    }n|}t                                          |           |                    t          j        t                    j        dz  	                    d                     ||
                                S d S )N)streamzweb_backend/js/nbagg_mpl.jszutf-8)encoding)ioStringIOrC   rV   writepathlibPath__file__parent	read_textgetvalue)rR   re   outputrF   s      r    rV   z!FigureManagerNbAgg.get_javascripty   s    >[]]FFFf---gl8,,356ii11	3 	3 	3 >??$$$ >r"   c                 N    t          |           }|                     |           |S rI   )
CommSocketadd_web_socketrE   comms     r    r[   zFigureManagerNbAgg._create_comm   s(    $D!!!r"   c                     |                      d           t          | j                  D ]}|                                 |                                  d S )Nclose)_send_eventlistr   on_closeclearup_closedrt   s     r    rK   zFigureManagerNbAgg.destroy   sW    !!!)** 	 	DMMOOOOr"   c                     d | j         D             | _         t          | j                   dk    r)t          d| j                                                   dS dS )zClear up any closed Comms.c                 :    h | ]}|                                 |S r4   )is_open)r   r   s     r    	<setcomp>z4FigureManagerNbAgg.clearup_closed.<locals>.<setcomp>   s6     1 1 1v%~~//1F 1 1 1r"   r   rN   N)r   r&   r   r   _processrW   s    r    r{   z!FigureManagerNbAgg.clearup_closed   si    1 11A 1 1 1 t  A%%}dk22;;===== &%r"   c                 8    fd| j         D             | _         d S )Nc                 4    h | ]}|j         j        k    |S r4   )ru   comm_id)r   r   r   s     r    r   z1FigureManagerNbAgg.remove_comm.<locals>.<setcomp>   s2     ? ? ?v%{2g== #===r"   )r   )rE   r   s    `r    remove_commzFigureManagerNbAgg.remove_comm   s6    ? ? ? ?1A ? ? ?r"   rI   )r;   r<   r=   r2   _toolbar2_class
ToolbarClsrD   classmethodrT   rX   rO   r`   propertyrc   rV   r[   rK   r{   r   __classcell__)rF   s   @r    r@   r@   @   s       #00Oj& & & & &   [A A A) ) )"   & & X& 
% 
% 
% 
% 
% [
%  
  > > >? ? ? ? ? ? ?r"   r@   c                       e Zd ZeZdS )FigureCanvasNbAggN)r;   r<   r=   r@   manager_classr4   r"   r    r   r      s        &MMMr"   r   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	rr   aL  
    Manages the Comm connection between IPython and the browser (client).

    Comms are 2 way, with the CommSocket being able to publish a message
    via the send_json method, and handle a message with on_message. On the
    JS side figure.send_message and figure.ws.onmessage do the sending and
    receiving respectively.

    c                     d  _          _        t          t          j                               _        t          t          d j        z                       	 t          dd j        i           _        n"# t          $ r}t          d          |d }~ww xY w j                             j                    j        d _         fd} j                            |           d S )Nz<div id=%r></div>
matplotlibid)datazTUnable to create an IPython notebook Comm instance. Are you in the IPython notebook?Fc                     d_                             | d         d                                                     d S )NTcontentr   )
_ext_closer   r{   )close_messager   rE   s    r    	_on_closez&CommSocket.__init__.<locals>._on_close   s@    "DOi 8 CDDD""$$$$$r"   )supports_binaryr   struuiduuid4r   r   r   ru   AttributeErrorRuntimeErroron_msg
on_messager   rz   )rE   r   errr   s   ``  r    rD   zCommSocket.__init__   s   #
%%	 	(49455666	5\ty0ABBBDII 	5 	5 	5  + , ,145	5 		))),	% 	% 	% 	% 	% 	%
 		9%%%%%s   A9 9
BBBc                 *    | j         p| j        j         S rI   )r   ru   _closedrW   s    r    r~   zCommSocket.is_open   s    O8ty'899r"   c                     |                                  r-	 | j                                         d S # t          $ r Y d S w xY wd S rI   )r~   ru   rw   KeyErrorrW   s    r    rz   zCommSocket.on_close   s]     <<>> 		!!!!!   	 	s   1 
??c                 b    | j                             dt          j        |          i           d S )Nr   )ru   sendjsondumps)rE   r   s     r    	send_jsonzCommSocket.send_json   s+    	
7 3 3455555r"   c                     | j         r!| j                            ddi|g           d S t          |                              d          }d| }| j                            d|i           d S )Nblobz	image/png)buffersasciizdata:image/png;base64,r   )r   ru   r   r   decode)rE   r   r   data_uris       r    send_binaryzCommSocket.send_binary   sy     	/INNFK04&NAAAAA T??))'22D666HINNFH-.....r"   c                 &   t          j        |d         d                   }|d         dk    r/|                                  | j                                         d S |d         dk    r|d         | _        d S | j                            |           d S )Nr   r   typeclosingr   value)r   loadsrz   r   r{   r   handle_json)rE   messages     r    r   zCommSocket.on_message   s     *WY/7886?i''MMOOOL'')))))V_ 111#*7#3D   L$$W-----r"   N)
r;   r<   r=   __doc__rD   r~   rz   r   r   r   r4   r"   r    rr   rr      sx         & & &2: : :  6 6 6/ / /. . . . .r"   rr   c                       e Zd ZeZeZdS )_BackendNbAggN)r;   r<   r=   r   FigureCanvasr@   FigureManagerr4   r"   r    r   r      s        $L&MMMr"   r   )#r   base64r   rg   r   rj   r   ipykernel.commr   IPython.displayr   r   r   r   r   r]   r
   matplotlib.backend_basesr   r   r   backend_webagg_corer   r   r   r   r   r*   r5   r2   r@   r   rr   exportr   r4   r"   r    <module>r      sI   2 2
       				          5 5 5 5 5 5 5 5 5 5 % % % % % % ) ) ) ) ) ) M M M M M M M M M MK K K K K K K K K K                 & "$ 
  9 9 9 9 9, 9 9 9\? \? \? \? \?, \? \? \?~' ' ' ' '. ' ' 'J. J. J. J. J. J. J. J.Z 
' ' ' ' 'H ' ' ' ' 'r"   