
    h                        S SK r S SKrS SKJr  S SKrS SKrS SKrS SKrS SK	r	S SK
rS SKr
S SKr
S SKr
S SKJr  S SKrS SKJrJr  S SKrS SKJrJrJrJr  S SKJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*  S SK+J,r,  SS	K-J.r.  SS
K.J/r/J0r0  \Rb                  " \25      r3\#Rh                  S\#Rj                  S\#Rl                  S\#Rn                  S\#Rp                  S\#Rr                  S\#Rt                  S0r;\S 5       r<0 r=S\ R|                  " 5       R~                  -   r@S rAS+S jrB " S S\!5      rC " S S\5      rD " S S\5      rE " S S\ \R                  5      rGS rH\R                  " \D5       " S S \R                  5      5       rK " S! S"\"\R                  5      rL\R                  " \D5       " S# S$\R                  5      5       rN\R                  " \D5       " S% S&\R                  5      5       rP\R                  " \D5       " S' S(\R                  5      5       rR\LrS\G\ElT        \L\ElU        \R                   " S) S*\5      5       rWg),    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               #   &  #    [         R                  " 5       n  S v   U (       a0  [        R                  S   (       a  [         R                  " U 5        g g g ! U (       a0  [        R                  S   (       a  [         R                  " U 5        f f f = f7f)Nztk.window_focus)r
   Win32_GetForegroundWindowmplrcParamsWin32_SetForegroundWindow)
foregrounds    Q/var/www/html/env/lib/python3.13/site-packages/matplotlib/backends/_backend_tk.py!_restore_foreground_window_at_endr,   )   sd     "<<>JD#,,'8977
C :::#,,'8977
C ::s   BA 8B9BB	mpl_blit_c                     [         R                  U 5      u  pp4nUR                  R                  SSU5      (       d  g[        R
                  " UR                  R                  5       [        U5      X%UU5        g)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<1G.JgY==fj*==
KK
((*C
OTg    c                 :   [         R                  " U5      nUR                  SS u  pVUb  UR                  5       u  u  pxu  p[	        [
        R                  " U5      S5      n[        [
        R                  " U	5      U5      n	[	        [
        R                  " U5      S5      n[        [
        R                  " U
5      U5      n
Xy:  d  X:  a  gXyX4n[        nOSUSU4n[        nXX+U4n[        [        U5      5      nU[        U'    U R                  R                  [         U5        g! [        R"                   a^  nS[        U5      ;  a  e U R                  R%                  [         [&        5        U R                  R                  [         U5         SnAgSnAff = f)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   sJ     ::hDJJrNMF!^^-(2B#2&B#2'G2".	eQ'*	 Wy8D D]FJv3>62;; 3!Q/##NE:>622	3s    D( (F<AFFc                   D   ^  \ rS rSrSrU 4S jrS rS rU 4S jrSr	U =r
$ )TimerTk|   z<Subclass of `backend_bases.TimerBase` using Tk timer events.c                 @   > S U l         [        TU ]  " U0 UD6  Xl        g N)_timersuper__init__parent)selfra   rW   kwargs	__class__s       r+   r`   TimerTk.__init__   s!    $)&)r?   c                     U R                  5         U R                  R                  U R                  U R                  5      U l        g r]   )_timer_stopra   after	_interval	_on_timerr^   rb   s    r+   _timer_startTimerTk._timer_start   s.    kk''Gr?   c                 v    U R                   b%  U R                  R                  U R                   5        S U l         g r]   )r^   ra   after_cancelrk   s    r+   rg   TimerTk._timer_stop   s)    ;;"KK$$T[[1r?   c                 L  >^  [         TT ]  5         T R                  (       d|  T R                  (       ak  T R                  S:  a6  T R
                  R                  T R                  T R                  5      T l        g T R
                  R                  U 4S j5      T l        g S T l        g )Nr   c                  d   > T R                   R                  T R                  T R                  5      $ r]   )ra   rh   ri   rj   rk   s   r+   <lambda>#TimerTk._on_timer.<locals>.<lambda>   s    DKK--dnndnnMr?   )r_   rj   _singler^   ri   ra   rh   
after_idle)rb   rd   s   `r+   rj   TimerTk._on_timer   sm    
 ||~~!"kk//O #kk44M DKr?   )r^   ra   )__name__
__module____qualname____firstlineno____doc__r`   rl   rg   rj   __static_attributes____classcell__rd   s   @r+   rZ   rZ   |   s     F
H
 r?   rZ   c                     ^  \ rS rSrSr\R                  " S 5      rSU 4S jjrS S jr	S r
S rS	 rS
 rS rS rS rS!S jrS rS rS rS r\S 5       r\SS.S j5       rS rS rS rS rS rS"S jrS rS r Sr!U =r"$ )#FigureCanvasTk   r3   c                     [         $ r]   )FigureManagerTk)clss    r+   rs   FigureCanvasTk.<lambda>   s    ?r?   Nc           	        >^	^
^^ [         TU ]  U5        S U l        S U l        U R	                  SS9u  p4[
        R                  " USX4SSS9U l        [
        R                  " U R                  X4S9U l	        U R                  R                  US-  US-  U R                  S9U l        U R                  R                  S	U R                  5        U R                  R                  S
U R                  5        U R                  R                  SU R                  5        U R                  R                  SU R                   5        U R                  R                  SU R"                  5        U R                  R                  SU R$                  5        U R                  R                  SU R&                  5        S H(  nU R                  R                  XPR(                  5        M*     S H(  nU R                  R                  XPR*                  5        M*     S H(  nU R                  R                  XPR,                  5        M*     S H(  nU R                  R                  XPR.                  5        M*     U R                  R1                  5       n[2        R4                  " U 5      m[2        R4                  " U5      mU
UU4S jnUR                  SUS5      m
U	UU4S jnUR                  SUS5      m	U R                  R7                  5         S U l        S U l        g )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                 t   > T" 5       nUc  T" 5       nUb  UR                  ST5        g UR                  U 5      $ )N<MouseWheel>)unbindscroll_event_windows)eventrb   rootscroll_event_windows_idweakrootweakselfs      r+   r   5FigureCanvasTk.__init__.<locals>.scroll_event_windows   s?    :D|z#KK0GH,,U33r?   r   +c                    > T" 5       nUc  T" 5       nUb  UR                  ST5        g U R                  UR                  L a  [        SU5      R	                  5         g g )N	<Destroy>close_event)r   widget	_tkcanvasr   _process)r   rb   r   filter_destroy_idr   r   s      r+   filter_destroy/FigureCanvasTk.__init__.<locals>.filter_destroy   sV    :D|z#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)rb   figurer   whnamer   r   r   r   r   r   r   rd   s            @@@@r+   r`   FigureCanvasTk.__init__   si    !"$$d$3g1D >>6&*nn&A&AqD!Q$dmm 'B '-#M4;;7GT%D%DEGT^^4J(@(@AIt'>'>?It'>'>?ND,<,<=>DNN&=&=> ?ODNN&@&@AOODNN&?&?@O
 /DNN&7&78 / ~~,,. ;;t$;;t$	4 #'))N<PRU"V	; !IIk>3G  "&*#&*#r?   c                    S n[         R                  S:X  a4  [        U R                  R                  R                  SS5      S-  S5      nO2[         R                  S:X  a  U R                  R                  S5      S-  nUbB  U R                  U5      (       a+  U R                  S	S
9u  p4U R                  R                  X4S9  g g g )Nwin32r3   scalinggUUUUUU?rA   linux1i`   Tr   rQ   rP   )
sysplatformroundr   r3   r4   winfo_fpixels_set_device_pixel_ratior   	configure)rb   r   ratior   r   s        r+   r   )FigureCanvasTk._update_device_pixel_ratio   s    <<7" $..++00yAWMqQE\\W$NN006;E!=!=e!D!D (($(7DANN$$1$7 "Er?   c                    UR                   UR                  p2U R                  R                  nX$-  nX4-  nU R                  R	                  XVSS9  U R
                  R                  U R                  5        U R                  R                  [        U5      [        U5      S9  U R
                  R                  [        US-  5      [        US-  5      U R                  S9U l        [        SU 5      R                  5         U R                  5         g )NF)forwardr   rA   r   resize_event)rQ   rP   r   dpiset_size_inchesr   deleter   r   r   intr   r   r   	draw_idle)rb   r   rQ   rP   dpivalwinchhinchs          r+   r   FigureCanvasTk.resize   s    U\\v ##E%#@d99:c%jVE&*nn&A&A	NC
O4== 'B 'B#ND)224r?   c                 v   ^  T R                   (       a  g U 4S jnT R                  R                  U5      T l         g )Nc                  N   >  TR                  5         S Tl        g ! S Tl        f = fr]   )drawr   rW   rb   s    r+   	idle_draw+FigureCanvasTk.draw_idle.<locals>.idle_draw  s"    *		%)"T"s    	$)r   r   rv   )rb   r   s   ` r+   r   FigureCanvasTk.draw_idle  s-    	* "^^66yAr?   c                     U R                   $ )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   rk   s    r+   get_tk_widgetFigureCanvasTk.get_tk_widget  s     ~~r?   c                     U R                   R                  UR                  5      U R                  R                  R
                  U R                   R                  UR                  5      -
  4$ r]   )r   canvasxxr   r<   rP   canvasyyrb   r   s     r+   _event_mpl_coords FigureCanvasTk._event_mpl_coords!  sQ     &&uww/  ''$..*@*@*IIK 	Kr?   c                     [        SU /U R                  U5      Q7U R                  U5      U R                  U5      US.6R	                  5         g )Nr   )buttons	modifiersguiEvent)r   r   _mpl_buttons_mpl_modifiersr   r   s     r+   r   "FigureCanvasTk.motion_notify_event(  sO    ($ 	#**51	#,,U3!007!		# $,8:r?   c                 ~    [        SU /U R                  U5      Q7U R                  U5      US.6R                  5         g )Nfigure_enter_eventr   r   r   r   r   r   r   s     r+   r   !FigureCanvasTk.enter_notify_event/  A    *D 	&--e4	& $ 3 3E :$	& '/hjr?   c                 ~    [        SU /U R                  U5      Q7U R                  U5      US.6R                  5         g )Nfigure_leave_eventr   r   r   s     r+   r   !FigureCanvasTk.leave_notify_event5  r   r?   c                 "   U R                   R                  5         [        USS 5      n[        R                  S:X  a  SSS.R                  X35      n[        SU /U R                  U5      QUP7UU R                  U5      US.6R                  5         g )Nnumdarwin   rA   rA   r  r   )dblclickr   r   )
r   r   getattrr   r   getr   r   r   r   )rb   r   r  r  s       r+   r   !FigureCanvasTk.button_press_event;  s      "eUD)<<8#A,""3,C' 	#**51	#36	#AI!007!	# $,8:r?   c                 $    U R                  USS9  g )NT)r  )r   r   s     r+   r   $FigureCanvasTk.button_dblclick_eventG  s    5r?   c                     [        USS 5      n[        R                  S:X  a  SSS.R                  X"5      n[	        SU /U R                  U5      QUP7U R                  U5      US.6R                  5         g )Nr  r  r  rA   r  r   r   )r	  r   r   r
  r   r   r   r   )rb   r   r  s      r+   r   #FigureCanvasTk.button_release_eventJ  sw    eUD)<<8#A,""3,C)4 	#**51	#36	#!007!	# $,8:r?   c                     [        USS 5      nUS:X  a  SO	US:X  a  SOSn[        SU /U R                  U5      Q7UU R                  U5      US.6R	                  5         g )	Nr     r      r   r   stepr   r   )r	  r   r   r   r   )rb   r   r  r  s       r+   r   FigureCanvasTk.scroll_eventS  sf    eUD)1Hqq"a>4 	#**51	#8<!007!	# $,8:r?   c           
         UR                   R                  UR                  UR                  5      nX R                  :w  a  gU R                  R                  UR                  UR                  5       -
  5      nU R                  R                  R                  U R                  R                  UR                  UR                  5       -
  5      -
  nUR                  S-  n[        SU X4XPR                  U5      US9R                  5         g)zMouseWheel event processorNx   r   r  )r   winfo_containingx_rooty_rootr   r   winfo_rootxr   r<   rP   r   winfo_rootydeltar   r   r   )rb   r   r   r   r   r  s         r+   r   #FigureCanvasTk.scroll_event_windows[  s     LL))%,,ENN""5<<!--/#AB[[$$~~%%ellQ]]_&DEF{{S >4d.A.A%.H!	##+8:r?   c                    [         R                  S:X  aW  [        R                  S4[        R                  S4[        R
                  S4[        R                  S4[        R                  S4/OV[        R                  S4[        R
                  S4[        R                  S4[        R                  S4[        R                  S4/nU VVs/ s H  u  p#U R                  U-  (       d  M  UPM     snn$ s  snnf )Nr     i   i   i   i   )	r   r   r   LEFTRIGHTMIDDLEBACKFORWARDstate)r   r   r   masks       r+   r   FigureCanvasTk._mpl_buttonsi  s     \\X% v&')w'  '*
 v&((w'  '*,
 	  (1GyEKK$4FyGGGs   C0&C0excludec                    [         R                  S:X  a  / SQO[         R                  S:X  a  / SQO/ SQnU VVVs/ s H%  u  p4nU R                  U-  (       d  M  X:w  d  M#  UPM'     snnn$ s  snnnf )Nr   )ctrlr  control)alti   r0  shiftr   r2  r  )r-  )r0     r0  r1  )cmd   r4  )r-  )r0  r5  r0  r1  )r_   @   r_   )r   r   r'  )r   r+  r   r   r(  keys         r+   r   FigureCanvasTk._mpl_modifiers  sq     \\W$	
 \\X%+

,
 	 -6 :IS;;% *1. I : 	: :s   A,A,!A,c                     UR                   n[        R                  " X!R                  5      nUbB  U R	                  XS9nSU;   a  U(       a  UR                  S5        SR                  / UQUP5      $ g )Nr*  r2  r   )charr	   _unikey_or_keysym_to_mplkeykeysymr   removejoin)rb   r   unikeyr7  modss        r+   _get_keyFigureCanvasTk._get_key  sh    //E?&&u&:D$6G$88LdLCL)) r?   c                 ~    [        SU U R                  U5      /U R                  U5      Q7SU06R                  5         g )Nkey_press_eventr   r   rA  r   r   r   s     r+   r   FigureCanvasTk.key_press  s=    "Du%	!(,(>(>u(E	!	!!)r?   c                 ~    [        SU U R                  U5      /U R                  U5      Q7SU06R                  5         g )Nkey_release_eventr   rE  r   s     r+   r   FigureCanvasTk.key_release  s=    $du%	!(,(>(>u(E	!	!!)r?   c                 4    [        U R                  /UQ70 UD6$ r]   )rZ   r   )rb   rW   rc   s      r+   	new_timerFigureCanvasTk.new_timer  s    t~~7777r?   c                 8    U R                   R                  5         g r]   )r   updaterk   s    r+   flush_eventsFigureCanvasTk.flush_events  s    r?   c                    US:  ai  [        SU-  5      nUS:  a+  U R                  R                  X R                  5      U l        O*U R                  R                  U R                  5      U l        U R                  R                  5         g )Nr   i  )r   r   rh   stop_event_loopr   rv   mainloop)rb   timeoutmillisecondss      r+   start_event_loopFigureCanvasTk.start_event_loop  sq    Q;tg~.La&*nn&:&: "6"6'8# '+nn&?&?(('*#!r?   c                     U R                   (       a,  U R                  R                  U R                   5        S U l         U R                  R                  5         g r]   )r   r   ro   quitrk   s    r+   rR  FigureCanvasTk.stop_event_loop  s;    NN''(;(;<"&Dr?   c                 z     U R                   R                  [        U   S9  g ! [        R                   a     g f = f)N)cursor)r   r   cursordtkinterrM   )rb   r\  s     r+   
set_cursorFigureCanvasTk.set_cursor  s8    	NN$$GFO$< 		s    # ::)r   r   r   r   r   r   r   )NNr]   )F)r   )#rx   ry   rz   r{   required_interactive_frameworkr   classpropertymanager_classr`   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r   rA  r   r   rK  rO  rV  rR  r_  r}   r~   r   s   @r+   r   r      s    %)"&&'BCMC+J8  BK.11
.6... H H* )- : :2*,
,
8 
" r?   r   c                   z   ^  \ rS rSrSrSrU 4S jr\S 5       r\S 5       r	S r
S rS	 rS
 rS rS rS rSrU =r$ )r   i  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                 .  > X0l         [        TU ]	  X5        U R                   R                  5         U R                  R
                  R                  [        R                  [        R                  SS9  [        UR                  5       S5      n[        R                  " USSU 3S9U l        SU l        [        R                   " XCR                  R#                  5       5      (       a+  U R                  R%                  SU R&                  5      U l        S	U l        g )
Nr   )sidefillexpandr3  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)rb   rp  r  rn  window_framerd   s        r+   r`   FigureManagerTk.__init__  s    % 	""RWWQ"G
 6??,b199F",6|n*EG"$&&|YY5I5I5KLL&*&6&6&@&@00'2D# r?   c                    [        5          [        R                  " 5       c*  [        R                  " 5         [        R
                  " 5         [        R                  " SS9nUR                  5         [        [        R                  " S5      5      n[        R                  " XTS9n[        [        R                  " S5      5      n[        R                  " XtS9nUR                  SX5        U" X$S9n	U " XU5      n
[        R                  " 5       (       a   U
R!                  5         U	R#                  5         U
sS S S 5        $ ! , (       d  f       g = f)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   Tkro  r7   _get_data_pathr   r   	iconphotor'   is_interactiveshowr   )r   canvas_classr   r  rn  
icon_fnameicon_imgicon_fname_largeicon_img_largerp  managers              r+   create_with_canvas"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$//%6N UN=!&8F&v.G!!##  "; 100s   D'D<<
E
c                     [         R                  " 5       nU(       aL  US   n[        U5      nUR                  (       a  g SUl         UR                  R                  5         SUl        g g ! SUl        f = f)Nr   TF)r   get_all_fig_managerstype_owns_mainlooprn  rS  )r   managersfirst_managerrc  s       r+   start_main_loopFigureManagerTk.start_main_loop  sj    ++-$QKM /M+++/M(5$$--//4,  05,s   A* *	A3c                 8   U R                   R                  5       nU R                  R                  SSUS-  5        U R                  (       a5  [        U R                  S5      (       a  U R                  R                  5         U R                  R                  5         g )Nr3   r   H   _rescale)	rv  r
  rn  r4   toolbarhasattrr  rp  r   )rb   rW   newdpis      r+   rz  "FigureManagerTk._update_window_dpi$  sg    !!%%'y&2+6<<GDLL*==LL!!#..0r?   c           	          SnX:  d  X#:  a)  [         R                  S:X  a  [        SU SU SU S35      eU R                  R                  R                  XS9  g )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   
ValueErrorrp  r   r   )rb   rQ   rP   max_sizes       r+   r   FigureManagerTk.resize+  sk     1s||w7N!!&r& 2""* ,++, , 	''e'Cr?   c                 d  ^  [        5          T R                  (       da  U 4S jnT R                  R                  SU5        T R                  R	                  5         T R
                  R                  R                  5         OT R
                  R                  5         [        R                  S   (       a`  T R
                  R                  R                  R                  SS5        T R
                  R                  R                  R                  SS5        ST l        S S S 5        g ! , (       d  f       g = f)Nc                  2   > [         R                  " T5        g r]   )r   destroyr   s    r+   r  %FigureManagerTk.show.<locals>.destroy<  s    KK%r?   WM_DELETE_WINDOWzfigure.raise_windowz-topmostr   r   T)r,   r{  rn  protocol	deiconifyrp  r   r   r   r'   r(   r  
attributes)rb   r  s   ` r+   r  FigureManagerTk.show9  s    .0;;&$$%7A%%'%%//1%%'||12##**55j!D##**55j!DDK 100s   DD!!
D/c                   ^  T R                   R                  (       a9  T R                   R                  R                  T R                   R                  5        T R                   R                  (       a9  T R                   R                  R                  T R                   R                  5        T R
                  (       a&  T R                  R                  ST R
                  5        U 4S jn[        R                  " 5       S:X  a2  T R                  R                  T R                  R                  SU5        g T R                  R                  5         U" 5         g )Nrm  c                     > T R                   R                  5         T R                  (       a6  [        R                  " 5       (       d  T R                   R                  5         g g g r]   )rn  r  r  r   get_num_fig_managersrY  rk   s   r+   delayed_destroy0FigureManagerTk.destroy.<locals>.delayed_destroyU  sC    KK!""3+C+C+E+E  " ,F"r?   r3   r   )rp  r   r   ro   r   rw  rv  trace_remover	   r  rn  rv   rh   rN  )rb   rW   r  s   `  r+   r  FigureManagerTk.destroyH  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    U R                   R                  5       $ r]   rn  wm_titlerk   s    r+   get_window_title FigureManagerTk.get_window_titleb  s    {{##%%r?   c                 :    U R                   R                  U5        g r]   r  )rb   titles     r+   set_window_title FigureManagerTk.set_window_titlee  s    U#r?   c                     [        U R                  R                  S5      5      nU R                  R                  SU(       + 5        g )Nz-fullscreen)boolrn  r  )rb   is_fullscreens     r+   full_screen_toggle"FigureManagerTk.full_screen_toggleh  s2    T[[33MBC}-.?@r?   )r{  rv  rw  rn  )rx   ry   rz   r{   r|   r  r`   classmethodr  r  rz  r   r  r  r  r  r  r}   r~   r   s   @r+   r   r     sh     N*  B 5 51D4&$A Ar?   r   c                      ^  \ rS rSrSSS.S jjrS rS rU 4S jrU 4S jrS	 r	S
 r
S rS rS rS rS rS rSrU =r$ )NavigationToolbar2Tkim  T)pack_toolbarc                8   Uc  UR                  5       R                  n[        R                  R	                  XS[        UR                  R                  R                  5      SS9  0 U l	        U R                   Hy  u  pEpgUc  U R                  5         M  U R                  U[        [        R                  " SU S35      5      US;   [!        X5      S9=U R                  U'   nUc  Mn  [#        X5        M{     [$        R&                  R)                  US	S
9U l        [        R,                  " X R*                  SS9n	U	R/                  [        R0                  S9  [        R2                  " U S9U l        [        R,                  " X R*                  U R4                  [        R0                  S9U l        U R6                  R/                  [        R0                  S9  [8        R                  " X5        U(       a-  U R/                  [        R:                  [        R<                  S9  gg)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rg  r  )r   r  textvariablejustifyrg  rh  )r   r   r3   Framer`   r   r   r<   rQ   _buttons	toolitems_Spacer_Buttonr7   r	   r  r	  add_tooltipr^  r  Font_label_fontLabelrq  r#  	StringVarmessage_message_labelr   BOTTOMX)
rb   rp  rn  r  r  tooltip_text
image_filecallbackbuttonlabels
             r+   r`   NavigationToolbar2Tk.__init__n  s    >))+22F
$1 #FMM$6$6$<$< =b 	 	J 8<4D
|/3||,,wzl$-GHI#6#D3	 0< 0 d#f  +5 9G #<<,,&r,B +;+;FH


!||40 hhd9I9I48LL/1xx9 	  bhh /##D1II299244I0 r?   c                    U R                  5        H  n[        U[        R                  [        R                  45      (       a*  [        US5      (       a  [        R                  X5        MZ  M\  [        U[        R                  5      (       a   UR                  SS9  UR                  SS9  M  [        U[        R                  5      (       a  M  [        R                  SUR                  5        M     U R                  R                  SS9  g	)
at  
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  )rb   r   s     r+   r  NavigationToolbar2Tk._rescale  s     ))+F&299bnn"=>>6=11(>>tL FBHH--   .%%4%0FBHH--5v7I7IJ , 	"""+r?   c                    S[         R                  4S[         R                  44 Hb  u  pXR                  ;   d  M  U R                  U:X  a  U R                  U   R                  5         ME  U R                  U   R                  5         Md     g )NZoomPan)r   ZOOMPANr  modeselectdeselect)rb   r  r  s      r+   _update_buttons_checked,NavigationToolbar2Tk._update_buttons_checked  sf    "EJJ/%1CDJD}}$99$MM$'..0MM$'002 Er?   c                 @   > [         TU ]  " U6   U R                  5         g r]   )r_   r  r  rb   rW   rd   s     r+   r  NavigationToolbar2Tk.pan  s    T$$&r?   c                 @   > [         TU ]  " U6   U R                  5         g r]   )r_   r  r  r  s     r+   r  NavigationToolbar2Tk.zoom  s    d$$&r?   c                 :    U R                   R                  U5        g r]   )r  setrb   ss     r+   set_message NavigationToolbar2Tk.set_message  s    r?   c           	         U R                   R                  (       a9  U R                   R                  R                  U R                   R                  5        U R                   R                  (       a9  U R                   R                  R                  U R                   R                  5        U R                   R
                  R                  R                  nXc-
  nXe-
  nU R                   R                  R                  X#XE5      U R                   l        U R                   R                  R                  X#XESSS9U R                   l        g )Nr   )r  r  )outlinedash)	rp  r   r   r   r   r   r<   rP   create_rectangle)rb   r   x0y0rR   rS   rP   s          r+   draw_rubberband$NavigationToolbar2Tk.draw_rubberband  s    ;;--KK!!(()K)KL;;--KK!!(()K)KL##((//[[KK!!22  	* KK!!22f 3 > 	*r?   c                    U R                   R                  (       aJ  U R                   R                  R                  U R                   R                  5        S U R                   l        U R                   R                  (       aK  U R                   R                  R                  U R                   R                  5        S U R                   l        g g r]   )rp  r   r   r   r   rk   s    r+   remove_rubberband&NavigationToolbar2Tk.remove_rubberband  s}    ;;--KK!!(()K)KL15DKK.;;--KK!!(()K)KL15DKK. .r?   c           	      Z  ^^ TR                   c  g[        R                  " STR                   5      nUR                  UR                  R                  SS5      5      nTR                  S5      nU4S jmU4S jnS n[        R                  " US	:  a  UR                  5       (       a  UOU5       nUR                  S
5      n[        R                  " UR                  XD45      U S9nUTl        S[        R                   " TR#                  TR%                  S5      5      5      -  n	U" Xy5      n
[        R                  " U
R                  XD45      U S9nUTl        SSS5        U" S5      (       a  SW0nOSW0n[)        T[*        R,                  5      (       an  TR%                  S5      S:w  aY  U R.                  S:w  a  SnO.T" S5      u  pnT" S5      u  nnnUU-   S-  UU-   S-  UU-   S-  4nU" U5      (       a  WUS'   OWUS'   TR0                  " S0 UDSSS.D6  g! , (       d  f       N= f)zu
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   > TR                  TR                  U 5      5      $ r]   )	winfo_rgbcget)
color_namer  s    r+   
_get_color>NavigationToolbar2Tk._set_image_for_button.<locals>._get_color  s    ##FKK
$;<<r?   c                 Z   > [        U [        5      (       a  T" U 5      n [        U 5      S:  $ )Ng    @)r  r7   rF   )colorr#  s    r+   _is_dark<NavigationToolbar2Tk._set_image_for_button.<locals>._is_dark  s)    %%%"5)u:	))r?   c                     [         R                  " U 5      R                  5       nUSS S24   S:H  R                  SS9nXUS S24'   [        R
                  " USS9$ )N.r  r   r  )axisRGBA)r  )rB   rC   copyallr   	fromarray)r   r&  
image_data
black_masks       r+   _recolor_iconANavigationToolbar2Tk._set_image_for_button.<locals>._recolor_icon  s_    E*//1J$S"1"W-277R7@J).z2A2~&??:F;;r?      r+  r  g o?r*   r   r   selectcolorrl  x11activebackgroundrA   selectimage)rP   rQ    )r  r	   r  	with_namer   replacewinfo_pixelsr   openexistsconvertr   r   r   _ntimagerB   arrayr   r!  _ntimage_altr  r3   r  _windowingsystemr   )rb   r  path_regular
path_larger  r'  r1  imr   r*   im_alt	image_altimage_kwargsr4  r1g1b1r2g2b2r#  s    `                  @r+   r  *NavigationToolbar2Tk._set_image_for_button  s    % ++Hf6H6HI!++%%fl;=
""5)	=	*
	< ZZtbyZ5F5F5H5H
)+.0F#B&&ryy$'>tLE#FO &  \!:;*= =J"22F**tl+D:I"+F+ L!!
 $Y/L#U+L
 vr~~..M*b0$$-+
 (6
'(:;
B "2qy2b5!)beQY?$$.7]+.3]+C<CUCY+ +s   0B)H
H*c                 X   U(       d  [         R                  " XUSSSS9nO4[         R                  " U S9n[         R                  " XUSUSSSS9nXel        X%l        Ub  [        R                  X5        OUR                  U R                  S9  UR                  [         R                  S	9  U$ )
Nflatgroover   )r   r  r  relief
overreliefr   r  F)r   r  r  indicatoronvariable	offreliefrT  r   )r  r  )r3   r  ru  r  varr  r  r  r   r  rq  r"  )rb   r  r  r  r  brX  s          r+   r  NavigationToolbar2Tk._Button;  s    		(A ))4(CU8A
 E"! 66t?KKT--K.	BGGr?   c                     [         R                  " U S[         R                  SS9nUR                  [         R                  SS9  U$ )Nr  DarkGray)r   rP   rS  bgr  )rg  r  )r3   r  RIDGErq  r"  r  s     r+   r  NavigationToolbar2Tk._SpacerW  s3    HHDrxxJO	BGG$'r?   c           
         U R                   R                  5       n[        UR                  5       5       VVs/ s H  u  p4USR	                  S U 5       5      4PM!     nnnU R                   R                  5       nU R                   R                  5       U   n[        R                  " U R                   R                  5       U5      nSn	[        R                  R                  [        R                  S   5      n
[        R                   " U R                   R#                  5       5      R$                  n[&        R(                  R+                  U R                   R                  5       R,                  SUU	U
UUS9nUS;   a  g U
S:w  a9  [        R                  R/                  [1        U5      5      [        R                  S'   [        R                   " U5      R2                  SS  S:w  a  S nOX(R5                  5          S	   n U R                   R6                  R9                  XS
9  U$ s  snnf ! [:         a3  n[&        R<                  R?                  S[1        U5      5         S nAg S nAff = f)N c              3   ,   #    U  H
  nS U 3v   M     g7f)z*.Nr8  ).0exts     r+   	<genexpr>3NavigationToolbar2Tk.save_figure.<locals>.<genexpr>`  s     7$3bJ$s   rl  zsavefig.directoryzSave the figure)r   r  	filetypesdefaultextension
initialdirinitialfiletypevariable)rl  r8  r   r   )formatzError saving file) rp  get_supported_filetypes_groupedsorteditemsr>  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)rb   rW   rg  r   extstk_filetypesdefault_extensiondefault_filetypefiletype_variablerh  ri  rj  fname	extensionrX   s                  r+   save_figure NavigationToolbar2Tk.save_figure]  s   KK??A	 %Y__%67
7
 3887$7787 	 

 !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!"7"7"9:1=I	FKK&&u&?L]
^  	F(()<c!fEE	Fs   &H ;$H& &
I#0)II#c                 h   [         R                  [         R                  S.nU R                  R                  S:  nU R                  R                  [        U R                  5      S-
  :  nSU R                  ;   a  X   U R                  S   S'   SU R                  ;   a  X   U R                  S   S'   g g )N)TFr   r   Backr'  Forward)r3   NORMALDISABLED
_nav_stack_poslenr  )rb   	state_mapcan_backcan_forwards       r+   set_history_buttons(NavigationToolbar2Tk.set_history_buttons  s    99R[[9	??''!+oo**S-AA-EET]]"-6-@DMM&!'*%090FDMM)$W- &r?   )r  r  r  r  r]   )rx   ry   rz   r{   r`   r  r  r  r  r  r  r  r  r  r  r  r  r}   r~   r   s   @r+   r  r  m  sX    51D 51n,63''? 6MD^82FhG Gr?   r  c                 r   ^ ^^ S mUUU 4S jnU4S jnT R                  SU5        T R                  SU5        g )Nc                 F  > T(       d  T(       d  gTR                  S5      u  p  nUTR                  5       -   TR                  5       -   nUTR                  5       -   n[        R
                  " T5      mTR                  S5        TR                  SU SU 35         TR                  R                  SSTR                  SS5        [        R                  " TT[        R                  [        R                  SS	9nUR                  SS
9  g! [        R                   a     NZf = f)zDisplay text in tooltip window.Ninsertr   r   z!::tk::unsupported::MacWindowStylestylehelpnoActivates)r  r  rS  r   )ipadx)r<   r  winfo_widthr  r3   Topleveloverrideredirectgeometryr4   _wrM   r  r"  SOLIDrq  )r   r   r   _r  r  	tipwindowr   s        r+   showtipadd_tooltip.<locals>.showtip  s     D[[*
a""$$v'9'9';;""$$KK'	""1%Qqc1#;'	LLA%y||$m5
 rww "a9


	 {{ 		s   )D	 	D D c                 8   > T(       a  TR                  5         S mg r]   )r  )r   r  s    r+   hidetipadd_tooltip.<locals>.hidetip  s    	r?   r   r   )r   )r   r  r  r  r  s   ``  @r+   r  r    s0    I* KK	7#
KK	7#r?   c                        \ rS rSrS rS rSrg)RubberbandTki  c                 P    [         R                  U R                  5       S XX45        g r]   )r  r  "_make_classic_style_pseudo_toolbar)rb   r  r  rR   rS   s        r+   r  RubberbandTk.draw_rubberband  s#    ,,335tRR	Mr?   c                 J    [         R                  U R                  5       5        g r]   )r  r  r  rk   s    r+   r  RubberbandTk.remove_rubberband  s    ..335	7r?   r8  N)rx   ry   rz   r{   r  r  r}   r8  r?   r+   r  r    s    M7r?   r  c                   N    \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rS rSrg)	ToolbarTki  Nc                 x   [         R                  " X5        Uc.  U R                  R                  R	                  5       R
                  nU R                  R                  R                  R                  R                  u  p4SXC-
  pe[        R                  R                  X[        U5      [        U5      SS9  [        R                  R                  SS9U l        [        R                   " X R                  SS9nUR#                  [        R$                  S9  [        R&                  " U S	9U l        [        R                   " X R                  U R(                  S
9U l        U R*                  R#                  [        R$                  S9  0 U l        U R#                  [        R.                  [        R0                  S9  0 U l        g )Nr  rA   )r   rQ   rP   r   r  r  r  r  r  r  )r   r  r  r  )r   r`   toolmanagerrp  r   r   r   r<   	intervalxr3   r  r   r^  r  r  r  r  rq  r#  r  _messager  
_toolitemsrr  r  _groups)rb   r  rn  xminxmaxrP   rQ   r  s           r+   r`   ToolbarTk.__init__  sH   ""45>%%,,::<CCF%%,,3388BB
DK
$ #E
3v;&' 	 	) #<<,,",5
 +;+;FH


!D1 hhd9I9I48MMC  bhh /		rvvBDD	)r?   c                 ,    [         R                  U 5      $ r]   )r  r  rk   s    r+   r  ToolbarTk._rescale  s    #,,T22r?   c                 j  ^ ^ T R                  U5      nUR                  5       nU[        U5      :  d  US:  a  S n	OX   n	[        R	                  UTXFUU 4S j5      n
U
R                  U	S9  Ub  [        X5        T R                  R                  T/ 5        T R                  T   R                  U
5        g )Nr   c                  &   > TR                  T 5      $ r]   )_button_click)r   rb   s   r+   rs   (ToolbarTk.add_toolitem.<locals>.<lambda>  s    d6H6H6Nr?   )before)
_get_groupframepack_slavesr  r  r  r  r  r  
setdefaultappend)rb   r   grouppositionr  descriptionr  framer   r  r  s   ``         r+   add_toolitemToolbarTk.add_toolitem  s    $$U+##%s7|#x!|F&F%--eT:.NPV,",""4,$$V,r?   c                 @   XR                   ;  a  U R                   (       a  U R                  5         [        R                  " U SS9nUR	                  [        R
                  [        R                  S9  U R                  Ul        X R                   U'   U R                   U   $ )Nr   )r   r   r  )r  _add_separatorr3   r  rq  r"  Yr  )rb   r  r  s      r+   r  ToolbarTk._get_groupframe  sp    $||##%HHDa8EJJBGG"$$J/ $ 0 0E"'LL||E""r?   c                 ,    [         R                  U 5      $ r]   )r  r  rk   s    r+   r  ToolbarTk._add_separator  s    #++D11r?   c                 &    U R                  U5        g r]   )trigger_tool)rb   r   s     r+   r  ToolbarTk._button_click  s    $r?   c                     XR                   ;  a  g U R                   U    H,  nU(       a  UR                  5         M  UR                  5         M.     g r]   )r  r  r  )rb   r   toggledtoolitems       r+   toggle_toolitemToolbarTk.toggle_toolitem  s;    &-H!!!#	 .r?   c                 j    U R                   R                  U/ 5       H  nUR                  5         M     g r]   )r  r2   pack_forget)rb   r   r  s      r+   remove_toolitemToolbarTk.remove_toolitem  s)    ++D"5H  " 6r?   c                 :    U R                   R                  U5        g r]   )r  r  r  s     r+   r  ToolbarTk.set_message  s    !r?   )r  r  r  r  r  r]   )rx   ry   rz   r{   r`   r  r  r  r  r  r  r  r  r}   r8  r?   r+   r  r    s/    23- #2 $#r?   r  c                       \ rS rSrS rSrg)SaveFigureTki  c                 J    [         R                  U R                  5       5        g r]   )r  r  r  rb   rW   s     r+   triggerSaveFigureTk.trigger  s    ((335	7r?   r8  Nrx   ry   rz   r{   r  r}   r8  r?   r+   r  r    s    7r?   r  c                       \ rS rSrS rSrg)ConfigureSubplotsTki  c                 .    [         R                  U 5        g r]   )r  configure_subplotsr  s     r+   r  ConfigureSubplotsTk.trigger  s    //5r?   r8  Nr  r8  r?   r+   r  r    s    6r?   r  c                       \ rS rSrS rSrg)HelpTki#  c                    ^ [        U R                  R                  R                  U R	                  5       S/5      mU4S jTl        g )NOKc                 L   > TR                   R                  R                  5       $ r]   )r  r   ro  )r  dialogs    r+   rs    HelpTk.trigger.<locals>.<lambda>(  s    &,,"5"5">">"@r?   )r   r   rp  r   _get_help_textdone)rb   rW   r  s     @r+   r  HelpTk.trigger%  s7    KK(($*=*=*?$I@r?   r8  Nr  r8  r?   r+   r  r  #  s    Ar?   r  c                   L    \ rS rSr\R
                  r\r\	r
\	R                  rSrg)
_BackendTki0  r8  N)rx   ry   rz   r{   r3   	TkVersionbackend_versionr   FigureCanvasr   FigureManagerr  rS  r}   r8  r?   r+   r  r  0  s     llO!L#M..Hr?   r  r]   )Xuuidr   
contextlibr   loggingrG   os.pathrr  ru  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   rl  r   r   r   	getLoggerrx   r  MOVEHANDPOINTERSELECT_REGIONWAITRESIZE_HORIZONTALRESIZE_VERTICALr]  r,   r1   uuid4hexrL   r>   r5   rZ   r   r   r  r  r  _register_tool_classRubberbandBaser  r  SaveFigureBaser  ConfigureSubplotsBaser  ToolHelpBaser  Toolbar_toolbar2_class_toolmanager_toolbar_classexportr  r8  r?   r+   <module>r     sH     %     
     -    D DB B B B *  F "LL'LL'OOW;LL'20 D D 
tzz|///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 * 
/ / /r?   