
    g                     @   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mZmZ d dl	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c mc mZ ddlmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& g dd	d
dddddddddddddddddejN                  dk7  rdndfdejN                  dk7  rd ndfd!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0D  ci c])  \  } } e% e(e jR                  jT                  |             |+ c}} Z+d1D cg c]K  \  }} e% e(e jR                  jX                  |             e% e(e jR                  jT                  |            fM c}}Z-ej\                  d2fej^                  d3fej`                  d4fejb                  d5fejd                  d6fejf                  d7fejh                  d8ffD  ci c]#  \  } }|  e(e jR                  jj                  |      % c}} Z6 e jn                  d      d9        Z8d: Z9 G d; d<e      Z: G d= d>ee"jv                        Z< G d? d@e"jz                        Z> G dA dBe      Z? G dC dDee"j                        ZA G dE dFe"j                        ZC G dG dHee"j                        ZD ej                  e<       G dI dJej                               ZG ej                  e<       G dK dLej                               ZI ej                  e<       G dM dNej                               ZK ej                  e<       G dO dPej                               ZM ej                  e<       G dQ dRej                               ZOeAe?_P        eDe?_Q        ej                   G dS dTe             ZSyc c}} w c c}}w c c}} w )U    N)_apibackend_toolscbook)Gcf)_BackendFigureCanvasBaseFigureManagerBaseNavigationToolbar2	TimerBasecursorsToolContainerBaseMouseButton
CloseEventKeyEventLocationEvent
MouseEventResizeEvent_allow_interrupt   )	qt_compat)QtCoreQtGui	QtWidgets__version__QT_API_to_int
_isdeleted)
Key_Escapeescape)Key_Tabtab)Key_Backspace	backspace)
Key_Returnenter)	Key_Enterr%   )
Key_Insertinsert)
Key_Deletedelete)	Key_Pausepause)
Key_SysReqsysreq)	Key_Clearclear)Key_Homehome)Key_Endend)Key_Leftleft)Key_Upup)	Key_Rightright)Key_Downdown)
Key_PageUppageup)Key_PageDownpagedown)	Key_ShiftshiftKey_ControldarwincontrolcmdKey_Metameta)Key_Altalt)Key_CapsLock	caps_lock)Key_F1f1)Key_F2f2)Key_F3f3)Key_F4f4)Key_F5f5)Key_F6f6)Key_F7f7)Key_F8f8)Key_F9f9)Key_F10f10)r_   f11)Key_F12f12)Key_Super_Lsuper)Key_Super_Rre   ))ControlModifierrC   )AltModifierrI   )ShiftModifierrA   )MetaModifierrG   SizeAllCursorPointingHandCursorArrowCursorCrossCursor
WaitCursorSizeHorCursorSizeVerCursorc                      t         j                  j                         } | =t        j                  j                         st        d      t        dv rd}d}nt        dv rd}d}nt        d      |D ]  }t        j                  j                  | d	      }|(|j                  j                         Ct        j                  j                  | d
      }t        j                  dt         dt        j                          d| d|j                          d	        n |dk(  r8	 t         j                  j                  t        j                   j"                         	 t         j                  j'                  t        j                   j(                  j*                         t        j                  dg      } t        j,                  dk(  rDt/        t1        j2                  d            }t5        j6                  |      }| j9                  |       | j;                  d       t1        j<                          |dk(  r)| j                  t        j                   j>                         | S # t$        $ r Y w xY w# t$        $ r Y w xY w)NzInvalid DISPLAY variable>   PyQt6PySide6)PyQt5PySide2   >   ru   rv   )rs   rt      zShould never be herez
.QtWidgetsz.QtCorezMatplotlib is using z which wraps z+ however an instantiated QApplication from z< exists.  Mixing Qt major versions may not work as expected.
matplotlibrD   images/matplotlib.svgT) r   QApplicationinstancempl_c_internal_utilsdisplay_is_validRuntimeErrorr   sysmodulesgetr   warn_externalr   qVersionsetAttributeQtAA_EnableHighDpiScalingAttributeError#setHighDpiScaleFactorRoundingPolicy HighDpiScaleFactorRoundingPolicyPassThroughplatformstrr   _get_data_pathr   QIconsetWindowIconsetQuitOnLastWindowClosed_setup_new_guiappAA_UseHighDpiPixmaps)appother_bindings
qt_versionbindingmod
other_coreimageicons           [/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/matplotlib/backends/backend_qt.py_create_qAppr   \   s)   

 
 
)
)
+C { $$5579:: ))1NJ++1NJ566% 	G++//WIZ"89C3#3#3#<#<#>#J [[__y-@A
""*6(-() *))0	!**,- .99 	 ?&&33FII4U4UV	""FF		::FFH $$l^4<<8#,,-DEFE;;u%Dd#%%d+!?VYY;;<J# " 
  		s%   &7I! AI1 !	I.-I.1	I=<I=c                 ,     d } fd}t        ||      S )zEA context manager that allows terminating a plot by sending a SIGINT.c                      t        j                   j                         t         j                  j                  j                        }|j
                  j                   fd       }|S )Nc                  H    	  j                  d       y # t        $ r Y y w xY wNr   )recvBlockingIOError)rsocks   r   _may_clear_sockzF_allow_interrupt_qt.<locals>.prepare_notifier.<locals>._may_clear_sock   s'    

1"  s    	!!)r   QSocketNotifierfilenoTypeRead	activatedconnect)r   snr   s   `  r   prepare_notifierz-_allow_interrupt_qt.<locals>.prepare_notifier   sP    ##ELLNF4J4J4O4O4T4TU				 
	 	    c                  ^    t         d      r j                           j                          y )NcloseAllWindows)hasattrr   quit)qapp_or_eventloops   r   handle_sigintz*_allow_interrupt_qt.<locals>.handle_sigint   s'    $&78--/ r   )r   )r   r   r   s   `  r   _allow_interrupt_qtr      s    
&!
 ,m<<r   c                   @     e Zd ZdZ fdZd Zd Zd Zd Zd Z	 xZ
S )TimerQTz-Subclass of `.TimerBase` using QTimer events.c                     t        j                         | _        | j                  j                  j	                  | j
                         t        |   |i | y N)r   QTimer_timertimeoutr   	_on_timerre   __init__selfargskwargs	__class__s      r   r   zTimerQT.__init__   s@     mmo##DNN3$)&)r   c                 P    t        | j                        s| j                          y y r   )r   r   _timer_stopr   s    r   __del__zTimerQT.__del__   s!     $++& 'r   c                 N    | j                   j                  | j                         y r   )r   setSingleShot_singler   s    r   _timer_set_single_shotzTimerQT._timer_set_single_shot   s    !!$,,/r   c                 N    | j                   j                  | j                         y r   )r   setInterval	_intervalr   s    r   _timer_set_intervalzTimerQT._timer_set_interval   s    /r   c                 8    | j                   j                          y r   )r   startr   s    r   _timer_startzTimerQT._timer_start   s    r   c                 8    | j                   j                          y r   )r   stopr   s    r   r   zTimerQT._timer_stop   s    r   )__name__
__module____qualname____doc__r   r   r   r   r   r   __classcell__r   s   @r   r   r      s$    7*00r   r   c                   .   e Zd ZdZeZ ej                  d       Zde	j                  fde	j                  fde	j                  fde	j                  fde	j                  ffD  ci c]*  \  }}t        t         j"                  j                  |      |, c}}}}} Zd'fd		Zd
 Zd Zd Zd Zd'dZd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$e%d        Z&e%d'ddd       Z'd Z(d Z)d(d Z*d'd!Z+fd"Z,d# Z-d'd$Z.d% Z/d& Z0xZ1S c c}}}}} w ))FigureCanvasQTqtc                     t         S r   )FigureManagerQT)clss    r   <lambda>zFigureCanvasQT.<lambda>   s    ? r   
LeftButtonRightButtonMiddleButtonXButton1XButton2Nc                    t                t        | 	  |       d| _        d| _        d | _        d| _        | j                  t        j                  j                  j                         | j                  d        | j                  | j                           t        j                   t        j"                  d            }| j%                  |       y )N)figureFc                      y r    painters    r   r   z)FigureCanvasQT.__init__.<locals>.<lambda>   s    r   Twhite)r   re   r   _draw_pending_is_drawing_draw_rect_callback_in_resize_eventr   r   r   WidgetAttributeWA_OpaquePaintEventsetMouseTrackingresizeget_width_heightr   QPaletteQColor
setPalette)r   r   paletter   s      r   r   zFigureCanvasQT.__init__   s    '" #7  %&))33GGHd#T**,-..g!67 r   c                     | j                  | j                         xs d      rDt        j                  | j	                         | j	                               }| j                  |       y y r   )_set_device_pixel_ratiodevicePixelRatioFr   QResizeEventsizeresizeEventr   events     r   _update_pixel_ratioz"FigureCanvasQT._update_pixel_ratio   sT    ''&&(-A/
 &&tyy{DIIK@EU#/r   c                     | j                          |K|j                  j                  | j                          |j                  j                  | j                          y y r   )r  physicalDotsPerInchChangedr   logicalDotsPerInchChanged)r   screens     r   _update_screenzFigureCanvasQT._update_screen   sM      "--55d6N6NO,,44T5M5MN r   c                     | j                         j                         }|j                  j                  | j                         | j	                  |j                                y r   )windowwindowHandlescreenChangedr   r	  r  )r   r  r  s      r   	showEventzFigureCanvasQT.showEvent  sF     ++-$$T%8%89FMMO,r   c                 X    | j                  t        j                  t        |             y )N)cursor)	setCursorr   check_getitemcursord)r   r  s     r   
set_cursorzFigureCanvasQT.set_cursor	  s    t))'&ABr   c                    |.| j                  t        j                  j                               }n9t	        |d      r|j                         }nt	        |d      r|j                         }|j                         }| j                  j                  j                  | j                  z  |j                         z
  }|| j                  z  || j                  z  fS )aI  
        Calculate mouse coordinates in physical pixels.

        Qt uses logical pixels, but the figure is scaled to physical
        pixels for rendering.  Transform to physical pixels so that
        all of the down-stream transforms work as expected.

        Also, the origin is different and needs to be corrected.
        positionpos)mapFromGlobalr   QCursorr  r   r  xr   bboxheightdevice_pixel_ratioy)r   r  r  r  s       r   mouseEventCoordszFigureCanvasQT.mouseEventCoords  s     ;$$U]]%6%6%89CS*%,,.CS% '')CEEGKK##d&=&==G4***A0G0G,GGGr   c                     t         j                  j                         j                         }| j                  y t        d| g| j                  |      | j                  |      |dj                          y )Nfigure_enter_event	modifiersguiEvent)	r   r{   r|   queryKeyboardModifiersr   r   r  _mpl_modifiers_process)r   r  modss      r   
enterEventzFigureCanvasQT.enterEvent#  sm     %%..0GGI;;*D 	&,,U3	& $ 3 3D 9$	& '/hjr   c                     t         j                  j                          | j                  y t	        d| g| j                         | j                         |dj                          y )Nfigure_leave_eventr"  )r   r{   restoreOverrideCursorr   r   r  r&  r'  r  s     r   
leaveEventzFigureCanvasQT.leaveEvent.  s\    446;;*D 	&,,.	& $ 3 3 5$	& '/hjr   c                     | j                   j                  |j                               }|L| j                  ?t	        d| g| j                  |      || j                         |dj                          y y y )Nbutton_press_eventr"  buttondr   buttonr   r   r  r&  r'  r   r  r2  s      r   mousePressEventzFigureCanvasQT.mousePressEvent7  sx    !!%,,.1$++"9+T '--e4'6<'!%!4!4!6 %' (0xz	 #:r   c                     | j                   j                  |j                               }|M| j                  @t	        d| g| j                  |      |d| j                         |dj                          y y y )Nr/  T)dblclickr#  r$  r0  r3  s      r   mouseDoubleClickEventz$FigureCanvasQT.mouseDoubleClickEvent?  s{    !!%,,.1$++"9+T '--e4'6<'GK!%!4!4!6 %' (0xz	 #:r   c                     | j                   y t        d| g| j                  |      | j                  |j	                               | j                         |dj                          y )Nmotion_notify_event)buttonsr#  r$  )r   r   r  _mpl_buttonsr:  r&  r'  r  s     r   mouseMoveEventzFigureCanvasQT.mouseMoveEventG  s`    ;;($ 	#))%0	#,,U]]_=!002!		# $,8:r   c                     | j                   j                  |j                               }|L| j                  ?t	        d| g| j                  |      || j                         |dj                          y y y )Nbutton_release_eventr"  r0  r3  s      r   mouseReleaseEventz FigureCanvasQT.mouseReleaseEventP  sx    !!%,,.1$++"9-t '--e4'6<'!%!4!4!6 %' (0xz	 #:r   c                    |j                         j                         s/t        j                  j	                         j                         dk(  r"|j                         j                         dz  }n|j                         j                         }|rK| j                  >t        d| g| j                  |      || j                         |dj                          y y y )Nxcbx   scroll_event)stepr#  r$  )
pixelDeltaisNullr   r{   r|   platformName
angleDeltar  r   r   r  r&  r'  )r   r  stepss      r   
wheelEventzFigureCanvasQT.wheelEventX  s     %%'))224AACuL$$&((*S0E$$&((*ET[[,~t '--e4';@!%!4!4!6 %' (0xz	 -5r   c                     | j                  |      }|;| j                  .t        d| |g| j                         d|ij	                          y y y )Nkey_press_eventr$  _get_keyr   r   r  r'  r   r  keys      r   keyPressEventzFigureCanvasQT.keyPressEventf  sU    mmE"?t{{6&%002%#%%-XZ  7?r   c                     | j                  |      }|;| j                  .t        d| |g| j                         d|ij	                          y y y )Nkey_release_eventr$  rM  rO  s      r   keyReleaseEventzFigureCanvasQT.keyReleaseEventm  sU    mmE"?t{{6($%002%#%%-XZ  7?r   c                 *   | j                   ry | j                  y d| _         	 |j                         j                         | j                  z  }|j                         j                         | j                  z  }| j                  j                  }||z  }||z  }| j                  j                  ||d       t        j                  j                  | |       t        d|       j                          | j                          d| _         y # d| _         w xY w)NTF)forwardresize_event)r   r   r   widthr  r  dpiset_size_inchesr   QWidgetr  r   r'  	draw_idle)r   r  whdpivalwinchhinchs          r   r  zFigureCanvasQT.resizeEventt  s      ;; $	*

""$t'>'>>A

##%(?(??A[[__FJEJEKK''ue'D))$6-668NN$)D!ED!s   CD	 		Dc                 T    | j                         \  }}t        j                  ||      S r   )r   r   QSize)r   r]  r^  s      r   sizeHintzFigureCanvasQT.sizeHint  s%    $$&1||Aq!!r   c                 .    t        j                  dd      S )N
   )r   rc  r   s    r   minimumSizeHintzFigureCanvasQT.minimumSizeHint  s    ||B##r   c                     t        |       } t        j                  j                         D ch c]  \  }}t        |      | z  r| c}}S c c}}w r   )r   r   r1  items)r:  maskr2  s      r   r;  zFigureCanvasQT._mpl_buttons  sJ    '"+9+A+A+G+G+I ,<44=7*  , 	, ,s   Aexcludec                    | ,t         j                  j                         j                         } t	        |       } t
        D cg c](  \  }}||k7  r| |z  rt        |   j                  dd      * c}}S c c}}w )NrE   ctrl)r   r{   r|   keyboardModifiersr   _MODIFIER_KEYSSPECIAL_KEYSreplace)r#  rl  rj  rP  s       r   r&  zFigureCanvasQT._mpl_modifiers  su    !..779KKMII&	 "08D#c>i$&6 S!)))V< 8 	8 8s   -A4c                 .   |j                         }| j                  |      }	 t        |   }dj                  ||gz         S # t        $ rI |t        j
                  kD  rY y t        |      }d|v r|j                  d       n|j                         }Y fw xY w)Nrk  rB   +)
rP  r&  rq  KeyErrorr   
maxunicodechrremovelowerjoin)r   r  	event_keyr(  rP  s        r   rN  zFigureCanvasQT._get_key  s    IIK	""9"5	" y)C$ xxu%%#  	" 3>>)i.C $G$iik	"s   	A B 1BBc                 \    t         j                  j                         j                          y r   )r   r{   r|   processEventsr   s    r   flush_eventszFigureCanvasQT.flush_events  s    '')779r   c                 |   t        | d      r%| j                  j                         rt        d      t	        j
                         x| _        }|dkD  r6t        j                  j                  t        |dz        |j                        }t        |      5  t        j                  |       d d d        y # 1 sw Y   y xY w)N_event_loopzEvent loop already runningr   i  )r   r  	isRunningr   r   
QEventLoopr   
singleShotintr   r   r   _exec)r   r   
event_loop_s       r   start_event_loopzFigureCanvasQT.start_event_loop  s    4'D,<,<,F,F,H;<<(.(9(9(;;:Q;((Wt^)<jooNA , 	(OOJ'	( 	( 	(s   B22B;c                 R    t        | d      r| j                  j                          y y )Nr  )r   r  r   r  s     r   stop_event_loopzFigureCanvasQT.stop_event_loop  s#    4'!!# (r   c                     | j                   ryt        j                  | d      5  t        |           ddd       | j                          y# 1 sw Y   xY w)z5Render the figure, and queue a request for a Qt draw.NT)r   )r   r   _setattr_cmre   drawupdate)r   r   s    r   r  zFigureCanvasQT.draw  sH     t6 	GLN		 	s   AAc                     t        | dd      s@t        | dd      s2d| _        t        j                  j	                  d| j
                         yyy)z9Queue redraw of the Agg buffer and request Qt paintEvent.r   Fr   Tr   N)getattrr   r   r   r  
_draw_idler   s    r   r\  zFigureCanvasQT.draw_idle  sF     ou5mU3!%DMM$$Q8 4 6r   c                      |" j                   r j                   j                  } fd|j                  D        \  }}}}||z   } j                  | j	                         j                         |z
  ||       y )Nc              3   N   K   | ]  }t        |j                  z          y wr   r  r  .0ptr   s     r   	<genexpr>z&FigureCanvasQT.blit.<locals>.<genexpr>  s!     NBc"t6667N   "%)r   r  boundsrepaintrectr  )r   r  lbr]  r^  ts   `      r   blitzFigureCanvasQT.blit  sb    <DKK;;##DN$++N
1aEQ		**,q0!Q7r   c                 P   | j                         5  | j                  s
	 d d d        y d| _        | j                         dk  s| j                         dk  r
	 d d d        y 	 | j	                          d d d        y # t
        $ r t        j                          Y (w xY w# 1 sw Y   y xY w)NFr   )_idle_draw_cntxr   r  rX  r  	Exception	traceback	print_excr   s    r   r  zFigureCanvasQT._draw_idle  s    !!# 
	&%%
	& 
	& "'D{{}!TZZ\Q%6
	& 
	&&		
	& 
	&  &##%&
	& 
	&s.   B.B A99BBBBB%c                      |$ fd|D        \  }}|z   |z    fd}nd }| _          j                          y )Nc              3   N   K   | ]  }t        |j                  z          y wr   r  r  s     r   r  z/FigureCanvasQT.drawRectangle.<locals>.<genexpr>  s!     M"CT%<%< <=Mr  c                 
   t        j                  t        j                  d      dj                  z        }|j	                  ddg       t        j                  d      dft        j                  d      dffD ]  \  }}|j                  |       |j                  |       | j                  |       | j                         | j                         | j                         | j                          y )Nblackr      r   r   )	r   QPenr   r  setDashPatternsetDashOffsetsetColorsetPendrawLine)	r   pencoloroffsetr   x0x1y0y1s	       r   r   z9FigureCanvasQT.drawRectangle.<locals>._draw_rect_callback  s    jjLL)///
 ""Aq6*g.2g.2& 5ME6 %%f-LL'NN3' $$RR4$$RR4$$RR4$$RR45r   c                      y r   r   r   s    r   r   z9FigureCanvasQT.drawRectangle.<locals>._draw_rect_callback  s    r   )r   r  )	r   r  r]  r^  r   r  r  r  r  s	   `    @@@@r   drawRectanglezFigureCanvasQT.drawRectangle  sO     MMLBAqaBaB5 5*#6 r   r   )r   )2r   r   r   required_interactive_frameworkr   
_timer_clsr   classpropertymanager_classr   LEFTRIGHTMIDDLEBACKFORWARDr  r   r   r1  r   r  r	  r  r  r  r)  r-  r4  r7  r<  r?  rJ  rQ  rT  r  rd  rg  staticmethodr;  r&  rN  r~  r  r  r  r\  r  r  r  r   )r  kvr  r   r   s   00000@r   r   r      s^   %)"J&D&&'BCM ;++,K--.[//0))*,,-:
 15A		%%q)1,G! $O-CH,	1122.2200**"$ , , 8$ 8 8&4:	($

98&O	s   &/Dr   c                   @     e Zd Z ej                         Z fdZ xZS )
MainWindowc                 X    | j                   j                          t        |   |       y r   )closingemitre   
closeEvent)r   r  r   s     r   r  zMainWindow.closeEvent$  s     5!r   )r   r   r   r   Signalr  r  r   r   s   @r   r  r  !  s    fmmoG" "r   r  c                   \     e Zd ZdZ fdZd Zd Zd Ze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 : qt.QToolBar
        The qt.QToolBar
    window : qt.QMainWindow
        The qt.QMainWindow
    c                    t               | _        t        	|   ||       | j                  j                  j                  | j                         t        j                  dk7  rNt        t        j                  d            }t        j                  |      }| j                  j                  |       d| j                  _        | j                   rN| j                  j#                  | j                          | j                   j%                         j'                         }nd}|j%                         }|j'                         }||z   }| j                  j)                  |j+                         |       | j                  j-                  | j.                         t1        j2                         r4| j                  j5                          | j.                  j7                          | j.                  j9                  t:        j<                  j>                  j@                         | j.                  jC                          | j                  jE                          y )NrD   rz   Fr   )#r  r  re   r   r  r   _widgetclosedr   r   r   r   r   r   r   r   _destroyingtoolbar
addToolBarrd  r  r   rX  setCentralWidgetcanvasr}   is_interactiveshowr\  setFocusPolicyr   r   FocusPolicyStrongFocussetFocusraise_)
r   r  numr   r   
tbs_heightcs	cs_heightr  r   s
            r   r   zFigureManagerQT.__init__7  s    l%##D$6$67<<8#,,-DEFE;;u%DKK%%d+"'<<KK""4<<0..0779JJ __IIK	Z'288:v.$$T[[1KKKK!!# 	""699#8#8#D#DEr   c                     | j                   j                         r| j                   j                          y | j                   j                          y r   )r  isFullScreen
showNormalshowFullScreenr   s    r   full_screen_togglez"FigureManagerQT.full_screen_toggle_  s2    ;;##%KK""$KK&&(r   c                     t        d| j                        j                          | j                  j                  ry d| j                  _        	 t        j                  |        y # t        $ r Y y w xY w)Nclose_eventT)r   r  r'  r  r  r   destroyr   r   s    r   r  zFigureManagerQT._widgetclosede  sX    =$++.779;;"""&	KK 		s   A$ $	A0/A0c                    t        || j                  j                  z        }t        || j                  j                  z        }| j                  j	                         | j                  j	                         z
  }| j                  j                         | j                  j                         z
  }| j                  j                  ||       | j                  j                  ||z   ||z          y r   )r  r  r  r  rX  r  r   )r   rX  r  extra_widthextra_heights        r   r   zFigureManagerQT.resizer  s     EDKK:::;Vdkk<<<=kk'')DKK,=,=,??{{))+dkk.@.@.BB5&)5;.0EFr   c                     t         j                  j                         }|r*t        |      5  t	        j
                  |       d d d        y y # 1 sw Y   y xY wr   )r   r{   r|   r   r   r  )r   qapps     r   start_main_loopzFigureManagerQT.start_main_loop|  sL    %%..0$T* &%& & & &s   AAc                     d| j                   _        | j                   j                          t        j                  d   r5| j                   j                          | j                   j                          y y )NFzfigure.raise_window)r  r  r  r}   rcParamsactivateWindowr  r   s    r   r  zFigureManagerQT.show  sP    "'<<-.KK&&(KK  /r   c                    t         j                  j                         y | j                  j                  ry d| j                  _        | j
                  r| j
                  j                          | j                  j                          y NT)r   r{   r|   r  r  r  r  closer   r   s     r   r  zFigureManagerQT.destroy  s]    !!**,4;;"""&<<LL  "r   c                 6    | j                   j                         S r   )r  windowTitler   s    r   get_window_titlez FigureManagerQT.get_window_title  s    {{&&((r   c                 :    | j                   j                  |       y r   )r  setWindowTitle)r   titles     r   set_window_titlez FigureManagerQT.set_window_title  s    ""5)r   )r   r   r   r   r   r  r  r   classmethodr  r  r  r  r  r   r   s   @r   r   r   )  sF    &P)G & &!	)*r   r   c            	           e Zd Zg ej                  Zej                  eD  cg c]  ^}}| c}}} j                  d      dz   d       ddZd Zd Z	d Z
fdZfd	Zd
 Zd Zd Zd Zd Zd ZxZS c c}}} w )NavigationToolbar2QTSubplotsr   )	Customizez%Edit axis, curve and image parametersqt4_editor_optionsedit_parametersc                    t         j                  j                  | |       | j                  t        j
                  j                  t        t        j
                  j                  j                        t        t        j
                  j                  j                        z               || _
        i | _        d| _        | j                  D ]  \  }}}}|| j                          t        | |      } t!        j"                  |      t!        j$                  |            } t	        j&                         |      }| j)                  | j+                  |dz         ||      }	|	| j                  |<   |dv r|	j-                  d       ||	j/                  |        | j                  rKt        j0                  d|       | _        | j2                  j5                  t        j
                  j7                  t        t        j
                  j6                  j8                        t        t        j
                  j6                  j:                        z               | j2                  j=                  t        j>                  t         j>                  j@                  jB                  t         j>                  j@                  jD                               | jG                  | j2                        }
|
jI                  d       tK        j                  | |       y)z9coordinates: should we show the coordinates on the right?N.png)zoompanT )&r   QToolBarr   setAllowedAreasr   r   ToolBarArear   TopToolBarAreaBottomToolBarAreacoordinates_actions_subplot_dialog	toolitemsaddSeparatorr  	functoolswrapspartialSlot	addAction_iconsetCheckable
setToolTipQLabellocLabelsetAlignmentAlignmentFlag
AlignRightAlignVCentersetSizePolicyQSizePolicyPolicy	ExpandingIgnored	addWidget
setVisibler
   )r   r  parentr  texttooltip_text
image_filecallbackslotalabelActions              r   r   zNavigationToolbar2QT.__init__  s<   ##D&1VYY22FII))889FII));;<=> 	? '#8< 	/4D,
H|!!#tX.,yt,Y->->t-DE$v{{}T*NN4::j6.A#B#'/*+h'.NN4(+LL.	/( %,,R6DMMM&&vyy'>'>		//::;		//<<=>(? @ MM''	(=(=%%,,66%%,,44)  ..7K""4(##D&1r   c                     t        j                  d|      }|j                  |j                  j	                  dd            }t        |j                         r|n|      }t        j                  |      }|j                  | j                         xs d       | j                         j                  | j                               j                         dk  r| j                         j                  | j                               }|j!                  t        j"                  d      t$        j&                  j(                  j*                        }|j-                  |       |j/                  |       t        j0                  |      S )z
        Construct a `.QIcon` from an image file *name*, including the extension
        and relative to Matplotlib's "images" data directory.
        imagesr  z
_large.pngr      r  )r   r   	with_namenamerr  r   existsr   QPixmapsetDevicePixelRatior   r   r  backgroundRolevalueforegroundRolecreateMaskFromColorr   r   r   MaskModeMaskOutColorfillsetMaskr   )r   r3  path_regular
path_largefilenamepm
icon_colorrj  s           r   r  zNavigationToolbar2QT._icon  s!    ++Hd;!++%%fl;=
Z%6%6%8zlK]]8$
""$)	+<<> 3 3 56<<>D--d.A.A.CDJ))W%		""//1D GGJJJt{{2r   c                    | j                   j                  j                         }|s:t        j                  j                  | j                   j                         dd       y t        |      dk(  r|\  }n[|D cg c]  }|j                         xs |j                         xsz |j                  d      xsg |j                  d      xsT dj                  t        d |j                         |j                         g            xs dt        |      j                   d }}|D cg c]  }|j!                  |      dkD  s| }}t#        |      D ](  \  }}||   |v s||xx   d	t%        |      d
dz  cc<   * t        j&                  j)                  | j                   j                         dd|dd      \  }}|sy ||j+                  |         }t-        j.                  ||        y c c}w c c}w )NErrorzThere are no Axes to edit.r   r6   r:   z - z<anonymous >z (id: z#x)r   zSelect Axes:r   F)r  r   get_axesr   QMessageBoxwarningr'  len	get_label	get_titlerz  filter
get_xlabel
get_ylabeltyper   count	enumerateidQInputDialoggetItemindexfigureoptionsfigure_edit)	r   axesaxtitlesr  duplicate_titlesiitemoks	            r   r  z$NavigationToolbar2QT.edit_parameters  s   {{!!**,!!))""$g/KMY!^CB     33V$3 W%3 

6$"--/(JKL	3
 d2h//023 F   $* FV\\%-@1-D F  F"4 72!9 001I6"R&A!66I7 !--55""$^VQ?HD" fll4()B!!"d+'  Fs   9B%G'$G,>G,c                    d| j                   v r5| j                   d   j                  | j                  j                  dk(         d| j                   v r6| j                   d   j                  | j                  j                  dk(         y y )Nr  PANr  ZOOM)r  
setCheckedmoder3  r   s    r   _update_buttons_checkedz,NavigationToolbar2QT._update_buttons_checked  sg    DMM!MM% ++DIINNe,CDT]]"MM&!,,TYY^^v-EF #r   c                 >    t        |   |  | j                          y r   )re   r  rf  r   r   r   s     r   r  zNavigationToolbar2QT.pan  s    T$$&r   c                 >    t        |   |  | j                          y r   )re   r  rf  rh  s     r   r  zNavigationToolbar2QT.zoom  s    d$$&r   c                 T    | j                   r| j                  j                  |       y y r   )r  r  setTextr   ss     r   set_messagez NavigationToolbar2QT.set_message  s"    MM!!!$ r   c                     | j                   j                  j                  j                  }||z
  }||z
  }||||z
  ||z
  fD cg c]  }t	        |       }}| j                   j                  |       y c c}w r   )r  r   r  r  r  r  )	r   r  r  r  r  r  r  valr  s	            r   draw_rubberbandz$NavigationToolbar2QT.draw_rubberband  so    ##((//b[b[%'R"Wb2g$>?SC??!!$' @s   A3c                 :    | j                   j                  d        y r   )r  r  r   s    r   remove_rubberbandz&NavigationToolbar2QT.remove_rubberband!  s    !!$'r   c                      j                   \t         j                  j                   j                  j	                                _          j                  j                  d fd        j                   j                           j                   j                  d        j                   j                           j                   S )Nr  c                 8    j                   j                         S r   )r  reject)er   s    r   r   z9NavigationToolbar2QT.configure_subplots.<locals>.<lambda>)  s    )=)=)D)D)F r   T)	r  SubplotToolQtr  r   r'  mpl_connectupdate_from_current_subplotparssetModalr  r   s   `r   configure_subplotsz'NavigationToolbar2QT.configure_subplots$  s    '#0""DKK$6$6$8$:D KK##FH<<>%%d+!!####r   c                    | j                   j                         }t        |j                               }| j                   j	                         }t
        j                  j                  t        j                  d         }t
        j                  j                  || j                   j                               }g }d }|D ]F  \  }	}
dj                  |
D cg c]  }d|z  	 c}      }|	 d| d}||
v r|}|j                  |       H dj                  |      }t        j                  j                  | j                   j!                         d|||      \  }}|r]|dk7  r0t
        j                  j#                  |      t        j                  d<   	 | j                   j$                  j'                  |       |S |S c c}w # t(        $ r{}t        j*                  j-                  | d	t/        |      t        j*                  j0                  j2                  t        j*                  j0                  j4                         Y d }~|S d }~ww xY w)
Nzsavefig.directory z*.%sz (rG  z;;zChoose a filename to save tor  zError saving file)r  get_supported_filetypes_groupedsortedri  get_default_filetypeospath
expanduserr}   r  rz  get_default_filenameappendr   QFileDialoggetSaveFileNamer'  dirnamer   savefigr  rI  criticalr   StandardButtonOkNoButton)r   r   	filetypessorted_filetypesdefault_filetype	startpathr   filtersselectedFilterr3  extsext	exts_listrN  fnamerw  s                   r   save_figurez NavigationToolbar2QT.save_figure/  s   KK??A	!)//"34;;;;=GG&&s||4G'HI	Y(H(H(JK* 	#JD$$!?3&3,!?@IvR	{!,F4'!'NN6"	# ))G$!--==KK "@%^%v B46GGOOE4J01C""**51 u+ "@   C%%..-s1v))88;;))88AAC C Cs   F5
%F: :	H>A0H99H>c                 F   | j                   j                  dkD  }| j                   j                  t        | j                         dz
  k  }d| j                  v r| j                  d   j	                  |       d| j                  v r| j                  d   j	                  |       y y )Nr   r   backrV  )
_nav_stack_posrK  r  
setEnabled)r   can_backwardcan_forwards      r   set_history_buttonsz(NavigationToolbar2QT.set_history_buttonsP  s    ++a/oo**S-AA-EET]]"MM&!,,\:%MM)$//< &r   r  )r   r   r   r
   r  r(   rW  r   r  r  rf  r  r  rn  rq  rs  r|  r  r  r   )r  r3  r  r   s   000@r   r  r    s    /$../I'((($(..z:Q>	23+2Z0,<G''%((	$B=a 	)s   A9r  c                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )rx  c           	         t         |   |       | j                  t        j                  t        t        j                  d                         | j                  d       i | _	        t        j                         }| j                  |       dg dd| j                  fgfdddgd	| j                  fd
| j                  fd| j                   fgffD ]  \  }}}t        j"                         }|j%                  |       t        j&                  |      }|j)                  |       t        j*                  |      }	|D ]  }
t        j,                         x| j                  |
<   }|j/                  dd       |j1                  d       |j3                  d       |j5                  d       |j6                  j9                  | j:                         |	j=                  |
|        |j?                  d       |D ]m  \  }
}t        j@                  |
      }|jC                  d       |jD                  j9                  |       |j)                  |       |
dk(  s^|jG                          o  || _$        i | _%        d | _&        | jO                          y )Nzimages/matplotlib.pngSubplotToolBorders)topbottomr6   r:   zExport valuesSpacingshspacewspacezTight layoutResetCloser   r   r  g{Gzt?F)(re   r   r   r   r   r   r   r   setObjectName
_spinboxesr   QHBoxLayout	setLayout_export_values_tight_layout_resetr  QVBoxLayout	addLayout	QGroupBoxr%  QFormLayoutQDoubleSpinBoxsetRangesetDecimalssetSingleStepsetKeyboardTrackingvalueChangedr   _on_value_changedaddRow
addStretchQPushButtonsetAutoDefaultclickedr  _figure	_defaults_export_values_dialogrz  )r   	targetfigr'  main_layoutgroup	spinboxesr:  layoutboxinnerr3  spinboxmethodr2  r   s                 r   r   zSubplotToolQt.__init__Z  sN    5;;$$%<=>@ 	A=)++-{#3"D$7$789; H%!4#5#56DKK(DJJ')*	*+ 	&%E9g **,F!!&)%%e,CS!))#.E! ,2;2J2J2LL%  A&##A&%%e,++E2$$,,T-C-CDT7+, a  ' &f"..t4%%e,&&v.  (7?OO%&/	&> !%)",,.r   c           	          | j                   j                         D ci c]&  \  }}|t        | j                  j                  |      ( c}}| _        | j                          y c c}}w r   )r  ri  r  r  subplotparsr  r  )r   r3  r  s      r   rz  z-SubplotToolQt.update_from_current_subplotpars  sT    /3/D/D/FH+dG "74<<+C+CT#JJ HHs   +A#c                    t        j                         | _        t        j                         }| j                  j	                  |       t        j
                         }|j                  d       |j                  |       |j                  dj                  d | j                  j                         D                     |j                         }|j                  t        j                  |j!                         j#                               j%                  d|j'                               j)                         dz          |j+                  |       | j                  j-                          y )NTz,
c              3   N   K   | ]  \  }}| d |j                         d  yw)=z.3N)r8  )r  attrr  s      r   r  z/SubplotToolQt._export_values.<locals>.<genexpr>  s2      E(4 q 45 Es   #%r      )r   QDialogr  r  r  QPlainTextEditsetReadOnlyr%  setPlainTextrz  r  ri  maximumSize	setHeightr   QFontMetricsdocumentdefaultFontr   toPlainTextr  setMaximumSizer  )r   r  r(  r   s       r   r  zSubplotToolQt._export_values  s    &/%6%6%8"&&("",,V4'')JJ E,0OO,A,A,CE E	F
 !t}}::<=T!T%%'(B7	8 	D!""'')r   c                    | j                   }dD ]U  \  }}||   j                  ||   j                         dz          ||   j                  ||   j                         dz
         W  | j                  j
                  di |j                         D ci c]  \  }}||j                          c}} | j                  j                  j                          y c c}}w )N))r  r  )r6   r:   gMbP?r   )	r  
setMinimumr8  
setMaximumr  subplots_adjustri  r  r\  )r   r  ry  higherr  r  s         r   r  zSubplotToolQt._on_value_changed  s    OO	C 	JME6f((5)9)?)?)AD)HIe''	&(9(?(?(AD(HI	J 	%$$ 	N:C//:KLwtW]]_$L	N%%' Ms   Cc                 f   | j                   j                          | j                  j                         D ]V  \  }}|j	                  d       |j                  t        | j                   j                  |             |j	                  d       X | j                   j                  j                          y )NTF)
r  tight_layoutr  ri  blockSignalssetValuer  r  r  r\  )r   r  r  s      r   r  zSubplotToolQt._tight_layout  s    !!#!__224 	(MD'  &WT\\%=%=tDE  '	( 	%%'r   c                     | j                   j                         D ]J  \  }}|j                  dd       |j                  d       |j	                  |       |j                  d       L | j                          y )Nr   r   TF)r  ri  r  r  r  r  )r   r  r8  s      r   r  zSubplotToolQt._reset  sj    "nn224 	(NGUQ"  &U#  '		(
 	 r   )
r   r   r   r   rz  r  r  r  r  r   r   s   @r   rx  rx  Y  s"    */X
**((!r   rx  c                   2    e Zd ZddZd Zd Zd Zd Zd Zy)		ToolbarQtNc                    t        j                  | |       t        j                  j                  | |       | j	                  t
        j                  j                  t        t
        j                  j                  j                        t        t
        j                  j                  j                        z               t        j                  d      }|j                  t
        j                  j                  t        t
        j                  j                  j                        t        t
        j                  j                  j                        z               |j!                  t        j"                  t        j"                  j$                  j&                  t        j"                  j$                  j(                               | j+                  |      | _        i | _        i | _        y )Nr  )r   r   r   r  r	  r   r   r
  r   r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  _message_action
_toolitems_groups)r   toolmanagerr'  message_labels       r   r   zToolbarQt.__init__  sJ   ""45##D&1VYY22FII))889FII));;<=> 	? "((,""699#:#:FII++667FII++889:$; 	< 	##I$9$9!!((22!!((00%
 	  $~~m<r   c                     t        j                         }|r%|j                  t        j	                   |             |j                         |r|j                  |        fd}|r-|j                  d       |j                  j                  |       n|j                  j                  |        j                  j                  g         j                  |||        j                     j                  ||f       y )Nc                  (    j                          y r   )trigger_tool)r3  r   s   r   handlerz'ToolbarQt.add_toolitem.<locals>.handler  s    d#r   T)r   QToolButtonsetIconr  r  rk  r  r  toggledr   r  r  
setdefault_add_to_groupr  )	r   r3  r  r  r*  descriptiontoggler2  r  s	   ``       r   add_toolitemzToolbarQt.add_toolitem  s     &&t,NN/55dJGHtk*	$%NN""7+NN""7+""4,5$9$$fg%67r   c                    | j                   j                  |g       }|s,| j                  | j                        }|j	                  |       ||   }| j                  ||      }|j                  ||       || j                   |<   y r   )r  r   insertSeparatorr  r  insertWidgetr(   )	r   r  r3  r2  r  grsepbeforewidgets	            r   r  zToolbarQt._add_to_group  ss    \\eR(&&t';';<CIIcNH""662
		(F# Ur   c                     || j                   vry | j                   |   D ]L  \  }}|j                  j                  |       |j                  |       |j                  j	                  |       N y r   )r  r  
disconnectrd  r   )r   r3  r  r2  r  s        r   toggle_toolitemzToolbarQt.toggle_toolitem  s_    t&#t4 	,OFGNN%%g.g&NN""7+	,r   c                 n    | j                   j                  |g       D ]  \  }}|j                  d         y r   )r  pop	setParent)r   r3  r2  r  s       r   remove_toolitemzToolbarQt.remove_toolitem  s4    #224< 	#OFGT"	#r   c                 X    | j                  | j                        j                  |       y r   )widgetForActionr  rk  rl  s     r   rn  zToolbarQt.set_message  s!    T112::1=r   r   )	r   r   r   r   r  r  r	  r  rn  r   r   r   r  r    s     $8,!,#>r   r  c                   $     e Zd Z fdZd Z xZS )ConfigureSubplotsQtc                 2    t        |   |i | d | _        y r   )re   r   r  r   s      r   r   zConfigureSubplotsQt.__init__   s    $)&)#r   c                 .    t         j                  |        y r   )r  r|  r  s     r   triggerzConfigureSubplotsQt.trigger  s    //5r   )r   r   r   r   r  r   r   s   @r   r  r    s    $6r   r  c                       e Zd Zd Zy)SaveFigureQtc                 J    t         j                  | j                                y r   )r  r  "_make_classic_style_pseudo_toolbarr  s     r   r  zSaveFigureQt.trigger
  s    ((335	7r   Nr   r   r   r  r   r   r   r  r    s    7r   r  c                       e Zd Zd Zd Zy)RubberbandQtc                 T    t         j                  | j                         d ||||       y r   )r  rq  r  )r   r  r  r  r  s        r   rq  zRubberbandQt.draw_rubberband  s'    ,,335tRR	Mr   c                 J    t         j                  | j                                y r   )r  rs  r  r   s    r   rs  zRubberbandQt.remove_rubberband  s    ..335	7r   N)r   r   r   rq  rs  r   r   r   r  r    s    M7r   r  c                       e Zd Zd Zy)HelpQtc                 b    t         j                  j                  d d| j                                y )NHelp)r   rI  information_get_help_htmlr  s     r   r  zHelpQt.trigger  s#    ))$8K8K8MNr   Nr  r   r   r   r  r    s    Or   r  c                       e Zd Zd Zy)ToolCopyToClipboardQTc                     | j                   j                         }t        j                  j	                         j                         j                  |       y r   )r  grabr   r{   r|   	clipboard	setPixmap)r   r   r   pixmaps       r   r  zToolCopyToClipboardQT.trigger"  s:    !!#'')335??Gr   Nr  r   r   r   r%  r%     s    Hr   r%  c                   0    e Zd ZeZeZeZej                  Z
y)
_BackendQTN)r   r   r   r   backend_versionr   FigureCanvasr   FigureManagerr  mainloopr   r   r   r,  r,  +  s    !O!L#M..Hr   r,  )Tr  r  r   r  ry   r}   r   r   r   matplotlib._pylab_helpersr   matplotlib.backend_basesr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   +matplotlib.backends.qt_editor.figureoptionsbackends	qt_editorrX  r  r   r   r   r   r   r   r   r   r   r  r   Keyrq  KeyboardModifierrp  MOVEHANDPOINTERSELECT_REGIONWAITRESIZE_HORIZONTALRESIZE_VERTICALCursorShaper  	lru_cacher   r   r   r[  r   QMainWindowr  r   r  r  r  rx  r  _register_tool_classConfigureSubplotsBaser  SaveFigureBaser  RubberbandBaser  ToolHelpBaser  ToolCopyToClipboardBaser%  _toolbar2_class_toolmanager_toolbar_classexportr,  )r  r  r   rP  s   0000r   <module>rK     s    	 
   1 1 )   
 D C H H H'7 '7'7 	''7 	 	'7
 	'7 	!'7 	!'7 	'7 	!'7 	'7 	'7 	'7 	'7 	'7 	'7  	!'7" 	!#'7$ 	%%'7& 	''7* 
S\\X%=	5I+'7, 
s||x7VYG-'7. 	/'70 	&1'72 	3'74 	5'76 	7'78 	9'7: 	;'7< 	='7> 	?'7@ 	A'7B 	C'7D 	E'7F 	G'7H 	I'7J 	!K'7L 	!M'7).2aGGFIIMM1%&))`	 	S WVYY//56WVYY]]C()+	 
'	+,	-(			.	|$		"	"O4		 	 /26
-1QAwvyy$$a((
 Q6 6r=@i :K%y'8'8 K\
"&& "p*' p*fz=-y/A/A z=z_!I%% _!D@>!9#5#5 @>F $##N36-== 6 46 $##N37=// 7 47 $##N37=// 7 47 $##N3O]'' O 4O
 $##N3HMAA H 4H #7 -6 * 
/ / /m )Z	
s   .NAN
(N