
    %WhH                     @   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           X/var/www/html/jupyter_env/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                    | j                          t        j                  j                  | t        j                  j
                  j                         t        d      rj                          j                          y )NcloseAllWindows)
deleteLaterr   QCoreApplicationsendPostedEventsQEventr   DeferredDeletehasattrr   quit)r   qapp_or_eventloops    r   handle_sigintz*_allow_interrupt_qt.<locals>.handle_sigint   sW    
00V]]5G5G5V5VW$&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 ej(                         d
        Z ej(                  ej.                        d        Zf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#Z0d$ Z1d(d%Z2d& Z3d' Z4xZ5S 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  sO     	  "--55d6N6NO,,44T5M5MN r   c                     |j                         t        j                  j                  j                  k(  r| j                          t        |   ||      S r   )typer   r   r   DevicePixelRatioChanger	  re   eventFilter)r   sourcer  r   s      r   r  zFigureCanvasQT.eventFilter	  s?    ::<6==--DDD$$&w"6511r   c                    | j                         j                         }t        d t        j                         j                  dd      d d D              }|dk\  r"| j                          |j                  |        y |j                  j                  | j                         | j                  |j                                y )Nc              3   2   K   | ]  }t        |        y wr   )int).0xs     r   	<genexpr>z+FigureCanvasQT.showEvent.<locals>.<genexpr>  s     T1ATs   .   )rw   rw   )windowwindowHandletupler   r   splitr	  installEventFilterscreenChangedr   r  r  )r   r  r  current_versions       r   	showEventzFigureCanvasQT.showEvent  s     ++-T0A0G0GQ0OPRQR0STTf$$$&%%d+  (()<)<=0r   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+  r  r   bboxheightdevice_pixel_ratioy)r   r,  r  r2  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   r3  _mpl_modifiers_process)r   r  modss      r   
enterEventzFigureCanvasQT.enterEvent4  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_eventr6  )r   r{   restoreOverrideCursorr   r   r3  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_eventr6  buttondr   buttonr   r   r3  r:  r;  r   r  rF  s      r   mousePressEventzFigureCanvasQT.mousePressEventH  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 )NrC  T)dblclickr7  r8  rD  rG  s      r   mouseDoubleClickEventz$FigureCanvasQT.mouseDoubleClickEventP  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)buttonsr7  r8  )r   r   r3  _mpl_buttonsrN  r:  r;  r  s     r   mouseMoveEventzFigureCanvasQT.mouseMoveEventX  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_eventr6  rD  rG  s      r   mouseReleaseEventz FigureCanvasQT.mouseReleaseEventa  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)stepr7  r8  )
pixelDeltaisNullr   r{   r|   platformName
angleDeltar2  r   r   r3  r:  r;  )r   r  stepss      r   
wheelEventzFigureCanvasQT.wheelEventi  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_eventr8  _get_keyr   r   r3  r;  r   r  keys      r   keyPressEventzFigureCanvasQT.keyPressEventw  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_eventr8  ra  rc  s      r   keyReleaseEventzFigureCanvasQT.keyReleaseEvent~  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  widthr1  r0  dpiset_size_inchesr   QWidgetr  r   r;  	draw_idle)r   r  whdpivalwinchhinchs          r   r  zFigureCanvasQT.resizeEvent  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   rq  rr  s      r   sizeHintzFigureCanvasQT.sizeHint  s%    $$&1||Aq!!r   c                 .    t        j                  dd      S )N
   )r   rw  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   rE  items)rN  maskrF  s      r   rO  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)r7  r  r~  rd  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)Nr  rB   +)
rd  r:  r  KeyErrorr   
maxunicodechrremovelowerjoin)r   r  	event_keyr<  rd  s        r   rb  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   
singleShotr  r   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   rp  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  r1  r  ptr   s     r   r  z&FigureCanvasQT.blit.<locals>.<genexpr>  s!     NBc"t6667N   "%)r   r/  boundsrepaintrectr0  )r   r/  lbrq  rr  ts   `      r   blitzFigureCanvasQT.blit  sb    <DKK;;##DN$++N
1aEQ		**,q0!Q7r   c                 f   | j                         5  | j                  s
	 d d d        y d| _        t        |       s&| 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   r0  rl  r  	Exception	traceback	print_excr   s    r   r  zFigureCanvasQT._draw_idle  s    !!# 
	&%%
	& 
	& "'D$4;;=A#59J
	& 
	&&		
	& 
	&  &##%&
	& 
	&s.   B'9B'+BB$!B'#B$$B''B0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   r1  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  rq  rr  r   r  r  r  r  s	   `    @@@@r   drawRectanglezFigureCanvasQT.drawRectangle  sO     MMLBAqaBaB5 5*#6 r   r   )r   )6r   r   r   required_interactive_frameworkr   
_timer_clsr   classpropertymanager_classr   LEFTRIGHTMIDDLEBACKFORWARDr  r   r   rE  r   Slotr	  r   QScreenr  r  r#  r)  r3  r=  rA  rH  rK  rP  rS  r^  re  rh  r  rx  r{  staticmethodrO  r:  rb  r  r  r  r  rp  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!  V[[]$ $ V[[O  O2

1CH,	1122.2200**"$ , , 8$ 8 8&4:	($

98&g	s   &/E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.closeEvent5  s     5!r   )r   r   r   r   Signalr  r  r   r   s   @r   r  r  2  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
addToolBarrx  r0  r   rl  setCentralWidgetcanvasr}   is_interactiveshowrp  setFocusPolicyr   r   FocusPolicyStrongFocussetFocusraise_)
r   r  numr   r   
tbs_heightcs	cs_heightr0  r   s
            r   r   zFigureManagerQT.__init__H  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_togglep  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._widgetclosedv  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  r1  r  rl  r0  r   )r   rl  r0  extra_widthextra_heights        r   r   zFigureManagerQT.resize  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partialr  	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namer  r   existsr   QPixmapsetDevicePixelRatior  r   r  backgroundRolevalueforegroundRolecreateMaskFromColorr   r   r   MaskModeMaskOutColorfillsetMaskr   )r   rE  path_regular
path_largefilenamepm
icon_colorr~  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warningr9  len	get_label	get_titler  filter
get_xlabel
get_ylabelr  r   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moderE  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  rw  r   r   r   s     r   r  zNavigationToolbar2QT.pan  s    T$$&r   c                 >    t        |   |  | j                          y r   )re   r  rw  ry  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/  r0  r  r  )	r   r  r  r  r  r  r0  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_rubberband2  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   r9  mpl_connectupdate_from_current_subplotparssetModalr  r   s   `r   configure_subplotsz'NavigationToolbar2QT.configure_subplots5  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 (rY  z;;zChoose a filename to save tor  zError saving file)r  get_supported_filetypes_groupedsortedr}  get_default_filetypeospath
expanduserr}   r  r  get_default_filenameappendr   QFileDialoggetSaveFileNamer9  dirnamer   savefigr  r[  criticalr   StandardButtonOkNoButton)r   r   	filetypessorted_filetypesdefault_filetype	startpathr   filtersselectedFilterrE  extsext	exts_listr`  fnamer  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   backrj  )
_nav_stack_posr]  r!  
setEnabled)r   can_backwardcan_forwards      r   set_history_buttonsz(NavigationToolbar2QT.set_history_buttonsa  s    ++a/oo**S-AA-EET]]"MM&!,,\:%MM)$//< &r   r  )r   r   r   r
   r#  r(   rh  r   r)  r  rw  r  r  r  r  r  r  r  r  r   )r  rE  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 )r  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	QGroupBoxr7  QFormLayoutQDoubleSpinBoxsetRangesetDecimalssetSingleStepsetKeyboardTrackingvalueChangedr   _on_value_changedaddRow
addStretchQPushButtonsetAutoDefaultclickedr  _figure	_defaults_export_values_dialogr  )r   	targetfigr9  main_layoutgroup	spinboxesrN  layoutboxinnerrE  spinboxmethodrF  r   s                 r   r   zSubplotToolQt.__init__k  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  r}  r  r  subplotparsr  r  )r   rE  r  s      r   r  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)rJ  )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setReadOnlyr7  setPlainTextr  r  r}  maximumSize	setHeightr   QFontMetricsdocumentdefaultFontr  toPlainTextr0  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  
setMinimumrJ  
setMaximumr  subplots_adjustr}  r  rp  )r   r  r  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  r}  blockSignalssetValuer  r  r  rp  )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  r}  r  r  r  r  )r   r  rJ  s      r   r  zSubplotToolQt._reset  sj    "nn224 	(NGUQ"  &U#  '		(
 	 r   )
r   r   r   r   r  r  r  r  r  r   r   s   @r   r  r  j  s"    */X
**((!r   r  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/  r0  r1  r2  r3  r4  r5  r6  r7  _message_action
_toolitems_groups)r   toolmanagerr9  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)rE  r   s   r   handlerz'ToolbarQt.add_toolitem.<locals>.handler  s    d#r   T)r   QToolButtonsetIconr  r)  r|  r+  r*  toggledr   r  r  
setdefault_add_to_groupr  )	r   rE  r  r+  r<  descriptiontogglerF  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  rE  rF  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  
disconnectru  r   )r   rE  r  rF  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   rE  rF  r  s       r   remove_toolitemzToolbarQt.remove_toolitem  s4    #224< 	#OFGT"	#r   c                 X    | j                  | j                        j                  |       y r   )widgetForActionr   r|  r}  s     r   r  zToolbarQt.set_message  s!    T112::1=r   r   )	r   r   r   r   r  r  r  r  r  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  r  r)  )r   r  r  r  r  s        r   r  zRubberbandQt.draw_rubberband"  s'    ,,335tRR	Mr   c                 J    t         j                  | j                                y r   )r  r  r)  r   s    r   r  zRubberbandQt.remove_rubberband&  s    ..335	7r   N)r   r   r   r  r  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   r[  information_get_help_htmlr  s     r   r%  zHelpQt.trigger-  s#    ))$8K8K8MNr   Nr*  r   r   r   r0  r0  +  s    Or   r0  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.trigger3  s:    !!#'')335??Gr   Nr*  r   r   r   r6  r6  1  s    Hr   r6  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_editorri  r  r   r   r   r   r   r   r   r   r   r  r   Keyr  KeyboardModifierr  MOVEHANDPOINTERSELECT_REGIONWAITRESIZE_HORIZONTALRESIZE_VERTICALCursorShaper(  	lru_cacher   r   r   ro  r   QMainWindowr  r   r  r  r  r  r  _register_tool_classConfigureSubplotsBaser"  SaveFigureBaser'  RubberbandBaser,  ToolHelpBaser0  ToolCopyToClipboardBaser6  _toolbar2_class_toolmanager_toolbar_classexportr=  )r  r  r   rd  s   0000r   <module>r\     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"=Ji :W%y'8'8 Wt
"&& "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 * 
/ / /O!)Z	
s   .NAN
(N