
    P/Ph                     :   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)m*Z* d dl+m,Z, dd	l-m.Z. dd
l.m/Z/m0Z0  ej1        e2          Z3e#j4        de#j5        de#j6        de#j7        de#j8        de#j9        de#j:        diZ;ed             Z<i Z=d e j>                    j?        z   Z@d ZAd+dZB G d de!          ZC G d de          ZD G d de          ZE G d de ejF                  ZGd ZH ejI        eD           G d d ejJ                              ZK G d! d"e"ejF                  ZL ejI        eD           G d# d$ejM                              ZN ejI        eD           G d% d&ejO                              ZP ejI        eD           G d' d(ejQ                              ZReLZSeGeE_T        eLeE_U        ejV         G d) d*e                      ZWdS ),    N)contextmanager)SimpleDialog)ImageImageTk)_apibackend_toolscbook_c_internal_utils)_BackendFigureCanvasBaseFigureManagerBaseNavigationToolbar2	TimerBaseToolContainerBasecursors_ModeMouseButton
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/test/jupyter/venv/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   r7   idr1   r3   r4   _blit_tcl_nameTclErrorcreatecommandr>   )r9   aggimager;   r<   r:   heightwidthx1y1x2y2bboxptrr=   argsr8   es                   r+   r5   r5   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`   rW   kwargs	__class__s       r+   r_   zTimerTk.__init__   s1    $)&)))r?   c                     |                                   | j                            | j        | j                  | _        d S r\   )_timer_stopr`   after	_interval	_on_timerr]   ra   s    r+   _timer_startzTimerTk._timer_start   s5    k''GGr?   c                 `    | j         | j                            | j                    d | _         d S r\   )r]   r`   after_cancelri   s    r+   re   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`   rf   rg   rh   ri   s   r+   <lambda>z#TimerTk._on_timer.<locals>.<lambda>   s    DK--dndnMM r?   )r^   rh   _singler]   rg   r`   rf   
after_idle)ra   rc   s   `r+   rh   zTimerTk._on_timer   s    
 | 	 	~!!"k//OO #k44MMMM  DKKKr?   )	__name__
__module____qualname____doc__r_   rj   re   rh   __classcell__rc   s   @r+   rZ   rZ   |   sx        FF    
H H H  
        r?   rZ   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             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 )#FigureCanvasTkr3   c                     t           S r\   )FigureManagerTk)clss    r+   ro   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                   | 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                                        }t3          j        |           t3          j        |          
fd}|                    d|d          
	fd}|                    d|d          	| j                                         d | _        d | _        d S )NTphysicalwhiter   )master
backgroundrQ   rP   borderwidthhighlightthickness)r   rQ   rP   rA   imagez<Configure>z<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)eventra   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   ra   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_heightr3   Canvasr   
PhotoImage_tkphotocreate_image_tkcanvas_image_regionbindresize_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)ra   figurer   whnamer   r   r   r   r   r   r   rc   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GT%DEEE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                    d }t           j        dk    r2t          | j        j                            dd          dz  d          }n-t           j        dk    r| j                            d          dz  }|L|                     |          r9|                     d	
          \  }}| j        	                    ||           d S d S d S )Nwin32r3   scalinggUUUUUU?rA   linux1i`   Tr~   rQ   rP   )
sysplatformroundr   r3   r4   winfo_fpixels_set_device_pixel_ratior   	configure)ra   r   ratior   r   s        r+   r   z)FigureCanvasTk._update_device_pixel_ratio   s    <7"" $.+00yAAWMqQQEE\W$$N0066;E!=!=e!D!D (($(77DAqN$$1Q$77777 r?   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   rA   r   resize_event)rQ   rP   r   dpiset_size_inchesr   deleter   r   r   intr   r   r   	draw_idle)ra   r   rQ   rP   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   rW   ra   s    r+   	idle_drawz+FigureCanvasTk.draw_idle.<locals>.idle_draw  s7    *		%)"""T"))))s     	))r   r   rq   )ra   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   ri   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<   rP   canvasyyra   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   )buttons	modifiersguiEvent)r   r   _mpl_buttons_mpl_modifiersr   r   s     r+   r   z"FigureCanvasTk.motion_notify_event(  so    ($ 	#**511	# 	#,,U33!0077!		# 	# 	# $,8:::::r?   c                     t          d| g|                     |          R |                     |          |d                                 d S )Nfigure_enter_eventr   r   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_event5  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   rA   rA   r   r   )dblclickr   r   )
r   r   getattrr   r   getr   r   r   r   )ra   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_eventG  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   rA   r   r   r   )r   r   r   r   r   r   r   r   )ra   r   r   s      r+   r   z#FigureCanvasTk.button_release_eventJ  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   )ra   r   r   r   s       r+   r   zFigureCanvasTk.scroll_eventS  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<   rP   r   winfo_rootydeltar   r   r   )ra   r   r   r   r   r   s         r+   r   z#FigureCanvasTk.scroll_event_windows[  s     L))%,EEFN""5<!--//#ABB[$~%%elQ]]__&DEEF{S >4add.A.A%.H.H!	# 	# 	##+8:::::r?   c                 L    t           j        dk    rCt          j        dft          j        dft          j        dft          j        dft          j        dfgnBt          j        dft          j        dft          j        dft          j        dft          j        dfg} fd|D             S )Nr      i   i   i   i   c                 .    g | ]\  }}j         |z  |S  state).0r   maskr   s      r+   
<listcomp>z/FigureCanvasTk._mpl_buttons.<locals>.<listcomp>}  s)    GGGtEK$4FGGGGr?   )r   r   r   LEFTRIGHTMIDDLEBACKFORWARD)r   r   s   ` r+   r   zFigureCanvasTk._mpl_buttonsi  s     \X%% v&')w' '*
 
 v&((w' '*,
 	  HGGGyGGGGr?   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 r  r	  )r  r   r  keyr   r  s       r+   r  z1FigureCanvasTk._mpl_modifiers.<locals>.<listcomp>  s>     : : :tS;%:*1S.. *8..r?   )r   r   )r   r  r   s   `` r+   r   zFigureCanvasTk._mpl_modifiers  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)ra   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\   )rZ   r   )ra   rW   rb   s      r+   	new_timerzFigureCanvasTk.new_timer  s"    t~7777777r?   c                 8    | j                                          d S r\   )r   updateri   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   rf   stop_event_loopr   rq   mainloop)ra   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   rl   quitri   s    r+   r6  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tkinterrM   )ra   r>  s     r+   
set_cursorzFigureCanvasTk.set_cursor  sO    	N$$GFO$<<<<< 	 	 	DD	s   &* ==)NNr\   )F)r   )!rr   rs   rt   required_interactive_frameworkr   classpropertymanager_classr_   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r*  r   r   r1  r4  r:  r6  rA  rv   rw   s   @r+   ry   ry      s       %)"&D&'B'BCCMC+ C+ C+ C+ C+ C+J8 8 8 8    B B B  K K K. . .1 1 11 1 1
. 
. 
. 
.6 6 6. . .. . .. . . H H \H* )- : : : : \:2* * *, , ,
, , ,
8 8 8     
" 
" 
" 
"        r?   ry   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  r   
window_dpi)r   valuer    writeF)windowr^   r_   withdrawcanvasr   packr3   TOPBOTHr   wm_frameIntVar_window_dpi_window_dpi_cbnamer   enable_dpi_awarenessr6   	trace_add_update_window_dpi_shown)ra   rQ  r   rO  window_framerc   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_maxr3   TkrP  r7   _get_data_pathr   r   	iconphotor'   is_interactiveshowr   )r|   canvas_classr   r   rO  
icon_fnameicon_imgicon_fname_largeicon_img_largerQ  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_mainlooprO  r7  )r|   managersfirst_managerrD  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 )Nr3   r   H   _rescale)	rW  r   rO  r4   toolbarhasattrr{  rQ  r   )ra   rW   newdpis      r+   r[  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\ r   z/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   
ValueErrorrQ  r   r   )ra   rQ   rP   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+   r  z%FigureManagerTk.show.<locals>.destroy<  s    K%%%%%r?   WM_DELETE_WINDOWzfigure.raise_windowz-topmostr   r   T)r,   r\  rO  protocol	deiconifyrQ  r   r   r   r'   r(   rp  
attributes)ra   r  s   ` r+   rj  zFigureManagerTk.show9  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 )NrN  c                       j                                           j        r.t          j                    s j                                          d S d S d S r\   )rO  r  ru  r   get_num_fig_managersr<  ri   s   r+   delayed_destroyz0FigureManagerTk.destroy.<locals>.delayed_destroyU  s`    K!!!" #3+C+E+E #  """""# # # #r?   r3   r   )rQ  r   r   rl   r   rX  rW  trace_remover	   rc  rO  rq   rf   r3  )ra   rW   r  s   `  r+   r  zFigureManagerTk.destroyH  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\   rO  wm_titleri   s    r+   get_window_titlez FigureManagerTk.get_window_titleb  s    {##%%%r?   c                 :    | j                             |           d S r\   r  )ra   titles     r+   set_window_titlez FigureManagerTk.set_window_titlee  s    U#####r?   c                     t          | j                            d                    }| j                            d|            d S )Nz-fullscreen)boolrO  r  )ra   is_fullscreens     r+   full_screen_togglez"FigureManagerTk.full_screen_toggleh  s@    T[33MBBCC}-.?@@@@@r?   )rr   rs   rt   ru   ru  r_   classmethodrq  rx  r[  r   rj  r  r  r  r  rv   rw   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                   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``.
        NrA   2   )r   r   rQ   rP   zimages/.png)zoompan)togglecommand
   )r   size    
 r   fonttextrH  rb  )r   r  textvariablejustifyrH  rI  )r   r   r3   Framer_   r   r   r<   rQ   _buttons	toolitems_Spacer_Buttonr7   r	   rg  r   add_tooltipr@  r  Font_label_fontLabelrR  r  	StringVarmessage_message_labelr   BOTTOMX)
ra   rQ  rO  r  r  tooltip_text
image_filecallbackbuttonlabels
             r+   r_   zNavigationToolbar2Tk.__init__n  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)rP   3p)padxzUnknown child class %sr  r  N)winfo_children
isinstancer3   ButtonCheckbuttonr}  r  _set_image_for_buttonr  r   pack_configurer  _logwarningwinfo_classr  )ra   r   s     r+   r{  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)ra   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  ra   rW   rc   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ra   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)	rQ  r   r   r   r   r   r<   rP   create_rectangle)ra   r   x0y0rR   rS   rP   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\   )rQ  r   r   r   r   ri   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  r7   rF   )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  )rB   rC   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  rb  g o?r*   r   r   selectcolorrM  x11activebackgroundrA   selectimage)rP   rQ   r  )r  r	   rg  	with_namer   replacewinfo_pixelsr   openexistsconvertr   r   r   _ntimagerB   arrayr  r  _ntimage_altr  r3   r  _windowingsystemr   )ra   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   rb  F)r   r  r  indicatoronvariable	offreliefr  r   )r  r  )r3   r  rV  r  varr  r  r  r   r  rR  r  )ra   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   rP   r  bgr  )rH  r  )r3   r  RIDGErR  r  r  s     r+   r  zNavigationToolbar2Tk._SpacerW  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                            |
|	           |
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>`  s(      773JJJ777777r?   )r'  )r  r   extss      r+   r  z4NavigationToolbar2Tk.save_figure.<locals>.<listcomp>_  sL     
 
 
d 38877$777778
 
 
r?   rM  zsavefig.directoryzSave the figure)r   r  	filetypesdefaultextension
initialdirinitialfiletypevariable)rM  r  r   r   )formatzError saving file)rQ  get_supported_filetypes_groupedsorteditemsget_default_filetypeget_supported_filetypesr3   r  r   ospath
expanduserr'   r(   pathlibPathget_default_filenamestemr@  
filedialogasksaveasfilenamer   dirnamer7   suffixr   r   savefig	Exception
messagebox	showerror)ra   rW   r-  tk_filetypesdefault_extensiondefault_filetypefiletype_variabler.  r/  r0  fname	extensionrX   s                r+   save_figurez NavigationToolbar2Tk.save_figure]  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4E

++ L,-
 <%abb)R//II!"3"7"7"9"9:1=I	FK&&uY&???L 	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)r3   NORMALDISABLED
_nav_stack_poslenr  )ra   	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\   )rr   rs   rt   r_   r{  r  r  r  r  r  r  r  r  r  rM  rY  rv   rw   s   @r+   r  r  m  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  2F 2F 2Fh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  r3   Topleveloverrideredirectgeometryr4   _wrM   r  r  SOLIDrR  )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\   )r  )r   rh  s    r+   hidetipzadd_tooltip.<locals>.hidetip  s&     	 			r?   r   r   )r   )r   r  ri  rk  rh  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)ra   r  r  rR   rS   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  ri   s    r+   r  zRubberbandTk.remove_rubberband  s3    ..3355	7 	7 	7 	7 	7r?   N)rr   rs   rt   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  rA   )r   rQ   rP   r   r  r  r  r  r  rb  )r   r  r  r  )r   r_   toolmanagerrQ  r   r   r   r<   	intervalxr3   r  r   r@  r  r  r  r  rR  r  r  _messager  
_toolitemsrS  r  _groups)ra   rt  rO  xminxmaxrP   rQ   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  r{  ri   s    r+   r{  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   ra   s   r+   ro   z(ToolbarTk.add_toolitem.<locals>.<lambda>  s    d6H6H6N6N r?   )before)
_get_groupframepack_slavesrU  r  r  r  r  rw  
setdefaultappend)ra   r   grouppositionr  descriptionr  framer   r  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  )rx  _add_separatorr3   r  rR  r  Yr  )ra   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  ri   s    r+   r  zToolbarTk._add_separator  s    #++D111r?   c                 0    |                      |           d S r\   )trigger_tool)ra   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  )ra   r   toggledtoolitems       r+   toggle_toolitemzToolbarTk.toggle_toolitem  sd    t&&F- 	$ 	$H $!!!!!!####		$ 	$r?   c                 j    | j                             |g           D ]}|                                 d S r\   )rw  r2   pack_forget)ra   r   r  s      r+   remove_toolitemzToolbarTk.remove_toolitem  sB    ++D"55 	# 	#H  """"	# 	#r?   c                 :    | j                             |           d S r\   )rv  r  r  s     r+   r  zToolbarTk.set_message  s    !r?   r\   )rr   rs   rt   r_   r{  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  rM  ro  ra   rW   s     r+   triggerzSaveFigureTk.trigger  s3    ((3355	7 	7 	7 	7 	7r?   Nrr   rs   rt   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   rP  )r   dialogs    r+   ro   z HelpTk.trigger.<locals>.<lambda>(  s    &,"5">">"@"@ r?   )r   r   rQ  r   _get_help_textdone)ra   rW   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)rr   rs   rt   r3   	TkVersionbackend_versionry   FigureCanvasr{   FigureManagerrx  r7  r  r?   r+   r  r  0  s'        lO!L#M.HHHr?   r  r\   )Xuuidr   
contextlibr   loggingrG   os.pathr8  r;  r   r@  r3   tkinter.filedialogtkinter.fonttkinter.messageboxtkinter.simpledialogr   numpyrB   PILr   r   r_  r'   r   r   r	   r
   matplotlib.backend_basesr   r   r   r   r   r   r   r   r   r   r   r   r   r   matplotlib._pylab_helpersr   rM  r   r   r   	getLoggerrr   r  MOVEHANDPOINTERSELECT_REGIONWAITRESIZE_HORIZONTALRESIZE_VERTICALr?  r,   r1   uuid4hexrL   r>   r5   rZ   ry   r{   r  r  r  _register_tool_classRubberbandBaserm  rr  SaveFigureBaser  ConfigureSubplotsBaser  ToolHelpBaser  Toolbar_toolbar2_class_toolmanager_toolbar_classexportr  r  r?   r+   <module>r     s9     % % % % % %     



                 - - - - - -                 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 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j j j j j% j j jZ	[A [A [A [A [A' [A [A [A|kG kG kG kG kG-rx kG kG kG\	$ $ $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?   