
    h`              	          S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r
SSKrSSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJrJrJrJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&  SSK'r'SSK(r'\RR                  " \*5      r+Sr,\RZ                  " S	5      S
 5       r. " S S\5      r/\R`                  " SSSSSSS9 " S S\5      5       r1 " S S\5      r2 " S S\\'Rf                  5      r4 " S S\45      r5 " S S\'Rl                  5      r7 " S S\5      r8S  r9S! r: " S" S#\\'Rv                  5      r< " S$ S%\\'Rv                  5      r=\R|                  " \45       " S& S'\R~                  5      5       r@\R|                  " \45       " S( S)\R                  5      5       rB\R|                  " \45       " S* S+\R                  5      5       rD " S, S-\'R                  5      rF\R|                  " \45       " S. S/\R                  5      5       rH\R|                  " \45       " S0 S1\R                  5      5       rJ\<\8lK        \=\8lL        \R                   " S2 S3\5      5       rNg)4z
A wxPython backend for matplotlib.

Originally contributed by Jeremy O'Donoghue (jeremy@o-donoghue.com) and John
Hunter (jdhunter@ace.bsd.uchicago.edu).

Copyright (C) Jeremy O'Donoghue & John Hunter, 2003-4.
    N)_BackendFigureCanvasBaseFigureManagerBaseGraphicsContextBaseMouseButtonNavigationToolbar2RendererBase	TimerBaseToolContainerBasecursors
CloseEventKeyEventLocationEvent
MouseEventResizeEvent)_apicbookbackend_tools_c_internal_utils)Gcf)Path)Affine2DK      c                      [         R                  " S5      n U R                  S5        [        R                  " 5         [
        R                  " 5         U $ )NFT)wxAppSetExitOnFrameDeleter   _setup_new_guiappr    Win32_SetProcessDpiAwareness_max)wxapps    P/var/www/html/env/lib/python3.13/site-packages/matplotlib/backends/backend_wx.py_create_wxappr#   ,   s:    FF5ME	t$	668L    c                   >   ^  \ rS rSrSrU 4S jrS rS rS rSr	U =r
$ )TimerWx6   z/Subclass of `.TimerBase` using wx.Timer events.c                    > [         R                  " 5       U l        U R                  U R                  l        [
        TU ]  " U0 UD6  g N)r   Timer_timer	_on_timerNotifysuper__init__)selfargskwargs	__class__s      r"   r/   TimerWx.__init__9   s2    hhj!^^$)&)r$   c                 d    U R                   R                  U R                  U R                  5        g r)   )r+   Start	_interval_singler0   s    r"   _timer_startTimerWx._timer_start>   s    $..$,,7r$   c                 8    U R                   R                  5         g r)   )r+   Stopr9   s    r"   _timer_stopTimerWx._timer_stopA   s    r$   c                 d    U R                   R                  5       (       a  U R                  5         g g r)   )r+   	IsRunningr:   r9   s    r"   _timer_set_intervalTimerWx._timer_set_intervalD   s&    ;;  "" #r$   )r+   )__name__
__module____qualname____firstlineno____doc__r/   r:   r>   rB   __static_attributes____classcell__r3   s   @r"   r&   r&   6   s    9*
8   r$   r&   z2.0r   backendz
the futurewxaggz7See the Matplotlib usage FAQ for more info on backends.)nameobj_typeremovalalternativeaddendumc                   B  ^  \ rS rSrSr0 S\R                  _S\R                  _S\R                  _S\R                  _S\R                  _S\R                  _S	\R                  _S
\R                  _S\R                  _S\R                  _S\R                  _S\R                  _S\R                  _S\R                  _S\R                  _S\R                  _S\R                  _S\R                  0Er	\R                  \R                  \R                  S.r\R                  \R                  \R                   \R"                  \R$                  \R$                  \R$                  S.rU 4S jrS rS rS rS r\S 5       rS$S jrS rS%S jrS  rS! rS" r S#r!U =r"$ )&
RendererWxI   z
The renderer handles all the drawing primitives using a graphics
context instance that controls the colors/styles. It acts as the
'renderer' instance used by many classes in the hierarchy.
d      ,  i  i  iX  i  i   i  
ultralightlightnormalmediumsemiboldboldheavy	ultraboldblack)italicr[   oblique)SansRomanScript
DecorativeModernCouriercourierc                    > [         TU ]  5         [        R                  S[	        U 5      5        UR                  5       U l        UR                  5       U l        Xl	        0 U l
        X l        SU l        g)z)Initialise a wxWindows renderer instance.%s - __init__()N)r.   r/   _logdebugtypeGetWidthwidth	GetHeightheightbitmapfontddpigc)r0   rt   rv   r3   s      r"   r/   RendererWx.__init__   sW    

$d4j1__&
&&(
r$   c                     g)NT r9   s    r"   flipyRendererWx.flipy   s    r$   c                 :   U(       a  [         R                  " U5      nU R                  c  U R                  5       nOU R                  nUR                  nU R                  X5      nUR                  U[        R                  5        UR                  U5      u  pxpXxU	4$ r)   )
r   
strip_mathrw   new_gcgfx_ctxget_wx_fontSetFontr   BLACKGetFullTextExtent)r0   spropismathrw   r   fontwhdescentleadings              r"   get_text_width_height_descent(RendererWx.get_text_width_height_descent   s~       #A77?BB**(bhh'!(!:!:1!=gW}r$   c                 2    U R                   U R                  4$ r)   )rq   rs   r9   s    r"   get_canvas_width_height"RendererWx.get_canvas_width_height   s    zz4;;&&r$   c                    UR                  5       nUb  UR                  nUR                  nUR                  U:w  aN  X#l        Uc  UR	                  5         g UR                  US   U R                  US   -
  US   -
  US   US   5        g g )Nr   r         )get_clip_rectangleboundsr   _lastcliprect	ResetClipCliprs   )r0   rw   
new_boundsr   s       r"   handle_clip_rectangle RendererWx.handle_clip_rectangle   s    **,
!#**J**  J.$.!!!!#Z]![[:a=8:a=H']JqM; /r$   c                    U R                  5       nUR                  U5       H  u  pEU[        R                  :X  a  UR                  " U6   M*  U[        R
                  :X  a  UR                  " U6   MO  U[        R                  :X  a  UR                  " U6   Mt  U[        R                  :X  a  UR                  " U6   M  U[        R                  :X  d  M  UR                  5         M     U$ r)   )
CreatePathiter_segmentsr   MOVETOMoveToPointLINETOAddLineToPointCURVE3AddQuadCurveToPointCURVE4AddCurveToPoint	CLOSEPOLYCloseSubpath)r   path	transformwxpathpointscodes         r"   convert_pathRendererWx.convert_path   s    ##% ..y9LFt{{"""F+$%%v.$**F3$&&/'##% : r$   c                    UR                  5         U R                  U5        UR                  nU[        5       R	                  SS5      R                  SU R                  5      -   nU R                  XRU5      nUbF  UR                  [        R                  " UR                  U5      5      5        UR                  U5        OUR                  U5        UR                  5         g )Ng      ?g              )selectr   r   r   scale	translaters   r   SetBrushr   Brushget_wxcolourDrawPath
StrokePathunselect)r0   rw   r   r   rgbFacer   r   s          r"   	draw_pathRendererWx.draw_path   s    
		""2&**JS$'11#t{{CD	""7)<RXXboog&>?@V$v&
r$   c           	         UR                  5       nUb  UR                  u  pgpOSnSnU R                  nU R                  n	UR                  S S u  p[
        R                  R                  XUR                  5       5      nUR                  5         UR                  R                  U[        U5      [        U R                  U-
  5      [        U5      [        U	* 5      5        UR                  5         g )Nr   r   )r   r   rq   rs   shaper   BitmapFromBufferRGBAtobytesr   r   
DrawBitmapintr   )r0   rw   xyimbboxlbr   r   rowscolsrt   s                r"   
draw_imageRendererWx.draw_image   s    $$&JA!QAA

AAXXbq\
))$bjjlC
		


fc!fc$++/.B!!fc1"g	/
r$   c	                    U(       a  [         R                  " U5      n[        R                  S[	        U 5      5        UR                  5         U R                  U5        UR                  n	U R                  XE5      n
UR                  UR                  5       5      nU	R                  X5        U R                  XEU5      u  pn[        U5      n[        X=-
  5      nUS:X  a  U	R                  XBU5        Oa[        R                   " U5      nU[        R"                  " U5      -  nU[        R$                  " U5      -  nU	R'                  XBU-
  UU-
  U5        UR)                  5         g )Nz%s - draw_text()r   )r   r~   rm   rn   ro   r   r   r   r   r   get_rgbr   r   r   DrawTextmathradianssincosDrawRotatedTextr   )r0   rw   r   r   r   r   angler   mtextr   r   colorr   r   dradsxoyos                     r"   	draw_textRendererWx.draw_text   s      #A

%tDz2
		""2&**(

-$44QfEaFJC<Q1%<<&DTXXd^#BTXXd^#B##A2vq2vt<
r$   c                     [         R                  S[        U 5      5        [        U R                  U 5      U l        U R
                  R                  5         U R
                  R                  5         U R
                  $ )Nz%s - new_gc())rm   rn   ro   GraphicsContextWxrt   rw   r   r   r9   s    r"   r   RendererWx.new_gc   sM    

?DJ/#DKK6wwr$   c                    [         R                  S[        U 5      5        [        U5      nU R                  R                  U5      nUb  U$ U R                  UR                  5       5      n[        R                  " [        U5      U R                  R                  UR                  5       [        R                  5      U R                  UR                  5          U R                   UR#                  5          S9=U R                  U'   nU$ )z7Return a wx font.  Cache font instances for efficiency.z%s - get_wx_font())	pointSizefamilystyleweight)rm   rn   ro   hashru   getpoints_to_pixelsget_size_in_pointsr   Fontround	fontnamesget_nameROMAN
fontangles	get_stylefontweights
get_weight)r0   r   r   keyr   sizes         r"   r   RendererWx.get_wx_font  s    

'd44jzz~~c"K$$T%<%<%>? "$Dk>>%%dmmorxx@//$.."23##DOO$56	"8 	8

3$
 r$   c                 :    U[         S-  U R                  -  S-  -  $ )Ng      R@)PIXELS_PER_INCHrv   )r0   r   s     r"   r   RendererWx.points_to_pixels  s     4/$((:TABBr$   )rt   rv   ru   rw   rs   rq   r)   )FN)#rD   rE   rF   rG   rH   r   FONTWEIGHT_LIGHTFONTWEIGHT_NORMALFONTWEIGHT_BOLDr   FONTSTYLE_ITALICFONTSTYLE_NORMALFONTSTYLE_SLANTr   FONTFAMILY_SWISSFONTFAMILY_ROMANFONTFAMILY_SCRIPTFONTFAMILY_DECORATIVEFONTFAMILY_MODERNr   r/   r{   r   r   r   staticmethodr   r   r   r   r   r   r   rI   rJ   rK   s   @r"   rT   rT   I   s   
R  R   	R   	R!!	
 	R!! 	R!! 	R 	R 	R 	b)) 	$$ 	"&& 	"&& 	B(( 	""  	##!" 	R''#$ 	##%K* %%%%%%J ##$$&&..&&''''I	"';   8"C Cr$   rT   c                   $  ^  \ rS rSrSr\R                  \R                  \R                  S.r	\R                  \R                  \R                  S.r\R                  " 5       rU 4S jrS rS rSU 4S jjrU 4S	 jrU 4S
 jrU 4S jrS rSrU =r$ )r   i  a  
The graphics context provides the color, line styles, etc.

This class stores a reference to a wxMemoryDC, and a
wxGraphicsContext that draws to it.  Creating a wxGraphicsContext
seems to be fairly heavy, so these objects are cached based on the
bitmap object that is passed in.

The base GraphicsContext stores colors as an RGB tuple on the unit
interval, e.g., (0.5, 0.0, 1.0).  wxPython uses an int interval, but
since wxPython colour management is rather simple, I have not chosen
to implement a separate colour manager class.
)butt
projectingr   )bevelmiterr   c                   > [         TU ]  5         [        R                  S[	        U 5      U5        U R
                  R                  US5      u  p4UcL  [        R                  " U5      n[        R                  R                  U5      nS Ul        X44U R
                  U'   Xl        X0l        X@l        [        R                  " SS[        R                   5      U l        UR%                  U R"                  5        X l        g )Nz%s - __init__(): %s)NNr   r   )r.   r/   rm   rn   ro   _cacher   r   MemoryDCGraphicsContextCreater   rt   dcr   PenSOLID_penSetPenrenderer)r0   rt   r  r  r   r3   s        r"   r/   GraphicsContextWx.__init__4  s    

($t*f=kkoofl;:V$B((//3G$(G!"$+DKKFF7Arxx0	tyy! r$   c                     [         R                  S:X  a-  U R                  R                  U R                  5        SU l        gg)z2Select the current bitmap into this wxDC instance.win32TN)sysplatformr  SelectObjectrt   
IsSelectedr9   s    r"   r   GraphicsContextWx.selectG  s0    <<7"GG  -"DO #r$   c                     [         R                  S:X  a1  U R                  R                  [        R
                  5        SU l        gg)z-Select a Null bitmap into this wxDC instance.r  FN)r  r  r  r  r   
NullBitmapr  r9   s    r"   r   GraphicsContextWx.unselectM  s0    <<7"GG  /#DO #r$   c                 \  > [         R                  S[        U 5      5        U R                  5         [        TU ]  X5        U R                  R                  U R                  U R                  5       5      5        U R                  R                  U R                  5        U R                  5         g )Nz%s - set_foreground())rm   rn   ro   r   r.   set_foregroundr  	SetColourr   r   r   r  r   )r0   fgisRGBAr3   s      r"   r$   GraphicsContextWx.set_foregroundS  sp     	

*DJ7r*		D--dlln=>DII&r$   c                   > [        U5      n[        R                  S[        U 5      5        U R	                  5         SUs=:  a  S:  a  O  OSn[
        TU ]  U5        [        U R                  R                  U R                  5      5      nUS:X  a  SnU R                  R                  U5        U R                  R                  U R                  5        U R                  5         g )Nz%s - set_linewidth()r   r   )floatrm   rn   ro   r   r.   set_linewidthr   r  r   
_linewidthr  SetWidthr   r  r   )r0   r   lwr3   s      r"   r+  GraphicsContextWx.set_linewidthb  s    !H

)4:6q919Aa //@A7B		2DII&r$   c                 X  > [         R                  S[        U 5      5        U R                  5         [        TU ]  U5        U R                  R                  [        R                  U R                     5        U R                  R                  U R                  5        U R                  5         g )Nz%s - set_capstyle())rm   rn   ro   r   r.   set_capstyler  SetCapr   _capd	_capstyler   r  r   )r0   csr3   s     r"   r1  GraphicsContextWx.set_capstyleq  sm    

($t*5R 		*00@ADII&r$   c                 X  > [         R                  S[        U 5      5        U R                  5         [        TU ]  U5        U R                  R                  [        R                  U R                     5        U R                  R                  U R                  5        U R                  5         g )Nz%s - set_joinstyle())rm   rn   ro   r   r.   set_joinstyler  SetJoinr   _joind
_joinstyler   r  r   )r0   jsr3   s     r"   r8  GraphicsContextWx.set_joinstylez  sm    

)4:6b!		+224??CDDII&r$   c           	          [         R                  S[        U 5      5        [        R                  " U Vs/ s H  n[        SU-  5      PM     sn6 $ s  snf )z'Convert an RGB(A) color to a wx.Colour.z%s - get_wx_color()   )rm   rn   ro   r   Colourr   )r0   r   r   s      r"   r   GraphicsContextWx.get_wxcolour  s>    

($t*5yy7A3sQw<7887s   A)r  r  rt   r  r   r  r)   )rD   rE   rF   rG   rH   r   CAP_BUTTCAP_PROJECTING	CAP_ROUNDr3  
JOIN_BEVEL
JOIN_MITER
JOIN_ROUNDr:  weakrefWeakKeyDictionaryr  r/   r   r   r$  r+  r1  r8  r   rI   rJ   rK   s   @r"   r   r     s     [[,,ll$E }}}}}}&F &&(F!&#$9 9r$   r   c                      \ rS rSrSrSr\r\R                  " S 5      r
0 \R                  S_\R                  S_\R                  S_\R                  S_\R                   S	_\R"                  S
_\R$                  S_\R&                  S_\R(                  S_\R*                  S_\R,                  S_\R.                  S_\R0                  S_\R2                  S_\R4                  S_\R6                  S_\R8                  S_0 \R:                  S_\R<                  S_\R>                  S_\R@                  S_\RB                  S_\RD                  S_\RF                  S_\RH                  S_\RJ                  S_\RL                  S_\RN                  S _\RP                  S!_\RR                  S"_\RT                  S#_\RV                  S$_\RX                  S%_\RZ                  S&_E0 \R\                  S'_\R^                  S(_\R`                  S)_\Rb                  S*_\Rd                  S+_\Rf                  S,_\Rh                  S-_\Rj                  S._\Rl                  S/_\Rn                  S0_\Rp                  S1_\Rr                  S2_\Rt                  S_\Rv                  S
_\Rx                  S_\Rz                  S_\R|                  S	_E\R~                  S"\R                  S#\R                  S \R                  S!\R                  S\R                  S0ErESVS4 jrFSVS5 jrGS6 rHS7 rIS8 rJSWS9 jrKSVS: jrLS; rMSVS< jrN0 \OR                  ES=S>S>S?S@SASASBSC.ErPSD rQSE rR\SSF 5       rT\SSVS3SG.SH jj5       rUSI rVSVSJ jrWSK rXSL rYSM rZSXSN jr[SO r\SP r]SQ r^SR r_SS r`ST raSUrbg3)Y_FigureCanvasWxBasei  aI  
The FigureCanvas contains the figure and does event handling.

In the wxPython backend, it is derived from wxPanel, and (usually) lives
inside a frame instantiated by a FigureManagerWx. The parent window
probably implements a wx.Sizer to control the displayed control size - but
we give a hint as to our preferred minimum size.
r   c                     [         $ r)   )FigureManagerWx)clss    r"   <lambda>_FigureCanvasWxBase.<lambda>  s    ?r$   controlshiftalt	caps_lockleftuprightdownescapef1f2f3f4f5f6f7f8f9f10f11f12scroll_lockbreak	backspaceenterinsertdeletehomeendpageuppagedown0123456789+-*/decNc                    [         R                  " X5        [        R                  " [	        [
        R                  U R                  R                  R                  5      6 n[        R                  S:w  a  UR                  U5      n[        R                  R                  XX$S9  SU l        SU l        SU l        [        R                   " SS[        R"                  5      U l        [        R                   " SS[        R&                  5      U l        U R+                  [        R,                  U R.                  5        U R+                  [        R0                  U R2                  5        U R+                  [        R4                  U R6                  5        U R+                  [        R8                  U R:                  5        U R+                  [        R<                  U R>                  5        U R+                  [        R@                  U R>                  5        U R+                  [        RB                  U R>                  5        U R+                  [        RD                  U R>                  5        U R+                  [        RF                  U R>                  5        U R+                  [        RH                  U R>                  5        U R+                  [        RJ                  U R>                  5        U R+                  [        RL                  U R>                  5        U R+                  [        RN                  U R>                  5        U R+                  [        RP                  U R>                  5        U R+                  [        RR                  U R>                  5        U R+                  [        RT                  U R>                  5        U R+                  [        RV                  U R>                  5        U R+                  [        RX                  U R>                  5        U R+                  [        RZ                  U R>                  5        U R+                  [        R\                  U R^                  5        U R+                  [        R`                  U Rb                  5        U R+                  [        Rd                  U Rf                  5        U R+                  [        Rh                  U Rj                  5        U R+                  [        Rl                  U Rn                  5        U R+                  [        Rp                  U Rn                  5        U Rs                  [        Rt                  5        U Rw                  [        Rx                  5        [        R                  S:X  aG  U R{                  5       nU R}                  U R                  5       SU-  -  5        U R                  U5        gg)	z
Initialize a FigureWx instance.

- Initialize the FigureCanvasBase and wxPanel parents.
- Set event handlers for resize, paint, and keyboard and mouse
  interaction.
	__WXMSW__r   NFr   r   WHITE	__WXMAC__)Ar   r/   r   Sizemapr   ceilfigurer   r   PlatformFromDIPPanelrt   _isDrawn_rubberband_rectr  PENSTYLE_SHORT_DASH_rubberband_pen_blackPENSTYLE_SOLID_rubberband_pen_whiteBindEVT_SIZE_on_size	EVT_PAINT	_on_paintEVT_CHAR_HOOK_on_key_down
EVT_KEY_UP
_on_key_upEVT_LEFT_DOWN_on_mouse_buttonEVT_LEFT_DCLICKEVT_LEFT_UPEVT_MIDDLE_DOWNEVT_MIDDLE_DCLICKEVT_MIDDLE_UPEVT_RIGHT_DOWNEVT_RIGHT_DCLICKEVT_RIGHT_UPEVT_MOUSE_AUX1_DOWNEVT_MOUSE_AUX1_UPEVT_MOUSE_AUX2_DOWNEVT_MOUSE_AUX2_UPEVT_MOUSE_AUX1_DCLICKEVT_MOUSE_AUX2_DCLICKEVT_MOUSEWHEEL_on_mouse_wheel
EVT_MOTION
_on_motionEVT_ENTER_WINDOW	_on_enterEVT_LEAVE_WINDOW	_on_leaveEVT_MOUSE_CAPTURE_CHANGED_on_capture_lostEVT_MOUSE_CAPTURE_LOSTSetBackgroundStyleBG_STYLE_PAINTSetBackgroundColourr  GetDPIScaleFactorSetInitialSizeGetSize_set_device_pixel_ratio)r0   parentidr  r   dpiScales         r"   r/   _FigureCanvasWxBase.__init__  s    	!!$/wwDIIt{{'7'7'<'<=>;;+%>>$'D
$6 $%'VVGQ8N8N%O"%'VVGQ8I8I%J"		"++t}}-		",,/		"""D$5$56		"--1		"""D$9$9:		"$$d&;&;<		"..$"7"78		"$$d&;&;<		"&&(=(=>		"""D$9$9:		"##T%:%:;		"%%t'<'<=		"//4#8#89		"(($*?*?@		"&&(=(=>		"(($*?*?@		"&&(=(=>		"**D,A,AB		"**D,A,AB		"##T%9%9:		"--1		"%%t~~6		"%%t~~6		"..0E0EF		"++T-B-BC 1 12  *;;+%--/H(
 ;<((2	 &r$   c                    [         R                  " 5       nUR                  U R                  5        [         R                  R                  5       (       d  [         R                  R                  5       nU(       a\  [         R                  R                  U5        [         R                  R                  5         [         R                  R                  5         ggg)z*Copy bitmap of canvas to system clipboard.N)
r   BitmapDataObject	SetBitmaprt   TheClipboardIsOpenedOpenSetDataFlushClose)r0   eventbmp_objopen_successs       r"   Copy_to_Clipboard%_FigureCanvasWxBase.Copy_to_Clipboard  s    %%'$++&''))??//1L''0%%'%%'  *r$   c                 n    U R                  U R                  5       5      (       a  U R                  5         g g r)   )r  r  drawr0   r1   r2   s      r"   _update_device_pixel_ratio._FigureCanvasWxBase._update_device_pixel_ratio  s-     ''(>(>(@AAIIK Br$   c                 n    [         R                  S[        U 5      5        SU l        U R	                  SS9  g )Nz%s - draw_idle()FeraseBackground)rm   rn   ro   r  Refreshr9   s    r"   	draw_idle_FigureCanvasWxBase.draw_idle  s,    

%tDz2 	U+r$   c                 .    [         R                  " 5         g r)   )r   Yieldr9   s    r"   flush_events _FigureCanvasWxBase.flush_events'  s    

r$   c                    [        U S5      (       a  [        S5      e[        R                  " U [        R                  S9nUS:  aS  UR                  [        US-  5      SS9  U R                  [        R                  U R                  UR                  5       S9  [        R                  " 5       U l        U R                  R                  5         UR                  5         g )N_event_loopzEvent loop already runningr  r   i  T)oneShot)hasattrRuntimeErrorr   r*   ID_ANYr6   r   r  	EVT_TIMERstop_event_loopGetIdGUIEventLoopr  Runr=   )r0   timeouttimers      r"   start_event_loop$_FigureCanvasWxBase.start_event_loop+  s    4'';<<")),Q;KKGdN+TK:IIbllD$8$8U[[]IK??,

r$   c                     [        U S5      (       a<  U R                  R                  5       (       a  U R                  R                  5         U ?g g )Nr  )r  r  rA   Exitr0   r  s     r"   r  #_FigureCanvasWxBase.stop_event_loop8  sA    4''))++  %%'  (r$   c                    U R                  5       nU R                  5       n[        UR                  5       5      n/ n/ nSn[	        U5       Hc  u  nu  pSR                  U	 V
s/ s H  n
SU
-  PM
     sn
5      nUR                  U	S   5        U SU SU 3nX;   a  UnUR                  U5        Me     SR                  U5      nXEU4$ s  sn
f )z3Return the wildcard string for the filesave dialog.r   ;z*.%sz (z)||)get_default_filetypeget_supported_filetypes_groupedsorteditems	enumeratejoinappend)r0   default_filetype	filetypessorted_filetypes	wildcards
extensionsfilter_indexirN   extsextext_listwildcards                r"   _get_imagesave_wildcards,_FigureCanvasWxBase._get_imagesave_wildcards?  s    44688:	!)//"34	
()9:OA|xx >## >?Hd1g&r(2hZ8H' X&  ; HHY'	l22 !?s   "C
c                    [         R                  S[        U 5      5        U (       a  U R                  5       (       d  gU(       d  [        R
                  " U 5      n[        R                  S:X  a_  [        U R                  R                  R                  5       [        5      (       a(  U R                  R                  5       R                  5       OU R                  nUR                  USS5        U R                   bb  [#        [$        U R                   5      u  p4pVX4XT4XTXV4X4X64X6XV4/nUR'                  XpR(                  5        UR'                  XpR*                  5        gg)z]
Update the displayed image on the GUI canvas, using the supplied
wx.PaintDC device context.
z%s - gui_repaint()Nr  r   )rm   rn   ro   IsShownOnScreenr   ClientDCr  
isinstancer  canvasget_rendererrT   rt   ConvertToImageConvertToBitmapr   r  r  r   DrawLineListr  r  )r0   drawDCbmpx0y0x1y1rects           r"   gui_repaint_FigureCanvasWxBase.gui_repaintQ  s   
 	

'd4 --//[[&F ++, !3!3!@!@!BJOO {{))+;;= KK 	 	#q!$  , (=(=>NBBR$rr&6R$rr&68D&@&@A&@&@A -r$   zWindows bitmapJPEGPCXzPortable Network GraphicszTagged Image Format FilezX pixmap)r  jpegjpgpcxpngtiftiffxpmc                     [         R                  S[        U 5      5        [        R                  " U 5      nU R
                  (       d  U R                  US9  OU R                  US9  UR                  5         g)z$Called when wxPaintEvt is generated.z%s - _on_paint()r  N)	rm   rn   ro   r   PaintDCr  r  r  Destroy)r0   r  r  s      r"   r  _FigureCanvasWxBase._on_paintx  sS    

%tDz2D!}}IIVI$F+r$   c                    U R                  5         [        R                  S[        U 5      5        U R	                  5       R                  5       nU(       a  UR                  U 5      nU(       aK  W(       aD  UR                  (       d3  UR                  [        R                  -  (       d  U R                  5       nO/U R                  5       nUR                  U R                  5       5        [        U SS5      (       a  X@R                  U R                   4:X  a  gUu  U l        U l        SU l        U R                  S::  d  U R                   S::  a  gU R$                  R&                  n[        R(                  S:X  d  U R+                  5       nXV-  nU R                  U-  nU R                   U-  nU R$                  R-                  XxSS9  U R/                  SS9  [1        S	U 5      R3                  5         U R5                  5         g)
z
Called when wxEventSize is generated.

In this application we attempt to resize to fit the window, so it
is better to take the performance hit and redraw the whole window.
z%s - _on_size()_widthNFr   r  )forwardr  resize_event)r  rm   rn   ro   	GetParentGetSizerGetItem
ProportionFlagr   EXPAND
GetMinSizeGetClientSizeIncTogetattrr)  _heightr  r  rv   r  r  set_size_inchesr  r   _processr  )	r0   r  szsir   dpivalr   winchhinchs	            r"   r  _FigureCanvasWxBase._on_size  sv    	'')

$d4j1^^&&(D!B"R]]277RYY3F??$D %%'DJJt()44((T\\22$(!T\;;!t||q0 {{k)**,EOFf$v%##E%#@
 	U+ND)224r$   c                     [         R                  " 5       n [        R                  U R	                  5       4[        R
                  U R                  5       4[        R                  U R                  5       4[        R                  U R                  5       4[        R                  U R                  5       4/nU VVs1 s H  u  p#U(       d  M  UiM     snn$ s  snnf r)   )r   GetMouseStater   LEFT
LeftIsDownRIGHTRightIsDownMIDDLEMiddleIsDownBACK
Aux1IsDownFORWARD
Aux2IsDown)state	mod_tablebuttonflags       r"   _mpl_buttons _FigureCanvasWxBase._mpl_buttons  s      "
 u//12 1 1 34!3!3!56u//12  %"2"2"45
	 ,5=9<69===s   8C	Cexcludec                   S[         R                  [         R                  4S[         R                  [         R                  4S[         R
                  [         R                  4/nU b<  U R                  5       nU VVVs/ s H  u  pEnX5-  (       d  M  X:w  d  M  UPM     snnn$ U VVVs/ s H%  u  pEn[         R                  " U5      (       d  M#  UPM'     snnn$ s  snnnf s  snnnf )NctrlrS  rR  )	r   MOD_CONTROLWXK_CONTROLMOD_ALTWXK_ALT	MOD_SHIFT	WXK_SHIFTGetModifiersGetKeyState)r  rR  rL  	modifiersrN   modr   s          r"   _mpl_modifiers"_FigureCanvasWxBase._mpl_modifiers  s     R^^R^^4BJJ

+bllBLL1
	
 **,I/8 ;y^T  +2> y ; ; 09 ,y^T~~c* y , ,;,s   <CCC("C C c                 h   UR                   nX R                  ;   a  U R                  U   nO8US:  a1  [        U5      nUR                  5       (       d  UR	                  5       nOg U R                  XS9nSU;   a&  UR                  5       (       a  UR                  S5        SR                  / UQUP5      $ )N   rQ  rR  rz  )	KeyCodekeyvaldchr	ShiftDownlowerr_  isupperremover  )r0   r  keyvalr   modss        r"   _get_key_FigureCanvasWxBase._get_key  s    \\!,,v&Cc\f+C ??$$iik""5"9d?s{{}}KK xx$%%r$   c                    Uc>  [         R                  " 5       nU R                  UR                  UR                  5      u  p#OUR                  UR                  p2[         R
                  S:X  d9  U R                  5       nX$-  U R                  R                  R                  X4-  -
  4$ X R                  R                  R                  U-
  4$ )z^
Convert a wx position, defaulting to the current cursor position, to
Matplotlib coordinates.
r  )
r   r@  ScreenToClientXYr  r  r  r   rs   )r0   posr   r   r   s        r"   _mpl_coords_FigureCanvasWxBase._mpl_coords  s    
 ;""$C&&suucee4DAq55#%%q{{k)**,E7DKK,,33ag===kk&&--111r$   c                     [        SU U R                  U5      /U R                  5       Q7SU06R                  5         U (       a  UR	                  5         gg)zCapture key press.key_press_eventguiEventNr   rl  rs  r8  Skipr  s     r"   r   _FigureCanvasWxBase._on_key_down  sL    "Du%	!(,(8(8(:	!	!!)JJL r$   c                     [        SU U R                  U5      /U R                  5       Q7SU06R                  5         U (       a  UR	                  5         gg)zRelease key.key_release_eventrw  Nrx  r  s     r"   r  _FigureCanvasWxBase._on_key_up  sL    $du%	!(,(8(8(:	!	!!)JJL r$   c                 <   [         R                  " [        R                  " [        R
                  [         R                  [        R                  [         R                  [        R                  [         R                  [        R                  [         R                  [        R                  [         R                  [        R                  [         R                  [        R                   [         R"                  0US95      nU R%                  U5        U R'                  5         g )N)cursor)r   Cursorr   check_getitemr   MOVECURSOR_HANDHANDPOINTERCURSOR_ARROWSELECT_REGIONCURSOR_CROSSWAITCURSOR_WAITRESIZE_HORIZONTALCURSOR_SIZEWERESIZE_VERTICALCURSOR_SIZENS	SetCursorr  )r0   r  s     r"   
set_cursor_FigureCanvasWxBase.set_cursor  s    4--LL"..LL"..OOR__!!2??LL"..%%r'7'7##R%5%5/
   	vr$   c                 ~    U R                  5       (       a  U R                  5         U(       a  U R                  5         gg)zControl wx mouse capture.N)
HasCaptureReleaseMouseCaptureMouse)r0   captures     r"   _set_capture _FigureCanvasWxBase._set_capture  s/    ?? r$   c                 &    U R                  S5        g)zCapture changed or lostFN)r  r  s     r"   r  $_FigureCanvasWxBase._on_capture_lost  s    % r$   c                 l   UR                  5         U R                  UR                  5       =(       d    UR                  5       5        U R	                  U5      u  p#[
        R                  [        R                  [
        R                  [        R                  [
        R                  [        R                  [
        R                  [        R                  [
        R                  [        R                   0nUR#                  5       nUR%                  XU5      nU R'                  U5      nUR                  5       (       a  [)        SXX5XaS9R+                  5         gUR                  5       (       a  [)        SXX5SXaS9R+                  5         gUR-                  5       (       a  [)        SXX5XaS9R+                  5         gg)Start measuring on an axis.button_press_eventr]  rw  T)dblclickr]  rw  button_release_eventN)ry  r  
ButtonDownButtonDClickrs  r   MOUSE_BTN_LEFTr   rA  MOUSE_BTN_MIDDLErE  MOUSE_BTN_RIGHTrC  MOUSE_BTN_AUX1rG  MOUSE_BTN_AUX2rI  	GetButtonr   r_  r   r8  ButtonUp)r0   r  r   r   
button_maprM  r]  s          r"   r  $_FigureCanvasWxBase._on_mouse_button  sG   

%**,D0B0B0DE&{//!3!3 1 1{//{22

 "/''.	+Ta!*<<DHJ!!+Ta$!*<<DHJ^^-t!*<<DHJ r$   c           
         U R                  U5      u  p#UR                  UR                  -  UR                  -  nUR	                  5         [
        R                  S:X  a9  [        U S5      (       d  SU l        O U R                  (       a  SU l        gSU l        [        SXX4U R                  U5      US9R                  5         g)z3Translate mouse wheel events into matplotlib eventsr  _skipwheeleventTFNscroll_event)stepr]  rw  )rs  LinesPerActionWheelRotation
WheelDeltary  r   r  r  r  r   r_  r8  )r0   r  r   r   r  s        r"   r  #_FigureCanvasWxBase._on_mouse_wheel3  s    &##e&9&99E<L<LL

;;+%4!233'+$%%',$'+$>4A!007!	##+8:r$   c                     UR                  5         [        SU /U R                  U5      Q7U R                  5       U R	                  U5      US.6R                  5         g)r  motion_notify_event)buttonsr]  rw  N)ry  r   rs  rO  r_  r8  r  s     r"   r  _FigureCanvasWxBase._on_motionG  sV    

($ 	#$$U+	#,,.!007!		# $,8:r$   c                     UR                  5         [        SU /U R                  U5      Q7U R                  5       US.6R	                  5         g)zMouse has entered the window.figure_enter_eventr  Nry  r   rs  r_  r8  r  s     r"   r  _FigureCanvasWxBase._on_enterP  H    

*D 	&''.	& $ 3 3 5$	& '/hjr$   c                     UR                  5         [        SU /U R                  U5      Q7U R                  5       US.6R	                  5         g)zMouse has left the window.figure_leave_eventr  Nr  r  s     r"   r  _FigureCanvasWxBase._on_leaveX  r  r$   )	r  r6  r  r  r  r  r  r)  rt   r)   )r   T)crD   rE   rF   rG   rH   required_interactive_frameworkr&   
_timer_clsr   classpropertymanager_classr   rV  rZ  rX  WXK_CAPITALWXK_LEFTWXK_UP	WXK_RIGHTWXK_DOWN
WXK_ESCAPEWXK_F1WXK_F2WXK_F3WXK_F4WXK_F5WXK_F6WXK_F7WXK_F8WXK_F9WXK_F10WXK_F11WXK_F12
WXK_SCROLL	WXK_PAUSEWXK_BACK
WXK_RETURN
WXK_INSERT
WXK_DELETEWXK_HOMEWXK_END
WXK_PAGEUPWXK_PAGEDOWNWXK_NUMPAD0WXK_NUMPAD1WXK_NUMPAD2WXK_NUMPAD3WXK_NUMPAD4WXK_NUMPAD5WXK_NUMPAD6WXK_NUMPAD7WXK_NUMPAD8WXK_NUMPAD9WXK_NUMPAD_ADDWXK_NUMPAD_SUBTRACTWXK_NUMPAD_MULTIPLYWXK_NUMPAD_DIVIDEWXK_NUMPAD_DECIMALWXK_NUMPAD_ENTERWXK_NUMPAD_UPWXK_NUMPAD_RIGHTWXK_NUMPAD_DOWNWXK_NUMPAD_LEFTWXK_NUMPAD_PAGEUPWXK_NUMPAD_PAGEDOWNWXK_NUMPAD_HOMEWXK_NUMPAD_ENDWXK_NUMPAD_INSERTWXK_NUMPAD_DELETErd  r/   r  r  r  r  r  r  r  r  r   r  r  r  r  rO  r_  rl  rs  r  r  r  r  r  r  r  r  r  r  rI   rz   r$   r"   rK  rK    s    &*"J&&'BCM:
	:
g: 	

E: 		:
 	V: 			4: 	g: 	V: 	x: 			4: 			4: 			4: 			4: 			4: 			4:  			4!:" 			4#:$ 			4%:& 	

E':( 	

E):* 	

E+:, 	}-:. 	g/:0 	[1:2 	w3:4 	x5:6 	x7:8 	V9:: 	

E;:< 	x=:> 	?:@ 	A:B 	C:D 	E:F 	G:H 	I:J 	K:L 	M:N 	O:P 	Q:R 	S:T 	3U:V 	W:X 	Y:Z 	c[:\ 	u]:^ 	W_:` 	$a:b 	Wc:d 	Fe:f 	Fg:h 	h


F
5
h
hs:Gx73r
(,!3$B6


$
$
*)*
I,\ > > ,d , ,&"2" !G2.(.11r$   rK  c                      \ rS rSrSS jrS r\R                  " \\R                  5      r
\R                  " \\R                  5      =rr\R                  " \\R                  5      r\R                  " \\R                   5      r\R                  " \\R$                  5      =rr\R                  " \\R*                  5      rSrg)FigureCanvasWxia  Nc                    [         R                  S[        U 5      5        [        U R                  U R
                  R                  5      U l        U R
                  R                  U R                  5        SU l	        U R                  US9  g)zt
Render the figure using RendererWx instance renderer, or using a
previously defined renderer if none is specified.
z%s - draw()Tr$  N)rm   rn   ro   rT   rt   r  rv   r  r  r  r  )r0   r  s     r"   r  FigureCanvasWx.drawd  s^    
 	

=$t*-"4;;@''r$   c                 ~   [         R                  " [        R                  " U R                  R
                  R                  5      [        R                  " U R                  R
                  R                  5      5      nU R                  R                  [        X0R                  R                  5      5        [        R                  " U5      (       a  UR                  5       OUnUR                  X!5      (       d  [        SU 35      eU R                   (       a  U R                  5         U (       a  U R#                  5         g g )NzCould not save figure to )r   r   r   r  r  r   rq   rs   r  rT   rv   r   is_writable_file_liker  SaveFiler  r  r  )r0   filetypefilenamert   	saved_objs        r"   _print_imageFigureCanvasWx._print_imageo  s    499T[[%5%5%;%;<99T[[%5%5%<%<=?FKKOO<=33H== **,  	 !!(55!:8*EFF
 ==IIK LLN r$   )r  r  r)   )rD   rE   rF   rG   r  r  	functoolspartialmethodr   BITMAP_TYPE_BMP	print_bmpBITMAP_TYPE_JPEG
print_jpeg	print_jpgBITMAP_TYPE_PCX	print_pcxBITMAP_TYPE_PNG	print_pngBITMAP_TYPE_TIF
print_tiff	print_tifBITMAP_TYPE_XPM	print_xpmrI   rz   r$   r"   r  r  a  s    	(( ''b((*I&44b))+ +J''b((*I''b((*I&44b((* *J''b((*Ir$   r  c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )FigureFrameWxi  c                  > [         R                  S:X  a  [         R                  nO[         R                  " SS5      n[        T	U ]  S SUS9  [        R                  S[        U 5      5        [        U 5        U" U SU5      U l
        [        U R                  X5      nU R                  R                  R                  nUb  U R                  U5        [        [         R"                  UR$                  R&                  5      u  pxU R                  R)                  U R+                  [         R,                  " Xx5      5      5        U R                  R/                  U R+                  [         R,                  " SS5      5      5        U R                  R1                  5         U R3                  5         U R5                  [         R6                  U R8                  5        g )Nr     )r  r  rr  rl   r   )r   r  DefaultPositionPointr.   r/   rm   rn   ro   _set_frame_iconr  rM  managertoolbar
SetToolBarr  r   r  r   r   r  r  r  
SetMinSizeSetFocusFitr  	EVT_CLOSE	_on_close)
r0   numfigcanvas_classrr  r  r   r   r   r3   s
            r"   r/   FigureFrameWx.__init__  s5    ;;+%$$C((2r"C5

$d4j1"4S1!$++s9++%%--OOG$ 499chhmm,""4<<#>?t||BGGAqM:;
		",,/r$   c                    [         R                  S[        U 5      5        [        SU R                  5      R                  5         U R                  R                  5         S U R                  R                  l        [        R                  " U R                  R                  5         U R                  R                  U R                  R                  R                  5        UR                  5         g ! [         a     Nf = f)Nz%s - on_close()close_event)rm   rn   ro   r   r  r8  r  r  framer   destroympl_disconnectr   _id_dragAttributeErrorry  r  s     r"   r&  FigureFrameWx._on_close  s    

$d4j1=$++.779##% %)!DKK''(	KK&&t{{':':'C'CD 	

  		s   $9C. .
C;:C;)r  )rD   rE   rF   rG   r/   r&  rI   rJ   rK   s   @r"   r  r    s    0> r$   r  c                   p   ^  \ rS rSrSrU 4S jr\S 5       r\S 5       rS r	S r
S rS	 rS
 rS rSrU =r$ )rM  i  aj  
Container/controller for the FigureCanvas and GUI frame.

It is instantiated by Gcf whenever a new figure is created.  Gcf is
responsible for managing multiple instances of FigureManagerWx.

Attributes
----------
canvas : `FigureCanvas`
    a FigureCanvasWx(wx.Panel) instance
window : wxFrame
    a wxFrame instance - wxpython.org/Phoenix/docs/html/Frame.html
c                 ~   > [         R                  S[        U 5      5        U=U l        U l        [
        TU ]  X5        g )Nrl   )rm   rn   ro   r-  windowr.   r/   )r0   r  r'  r-  r3   s       r"   r/   FigureManagerWx.__init__  s1    

$d4j1#((
T[%r$   c                 .   [         R                  " 5       =(       d
    [        5       n[        X2US9nUR                  R
                  n[        R                  " 5       (       a4  UR                  R                  5         UR                  R                  5         U$ )N)r)  )r   GetAppr#   r  r  r  mplis_interactiver-  Showr  )rN  r)  r  r'  r!   r-  r  s          r"   create_with_canvas"FigureManagerWx.create_with_canvas  se     		.}cE--''MM MM##%r$   c                     [         R                  R                  5       (       d*  [         R                  " 5       nUb  UR	                  5         g g g r)   )r   r   IsMainLoopRunningr8  MainLoop)rN  r!   s     r"   start_main_loopFigureManagerWx.start_main_loop  s:    vv''))IIKE   ! *r$   c                     U R                   R                  5         U R                  R                  5         [        R
                  S   (       a  U R                   R                  5         g g )Nzfigure.raise_window)r-  r;  r  r  r9  rcParamsRaiser9   s    r"   showFigureManagerWx.show  sB    

<<-.JJ /r$   c                     [         R                  S[        U 5      5        U R                  nU(       a!  [        R
                  " UR                  5        g g )Nz%s - destroy())rm   rn   ro   r-  r   	CallAfterr  )r0   r1   r-  s      r"   r.  FigureManagerWx.destroy  s8    

#T$Z0

 LL% r$   c                 t    U R                   R                  U R                   R                  5       (       + 5        g r)   )r-  ShowFullScreenIsFullScreenr9   s    r"   full_screen_toggle"FigureManagerWx.full_screen_toggle  s$    

!!djj&=&=&?"?@r$   c                 6    U R                   R                  5       $ r)   )r5  GetTitler9   s    r"   get_window_title FigureManagerWx.get_window_title  s    {{##%%r$   c                 :    U R                   R                  U5        g r)   )r5  SetTitle)r0   titles     r"   set_window_title FigureManagerWx.set_window_title   s    U#r$   c           
          U R                   R                  U R                   R                  [        R                  " [
        R                  " U5      [
        R                  " U5      5      5      5        g r)   )r5  SetSizeClientToWindowSizer   r  r   r  )r0   rq   rs   s      r"   resizeFigureManagerWx.resize  sI     	DKK::277IIedii/<1 2 	3r$   )r-  r5  )rD   rE   rF   rG   rH   r/   classmethodr<  rA  rF  r.  rN  rR  rW  r\  rI   rJ   rK   s   @r"   rM  rM    sY    &
   ! !&A&$3 3r$   rM  c                 j    [         R                  " [        [        R                  " SU 5      5      5      $ )zP
Load a wx.Bitmap from a file in the "images" directory of the Matplotlib
data.
images)r   r   strr   _get_data_path)r  s    r"   _load_bitmaprc    s%    
 99S--hABCCr$   c                     [         R                  " 5       nS HJ  n[         R                  " [        U5      5      nUR	                  5       (       d    g UR                  U5        ML     U R                  U5        g )N)zmatplotlib.pngzmatplotlib_large.png)r   
IconBundleIconrc  IsOkAddIconSetIcons)r-  bundleimageicons       r"   r  r    sR    ]]_F;ww|E*+yy{{t	 <
 
NN6r$   c                      ^  \ rS rSrS\R
                  S.S jjr\S 5       rS r	U 4S jr
U 4S jrS rS	 rS
 rS rS rSrU =r$ )NavigationToolbar2Wxi  r   c          
         [         R                  R                  XR                  5       SUS9  [         R                  S:X  a0  U R                  U R                  5       U R                  5       -  5        0 U l        U R                   H  u  pEpgUc  U R                  5         M  U R                  SU R                  U S35      [         R                  XEUS;   a  [         R                  O[         R                  S9R                   U R                  U'   U R#                  [         R$                  ['        X5      U R                  U   S9  M     X l        U R(                  (       aS  U R+                  5         [         R,                  " U [         R.                  S9U l        U R3                  U R0                  5        U R5                  5         [6        R                  " X5        g )Nr  ro  r  .svg)PanZoom)rt   bmpDisabledlabel	shortHelpkindr  )r   ToolBarr/   r,  r  SetToolBitmapSizeGetToolBitmapSizer  wx_ids	toolitemsAddSeparatorAddTool_iconr!  
ITEM_CHECKITEM_NORMALIdr  EVT_TOOLr5  _coordinatesAddStretchableSpace
StaticTextALIGN_RIGHT_label_text
AddControlRealizer   )r0   r  coordinatesr   texttooltip_text
image_filecallbacks           r"   r/   NavigationToolbar2Wx.__init__  sh   


D"2"2"4bF;;+%""4#9#9#;D<R<R<T#TU8<4D
|!!#::D&9: "+/?+B"--!~~  0  KK IIbkk74#:T*  , 9G  ($$&!}}THDOOD,,-##D1r$   c                 h    [         R                  R                  5       R                  5       n[        R                  " SU 5      nUR                  S:X  az  UR                  5       nU(       a  UR                  SS	5      n[         R                   " 5       R#                  [         R$                  5      n[         R&                  R)                  Xx5      $ [*        R,                  R/                  U5      n	[0        R2                  " U	R5                  S
5      5      n
U(       a{  [         R                  R                  [         R                  5      nU
SSS24   S:H  R7                  SS9nUR9                  5       UR;                  5       UR=                  5       4XSS24'   [         R>                  RA                  U
RB                  S   U
RB                  S   U
RE                  5       5      $ ! [         a    [         R                  R                  [         R                  5      n[         R                  R                  [         R                  5      nSUR                  -  SUR                  -  -   SUR                  -  -   S-  nSUR                  -  SUR                  -  -   SUR                  -  -   S-  nXT-
  S:  n GNf = f)z
Construct a `wx.Bitmap` suitable for use as icon from an image file
*name*, including the extension and relative to Matplotlib's "images"
data directory.
gA`"?gbX9?gv/?r?  g?r`  rq  s   fill:black;s   fill:white;RGBA.Nr   r   r  )axisr   )#r   SystemSettingsGetAppearanceIsDarkr1  	GetColourSYS_COLOUR_WINDOWSYS_COLOUR_WINDOWTEXTredgreenbluer   rb  suffix
read_bytesreplaceArtProviderGetDIPSizeHintART_TOOLBARBitmapBundleFromSVGPILImageopennparrayconvertallRedGreenBluer   r   r   r   )rN   darkbgr&  bg_lumfg_lumr   svgtoolbarIconSizepilimgrk  
black_masks               r"   r  NavigationToolbar2Wx._icon>  s   		($$224;;=D ##Hd3;;& //#Ckk..A nn.==bnnMO??**3@@YY^^D)FHHV^^F34E&&001I1IJ#C!Gn166B6?
)+288:rwwy(I"1"n%99++AAA A1  	("",,R-A-ABB"",,R-E-EFBRVVmdRXXo5rwwF#MFRVVmdRXXo5rwwF#MF?R'D	(s   ,G CJ10J1c                    SU R                   ;   a6  U R                  U R                   S   U R                  R                  S:H  5        SU R                   ;   a7  U R                  U R                   S   U R                  R                  S:H  5        g g )Nrr  PANrs  ZOOM)r{  
ToggleToolmoderN   r9   s    r"   _update_buttons_checked,NavigationToolbar2Wx._update_buttons_checkedb  sg    DKKOODKK.		%0GHT[[ OODKK/61IJ !r$   c                 @   > [         TU ]  " U6   U R                  5         g r)   )r.   zoomr  r0   r1   r3   s     r"   r  NavigationToolbar2Wx.zoomh  s    d$$&r$   c                 @   > [         TU ]  " U6   U R                  5         g r)   )r.   panr  r  s     r"   r  NavigationToolbar2Wx.panl  s    T$$&r$   c           	         U R                   R                  5       u  p#nU R                   R                  5       n[        R                  " U R                   R                  5       S[        R                  S   XR[        R                  [        R                  -  5      nUR                  U5        UR                  5       [        R                  :X  Ga  [        R                  " UR                  5       5      n[         R#                  S[%        U 5      U5        X6R'                  5          nUR(                  SS  n	XR                   R+                  5       ;   a  X:w  a  [         R-                  SXU	5        U	n[        R                  S   (       a&  [/        UR0                  5      [        R                  S'    U R                   R2                  R5                  XxS9  U$ g ! [6         aa  n
[        R8                  " U R                   R                  5       [/        U
5      SS9nUR                  5         UR;                  5          S n
A
g S n
A
ff = f)	NzSave to filezsavefig.directoryz%s - Save file path: %sr   zDextension %s did not match the selected image type %s; going with %s)formatzMatplotlib error)r  messagecaption)r  r  get_default_filenamer   
FileDialogr,  r9  rD  FD_SAVEFD_OVERWRITE_PROMPTSetFilterIndex	ShowModalID_OKpathlibr   GetPathrm   rn   ro   GetFilterIndexr  get_supported_filetypeswarningra  r  r  savefig	ExceptionMessageDialogr&  )r0   r1   r  r  r   default_filedialogr   fmtr  es              r"   save_figure NavigationToolbar2Wx.save_figurep  s   (,(L(L(N%	{{779KK!!#^LL,-|JJ///1 	l+)<< 01DJJ0$t*dC,,./C++ab/Ckk99;;
  < s, ||/0474D01!""**4*<# *$  !));;002CF.0   "  !s   -$G 
H>AH99H>c                 2   U R                   R                  R                  R                  n[        R
                  S:X  a  SOU R                   R                  5       nX'-  Xc-
  U-  XG-  Xe-
  U-  4U R                   l        U R                   R                  5         g )Nr  r   )	r  r  r   rs   r   r  r  r  r  )r0   r  r  r  r  r  rs   sfs           r"   draw_rubberband$NavigationToolbar2Wx.draw_rubberband  sw    ##((//++,Q$++2O2O2Q(*R/?(*R/?(A$r$   c                 Z    S U R                   l        U R                   R                  5         g r)   )r  r  r  r9   s    r"   remove_rubberband&NavigationToolbar2Wx.remove_rubberband  s    '+$r$   c                 ^    U R                   (       a  U R                  R                  U5        g g r)   )r  r  SetLabelr0   r   s     r"   set_message NavigationToolbar2Wx.set_message  s$    %%a( r$   c                 R   U R                   R                  S:  nU R                   R                  [        U R                   5      S-
  :  nSU R                  ;   a  U R	                  U R                  S   U5        SU R                  ;   a   U R	                  U R                  S   U5        g g )Nr   r   BackForward)
_nav_stack_poslenr{  
EnableTool)r0   can_backwardcan_forwards      r"   set_history_buttons(NavigationToolbar2Wx.set_history_buttons  s    ++a/oo**S-AA-EET[[ OODKK/>#OODKK	2K@ $r$   )r  r  r{  r  )rD   rE   rF   rG   r   	TB_BOTTOMr/   r  r  r  r  r  r  r  r  r  r  rI   rJ   rK   s   @r"   rn  rn    s\    2",, 2@ !A !AFK'' !D)A Ar$   rn  c                   X    \ rS rSrSrS\R                  4S jrS rS r	S r
S rS	 rS
rg)	ToolbarWxi  rq  Nc                 t   Uc  UR                   R                  5       n[        R                  " X5        [        R
                  R                  XSUS9  U R                  5       U l        [        R                  " U [        R                  S9U l
        U R                  U R                  5        0 U l        0 U l        g )Nr  ro  )r  r,  r   r/   r   rx  r  _spacer  r  r  r  
_toolitems_groups)r0   toolmanagerr  r   s       r"   r/   ToolbarWx.__init__  s    > ''113F""45


D"E:..0==R^^D(()r$   c                 N   ^ ^ U U4S j[        T R                  5       5       u  nU$ )z
Find the position (index) of a wx.ToolBarToolBase in a ToolBar.

``ToolBar.GetToolPos`` is not useful because wx assigns the same Id to
all Separators and StretchableSpaces.
c              3   V   >#    U  H  nTR                  U5      T:X  d  M  Uv   M      g 7fr)   )GetToolByPos).0rr  r0   tools     r"   	<genexpr>*ToolbarWx._get_tool_pos.<locals>.<genexpr>  s-      35$$S)T1 5s   )	))range
ToolsCount)r0   r  rr  s   `` r"   _get_tool_posToolbarWx._get_tool_pos  s!    3uT__5 3
r$   c           
      
  ^ ^ UT R                   ;  a7  T R                  T R                  T R                  5      5      T R                   U'   T R                   U   n[	        T R
                  [        T R                  5      5       Vs/ s H3  nUR                  5       (       d  M  UR                  5       (       a  M1  UPM5     n	nUS:  a3  XyS   :X  a  SO'T R                  XR                  U5      S-
     5      S-   n
OT R                  U5      S-   n
X-   nU(       ak  [        R                  U5      nU(       d  [        R                  O[        R                  nT R!                  USTU[        R"                  UU=(       d    S5      nO`T R%                  T5      S   S-   S4nU(       a  [        R&                  " T STUS9nO[        R(                  " T STUS9nT R+                  UUTS9nT R-                  5         UU 4S jnU(       a"  T R/                  [        R0                  UU5        O WR/                  [        R2                  U5        T R4                  R7                  T/ 5        T R4                  T   R9                  UU45        g s  snf )	Nr   r   r   
   r  ru  c                 (   > TR                  T5        g r)   )trigger_tool)r  rN   r0   s    r"   handler'ToolbarWx.add_toolitem.<locals>.handler  s    d#r$   )r  InsertSeparatorr  r  r  r  r  r  IsSeparatorIsStretchableSpaceindexrn  r  r   r  r  
InsertToolr!  GetTextExtentToggleButtonButtonInsertControlr  r  r  r  r  
setdefaultr  )r0   rN   grouppositionr  descriptiontoggleseptsepsstartidxr  rw  r  r   rQ  r  s   ``                r"   add_toolitemToolbarWx.add_toolitem  s    $"&"6"6""4;;/#1DLLll5!t00%2HI CIa==? +,+?+?+A I C q= a.Q,,T**S/A2E-FG!K  &&s+a/E&,,Z8C)/2>>R]]D??3D#r}}d#.#4"6D &&t,Q/"4b9D//$DtD))D"d>%%c7$%?D	$ IIbkk7D1LL))73""4,$$dG_5GCs   J !J 8J c                    XR                   ;  a  g U R                   U    HW  u  p4UR                  5       (       d  U R                  UR                  U5        M8  UR	                  5       R                  U5        MY     U R                  5         g r)   )r  	IsControlr  r  
GetControlSetValuer  )r0   rN   toggledr  r  s        r"   toggle_toolitemToolbarWx.toggle_toolitem  sc    &!__T2MD>>##1!**73	 3
 	r$   c                     U R                   R                  U/ 5       H   u  p#U R                  UR                  5        M"     g r)   )r  pop
DeleteToolr  )r0   rN   r  r  s       r"   remove_toolitemToolbarWx.remove_toolitem  s/    !__00r:MDOODGG$ ;r$   c                 :    U R                   R                  U5        g r)   )r  r  r  s     r"   r  ToolbarWx.set_message   s    !!!$r$   )r  r  r  r  )rD   rE   rF   rG   _icon_extensionr   r  r/   r  r%  r,  r1  r  rI   rz   r$   r"   r  r    s/    O+/r|| 		+6Z%%r$   r  c                       \ rS rSrS rSrg)ConfigureSubplotsWxi  c                 .    [         R                  U 5        g r)   )rn  configure_subplotsr0   r1   s     r"   triggerConfigureSubplotsWx.trigger  s    //5r$   rz   NrD   rE   rF   rG   r;  rI   rz   r$   r"   r7  r7    s    6r$   r7  c                       \ rS rSrS rSrg)SaveFigureWxi
  c                 J    [         R                  U R                  5       5        g r)   )rn  r  "_make_classic_style_pseudo_toolbarr:  s     r"   r;  SaveFigureWx.trigger  s    ((335	7r$   rz   Nr=  rz   r$   r"   r?  r?  
  s    7r$   r?  c                        \ rS rSrS rS rSrg)RubberbandWxi  c                 P    [         R                  U R                  5       S XX45        g r)   )rn  r  rA  )r0   r  r  r  r  s        r"   r  RubberbandWx.draw_rubberband  s#    ,,335tRR	Mr$   c                 J    [         R                  U R                  5       5        g r)   )rn  r  rA  r9   s    r"   r  RubberbandWx.remove_rubberband  s    ..335	7r$   rz   N)rD   rE   rF   rG   r  r  rI   rz   r$   r"   rD  rD    s    M7r$   rD  c                   P   ^  \ rS rSrSrS/r/ SQrU 4S jrS r\	S 5       r
SrU =r$ )	_HelpDialogi  N)Action	ShortcutsDescription)rV      rX   c                 6  > [         TU ]  US[        R                  [        R                  -  S9  [        R
                  " [        R                  5      n[        R                  " SSSS5      nU R                  5       R                  5       n[        U R                  U-   5       Hs  u  pg[        XpR                  5       HU  u  p[        R                  " XS9n
US:X  a  U
R                  U5        U
R!                  U	5        UR#                  U
SSS5        MW     Mu     UR#                  US[        R$                  S5        [        R&                  " U [        R(                  5      nUR#                  US[        R*                  [        R$                  -  S5        U R-                  U5        UR/                  U 5        U R1                  5         U R3                  [        R4                  U R6                  5        UR3                  [        R8                  U R6                  5        g )NHelp)rV  r   r   r         r  )r.   r/   r   DEFAULT_DIALOG_STYLERESIZE_BORDERBoxSizerVERTICALFlexGridSizerGetFontMakeBoldr  headerszipwidthsr  r   WrapAddALLr  r  ALIGN_CENTER_HORIZONTALSetSizerr$  Layoutr  r%  r&  
EVT_BUTTON)r0   r  help_entriessizer
grid_sizerr^   rrowcolrq   ru  okr3   s               r"   r/   _HelpDialog.__init__!  ss   v!669I9II 	 	K BKK(%%aAq1
||~&&(| ;<FA #C 5d66MM$'

5!uaA. !6 = 			*a+YYtRXX&		"a33bff<a@e		$		",,/
t~~.r$   c                 Z    S [         l        U R                  5         UR                  5         g r)   )rJ  	_instanceDestroyLaterry  r  s     r"   r&  _HelpDialog._on_close:  s     $

r$   c                     U R                   (       a  U R                   R                  5         g U " X5      U l         U R                   R                  5         g r)   )rm  rE  r;  )rN  r  rd  s      r"   rF  _HelpDialog.show?  s:     ==MM!F1r$   rz   )rD   rE   rF   rG   rm  rZ  r\  r/   r&  r^  rF  rI   rJ   rK   s   @r"   rJ  rJ    s3    I56GF/2
  r$   rJ  c                       \ rS rSrS rSrg)HelpWxiI  c                     [         R                  U R                  R                  R	                  5       U R                  5       5        g r)   )rJ  rF  r  r  GetTopLevelParent_get_help_entriesr:  s     r"   r;  HelpWx.triggerK  s1    ++==?//1	3r$   rz   Nr=  rz   r$   r"   rs  rs  I  s    3r$   rs  c                       \ rS rSrS rSrg)ToolCopyToClipboardWxiP  c                    U R                   R                  (       d  U R                   R                  5         U R                   R                  R	                  5       (       a#  [
        R                  R                  5       (       d  g  [
        R                  R                  [
        R                  " U R                   R                  5      5        [
        R                  R                  5         g ! [
        R                  R                  5         f = fr)   )r  r  r  rt   rg  r   r  r  r  r  r  r  s      r"   r;  ToolCopyToClipboardWx.triggerR  s    {{##KK{{!!&&((0D0D0F0F	$OO##B$7$78J8J$KLOO!!#BOO!!#s   AC* * D
rz   Nr=  rz   r$   r"   ry  ry  P  s    $r$   ry  c                   4    \ rS rSr\r\r\R                  r	Sr
g)
_BackendWxia  rz   N)rD   rE   rF   rG   r  FigureCanvasrM  FigureManagerrA  mainlooprI   rz   r$   r"   r}  r}  a  s    !L#M..Hr$   r}  )OrH   r  loggingr   r  r  rH  numpyr  	PIL.Imager  
matplotlibr9  matplotlib.backend_basesr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   matplotlib._pylab_helpersr   matplotlib.pathr   matplotlib.transformsr   r   wx.svg	getLoggerrD   rm   r   	lru_cacher#   r&   
deprecatedrT   r   r  rK  r  Framer  rM  rc  r  rx  rn  r  _register_tool_classConfigureSubplotsBaser7  SaveFigureBaser?  RubberbandBaserD  DialogrJ  ToolHelpBasers  ToolCopyToClipboardBasery  _toolbar2_class_toolmanager_toolbar_classexportr}  rz   r$   r"   <module>r     s       
    B B B B B E D )   * 	 "
  Q  i  & 	y,FHLC LC	HLC^j9+ j9ZU1*BHH U1p-*( -*`.BHH .bF3' F3RDJA-rzz JA^U%!2:: U%p ##$786-== 6 96
 ##$787=// 7 97 ##$787=// 7 97*")) *Z ##$783]'' 3 93 ##$78	$MAA 	$ 9	$ #7 -6 * 
/ / /r$   