
    g`                        d Z ddlZddlZddlZddlZddlZddlZddlZddl	Z
ddlZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'Z'ddl(Z' ejR                  e*      Z+dZ, ejZ                  d	      d
        Z. G d de      Z/ ej`                  dddddd       G d de             Z1 G d de      Z2 G d dee'jf                        Z4 G d de4      Z5 G d de'jl                        Z7 G d de      Z8d  Z9d! Z: G d" d#ee'jv                        Z< G d$ d%ee'jv                        Z= ej|                  e4       G d& d'ej~                               Z@ ej|                  e4       G d( d)ej                               ZB ej|                  e4       G d* d+ej                               ZD G d, d-e'j                        ZF ej|                  e4       G d. d/ej                               ZH ej|                  e4       G d0 d1ej                               ZJe<e8_K        e=e8_L        ej                   G d2 d3e             ZNy)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                      t        j                  d      } | j                  d       t        j                          t        j                          | S )NFT)wxAppSetExitOnFrameDeleter   _setup_new_guiappr    Win32_SetProcessDpiAwareness_max)wxapps    [/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/matplotlib/backends/backend_wx.py_create_wxappr#   ,   s:    FF5ME	t$	668L    c                   4     e Zd ZdZ fdZd Zd Zd Z xZS )TimerWxz/Subclass of `.TimerBase` using wx.Timer events.c                     t        j                         | _        | j                  | j                  _        t        |   |i | y N)r   Timer_timer	_on_timerNotifysuper__init__)selfargskwargs	__class__s      r"   r.   zTimerWx.__init__9   s2    hhj!^^$)&)r$   c                 d    | j                   j                  | j                  | j                         y r(   )r*   Start	_interval_singler/   s    r"   _timer_startzTimerWx._timer_start>   s    $..$,,7r$   c                 8    | j                   j                          y r(   )r*   Stopr7   s    r"   _timer_stopzTimerWx._timer_stopA   s    r$   c                 Z    | j                   j                         r| j                          y y r(   )r*   	IsRunningr8   r7   s    r"   _timer_set_intervalzTimerWx._timer_set_intervalD   s#    ;;  " #r$   )	__name__
__module____qualname____doc__r.   r8   r;   r>   __classcell__r2   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                   4    e Zd ZdZi dej
                  dej
                  dej
                  dej                  dej                  dej                  dej                  d	ej                  d
ej                  dej
                  dej
                  dej                  dej                  dej                  dej                  dej                  dej                  dej                  iZej                  ej                  ej                  dZej                  ej                  ej                  ej                   ej"                  ej"                  ej"                  dZ fdZd Zd Zd Zd Zed        Zd"dZd Zd#dZd Zd  Zd! Z xZ S )$
RendererWxz
    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)italicrS   oblique)SansRomanScript
DecorativeModernCouriercourierc                     t         |           t        j                  dt	        |              |j                         | _        |j                         | _        || _	        i | _
        || _        d| _        y)z)Initialise a wxWindows renderer instance.%s - __init__()N)r-   r.   _logdebugtypeGetWidthwidth	GetHeightheightbitmapfontddpigc)r/   rl   rn   r2   s      r"   r.   zRendererWx.__init__   s[    

$d4j1__&
&&(
r$   c                      y)NT r7   s    r"   flipyzRendererWx.flipy   s    r$   c                 4   |rt        j                  |      }| j                  | j                         }n| j                  }|j                  }| j                  ||      }|j                  |t        j                         |j                  |      \  }}}	}
|||	fS r(   )
r   
strip_mathro   new_gcgfx_ctxget_wx_fontSetFontr   BLACKGetFullTextExtent)r/   spropismathro   rv   fontwhdescentleadings              r"   get_text_width_height_descentz(RendererWx.get_text_width_height_descent   s       #A77?BB**4(bhh'!(!:!:1!=1gw!W}r$   c                 2    | j                   | j                  fS r(   )ri   rk   r7   s    r"   get_canvas_width_heightz"RendererWx.get_canvas_width_height   s    zz4;;&&r$   c                    |j                         }||j                  }|j                  }|j                  |k7  rN||_        ||j	                          y |j                  |d   | j                  |d   z
  |d   z
  |d   |d          y y )Nr   r         )get_clip_rectangleboundsrv   _lastcliprect	ResetClipCliprk   )r/   ro   
new_boundsrv   s       r"   handle_clip_rectanglez RendererWx.handle_clip_rectangle   s    **,
!#**J**  J.$.G!!!!#Z]![[:a=8:a=H']JqM; /r$   c                    | j                         }|j                  |      D ]  \  }}|t        j                  k(  r |j                  |  )|t        j
                  k(  r |j                  |  L|t        j                  k(  r |j                  |  o|t        j                  k(  r |j                  |  |t        j                  k(  s|j                           |S r(   )
CreatePathiter_segmentsr   MOVETOMoveToPointLINETOAddLineToPointCURVE3AddQuadCurveToPointCURVE4AddCurveToPoint	CLOSEPOLYCloseSubpath)rv   path	transformwxpathpointscodes         r"   convert_pathzRendererWx.convert_path   s    ##% ..y9 
	&LFDt{{""""F+$%%%v.$***F3$&&&/'##%
	& r$   c                    |j                          | j                  |       |j                  }|t               j	                  dd      j                  d| j                        z   }| j                  |||      }|E|j                  t        j                  |j                  |                   |j                  |       n|j                  |       |j                          y )Ng      ?g              )selectr   rv   r   scale	translaterk   r   SetBrushr   Brushget_wxcolourDrawPath
StrokePathunselect)r/   ro   r   r   rgbFacerv   r   s          r"   	draw_pathzRendererWx.draw_path   s    
		""2&**JS$'11#t{{CD	""7D)<RXXboog&>?@V$v&
r$   c           	         |j                         }||j                  \  }}}}	nd}d}| j                  }| j                  }	|j                  d d \  }
}t
        j                  j                  ||
|j                               }|j                          |j                  j                  |t        |      t        | j                  |z
        t        |      t        |	              |j                          y )Nr   r   )r   r   ri   rk   shaper   BitmapFromBufferRGBAtobytesr   rv   
DrawBitmapintr   )r/   ro   xyimbboxlbr   r   rowscolsrl   s                r"   
draw_imagezRendererWx.draw_image   s    $$&JAq!QAA

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


fc!fc$++/.B!!fc1"g	/
r$   c	                    |rt        j                  |      }t        j                  dt	        |              |j                          | j                  |       |j                  }	| j                  ||      }
|j                  |j                               }|	j                  |
|       | j                  |||      \  }}}t        |      }t        ||z
        }|dk(  r|	j                  |||       n_t        j                   |      }|t        j"                  |      z  }|t        j$                  |      z  }|	j'                  |||z
  ||z
  |       |j)                          y )Nz%s - draw_text()r   )r   rt   re   rf   rg   r   r   rv   rw   r   get_rgbrx   r   r   DrawTextmathradianssincosDrawRotatedTextr   )r/   ro   r   r   r{   r|   angler}   mtextrv   r~   colorr   r   dradsxoyos                     r"   	draw_textzRendererWx.draw_text   s      #A

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

-e$44QfE1aFAJC<Q1%<<&DTXXd^#BTXXd^#B##Aq2vq2vt<
r$   c                     t         j                  dt        |              t        | j                  |       | _        | j
                  j                          | j
                  j                          | j
                  S )Nz%s - new_gc())re   rf   rg   GraphicsContextWxrl   ro   r   r   r7   s    r"   ru   zRendererWx.new_gc   sM    

?DJ/#DKK6wwr$   c                    t         j                  dt        |              t        |      }| j                  j                  |      }||S | j                  |j                               }t        j                  t        |      | j                  j                  |j                         t        j                        | j                  |j                            | j                   |j#                                  x| j                  |<   }|S )z7Return a wx font.  Cache font instances for efficiency.z%s - get_wx_font())	pointSizefamilystyleweight)re   rf   rg   hashrm   getpoints_to_pixelsget_size_in_pointsr   Fontround	fontnamesget_nameROMAN
fontangles	get_stylefontweights
get_weight)r/   r{   r|   keyr~   sizes         r"   rw   zRendererWx.get_wx_font  s    

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

3$
 r$   c                 :    |t         dz  | j                  z  dz  z  S )Ng      R@)PIXELS_PER_INCHrn   )r/   r   s     r"   r   zRendererWx.points_to_pixels  s     4/$((:TABBr$   r(   )FN)!r?   r@   rA   rB   r   FONTWEIGHT_LIGHTFONTWEIGHT_NORMALFONTWEIGHT_BOLDr   FONTSTYLE_ITALICFONTSTYLE_NORMALFONTSTYLE_SLANTr   FONTFAMILY_SWISSFONTFAMILY_ROMANFONTFAMILY_SCRIPTFONTFAMILY_DECORATIVEFONTFAMILY_MODERNr   r.   rr   r   r   r   staticmethodr   r   r   r   ru   rw   r   rC   rD   s   @r"   rM   rM   I   s   
R  R   	R   	R!!	
 	R!! 	R!! 	R 	R 	R 	b)) 	$$ 	"&& 	"&& 	B(( 	""  	##!" 	R''#$ 	##%K* %%%%%%J ##$$&&..&&''''I	"';   8"Cr$   rM   c                       e Zd ZdZej
                  ej                  ej                  dZej                  ej                  ej                  dZ ej                         Z fdZd Zd Zd fd	Z fdZ fd	Z fd
Zd Z xZS )r   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         |           t        j                  dt	        |       |       | j
                  j                  |d      \  }}|Lt        j                  |      }t        j                  j                  |      }d |_        ||f| j
                  |<   || _        || _        || _        t        j                  ddt        j                         | _        |j%                  | j"                         || _        y )Nz%s - __init__(): %s)NNry   r   )r-   r.   re   rf   rg   _cacher   r   MemoryDCGraphicsContextCreater   rl   dcrv   PenSOLID_penSetPenrenderer)r/   rl   r  r   rv   r2   s        r"   r.   zGraphicsContextWx.__init__4  s    

($t*f=kkoofl;G:V$B((//3G$(G!"$g+DKKFF7Arxx0	tyy! r$   c                     t         j                  dk(  r-| j                  j                  | j                         d| _        yy)z2Select the current bitmap into this wxDC instance.win32TN)sysplatformr   SelectObjectrl   
IsSelectedr7   s    r"   r   zGraphicsContextWx.selectG  s0    <<7"GG  -"DO #r$   c                     t         j                  dk(  r1| j                  j                  t        j
                         d| _        yy)z-Select a Null bitmap into this wxDC instance.r  FN)r  r  r   r  r   
NullBitmapr	  r7   s    r"   r   zGraphicsContextWx.unselectM  s0    <<7"GG  /#DO #r$   c                 ^   t         j                  dt        |              | j                          t        |   ||       | j                  j                  | j                  | j                                      | j                  j                  | j                         | j                          y )Nz%s - set_foreground())re   rf   rg   r   r-   set_foregroundr  	SetColourr   r   rv   r  r   )r/   fgisRGBAr2   s      r"   r  z GraphicsContextWx.set_foregroundS  sr     	

*DJ7r6*		D--dlln=>DII&r$   c                    t        |      }t        j                  dt        |              | j	                          d|cxk  rdk  rn nd}t
        |   |       t        | j                  j                  | j                              }|dk(  rd}| j                  j                  |       | j                  j                  | j                         | j                          y )Nz%s - set_linewidth()r   r   )floatre   rf   rg   r   r-   set_linewidthr   r  r   
_linewidthr  SetWidthrv   r  r   )r/   r   lwr2   s      r"   r  zGraphicsContextWx.set_linewidthb  s    !H

)4:6q919Aa //@A7B		2DII&r$   c                 X   t         j                  dt        |              | j                          t        |   |       | j                  j                  t        j                  | j                            | j                  j                  | j                         | j                          y )Nz%s - set_capstyle())re   rf   rg   r   r-   set_capstyler  SetCapr   _capd	_capstylerv   r  r   )r/   csr2   s     r"   r  zGraphicsContextWx.set_capstyleq  sm    

($t*5R 		*00@ADII&r$   c                 X   t         j                  dt        |              | j                          t        |   |       | j                  j                  t        j                  | j                            | j                  j                  | j                         | j                          y )Nz%s - set_joinstyle())re   rf   rg   r   r-   set_joinstyler  SetJoinr   _joind
_joinstylerv   r  r   )r/   jsr2   s     r"   r  zGraphicsContextWx.set_joinstylez  sm    

)4:6b!		+224??CDDII&r$   c           	          t         j                  dt        |              t        j                  |D cg c]  }t        d|z         c} S c c}w )z'Convert an RGB(A) color to a wx.Colour.z%s - get_wx_color()   )re   rf   rg   r   Colourr   )r/   r   r   s      r"   r   zGraphicsContextWx.get_wxcolour  s:    

($t*5yy7A3sQw<7887s   Ar(   )r?   r@   rA   rB   r   CAP_BUTTCAP_PROJECTING	CAP_ROUNDr  
JOIN_BEVEL
JOIN_MITER
JOIN_ROUNDr   weakrefWeakKeyDictionaryr   r.   r   r   r  r  r  r  r   rC   rD   s   @r"   r   r     s     [[,,ll$E }}}}}}&F 'W&&(F!&#$9r$   r   c                      e Zd ZdZdZeZ ej                  d       Z	i e
j                  de
j                  de
j                  de
j                  de
j                  de
j                   d	e
j"                  d
e
j$                  de
j&                  de
j(                  de
j*                  de
j,                  de
j.                  de
j0                  de
j2                  de
j4                  de
j6                  di e
j8                  de
j:                  de
j<                  de
j>                  de
j@                  de
jB                  de
jD                  de
jF                  de
jH                  de
jJ                  de
jL                  de
jN                  d e
jP                  d!e
jR                  d"e
jT                  d#e
jV                  d$e
jX                  d%i e
jZ                  d&e
j\                  d'e
j^                  d(e
j`                  d)e
jb                  d*e
jd                  d+e
jf                  d,e
jh                  d-e
jj                  d.e
jl                  d/e
jn                  d0e
jp                  d1e
jr                  de
jt                  d	e
jv                  d
e
jx                  de
jz                  de
j|                  d!e
j~                  d"e
j                  de
j                  d e
j                  de
j                  diZDdTd3ZEdTd4ZFd5 ZGd6 ZHd7 ZIdUd8ZJdTd9ZKd: ZLdTd;ZMi eNj                  d<d=d=d>d?d@d@dAdBZOdC ZPdD ZQeRdE        ZSeRdTd2dFdG       ZTdH ZUdTdIZVdJ ZWdK ZXdL ZYdVdMZZdN Z[dO Z\dP Z]dQ Z^dR Z_dS Z`y2)W_FigureCanvasWxBaseaa  
    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                     t         S r(   )FigureManagerWx)clss    r"   <lambda>z_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                    t        j                  | |       t        j                  t	        t
        j                  | j                  j                  j                         }t        j                  dk7  r|j                  |      }t        j                  j                  | |||       d| _        d| _        d| _        t        j                   ddt        j"                        | _        t        j                   ddt        j&                        | _        | j+                  t        j,                  | j.                         | j+                  t        j0                  | j2                         | j+                  t        j4                  | j6                         | j+                  t        j8                  | j:                         | j+                  t        j<                  | j>                         | j+                  t        j@                  | j>                         | j+                  t        jB                  | j>                         | j+                  t        jD                  | j>                         | j+                  t        jF                  | j>                         | j+                  t        jH                  | j>                         | j+                  t        jJ                  | j>                         | j+                  t        jL                  | j>                         | j+                  t        jN                  | j>                         | j+                  t        jP                  | j>                         | j+                  t        jR                  | j>                         | j+                  t        jT                  | j>                         | j+                  t        jV                  | j>                         | j+                  t        jX                  | j>                         | j+                  t        jZ                  | j>                         | j+                  t        j\                  | j^                         | j+                  t        j`                  | jb                         | j+                  t        jd                  | jf                         | j+                  t        jh                  | jj                         | j+                  t        jl                  | jn                         | j+                  t        jp                  | jn                         | js                  t        jt                         | jw                  t        jx                         t        j                  dk(  rG| j{                         }| j}                  | j                         d|z  z         | j                  |       yy)	z
        Initialize a FigureWx instance.

        - Initialize the FigureCanvasBase and wxPanel parents.
        - Set event handlers for resize, paint, and keyboard and mouse
          interaction.
        	__WXMSW__r   NFry   r   WHITE	__WXMAC__)Ar   r.   r   Sizemapr   ceilfigurer   r   PlatformFromDIPPanelrl   _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SetBackgroundColourre  GetDPIScaleFactorSetInitialSizeGetSize_set_device_pixel_ratio)r/   parentidrj  r   dpiScales         r"   r.   z_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                    t        j                         }|j                  | j                         t         j                  j                         s}t         j                  j                         }|r\t         j                  j                  |       t         j                  j                          t         j                  j                          yyy)z*Copy bitmap of canvas to system clipboard.N)
r   BitmapDataObject	SetBitmaprl   TheClipboardIsOpenedOpenSetDataFlushClose)r/   eventbmp_objopen_successs       r"   Copy_to_Clipboardz%_FigureCanvasWxBase.Copy_to_Clipboard  s    %%'$++&'')??//1L''0%%'%%'  *r$   c                 d    | j                  | j                               r| j                          y y r(   )r  r  drawr/   r0   r1   s      r"   _update_device_pixel_ratioz._FigureCanvasWxBase._update_device_pixel_ratio  s*     ''(>(>(@AIIK Br$   c                 t    t         j                  dt        |              d| _        | j	                  d       y )Nz%s - draw_idle()FeraseBackground)re   rf   rg   rn  Refreshr7   s    r"   	draw_idlez_FigureCanvasWxBase.draw_idle  s,    

%tDz2 	U+r$   c                 ,    t        j                          y r(   )r   Yieldr7   s    r"   flush_eventsz _FigureCanvasWxBase.flush_events'  s    

r$   c                    t        | d      rt        d      t        j                  | t        j                        }|dkD  rY|j                  t        |dz        d       | j                  t        j                  | j                  |j                                t        j                         | _        | j                  j                          |j                          y )N_event_loopzEvent loop already runningr  r   i  T)oneShot)hasattrRuntimeErrorr   r)   ID_ANYr4   r   rt  	EVT_TIMERstop_event_loopGetIdGUIEventLoopr  Runr:   )r/   timeouttimers      r"   start_event_loopz$_FigureCanvasWxBase.start_event_loop+  s    4';<<")),Q;KKGdN+TK:IIbllD$8$8U[[]IK??,

r$   c                     t        | d      r7| j                  j                         r| j                  j                          | `y y )Nr  )r  r  r=   Exitr/   r  s     r"   r  z#_FigureCanvasWxBase.stop_event_loop8  s;    4'))+  %%'  (r$   c                    | j                         }| j                         }t        |j                               }g }g }d}t	        |      D ]_  \  }\  }}	dj                  |	D 
cg c]  }
d|
z  	 c}
      }|j                  |	d          | d| d| }||	v r|}|j                  |       a dj                  |      }|||fS c c}
w )z3Return the wildcard string for the filesave dialog.r   ;z*.%sz (z)||)get_default_filetypeget_supported_filetypes_groupedsorteditems	enumeratejoinappend)r/   default_filetype	filetypessorted_filetypes	wildcards
extensionsfilter_indexirG   extsextext_listwildcards                r"   _get_imagesave_wildcardsz,_FigureCanvasWxBase._get_imagesave_wildcards?  s    44688:	!)//"34	
()9: 	'OA|dxx >## >?Hd1g&r(2hZ8H4' X&	' HHY'	*l22 !?s   #C
c                    t         j                  dt        |              | r| j                         sy|st	        j
                  |       }t        j                  dk(  rZt        | j                  j                  j                         t              r(| j                  j                         j                         n| j                  }|j                  |dd       | j                   nt#        t$        | j                         \  }}}}||||f||||f||||f||||fg}|j'                  || j(                         |j'                  || j*                         yy)zu
        Update the displayed image on the GUI canvas, using the supplied
        wx.PaintDC device context.
        z%s - gui_repaint()Nrc  r   )re   rf   rg   IsShownOnScreenr   ClientDCrk  
isinstancerj  canvasget_rendererrM   rl   ConvertToImageConvertToBitmapr   ro  rh  r   DrawLineListrs  rq  )r/   drawDCbmpx0y0x1y1rects           r"   gui_repaintz_FigureCanvasWxBase.gui_repaintQ  s/   
 	

'd4 --/[[&F ++, !3!3!@!@!BJO {{))+;;= KK 	 	#q!$  , (=(=>NBBR$r2r2&6R$r2r2&68Dd&@&@Ad&@&@A -r$   zWindows bitmapJPEGPCXzPortable Network GraphicszTagged Image Format FilezX pixmap)r  jpegjpgpcxpngtiftiffxpmc                     t         j                  dt        |              t        j                  |       }| j
                  s| j                  |       n| j                  |       |j                          y)z$Called when wxPaintEvt is generated.z%s - _on_paint()r  N)	re   rf   rg   r   PaintDCrn  r  r  Destroy)r/   r  r  s      r"   rx  z_FigureCanvasWxBase._on_paintx  sS    

%tDz2D!}}IIVI$F+r$   c                    | j                          t        j                  dt        |              | j	                         j                         }|r|j                  |       }|r<r:|j                  s.|j                  t        j                  z  s| j                         }n/| j                         }|j                  | j                                t        | dd      r|| j                  | j                   fk(  ry|\  | _        | _        d| _        | j                  dk  s| j                   dk  ry| j$                  j&                  }t        j(                  dk(  s| j+                         }||z  }| j                  |z  }| j                   |z  }| j$                  j-                  ||d       | j/                  d       t1        d	|       j3                          | j5                          y)
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   rc  )forwardr  resize_event)r  re   rf   rg   	GetParentGetSizerGetItem
ProportionFlagr   EXPAND
GetMinSizeGetClientSizeIncTogetattrr  _heightrn  rj  rn   rk  r  set_size_inchesr  r   _processr  )	r/   r  szsir   dpivalr   winchhinchs	            r"   rv  z_FigureCanvasWxBase._on_size  sy    	'')

$d4j1^^&&(D!B"R]]277RYY3F??$D %%'DJJt()44(T\\22$(!T\;;!t||q0 {{k)**,EeOFf$v%##E5%#@
 	U+ND)224r$   c                     t        j                         } t        j                  | j	                         ft        j
                  | j                         ft        j                  | j                         ft        j                  | j                         ft        j                  | j                         fg}|D ch c]
  \  }}|s	| c}}S c c}}w r(   )r   GetMouseStater   LEFT
LeftIsDownRIGHTRightIsDownMIDDLEMiddleIsDownBACK
Aux1IsDownFORWARD
Aux2IsDown)state	mod_tablebuttonflags       r"   _mpl_buttonsz _FigureCanvasWxBase._mpl_buttons  s      "
 u//12 1 1 34!3!3!56u//12  %"2"2"45
	 ,5=<64===s   7
C
C
excludec                   dt         j                  t         j                  fdt         j                  t         j                  fdt         j
                  t         j                  fg}| 2| j                         }|D cg c]  \  }}}||z  r||k7  r| c}}}S |D cg c]  \  }}}t        j                  |      r| c}}}S c c}}}w c c}}}w )Nctrlr6  r5  )	r   MOD_CONTROLWXK_CONTROLMOD_ALTWXK_ALT	MOD_SHIFT	WXK_SHIFTGetModifiersGetKeyState)r  r)  r$  	modifiersrG   modr   s          r"   _mpl_modifiersz"_FigureCanvasWxBase._mpl_modifiers  s     R^^R^^4BJJ

+bllBLL1
	
 **,I/8 ; ;^T3 37c>  ; ; 09 , ,^T3~~c*  , ,;,s   ;C"Cc                 T   |j                   }|| j                  v r| j                  |   }n2|dk  r,t        |      }|j                         s|j	                         }ny | j                  ||      }d|v r!|j                         r|j                  d       dj                  g ||      S )N   r(  r5  r]  )	KeyCodekeyvaldchr	ShiftDownlowerr6  isupperremover  )r/   r  keyvalr   modss        r"   _get_keyz_FigureCanvasWxBase._get_key  s    T\\!,,v&Cc\f+C ??$iik""5&"9d?s{{}KK xx$%%r$   c                    |>t        j                         }| j                  |j                  |j                        \  }}n|j                  |j                  }}t         j
                  dk(  s;| j                         }||z  | j                  j                  j                  ||z  z
  fS || j                  j                  j                  |z
  fS )zv
        Convert a wx position, defaulting to the current cursor position, to
        Matplotlib coordinates.
        rc  )
r   r  ScreenToClientXYrk  r  rj  r   rk   )r/   posr   r   r   s        r"   _mpl_coordsz_FigureCanvasWxBase._mpl_coords  s    
 ;""$C&&suucee4DAq55#%%qA{{k)**,EU7DKK,,33ag===dkk&&--111r$   c                     t        d| | j                  |      g| j                         d|ij                          | r|j	                          yy)zCapture key press.key_press_eventguiEventNr   rB  rH  r  Skipr  s     r"   rz  z _FigureCanvasWxBase._on_key_down  sL    "Du%	!(,(8(8(:	!	!!)JJL r$   c                     t        d| | j                  |      g| j                         d|ij                          | r|j	                          yy)zRelease key.key_release_eventrK  NrL  r  s     r"   r|  z_FigureCanvasWxBase._on_key_up  sL    $du%	!(,(8(8(:	!	!!)JJL r$   c                 >   t        j                  t        j                  t        j
                  t         j                  t        j                  t         j                  t        j                  t         j                  t        j                  t         j                  t        j                  t         j                  t        j                  t         j                  t        j                   t         j"                  i|            }| j%                  |       | j'                          y )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  )r/   rQ  s     r"   
set_cursorz_FigureCanvasWxBase.set_cursor  s    4--LL"..LL"..OOR__!!2??LL"..%%r'7'7##R%5%5/
   	vr$   c                 j    | j                         r| j                          |r| j                          yy)zControl wx mouse capture.N)
HasCaptureReleaseMouseCaptureMouse)r/   captures     r"   _set_capturez _FigureCanvasWxBase._set_capture  s,    ?? r$   c                 &    | j                  d       y)zCapture changed or lostFN)rh  r  s     r"   r  z$_FigureCanvasWxBase._on_capture_lost  s    % r$   c           
      l   |j                          | j                  |j                         xs |j                                | j	                  |      \  }}t
        j                  t        j                  t
        j                  t        j                  t
        j                  t        j                  t
        j                  t        j                  t
        j                  t        j                   i}|j#                         }|j%                  ||      }| j'                  |      }|j                         r!t)        d| |||||      j+                          y|j                         r"t)        d| |||d||      j+                          y|j-                         r!t)        d| |||||      j+                          yy)Start measuring on an axis.button_press_eventr4  rK  T)dblclickr4  rK  button_release_eventN)rM  rh  
ButtonDownButtonDClickrH  r   MOUSE_BTN_LEFTr   r  MOUSE_BTN_MIDDLEr  MOUSE_BTN_RIGHTr  MOUSE_BTN_AUX1r  MOUSE_BTN_AUX2r!  	GetButtonr   r6  r   r  ButtonUp)r/   r  r   r   
button_mapr%  r4  s          r"   r~  z$_FigureCanvasWxBase._on_mouse_button  sT   

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

 "/''.	+T1a!*U<<DHJ!+T1a$!*U<<DHJ^^-tQ6!*U<<DHJ r$   c           
      z   | j                  |      \  }}|j                  |j                  z  |j                  z  }|j	                          t
        j                  dk(  r/t        | d      sd| _        n| j                  rd| _        yd| _        t        d| |||| j                  |      |      j                          y)z3Translate mouse wheel events into matplotlib eventsrf  _skipwheeleventTFNscroll_event)stepr4  rK  )rH  LinesPerActionWheelRotation
WheelDeltarM  r   rk  r  r{  r   r6  r  )r/   r  r   r   r}  s        r"   r  z#_FigureCanvasWxBase._on_mouse_wheel3  s    &1##e&9&99E<L<LL

;;+%4!23'+$%%',$'+$>4AD!007!	##+8:r$   c                     |j                          t        d| g| j                  |      | j                         | j	                  |      |dj                          y)rk  motion_notify_event)buttonsr4  rK  N)rM  r   rH  r'  r6  r  r  s     r"   r  z_FigureCanvasWxBase._on_motionG  sV    

($ 	#$$U+	#,,.!007!		# $,8:r$   c                     |j                          t        d| g| j                  |      | j                         |dj	                          y)zMouse has entered the window.figure_enter_eventrm  NrM  r   rH  r6  r  r  s     r"   r  z_FigureCanvasWxBase._on_enterP  H    

*D 	&''.	& $ 3 3 5$	& '/hjr$   c                     |j                          t        d| g| j                  |      | j                         |dj	                          y)zMouse has left the window.figure_leave_eventrm  Nr  r  s     r"   r  z_FigureCanvasWxBase._on_leaveX  r  r$   r(   )r   T)ar?   r@   rA   rB   required_interactive_frameworkr&   
_timer_clsr   classpropertymanager_classr   r-  r1  r/  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_DELETEr:  r.   r  r  r  r  r  r  r  r  r   r  rx  rv  r   r'  r6  rB  rH  rz  r|  rb  rh  r  r~  r  r  r  r  rq   r$   r"   r/  r/    s    &*"J&D&&'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$   r/  c                   ~   e Zd ZddZd Z ej                  eej                        Z	 ej                  eej                        xZZ ej                  eej                        Z ej                  eej                        Z ej                  eej"                        xZZ ej                  eej(                        Zy)FigureCanvasWxNc                    t         j                  dt        |              t        | j                  | j
                  j                        | _        | j
                  j                  | j                         d| _	        | j                  |       y)z
        Render the figure using RendererWx instance renderer, or using a
        previously defined renderer if none is specified.
        z%s - draw()Tr  N)re   rf   rg   rM   rl   rj  rn   r  r  rn  r  )r/   r  s     r"   r  zFigureCanvasWx.drawd  s^    
 	

=$t*-"4;;@''r$   c                 R   t        j                  t        j                  | j                  j
                  j                        t        j                  | j                  j
                  j                              }| j                  j                  t        || j                  j                               t        j                  |      r|j                         n|}|j                  ||      st        d|       | j                   r| j                          | r| j#                          y y )NzCould not save figure to )r   r   r   ri  rj  r   ri   rk   r  rM   rn   r   is_writable_file_liker  SaveFiler  rn  r  )r/   filetypefilenamerl   	saved_objs        r"   _print_imagezFigureCanvasWx._print_imageo  s    499T[[%5%5%;%;<99T[[%5%5%<%<=?FDKKOO<=33H= **,  	 !!(H5!:8*EFF
 ==IIK LLN r$   r(   )r?   r@   rA   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_xpmrq   r$   r"   r  r  a  s    	(( (	''b((*I4Y44b))+ +J'	''b((*I'	''b((*I4Y44b((* *J'	''b((*Ir$   r  c                   $     e Zd Z fdZd Z xZS )FigureFrameWxc                   t         j                  dk(  rt         j                  }nt        j                  dd      }t        	|   d d|       t        j                  dt        |              t        |         || d|      | _
        t        | j                  ||       }| j                  j                  j                  }|| j                  |       t        t         j"                  |j$                  j&                        \  }}| j                  j)                  | j+                  t        j,                  ||                   | j                  j/                  | j+                  t        j,                  dd                   | j                  j1                          | j3                          | j5                  t         j6                  | j8                         y )Nrc     )r  r  rG  rd   r   )r   rk  DefaultPositionPointr-   r.   re   rf   rg   _set_frame_iconr  r1  managertoolbar
SetToolBarrh  r   ri  r   r   r  rl  rg  
SetMinSizeSetFocusFitrt  	EVT_CLOSE	_on_close)
r/   numfigcanvas_classrG  r  r  r   r   r2   s
            r"   r.   zFigureFrameWx.__init__  s;    ;;+%$$C((2r"C5

$d4j1"4S1!$++sD9++%%--OOG$ 499chhmm,1""4<<1#>?t||BGGAqM:;
		",,/r$   c                    t         j                  dt        |              t        d| j                        j                          | j                  j                          d | j                  j                  _        t        j                  | j                  j                         	 | j                  j                  | j                  j                  j                         |j                          y # t        $ r Y w xY w)Nz%s - on_close()close_event)re   rf   rg   r   r  r  r  r  framer   destroympl_disconnectr  _id_dragAttributeErrorrM  r  s     r"   r  zFigureFrameWx._on_close  s    

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

  		s   #9C- -	C98C9)r?   r@   rA   r.   r  rC   rD   s   @r"   r  r    s    0>r$   r  c                   f     e Zd ZdZ fdZed        Zed        Zd Zd Z	d Z
d Zd	 Zd
 Z xZS )r1  a  
    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                     t         j                  dt        |              |x| _        | _        t
        |   ||       y )Nrd   )re   rf   rg   r  windowr-   r.   )r/   r  r  r  r2   s       r"   r.   zFigureManagerWx.__init__  s3    

$d4j1#((
T[%r$   c                    t        j                         xs
 t               }t        |||      }|j                  j
                  }t        j                         r4|j                  j                          |j                  j                          |S )N)r  )r   GetAppr#   r  r  r  mplis_interactiver  Showr  )r2  r  rj  r  r!   r  r  s          r"   create_with_canvasz"FigureManagerWx.create_with_canvas  sd     		.}c6E--''MM MM##%r$   c                     t         j                  j                         s(t        j                         }||j	                          y y y r(   )r   r   IsMainLoopRunningr  MainLoop)r2  r!   s     r"   start_main_loopzFigureManagerWx.start_main_loop  s7    vv'')IIKE   ! *r$   c                     | j                   j                          | j                  j                          t        j
                  d   r| j                   j                          y y )Nzfigure.raise_window)r  r   r  r  r  rcParamsRaiser7   s    r"   showzFigureManagerWx.show  sB    

<<-.JJ /r$   c                     t         j                  dt        |              | j                  }|r t	        j
                  |j                         y y )Nz%s - destroy())re   rf   rg   r  r   	CallAfterr  )r/   r0   r  s      r"   r  zFigureManagerWx.destroy  s8    

#T$Z0

 LL% r$   c                 l    | j                   j                  | j                   j                                 y r(   )r  ShowFullScreenIsFullScreenr7   s    r"   full_screen_togglez"FigureManagerWx.full_screen_toggle  s$    

!!djj&=&=&?"?@r$   c                 6    | j                   j                         S r(   )r  GetTitler7   s    r"   get_window_titlez FigureManagerWx.get_window_title  s    {{##%%r$   c                 :    | j                   j                  |       y r(   )r  SetTitle)r/   titles     r"   set_window_titlez FigureManagerWx.set_window_title   s    U#r$   c           
          | j                   j                  | j                   j                  t        j                  t        j                  |      t        j                  |                         y r(   )r  SetSizeClientToWindowSizer   rg  r   ri  )r/   ri   rk   s      r"   resizezFigureManagerWx.resize  sI     	DKK::277IIedii/<1 2 	3r$   )r?   r@   rA   rB   r.   classmethodr  r  r	  r  r  r  r  r  rC   rD   s   @r"   r1  r1    sT    &
   ! !&A&$3r$   r1  c                 f    t        j                  t        t        j                  d|                   S )z\
    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_bitmapr     s%    
 99S--hABCCr$   c                     t        j                         }dD ]C  }t        j                  t        |            }|j	                         s y |j                  |       E | j                  |       y )N)zmatplotlib.pngzmatplotlib_large.png)r   
IconBundleIconr   IsOkAddIconSetIcons)r  bundleimageicons       r"   r  r    sU    ]]_F; ww|E*+yy{t	
 
NN6r$   c                   ~     e Zd Zdej                  ddZed        Zd Z fdZ	 fdZ
d Zd Zd	 Zd
 Zd Z xZS )NavigationToolbar2Wxr   c          
         t         j                  j                  | |j                         d|       t         j                  dk(  r0| j                  | j                         | j                         z         i | _        | j                  D ]  \  }}}}|| j                          | j                  d| j                  | d      t         j                  |||dv rt         j                  nt         j                        j                   | j                  |<   | j#                  t         j$                  t'        | |      | j                  |           || _        | j(                  rU| j+                          t        j,                  | t         j.                        | _        | j3                  | j0                         | j5                          t7        j                  | |       y )Nr  r,  rf  .svg)PanZoom)rl   bmpDisabledlabel	shortHelpkindr  )r   ToolBarr.   r  rk  SetToolBitmapSizeGetToolBitmapSizer  wx_ids	toolitemsAddSeparatorAddTool_iconr  
ITEM_CHECKITEM_NORMALIdrt  EVT_TOOLr  _coordinatesAddStretchableSpace
StaticTextALIGN_RIGHT_label_text
AddControlRealizer   )r/   r  coordinatesr   texttooltip_text
image_filecallbacks           r"   r.   zNavigationToolbar2Wx.__init__  sz   


D&"2"2"4bF;;+%""4#9#9#;D<R<R<T#TU8< 	,4D,
H|!!#::D&9: ",+/?+B"--!~~  0  KK IIbkk74#:T*  ,	,  ($$&!}}THDOOD,,-##D&1r$   c                 V   	 t         j                  j                         j                         }t        j                  d|       }|j                  dk(  ru|j                         }|r|j                  dd	      }t        j                          j#                  t         j$                        }t         j&                  j)                  ||      S t*        j,                  j/                  |      }	t1        j2                  |	j5                  d
            }
|rt         j                  j                  t         j                        }|
dddf   dk(  j7                  d      }|j9                         |j;                         |j=                         f|
|ddf<   t         j>                  jA                  |
jB                  d   |
jB                  d   |
jE                               S # t        $ r t         j                  j                  t         j                        }t         j                  j                  t         j                        }d|j                  z  d|j                  z  z   d|j                  z  z   dz  }d|j                  z  d|j                  z  z   d|j                  z  z   dz  }||z
  dkD  }Y yw xY w)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  r.  s   fill:black;s   fill:white;RGBA.Nr   r   r  )axisr   )#r   SystemSettingsGetAppearanceIsDarkr  	GetColourSYS_COLOUR_WINDOWSYS_COLOUR_WINDOWTEXTredgreenbluer   r  suffix
read_bytesreplaceArtProviderGetDIPSizeHintART_TOOLBARBitmapBundleFromSVGPILImageopennparrayconvertallRedGreenBluer   r   r   r   )rG   darkbgr  bg_lumfg_lumr   svgtoolbarIconSizepilimgr(  
black_masks               r"   r<  z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j"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F?R'D	(s   ,G CJ('J(c                    d| j                   v r6| j                  | j                   d   | j                  j                  dk(         d| j                   v r7| j                  | j                   d   | j                  j                  dk(         y y )Nr/  PANr0  ZOOM)r8  
ToggleToolmoderG   r7   s    r"   _update_buttons_checkedz,NavigationToolbar2Wx._update_buttons_checkedb  sg    DKKOODKK.		%0GHT[[ OODKK/61IJ !r$   c                 >    t        |   |  | j                          y r(   )r-   zoomrx  r/   r0   r2   s     r"   rz  zNavigationToolbar2Wx.zoomh  s    d$$&r$   c                 >    t        |   |  | j                          y r(   )r-   panrx  r{  s     r"   r}  zNavigationToolbar2Wx.panl  s    T$$&r$   c           	         | j                   j                         \  }}}| j                   j                         }t        j                  | j                   j                         dt        j                  d   ||t        j                  t        j                  z        }|j                  |       |j                         t        j                  k(  rt        j                  |j                               }t         j#                  dt%        |       |       ||j'                            }|j(                  dd  }	|	| j                   j+                         v r||	k7  rt         j-                  d|	||	       |	}t        j                  d   r&t/        |j0                        t        j                  d<   	 | j                   j2                  j5                  ||       |S y # t6        $ rc}
t        j8                  | j                   j                         t/        |
      d      }|j                          |j;                          Y d }
~
y d }
~
ww xY w)	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  r  r  FD_SAVEFD_OVERWRITE_PROMPTSetFilterIndex	ShowModalID_OKpathlibr   GetPathre   rf   rg   GetFilterIndexrY  get_supported_filetypeswarningr  r  rj  savefig	ExceptionMessageDialogr   )r/   r0   r  r  r  default_filedialogr   fmtr  es              r"   save_figurez NavigationToolbar2Wx.save_figurep  s   (,(L(L(N%	4{{779KK!!#^LL,-|YJJ///1 	l+)<< 01DJJ0$t*dCv,,./C++ab/Cdkk99;;s
  < #s, ||/0474D01!""**4*<# *$  !));;002CF.0   "  !s   ((G 	H>AH99H>c                 8   | j                   j                  j                  j                  }t        j
                  dk(  rdn| j                   j                         }||z  ||z
  |z  ||z  ||z
  |z  f| j                   _        | j                   j                          y )Nrc  r   )	r  rj  r   rk   r   rk  r  ro  r  )r/   r  r  r  r  r  rk   sfs           r"   draw_rubberbandz$NavigationToolbar2Wx.draw_rubberband  s    ##((//++,Q$++2O2O2Q(*2R/?(*2R/?(A$r$   c                 Z    d | j                   _        | j                   j                          y r(   )r  ro  r  r7   s    r"   remove_rubberbandz&NavigationToolbar2Wx.remove_rubberband  s    '+$r$   c                 T    | j                   r| j                  j                  |       y y r(   )rA  rE  SetLabelr/   r{   s     r"   set_messagez NavigationToolbar2Wx.set_message  s$    %%a( r$   c                 J   | j                   j                  dkD  }| j                   j                  t        | j                         dz
  k  }d| j                  v r| j	                  | j                  d   |       d| j                  v r | j	                  | j                  d   |       y y )Nr   r   BackForward)
_nav_stack_poslenr8  
EnableTool)r/   can_backwardcan_forwards      r"   set_history_buttonsz(NavigationToolbar2Wx.set_history_buttons  s    ++a/oo**S-AA-EET[[ OODKK/>#OODKK	2K@ $r$   r  )r?   r@   rA   r   	TB_BOTTOMr.   r   r<  rx  rz  r}  r  r  r  r  r  rC   rD   s   @r"   r+  r+    sV    2",, 2@ !A !AFK'' !D)Ar$   r+  c                   N    e Zd ZdZdej
                  fdZd Zd Zd Z	d Z
d Zy)		ToolbarWxr.  Nc                 ~   ||j                   j                         }t        j                  | |       t        j
                  j                  | |d|       | j                         | _        t	        j                  | t        j                        | _
        | j                  | j                         i | _        i | _        y )Nr  r,  )r  r  r   r.   r   r5  rB  _spacerC  rD  rE  rF  
_toolitems_groups)r/   toolmanagerr  r   s       r"   r.   zToolbarWx.__init__  s    > ''113F""45


D&"E:..0==R^^D(()r$   c                 L      fdt         j                        D        \  }|S )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   J   K   | ]  }j                  |      k(  r|  y wr(   )GetToolByPos).0rG  r/   tools     r"   	<genexpr>z*ToolbarWx._get_tool_pos.<locals>.<genexpr>  s+      3$$S)T1  3s    #)range
ToolsCount)r/   r  rG  s   `` r"   _get_tool_poszToolbarWx._get_tool_pos  s!    3uT__5 3
r$   c           
          | j                   vr7 j                   j                   j                               j                   |<    j                   |   }t	         j
                  t         j                              D cg c]$  }|j                         r|j                         s|& }	}|dk\  r4||	d   k(  rdn( j                  |	|	j                  |      dz
           dz   }
n j                  |      dz   }
|
|z   }|rat        j                  |      }|st        j                  nt        j                  } j!                  |d|t        j"                  ||xs d      }nb j%                        d   dz   df}|rt        j&                   d|      }nt        j(                   d|      } j+                  ||      } j-                           fd}|r" j/                  t        j0                  ||       n j/                  t        j2                  |        j4                  j7                  g         j4                     j9                  ||f       y c c}w )	Nr   r   r   
   rd  r2  c                 (    j                         y r(   )trigger_tool)r  rG   r/   s    r"   handlerz'ToolbarWx.add_toolitem.<locals>.handler  s    d#r$   )r  InsertSeparatorr  r  rh  r  r  r  IsSeparatorIsStretchableSpaceindexr+  r<  r   r>  r=  
InsertToolr  GetTextExtentToggleButtonButtonInsertControlrG  rt  r@  r}  r  
setdefaultr  )r/   rG   grouppositionrK  descriptiontoggleseptsepsstartidxr  r4  r  r   r4  r  s   ``                r"   add_toolitemzToolbarWx.add_toolitem  s    $"&"6"6""4;;/#1DLLll5!t00%2HI Ca==?1+?+?+A  C C q= a.Q,,T$**S/A2E-FG!K  &&s+a/Eh&,,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   )Ic                    || j                   vry | j                   |   D ]Q  \  }}|j                         s| j                  |j                  |       3|j	                         j                  |       S | j                          y r(   )r  	IsControlrv  r?  
GetControlSetValuer  )r/   rG   toggledr  r  s        r"   toggle_toolitemzToolbarWx.toggle_toolitem  si    t&!__T2 	4MD'>>#1!**73		4
 	r$   c                     | j                   j                  |g       D ]   \  }}| j                  |j                         " y r(   )r  pop
DeleteToolr?  )r/   rG   r  r  s       r"   remove_toolitemzToolbarWx.remove_toolitem  s6    !__00r: 	%MD'OODGG$	%r$   c                 :    | j                   j                  |       y r(   )rE  r  r  s     r"   r  zToolbarWx.set_message   s    !!!$r$   )r?   r@   rA   _icon_extensionr   r  r.   r  r  r  r  r  rq   r$   r"   r  r    s/    O+/r|| 		+6Z%%r$   r  c                       e Zd Zd Zy)ConfigureSubplotsWxc                 .    t         j                  |        y r(   )r+  configure_subplotsr/   r0   s     r"   triggerzConfigureSubplotsWx.trigger  s    //5r$   Nr?   r@   rA   r  rq   r$   r"   r  r    s    6r$   r  c                       e Zd Zd Zy)SaveFigureWxc                 J    t         j                  | j                                y r(   )r+  r  "_make_classic_style_pseudo_toolbarr  s     r"   r  zSaveFigureWx.trigger  s    ((335	7r$   Nr  rq   r$   r"   r  r  
  s    7r$   r  c                       e Zd Zd Zd Zy)RubberbandWxc                 T    t         j                  | j                         d ||||       y r(   )r+  r  r  )r/   r  r  r  r  s        r"   r  zRubberbandWx.draw_rubberband  s'    ,,335tRR	Mr$   c                 J    t         j                  | j                                y r(   )r+  r  r  r7   s    r"   r  zRubberbandWx.remove_rubberband  s    ..335	7r$   N)r?   r@   rA   r  r  rq   r$   r"   r  r    s    M7r$   r  c                   F     e Zd ZdZdgZg dZ fdZd Zed        Z	 xZ
S )_HelpDialogN)Action	ShortcutsDescription)rN      rP   c                 8   t         |   |dt        j                  t        j                  z         t        j
                  t        j                        }t        j                  dddd      }| j                         j                         }t        | j                  |z         D ]u  \  }}t        || j                        D ]W  \  }}	t        j                  | |      }
|dk(  r|
j                  |       |
j!                  |	       |j#                  |
ddd       Y w |j#                  |dt        j$                  d       t        j&                  | t        j(                        }|j#                  |dt        j*                  t        j$                  z  d       | j-                  |       |j/                  |        | j1                          | j3                  t        j4                  | j6                         |j3                  t        j8                  | j6                         y )NHelp)r  r   r   r         r  )r-   r.   r   DEFAULT_DIALOG_STYLERESIZE_BORDERBoxSizerVERTICALFlexGridSizerGetFontMakeBoldr  headerszipwidthsrC  rx   WrapAddALLr  r  ALIGN_CENTER_HORIZONTALSetSizerr  Layoutrt  r  r  
EVT_BUTTON)r/   r  help_entriessizer
grid_sizerrV   rrowcolri   r2  okr2   s               r"   r.   z_HelpDialog.__init__!  s   v!669I9II 	 	K BKK(%%aAq1
||~&&(| ;< 	/FAs #C 5 /ed#66MM$'

5!uaA./	/ 			*a+YYtRXX&		"a33bff<a@e		$		",,/
t~~.r$   c                 Z    d t         _        | j                          |j                          y r(   )r  	_instanceDestroyLaterrM  r  s     r"   r  z_HelpDialog._on_close:  s     $

r$   c                     | j                   r| j                   j                          y  | ||      | _         | j                   j                          y r(   )r  r  r   )r2  r  r  s      r"   r	  z_HelpDialog.show?  s<     ==MM!FL1r$   )r?   r@   rA   r  r  r  r.   r  r  r	  rC   rD   s   @r"   r  r    s3    I56GF/2
  r$   r  c                       e Zd Zd Zy)HelpWxc                     t         j                  | j                  j                  j	                         | j                                y r(   )r  r	  rj  r  GetTopLevelParent_get_help_entriesr  s     r"   r  zHelpWx.triggerK  s1    ++==?//1	3r$   Nr  rq   r$   r"   r  r  I  s    3r$   r  c                       e Zd Zd Zy)ToolCopyToClipboardWxc                    | j                   j                  s| j                   j                          | j                   j                  j	                         rt
        j                  j                         sy 	 t
        j                  j                  t        j                  | j                   j                               t
        j                  j                          y # t
        j                  j                          w xY wr(   )r  rn  r  rl   r$  r   r  r  r  r  r  r  s      r"   r  zToolCopyToClipboardWx.triggerR  s    {{##KK{{!!&&(0D0D0F	$OO##B$7$78J8J$KLOO!!#BOO!!#s   5AC  C:Nr  rq   r$   r"   r  r  P  s    $r$   r  c                   ,    e Zd ZeZeZej                  Zy)
_BackendWxN)	r?   r@   rA   r  FigureCanvasr1  FigureManagerr  mainlooprq   r$   r"   r  r  a  s    !L#M..Hr$   r  )OrB   r  loggingr   r  r  r,  numpyrd  	PIL.Imagera  
matplotlibr  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	getLoggerr?   re   r   	lru_cacher#   r&   
deprecatedrM   r   rm  r/  r  Framer  r1  r   r  r5  r+  r  _register_tool_classConfigureSubplotsBaser  SaveFigureBaser  RubberbandBaser  Dialogr  ToolHelpBaser  ToolCopyToClipboardBaser  _toolbar2_class_toolmanager_toolbar_classexportr  rq   r$   r"   <module>r:     s       
    B B B B B E D )   * 	 w"
  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$   