
    EVf                        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 ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&Z& ejN                  e(      Z)dZ* ejV                  d	      d
        Z, G d de      Z- ej\                  dddddd       G d de             Z/ G d de      Z0 G d dee&jb                        Z2 G d de2      Z3 G d de&jh                        Z5 G d de      Z6d  Z7d! Z8 G d" d#ee&jr                        Z: G d$ d%ee&jr                        Z; ejx                  e2       G d& d'ejz                               Z> ejx                  e2       G d( d)ej~                               Z@ ejx                  e2       G d* d+ej                               ZB G d, d-e&j                        ZD ejx                  e2       G d. d/ej                               ZF ejx                  e2       G d0 d1ej                               ZHe:e6_I        e;e6_J        ej                   G d2 d3e             ZLy)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)Gcf)Path)Affine2DK      c                  z    t        j                  d      } | j                  d       t        j                          | S )NFT)wxAppSetExitOnFrameDeleter   _setup_new_guiapp)wxapps    g/var/www/html/software/conda/envs/catlas/lib/python3.12/site-packages/matplotlib/backends/backend_wx.py_create_wxappr!   +   s.    FF5ME	t$	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__6   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(   Stopr5   s    r    _timer_stopzTimerWx._timer_stop>   s    r"   c                 Z    | j                   j                         r| j                          y y r&   )r(   	IsRunningr6   r5   s    r    _timer_set_intervalzTimerWx._timer_set_intervalA   s#    ;;  " #r"   )	__name__
__module____qualname____doc__r,   r6   r9   r<   __classcell__r0   s   @r    r$   r$   3   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)italicrQ   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-   rj   rl   r0   s      r    r,   zRendererWx.__init__~   s[    

$d4j1__&
&&(
r"   c                      y)NT r5   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_mathrm   new_gcgfx_ctxget_wx_fontSetFontr   BLACKGetFullTextExtent)r-   spropismathrm   rt   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&   )rg   ri   r5   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boundsrt   _lastcliprect	ResetClipClipri   )r-   rm   
new_boundsrt   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)rt   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   rt   r   scale	translateri   r   SetBrushr   Brushget_wxcolourDrawPath
StrokePathunselect)r-   rm   r   r   rgbFacert   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   rg   ri   shaper   BitmapFromBufferRGBAtobytesr   rt   
DrawBitmapintr   )r-   rm   xyimbboxlbr}   r~   rowscolsrj   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   rr   rc   rd   re   r   r   rt   ru   r   get_rgbrv   r   r   DrawTextmathradianssincosDrawRotatedTextr   )r-   rm   r   r   ry   rz   angler{   mtextrt   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())rc   rd   re   GraphicsContextWxrj   rm   r   r   r5   s    r    rs   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)rc   rd   re   hashrk   getpoints_to_pixelsget_size_in_pointsr   Fontround	fontnamesget_nameROMAN
fontangles	get_stylefontweights
get_weight)r-   ry   rz   keyr|   sizes         r    ru   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_INCHrl   )r-   r   s     r    r   zRendererWx.points_to_pixels  s     4/$((:TABBr"   r&   )FN)!r=   r>   r?   r@   r   FONTWEIGHT_LIGHTFONTWEIGHT_NORMALFONTWEIGHT_BOLDr   FONTSTYLE_ITALICFONTSTYLE_NORMALFONTSTYLE_SLANTr   FONTFAMILY_SWISSFONTFAMILY_ROMANFONTFAMILY_SCRIPTFONTFAMILY_DECORATIVEFONTFAMILY_MODERNr   r,   rp   r   r   r   staticmethodr   r   r   r   rs   ru   r   rA   rB   s   @r    rK   rK   F   s   
R  R   	R   	R!!	
 	R!! 	R!! 	R 	R 	R 	b)) 	$$ 	"&& 	"&& 	B(( 	""  	##!" 	R''#$ 	##%K* %%%%%%J ##$$&&..&&''''I	"';   8"Cr"   rK   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)NNrw   r   )r+   r,   rc   rd   re   _cacher   r   MemoryDCGraphicsContextCreater   rj   dcrt   PenSOLID_penSetPenrenderer)r-   rj   r  r   rt   r0   s        r    r,   zGraphicsContextWx.__init__1  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   SelectObjectrj   
IsSelectedr5   s    r    r   zGraphicsContextWx.selectD  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  r5   s    r    r   zGraphicsContextWx.unselectJ  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())rc   rd   re   r   r+   set_foregroundr   	SetColourr   r   rt   r   r   )r-   fgisRGBAr0   s      r    r  z GraphicsContextWx.set_foregroundP  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   )floatrc   rd   re   r   r+   set_linewidthr   r  r   
_linewidthr   SetWidthrt   r   r   )r-   r}   lwr0   s      r    r  zGraphicsContextWx.set_linewidth_  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())rc   rd   re   r   r+   set_capstyler   SetCapr   _capd	_capstylert   r   r   )r-   csr0   s     r    r  zGraphicsContextWx.set_capstylen  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())rc   rd   re   r   r+   set_joinstyler   SetJoinr   _joind
_joinstylert   r   r   )r-   jsr0   s     r    r  zGraphicsContextWx.set_joinstylew  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()   )rc   rd   re   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>   r?   r@   r   CAP_BUTTCAP_PROJECTING	CAP_ROUNDr  
JOIN_BEVEL
JOIN_MITER
JOIN_ROUNDr  weakrefWeakKeyDictionaryr   r,   r   r   r  r  r  r  r   rA   rB   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ZDdRd3ZEdRd4ZFd5 ZGd6 ZHdSd7ZIdRd8ZJd9 ZKdRd:ZLi eMj                  d;d<d<d=d>d?d?d@dAZNdB ZOdC ZPeQdRd2dDdE       ZRdF ZSdRdGZTdH ZUdI ZVdJ ZWdTdKZXdL ZYdM ZZdN Z[dO Z\dP Z]dQ Z^y2)U_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        t        j                  | j
                  j                  j                        \  }}t        j                  j                  | ||t        j                  ||             t        j                  ||      | _        t        j                  dt        |       ||       d| _        d| _        t        j$                  ddt        j&                        | _        t        j$                  ddt        j*                        | _        | j/                  t        j0                  | j2                         | j/                  t        j4                  | j6                         | j/                  t        j8                  | j:                         | j/                  t        j<                  | j>                         | j/                  t        j@                  | jB                         | j/                  t        jD                  | jB                         | j/                  t        jF                  | jB                         | j/                  t        jH                  | jB                         | j/                  t        jJ                  | jB                         | j/                  t        jL                  | jB                         | j/                  t        jN                  | jB                         | j/                  t        jP                  | jB                         | j/                  t        jR                  | jB                         | j/                  t        jT                  | jB                         | j/                  t        jV                  | jB                         | j/                  t        jX                  | jB                         | j/                  t        jZ                  | jB                         | j/                  t        j\                  | jB                         | j/                  t        j^                  | jB                         | j/                  t        j`                  | jb                         | j/                  t        jd                  | jf                         | j/                  t        jh                  | jj                         | j/                  t        jl                  | jn                         | j/                  t        jp                  | jr                         | j/                  t        jt                  | jr                         | jw                  t        jx                         | j{                  t        j|                         y)z
        Initialize a FigureWx instance.

        - Initialize the FigureCanvasBase and wxPanel parents.
        - Set event handlers for resize, paint, and keyboard and mouse
          interaction.
        r   z"%s - __init__() - bitmap w:%d h:%dFNrw   r   WHITE)?r   r,   mapr   ceilfigurer   r   r   PanelSizer   rj   rc   rd   re   _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SetBackgroundColourrb  )r-   parentidre  r}   r~   s         r    r,   z_FigureCanvasWxBase.__init__  sb    	!!$/499dkk..3341
$A?ii1o

7dQJ $%'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  *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	SetBitmaprj   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                 t    t         j                  dt        |              d| _        | j	                  d       y )Nz%s - draw_idle()FeraseBackground)rc   rd   re   rh  Refreshr5   s    r    	draw_idlez_FigureCanvasWxBase.draw_idle  s,    

%tDz2 	U+r"   c                 ,    t        j                          y r&   )r   Yieldr5   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_ANYr2   r   rn  	EVT_TIMERstop_event_loopGetIdGUIEventLoopr  Runr8   )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_loop)  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irE   extsextext_listwildcards                r    _get_imagesave_wildcardsz,_FigureCanvasWxBase._get_imagesave_wildcards0  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()N	__WXMSW__r   )rc   rd   re   IsShownOnScreenr   ClientDCPlatform
isinstancere  canvasget_rendererrK   rj   ConvertToImageConvertToBitmapr   ri  rc  r   DrawLineListrm  rk  )r-   drawDCbmpx0y0x1y1rects           r    gui_repaintz_FigureCanvasWxBase.gui_repaintB  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)	rc   rd   re   r   PaintDCrh  drawr  Destroy)r-   r  r  s      r    rr  z_FigureCanvasWxBase._on_painti  sS    

%tDz2D!}}IIVI$F+r"   c                    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t        j"                  | j                  | j                        | _        | j&                  j(                  }| j                  |z  }| j                  |z  }| j&                  j+                  ||d       | j-                  d       t/        d|       j1                          | j3                          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   )forwardr  resize_event)rc   rd   re   	GetParentGetSizerGetItem
ProportionFlagr   EXPAND
GetMinSizeGetClientSizeIncTogetattrr  _heightrh  r   rj   re  rl   set_size_inchesr  r   _processr  )r-   r  szsir   dpivalwinchhinchs           r    rp  z_FigureCanvasWxBase._on_sizes  sd    	

$d4j1^^&&(D!B"R]]277RYY3F??$D %%'DJJt()44(T\\22$(!T\;;!t||q0 iiT\\:f$v%##E5%#@
 	U+ND)224r"   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ctrlr4  r3  )	r   MOD_CONTROLWXK_CONTROLMOD_ALTWXK_ALT	MOD_SHIFT	WXK_SHIFTGetModifiersGetKeyState)r  r  	mod_table	modifiersrE   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  r3  r[  )	KeyCodekeyvaldchr	ShiftDownlowerr  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                  }}|| j
                  j                  j                  |z
  fS )zv
        Convert a wx position, defaulting to the current cursor position, to
        Matplotlib coordinates.
        )r   GetMouseStateScreenToClientXYre  r   ri   )r-   posr   r   s       r    _mpl_coordsz_FigureCanvasWxBase._mpl_coords  sf    
 ;""$C&&suucee4DAq55#%%qA$++""))A---r"   c                     t        d| | j                  |      g| j                         d|ij                          | r|j	                          yy)zCapture key press.key_press_eventguiEventNr   r&  r-  r  Skipr  s     r    rt  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_eventr0  Nr1  r  s     r    rv  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-   r6  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)rM  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r  r0  T)dblclickr  r0  button_release_eventN)r2  rM  
ButtonDownButtonDClickr-  r   MOUSE_BTN_LEFTr   LEFTMOUSE_BTN_MIDDLEMIDDLEMOUSE_BTN_RIGHTRIGHTMOUSE_BTN_AUX1BACKMOUSE_BTN_AUX2FORWARD	GetButtonr   r  r   r  ButtonUp)r-   r  r   r   
button_mapbuttonr  s          r    rx  z$_FigureCanvasWxBase._on_mouse_button  sU   

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

 "/''.	+T1a!*U<<DHJ!+T1a $	 %''/xz^^-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 events	__WXMAC___skipwheeleventTFNscroll_event)stepr  r0  )r-  LinesPerActionWheelRotation
WheelDeltar2  r   r  r  rg  r   r  r  )r-   r  r   r   ri  s        r    r  z#_FigureCanvasWxBase._on_mouse_wheel  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                  |      |dj	                          y)rP  motion_notify_eventrR  N)r2  r   r-  r  r  r  s     r    r  z_FigureCanvasWxBase._on_motion$  sJ    

($ 	#$$U+	#!007!	# $,8:r"   c                     |j                          t        d| g| j                  |      | j                         |dj	                          y)zMouse has entered the window.figure_enter_eventrR  Nr2  r   r-  r  r  r  s     r    r  z_FigureCanvasWxBase._on_enter,  H    

*D 	&''.	& $ 3 3 5$	& '/hjr"   c                     |j                          t        d| g| j                  |      | j                         |dj	                          y)zMouse has left the window.figure_leave_eventrR  Nrq  r  s     r    r  z_FigureCanvasWxBase._on_leave4  rr  r"   r&   )r   T)_r=   r>   r?   r@   required_interactive_frameworkr$   
_timer_clsr   classpropertymanager_classr   r  r  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  rr  rp  r   r  r&  r-  rt  rv  rG  rM  r  rx  r  r  r  r  ro   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1+f
(,!3$B6


$
$
*)*
I+Z ,d , ,&". !G4.(.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)rc   rd   re   rK   rj   re  rl   r  r  rh  r  )r-   r  s     r    r  zFigureCanvasWx.draw@  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   rd  re  r   rg   ri   r  rK   rl   r   is_writable_file_liker  SaveFiler  rh  r  )r-   filetypefilenamerj   	saved_objs        r    _print_imagezFigureCanvasWx._print_imageK  s    499T[[%5%5%;%;<99T[[%5%5%<%<=?FDKKOO<=33H= **,  	 !!(H5!:8*EFF
 ==IIK LLN r"   r&   )r=   r>   r?   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_xpmro   r"   r    r  r  =  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                B   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)                  t        j*                  ||             | j                  j-                  d       | j                  j/                          | j1                          | j3                  t         j4                  | j6                         y )Nr     )r  r  r,  rb   )r   r   )r   r  DefaultPositionPointr+   r,   rc   rd   re   _set_frame_iconr  r/  managertoolbar
SetToolBarrc  r   rd  r   r   SetInitialSizerg  
SetMinSizeSetFocusFitrn  	EVT_CLOSE	_on_close)
r-   numfigcanvas_classr,  r  r  r}   r~   r0   s
            r    r,   zFigureFrameWx.__init__n  s    ;;+%$$C((2r"C5

$d4j1"4S1!$++sD9++%%--OOG$ 499chhmm,1""2771a=1v&
		",,/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)rc   rd   re   r   r  r  r  r  framer   destroympl_disconnectr  _id_dragAttributeErrorr2  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>   r?   r,   r  rA   rB   s   @r    r  r  m  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 )r/  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 )Nrb   )rc   rd   re   r  windowr+   r,   )r-   r  r  r  r0   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  )r0  r  re  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)r0  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Raiser5   s    r    showzFigureManagerWx.show  sB    

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

#T$Z0

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

!!djj&=&=&?"?@r"   c                 6    | j                   j                         S r&   )r  GetTitler5   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   rd  )r-   rg   ri   s      r    resizezFigureManagerWx.resize  sI     	DKK::277IIedii/<1 2 	3r"   )r=   r>   r?   r@   r,   classmethodr  r  r  r  r  r  r  r  rA   rB   s   @r    r/  r/    sT    &
   ! !&A&$3r"   r/  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          
      z   t         j                  j                  | |j                         d|       dt         j                  v r| j                  d       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*                        | _        | j/                  | j,                         | j1                          t3        j                  | |       y )	Nr  r  wxMac)   r  z.png)PanZoom)rj   bmpDisabledlabel	shortHelpkindr  )r   ToolBarr,   r  PlatformInfoSetToolBitmapSizewx_ids	toolitemsAddSeparatorAddTool_iconr	  
ITEM_CHECKITEM_NORMALIdrn  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__  sc   


D&"2"2"4bFboo%""8,8< 	,4D,
H|!!#::D&9: ",+/?+B"--!~~  0  KK IIbkk74#:T*  ,	,  ($$&!}}THDOOD,,-##D&1r"   c                 J   t         j                  j                  t        j                  d|             }t        j                  |j                  d            }	 t        j                  j                         j                         }|rt        j                  j                  t        j                        }|dd	d
f   dk(  j'                  d      }|j)                         |j+                         |j-                         f||d	d
f<   t        j.                  j1                  |j2                  d   |j2                  d   |j5                               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 w 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.
        r	  RGBAgA`"?gbX9?gv/?r"  g?.Nr   r   r  )axisr   )PILImageopenr   r  nparrayconvertr   SystemSettingsGetAppearanceIsDarkr  	GetColourSYS_COLOUR_WINDOWSYS_COLOUR_WINDOWTEXTredgreenblueallRedGreenBluer   r   r   r   )	rE   pilimgr  darkbgr  bg_lumfg_lum
black_masks	            r    r)  zNavigationToolbar2Wx._icon  s     4 4Xt DE/0		($$224;;=D "",,R-E-EFBRaR.A-222;J%'VVXrxxz2779$EE*bqb.!yy''KKNEKKNEMMO= 	=  	("",,R-A-ABB"",,R-E-EFBRVVmdRXXo5rwwF#MFRVVmdRXXo5rwwF#MFF?R'D	(s   ,E CH"!H"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  PANr  ZOOM)r%  
ToggleToolmoderE   r5   s    r    _update_buttons_checkedz,NavigationToolbar2Wx._update_buttons_checked5  sg    DKKOODKK.		%0GHT[[ OODKK/61IJ !r"   c                 >    t        |   |  | j                          y r&   )r+   zoomr[  r-   r.   r0   s     r    r]  zNavigationToolbar2Wx.zoom;  s    d$$&r"   c                 >    t        |   |  | j                          y r&   )r+   panr[  r^  s     r    r`  zNavigationToolbar2Wx.pan?  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                  ||       y 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   GetPathrc   rd   re   GetFilterIndexsuffixget_supported_filetypeswarningr
  r  re  savefig	ExceptionMessageDialogr  )r-   r.   r  r  r  default_filedialogr   fmtr  es              r    save_figurez NavigationToolbar2Wx.save_figureC  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H88H=c                     | j                   j                  j                  j                  }|||z
  |||z
  f| j                   _        | j                   j                          y r&   )r  re  r   ri   ri  r  )r-   r  r  r  r  r  ri   s          r    draw_rubberbandz$NavigationToolbar2Wx.draw_rubberbandd  sJ    ##((//(*FRKVb['I$r"   c                 Z    d | j                   _        | j                   j                          y r&   )r  ri  r  r5   s    r    remove_rubberbandz&NavigationToolbar2Wx.remove_rubberbandi  s    '+$r"   c                 T    | j                   r| j                  j                  |       y y r&   )r.  r2  SetLabelr-   ry   s     r    set_messagez NavigationToolbar2Wx.set_messagem  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lenr%  
EnableTool)r-   can_backwardcan_forwards      r    set_history_buttonsz(NavigationToolbar2Wx.set_history_buttonsq  s    ++a/oo**S-AA-EET[[ OODKK/>#OODKK	2K@ $r"   ru  )r=   r>   r?   r   	TB_BOTTOMr,   r   r)  r[  r]  r`  ry  r{  r}  r  r  rA   rB   s   @r    r  r    sS    2",, 2@ = =4K''!B
)Ar"   r  c                   J    e Zd Zdej                  fdZd Zd Zd Zd Z	d Z
y)	ToolbarWxNc                 ~   ||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   r"  r/  _spacer0  r1  r2  r3  
_toolitems_groups)r-   toolmanagerr  r   s       r    r,   zToolbarWx.__init__}  s    > ''113F""45


D&"E:..0==R^^D(()r"   c                     t        | j                        D cg c]  }| j                  |      |k(  r| c}\  }|S c c}w )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.
        )range
ToolsCountGetToolByPos)r-   toolr,  s      r    _get_tool_poszToolbarWx._get_tool_pos  sC      %T__5 3$$S)T1  3
3s   <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   
   ra  r  c                 (    j                         y r&   )trigger_tool)r  rE   r-   s    r    handlerz'ToolbarWx.add_toolitem.<locals>.handler  s    d#r"   )r  InsertSeparatorr  r  rc  r  r  r  IsSeparatorIsStretchableSpaceindexr  r)  r   r+  r*  
InsertToolr	  GetTextExtentToggleButtonButtonInsertControlr4  rn  r-  rw  r  
setdefaultr  )r-   rE   grouppositionr8  descriptiontoggleseptsepsstartidxr  r!  r  r   r2  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  	IsControlrY  r,  
GetControlSetValuer  )r-   rE   toggledr  r  s        r    toggle_toolitemzToolbarWx.toggle_toolitem  si    t&!__T2 	4MD'>>#1!**73		4
 	r"   c                     | j                   |   D ]   \  }}| j                  |j                         " | j                   |= y r&   )r  
DeleteToolr,  )r-   rE   r  r  s       r    remove_toolitemzToolbarWx.remove_toolitem  s:    !__T2 	%MD'OODGG$	%OOD!r"   c                 :    | j                   j                  |       y r&   )r2  r  r  s     r    r  zToolbarWx.set_message  s    !!!$r"   )r=   r>   r?   r   r  r,   r  r  r  r  r  ro   r"   r    r  r  |  s*    +/r|| 		+6Z"
%r"   r  c                       e Zd Zd Zy)ConfigureSubplotsWxc                 .    t         j                  |        y r&   )r  configure_subplotsr-   r.   s     r    triggerzConfigureSubplotsWx.trigger  s    //5r"   Nr=   r>   r?   r  ro   r"   r    r  r    s    6r"   r  c                       e Zd Zd Zy)SaveFigureWxc                 J    t         j                  | j                                y r&   )r  ry  "_make_classic_style_pseudo_toolbarr  s     r    r  zSaveFigureWx.trigger  s    ((335	7r"   Nr  ro   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  r5   s    r    r}  zRubberbandWx.remove_rubberband  s    ..335	7r"   N)r=   r>   r?   r{  r}  ro   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)rL      rN   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widthsr0  rv   WrapAddALLr  rk  ALIGN_CENTER_HORIZONTALSetSizerr  Layoutrn  r  r  
EVT_BUTTON)r-   r  help_entriessizer
grid_sizerrT   rrowcolrg   r  okr0   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DestroyLaterr2  r  s     r    r  z_HelpDialog._on_close	  s     $

r"   c                     | j                   r| j                   j                          y  | ||      | _         | j                   j                          y r&   )r  r  r  )r0  r  r  s      r    r  z_HelpDialog.show  s<     ==MM!FL1r"   )r=   r>   r?   r  r  r  r,   r  r  r  rA   rB   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  re  r  GetTopLevelParent_get_help_entriesr  s     r    r  zHelpWx.trigger  s1    ++==?//1	3r"   Nr  ro   r"   r    r  r    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  rh  r  rj   r  r   r  r  r  r  r  )r-   r.   r/   s      r    r  zToolCopyToClipboardWx.trigger!  s    {{##KK{{!!&&(0D0D0F	$OO##B$7$78J8J$KLOO!!#BOO!!#s   5AC  C:Nr  ro   r"   r    r  r    s    $r"   r  c                   ,    e Zd ZeZeZej                  Zy)
_BackendWxN)	r=   r>   r?   r  FigureCanvasr/  FigureManagerr  mainloopro   r"   r    r  r  0  s    !L#M..Hr"   r  )Mr@   r  loggingr   rl  r  r*  numpyr@  	PIL.Imager=  
matplotlibr  matplotlib.backend_basesr   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   	getLoggerr=   rc   r   	lru_cacher!   r$   
deprecatedrK   r   rf  r-  r  Framer  r/  r  r  r"  r  r  _register_tool_classConfigureSubplotsBaser  SaveFigureBaser  RubberbandBaser  Dialogr  ToolHelpBaser  ToolCopyToClipboardBaser  _toolbar2_class_toolmanager_toolbar_classexportr  ro   r"   r    <module>r     s       
    B B B B B 2 1 )   * 	w"
  Q  i  & 	y,FHLC LC	HLC^j9+ j9Zt1*BHH t1n-*( -*`.BHH .bF3' F3RD~A-rzz ~AFT%!2:: T%n $##$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"   