
    G8cAG                        d Z ddlZddlZddlmZmZ ddlZddlZddlZddl	m
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mZmZmZmZ  ej6                  e      Zi d	d
dd
ddddddddddddddddddddd d!d"d#d$d%d&d'd(d)i d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPZdQ Z G dR dSej@                        Z! G dT dUej@                        Z" G dV dWejF                        Z$h dXZ% G dY dZejL                        Z' G d[ d\ejP                        Z)ejT                   G d] d^e             Z+y)_z8
Displays Agg images in the browser, with interactivity
    N)BytesIOStringIO)Path)Image)_apibackend_basesbackend_tools)backend_agg)_BackendKeyEventLocationEvent
MouseEventResizeEventAltaltAltGraphCapsLock	caps_lockControlcontrolMetametaNumLocknum_lock
ScrollLockscroll_lockShiftshiftSupersuperEnterenterTabtab	ArrowDowndown	ArrowLeftleft
ArrowRightrightArrowUpupEndendHomehomePageDownpagedownPageUppageup	Backspace	backspaceDeletedeleteInsertinsertEscapeescapePausepauseSelectselectDeaddeadF1f1F2f2F3f3F4f4F5f5F6f6F7f7F8f8f9f10f11f12)F9F10F11F12c                     | | j                  d      dz   d }d| v r t        |      dk(  r| j                  dd      } |t        v r	t        |   }| d| j                  d       |z   } | S )zHandle key valuesk   Nzshift+ )indexlenreplace_SPECIAL_KEYS_LUT)keyvalues     I/usr/lib/python3/dist-packages/matplotlib/backends/backend_webagg_core.py_handle_keyrf   G   so    		#"#$E3u:?++h+C!!!%(
osyy~

&CJ    c                   0     e Zd Z fdZd Zd Zd Z xZS )TimerTornadoc                 2    d | _         t        |   |i | y N)_timerr    __init__selfargskwargs	__class__s      re   rm   zTimerTornado.__init__T   s    $)&)rg   c                    dd l }| j                          | j                  rd|j                  j                  j                         }|j                  t        j                  | j                        | j                        | _        y |j                  j                  | j                  t        | j                  d            | _        | j                  j                          y )Nr   )millisecondsư>)tornado_timer_stop_singleioloopIOLoopinstanceadd_timeoutdatetime	timedeltainterval	_on_timerrl   PeriodicCallbackmaxstartro   rv   ry   s      re   _timer_startzTimerTornado._timer_startX   s    <<^^**335F ,,""> DK "..99DMM4(*DK KKrg   c                    dd l }| j                  y | j                  rG|j                  j                  j                         }|j                  | j                         d | _        y | j                  j                          d | _        y )Nr   )rv   rl   rx   ry   rz   r{   remove_timeoutstopr   s      re   rw   zTimerTornado._timer_stopg   se    ;;\\^^**335F!!$++.  KKrg   c                 ^    | j                   !| j                          | j                          y y rk   )rl   rw   r   ro   s    re   _timer_set_intervalz TimerTornado._timer_set_intervals   s)    ;;" #rg   )__name__
__module____qualname__rm   r   rw   r   __classcell__rr   s   @re   ri   ri   S   s    * 
 rg   ri   c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )TimerAsyncioc                 2    d | _         t        |   |i | y rk   )_taskr    rm   rn   s      re   rm   zTimerAsyncio.__init__{   s    
$)&)rg   c                    K   	 	 t        j                  |       d {    | j                          | j                  ry 	 =7 ## t         j                  $ r Y y w xY wwrk   )asynciosleepr   rx   CancelledError)ro   r   s     re   _timer_taskzTimerAsyncio._timer_task   sZ     mmH--- <<   -
 )) s7   AA A A AA AAAAc                     | j                          t        j                  | j                  t	        | j
                  dz  d                  | _        y )Ng     @@ru   )rw   r   ensure_futurer   r   r   r   r   s    re   r   zTimerAsyncio._timer_start   s>    **S!7>?

rg   c                 ^    | j                   | j                   j                          d | _         y rk   )r   cancelr   s    re   rw   zTimerAsyncio._timer_stop   s#    ::!JJ
rg   c                 ^    | j                   !| j                          | j                          y y rk   )r   rw   r   r   s    re   r   z TimerAsyncio._timer_set_interval   s)    ::! "rg   )	r   r   r   rm   r   r   rw   r   r   r   s   @re   r   r   z   s    *	

 rg   r   c                        e Zd Z ej                  d       ZeZdZ fdZ	d Z
 fdZddZd Zd Zd	 Zd
 Zd Zd Zd Zd Zd ZexZxZxZxZxZxZZd ZexZZd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z' xZ(S )FigureCanvasWebAggCorec                     t         S rk   )FigureManagerWebAggclss    re   <lambda>zFigureCanvasWebAggCore.<lambda>   s    3F rg   Fc                     t        |   |i | d| _        d| _        t	        j
                  d      | _        d| _        d| _        y )NT)r   r   full)NN)	r    rm   _png_is_old_force_fullnpempty
_last_buff_current_image_mode_last_mouse_xyrn   s      re   rm   zFigureCanvasWebAggCore.__init__   sK    $)&)    ((6*
 $* *rg   c                     ddl m}  |        y )Nr   )show)matplotlib.pyplotr   )ro   r   s     re   r   zFigureCanvasWebAggCore.show   s
    *rg   c                     d| _         	 t        | 	          | j                  j	                          y # | j                  j	                          w xY wNT)r   r    drawmanagerrefresh_allro   rr   s    re   r   zFigureCanvasWebAggCore.draw   s:    	'GLNLL$$&DLL$$&s	   3 Ac                 F    d| _         | j                  j                          y r   )r   r   r   )ro   bboxs     re   blitzFigureCanvasWebAggCore.blit   s      "rg   c                 &    | j                  d       y )Nr   )
send_eventr   s    re   	draw_idlez FigureCanvasWebAggCore.draw_idle   s    rg   c                    t        j                  t        j                  j                  dt        j                  j
                  dt        j                  j                  dt        j                  j                  dt        j                  j                  dt        j                  j                  dt        j                  j                  di|      }| j                  d	|       y )
Npointerdefault	crosshairmovewaitz	ew-resizez	ns-resize)cursorr   )r   check_getitemr	   CursorsHANDPOINTERSELECT_REGIONMOVEWAITRESIZE_HORIZONTALRESIZE_VERTICALr   )ro   r   s     re   
set_cursorz!FigureCanvasWebAggCore.set_cursor   s    ##!!&&	!!))9!!//!!&&!!&&!!33[!!11;%
  	0rg   c                     t        j                  ddg|       | j                  |k7  r|| _        | j                  d       yy)aI  
        Set the image mode for any subsequent images which will be sent
        to the clients. The modes may currently be either 'full' or 'diff'.

        Note: diff images may not contain transparency, therefore upon
        draw this mode may be changed if the resulting image has any
        transparent component.
        r   diffmodeN)r   check_in_listr   handle_send_image_mode)ro   r   s     re   set_image_modez%FigureCanvasWebAggCore.set_image_mode   sB     	FF+$7##t+'+D$''- ,rg   c                 |   | j                   r| j                         }t        j                  |j	                               }|j                  t        j                        j                  d      }| j                  s@|j                  | j                  j                  k7  s|d d d d df   dk7  j                         r| j                  d       |}n7| j                  d       || j                  k7  }t        j                  ||d      }|j                         | _
        d| _        d| _         |j                  t        j                        j!                  g |j                  d	      }t#               5 }t%        j&                  |      j)                  |d
       |j+                         cd d d        S y # 1 sw Y   y xY w)N         r   r   r   F)dtype   png)format)r   get_rendererr   asarraybuffer_rgbaviewuint32squeezer   shaper   anyr   wherecopyuint8reshaper   r   	fromarraysavegetvalue)ro   rendererpixelsbuffoutputr   datar   s           re   get_diff_imagez%FigureCanvasWebAggCore.get_diff_image   sd   ((*HZZ 4 4 67F ;;ryy)11!4D  zzT__%:%:: q!Qw3.335##F+##F+t.$a0 #iikDO$D$D;;RXX;.667I7Iq7IJD &c%**3u*=||~& &9 8& &s   16F22F;c                 h    |d   }t        | dj                  |      | j                        } ||      S )Ntypez
handle_{0})getattrr   handle_unknown_event)ro   evente_typehandlers       re   handle_eventz#FigureCanvasWebAggCore.handle_event  s7    v$ 3 3F ;335u~rg   c                 T    t         j                  dj                  |d   |             y )NzUnhandled message type {0}. {1}r   )_logwarningr   ro   r   s     re   r   z+FigureCanvasWebAggCore.handle_unknown_event  s%    6==6]E+ 	,rg   c                      y rk    r   s     re   
handle_ackz!FigureCanvasWebAggCore.handle_ack  s     	rg   c                 $    | j                          y rk   )r   r   s     re   handle_drawz"FigureCanvasWebAggCore.handle_draw  s    		rg   c           	      $   |d   }|d   }| j                         j                  |z
  }||f| _        |d   dz   }|d   }|j                  d      }|dv r#t	        |dz   | ||||	      j                          y |d
k(  r!t	        d| |||d|      j                          y |dk(  r#t	        d| |||d   |      j                          y |dk(  r"t	        |dz   | |||	      j                          y |dv r"t        |dz   | |||	      j                          y y )Nxybuttonr]   r   guiEvent)button_pressbutton_release_event)r  dblclickbutton_press_eventT)r  r  scrollscroll_eventstep)r  r  motion_notify)figure_enterfigure_leave)r   heightr   getr   _processr   )ro   r   r  r  r  r   r  s          re   _handle_mousez$FigureCanvasWebAggCore._handle_mouse  s+   #J#J&&*dx1$v99Z(77v($1f (**2(*z!+T1a$ (**2(*x~tQf (**2(*&v($1 (**2(*77&8+T1a#+--5XZ 8rg   c                     t        |d   dz   | t        |d         g| j                  d|j                  d      ij	                          y )Nr   r  rc   r  )r   rf   r   r  r  r   s     re   rf   z"FigureCanvasWebAggCore._handle_key9  sI    v)4U5\*	1-1-@-@	1))J/	119rg   c                 @     t        | j                  |d                 y )Nname)r   toolbarr   s     re   handle_toolbar_buttonz,FigureCanvasWebAggCore.handle_toolbar_button?  s    ,eFm,.rg   c                 &   | j                   j                         }|s%dj                  | j                  j                        }| j                  d|       d| _        | j                  r| j                  j                          | j                          y )Nz
Figure {0}figure_labellabelT)
figure	get_labelr   r   numr   r   r  set_history_buttonsr   )ro   r   r  s      re   handle_refreshz%FigureCanvasWebAggCore.handle_refreshC  sl    {{,,.'..t||/?/?@Ll;<< LL,,.rg   c                    t        |j                  dd            | j                  z  }t        |j                  dd            | j                  z  }| j                  }|j	                  ||j
                  z  ||j
                  z  d       d| _         | j                  j                  |j                  j                  ddi t        d|       j                          | j                          y )	Nwidthi   r  F)forwardTr(  resize_event)intr  device_pixel_ratior!  set_size_inchesdpir   r   resizer   sizer   r  r   )ro   r   r  r  figs        re   handle_resizez$FigureCanvasWebAggCore.handle_resizeO  s    		'3'(4+B+BB		(C()D,C,CCkkAKSWWeD  SXX]]:E:ND)224rg   c                 >    | j                  d| j                         y )N
image_moder   )r   r   r   s     re   r   z-FigureCanvasWebAggCore.handle_send_image_mode]  s    4+C+CDrg   c                 F    | j                  |j                  dd             y )Nr+  r]   _handle_set_device_pixel_ratior  r   s     re   handle_set_device_pixel_ratioz4FigureCanvasWebAggCore.handle_set_device_pixel_ratioa  s    ++EII6JA,NOrg   c                 F    | j                  |j                  dd             y )N	dpi_ratior]   r5  r   s     re   handle_set_dpi_ratioz+FigureCanvasWebAggCore.handle_set_dpi_ratiod  s    ++EIIk1,EFrg   c                 V    | j                  |      rd| _        | j                          y y r   )_set_device_pixel_ratior   r   )ro   r+  s     re   r6  z5FigureCanvasWebAggCore._handle_set_device_pixel_ratioh  s(    ''(:;#DNN <rg   c                 X    | j                   r | j                   j                  |fi | y y rk   )r   _send_event)ro   
event_typerq   s      re   r   z!FigureCanvasWebAggCore.send_eventm  s'    <<$DLL$$Z:6: rg   rk   ))r   r   r   r   classpropertymanager_classr   
_timer_clssupports_blitrm   r   r   r   r   r   r   r   r   r   r  r  r  handle_button_presshandle_button_releasehandle_dblclickhandle_figure_enterhandle_figure_leavehandle_motion_notifyhandle_scrollrf   handle_key_presshandle_key_releaser  r%  r1  r   r7  r:  r6  r   r   r   s   @re   r   r      s    &D&&'FGMJ M+$
'# 1.&B,86 && &/ &/ &&1&4H< -87)/
EPG
;rg   r   >   Npanbackr0   zoomr(  downloadc                      e Zd Zg ej                  j
                  dD  cg c]  \  }}}}|t        v r||||f c}}}}}} Z ej                  d      Z	fdZ
d Zd Zd Zd ZfdZfd	Zd
 ZxZS c c}}}}}} w )NavigationToolbar2WebAgg)DownloadzDownload plotfilesaverP  z3.5c                 @    d| _         d | _        t        |   |       y )Nr^   )message_cursorr    rm   )ro   canvasrr   s     re   rm   z!NavigationToolbar2WebAgg.__init__  s     rg   c                 j    || j                   k7  r| j                  j                  d|       || _         y )NrV  )rV  )rV  rX  r   )ro   rV  s     re   set_messagez$NavigationToolbar2WebAgg.set_message  s,    dll"KK""9g">rg   c                 D    | j                   j                  d||||       y )N
rubberbandx0y0x1y1rX  r   )ro   r   r^  r_  r`  ra  s         re   draw_rubberbandz(NavigationToolbar2WebAgg.draw_rubberband      |rbRHrg   c                 D    | j                   j                  ddddd       y )Nr\  r]  rb  r   s    re   remove_rubberbandz*NavigationToolbar2WebAgg.remove_rubberband  rd  rg   c                 :    | j                   j                  d       y)zSave the current figurer   Nrb  )ro   rp   s     re   save_figurez$NavigationToolbar2WebAgg.save_figure  s    v&rg   c                     t         |           | j                  j                  d| j                  j
                         y Nnavigate_moder   )r    rM  rX  r   r   r  r   s    re   rM  zNavigationToolbar2WebAgg.pan  s+    TYY^^Drg   c                     t         |           | j                  j                  d| j                  j
                         y rk  )r    rO  rX  r   r   r  r   s    re   rO  zNavigationToolbar2WebAgg.zoom  s+    TYY^^Drg   c                     | j                   j                  dkD  }| j                   j                  t        | j                   j                        dz
  k  }| j                  j                  d||       y )Nr   r]   history_buttons)BackForward)
_nav_stack_posr`   	_elementsrX  r   )ro   can_backwardcan_forwards      re   r$  z,NavigationToolbar2WebAgg.set_history_buttons  s^    ++a/oo**S1J1J-Ka-OO0$0+ 	 	Grg   )r   r   r   r   NavigationToolbar2	toolitems_ALLOWED_TOOL_ITEMSr   deprecate_privatize_attributer   rm   rZ  rc  rg  ri  rM  rO  r$  r   ).0texttooltip_text
image_filename_of_methodry  rr   s   000000@re   rR  rR  }  s    C]--77 CAC :D,
N 00	 
|Z8I 0T//6F!

II'EEGMs   A>rR  c                   z     e Zd ZdZeZ fdZd ZddZd Z	d Z
d Zd Zd	 Zedd
       Zed        Zd Z xZS )r   Nc                 D    t               | _        t        |   ||       y rk   )setweb_socketsr    rm   )ro   rX  r#  rr   s      re   rm   zFigureManagerWebAgg.__init__  s    5%rg   c                      y rk   r   r   s    re   r   zFigureManagerWebAgg.show  s    rg   c                     | j                  d|| j                  j                  z  || j                  j                  z  f|       y )Nr.  )r/  r(  )r>  rX  r+  )ro   whr(  s       re   r.  zFigureManagerWebAgg.resize  sD    dkk444dkk4446	 	 	rg   c                 *    | j                  d|       y )Nr  r  )r>  )ro   titles     re   set_window_titlez$FigureManagerWebAgg.set_window_title  s    u5rg   c                    t        |d      sJ t        |d      sJ | j                  j                  |        | j                  | j                  j
                  j                  j                    | j                  d       y )Nsend_binary	send_jsonrefresh)	hasattrr  addr.  rX  r!  r   r/  r>  ro   
web_sockets     re   add_web_socketz"FigureManagerWebAgg.add_web_socket  sh    z=111z;///Z(T[['',,112#rg   c                 :    | j                   j                  |       y rk   )r  remover  s     re   remove_web_socketz%FigureManagerWebAgg.remove_web_socket  s    
+rg   c                 :    | j                   j                  |       y rk   )rX  r   )ro   contents     re   handle_jsonzFigureManagerWebAgg.handle_json  s      )rg   c                     | j                   r@| j                  j                         }|#| j                   D ]  }|j                  |        y y y rk   )r  rX  r   r  )ro   r   ss      re   r   zFigureManagerWebAgg.refresh_all  sN    ;;--/D)) (AMM$'(   rg   c                 >   |t               }n|}|j                  t        t              j                  dz  j                  d             g }| j                  j                  D ]2  \  }}}}||j                  g d       |j                  ||||g       4 |j                  dj                  t        j                  |                   g }t        t        j                         j                               D ]  \  }	}
|j                  |
d           |j                  dj                  t        j                  |                   |j                  dj                  t        j                  t        j!                                            ||j#                         S y )	Nzweb_backend/js/mpl.jszutf-8)encoding)r^   r^   r^   r^   zmpl.toolbar_items = {0};

r   zmpl.extensions = {0};

zmpl.default_extension = {0};)r   writer   __file__parent	read_text
ToolbarClsrx  appendr   jsondumpssortedr   get_supported_filetypes_groupeditemsget_default_filetyper   )r   streamr   rx  r  tooltipimagemethod
extensionsfiletypeexts              re   get_javascriptz"FigureManagerWebAgg.get_javascript  sv   >ZFFd8n++.EEii1	3 	,/NN,D,D 	A(D'5&|  !12  $!?@		A
 	3::JJy!# 	$ 
#$:$C$C$E$)EG- 	&MHc c!f%	& 	077JJz"$ 	% 	3::JJ-BBDEG 	H >??$$ rg   c                     t         j                  j                  t         j                  j                  t              d      S )Nweb_backend)ospathjoindirnamer  r   s    re   get_static_file_pathz(FigureManagerWebAgg.get_static_file_path  s$    ww||BGGOOH5}EErg   c                 T    d|i|}| j                   D ]  }|j                  |        y )Nr   )r  r  )ro   r?  rq   payloadr  s        re   r>  zFigureManagerWebAgg._send_event  s2    :00!! 	!AKK 	!rg   )Trk   )r   r   r   _toolbar2_classrR  r  rm   r   r.  r  r  r  r  r   classmethodr  r  r>  r   r   s   @re   r   r     se    O)J&6
$,*( % %@ F F!rg   r   c                       e Zd ZeZeZy)_BackendWebAggCoreAggN)r   r   r   r   FigureCanvasr   FigureManagerr   rg   re   r  r    s    )L'Mrg   r  ),__doc__r   r}   ior   r   r  loggingr  pathlibr   numpyr   PILr   
matplotlibr   r   r	   matplotlib.backendsr
   matplotlib.backend_basesr   r   r   r   r   	getLoggerr   r   rb   rf   	TimerBaseri   r   FigureCanvasAggr   ry  rw  rR  FigureManagerBaser   exportr  r   rg   re   <module>r     s         	    9 9 +@ @ w"%#UE %#%#%# 	%# V	%#
 
%# "=%# g%# g%# g%# E%# !&%# !&%# "7%# %# E%#  V!%#"  #%#$ x%%#& !+'%#( x)%#* x+%#, x-%#. g/%#0 x1%#2 V3%#4 45%#6 47%#8 49%#: 4;%#< 4=%#> 4?%#@ 4A%#B 4C%#D  !!!K%# P	$ =** $ N  =**   FR;[88 R;j -G}?? -G`T!-99 T!n 
(H ( (rg   