
    P/Ph`                        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j)        e*          Z+dZ, ej-        d	          d
             Z. G d de          Z/ ej0        dddddd           G d de                      Z1 G d de          Z2 G d dee'j3                  Z4 G d de4          Z5 G d de'j6                  Z7 G d de          Z8d  Z9d! Z: G d" d#ee'j;                  Z< G d$ d%ee'j;                  Z= ej>        e4           G d& d'ej?                              Z@ ej>        e4           G d( d)ejA                              ZB ej>        e4           G d* d+ejC                              ZD G d, d-e'jE                  ZF ej>        e4           G d. d/ejG                              ZH ej>        e4           G d0 d1ejI                              ZJe<e8_K        e=e8_L        ejM         G d2 d3e                      ZNdS )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          } |                     d           t          j                     t          j                     | S )NFT)wxAppSetExitOnFrameDeleter   _setup_new_guiappr    Win32_SetProcessDpiAwareness_max)wxapps    ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/matplotlib/backends/backend_wx.py_create_wxappr#   ,   sF    F5MME	t$$$	688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                      j        |i | d S N)r   Timer_timer	_on_timerNotifysuper__init__)selfargskwargs	__class__s      r"   r.   zTimerWx.__init__9   s>    hjj!^$)&)))))r$   c                 P    | j                             | j        | j                   d S r(   )r*   Start	_interval_singler/   s    r"   _timer_startzTimerWx._timer_start>   s$    $.$,77777r$   c                 8    | j                                          d S r(   )r*   Stopr7   s    r"   _timer_stopzTimerWx._timer_stopA   s    r$   c                 d    | j                                         r|                                  d S d S 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   sk        99* * * * *
8 8 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                   "    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                 4   t                                                       t                              dt	          |                      |                                | _        |                                | _        || _	        i | _
        || _        d| _        dS )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__   sx    

$d4jj111__&&
&&((
r$   c                     dS )NT r7   s    r"   flipyzRendererWx.flipy   s    tr$   c                 ,   |rt          j        |          }| j        |                                 }n| j        }|j        }|                     ||          }|                    |t          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7?BBB*4((bh'''!(!:!:1!=!=1gw!W}r$   c                     | j         | j        fS r(   )ri   rk   r7   s    r"   get_canvas_width_heightz"RendererWx.get_canvas_width_height   s    z4;&&r$   c                 (   |                                 }||j        }|j        }|j        |k    rb||_        ||                                 d S |                    |d         | j        |d         z
  |d         z
  |d         |d                    d S d S )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                    |                                  }|                    |          D ]\  }}|t          j        k    r |j        |   |t          j        k    r |j        |  ;|t          j        k    r |j        |  V|t          j	        k    r |j
        |  q|t          j        k    r|                                 |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9 
	& 
	&LFDt{""""F+++$$%%v...$$**F333$$&&///''##%%%r$   Nc                    |                                  |                     |           |j        }|t                                          dd                              d| j                  z   }|                     |||          }|P|                    t          j
        |                    |                               |                    |           n|                    |           |                                 d S )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&&&*JJS$''11#t{CCD	""7D)<<RXboog&>&>??@@@V$$$$v&&&
r$   c           	          |                                 }||j        \  }}}}	nd}d}| j        }| j        }	|j        d d         \  }
}t
          j                            ||
|                                          }|	                                 |j
                            |t          |          t          | j        |z
            t          |          t          |	                      |                                 d S )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!QQAA
AAXbqb\
d))$bjjllCC
		

fc!ffc$+/.B.B!!ffc1"gg	/ 	/ 	/
r$   Fc	                 $   |rt          j        |          }t                              dt	          |                      |                                 |                     |           |j        }	|                     ||          }
|	                    |
                                          }|	                    |
|           |                     |||          \  }}}t          |          }t          ||z
            }|dk    r|	                    |||           n`t          j        |          }|t          j        |          z  }|t          j        |          z  }|	                    |||z
  ||z
  |           |                                 d S )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   sb     	$ ##A

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

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

?DJJ///#DK66wr$   c                 :   t                               dt          |                      t          |          }| j                            |          }||S |                     |                                          }t          j	        t          |          | j                            |                                t          j                  | j        |                                         | j        |                                                   x| j        |<   }|S )z7Return a wx font.  Cache font instances for efficiency.z%s - get_wx_font()N)	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444jjz~~c""K$$T%<%<%>%>?? "$Dkk>%%dmmoorx@@/$.."2"23#DOO$5$56	"8 "8 "8 	8
3$
 r$   c                 2    |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   sr       
 R R  	R  	R!	
 	R! 	R! 	R 	R 	R 	b) 	$ 	"& 	"& 	B( 	"  	#!" 	R'#$ 	#% K* %%% J #$&.&'' I	 	 	 	 	    "' ' '; ; ;   \         8    "C C C C C C 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                              dt	          |           |           | j                            |d          \  }}|Ft          j        |          }t          j	        
                    |          }d |_        ||f| j        |<   || _        || _        || _        t          j        ddt          j                  | _        |                    | j                   || _        d S )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===koofl;;G:V$$B(//33G$(G!"$g+DKF7Arx00	ty!!! r$   c                 v    t           j        dk    r(| j                            | j                   d| _        dS dS )z2Select the current bitmap into this wxDC instance.win32TN)sysplatformr   SelectObjectrl   
IsSelectedr7   s    r"   r   zGraphicsContextWx.selectG  s:    <7""G  ---"DOOO #"r$   c                     t           j        dk    r-| j                            t          j                   d| _        dS dS )z-Select a Null bitmap into this wxDC instance.r  FN)r  r  r   r  r   
NullBitmapr	  r7   s    r"   r   zGraphicsContextWx.unselectM  s:    <7""G  ///#DOOO #"r$   Nc                    t                               dt          |                      |                                  t	                                          ||           | j                            |                     | 	                                                     | j
                            | j                   |                                  d S )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  s     	

*DJJ777r6***	D--dllnn==>>>DI&&&r$   c                    t          |          }t                              dt          |                      |                                  d|cxk     rdk     rn nd}t                                          |           t          | j        	                    | j
                            }|dk    rd}| j                            |           | j                            | j                   |                                  d S )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    !HH

)4::666q9999199999Aa   //@@AA77B	2DI&&&r$   c                    t                               dt          |                      |                                  t	                                          |           | j                            t          j	        | j
                            | j                            | j                   |                                  d S )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  s    

($t**555R   	*0@AAADI&&&r$   c                    t                               dt          |                      |                                  t	                                          |           | j                            t          j	        | j
                            | j                            | j                   |                                  d S )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  s    

)4::666b!!!	+24?CDDDDI&&&r$   c                     t                               dt          |                      t          j        d |D              S )z'Convert an RGB(A) color to a wx.Colour.z%s - get_wx_color()c                 2    g | ]}t          d |z            S )   )r   ).0r   s     r"   
<listcomp>z2GraphicsContextWx.get_wxcolour.<locals>.<listcomp>  s"    777A3sQw<<777r$   )re   rf   rg   r   Colour)r/   r   s     r"   r   zGraphicsContextWx.get_wxcolour  s9    

($t**555y7777788r$   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%         [,l$ $E }}}& &F 'W&((F! ! ! ! !&# # #$ $ $                 9 9 9 9 9 9 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
j        de
j        de
j        de
j        d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
j)        d"e
j*        d#e
j+        d$e
j,        d%i e
j-        d&e
j.        d'e
j/        d(e
j0        d)e
j1        d*e
j2        d+e
j3        d,e
j4        d-e
j5        d.e
j6        d/e
j7        d0e
j8        d1e
j9        de
j:        d	e
j;        d
e
j<        de
j=        de
j>        d!e
j?        d"e
j@        de
jA        d e
jB        de
jC        diZDdVd3ZEdVd4ZFd5 ZGd6 ZHd7 ZIdWd9ZJdVd:ZKd; ZLdVd<ZMi eNjO        d=d>d>d?d@dAdAdBdCZOdD ZPdE ZQeRdF             ZSeRdVd2dGdH            ZTdI ZUdVdJZVdK ZWdL ZXdM ZYdXdOZZdP Z[dQ Z\dR Z]dS Z^dT Z_dU Z`d2S )Y_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                 n
   t          j        | |           t          j        t	          t
          j        | j        j        j	                   }t          j
        dk    r|                    |          }t          j                            | |||           d| _        d| _        d| _        t          j        ddt          j                  | _        t          j        ddt          j                  | _        |                     t          j        | j                   |                     t          j        | j                   |                     t          j        | j                   |                     t          j        | j                   |                     t          j        | j                   |                     t          j         | j                   |                     t          j!        | j                   |                     t          j"        | j                   |                     t          j#        | j                   |                     t          j$        | j                   |                     t          j%        | j                   |                     t          j&        | j                   |                     t          j'        | j                   |                     t          j(        | j                   |                     t          j)        | j                   |                     t          j*        | j                   |                     t          j+        | j                   |                     t          j,        | j                   |                     t          j-        | j                   |                     t          j.        | j/                   |                     t          j0        | j1                   |                     t          j2        | j3                   |                     t          j4        | j5                   |                     t          j6        | j7                   |                     t          j8        | j7                   | 9                    t          j:                   | ;                    t          j<                   t          j
        dk    rX| =                                }| >                    | ?                                d|z  z             | @                    |           dS dS )	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SetBackgroundColourrh  GetDPIScaleFactorSetInitialSizeGetSize_set_device_pixel_ratio)r/   parentidrm  r   dpiScales         r"   r.   z_FigureCanvasWxBase.__init__  s    	!$///wDIt{'7'<==>;+%%>>$''D
$666 $%'VGQ8N%O%O"%'VGQ8I%J%J"		"+t}---		",///		""D$5666		"-111		""D$9:::		"$d&;<<<		".$"7888		"$d&;<<<		"&(=>>>		""D$9:::		"#T%:;;;		"%t'<===		"/4#8999		"($*?@@@		"&(=>>>		"($*?@@@		"&(=>>>		"*D,ABBB		"*D,ABBB		"#T%9:::		"-111		"%t~666		"%t~666		".0EFFF		"+T-BCCC 1222  ***;+%%--//H(
 ;<<<((22222	 &%r$   c                    t          j                    }|                    | j                   t           j                                        s}t           j                                        }|r_t           j                            |           t           j                                         t           j        	                                 dS dS dS )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    %''$+&&&'')) 	(?//11L (''000%%'''%%'''''	( 	(( (r$   c                     |                      |                                           r|                                  d S d S r(   )r  r  drawr/   r0   r1   s      r"   _update_device_pixel_ratioz._FigureCanvasWxBase._update_device_pixel_ratio  sA     ''(>(>(@(@AA 	IIKKKKK	 	r$   c                     t                               dt          |                      d| _        |                     d           d S )Nz%s - draw_idle()FeraseBackground)re   rf   rg   rq  Refreshr7   s    r"   	draw_idlez_FigureCanvasWxBase.draw_idle  s@    

%tDzz222 	U+++++r$   c                 ,    t          j                     d S r(   )r   Yieldr7   s    r"   flush_eventsz _FigureCanvasWxBase.flush_events'  s    





r$   r   c                    t          | d          rt          d          t          j        | t          j                  }|dk    r`|                    t          |dz            d           |                     t          j        | j	        |
                                           t          j                    | _        | j                                         |                                 d S )N_event_loopzEvent loop already runningr  r   i  T)oneShot)hasattrRuntimeErrorr   r)   ID_ANYr4   r   rw  	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:::IIblD$8U[[]]IKKK?,,

r$   c                     t          | d          r6| j                                        r| j                                         | `d S d S )Nr  )r  r  r=   Exitr/   r  s     r"   r  z#_FigureCanvasWxBase.stop_event_loop8  sV    4'' 	!))++ ( %%'''   	! 	!r$   c                    |                                  }|                                 }t          |                                          }g }g }d}t	          |          D ]g\  }\  }}	d                    d |	D                       }
|                    |	d                    | d|
 d|
 }||	v r|}|                    |           hd                    |          }|||fS )z3Return the wildcard string for the filesave dialog.r   ;c                     g | ]}d |z  S )z*.%srq   )r&  exts     r"   r'  z@_FigureCanvasWxBase._get_imagesave_wildcards.<locals>.<listcomp>H  s     > > >## > > >r$   z (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_listwildcards               r"   _get_imagesave_wildcardsz,_FigureCanvasWxBase._get_imagesave_wildcards?  s   446688::	!)//"3"344	
()9:: 	' 	'OA|dxx > > > > >??Hd1g&&&88(88h88H4'' X&&&&HHY''	*l22r$   c                    t                               dt          |                      | r|                                 sdS |st	          j        |           }t          j        dk    r\t          | j        j	        
                                t                    r+| j                                                                        n| j        }|                    |dd           | j        mt#          t$          | j                  \  }}}}||||f||||f||||f||||fg}|                    || j                   |                    || j                   dS dS )zu
        Update the displayed image on the GUI canvas, using the supplied
        wx.PaintDC device context.
        z%s - gui_repaint()Nrf  r   )re   rf   rg   IsShownOnScreenr   ClientDCrn  
isinstancerm  canvasget_rendererrM   rl   ConvertToImageConvertToBitmapr   rr  rk  r   DrawLineListrv  rt  )r/   drawDCbmpx0y0x1y1rects           r"   gui_repaintz_FigureCanvasWxBase.gui_repaintQ  sj   
 	

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

%tDzz222D!!} 	,IIVI$$$$F+++r$   c                    |                                   t                              dt          |                      |                                                                 }|r|                    |           }|r2|r0|j        s)|j        t          j
        z  s|                                 }n;|                                 }|                    |                                            t          | dd          r|| j        | j        fk    rdS |\  | _        | _        d| _        | j        dk    s| j        dk    rdS | j        j        }t          j        dk    s|                                 }||z  }| j        |z  }| j        |z  }| j                            ||d           |                     d           t1          d	|                                            |                                  dS )
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   rf  )forwardr  resize_event)r  re   rf   rg   	GetParentGetSizerGetItem
ProportionFlagr   EXPAND
GetMinSizeGetClientSizeIncTogetattrr  _heightrq  rm  rn   rn  r  set_size_inchesr  r   _processr  )	r/   r  szsir   dpivalr   winchhinchs	            r"   ry  z_FigureCanvasWxBase._on_size  s    	'')))

$d4jj111^^&&(( 	"D!!B 	*" 	*R] 	*27RY3F 	*??$$DD %%''DJJt(()))44(( 	T\222$(!T\;!t|q00F {k))**,,EeOFf$v%##E5%#@@@
 	U+++ND))22444r$   c                  z   t          j                    } t          j        |                                 ft          j        |                                 ft          j        |                                 ft          j	        | 
                                ft          j        |                                 fg}d |D             S )Nc                     h | ]	\  }}||
S rq   rq   )r&  buttonflags      r"   	<setcomp>z3_FigureCanvasWxBase._mpl_buttons.<locals>.<setcomp>  s!    ===<64====r$   )r   GetMouseStater   LEFT
LeftIsDownRIGHTRightIsDownMIDDLEMiddleIsDownBACK
Aux1IsDownFORWARD
Aux2IsDown)state	mod_tables     r"   _mpl_buttonsz _FigureCanvasWxBase._mpl_buttons  s     ""
 u//112 1 1 3 34!3!3!5!56u//112 %"2"2"4"45
	 >=9====r$   excludec                    dt           j        t           j        fdt           j        t           j        fdt           j        t           j        fg}| #|                                 fd|D             S d |D             S )Nctrlr9  r8  c                 2    g | ]\  }}}|z  r|k    |S rq   rq   )r&  rG   modr   r/  	modifierss       r"   r'  z6_FigureCanvasWxBase._mpl_modifiers.<locals>.<listcomp>  s;     ; ; ;^T3 3;+2c>> +9>>r$   c                 B    g | ]\  }}}t          j        |          |S rq   )r   GetKeyState)r&  rG   r3  r   s       r"   r'  z6_FigureCanvasWxBase._mpl_modifiers.<locals>.<listcomp>  s<     , , ,^T3~c**,D , , ,r$   )r   MOD_CONTROLWXK_CONTROLMOD_ALTWXK_ALT	MOD_SHIFT	WXK_SHIFTGetModifiers)r  r/  r,  r4  s    ` @r"   _mpl_modifiersz"_FigureCanvasWxBase._mpl_modifiers  s     R^R^4BJ
+blBL1
	
 **,,I; ; ; ; ;y ; ; ; ;, ,y , , , ,r$   c                 x   |j         }|| j        v r| j        |         }n@|dk     r8t          |          }|                                s|                                }nd S |                     ||          }d|v r)|                                r|                    d           d                    g ||          S )N   r.  r8  r`  )	KeyCodekeyvaldchr	ShiftDownlowerr>  isupperremover  )r/   r  keyvalr   modss        r"   _get_keyz_FigureCanvasWxBase._get_key  s    T\!!,v&CCc\\f++C ??$$ "iikk4""5&"99d??s{{}}?KK   xx$%%%r$   c                 <   |7t          j                    }|                     |j        |j                  \  }}n|j        |j        }}t           j        dk    s0|                                 }||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.
        Nrf  )
r   r   ScreenToClientXYrn  r  rm  r   rk   )r/   posr   r   r   s        r"   _mpl_coordsz_FigureCanvasWxBase._mpl_coords  s    
 ;"$$C&&suce44DAqq5#%qA{k))**,,EU7DK,3ag===dk&-111r$   c                     t          d| |                     |          g|                                 R d|i                                 | r|                                 dS dS )zCapture key press.key_press_eventguiEventNr   rJ  rP  r  Skipr  s     r"   r}  z _FigureCanvasWxBase._on_key_down  sw    "Du%%	!(,(8(8(:(:	! 	! 	!	! 	!!) 	JJLLLLL	 	r$   c                     t          d| |                     |          g|                                 R d|i                                 | r|                                 dS dS )zRelease key.key_release_eventrS  NrT  r  s     r"   r  z_FigureCanvasWxBase._on_key_up  sw    $du%%	!(,(8(8(:(:	! 	! 	!	! 	!!) 	JJLLLLL	 	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|                    }|                     |           |                                  d S )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/   rY  s     r"   
set_cursorz_FigureCanvasWxBase.set_cursor  s    4-L".L".OR_!2?L".%r'7#R%5/
      	vr$   Tc                     |                                  r|                                  |r|                                  dS dS )zControl wx mouse capture.N)
HasCaptureReleaseMouseCaptureMouse)r/   captures     r"   _set_capturez _FigureCanvasWxBase._set_capture  sP    ?? 	  	 	  	 r$   c                 0    |                      d           dS )zCapture changed or lostFN)rp  r  s     r"   r  z$_FigureCanvasWxBase._on_capture_lost  s    %     r$   c           
         |                                  |                     |                                p|                                           |                     |          \  }}t
          j        t          j        t
          j	        t          j
        t
          j        t          j        t
          j        t          j        t
          j        t          j        i}|                                }|                    ||          }|                     |          }|                                r*t)          d| |||||                                           dS |                                r+t)          d| |||d||                                           dS |                                r*t)          d| |||||                                           dS dS )Start measuring on an axis.button_press_eventr4  rS  T)dblclickr4  rS  button_release_eventN)rU  rp  
ButtonDownButtonDClickrP  r   MOUSE_BTN_LEFTr   r!  MOUSE_BTN_MIDDLEr%  MOUSE_BTN_RIGHTr#  MOUSE_BTN_AUX1r'  MOUSE_BTN_AUX2r)  	GetButtonr   r>  r   r  ButtonUp)r/   r  r   r   
button_mapr  r4  s          r"   r  z$_FigureCanvasWxBase._on_mouse_button  s   

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

 ""//''..	 	G+T1a!*U< < <<DHJJJJJ!! 	G+T1a$!*U< < <<DHJJJJJ^^ 	G-tQ6!*U< < <<DHJJJJJ	G 	Gr$   c           
         |                      |          \  }}|j        |j        z  |j        z  }|                                 t
          j        dk    r/t          | d          sd| _        n| j        r	d| _        dS d| _        t          d| |||| 
                    |          |                                           dS )z3Translate mouse wheel events into matplotlib eventsri  _skipwheeleventTFNscroll_event)stepr4  rS  )rP  LinesPerActionWheelRotation
WheelDeltarU  r   rn  r  r  r   r>  r  )r/   r  r   r   r  s        r"   r  z#_FigureCanvasWxBase._on_mouse_wheel3  s    &&1#e&99E<LL

;+%%4!233 ,'+$$% ,',$'+$>4AD!0077!	# 	# 	##+8:::::r$   c                     |                                  t          d| g|                     |          R |                                 |                     |          |d                                 dS )rs  motion_notify_event)buttonsr4  rS  N)rU  r   rP  r-  r>  r  r  s     r"   r  z_FigureCanvasWxBase._on_motionG  sz    

($ 	#$$U++	# 	#,,..!0077!		# 	# 	# $,8:::::r$   c                     |                                  t          d| g|                     |          R |                                 |d                                 dS )zMouse has entered the window.figure_enter_eventru  NrU  r   rP  r>  r  r  s     r"   r  z_FigureCanvasWxBase._on_enterP  i    

*D 	&''..	& 	& $ 3 3 5 5$	& 	& 	& '/hjjjjjr$   c                     |                                  t          d| g|                     |          R |                                 |d                                 dS )zMouse has left the window.figure_leave_eventru  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   r8  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_DELETErB  r.   r  r  r  r  r  r  r  r  r   r  r{  ry  r   r-  r>  rJ  rP  r}  r  rj  rp  r  r  r  r  r  r  rq   r$   r"   r2  r2    s         &*"J&D&'B'BC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3 73 73 73r
( 
( 
( 
(  , , ,     ! ! ! !3 3 3$B B B B6


$
*)*
 
 
I  , , ,\ > > \> ,d , , , , \,& & &"2 2 2 2"             ! ! !G G G2. . .(. . .1 1 11 1 1 1 1r$   r2  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dS )FigureCanvasWxNc                    t                               dt          |                      t          | j        | j        j                  | _        | j                            | j                   d| _	        | 
                    |           dS )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   rm  rn   r  r  rq  r  )r/   r  s     r"   r  zFigureCanvasWx.drawd  sq    
 	

=$t**---"4;@@''''''''r$   c                 "   t          j        t          j        | j        j        j                  t          j        | j        j        j                            }| j                            t          || j        j
                             t          j        |          r|                                n|}|                    ||          st          d|           | j        r|                                  | r|                                  d S d S )NzCould not save figure to )r   r   r   rl  rm  r   ri   rk   r  rM   rn   r   is_writable_file_liker  SaveFiler  rq  r  )r/   filetypefilenamerl   	saved_objs        r"   _print_imagezFigureCanvasWx._print_imageo  s    49T[%5%;<<9T[%5%<==? ?FDKO<<===3H==!V**,,,  	 !!(H55 	GE8EEFFF
 = 	IIKKK  	LLNNNNN	 	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b)+ + +J'	'b(* *I'	'b(* *I4Y4b(* * *J'	'b(* *IIIr$   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                              dt          |                      t          |             || d|          | _
        t          | j
        ||           }| j
        j        j        }||                     |           t          t           j        |j        j                  \  }}| j
                            |                     t          j        ||                               | j
                            |                     t          j        dd                               | j
                                         |                                  |                     t           j        | j                   d S )Nrf     )r  r  rO  rd   r   )r   rn  DefaultPositionPointr-   r.   re   rf   rg   _set_frame_iconr  r4  managertoolbar
SetToolBarrk  r   rl  r   r   r  ro  rj  
SetMinSizeSetFocusFitrw  	EVT_CLOSE	_on_close)
r/   numfigcanvas_classrO  r  r  r   r   r2   s
            r"   r.   zFigureFrameWx.__init__  st    ;+%%$CC(2r""C555

$d4jj111"l4S11!$+sD99+%-OOG$$$ 49chm,,1""4<<1#>#>???t||BGAqMM::;;;


		",/////r$   c                    t                               dt          |                      t          d| j                                                   | j                                         d | j        j        _        t          j
        | j        j                   	 | j                            | j        j        j                   n# t          $ r Y nw xY w|                                 d S )Nz%s - on_close()close_event)re   rf   rg   r   r  r  r  r  framer   destroympl_disconnectr  _id_dragAttributeErrorrU  r  s     r"   r  zFigureFrameWx._on_close  s    

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

s   )C 
CC)r?   r@   rA   r.   r  rC   rD   s   @r"   r  r    sG        0 0 0 0 0>      r$   r  c                   r     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 )r4  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                               dt          |                      |x| _        | _        t                                          ||           d S )Nrd   )re   rf   rg   r  windowr-   r.   )r/   r  r  r  r2   s       r"   r.   zFigureManagerWx.__init__  sL    

$d4jj111#((
T[%%%%%r$   c                    t          j                    pt                      }t          |||          }|j        j        }t          j                    r2|j        	                                 |j        
                                 |S )N)r  )r   GetAppr#   r  r  r  mplis_interactiver  Showr  )r5  r  rm  r  r!   r  r  s          r"   create_with_canvasz"FigureManagerWx.create_with_canvas  st     	.}c6EEE-' 	&M   M##%%%r$   c                     t           j                                        s+t          j                    }||                                 d S d S d S r(   )r   r   IsMainLoopRunningr  MainLoop)r5  r!   s     r"   start_main_loopzFigureManagerWx.start_main_loop  sO    v'')) 	!IKKE      	! 	!  r$   c                     | j                                          | j                                         t          j        d         r| j                                          d S d S )Nzfigure.raise_window)r  r  r  r  r  rcParamsRaiser7   s    r"   showzFigureManagerWx.show  s\    
<-. 	J	 	r$   c                     t                               dt          |                      | j        }|rt	          j        |j                   d S d S )Nz%s - destroy())re   rf   rg   r  r   	CallAfterr  )r/   r0   r  s      r"   r  zFigureManagerWx.destroy  sP    

#T$ZZ000
 	& L%%%%%	& 	&r$   c                 j    | j                             | j                                                     d S r(   )r  ShowFullScreenIsFullScreenr7   s    r"   full_screen_togglez"FigureManagerWx.full_screen_toggle  s/    
!!dj&=&=&?&?"?@@@@@r$   c                 4    | j                                         S r(   )r  GetTitler7   s    r"   get_window_titlez FigureManagerWx.get_window_title  s    {##%%%r$   c                 :    | j                             |           d S r(   )r  SetTitle)r/   titles     r"   set_window_titlez FigureManagerWx.set_window_title   s    U#####r$   c           
          | j                             | j                             t          j        t          j        |          t          j        |                                         d S r(   )r  SetSizeClientToWindowSizer   rj  r   rl  )r/   ri   rk   s      r"   resizezFigureManagerWx.resize  sc     	DK::27Iedi//<1 <1 2 2 	3 	3 	3 	3 	3r$   )r?   r@   rA   rB   r.   classmethodr	  r  r  r  r  r  r  r"  rC   rD   s   @r"   r4  r4    s         & & & & &
   [ ! ! [!  & & &A A A& & &$ $ $3 3 3 3 3 3 3r$   r4  c                 j    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)    
 9S-hAABBCCCr$   c                     t          j                    }dD ]O}t          j        t          |                    }|                                s d S |                    |           P|                     |           d S )N)zmatplotlib.pngzmatplotlib_large.png)r   
IconBundleIconr(  IsOkAddIconSetIcons)r  bundleimageicons       r"   r  r    sw    ]__F;  w|E**++yy{{ 	FFt	NN6r$   c                   z     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 )NavigationToolbar2WxTr   c          
         t           j                            | |                                d|           t           j        dk    r<|                     |                                 |                                 z             i | _        | j	        D ]\  }}}}|| 
                                 |                     d|                     | d          t           j        |||dv rt           j        nt           j                  j        | j        |<   |                     t           j        t'          | |          | j        |                    || _        | j        rS|                                  t          j        | t           j                  | _        |                     | j                   |                                  t7          j        | |           d S )Nr  r4  ri  .svg)PanZoom)rl   bmpDisabledlabel	shortHelpkindr  )r   ToolBarr.   r	  rn  SetToolBitmapSizeGetToolBitmapSizer  wx_ids	toolitemsAddSeparatorAddTool_iconr  
ITEM_CHECKITEM_NORMALIdrw  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__  s   

D&"2"2"4"4bFFF;+%%""4#9#9#;#;D<R<R<T<T#TUUU8< 	, 	,4D,
H|!!###::&9&9&9:: ",+/?+B+B"--!~  0 0  K IIbk74#:#:T*  , , , , ( 	.$$&&&!}THHHDOOD,---#D&11111r$   c                 @   	 t           j                                                                        }n# t          $ r t           j                            t           j                  }t           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k    }Y nw xY wt          j        d|           }|j        dk    r||                                }|r|                    dd	          }t          j                                        t           j                  }t           j                            ||          S t*          j                            |          }	t1          j        |	                    d
                    }
|rt           j                            t           j                  }|
dddf         dk                        d          }|                                |                                |                                f|
|ddf<   t           j                             |
j!        d         |
j!        d         |
"                                          S )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%  r6  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pilimgr0  
black_masks               r"   rD  zNavigationToolbar2Wx._icon>  s5   		($2244;;==DD 	( 	( 	(",,R-ABBB",,R-EFFBRVmdRXo5rwF#MFRVmdRXo5rwF#MFF?R'DDD	( #Hd33;&  //##C Bkk..AA n..==bnMMO?**3@@@Y^^D))FHV^^F3344E J&001IJJ#C!Gn166B6??
)+288::rwwyy(Ij"1"n%9++AAA A As   03 B+C! C!c                     d| j         v r/|                     | j         d         | j        j        dk               d| j         v r1|                     | j         d         | j        j        dk               d S d S )Nr7  PANr8  ZOOM)r@  
ToggleToolmoderG   r7   s    r"   _update_buttons_checkedz,NavigationToolbar2Wx._update_buttons_checkedb  sr    DKOODK.	%0GHHHT[  OODK/61IJJJJJ ! r$   c                 \     t                      j        |  |                                  d S r(   )r-   zoomr  r/   r0   r2   s     r"   r  zNavigationToolbar2Wx.zoomh  s.    d$$&&&&&r$   c                 \     t                      j        |  |                                  d S r(   )r-   panr  r  s     r"   r  zNavigationToolbar2Wx.panl  s.    T$$&&&&&r$   c           	         | j                                         \  }}}| j                                         }t          j        | j                                         dt          j        d         ||t          j        t          j	        z            }|
                    |           |                                t          j        k    rt          j        |                                          }t                               dt%          |           |           ||                                         }|j        dd          }	|	| j                                         v r%||	k    rt                               d|	||	           |	}t          j        d         r!t/          |j                  t          j        d<   	 | j         j                            ||           |S # t6          $ rn}
t          j        | j                                         t/          |
          d          }|                                 |                                 Y d }
~
d S d }
~
ww xY wd S )	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   GetFilterIndexra  get_supported_filetypeswarningr&  r  rm  savefig	ExceptionMessageDialogr  )r/   r0   r  r  r  default_filedialogr   fmtr  es              r"   save_figurez NavigationToolbar2Wx.save_figurep  s%   (,(L(L(N(N%	4{7799K!!##^L,-|YJ//1 1 	l+++))< 0 011DJJ0$t**dCCCv,,../C+abb/Cdk99;;;;s

  < #s, , , |/0 E474D4D01!"**4*<<< ! ! !);0022CFF.0 0 0   """         !% *)s   2"G 
IA#IIc                     | j         j        j        j        }t          j        dk    rdn| j                                         }||z  ||z
  |z  ||z  ||z
  |z  f| j         _        | j                                          d S )Nrf  r   )	r  rm  r   rk   r   rn  r  rr  r  )r/   r  r  r  r  r  rk   sfs           r"   draw_rubberbandz$NavigationToolbar2Wx.draw_rubberband  s    #(/+,,QQ$+2O2O2Q2Q(*2R/?(*2R/?(A$r$   c                 P    d | j         _        | j                                          d S r(   )r  rr  r  r7   s    r"   remove_rubberbandz&NavigationToolbar2Wx.remove_rubberband  s&    '+$r$   c                 L    | j         r| j                            |           d S d S r(   )rI  rM  SetLabelr/   r{   s     r"   set_messagez NavigationToolbar2Wx.set_message  s4     	)%%a(((((	) 	)r$   c                    | j         j        dk    }| j         j        t          | j                   dz
  k     }d| j        v r!|                     | j        d         |           d| j        v r#|                     | j        d         |           d S d S )Nr   r   BackForward)
_nav_stack_poslenr@  
EnableTool)r/   can_backwardcan_forwards      r"   set_history_buttonsz(NavigationToolbar2Wx.set_history_buttons  s    +a/o*S-A-AA-EET[  OODK/>>>##OODK	2K@@@@@ $#r$   r  )r?   r@   rA   r   	TB_BOTTOMr.   r   rD  r  r  r  r  r  r  r  r  rC   rD   s   @r"   r3  r3    s        2", 2 2 2 2 2@ !A !A \!AFK K K' ' ' ' '' ' ' ' ' !  !  !D    ) ) )A A A A A A Ar$   r3  c                   F    e Zd ZdZdej        fdZd Zd Zd Z	d Z
d ZdS )		ToolbarWxr6  Nc                 x   ||j                                         }t          j        | |           t          j                            | |d|           |                                 | _        t	          j        | t          j	                  | _
        |                     | j
                   i | _        i | _        d S )Nr  r4  )r  r	  r   r.   r   r=  rJ  _spacerK  rL  rM  rN  
_toolitems_groups)r/   toolmanagerr  r   s       r"   r.   zToolbarWx.__init__  s    > '1133F"4555

D&"E:::..00=R^DDD()))r$   c                 P      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   N   K   | ]}                     |          k    |V   d S r(   )GetToolByPos)r&  rO  r/   tools     r"   	<genexpr>z*ToolbarWx._get_tool_pos.<locals>.<genexpr>  sG       3 3$$S))T11 11113 3r$   )range
ToolsCount)r/   r  rO  s   `` r"   _get_tool_poszToolbarWx._get_tool_pos  sA    3 3 3 3 3uT_55 3 3 3
r$   c           	          | j         vr5                                           j                             j         |<    j         |         }d t	           j        t           j                            D             }|dk    rC||d         k    rdn3                     ||                    |          dz
                     dz   }	n                     |          dz   }	|	|z   }
|r\t          
                    |          }|st          j        nt          j        }                     |
d|t          j        ||pd          }nk                               d         dz   df}|rt          j         d|          }nt          j         d|          }                     |
|          }                                   fd	}|r"                     t          j        ||           n |                    t          j        |            j                            g             j                                     ||f           d S )
Nc                 b    g | ],}|                                 |                                *|-S rq   )IsSeparatorIsStretchableSpace)r&  ts     r"   r'  z*ToolbarWx.add_toolitem.<locals>.<listcomp>  sP     C C Ca==??C+,+?+?+A+AC C C Cr$   r   r   r   
   rg  r:  c                 2                                    d S r(   )trigger_tool)r  rG   r/   s    r"   handlerz'ToolbarWx.add_toolitem.<locals>.handler  s    d#####r$   )r  InsertSeparatorr  r  rk  r  r  r  indexr3  rD  r   rF  rE  
InsertToolr  GetTextExtentToggleButtonButtonInsertControlrO  rw  rH  r  r  
setdefaultr  )r/   rG   grouppositionrS  descriptiontogglesepsepsstartidxr  r<  r  r   r7  r  s   ``               r"   add_toolitemzToolbarWx.add_toolitem  so    $$"&"6"6""4;//#1 #1DLl5!C C3t0%2H2HII C C C q== a..QQ,,T$**S//A2E-FGG!K E &&s++a/Eh 	@&,,Z88C)/B2>>R]D??3D#r}d#.#4"6 6DD &&t,,Q/"4b9D ?/$DtDDD)D"d>>>%%c7$%??D	$ 	$ 	$ 	$ 	$ 	$  	4IIbk7D1111LL)7333""4,,,$$dG_55555r$   c                    || j         vrd S | j         |         D ]\\  }}|                                s|                     |j        |           5|                                                    |           ]|                                  d S r(   )r  	IsControlr~  rG  
GetControlSetValuer  )r/   rG   toggledr  r  s        r"   toggle_toolitemzToolbarWx.toggle_toolitem  s    t&&F!_T2 	4 	4MD'>>## 41111!!**73333r$   c                 |    | j                             |g           D ]\  }}|                     |j                    d S r(   )r  pop
DeleteToolrG  )r/   rG   r  r  s       r"   remove_toolitemzToolbarWx.remove_toolitem  sH    !_00r:: 	% 	%MD'OODG$$$$	% 	%r$   c                 :    | j                             |           d S r(   )rM  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| 	 	 	 		 	 	+6 +6 +6Z  % % %% % % % %r$   r  c                       e Zd Zd ZdS )ConfigureSubplotsWxc                 :    t                               |            d S r(   )r3  configure_subplotsr/   r0   s     r"   triggerzConfigureSubplotsWx.trigger  s    //55555r$   Nr?   r@   rA   r  rq   r$   r"   r  r    s#        6 6 6 6 6r$   r  c                       e Zd Zd ZdS )SaveFigureWxc                 ^    t                               |                                            d S r(   )r3  r  "_make_classic_style_pseudo_toolbarr  s     r"   r  zSaveFigureWx.trigger  s3    ((3355	7 	7 	7 	7 	7r$   Nr  rq   r$   r"   r  r  
  s#        7 7 7 7 7r$   r  c                       e Zd Zd Zd ZdS )RubberbandWxc                 h    t                               |                                 d ||||           d S r(   )r3  r  r  )r/   r  r  r  r  s        r"   r  zRubberbandWx.draw_rubberband  sB    ,,3355tRR	M 	M 	M 	M 	Mr$   c                 ^    t                               |                                            d S r(   )r3  r  r  r7   s    r"   r  zRubberbandWx.remove_rubberband  s3    ..3355	7 	7 	7 	7 	7r$   N)r?   r@   rA   r  r  rq   r$   r"   r  r    s5        M M M7 7 7 7 7r$   r  c                   L     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                 P   t                                          |dt          j        t          j        z             t          j        t          j                  }t          j        dddd          }|                                 	                                }t          | j        |z             D ]~\  }}t          || j                  D ]c\  }}	t          j        | |          }
|dk    r|
                    |           |
                    |	           |                    |
ddd           d|                    |dt          j        d           t          j        | t          j                  }|                    |dt          j        t          j        z  d           |                     |           |                    |            |                                  |                     t          j        | j                   |                    t          j        | j                   d S )NHelp)r  r   r   r         r  )r-   r.   r   DEFAULT_DIALOG_STYLERESIZE_BORDERBoxSizerVERTICALFlexGridSizerGetFontMakeBoldr  headerszipwidthsrK  rx   WrapAddALLr  r  ALIGN_CENTER_HORIZONTALSetSizerr  Layoutrw  r  r  
EVT_BUTTON)r/   r  help_entriessizer
grid_sizerrV   rrowcolri   r:  okr2   s               r"   r.   z_HelpDialog.__init__!  s   v!69II 	 	K 	K 	K BK((%aAq11
||~~&&((| ;<< 	/ 	/FAs #C 5 5 / /ed#66666MM$'''

5!!!uaA..../ 			*a+++YtRX&&		"a3bf<a@@@e		$		",///
t~.....r$   c                 n    d t           _        |                                  |                                 d S r(   )r  	_instanceDestroyLaterrU  r  s     r"   r  z_HelpDialog._on_close:  s-     $

r$   c                     | j         r| j                                          d S  | ||          | _         | j                                          d S r(   )r  r  r  )r5  r  r  s      r"   r  z_HelpDialog.show?  sT     = 	M!!!FFL11r$   )r?   r@   rA   r  r	  r  r.   r  r#  r  rC   rD   s   @r"   r  r    sx        I56G__F/ / / / /2  
   [    r$   r  c                       e Zd Zd ZdS )HelpWxc                     t                               | j        j                                        |                                            d S r(   )r  r  rm  r  GetTopLevelParent_get_help_entriesr  s     r"   r  zHelpWx.triggerK  sF    +==??//11	3 	3 	3 	3 	3r$   Nr  rq   r$   r"   r  r  I  s#        3 3 3 3 3r$   r  c                       e Zd Zd ZdS )ToolCopyToClipboardWxc                    | j         j        s| j                                          | j         j                                        rt
          j                                        sd S 	 t
          j                            t          j	        | j         j                             t
          j        
                                 d S # t
          j        
                                 w xY wr(   )r  rq  r  rl   r,  r   r  r  r  r  r  r  s      r"   r  zToolCopyToClipboardWx.triggerR  s    {# 	K{!&&(( 	0D0D0F0F 	F	$O##B$78J$K$KLLLO!!#####BO!!####s   %;C    C Nr  rq   r$   r"   r$  r$  P  s#        $ $ $ $ $r$   r$  c                   $    e Zd ZeZeZej        ZdS )
_BackendWxN)	r?   r@   rA   r  FigureCanvasr4  FigureManagerr  mainlooprq   r$   r"   r'  r'  a  s         !L#M.HHHr$   r'  )OrB   r  loggingr   r  r  r/  numpyrl  	PIL.Imageri  
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   rp  r2  r  Framer  r4  r(  r  r=  r3  r  _register_tool_classConfigureSubplotsBaser  SaveFigureBaser  RubberbandBaser  Dialogr  ToolHelpBaser  ToolCopyToClipboardBaser$  _toolbar2_class_toolmanager_toolbar_classexportr'  rq   r$   r"   <module>rB     s           



             B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B E D D D D D D D D D D D ) ) ) ) ) )             * * * * * * 				 w""
  Q           i      & 	y,FH H HLC LC LC LC LC LC LC	H HLC^j9 j9 j9 j9 j9+ j9 j9 j9ZU1 U1 U1 U1 U1*BH U1 U1 U1p-* -* -* -* -*( -* -* -*`. . . . .BH . . .bF3 F3 F3 F3 F3' F3 F3 F3RD D D  JA JA JA JA JA-rz JA JA JA^U% U% U% U% U%!2: U% U% U%p $#$7886 6 6 6 6-= 6 6 986
 $#$7887 7 7 7 7=/ 7 7 987 $#$7887 7 7 7 7=/ 7 7 987* * * * *") * * *Z $#$7883 3 3 3 3]' 3 3 983 $#$788	$ 	$ 	$ 	$ 	$MA 	$ 	$ 98	$ #7 -6 * 
/ / / / / / / / / /r$   