
    Ng                     6   d dl Z d dl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	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Zd dlmZmZ d dlZd dlmZmZmZ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) d dl*m+Z+ dd	l,m-Z- dd
l-m.Z.m/Z/  ej0        e1          Z2e#j3        de#j4        de#j5        de#j6        de#j7        de#j8        de#j9        diZ:ed             Z;i Z<d e j=                    j>        z   Z?d Z@d+dZA G d de!          ZB G d de          ZC G d de          ZD G d de ejE                  ZFd ZG ejH        eC           G d d ejI                              ZJ G d! d"e"ejE                  ZK ejH        eC           G d# d$ejL                              ZM ejH        eC           G d% d&ejN                              ZO ejH        eC           G d' d(ejP                              ZQeKZReFeD_S        eKeD_T        ejU         G d) d*e                      ZVdS ),    N)contextmanager)SimpleDialog)ImageImageTk)_apibackend_toolscbook_c_internal_utils)_BackendFigureCanvasBaseFigureManagerBaseNavigationToolbar2	TimerBaseToolContainerBasecursors_Mode
CloseEventKeyEventLocationEvent
MouseEventResizeEvent)Gcf   )_tkagg)TK_PHOTO_COMPOSITE_OVERLAYTK_PHOTO_COMPOSITE_SETfleurhand2arrow	crosshairwatchsb_h_double_arrowsb_v_double_arrowc               #      K   t          j                    } 	 d V  | r(t          j        d         rt          j        |            d S d S d S # | r't          j        d         rt          j        |            w w w xY w)Nztk.window_focus)r
   Win32_GetForegroundWindowmplrcParamsWin32_SetForegroundWindow)
foregrounds    [/var/www/html/ai-engine/env/lib/python3.11/site-packages/matplotlib/backends/_backend_tk.py!_restore_foreground_window_at_endr+   )   s      "<>>JD 	D#,'89 	D7
CCCCC	D 	D 	D 	D: 	D#,'89 	D7
CCCC	D 	Ds   A	 	,A5	mpl_blit_c                     t                               |           \  }}}}}|j                            dd|          sdS t	          j        |j                                        t          |          ||||           dS )z
    Thin wrapper to blit called via tkapp.call.

    *argsid* is a unique string identifier to fetch the correct arguments from
    the ``_blit_args`` dict, since arguments cannot be passed directly.
    infocommandsN)
_blit_argspoptkcallr   blit
interpaddrstr)argsid
photoimagedataoffsetsbbox	comp_rules         r*   _blitr=   8   s     2<1G1G.JgtY=fj*== 
K
((**C
OOT9g        c                 v   t          j        |          }|j        dd         \  }}||                                \  \  }}\  }	}
t	          t          j        |          d          }t          t          j        |	          |          }	t	          t          j        |          d          }t          t          j        |
          |          }
||	k    s||
k    rdS ||	||
f}t          }nd|d|f}t          }| ||||f}t          t          |                    }|t          |<   	 | j                            t           |           dS # t          j        $ rb}dt          |          vr | j                            t           t&                     | j                            t           |           Y d}~dS d}~ww xY w)a  
    Blit *aggimage* to *photoimage*.

    *offsets* is a tuple describing how to fill the ``offset`` field of the
    ``Tk_PhotoImageBlock`` struct: it should be (0, 1, 2, 3) for RGBA8888 data,
    (2, 1, 0, 3) for little-endian ARBG32 (i.e. GBRA8888) data and (1, 2, 3, 0)
    for big-endian ARGB32 (i.e. ARGB8888) data.

    If *bbox* is passed, it defines the region that gets blitted. That region
    will be composed with the previous data according to the alpha channel.
    Blitting will be clipped to pixels inside the canvas, including silently
    doing nothing if the *bbox* region is entirely outside the canvas.

    Tcl events must be dispatched to trigger a blit from a non-Tcl thread.
    N   r   zinvalid command name)npasarrayshape	__array__maxmathfloorminceilr   r   r6   idr0   r2   r3   _blit_tcl_nameTclErrorcreatecommandr=   )r8   aggimager:   r;   r9   heightwidthx1y1x2y2bboxptrr<   argsr7   es                   r*   r4   r4   F   s     :hDJrrNMFE!^^--R(2rB##2&&B##2''GGbFr2r".		eQ'*	 tWgy8D D]]FJv3>622222; 3 3 3!Q//##NE:::>6222222222	3s   % E F8AF33F8c                   8     e Zd ZdZ fdZd Zd Z fdZ xZS )TimerTkz<Subclass of `backend_bases.TimerBase` using Tk timer events.c                 V    d | _          t                      j        |i | || _        d S N)_timersuper__init__parent)selfr_   rV   kwargs	__class__s       r*   r^   zTimerTk.__init__   s1    $)&)))r>   c                     |                                   | j                            | j        | j                  | _        d S r[   )_timer_stopr_   after	_interval	_on_timerr\   r`   s    r*   _timer_startzTimerTk._timer_start   s5    k''GGr>   c                 `    | j         | j                            | j                    d | _         d S r[   )r\   r_   after_cancelrh   s    r*   rd   zTimerTk._timer_stop   s-    ;"K$$T[111r>   c                 *    t                                                        j        sb j        r[ j        dk    r, j                             j         j                   _        d S  j                             fd           _        d S d  _        d S )Nr   c                  N     j                              j         j                  S r[   )r_   re   rf   rg   rh   s   r*   <lambda>z#TimerTk._on_timer.<locals>.<lambda>   s    DK--dndnMM r>   )r]   rg   _singler\   rf   r_   re   
after_idle)r`   rb   s   `r*   rg   zTimerTk._on_timer   s    
 | 	 	~!!"k//OO #k44MMMM  DKKKr>   )	__name__
__module____qualname____doc__r^   ri   rd   rg   __classcell__rb   s   @r*   rY   rY   |   sx        FF    
H H H  
        r>   rY   c                        e Zd ZdZ ej        d           Zd fd	ZddZd Z	d Z
d Zd	 Zd
 Zd Zd Zd dZd Zd Zd Zd Zeddd            Zd Zd Zd Zd Zd Zd!dZd Zd Z xZS )"FigureCanvasTkr2   c                     t           S r[   )FigureManagerTk)clss    r*   rn   zFigureCanvasTk.<lambda>   s    ? r>   Nc                   	
 t                                          |           d | _        d | _        |                     d          \  }}t          j        |d||dd          | _        t          j        | j        ||          | _	        | j        
                    |dz  |dz  | j	                  | _        | j                            d	| j                   t          j        d
k    r | j                            d| j                   | j                            d| j                   | j                            d| j                   | j                            d| j                   | j                            d| j                   | j                            d| j                   dD ]"}| j                            || j                   #dD ]"}| j                            || j                   #dD ]"}| j                            || j                   #dD ]"}| j                            || j                   #| j                                        }t7          j        |           t7          j        |          
fd}|                    d|d          
	fd}|                    d|d          	| j                                         d | _        d | _        d S )NTphysicalwhiter   )master
backgroundrP   rO   borderwidthhighlightthickness)r   rP   rO   r@   imagez<Configure>win32z<Map>z<Key>z<Motion><Enter><Leave>z<KeyRelease>)z
<Button-1>z
<Button-2>z
<Button-3>)z<Double-Button-1>z<Double-Button-2>z<Double-Button-3>)z<ButtonRelease-1>z<ButtonRelease-2>z<ButtonRelease-3>)z
<Button-4>z
<Button-5>c                                  }|$             }||                     d           d S |                    |           S )N<MouseWheel>)unbindscroll_event_windows)eventr`   rootscroll_event_windows_idweakrootweakselfs      r*   r   z5FigureCanvasTk.__init__.<locals>.scroll_event_windows   sR    8::D|xzz#KK0GHHH,,U333r>   r   +c                                  }|$             }||                     d           d S | j        |j        u r$t          d|                                           d S d S )N	<Destroy>close_event)r   widget	_tkcanvasr   _process)r   r`   r   filter_destroy_idr   r   s      r*   filter_destroyz/FigureCanvasTk.__init__.<locals>.filter_destroy   sw    8::D|xzz#KK->???|t~--=$//88::::: .-r>   r   ) r]   r^   _idle_draw_id_event_loop_idget_width_heightr2   Canvasr   
PhotoImage_tkphotocreate_image_tkcanvas_image_regionbindresizesysplatform_update_device_pixel_ratio	key_pressmotion_notify_evententer_notify_eventleave_notify_eventkey_releasebutton_press_eventbutton_dblclick_eventbutton_release_eventscroll_eventwinfo_toplevelweakrefref	focus_set_rubberband_rect_black_rubberband_rect_white)r`   figurer   whnamer   r   r   r   r   r   r   rb   s            @@@@r*   r^   zFigureCanvasTk.__init__   s%      !"$$d$331gA1D D D >16 6 6&*n&A&AqD!Q$dm 'B '- '-#M4;777<7""N)HIIIGT^444J(@AAAIt'>???It'>???ND,<===> 	? 	?DNd&=>>>>O 	B 	BDNd&@AAAAO 	A 	ADNd&?@@@@ / 	9 	9DNd&78888
 ~,,.. ;t$$;t$$	4 	4 	4 	4 	4 	4 	4 #'))N<PRU"V"V	; 	; 	; 	; 	; 	; 	; !IIk>3GG  """&*#&*###r>   c                     t          | j        j                            dd          dz  d          }|                     |          r7|                     d          \  }}| j                            ||           d S d S )Nr2   scalinggUUUUUU?r@   Tr}   rP   rO   )roundr   r2   r3   _set_device_pixel_ratior   	configure)r`   r   ratior   r   s        r*   r   z)FigureCanvasTk._update_device_pixel_ratio   s     dn',,T9==I1MM''.. 	8 (($(77DAqN$$1Q$77777	8 	8r>   c                 ,   |j         |j        }}| j        j        }||z  }||z  }| j                            ||d           | j                            | j                   | j        	                    t          |          t          |                     | j                            t          |dz            t          |dz            | j                  | _        t          d|                                            |                                  d S )NF)forwardr   r@   r   resize_event)rP   rO   r   dpiset_size_inchesr   deleter   r   r   intr   r   r   	draw_idle)r`   r   rP   rO   dpivalwinchhinchs          r*   r   zFigureCanvasTk.resize   s    U\v ##E5%#@@@d9:::c%jjVEEE&*n&A&A	NNC
OO4= 'B 'B 'B#ND))22444r>   c                 b      j         rd S  fd} j                            |           _         d S )Nc                  X    	                                   d _        d S # d _        w xY wr[   )drawr   rV   r`   s    r*   	idle_drawz+FigureCanvasTk.draw_idle.<locals>.idle_draw  s7    *		%)"""T"))))s     	))r   r   rp   )r`   r   s   ` r*   r   zFigureCanvasTk.draw_idle  sL     	F	* 	* 	* 	* 	* "^66yAAr>   c                     | j         S )z
        Return the Tk widget used to implement FigureCanvasTkAgg.

        Although the initial implementation uses a Tk canvas,  this routine
        is intended to hide that fact.
        )r   rh   s    r*   get_tk_widgetzFigureCanvasTk.get_tk_widget  s     ~r>   c                     | j                             |j                  | j        j        j        | j                             |j                  z
  fS r[   )r   canvasxxr   r;   rO   canvasyyr`   r   s     r*   _event_mpl_coordsz FigureCanvasTk._event_mpl_coords  sG     &&uw// '$.*@*@*I*IIK 	Kr>   c                     t          d| g|                     |          R |                     |          |d                                 d S )Nr   	modifiersguiEvent)r   r   _mpl_modifiersr   r   s     r*   r   z"FigureCanvasTk.motion_notify_event%  s^    ($ 	#**511	# 	#!0077!	# 	# 	# $,8:::::r>   c                     t          d| g|                     |          R |                     |          |d                                 d S )Nfigure_enter_eventr   r   r   r   r   r   s     r*   r   z!FigureCanvasTk.enter_notify_event+  ^    *D 	&--e44	& 	& $ 3 3E : :$	& 	& 	& '/hjjjjjr>   c                     t          d| g|                     |          R |                     |          |d                                 d S )Nfigure_leave_eventr   r   r   s     r*   r   z!FigureCanvasTk.leave_notify_event1  r   r>   Fc                 F   | j                                          t          |dd           }t          j        dk    rddd                    ||          }t          d| g|                     |          |R ||                     |          |d	                                 d S )Nnumdarwin   r@   r@   r   r   )dblclickr   r   )
r   r   getattrr   r   getr   r   r   r   )r`   r   r   r   s       r*   r   z!FigureCanvasTk.button_press_event7  s      """eUD))<8##A,,""3,,C' 	#**511	#36	# 	#AI!0077!	# 	# 	# $,8:::::r>   c                 4    |                      |d           d S )NT)r   )r   r   s     r*   r   z$FigureCanvasTk.button_dblclick_eventC  s!    55555r>   c                    t          |dd           }t          j        dk    rddd                    ||          }t	          d| g|                     |          |R |                     |          |d                                 d S )Nr   r   r   r@   r   r   r   )r   r   r   r   r   r   r   r   )r`   r   r   s      r*   r   z#FigureCanvasTk.button_release_eventF  s    eUD))<8##A,,""3,,C)4 	#**511	#36	# 	#!0077!	# 	# 	# $,8:::::r>   c                     t          |dd           }|dk    rdn	|dk    rdnd}t          d| g|                     |          R ||                     |          |d                                 d S )	Nr      r      r   r   stepr   r   )r   r   r   r   r   )r`   r   r   r   s       r*   r   zFigureCanvasTk.scroll_eventO  s    eUD))1HHqqq""a>4 	#**511	# 	#8<!0077!	# 	# 	# $,8:::::r>   c           
         |j                             |j        |j                  }|| j        k    rdS | j                            |j        |                                z
            }| j        j        j	        | j        
                    |j        |                                z
            z
  }|j        dz  }t          d| ||||                     |          |                                           dS )zMouseWheel event processorNx   r   r   )r   winfo_containingx_rooty_rootr   r   winfo_rootxr   r;   rO   r   winfo_rootydeltar   r   r   )r`   r   r   r   r   r   s         r*   r   z#FigureCanvasTk.scroll_event_windowsW  s     L))%,EEFN""5<!--//#ABB[$~%%elQ]]__&DEEF{S >4add.A.A%.H.H!	# 	# 	##+8:::::r>   excludec                |     t           j        dk    rg dnt           j        dk    rg dng d} fd|D             S )Nr   )ctrlr   control)alti   r  shiftr   r  r   )r  )r     r  r  )cmd   r  )r  )r  r	  r  r  )r]   @   r]   c                 <    g | ]\  }}}j         |z  r|k    |S  )state).0r   maskkeyr   r   s       r*   
<listcomp>z1FigureCanvasTk._mpl_modifiers.<locals>.<listcomp>~  s>     : : :tS;%:*1S.. *8..r>   )r   r   )r   r   r   s   `` r*   r   zFigureCanvasTk._mpl_modifierse  s     \W$$	
 
 
 
 \X%%+
 +
 +
 +

,
 ,
 ,
 	: : : : :I : : : 	:r>   c                     |j         }t          j        ||j                  }|K|                     ||          }d|v r|r|                    d           d                    g ||          S d S )Nr   r  r   )charr	   _unikey_or_keysym_to_mplkeykeysymr   removejoin)r`   r   unikeyr  modss        r*   _get_keyzFigureCanvasTk._get_key  sz    /EE?&&uc&::D$6G$$$88LdLCL))) ?r>   c                     t          d| |                     |          g|                     |          R d|i                                 d S )Nkey_press_eventr   r   r  r   r   r   s     r*   r   zFigureCanvasTk.key_press  sZ    "Du%%	!(,(>(>u(E(E	! 	! 	!	! 	!!)r>   c                     t          d| |                     |          g|                     |          R d|i                                 d S )Nkey_release_eventr   r  r   s     r*   r   zFigureCanvasTk.key_release  sZ    $du%%	!(,(>(>u(E(E	! 	! 	!	! 	!!)r>   c                 ,    t          | j        g|R i |S r[   )rY   r   )r`   rV   ra   s      r*   	new_timerzFigureCanvasTk.new_timer  s"    t~7777777r>   c                 8    | j                                          d S r[   )r   updaterh   s    r*   flush_eventszFigureCanvasTk.flush_events  s    r>   r   c                    |dk    rbt          d|z            }|dk    r&| j                            || j                  | _        n$| j                            | j                  | _        | j                                         d S )Nr   i  )r   r   re   stop_event_loopr   rp   mainloop)r`   timeoutmillisecondss      r*   start_event_loopzFigureCanvasTk.start_event_loop  s    Q;;tg~..La&*n&:&: $"6'8 '8## '+n&?&?('* '*#!!!!!r>   c                     | j         r&| j                            | j                    d | _         | j                                         d S r[   )r   r   rk   quitrh   s    r*   r&  zFigureCanvasTk.stop_event_loop  sH     	'N''(;<<<"&Dr>   c                     	 | j                             t          |                    d S # t          j        $ r Y d S w xY w)N)cursor)r   r   cursordtkinterrL   )r`   r.  s     r*   
set_cursorzFigureCanvasTk.set_cursor  sO    	N$$GFO$<<<<< 	 	 	DD	s   &* ==)NNr[   )F)r   ) rq   rr   rs   required_interactive_frameworkr   classpropertymanager_classr^   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r  r   r   r!  r$  r*  r&  r1  ru   rv   s   @r*   rx   rx      s       %)"&D&'B'BCCMD+ D+ D+ D+ D+ D+L
8 
8 
8 
8   B B B  K K K. . .1 1 11 1 1
. 
. 
. 
.6 6 6. . .. . .. . . )- : : : : \:6* * *, , ,
, , ,
8 8 8     
" 
" 
" 
"        r>   rx   c                   |     e Zd ZdZdZ fdZed             Zed             Zd Z	d Z
d Zd	 Zd
 Zd Zd Z xZS )rz   z
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : tk.Toolbar
        The tk.Toolbar
    window : tk.Window
        The tk.Window
    Fc                 8   || _         t                                          ||           | j                                          | j        j                            t          j        t          j	        d           t          |                                d          }t          j        |dd|           | _        d| _        t          j        ||j                                                  r%| j                            d| j                  | _        d	| _        d S )
Nr   )sidefillexpandr  `   
window_dpi)r   valuer    writeF)windowr]   r^   withdrawcanvasr   packr2   TOPBOTHr   wm_frameIntVar_window_dpi_window_dpi_cbnamer   enable_dpi_awarenessr5   	trace_add_update_window_dpi_shown)r`   rB  r   r@  window_framerb   s        r*   r^   zFigureManagerTk.__init__  s    %%% 	""RWQ"GGG
 6??,,b119F"*E|*E*EG G G"$&|VY5I5I5K5KLL 	2&*&6&@&@0'2 '2D# r>   c                    t                      5  t          j                    &t          j                     t	          j                     t          j        d          }|                                 t          t          j
        d                    }t          j        ||          }t          t          j
        d                    }t          j        ||          }|                    d||            |||          }	 | |	||          }
t          j                    r(|
                                 |	                                 |
cd d d            S # 1 swxY w Y   d S )N
matplotlib)	classNamezimages/matplotlib.png)filer   zimages/matplotlib_large.pngFr   )r+   r	   "_get_running_interactive_framework_setup_new_guiappr
    Win32_SetProcessDpiAwareness_maxr2   TkrA  r6   _get_data_pathr   r   	iconphotor&   is_interactiveshowr   )r{   canvas_classr   r   r@  
icon_fnameicon_imgicon_fname_largeicon_img_largerB  managers              r*   create_with_canvasz"FigureManagerTk.create_with_canvas  s    /00 	 	799A')))!BDDDU\222FOO U1') ) * *J)z&IIIH"5#7-$/ $/  0  0$/%f6 6 6N UNH===!\&888Fc&#v..G!## #  """;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   D>EE!Ec                     t          j                    }|rV|d         }t          |          }|j        rd S d|_        	 |j                                         d|_        d S # d|_        w xY wd S )Nr   TF)r   get_all_fig_managerstype_owns_mainloopr@  r'  )r{   managersfirst_managerr4  s       r*   start_main_loopzFigureManagerTk.start_main_loop  s    +-- 		5$QKM //M+ +/M(5$--////4,,,u,4444		5 		5s   A   	A)c                    | j                                         }| j                            dd|dz             | j        r.t          | j        d          r| j                                         | j                                         d S )Nr2   r   H   _rescale)	rH  r   r@  r3   toolbarhasattrrl  rB  r   )r`   rV   newdpis      r*   rL  z"FigureManagerTk._update_window_dpi  s    !%%''y&2+666< 	$GDL*== 	$L!!###..00000r>   c           	          d}||k    s||k    r)t           j        dk    rt          d| d| d| d          | j        j                            ||           d S )Ni\ linuxz/You have requested to resize the Tk window to (z, z), one of which is bigger than z.  At larger sizes xorg will either exit with an error on newer versions (~1.20) or cause corruption on older version (~1.19).  We do not expect a window over a million pixel wide or tall to be intended behavior.r   )r   r   
ValueErrorrB  r   r   )r`   rP   rO   max_sizes       r*   r   zFigureManagerTk.resize  s    H 1 1s|w7N7N+!&+ +*0+ +"*+ + +, , , 	''eF'CCCCCr>   c                     t                      5   j        sX fd} j                            d|            j                                          j        j                                         n j                                         t          j
        d         rJ j        j        j                            dd            j        j        j                            dd           d _        d d d            d S # 1 swxY w Y   d S )Nc                  0    t          j                   d S r[   )r   destroyr   s    r*   rv  z%FigureManagerTk.show.<locals>.destroy$  s    K%%%%%r>   WM_DELETE_WINDOWzfigure.raise_windowz-topmostr   r   T)r+   rM  r@  protocol	deiconifyrB  r   r   r   r&   r'   ra  
attributes)r`   rv  s   ` r*   r[  zFigureManagerTk.show!  sE   .00 	 	; (& & & & &$$%7AAA%%'''%//1111%%'''|12 E#*55j!DDD#*55j!DDDDK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   CC99C= C=c                      j         j        r) j         j                             j         j                    j         j        r) j         j                             j         j                    j        r  j                            d j                    fd}t          j	                    dk    r( j
                             j
        j        d|           d S  j
                                          |             d S )Nr?  c                       j                                           j        r.t          j                    s j                                          d S d S d S r[   )r@  rv  rf  r   get_num_fig_managersr,  rh   s   r*   delayed_destroyz0FigureManagerTk.destroy.<locals>.delayed_destroy=  s`    K!!!" #3+C+E+E #  """""# # # #r>   r2   r   )rB  r   r   rk   r   rI  rH  trace_remover	   rT  r@  rp   re   r#  )r`   rV   r~  s   `  r*   rv  zFigureManagerTk.destroy0  s    ;$ 	JK!..t{/HIII;% 	KK!..t{/IJJJ" 	L))'43JKKK	# 	# 	# 	# 	# 355==K""4;#4aIIIIIK   Or>   c                 4    | j                                         S r[   r@  wm_titlerh   s    r*   get_window_titlez FigureManagerTk.get_window_titleJ  s    {##%%%r>   c                 :    | j                             |           d S r[   r  )r`   titles     r*   set_window_titlez FigureManagerTk.set_window_titleM  s    U#####r>   c                     t          | j                            d                    }| j                            d|            d S )Nz-fullscreen)boolr@  rz  )r`   is_fullscreens     r*   full_screen_togglez"FigureManagerTk.full_screen_toggleP  s@    T[33MBBCC}-.?@@@@@r>   )rq   rr   rs   rt   rf  r^   classmethodrb  ri  rL  r   r[  rv  r  r  r  ru   rv   s   @r*   rz   rz     s          N    *   [B 5 5 [51 1 1D D D    4& & &$ $ $A A A A A A Ar>   rz   c                   r     e Zd ZddddZd Zd Z fdZ fdZd	 Zd
 Z	d Z
d Zd Zd Zd Zd Z xZS )NavigationToolbar2TkNT)pack_toolbarc                   ||                                 j        }t          j                            | |dt          |j        j        j                  d           i | _	        | j
        D ]\  }}}}||                                  |                     |t          t          j        d| d                    |dv t!          | |                    x| j	        |<   }|t#          ||           t$          j                            |d	
          | _        t          j        | | j        d          }	|	                    t          j                   t          j        |           | _        t          j        | | j        | j        t          j                  | _        | j                            t          j                   t9          j        | |           |r-|                     t          j        t          j                   dS dS )a  
        Parameters
        ----------
        canvas : `FigureCanvas`
            The figure canvas on which to operate.
        window : tk.Window
            The tk.Window which owns this toolbar.
        pack_toolbar : bool, default: True
            If True, add the toolbar to the parent's pack manager's packing
            list during initialization with ``side="bottom"`` and ``fill="x"``.
            If you want to use the toolbar with a different layout manager, use
            ``pack_toolbar=False``.
        Nr@   2   )r   r   rP   rO   zimages/.png)zoompan)togglecommand
   )r   size    
 r   fonttextr8  rS  )r   r  textvariablejustifyr8  r9  )r   r   r2   Framer^   r   r   r;   rP   _buttons	toolitems_Spacer_Buttonr6   r	   rX  r   add_tooltipr0  r  Font_label_fontLabelrC  RIGHT	StringVarmessage_message_labelr   BOTTOMX)
r`   rB  r@  r  r  tooltip_text
image_filecallbackbuttonlabels
             r*   r^   zNavigationToolbar2Tk.__init__V  s    >))++2F
$v1 #FM$6$< = =b 	 	J 	J 	J 8< 	6 	64D,
H|/3||,-Gz-G-G-GHHII#6#D(33	 0< 0 0 d#f  +555"<,,&r,BB 4+;FH H H


!!!|4000 hd9I48L/1x9 9 9 	  bh ///#D&111 	1II2924I00000	1 	1r>   c                    |                                  D ]}t          |t          j        t          j        f          r-t          |d          rt                              | |           TUt          |t          j                  r-|	                    d           |
                    d           t          |t          j                  rt                              d|j                   | j        	                    d           d	S )
a  
        Scale all children of the toolbar to current DPI setting.

        Before this is called, the Tk scaling setting will have been updated to
        match the new DPI. Tk widgets do not update for changes to scaling, but
        all measurements made after the change will match the new scaling. Thus
        this function re-applies all the same sizes in points, which Tk will
        scale correctly to pixels.
        _image_file18p)rO   3p)padxzUnknown child class %sr  r  N)winfo_children
isinstancer2   ButtonCheckbuttonrn  r  _set_image_for_buttonr  r   pack_configurer  _logwarningwinfo_classr  )r`   r   s     r*   rl  zNavigationToolbar2Tk._rescale  s    ))++ 	K 	KF&29bn"=>> K6=11 (>>tVLLLL FBH-- K   ...%%4%0000FBH-- K5v7IJJJJ"""+++++r>   c                     dt           j        fdt           j        ffD ]X\  }}|| j        v rJ| j        |k    r | j        |                                          9| j        |                                          Yd S )NZoomPan)r   ZOOMPANr  modeselectdeselect)r`   r  r  s      r*   _update_buttons_checkedz,NavigationToolbar2Tk._update_buttons_checked  s    "EJ/%1CD 	3 	3JD$t}$$9$$M$'..0000M$'00222	3 	3r>   c                 \     t                      j        |  |                                  d S r[   )r]   r  r  r`   rV   rb   s     r*   r  zNavigationToolbar2Tk.pan  s.    T$$&&&&&r>   c                 \     t                      j        |  |                                  d S r[   )r]   r  r  r  s     r*   r  zNavigationToolbar2Tk.zoom  s.    d$$&&&&&r>   c                 :    | j                             |           d S r[   )r  setr`   ss     r*   set_messagez NavigationToolbar2Tk.set_message  s    r>   c                    | j         j        r)| j         j                            | j         j                   | j         j        r)| j         j                            | j         j                   | j         j        j        j        }||z
  }||z
  }| j         j                            ||||          | j         _        | j         j                            ||||dd          | j         _        d S )Nr   )r   r   )outlinedash)	rB  r   r   r   r   r   r;   rO   create_rectangle)r`   r   x0y0rQ   rR   rO   s          r*   draw_rubberbandz$NavigationToolbar2Tk.draw_rubberband  s    ;- 	MK!(()KLLL;- 	MK!(()KLLL#(/b[b[K!22BB    	* K!22BBf 3 > > 	***r>   c                    | j         j        r5| j         j                            | j         j                   d | j         _        | j         j        r7| j         j                            | j         j                   d | j         _        d S d S r[   )rB  r   r   r   r   rh   s    r*   remove_rubberbandz&NavigationToolbar2Tk.remove_rubberband  s|    ;- 	6K!(()KLLL15DK.;- 	6K!(()KLLL15DK...	6 	6r>   c           	      h   j         dS t          j        dj                   }|                    |j                            dd                    }                    d          }fdfd}d }t          j        |d	k    r|	                                r|n|          5 }|
                    d
          }t          j        |                    ||f          |           }|_        dt          j                                                d                              z  }	 |||	          }
t          j        |
                    ||f          |           }|_        ddd           n# 1 swxY w Y    |d          rd|i}nd|i}t)          t*          j                  rr                    d          dk    rY| j        dk    rd}n5 d          \  }}} d          \  }}}||z   dz  ||z   dz  ||z   dz  f} ||          r||d<   n||d<    j        di |ddd dS )z
        Set the image for a button based on its pixel size.

        The pixel size is determined by the DPI scaling of the window.
        Nimagesr  z
_large.pngr  c                 T                                             |                     S r[   )	winfo_rgbcget)
color_namer  s    r*   
_get_colorz>NavigationToolbar2Tk._set_image_for_button.<locals>._get_color  s#    ##FKK
$;$;<<<r>   c                 j    t          | t                    r |           } t          |           dk     S )Ng    @)r  r6   rE   )colorr  s    r*   _is_darkz<NavigationToolbar2Tk._set_image_for_button.<locals>._is_dark  s5    %%% *"
5))u::	))r>   c                     t          j        |                                           }|dd df         dk                        d          }|||d df<   t	          j        |d          S )N.r   r   r   )axisRGBA)r  )rA   rB   copyallr   	fromarray)r   r  
image_data
black_masks       r*   _recolor_iconzANavigationToolbar2Tk._set_image_for_button.<locals>._recolor_icon  sl    E**//11J$S"1"W-277R7@@J).Jz2A2~&?:F;;;;r>      r  rS  g o?r)   r   r   selectcolorr>  x11activebackgroundr@   selectimage)rO   rP   r  )r  r	   rX  	with_namer   replacewinfo_pixelsr   openexistsconvertr   r   r   _ntimagerA   arrayr  r  _ntimage_altr  r2   r  _windowingsystemr   )r`   r  path_regular
path_larger  r  r  imr   r)   im_alt	image_altimage_kwargsr  r1g1b1r2g2b2r  s    `                  @r*   r  z*NavigationToolbar2Tk._set_image_for_button  s    %F +Hf6HII!++%%fl;;= =
""5))	= 	= 	= 	= 	=	* 	* 	* 	* 	*
	< 	< 	< ZtbyyZ5F5F5H5Hy

)+ + 	,.0F##B&ryy$'>'>tLLLE#FO &  \!:!:;;*= *= =J"]2z22F*tTl++D: : :I"+F	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 8L!! 	,
 $Y/LL#U+L
 vr~..	4M**b00$--+
 (Z66
B'Z(:;;
B "2qy2b5!)beQY?x$$ 4.7]++.3]+CC<CUCCCCCCCs   &CE55E9<E9c           
      p   |st          j        | ||ddd          }n8t          j        |           }t          j        | ||d|ddd          }||_        ||_        |t                              | |           n|                    | j	                   |
                    t           j        	           |S )
Nflatgroover   )r   r  r  relief
overreliefr   rS  F)r   r  r  indicatoronvariable	offreliefr  r   )r  r  )r2   r  rG  r  varr  r  r  r   r  rC  LEFT)r`   r  r  r  r  br  s          r*   r  zNavigationToolbar2Tk._Button#  s     		$(  AA )4(((C$U8  A
 AE"! 66tQ????KKT-K...	BGr>   c                     t          j        | dt           j        d          }|                    t           j        d           |S )Nr  DarkGray)r   rO   r  bgr  )r8  r  )r2   r  RIDGErC  r  r  s     r*   r  zNavigationToolbar2Tk._Spacer?  s9    HDrxJOOO	BG$'''r>   c           	         | j                                         }d t          |                                          D             }| j                                         }| j                                         |         }t          j        | j                                         |          }d}t          j
                            t          j        d                   }t          j        | j                                                   j        }	t$          j                            | j                                         j        d||||	|          }
|
dv rd S |dk    r9t          j
                            t/          |
                    t          j        d<   t          j        |
          j        dd          dk    rd }n ||                                         d         }	 | j         j                            |
|	           d S # t8          $ r8}t$          j                            d
t/          |                     Y d }~d S d }~ww xY w)Nc                 V    g | ]&\  }}|d                      d |D                       f'S ) c              3       K   | ]	}d | V  
dS )z*.Nr  )r  exts     r*   	<genexpr>z>NavigationToolbar2Tk.save_figure.<locals>.<listcomp>.<genexpr>H  s(      773JJJ777777r>   )r  )r  r   extss      r*   r  z4NavigationToolbar2Tk.save_figure.<locals>.<listcomp>G  sL     
 
 
d 38877$777778
 
 
r>   r>  zsavefig.directoryzSave the figure)r   r  	filetypesdefaultextension
initialdirinitialfiletypevariable)r>  r  r   r   )formatzError saving file)rB  get_supported_filetypes_groupedsorteditemsget_default_filetypeget_supported_filetypesr2   r  r   ospath
expanduserr&   r'   pathlibPathget_default_filenamestemr0  
filedialogasksaveasfilenamer   dirnamer6   suffixr   r   savefig	Exception
messagebox	showerror)r`   rV   r!  tk_filetypesdefault_extensiondefault_filetypefiletype_variabler"  r#  r$  fname	extensionrW   s                r*   save_figurez NavigationToolbar2Tk.save_figureE  s&   K??AA	
 
$Y__%6%677
 
 

 !K<<>>;>>@@ARSL)B)B)D)DFVWW W''5H(IJJ
 l4;#C#C#E#EFFK"44;,,..5#"-!#* 5   HFE

++ L,-
 <%abb)R//II!"3"7"7"9"9:1=I	FK&&uY&????? 	F 	F 	F(()<c!ffEEEEEEEEE	Fs   !G= =
H?-H::H?c                 "   t           j        t           j        d}| j        j        dk    }| j        j        t          | j                  dz
  k     }d| j        v r||         | j        d         d<   d| j        v r||         | j        d         d<   d S d S )N)TFr   r   Backr  Forward)r2   NORMALDISABLED
_nav_stack_poslenr  )r`   	state_mapcan_backcan_forwards       r*   set_history_buttonsz(NavigationToolbar2Tk.set_history_buttonsx  s    9R[99	?'!+o*S-A-AA-EET]""-6x-@DM&!'*%%09+0FDM)$W--- &%r>   r[   )rq   rr   rs   r^   rl  r  r  r  r  r  r  r  r  r  rA  rM  ru   rv   s   @r*   r  r  U  s       51D 51 51 51 51 51n, , ,63 3 3' ' ' ' '' ' ' ' '  ? ? ? 6 6 6MD MD MD^  8  1F 1F 1FfG G G G G G Gr>   r  c                      d  fd}fd}                      d|                                 d|           d S )Nc                 P   ssdS                      d          \  }}}}|                                z                                   z   }|                                z   }t	          j                                      d                               d| d|            	 j                            ddj	        dd           n# t          j
        $ r Y nw xY wt	          j        t          j        t          j        d	          }|                    d
           dS )zDisplay text in tooltip window.Ninsertr   r   z!::tk::unsupported::MacWindowStylestylehelpnoActivates)r  r  r  r   )ipadx)r;   r   winfo_widthr   r2   Topleveloverrideredirectgeometryr3   _wrL   r  r  SOLIDrC  )r   r   r   _r  r  	tipwindowr   s        r*   showtipzadd_tooltip.<locals>.showtip  sH     	D 	F[[**
1a""$$$v'9'9';';;""$$$K''	""1%%%;q;;1;;'''	LA%y|$m5 5 5 5 { 	 	 	D	rw "a9 9 9


s   *#C C C c                 8    r                                  d d S r[   )rv  )r   r\  s    r*   hidetipzadd_tooltip.<locals>.hidetip  s&     	 			r>   r   r   )r   )r   r  r]  r_  r\  s   ``  @r*   r  r    sv    I      *     KK	7###
KK	7#####r>   c                       e Zd Zd Zd ZdS )RubberbandTkc                 h    t                               |                                 d ||||           d S r[   )r  r  "_make_classic_style_pseudo_toolbar)r`   r  r  rQ   rR   s        r*   r  zRubberbandTk.draw_rubberband  sB    ,,3355tRR	M 	M 	M 	M 	Mr>   c                 ^    t                               |                                            d S r[   )r  r  rc  rh   s    r*   r  zRubberbandTk.remove_rubberband  s3    ..3355	7 	7 	7 	7 	7r>   N)rq   rr   rs   r  r  r  r>   r*   ra  ra    s5        M M M7 7 7 7 7r>   ra  c                   F    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 ZdS )	ToolbarTkNc                 >   t          j        | |           |#| j        j                                        j        }| j        j        j        j        j        \  }}d||z
  }}t          j
                            | |t          |          t          |          d           t          j                            d          | _        t          j        | | j        d          }|                    t          j                   t          j        | 	          | _        t          j        | | j        | j        
          | _        | j                            t          j                   i | _        |                     t          j        t          j                   i | _        d S )Nr  r@   )r   rP   rO   r   r  r  r  r  r  rS  )r   r  r  r  )r   r^   toolmanagerrB  r   r   r   r;   	intervalxr2   r  r   r0  r  r  r  r  rC  r  r  _messager  
_toolitemsrD  r  _groups)r`   rh  r@  xminxmaxrO   rP   r  s           r*   r^   zToolbarTk.__init__  sl   "4555>%,::<<CF%,38B
dD4K
$v #E

3v;;&' 	 	) 	) 	) #<,,",55
 4+;FH H H


!!!D111 hd9I48MC C C  bh ///		rvBD	)))r>   c                 6    t                               |           S r[   )r  rl  rh   s    r*   rl  zToolbarTk._rescale  s    #,,T222r>   c                                           |          }|                                }|t          |          k    s|dk     rd }	n||         }	t                              ||| fd          }
|
                    |	           |t          |
|            j                            g             j                 	                    |
           d S )Nr   c                  .                                    S r[   )_button_click)r   r`   s   r*   rn   z(ToolbarTk.add_toolitem.<locals>.<lambda>  s    d6H6H6N6N r>   )before)
_get_groupframepack_slavesrI  r  r  r  r  rk  
setdefaultappend)r`   r   grouppositionr  descriptionr  framebuttonsrs  r  s   ``         r*   add_toolitemzToolbarTk.add_toolitem  s    $$U++##%%s7||##x!||FFX&F%--eT:v.N.N.N.N.NP PV,,,",,,""4,,,$$V,,,,,r>   c                    || j         vrr| j         r|                                  t          j        | d          }|                    t          j        t          j                   | j        |_        || j         |<   | j         |         S )Nr   )r   r   r  )rl  _add_separatorr2   r  rC  r  Yr  )r`   rx  r{  s      r*   rt  zToolbarTk._get_groupframe  s}    $$| &##%%%HDa888EJJBG"$J/// $ 0E"'DL|E""r>   c                 6    t                               |           S r[   )r  r  rh   s    r*   r  zToolbarTk._add_separator  s    #++D111r>   c                 0    |                      |           d S r[   )trigger_tool)r`   r   s     r*   rr  zToolbarTk._button_click  s    $r>   c                     || j         vrd S | j         |         D ]-}|r|                                 |                                 .d S r[   )rk  r  r  )r`   r   toggledtoolitems       r*   toggle_toolitemzToolbarTk.toggle_toolitem  sd    t&&F- 	$ 	$H $!!!!!!####		$ 	$r>   c                 j    | j                             |g           D ]}|                                 d S r[   )rk  r1   pack_forget)r`   r   r  s      r*   remove_toolitemzToolbarTk.remove_toolitem  sB    ++D"55 	# 	#H  """"	# 	#r>   c                 :    | j                             |           d S r[   )rj  r  r  s     r*   r  zToolbarTk.set_message  s    !r>   r[   )rq   rr   rs   r^   rl  r}  rt  r  rr  r  r  r  r  r>   r*   rf  rf    s           23 3 3- - - # # #2 2 2     $ $ $# # #    r>   rf  c                       e Zd Zd ZdS )SaveFigureTkc                 ^    t                               |                                            d S r[   )r  rA  rc  r`   rV   s     r*   triggerzSaveFigureTk.trigger  s3    ((3355	7 	7 	7 	7 	7r>   Nrq   rr   rs   r  r  r>   r*   r  r    s#        7 7 7 7 7r>   r  c                       e Zd Zd ZdS )ConfigureSubplotsTkc                 :    t                               |            d S r[   )r  configure_subplotsr  s     r*   r  zConfigureSubplotsTk.trigger  s    //55555r>   Nr  r  r>   r*   r  r    s#        6 6 6 6 6r>   r  c                       e Zd Zd ZdS )HelpTkc                     t          | j        j        j        |                                 dg          fd_        d S )NOKc                 @    j         j                                        S r[   )r{  r   rA  )r   dialogs    r*   rn   z HelpTk.trigger.<locals>.<lambda>  s    &,"5">">"@"@ r>   )r   r   rB  r   _get_help_textdone)r`   rV   r  s     @r*   r  zHelpTk.trigger  sE    K($*=*=*?*?$I I@@@@r>   Nr  r  r>   r*   r  r  
  s(        A A A A Ar>   r  c                   2    e Zd Zej        ZeZeZ	ej
        ZdS )
_BackendTkN)rq   rr   rs   r2   	TkVersionbackend_versionrx   FigureCanvasrz   FigureManagerri  r'  r  r>   r*   r  r    s'        lO!L#M.HHHr>   r  r[   )Wuuidr   
contextlibr   loggingrF   os.pathr,  r/  r   r0  r2   tkinter.filedialogtkinter.fonttkinter.messageboxtkinter.simpledialogr   numpyrA   PILr   r   rP  r&   r   r   r	   r
   matplotlib.backend_basesr   r   r   r   r   r   r   r   r   r   r   r   r   matplotlib._pylab_helpersr   r>  r   r   r   	getLoggerrq   r  MOVEHANDPOINTERSELECT_REGIONWAITRESIZE_HORIZONTALRESIZE_VERTICALr/  r+   r0   uuid4hexrK   r=   r4   rY   rx   rz   r  r  r  _register_tool_classRubberbandBasera  rf  SaveFigureBaser  ConfigureSubplotsBaser  ToolHelpBaser  Toolbar_toolbar2_class_toolmanager_toolbar_classexportr  r  r>   r*   <module>r     s-     % % % % % %     



                 - - - - - -                 D D D D D D D D D D D DB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B * ) ) ) ) )       F F F F F F F F w""L'L'OW;L'20 D D D 
ztz||//  33 33 33 33l# # # # #i # # #LR R R R R% R R Rj[A [A [A [A [A' [A [A [A|jG jG jG jG jG-rx jG jG jGZ	$ $ $D $#N337 7 7 7 7=/ 7 7 437K K K K K!28 K K K\ $#N337 7 7 7 7=/ 7 7 437 $#N336 6 6 6 6-= 6 6 436
 $#N33A A A A A]' A A 43A "6 -6 * 
/ / / / / / / / / /r>   