
    %Wh%                     z   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jz                  e>      Z?e#j                  de#j                  de#j                  de#j                  de#j                  de#j                  de#j                  diZGed        ZHi ZId e j                         j                  z   ZLd ZMd0dZN G d de!      ZO G d de      ZP G d d e      ZQ G d! d"e ej                        ZSd# ZT ej                  eP       G d$ d%ej                               ZW G d& d'e"ej                        ZX ej                  eP       G d( d)ej                               ZZ ej                  eP       G d* d+ej                               Z\ ej                  eP       G d, d-ej                               Z^eXZ_eSeQ_`        eXeQ_a        ej                   G d. d/e             Zcy# e1$ rqZ2 e3e2dd      Z4 e3e4dd      Z5 e6e4e1      rN e6e5e7      rEd e8e5      v r;dejr                  ju                  e	jv                        v Z<e<r	 e1d      e2 e1d      e2 dZ2[2ww xY w)1    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	__cause__z&'_tkinter' has no attribute '__file__'z
/uv/pythonzFailed to import tkagg backend. You appear to be using an outdated version of uv's managed Python distribution which is not compatible with Tk. Please upgrade to the latest uv version, then update Python with: `uv python upgrade --reinstall`a  Failed to import tkagg backend. This is likely caused by using a Python executable based on python-build-standalone, which is not compatible with Tk. Recent versions of python-build-standalone should be compatible with Tk. Please update your python version or select another backend.fleurhand2arrow	crosshairwatchsb_h_double_arrowsb_v_double_arrowc               #      K   t        j                         } 	 d  | r*t        j                  d   rt        j                  |        y y y # | r*t        j                  d   rt        j                  |        w w w xY ww)Nztk.window_focus)r
   Win32_GetForegroundWindowmplrcParamsWin32_SetForegroundWindow)
foregrounds    Y/var/www/html/jupyter_env/lib/python3.12/site-packages/matplotlib/backends/_backend_tk.py!_restore_foreground_window_at_endr-   E   se     "<<>JD#,,'8977
C :::#,,'8977
C ::s   A:A	 -A:	.A77A:	mpl_blit_c                     t         j                  |       \  }}}}}|j                  j                  dd|      syt	        j
                  |j                  j                         t        |      ||||       y)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?   T   s`     2<1G.JgtY==fj*=
KK
((*C
OT9g    c                 6   t        j                  |      }|j                  dd \  }}||j                         \  \  }}\  }	}
t	        t        j                  |      d      }t        t        j                  |	      |      }	t	        t        j                  |      d      }t        t        j                  |
      |      }
||	kD  s||
kD  ry||	||
f}t        }nd|d|f}t        }| ||||f}t        t        |            }|t        |<   	 | j                  j                  t         |       y# t        j"                  $ r\}dt        |      vr | j                  j%                  t         t&               | j                  j                  t         |       Y d}~y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   r8   idr2   r4   r5   _blit_tcl_nameTclErrorcreatecommandr?   )r:   aggimager<   r=   r;   heightwidthx1y1x2y2bboxptrr>   argsr9   es                   r,   r6   r6   b   s\     ::hDJJrNMFE!^^-R(2rB#2&B#2'Gbr2r".	eQ'*	 tWgy8D D]FJv3>62;; 3!Q/##NE:>622	3s    D) )F<AFF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                 @    d | _         t        |   |i | || _        y N)_timersuper__init__parent)selfra   rX   kwargs	__class__s       r,   r`   zTimerTk.__init__   s#    $)&)r@   c                     | j                          | j                  j                  | j                  | j                        | _        y r]   )_timer_stopra   after	_interval	_on_timerr^   rb   s    r,   _timer_startzTimerTk._timer_start   s.    kk''Gr@   c                 t    | j                   %| j                  j                  | j                          d | _         y r]   )r^   ra   after_cancelrj   s    r,   rf   zTimerTk._timer_stop   s)    ;;"KK$$T[[1r@   c                 4    t                     j                  su j                  ri j                  dkD  r6 j
                  j                   j                   j                         _        y  j
                  j                   fd       _        y d  _        y )Nr   c                  d     j                   j                   j                   j                        S r]   )ra   rg   rh   ri   rj   s   r,   <lambda>z#TimerTk._on_timer.<locals>.<lambda>   s     DKK--dnndnnM r@   )r_   ri   _singler^   rh   ra   rg   
after_idle)rb   rd   s   `r,   ri   zTimerTk._on_timer   sm    
 ||~~!"kk//O #kk44M DKr@   )	__name__
__module____qualname____doc__r`   rk   rf   ri   __classcell__rd   s   @r,   r[   r[      s     F
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        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 )!FigureCanvasTkr4   c                     t         S r]   )FigureManagerTk)clss    r,   rp   zFigureCanvasTk.<lambda>   s    ? r@   Nc                 "  	
 t         |   |       d | _        d | _        | j	                  d      \  }}t        j                  |d||dd      | _        t        j                  | j                  ||      | _	        | j                  j                  |dz  |dz  | j                        | _        | j                  j                  d	| j                         | j                  j                  d
| j                         | j                  j                  d| j                         | j                  j                  d| j                          | j                  j                  d| j"                         | j                  j                  d| j$                         | j                  j                  d| j&                         dD ](  }| j                  j                  || j(                         * dD ](  }| j                  j                  || j*                         * dD ](  }| j                  j                  || j,                         * dD ](  }| j                  j                  || j.                         * | j                  j1                         }t3        j4                  |       t3        j4                  |      
fd}|j                  d|d      
	fd}|j                  d|d      	| j                  j7                          d | _        d | _        y )NTphysicalwhiter   )master
backgroundrR   rQ   borderwidthhighlightthickness)r   rR   rQ   rB   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                 p            }|        }||j                  d       y |j                  |       S )N<MouseWheel>)unbindscroll_event_windows)eventrb   rootscroll_event_windows_idweakrootweakselfs      r,   r   z5FigureCanvasTk.__init__.<locals>.scroll_event_windows   s?    :D|z#KK0GH,,U33r@   r   +c                             }|        }||j                  d       y | j                  |j                  u rt        d|      j	                          y y )N	<Destroy>close_event)r   widget	_tkcanvasr   _process)r   rb   r   filter_destroy_idr   r   s      r,   filter_destroyz/FigureCanvasTk.__init__.<locals>.filter_destroy   sV    :D|z#KK->?||t~~-=$/88: .r@   r   )r_   r`   _idle_draw_id_event_loop_idget_width_heightr4   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)rb   figurer   whnamer   r   r   r   r   r   r   rd   s            @@@@r,   r`   zFigureCanvasTk.__init__   s    !"$$d$31gA1D >>16&*nn&A&AqD!Q$dmm 'B '-#M4;;7GT%D%DEGT^^4J(@(@AIt'>'>?It'>'>?ND,<,<=> 	?DNNd&=&=>	?O 	BDNNd&@&@A	BO 	ADNNd&?&?@	A
 / 	9DNNd&7&78	9 ~~,,. ;;t$;;t$	4 #'))N<PRU"V	; !IIk>3G  "&*#&*#r@   c                    d }t         j                  dk(  r4t        | j                  j                  j                  dd      dz  d      }n1t         j                  dk(  r| j                  j                  d      dz  }|E| j                  |      r3| j                  d	
      \  }}| j                  j                  ||       y y y )Nwin32r4   scalinggUUUUUU?rB   linux1i`   Tr   rR   rQ   )
sysplatformroundr   r4   r5   winfo_fpixels_set_device_pixel_ratior   	configure)rb   r   ratior   r   s        r,   r   z)FigureCanvasTk._update_device_pixel_ratio  s    <<7" $..++00yAWMqQE\\W$NN006;E!=!=e!D (($(7DAqNN$$1Q$7 "Er@   c                 6   |j                   |j                  }}| j                  j                  }||z  }||z  }| j                  j	                  ||d       | j
                  j                  | j                         | j                  j                  t        |      t        |             | j
                  j                  t        |dz        t        |dz        | j                        | _        t        d|       j                          | j                          y )NF)forwardr   rB   r   resize_event)rR   rQ   r   dpiset_size_inchesr   deleter   r   r   intr   r   r   	draw_idle)rb   r   rR   rQ   dpivalwinchhinchs          r,   r   zFigureCanvasTk.resize  s    U\\v ##E5%#@d99:c%jVE&*nn&A&A	NC
O4== 'B 'B#ND)224r@   c                 j      j                   ry  fd} j                  j                  |       _         y )Nc                  N    	 j                          d _        y # d _        w xY wr]   )drawr   rX   rb   s    r,   	idle_drawz+FigureCanvasTk.draw_idle.<locals>.idle_draw,  s"    *		%)"T"s    	$)r   r   rr   )rb   r   s   ` r,   r   zFigureCanvasTk.draw_idle'  s-    	* "^^66y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_widget4  s     ~~r@   c                     | j                   j                  |j                        | j                  j                  j
                  | j                   j                  |j                        z
  fS r]   )r   canvasxxr   r=   rQ   canvasyyrb   r   s     r,   _event_mpl_coordsz FigureCanvasTk._event_mpl_coords=  sQ     &&uww/  ''$..*@*@*IIK 	Kr@   c                     t        d| g| j                  |      | j                  |      | j                  |      |dj	                          y )Nr   )buttons	modifiersguiEvent)r   r   _mpl_buttons_mpl_modifiersr   r   s     r,   r   z"FigureCanvasTk.motion_notify_eventD  sO    ($ 	#**51	#,,U3!007!		# $,8:r@   c                 ~    t        d| g| j                  |      | j                  |      |dj                          y )Nfigure_enter_eventr   r   r   r   r   r   r   s     r,   r   z!FigureCanvasTk.enter_notify_eventK  A    *D 	&--e4	& $ 3 3E :$	& '/hjr@   c                 ~    t        d| g| j                  |      | j                  |      |dj                          y )Nfigure_leave_eventr   r   r   s     r,   r   z!FigureCanvasTk.leave_notify_eventQ  r   r@   c                 "   | j                   j                          t        |dd       }t        j                  dk(  rdddj                  ||      }t        d| g| j                  |      ||| j                  |      |dj                          y )Nnumdarwin   rB   rB   r   r   )dblclickr   r   )
r   r   getattrr   r   getr   r   r   r   )rb   r   r   r   s       r,   r   z!FigureCanvasTk.button_press_eventW  s      "eUD)<<8#A,""3,C' 	#**51	#36	#AI!007!	# $,8:r@   c                 *    | j                  |d       y )NT)r   )r   r   s     r,   r   z$FigureCanvasTk.button_dblclick_eventc  s    5r@   c                     t        |dd       }t        j                  dk(  rdddj                  ||      }t	        d| g| j                  |      || j                  |      |dj                          y )Nr   r   r   rB   r   r   r   )r   r   r   r   r   r   r   r   )rb   r   r   s      r,   r   z#FigureCanvasTk.button_release_eventf  sy    eUD)<<8#A,""3,C)4 	#**51	#36	#!007!	# $,8:r@   c                     t        |dd       }|dk(  rdn|dk(  rdnd}t        d| g| j                  |      || j                  |      |dj	                          y )	Nr      r      r   r   stepr   r   )r   r   r   r   r   )rb   r   r   r   s       r,   r   zFigureCanvasTk.scroll_evento  sf    eUD)1Hqq"a>4 	#**51	#8<!007!	# $,8:r@   c           
         |j                   j                  |j                  |j                        }|| j                  k7  ry| j                  j                  |j                  |j                         z
        }| j                  j                  j                  | j                  j                  |j                  |j                         z
        z
  }|j                  dz  }t        d| |||| j                  |      |      j                          y)zMouseWheel event processorNx   r   r   )r   winfo_containingx_rooty_rootr   r   winfo_rootxr   r=   rQ   r   winfo_rootydeltar   r   r   )rb   r   r   r   r   r   s         r,   r   z#FigureCanvasTk.scroll_event_windowsw  s     LL))%,,ENN""5<<!--/#AB[[$$~~%%ellQ]]_&DEF{{S >4add.A.A%.H!	##+8:r@   c                    t         j                  dk(  rWt        j                  dft        j                  dft        j
                  dft        j                  dft        j                  dfgnVt        j                  dft        j
                  dft        j                  dft        j                  dft        j                  dfg}|D cg c]  \  }}| j                  |z  s| c}}S c c}}w )Nr      i   i   i   i   )	r   r   r   LEFTRIGHTMIDDLEBACKFORWARDstate)r   r   r   masks       r,   r   zFigureCanvasTk._mpl_buttons  s     \\X% v&')w'  '*
 v&((w'  '*,
 	  (1GtEKK$4FGGGs   C'C'excludec                    t         j                  dk(  rg dnt         j                  dk(  rg dng d}|D cg c]  \  }}}| j                  |z  r||k7  r| c}}}S c c}}}w )Nr   )ctrlr   control)alti   r  shiftr   r  r   )r  )r     r  r  )cmd   r  )r  )r  r  r  r  )r_   @   r_   )r   r   r  )r   r  r   r   r  keys         r,   r   zFigureCanvasTk._mpl_modifiers  sp     \\W$	
 \\X%+

,
 	 -6 : :tS;;%'S.  : 	: :s   !Ac                     |j                   }t        j                  ||j                        }|?| j	                  ||      }d|v r|r|j                  d       dj                  g ||      S y )Nr  r  r   )charr	   _unikey_or_keysym_to_mplkeykeysymr   removejoin)rb   r   unikeyr  modss        r,   _get_keyzFigureCanvasTk._get_key  sl    //E?&&uc&:D$6G$88LdLCL)) r@   c                 ~    t        d| | j                  |      g| j                  |      d|ij                          y )Nkey_press_eventr   r   r%  r   r   r   s     r,   r   zFigureCanvasTk.key_press  s=    "Du%	!(,(>(>u(E	!	!!)r@   c                 ~    t        d| | j                  |      g| j                  |      d|ij                          y )Nkey_release_eventr   r(  r   s     r,   r   zFigureCanvasTk.key_release  s=    $du%	!(,(>(>u(E	!	!!)r@   c                 4    t        | j                  g|i |S r]   )r[   r   )rb   rX   rc   s      r,   	new_timerzFigureCanvasTk.new_timer  s    t~~7777r@   c                 8    | j                   j                          y r]   )r   updaterj   s    r,   flush_eventszFigureCanvasTk.flush_events  s    r@   c                    |dkD  rit        d|z        }|dkD  r,| j                  j                  || j                        | _        n*| j                  j                  | j                        | _        | j                  j                          y )Nr   i  )r   r   rg   stop_event_loopr   rr   mainloop)rb   timeoutmillisecondss      r,   start_event_loopzFigureCanvasTk.start_event_loop  ss    Q;tg~.La&*nn&:&: $"6"6'8# '+nn&?&?(('*#!r@   c                     | j                   r,| j                  j                  | j                          d | _         | j                  j                          y r]   )r   r   rm   quitrj   s    r,   r1  zFigureCanvasTk.stop_event_loop  s;    NN''(;(;<"&Dr@   c                 ~    	 | j                   j                  t        |          y # t        j                  $ r Y y w xY w)N)cursor)r   r   cursordtkinterrN   )rb   r9  s     r,   
set_cursorzFigureCanvasTk.set_cursor  s8    	NN$$GFO$< 		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/  r5  r1  r<  rw   rx   s   @r,   rz   rz      s    %)"&D&&'BCMC+J8  BK.11
.6... H H* )- : :2*,
,
8 
"r@   rz   c                   p     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                 2   || _         t        | 	  ||       | j                   j                          | j                  j
                  j                  t        j                  t        j                  d       t        |j                         d      }t        j                  |dd|       | _        d| _        t        j                   ||j                  j#                               r+| j                  j%                  d| j&                        | _        d	| _        y )
Nr   )sidefillexpandr  r   
window_dpi)r   valuer    writeF)windowr_   r`   withdrawcanvasr   packr4   TOPBOTHr   wm_frameIntVar_window_dpi_window_dpi_cbnamer   enable_dpi_awarenessr7   	trace_add_update_window_dpi_shown)rb   rL  r   rJ  window_framerd   s        r,   r`   zFigureManagerTk.__init__  s    % 	""RWWQ"G
 6??,b199F",6|n*EG"$&&|VYY5I5I5KL&*&6&6&@&@00'2D# r@   c                    t               5  t        j                         (t        j                          t	        j
                          t        j                  d      }|j                          t        t        j                  d            }t        j                  ||      }t        t        j                  d            }t        j                  ||      }|j                  d||        |||      }	 | |	||      }
t        j                         r |
j!                          |	j#                          |
cd d d        S # 1 sw Y   y xY w)N
matplotlib)	classNamezimages/matplotlib.png)filer   zimages/matplotlib_large.pngFr   )r-   r	   "_get_running_interactive_framework_setup_new_guiappr
    Win32_SetProcessDpiAwareness_maxr4   TkrK  r8   _get_data_pathr   r   	iconphotor(   is_interactiveshowr   )r}   canvas_classr   r   rJ  
icon_fnameicon_imgicon_fname_largeicon_img_largerL  managers              r,   create_with_canvasz"FigureManagerTk.create_with_canvas  s    /0 	779A'')!BBDUU\2FOO U11') *J))z&IH"5#7#7-$/  0$//%f6N UNH=!&8F&#v.G!!#  ";	 	 	s   D)D>>Ec                     t        j                         }|rG|d   }t        |      }|j                  ry d|_        	 |j                  j                          d|_        y y # d|_        w xY w)Nr   TF)r   get_all_fig_managerstype_owns_mainlooprJ  r2  )r}   managersfirst_managerr?  s       r,   start_main_loopzFigureManagerTk.start_main_loop2  sj    ++-$QKM /M+++/M(5$$--//4,  05,s   A 	A(c                 $   | j                   j                         }| j                  j                  dd|dz         | j                  r0t        | j                  d      r| j                  j                          | j                  j                          y )Nr4   r   H   _rescale)	rR  r   rJ  r5   toolbarhasattrrv  rL  r   )rb   rX   newdpis      r,   rV  z"FigureManagerTk._update_window_dpi@  sd    !!%%'y&2+6<<GDLL*=LL!!#..0r@   c           	          d}||kD  s||kD  r(t         j                  dk(  rt        d| d| d| d      | j                  j                  j                  ||       y )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   
ValueErrorrL  r   r   )rb   rR   rQ   max_sizes       r,   r   zFigureManagerTk.resizeG  sq    H 1s||w7N!!&r& 2""* ,++, , 	''eF'Cr@   c                 D    t               5   j                  s` fd} j                  j                  d|        j                  j	                           j
                  j                  j                          n j
                  j                          t        j                  d   r` j
                  j                  j                  j                  dd        j
                  j                  j                  j                  dd       d _        d d d        y # 1 sw Y   y xY w)Nc                  0    t        j                         y r]   )r   destroyr   s    r,   r  z%FigureManagerTk.show.<locals>.destroyX  s    KK%r@   WM_DELETE_WINDOWzfigure.raise_windowz-topmostr   r   T)r-   rW  rJ  protocol	deiconifyrL  r   r   r   r(   r)   rk  
attributes)rb   r  s   ` r,   re  zFigureManagerTk.showU  s    .0 	;;&$$%7A%%'%%//1%%'||12##**55j!D##**55j!DDK	 	 	s   DDDc                      j                   j                  r9 j                   j                  j                   j                   j                          j                   j                  r9 j                   j                  j                   j                   j                          j
                  r& j                  j                  d j
                          fd}t        j                         dk(  r2 j                  j                   j                  j                  d|       y  j                  j                           |        y )NrI  c                       j                   j                           j                  r0t        j                         s j                   j                          y y y r]   )rJ  r  rp  r   get_num_fig_managersr7  rj   s   r,   delayed_destroyz0FigureManagerTk.destroy.<locals>.delayed_destroyq  s@    KK!""3+C+C+E  " ,F"r@   r4   r   )rL  r   r   rm   r   rS  rR  trace_remover	   r^  rJ  rr   rg   r.  )rb   rX   r  s   `  r,   r  zFigureManagerTk.destroyd  s    ;;$$KK!!..t{{/H/HI;;%%KK!!..t{{/I/IJ""))'43J3JK	# 335=KK""4;;#4#4aIKK r@   c                 6    | j                   j                         S r]   rJ  wm_titlerj   s    r,   get_window_titlez FigureManagerTk.get_window_title~  s    {{##%%r@   c                 :    | j                   j                  |       y r]   r  )rb   titles     r,   set_window_titlez FigureManagerTk.set_window_title  s    U#r@   c                     t        | j                  j                  d            }| j                  j                  d|        y )Nz-fullscreen)boolrJ  r  )rb   is_fullscreens     r,   full_screen_togglez"FigureManagerTk.full_screen_toggle  s2    T[[33MBC}-.?@r@   )rs   rt   ru   rv   rp  r`   classmethodrl  rs  rV  r   re  r  r  r  r  rw   rx   s   @r,   r|   r|     sb     N*  B 5 51D4&$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 )NavigationToolbar2TkT)pack_toolbarc                Z   ||j                         j                  }t        j                  j	                  | |dt        |j                  j                  j                        d       i | _	        | j                  D ]y  \  }}}}|| j                          | j                  |t        t        j                  d| d            |dv t!        | |            x| j                  |<   }|nt#        ||       { t$        j&                  j)                  |d	
      | _        t        j,                  | | j*                  d      }	|	j/                  t        j0                         t        j2                  |       | _        t        j,                  | | j*                  | j4                  t        j0                        | _        | j6                  j/                  t        j0                         t9        j                  | |       |r0| j/                  t        j:                  t        j<                         yy)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``.
        NrB   2   )r   r   rR   rQ   zimages/.png)zoompan)togglecommand
   )r   size    
 r   fonttextrC  r]  )r   r  textvariablejustifyrC  rD  )r   r   r4   Framer`   r   r   r=   rR   _buttons	toolitems_Spacer_Buttonr8   r	   rb  r   add_tooltipr;  r  Font_label_fontLabelrM  r	  	StringVarmessage_message_labelr   BOTTOMX)
rb   rL  rJ  r  r  tooltip_text
image_filecallbackbuttonlabels
             r,   r`   zNavigationToolbar2Tk.__init__  s    >))+22F
$v1 #FMM$6$6$<$< =b 	 	J 8< 	64D,
H|/3||,,wzl$-GHI#6#D(3	 0< 0 d#f  +5	6 #<<,,&r,B 4+;+;FH


!||40 hhd9I9I48LL/1xx9 	  bhh /##D&1II299244I0 r@   c                    | j                         D ]  }t        |t        j                  t        j                  f      r$t        |d      rt        j                  | |       PQt        |t        j                        r%|j                  d       |j                  d       t        |t        j                        rt        j                  d|j                          | j                  j                  d       y	)
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)rQ   3p)padxzUnknown child class %sr  r  N)winfo_children
isinstancer4   ButtonCheckbuttonrx  r  _set_image_for_buttonr  r   pack_configurer  _logwarningwinfo_classr  )rb   r   s     r,   rv  zNavigationToolbar2Tk._rescale  s     ))+ 	KF&299bnn"=>6=1(>>tVL FBHH-   .%%4%0FBHH-5v7I7IJ	K 	"""+r@   c                    dt         j                  fdt         j                  ffD ]^  \  }}|| j                  v s| j                  |k(  r| j                  |   j                          B| j                  |   j                          ` y )NZoomPan)r   ZOOMPANr  modeselectdeselect)rb   r  r  s      r,   _update_buttons_checkedz,NavigationToolbar2Tk._update_buttons_checked  sn    "EJJ/%1CD 	3JD$t}}$99$MM$'..0MM$'002	3r@   c                 >    t        |   |  | j                          y r]   )r_   r  r  rb   rX   rd   s     r,   r  zNavigationToolbar2Tk.pan  s    T$$&r@   c                 >    t        |   |  | j                          y r]   )r_   r  r  r  s     r,   r  zNavigationToolbar2Tk.zoom  s    d$$&r@   c                 :    | j                   j                  |       y r]   )r  setrb   ss     r,   set_messagez NavigationToolbar2Tk.set_message  s    r@   c                    | j                   j                  r9| j                   j                  j                  | j                   j                         | j                   j                  r9| j                   j                  j                  | j                   j                         | j                   j
                  j                  j                  }||z
  }||z
  }| j                   j                  j                  ||||      | j                   _        | j                   j                  j                  ||||dd      | j                   _        y )Nr   )r   r   )outlinedash)	rL  r   r   r   r   r   r=   rQ   create_rectangle)rb   r   x0y0rS   rT   rQ   s          r,   draw_rubberbandz$NavigationToolbar2Tk.draw_rubberband  s    ;;--KK!!(()K)KL;;--KK!!(()K)KL##((//b[b[KK!!22BB  	* KK!!22BBf 3 > 	*r@   c                    | j                   j                  rJ| j                   j                  j                  | j                   j                         d | j                   _        | j                   j                  rK| j                   j                  j                  | j                   j                         d | j                   _        y y r]   )rL  r   r   r   r   rj   s    r,   remove_rubberbandz&NavigationToolbar2Tk.remove_rubberband   s}    ;;--KK!!(()K)KL15DKK.;;--KK!!(()K)KL15DKK. .r@   c           	      &   j                   yt        j                  dj                         }|j                  |j                  j                  dd            }j                  d      }fdfd}d }t        j                  |d	kD  r|j                         r|n|      5 }|j                  d
      }t        j                  |j                  ||f      |       }|_        dt        j                   j#                  j%                  d                  z  }	 |||	      }
t        j                  |
j                  ||f      |       }|_        ddd        |d      rdi}ndi}t)        t*        j,                        rhj%                  d      dk7  rT| j.                  dk7  rd}n/ d      \  }}} d      \  }}}||z   dz  ||z   dz  ||z   dz  f} ||      r|d<   n|d<    j0                  di |ddd y# 1 sw Y   xY w)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                 D    j                  j                  |             S r]   )	winfo_rgbcget)
color_namer  s    r,   
_get_colorz>NavigationToolbar2Tk._set_image_for_button.<locals>._get_color  s    ##FKK
$;<<r@   c                 P    t        | t              r |       } t        |       dk  S )Ng    @)r  r8   rG   )colorr  s    r,   _is_darkz<NavigationToolbar2Tk._set_image_for_button.<locals>._is_dark  s&    %%"5)u:	))r@   c                     t        j                  |       j                         }|dd df   dk(  j                  d      }|||d df<   t	        j
                  |      S )N.r   r   r   )axis)rC   rD   copyallr   	fromarray)r   r  
image_data
black_masks       r,   _recolor_iconzANavigationToolbar2Tk._set_image_for_button.<locals>._recolor_icon"  s_    E*//1J$S"1"W-277R7@J).Jz2A2~&??:..r@      RGBAr]  g o?r+   r   r   selectcolorrH  x11activebackgroundrB   selectimage)rQ   rR    )r  r	   rb  	with_namer   replacewinfo_pixelsr   openexistsconvertr   r   r   _ntimagerC   arrayr  r  _ntimage_altr  r4   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    % ++Hf6H6HI!++%%fl;=
""5)	=	*
	/ ZZtbyZ5F5F5H
)+ 	,.0F#B&&ryy$'>tLE#FO &  \!:;*= =J"2z2F**tTl+D:I"+F	, L!
 $Y/L#U+L
 vr~~.M*b0$$-+
 (6
B'(:;
B "2qy2b5!)beQY?$.7]+.3]+C<CUCY	, 	,s   %B/HHc           
      n   |st        j                  | ||ddd      }n:t        j                  |       }t        j                  | ||d|ddd      }||_        ||_        |t        j                  | |       n|j                  | j                         |j                  t         j                  	       |S )
Nflatgroover   )r   r  r  relief
overreliefr   r]  F)r   r  r  indicatoronvariable	offreliefr  r   )r  r  )r4   r  rQ  r  varr  r  r  r   r  rM  r  )rb   r  r  r  r  br  s          r,   r  zNavigationToolbar2Tk._ButtonW  s    		$(A ))4(C$U8A
 AE"! 66tQ?KKT--K.	BGGr@   c                     t        j                  | dt         j                  d      }|j                  t         j                  d       |S )Nr  DarkGray)r   rQ   r  bgr  )rC  r  )r4   r  RIDGErM  r  r  s     r,   r  zNavigationToolbar2Tk._Spacers  s3    HHDrxxJO	BGG$'r@   c           	         | j                   j                         }t        |j                               D cg c]  \  }}|dj	                  d |D              f! }}}| j                   j                         }| j                   j                         |   }t        j                  | j                   j                         |      }d}	t        j                  j                  t        j                  d         }
t        j                   | j                   j#                               j$                  }t&        j(                  j+                  | j                   j                         j,                  d||	|
||      }|dv ry |
dk7  r9t        j                  j/                  t1        |            t        j                  d<   t        j                   |      j2                  dd  dk7  rd }n||j5                            d	   }	 | j                   j6                  j9                  ||
       |S c c}}w # t:        $ r3}t&        j<                  j?                  dt1        |             Y d }~y d }~ww xY w)N c              3   &   K   | ]	  }d |   yw)z*.Nr  ).0exts     r,   	<genexpr>z3NavigationToolbar2Tk.save_figure.<locals>.<genexpr>|  s     73bJ7s   rH  zsavefig.directoryzSave the figure)r   r  	filetypesdefaultextension
initialdirinitialfiletypevariable)rH  r  r   r   )formatzError saving file) rL  get_supported_filetypes_groupedsorteditemsr"  get_default_filetypeget_supported_filetypesr4   r  r   ospath
expanduserr(   r)   pathlibPathget_default_filenamestemr;  
filedialogasksaveasfilenamer   dirnamer8   suffixr   r   savefig	Exception
messagebox	showerror)rb   rX   r(  r   extstk_filetypesdefault_extensiondefault_filetypefiletype_variabler)  r*  r+  fname	extensionrY   s                  r,   save_figurez NavigationToolbar2Tk.save_figurey  s   KK??A	 %Y__%67
d 3887$778
 

 !KK<<>;;>>@ARSLL)B)B)DFVW WW''5H(IJ
 ll4;;#C#C#EFKK""44;;,,.55#"-!#* 5  HE
+ LL,-
 <<%%ab)R/I!"3"7"7"9:1=I	FKK&&uY&?L]
^  	F(()<c!fEE	Fs   $H6(H% %	I!.)II!c                 d   t         j                  t         j                  d}| j                  j                  dkD  }| j                  j                  t        | j                        dz
  k  }d| j                  v r||   | j                  d   d<   d| j                  v r||   | j                  d   d<   y y )N)TFr   r   Backr  Forward)r4   NORMALDISABLED
_nav_stack_poslenr  )rb   	state_mapcan_backcan_forwards       r,   set_history_buttonsz(NavigationToolbar2Tk.set_history_buttons  s    99R[[9	??''!+oo**S-AA-EET]]"-6x-@DMM&!'*%09+0FDMM)$W- &r@   r]   )rs   rt   ru   r`   rv  r  r  r  r  r  r  r  r  r  rI  rU  rw   rx   s   @r,   r  r    sR    51D 51n,63''? 6MD^82FhGr@   r  c                 n     d  fd}fd} j                  d|        j                  d|       y )Nc                 :   ssyj                  d      \  }}}}|j                         z   j                         z   }|j                         z   }t	        j
                        j                  d       j                  d| d|        	 j                  j                  ddj                  dd       t	        j                  t        j                  t        j                  d	      }|j                  d
       y# t        j                  $ r Y ^w xY w)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  r4   Topleveloverrideredirectgeometryr5   _wrN   r  r  SOLIDrM  )r   r   r   _r  r  	tipwindowr   s        r,   showtipzadd_tooltip.<locals>.showtip  s     D[[*
1a""$$v'9'9';;""$$KK'	""1%Qqc1#;'	LLA%y||$m5
 rww "a9


	 {{ 		s   )D DDc                 .    rj                          d y r]   )r  )r   rd  s    r,   hidetipzadd_tooltip.<locals>.hidetip  s    	r@   r   r   )r   )r   r  re  rg  rd  s   ``  @r,   r  r    s0    I* KK	7#
KK	7#r@   c                       e Zd Zd Zd Zy)RubberbandTkc                 T    t         j                  | j                         d ||||       y r]   )r  r  "_make_classic_style_pseudo_toolbar)rb   r  r  rS   rT   s        r,   r  zRubberbandTk.draw_rubberband  s'    ,,335tRR	Mr@   c                 J    t         j                  | j                                y r]   )r  r  rk  rj   s    r,   r  zRubberbandTk.remove_rubberband  s    ..335	7r@   N)rs   rt   ru   r  r  r  r@   r,   ri  ri    s    M7r@   ri  c                   D    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zy)	ToolbarTkNc                    t        j                  | |       |.| j                  j                  j	                         j
                  }| j                  j                  j                  j                  j                  \  }}d||z
  }}t        j                  j                  | |t        |      t        |      d       t        j                  j                  d      | _        t        j                   | | j                  d      }|j#                  t        j$                         t        j&                  | 	      | _        t        j                   | | j                  | j(                  
      | _        | j*                  j#                  t        j$                         i | _        | j#                  t        j.                  t        j0                         i | _        y )Nr  rB   )r   rR   rQ   r   r  r  r  r  r  r]  )r   r  r  r  )r   r`   toolmanagerrL  r   r   r   r=   	intervalxr4   r  r   r;  r  r  r  r  rM  r	  r  _messager  
_toolitemsrN  r  _groups)rb   rp  rJ  xminxmaxrQ   rR   r  s           r,   r`   zToolbarTk.__init__  sV   ""45>%%,,::<CCF%%,,3388BB
dD4K
$v #E
3v;&' 	 	) #<<,,",5
 4+;+;FH


!D1 hhd9I9I48MMC  bhh /		rvvBDD	)r@   c                 ,    t         j                  |       S r]   )r  rv  rj   s    r,   rv  zToolbarTk._rescale  s    #,,T22r@   c                 n     j                  |      }|j                         }|t        |      k\  s|dk  rd }	n||   }	t        j	                  ||| fd      }
|
j                  |	       |t        |
|        j                  j                  g         j                     j                  |
       y )Nr   c                  &    j                         S r]   )_button_click)r   rb   s   r,   rp   z(ToolbarTk.add_toolitem.<locals>.<lambda>
  s    d6H6H6N r@   )before)
_get_groupframepack_slavesrQ  r  r  r  r  rs  
setdefaultappend)rb   r   grouppositionr  descriptionr  framer   r{  r  s   ``         r,   add_toolitemzToolbarTk.add_toolitem  s    $$U+##%s7|#x!|FX&F%--eT:v.NPV,",""4,$$V,r@   c                 @   || j                   vr| j                   r| j                          t        j                  | d      }|j	                  t        j
                  t        j                         | j                  |_        || j                   |<   | j                   |   S )Nr   )r   r   r  )rt  _add_separatorr4   r  rM  r  Yr  )rb   r  r  s      r,   r|  zToolbarTk._get_groupframe  st    $||##%HHDa8EJJBGG"$$J/ $ 0 0E"'DLL||E""r@   c                 ,    t         j                  |       S r]   )r  r  rj   s    r,   r  zToolbarTk._add_separator  s    #++D11r@   c                 &    | j                  |       y r]   )trigger_tool)rb   r   s     r,   rz  zToolbarTk._button_click  s    $r@   c                     || j                   vry | j                   |   D ]%  }|r|j                          |j                          ' y r]   )rs  r  r  )rb   r   toggledtoolitems       r,   toggle_toolitemzToolbarTk.toggle_toolitem!  sB    t&- 	$H!!!#		$r@   c                 f    | j                   j                  |g       D ]  }|j                           y r]   )rs  r3   pack_forget)rb   r   r  s      r,   remove_toolitemzToolbarTk.remove_toolitem*  s.    ++D"5 	#H  "	#r@   c                 :    | j                   j                  |       y r]   )rr  r  r  s     r,   r  zToolbarTk.set_message.  s    !r@   r]   )rs   rt   ru   r`   rv  r  r|  r  rz  r  r  r  r  r@   r,   rn  rn    s/    23- #2 $#r@   rn  c                       e Zd Zd Zy)SaveFigureTkc                 J    t         j                  | j                                y r]   )r  rI  rk  rb   rX   s     r,   triggerzSaveFigureTk.trigger4  s    ((335	7r@   Nrs   rt   ru   r  r  r@   r,   r  r  2  s    7r@   r  c                       e Zd Zd Zy)ConfigureSubplotsTkc                 .    t         j                  |        y r]   )r  configure_subplotsr  s     r,   r  zConfigureSubplotsTk.trigger;  s    //5r@   Nr  r  r@   r,   r  r  9  s    6r@   r  c                       e Zd Zd Zy)HelpTkc                     t        | j                  j                  j                  | j	                         dg      fd_        y )NOKc                 L    j                   j                  j                         S r]   )r  r   rK  )r   dialogs    r,   rp   z HelpTk.trigger.<locals>.<lambda>D  s    &,,"5"5">">"@ r@   )r   r   rL  r   _get_help_textdone)rb   rX   r  s     @r,   r  zHelpTk.triggerA  s7    KK(($*=*=*?$I@r@   Nr  r  r@   r,   r  r  ?  s    Ar@   r  c                   D    e Zd Zej                  ZeZeZ	ej                  Zy)
_BackendTkN)rs   rt   ru   r4   	TkVersionbackend_versionrz   FigureCanvasr|   FigureManagerrs  r2  r  r@   r,   r  r  L  s     llO!L#M..Hr@   r  r]   )duuidr   
contextlibr   loggingrH   os.pathr3  r6  r   r;  r4   tkinter.filedialogtkinter.fonttkinter.messageboxtkinter.simpledialogr   numpyrC   PILr   r   rZ  r(   r   r   r	   r
   matplotlib.backend_basesr   r   r   r   r   r   r   r   r   r   r   r   r   r   matplotlib._pylab_helpersr   rH  r   r   r   ImportErrorrY   r   cause1cause2r  AttributeErrorr8   r4  realpath
executableis_uv_python	getLoggerrs   r  MOVEHANDPOINTERSELECT_REGIONWAITRESIZE_HORIZONTALRESIZE_VERTICALr:  r-   r2   uuid4hexrM   r?   r6   r[   rz   r|   r  r  r  _register_tool_classRubberbandBaseri  rn  SaveFigureBaser  ConfigureSubplotsBaser  ToolHelpBaser  Toolbar_toolbar2_class_toolmanager_toolbar_classexportr  r  r@   r,   <module>r     s     %     
     -    D DB B B B *J: w"LL'LL'OOW;LL'20 D D 
ztzz|///33l#i #Lj% jZ	[A' [A|kG-rxx kG\	$D $##N37=// 7 47K!288 K\ $##N37=// 7 47 $##N36-== 6 46
 $##N3A]'' A 4A "6 -6 * 
/ / /a!  QT*FV[$/F6;'v~.4FC#(8(8(HI?
  -  	3s   <I J:	A,J55J: