
    (?e/                     B   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-  ej.        e/          Z0e#j1        d
e#j2        de#j3        de#j4        de#j5        de#j6        de#j7        diZ8ed             Z9i Z:d e j;                    j<        z   Z=d Z>d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                  ZF G d d          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fleurhand2arrow	crosshairwatchsb_h_double_arrowsb_v_double_arrowc               #      K   t          j                    } 	 d V  t          j        d         rt          j        |            d S d S # t          j        d         rt          j        |            w w xY w)Nztk.window_focus)r
   Win32_GetForegroundWindowmplrcParamsWin32_SetForegroundWindow)
foregrounds    ?lib/python3.11/site-packages/matplotlib/backends/_backend_tk.py!_restore_foreground_window_at_endr)   (   s      "<>>JD<)* 	D7
CCCCC	D 	D3<)* 	D7
CCCC	Ds   A )A.	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dataptroffsetsbboxptr	comp_rules         r(   _blitr;   :   s     8B~~f7M7M4J'9=fj*== 
K
((**C
OOW7G- - - - -    c                    t          j        |          }|j        dd         \  }}|||j        j        f}||                                \  \  }}	\  }
}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ctypesdata	__array__maxmathfloorminceilTK_PHOTO_COMPOSITE_OVERLAYTK_PHOTO_COMPOSITE_SETr4   idr.   r0   r1   _blit_tcl_nameTclErrorcreatecommandr;   )r6   aggimager8   bboxrC   heightwidthr7   x1y1x2y2r9   r:   argsr5   es                    r(   r2   r2   H   s     :hDJrrNMFEudk./G!^^--R(2rB##2&&B##2''GGbFr2r".		eQ'*	 w);D 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   4 E G%AGG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)selfra   rX   kwargs	__class__s       r(   r`   zTimerTk.__init__   s1    $)&)))r<   c                     |                                   | j                            | j        | j                  | _        d S r]   )_timer_stopra   after	_interval	_on_timerr^   rb   s    r(   _timer_startzTimerTk._timer_start   s5    k''GGr<   c                 `    | j         | j                            | j                    d | _         d S r]   )r^   ra   after_cancelrj   s    r(   rf   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]   )ra   rg   rh   ri   rj   s   r(   <lambda>z#TimerTk._on_timer.<locals>.<lambda>   s    DK--dndnMM r<   )r_   ri   _singler^   rh   ra   rg   
after_idle)rb   rd   s   `r(   ri   zTimerTk._on_timer   s    
 | 	 	~!!"k//OO #k44MMMM  DKKKr<   )	__name__
__module____qualname____doc__r`   rk   rf   ri   __classcell__rd   s   @r(   r[   r[      sx        FF    
H H H  
        r<   r[   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 )"FigureCanvasTkr0   c                     t           S r]   )FigureManagerTk)clss    r(   rp   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
backgroundrS   rR   borderwidthhighlightthickness)r   rS   rR   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)eventrb   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   rb   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_heightr0   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)rb   figurer   whnamer   r   r   r   r   r   r   rd   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 )Nr0   scalinggUUUUUU?r>   Tr   rS   rR   )roundr   r0   r1   _set_device_pixel_ratior   	configure)rb   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)rS   rR   r   dpiset_size_inchesr   deleter   r   r   intr   r   r   	draw_idle)rb   r   rS   rR   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   rX   rb   s    r(   	idle_drawz+FigureCanvasTk.draw_idle.<locals>.idle_draw  s7    *		%)"""T"))))s     	))r   r   rr   )rb   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   rj   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   rQ   rR   canvasyyrb   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_event4  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   )rb   r   r   r   s       r(   r   z!FigureCanvasTk.button_press_event:  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_eventF  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   )rb   r   r   s      r(   r   z#FigureCanvasTk.button_release_eventI  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   )rb   r   r   r   s       r(   r   zFigureCanvasTk.scroll_eventR  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   rQ   rR   r   winfo_rootydeltar   r   r   )rb   r   r   r   r   r   s         r(   r   z#FigureCanvasTk.scroll_event_windowsZ  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_modifiersh  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)rb   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]   )r[   r   )rb   rX   rc   s      r(   	new_timerzFigureCanvasTk.new_timer  s"    t~7777777r<   c                 8    | j                                          d S r]   )r   updaterj   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   rg   stop_event_loopr   rr   mainloop)rb   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   rm   quitrj   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tkinterrN   )rb   r0  s     r(   
set_cursorzFigureCanvasTk.set_cursor  sO    	N$$GFO$<<<<< 	 	 	DD	s   &* ==)NNr]   )F)r   ) rs   rt   ru   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(  r3  rw   rx   s   @r(   rz   rz      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<   rz   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 )r|   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   packr0   TOPBOTHr   wm_frameIntVar_window_dpi_window_dpi_cbnamer   enable_dpi_awarenessr3   	trace_add_update_window_dpi_shown)rb   rD  r   rB  window_framerd   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_maxr0   TkrC  r4   _get_data_pathr   r   	iconphotor$   is_interactiveshowr   )r}   canvas_classr   r   rB  
icon_fnameicon_imgicon_fname_largeicon_img_largerD  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_mainlooprB  r)  )r}   managersfirst_managerr6  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 )Nr0   r   H   _rescale)	rJ  r   rB  r1   toolbarhasattrrn  rD  r   )rb   rX   newdpis      r(   rN  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   
ValueErrorrD  r   r   )rb   rS   rR   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(   rx  z%FigureManagerTk.show.<locals>.destroy'  s    K%%%%%r<   WM_DELETE_WINDOWzfigure.raise_windowz-topmostr   r   T)r)   rO  rB  protocol	deiconifyrD  r   r   r   r$   r%   rc  
attributes)rb   rx  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 )NrA  c                       j                                           j        r.t          j                    s j                                          d S d S d S r]   )rB  rx  rh  r   get_num_fig_managersr.  rj   s   r(   delayed_destroyz0FigureManagerTk.destroy.<locals>.delayed_destroy@  s`    K!!!" #3+C+E+E #  """""# # # #r<   r0   r   )rD  r   r   rm   r   rK  rJ  trace_remover	   rV  rB  rr   rg   r%  )rb   rX   r  s   `  r(   rx  zFigureManagerTk.destroy3  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]   rB  wm_titlerj   s    r(   get_window_titlez FigureManagerTk.get_window_titleM  s    {##%%%r<   c                 :    | j                             |           d S r]   r  )rb   titles     r(   set_window_titlez FigureManagerTk.set_window_titleP  s    U#####r<   c                     t          | j                            d                    }| j                            d|            d S )Nz-fullscreen)boolrB  r|  )rb   is_fullscreens     r(   full_screen_togglez"FigureManagerTk.full_screen_toggleS  s@    T[33MBBCC}-.?@@@@@r<   )rs   rt   ru   rv   rh  r`   classmethodrd  rk  rN  r   r]  rx  r  r  r  rw   rx   s   @r(   r|   r|     s          N    *   [B 5 5 [51 1 1D D D    4& & &$ $ $A A A A A A Ar<   r|   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                   t;          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   rS   rR   zimages/.png)zoompan)togglecommand
   )r   size    
 r   fonttextr:  rU  )r   r  textvariablejustifyr:  r;  ) r   r   r0   Framer`   r   r   rQ   rS   _buttons	toolitems_Spacer_Buttonr4   r	   rZ  r   ToolTipcreateToolTipr2  r  Font_label_fontLabelrE  RIGHT	StringVarmessage_message_labelr   BOTTOMX)
rb   rD  rB  r  r  tooltip_text
image_filecallbackbuttonlabels
             r(   r`   zNavigationToolbar2Tk.__init__Y  s    >))++2F
$v1 #FM$6$< = =b 	 	J 	J 	J 8< 	@ 	@4D,
H|/3||,-Gz-G-G-GHHII#6#D(33	 0< 0 0 d#f  +))&,???"<,,&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)rR   3p)padxzUnknown child class %sr  r  N)winfo_children
isinstancer0   ButtonCheckbuttonrp  r  _set_image_for_buttonr  r   pack_configurer  _logwarningwinfo_classr  rb   r   s     r(   rn  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)rb   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  rb   rX   rd   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rb   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)	rD  r   r   r   r   r   rQ   rR   create_rectangle)rb   r   x0y0rT   rU   rR   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]   )rD  r   r   r   r   rj   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  r4   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  )r?   r@   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  rU  g o?r'   r   r   selectcolorr@  x11activebackgroundr>   selectimage)rR   rS   r  )r  r	   rZ  	with_namer   replacewinfo_pixelsr   openexistsconvertr   r   r   _ntimager?   arrayr  r  _ntimage_altr  r0   r  _windowingsystemr   )rb   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   rU  F)r   r  r  indicatoronvariable	offreliefr  r   )r  r  )r0   r  rI  r  varr  r  r  r   r  rE  LEFT)rb   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   rR   r  bgr  )r:  r  )r0   r  RIDGErE  r  r  s     r(   r  zNavigationToolbar2Tk._SpacerB  s9    HDrxJOOO	BG$'''r<   c           	      V   | j                                         }d t          |                                          D             }| j                                         }| j                                         |         }t          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>K  s(      773JJJ777777r<   )r  )r  r   extss      r(   r  z4NavigationToolbar2Tk.save_figure.<locals>.<listcomp>J  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)rD  get_supported_filetypes_groupedsorteditemsget_default_filetypeget_supported_filetypesr0   r  ospath
expanduserr$   r%   pathlibPathget_default_filenamestemr2  
filedialogasksaveasfilenamer   r   dirnamer4   suffixr   r   savefig	Exception
messagebox	showerror)rb   rX   r%  tk_filetypesdefault_extensiondefault_filetypefiletype_variabler&  r'  r(  fname	extensionrY   s                r(   save_figurez NavigationToolbar2Tk.save_figureH  s   K??AA	
 
$Y__%6%677
 
 

 !K<<>>;>>@@ARSL/?@@ 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(0-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)r0   NORMALDISABLED
_nav_stack_poslenr  )rb   	state_mapcan_backcan_forwards       r(   set_history_buttonsz(NavigationToolbar2Tk.set_history_buttons{  s    9R[99	?'!+o*S-A-AA-EET]""-6x-@DM&!'*%%09+0FDM)$W--- &%r<   r]   )rs   rt   ru   r`   rn  r  r  r  r  r  r  r  r  r  rE  rQ  rw   rx   s   @r(   r  r  X  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                   :    e Zd ZdZed             Zd Zd Zd ZdS )r  zi
    Tooltip recipe from
    http://www.voidspace.org.uk/python/weblog/arch_d7_2006_07_01.shtml#e387
    c                     t          |           fd}fd}|                     d|           |                     d|           d S )Nc                 2                                    d S r]   )showtip)r   r  toolTips    r(   enterz$ToolTip.createToolTip.<locals>.enter  s    OOD!!!!!r<   c                 0                                      d S r]   )hidetip)r   rV  s    r(   leavez$ToolTip.createToolTip.<locals>.leave  s    OOr<   r   r   )r  r   )r   r  rW  rZ  rV  s    `  @r(   r  zToolTip.createToolTip  st    &//	" 	" 	" 	" 	" 	"	 	 	 	 	Iu%%%Iu%%%%%r<   c                 L    || _         d | _        d | _        dx| _        | _        d S )Nr   )r   	tipwindowrL   r   r   r  s     r(   r`   zToolTip.__init__  s)    r<   c                    || _         | j        s| j         sdS | j                            d          \  }}}}|| j                                        z   | j                                        z   }|| j                                        z   }t          j        | j                  x| _        }|	                    d           |
                    d||fz             	 |j                            dd|j        dd           n# t          j        $ r Y nw xY wt          j        || j         t          j        t          j        d	          }|                    d
           dS )zDisplay text in tooltip window.Ninsertr   z+%d+%dz!::tk::unsupported::MacWindowStylestylehelpnoActivates)r  r  r  r   )ipadx)r  r\  r   rQ   r   winfo_widthr   r0   Toplevelwm_overrideredirectwm_geometryr1   _wrN   r  r  SOLIDrE  )rb   r  r   r   _twr  s          r(   rU  zToolTip.showtip  s^   	> 	 	F[%%h//
1a'')))DK,C,C,E,EE''))) k$+666
q!!!
x1a&()))	EJJ:}. . . . { 	 	 	D	$)RW "a9 9 9


s   #C= =DDc                 R    | j         }d | _         |r|                                 d S d S r]   )r\  rx  )rb   rj  s     r(   rY  zToolTip.hidetip  s3    ^ 	JJLLLLL	 	r<   N)	rs   rt   ru   rv   r7  r  r`   rU  rY  r  r<   r(   r  r    sf          & & \&    ,    r<   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)rb   r  r  rT   rU   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  ro  rj   s    r(   r  zRubberbandTk.remove_rubberband  s3    ..3355	7 	7 	7 	7 	7r<   N)rs   rt   ru   r  r  r  r<   r(   rm  rm    s5        M M M7 7 7 7 7r<   rm  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   rS   rR   r   r  r  r  r  r  rU  )r   r  r  r  )r   r`   toolmanagerrD  r   r   r   rQ   	intervalxr0   r  r   r2  r  r  r  r  rE  r  r  _messager  
_toolitemsrF  r  _groups)rb   rt  rB  xminxmaxrR   rS   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  rn  rj   s    r(   rn  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   rb   s   r(   rp   z(ToolbarTk.add_toolitem.<locals>.<lambda>  s    d6H6H6N6N r<   )before)_get_groupframepack_slavesrM  r  r  r  r  r  rw  
setdefaultappend)rb   r   grouppositionr  descriptionr  framebuttonsr  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,,,"!!&+666""4,,,$$V,,,,,r<   c                    || j         vrr| j         r|                                  t          j        | d          }|                    t          j        t          j                   | j        |_        || j         |<   | j         |         S )Nr   )r   r   r  )rx  _add_separatorr0   r  rE  r  Yr  )rb   r  r  s      r(   r  zToolbarTk._get_groupframe  s}    $$| &##%%%HDa888EJJBG"$J/// $ 0E"'DL|E""r<   c                 6    t                               |           S r]   )r  r  rj   s    r(   r  zToolbarTk._add_separator  s    #++D111r<   c                 0    |                      |           d S r]   )trigger_tool)rb   r   s     r(   r~  zToolbarTk._button_click  s    $r<   c                     || j         vrd S | j         |         D ]-}|r|                                 |                                 .d S r]   )rw  r  r  )rb   r   toggledtoolitems       r(   toggle_toolitemzToolbarTk.toggle_toolitem  sd    t&&F- 	$ 	$H $!!!!!!####		$ 	$r<   c                 ^    | j         |         D ]}|                                 | j         |= d S r]   )rw  pack_forget)rb   r   r  s      r(   remove_toolitemzToolbarTk.remove_toolitem
  s=    - 	# 	#H  """"OD!!!r<   c                 :    | j                             |           d S r]   )rv  r  r  s     r(   r  zToolbarTk.set_message  s    !r<   r]   )rs   rt   ru   r`   rn  r  r  r  r~  r  r  r  r  r<   r(   rr  rr    s           23 3 3- - - # # #2 2 2     $ $ $" " "
    r<   rr  c                       e Zd Zd ZdS )SaveFigureTkc                 ^    t                               |                                            d S r]   )r  rE  ro  rb   rX   s     r(   triggerzSaveFigureTk.trigger  s3    ((3355	7 	7 	7 	7 	7r<   Nrs   rt   ru   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   rC  )r   dialogs    r(   rp   z HelpTk.trigger.<locals>.<lambda>%  s    &,"5">">"@"@ r<   )r   r   rD  r   _get_help_textdone)rb   rX   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)rs   rt   ru   r0   	TkVersionbackend_versionrz   FigureCanvasr|   FigureManagerrk  r)  r  r<   r(   r  r  -  s'        lO!L#M.HHHr<   r  r]   )Wuuidr   
contextlibr   loggingrF   os.pathr0  r3  r   r2  r0   tkinter.filedialogtkinter.fonttkinter.messageboxtkinter.simpledialogr   numpyr?   PILr   r   rR  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   	getLoggerrs   r  MOVEHANDPOINTERSELECT_REGIONWAITRESIZE_HORIZONTALRESIZE_VERTICALr1  r)   r.   uuid4hexrM   rJ   rK   r;   r2   r[   rz   r|   r  r  r  _register_tool_classRubberbandBaserm  rr  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 * ) ) ) ) )       w""L'L'OW;L'20 D D D 
ztz||//  - - -43 43 43 43n# # # # #i # # #LR R R R R% R R Rj[A [A [A [A [A' [A [A [A|lG lG lG lG lG-rx lG lG lG^	/ / / / / / / /d $#N337 7 7 7 7=/ 7 7 437L L L L L!28 L L L^ $#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<   