a
    ضah                  
   @   s  d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlmZm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ zd dlZW n. ey Z zed	eW Y dZ[n
dZ[0 0 zed
d W n, ey Z zeeW Y dZ[n
dZ[0 0 d dl m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z-m.Z/m0Z1 e2e3Z4ej5G dd dZ6e 7 dd Z8G dd de$j9eZ:G dd deZ;G dd de+e$j<Z=G dd dee$j>Z?G dd de	j@ZAejBdddG d d! d!e	jCZDG d"d# d#e	jEZFG d$d% d%e	jGZHejId&kr8d'ZJnd(ZJeKe
Ld)eJZMd.d*d+ZNeAe	_Oe/e	_Pe1e	_QeFe	_ReHe	_Se?Z<ejTG d,d- d-e*ZUdS )/    N)Path)_apibackend_toolscbook)Gcf)_BackendFigureCanvasBaseFigureManagerBaseNavigationToolbar2	TimerBaseToolContainerBase)Cursors)Figure)SubplotToolz#The GTK3 backends require PyGObjectGtkz3.0)GioGLibGObjectr   Gdk   )_create_application_shutdown_applicationbackend_version_BackendGTK_NavigationToolbar2GTKTimerGTKConfigureSubplotsGTKRubberbandGTKc                   @   s&   e Zd Zejdddedd ZdS )__getattr__3.5 )Zobj_typec                 C   s|   zNt tjjtj }tj|dtj	|dtj
|dtj|dtj|diW S  tyv } zi W  Y d }~S d }~0 0 d S )Nmovepointerdefault	crosshairwait)	functoolspartialr   Cursornew_from_nameDisplayget_defaultr   MOVEHANDPOINTERSELECT_REGIONWAIT	TypeError)selfZ
new_cursorexc r4   p/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/matplotlib/backends/backend_gtk3.pycursord.   s    




z__getattr__.cursordN)__name__
__module____qualname__r   
deprecatedpropertyr6   r4   r4   r4   r5   r   ,   s   r   c                 C   sL   t jtjdtjdtjdtjdtjdtjdtj	di| d}t
jt
j |S )	Nr!   r"   r#   r$   r%   z	ew-resizez	ns-resize)cursor)r   Zcheck_getitemr   r,   r-   r.   r/   r0   ZRESIZE_HORIZONTALZRESIZE_VERTICALr   r(   r)   r*   r+   )Z
mpl_cursornamer4   r4   r5   _mpl_to_gtk_cursor?   s    	r>   c                   @   s  e Zd ZdZeZejjejj	B ejj
B ejjB ejjB ejjB ejjB ejjB ejjB Zd/ddZdd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Z d!d" Z!d#d$ Z"d%d& Z#d'd( Z$d)d* Z%d+d, Z&d-d. Z'dS )0FigureCanvasGTK3Zgtk3Nc                 C   s<  t | | tj|  d| _d | _d | _| d| j | d| j | d| j	 | d| j
 | d| j | d| j | d| j | d| j | d	| j | d
| j | d| j | d| j | d| j | d| j | | jj | d t }|d |  }||tj |d d S )Nr   scroll_eventbutton_press_eventbutton_release_eventconfigure_eventzscreen-changedznotify::scale-factordrawkey_press_eventkey_release_eventmotion_notify_eventleave_notify_evententer_notify_eventsize_allocateTs/   .matplotlib-canvas { background-color: white; }zmatplotlib-canvas)r   __init__r   _idle_draw_idZ_lastCursor_rubberband_rectconnectr@   rA   rB   rC   _update_device_pixel_ratioon_draw_event
_post_drawrE   rF   rG   rH   rI   rJ   Z
set_events	__class__
event_maskZset_can_focusr   ZCssProviderZload_from_dataZget_style_contextZadd_providerZ#STYLE_PROVIDER_PRIORITY_APPLICATIONZ	add_class)r2   figurecssZ	style_ctxr4   r4   r5   rK   \   s4    

zFigureCanvasGTK3.__init__c                 C   s   |    d S N)Zclose_eventr2   r4   r4   r5   destroy}   s    zFigureCanvasGTK3.destroyc                 C   s8   |  d}|d ur4|t| tj }|d d S )NwindowT)get_property
set_cursorr>   r   MainContextr#   	iteration)r2   r<   rY   contextr4   r4   r5   r[      s
    

zFigureCanvasGTK3.set_cursorc                 C   s*   |j | j }| jjj|j| j  }||fS )aI  
        Calculate mouse coordinates in physical pixels.

        GTK use logical pixels, but the figure is scaled to physical pixels for
        rendering.  Transform to physical pixels so that all of the down-stream
        transforms work as expected.

        Also, the origin is different and needs to be corrected.
        )xdevice_pixel_ratiorT   Zbboxheighty)r2   eventr_   rb   r4   r4   r5   _mouse_event_coords   s    
z$FigureCanvasGTK3._mouse_event_coordsc                 C   s<   |  |\}}|jtjjkr dnd}tj| ||||d dS )Nr   guiEventF)rd   	directionr   ZScrollDirectionUPr   r@   )r2   widgetrc   r_   rb   stepr4   r4   r5   r@      s    zFigureCanvasGTK3.scroll_eventc                 C   s(   |  |\}}tj| |||j|d dS Nrf   F)rd   r   rA   buttonr2   rj   rc   r_   rb   r4   r4   r5   rA      s
    z#FigureCanvasGTK3.button_press_eventc                 C   s(   |  |\}}tj| |||j|d dS rl   )rd   r   rB   rm   rn   r4   r4   r5   rB      s
    z%FigureCanvasGTK3.button_release_eventc                 C   s   |  |}tj| ||d dS Nrf   T)_get_keyr   rE   r2   rj   rc   keyr4   r4   r5   rE      s    
z FigureCanvasGTK3.key_press_eventc                 C   s   |  |}tj| ||d dS ro   )rp   r   rF   rq   r4   r4   r5   rF      s    
z"FigureCanvasGTK3.key_release_eventc                 C   s$   |  |\}}tj| |||d dS rl   )rd   r   rG   rn   r4   r4   r5   rG      s    z$FigureCanvasGTK3.motion_notify_eventc                 C   s   t | | d S rV   )r   rH   )r2   rj   rc   r4   r4   r5   rH      s    z#FigureCanvasGTK3.leave_notify_eventc                 C   s&   |  |\}}tj| |||fd d S )N)rg   Zxy)rd   r   rI   rn   r4   r4   r5   rI      s    z#FigureCanvasGTK3.enter_notify_eventc                 C   sP   | j j}|j| j | }|j| j | }| j j||dd t|  |   d S )NFZforward)	rT   dpiwidthr`   ra   set_size_inchesr   Zresize_event	draw_idle)r2   rj   Z
allocationZdpivalZwinchZhinchr4   r4   r5   rJ      s    
zFigureCanvasGTK3.size_allocatec                 C   s   t t|j}t|t|j}tjjdftjj	dftjj
dftjjdfg}|D ]0\}}|j|@ rT|dkrv| sT| d| }qT|S )NZctrlZaltshiftsuper+)chrr   Zkeyval_to_unicodekeyvalr   Z_unikey_or_keysym_to_mplkeyZkeyval_nameZModifierTypeZCONTROL_MASKZ	MOD1_MASKZ
SHIFT_MASKZ	MOD4_MASKstateisprintable)r2   rc   Zunikeyrr   	modifiersZkey_maskprefixr4   r4   r5   rp      s    





zFigureCanvasGTK3._get_keyc                 O   s"   |  |  r|   |   d S rV   )Z_set_device_pixel_ratioZget_scale_factorZqueue_resize
queue_draw)r2   argskwargsr4   r4   r5   rO      s    z+FigureCanvasGTK3._update_device_pixel_ratioc                 C   sd   | dd u rd S |j| j }|j| j }|dk s:|dk r>d S | jj}| jj|| || dd dS )NrY      Frs   )rZ   ru   r`   ra   rT   rt   rv   )r2   rj   rc   whrt   r4   r4   r5   rC      s    z FigureCanvasGTK3.configure_eventc                 C   s   || _ |   d S rV   )rM   r   )r2   Zrectr4   r4   r5   _draw_rubberband   s    z!FigureCanvasGTK3._draw_rubberbandc           	         s    j d u rd S  fdd j D \}}}}|| }|| }||| ||| ||| ||| ||| ||| ||| ||| |d |d |dd |ddd |  |dd |ddd |  d S )Nc                 3   s   | ]}| j  V  qd S rV   )r`   ).0ZdimrW   r4   r5   	<genexpr>   s   z.FigureCanvasGTK3._post_draw.<locals>.<genexpr>r   )r   r   r   r   )	rM   Zmove_toZline_toZset_antialiasZset_line_widthZset_dashZset_source_rgbZstroke_preserveZstroke)	r2   rj   ctxZx0Zy0r   r   x1y1r4   rW   r5   rQ      s.    



zFigureCanvasGTK3._post_drawc                 C   s   d S rV   r4   )r2   rj   r   r4   r4   r5   rP     s    zFigureCanvasGTK3.on_draw_eventc                 C   s   |   r|   d S rV   )Zis_drawabler   rW   r4   r4   r5   rD     s    zFigureCanvasGTK3.drawc                    s*    j dkrd S  fdd}t| _ d S )Nr   c                     s    z    W d _nd _0 dS )Nr   F)rD   rL   r   rW   r4   r5   	idle_draw  s    
z-FigureCanvasGTK3.draw_idle.<locals>.idle_draw)rL   r   Zidle_add)r2   r   r4   rW   r5   rw     s    
zFigureCanvasGTK3.draw_idlec                 C   s"   t j }| r|d q
d S NT)r   r\   r#   pendingr]   )r2   r^   r4   r4   r5   flush_events&  s    
zFigureCanvasGTK3.flush_events)N)(r7   r8   r9   Zrequired_interactive_framework	TimerGTK3Z
_timer_clsr   Z	EventMaskZBUTTON_PRESS_MASKZBUTTON_RELEASE_MASKZEXPOSURE_MASKZKEY_PRESS_MASKZKEY_RELEASE_MASKZENTER_NOTIFY_MASKZLEAVE_NOTIFY_MASKZPOINTER_MOTION_MASKZSCROLL_MASKrS   rK   rX   r[   rd   r@   rA   rB   rE   rF   rG   rH   rI   rJ   rp   rO   rC   r   rQ   rP   rD   rw   r   r4   r4   r4   r5   r?   M   sR   

!
r?   c                       s\   e Zd ZdZ fddZdd Zdd Zdd	 Zd
Zdd Z	dd Z
dd Zdd Z  ZS )FigureManagerGTK3a9  
    Attributes
    ----------
    canvas : `FigureCanvas`
        The FigureCanvas instance
    num : int or str
        The Figure number
    toolbar : Gtk.Toolbar
        The toolbar
    vbox : Gtk.VBox
        The Gtk.VBox containing the canvas and toolbar
    window : Gtk.Window
        The Gtk.Window

    c                    s  t  }t  _| j t ||  jdd  jt	 t
  _ jdtjj  j j  j   j   j jddd  j \}}   _ jrt j  jrt j  jd ur j   j jddd  j \}}||j7 } j|| d _ jd fdd	  jd
 fdd	 t ! rr j   j"   j#  d S )N
matplotlibZ
MatplotliborientationTr   FrX   c                     s
   t  S rV   r   rX   r   rW   r4   r5   <lambda>a      z,FigureManagerGTK3.__init__.<locals>.<lambda>Zdelete_eventc                     s
   t  S rV   r   r   rW   r4   r5   r   b  r   )$r   r   ZWindowrY   Z
add_windowry   rK   Zset_wmclassZset_icon_from_filewindow_iconBoxvboxset_propertyOrientationVERTICALaddshowcanvas
pack_startZget_width_height_get_toolbartoolbartoolmanagerr   Zadd_tools_to_managerZadd_tools_to_containerpack_endZget_preferred_sizera   set_default_size_destroyingrN   mplZis_interactiverw   Z
grab_focus)r2   r   numZappr   r   Zmin_sizeZnat_sizerR   rW   r5   rK   =  s>    









zFigureManagerGTK3.__init__c                 G   sB   | j r
d S d| _ | j  | j  | j  | jr>| j  d S r   )r   r   rX   rY   r   r   r2   r   r4   r4   r5   rX   i  s    


zFigureManagerGTK3.destroyc                 C   sB   | j   | j  tjd r>| j  r4| j   n
t	d d S )Nzfigure.raise_windowz#Cannot raise window yet to be setup)
rY   r   r   rD   r   rcParams
get_windowZpresentr   Zwarn_externalrW   r4   r4   r5   r   w  s    



zFigureManagerGTK3.showc                 C   s*   | j  | _ | j r| j  n
| j  d S rV   )_full_screen_flagrY   Z
fullscreenZunfullscreenrW   r4   r4   r5   full_screen_toggle  s    
z$FigureManagerGTK3.full_screen_toggleFc                 C   s@   t jd dkrt| j| j}nt jd dkr8t| j}nd }|S )Nr   Ztoolbar2r   )r   r   NavigationToolbar2GTK3r   rY   ToolbarGTK3r   )r2   r   r4   r4   r5   r     s    zFigureManagerGTK3._get_toolbarc                 C   s
   | j  S rV   )rY   Z	get_titlerW   r4   r4   r5   get_window_title  s    z"FigureManagerGTK3.get_window_titlec                 C   s   | j | d S rV   )rY   	set_title)r2   titler4   r4   r5   set_window_title  s    z"FigureManagerGTK3.set_window_titlec                 C   s   t || jj }t || jj }| jr:| j }||j7 }| j }|j|j  kr\dkrpn n| j	|| n| j
|| dS )zSet the canvas size in pixels.r   N)intr   r`   r   Zsize_requestra   Zget_allocationru   rY   r   resize)r2   ru   ra   Ztoolbar_sizeZcanvas_sizer4   r4   r5   r     s    


zFigureManagerGTK3.resize)r7   r8   r9   __doc__rK   rX   r   r   r   r   r   r   r   __classcell__r4   r4   r   r5   r   -  s   ,r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s\  || _ tj|  | tjj i | _| jD ]\}}}}|d u rR| 	t
 d q,tjtjttd| dtjj}|dv rt nt  | j|< }|| || |dt| ||_|| | 	|d q,t }	| 	|	d t }
|
d |	 d |	!|
 t }	| 	|	d t | _"|	!| j" | #  t$| | d S )Nre   images-symbolic.svg)ZzoomZpanclickedu   <small> 
 </small>T)%winr   rK   	set_styler   ToolbarStyleICONSZ_gtk_idsZ	toolitemsinsertZSeparatorToolItemImagenew_from_giconr   Iconnew_for_stringstrr   _get_data_pathIconSizeLARGE_TOOLBARToggleToolButton
ToolButton	set_labelset_icon_widgetrN   getattrZ_signal_handlerset_tooltip_textZToolItemLabelZ
set_markupZ
set_expandr   messageshow_allr
   )r2   r   rY   textZtooltip_text
image_filecallbackimagerm   toolitemlabelr4   r4   r5   rK     sP    






zNavigationToolbar2GTK3.__init__c           
   
      s  t jdj t jjt jt jjt j	t jj
fd j  D ]V\}}t  }|| |D ]}|d|  q\ | j |v r> | q>t jd fdd} tjd   j   d   }  }  }j |  d	 }    |t jj
kr$d S tjd rBt!j"#|tjd< zjj$j%||d
 W n6 t&y }	 zt't(|	d W Y d }	~	n
d }	~	0 0 d S )NzSave the figure)r   parentactionbuttonsz*.znotify::filterc                     sD       }j | d } tt  d|  d S )Nr   .)	
get_filterget_namer   get_supported_filetypes_groupedset_current_namer   r   Zget_current_namewith_suffix)r   r=   fmtdialogr2   r4   r5   on_notify_filter  s
    z<NavigationToolbar2GTK3.save_figure.<locals>.on_notify_filterzsavefig.directoryTr   )format)r   ))r   ZFileChooserDialogr   get_toplevelZFileChooserActionZSAVEZSTOCK_CANCELZResponseTypeZCANCELZ
STOCK_SAVEOKr   itemsZ
FileFilterset_nameZadd_patternZ
add_filterZget_default_filetypeZ
set_filterr&   r'   rN   Zset_current_folderr   r   r   Zget_default_filenameZset_do_overwrite_confirmationrunget_filenamer   r   rX   ospathdirnamerT   Zsavefig	Exceptionerror_msg_gtkr   )
r2   r   r=   Zfmtsffr   r   responsefnameer4   r   r5   save_figure  sF    





z"NavigationToolbar2GTK3.save_figureN)r7   r8   r9   rK   r   r4   r4   r4   r5   r     s   0r   c                   @   sP   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdS )r   r   c                 C   s\   t | | tj|  | dtjj t | _| 	| jddd | 
  i | _i | _d S )Nr   Fr   )r   rK   r   r   r   r   Z
HORIZONTALr   _messager   r   _groups
_toolitems)r2   r   r4   r4   r5   rK     s    
zToolbarGTK3.__init__c           
      C   s   |rt  }nt  }|| |d urLt jtj|t j	j
}|| |d u rXd}| ||| |d| j|}	|| |  | j|g  | j| ||	f d S )Nre   r   )r   r   r   r   r   r   r   r   r   r   r   r   _add_buttonrN   
_call_toolr   r   r   
setdefaultappend)
r2   r=   grouppositionr   descriptionZtogglerm   r   signalr4   r4   r5   add_toolitem  s$    




zToolbarGTK3.add_toolitemc                 C   sf   || j vrP| j r|   t }|tjj | |ddd |  || j |< | j | 	|| d S )NFr   )
r   _add_separatorr   Toolbarr   r   r   r   r   r   )r2   rm   r   r   r   r4   r4   r5   r   3  s    

zToolbarGTK3._add_buttonc                 C   s   |  | d S rV   )Ztrigger_tool)r2   Zbtnr=   r4   r4   r5   r   >  s    zToolbarGTK3._call_toolc                 C   sD   || j vrd S | j | D ]&\}}|| || || qd S rV   )r   Zhandler_blockZ
set_activeZhandler_unblock)r2   r=   Ztoggledr   r  r4   r4   r5   toggle_toolitemA  s    


zToolbarGTK3.toggle_toolitemc                 C   sl   || j vr"| j| d|  d S | jD ]6}| j | D ]&\}}|| j| v r6| j| | q6q(| j |= d S )Nz not in toolbar)r   r   Zmessage_eventr   remove)r2   r=   r   r   _signalr4   r4   r5   remove_toolitemI  s    

zToolbarGTK3.remove_toolitemc                 C   s4   t  }|dt jj | |ddd |  d S )Nr   FTr   )r   Z	Separatorr   r   r   r   r   )r2   sepr4   r4   r5   r  T  s    zToolbarGTK3._add_separatorc                 C   s   | j | d S rV   )r   r   )r2   sr4   r4   r5   set_messageZ  s    zToolbarGTK3.set_messageN)r7   r8   r9   Z_icon_extensionrK   r  r   r   r  r	  r  r  r4   r4   r4   r5   r     s   
r   c                   @   s   e Zd Zdd ZdS )SaveFigureGTK3c                    s   G  fddd}t | S )Nc                       s   e Zd Z jjZdS )z-SaveFigureGTK3.trigger.<locals>.PseudoToolbarN)r7   r8   r9   rT   r   r4   rW   r4   r5   PseudoToolbara  s   r  )r   r   )r2   r   r   r  r4   rW   r5   trigger_  s    zSaveFigureGTK3.triggerNr7   r8   r9   r  r4   r4   r4   r5   r  ^  s   r  r   ZToolSetCursor)alternativec                   @   s   e Zd Zdd ZdS )SetCursorGTK3c                 C   s   t |  | d S rV   )r   r[   Z"_make_classic_style_pseudo_toolbar)r2   r<   r4   r4   r5   r[   i  s    zSetCursorGTK3.set_cursorN)r7   r8   r9   r[   r4   r4   r4   r5   r  g  s   r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )HelpGTK3c                 C   s~   ddddd}| d}dd |d	d
 D }|d
 }||v rH|| }n(t|dkr^| }n| rp|dg7 }d|| S )z
        Convert Matplotlib key presses to GTK+ accelerator identifiers.

        Related to `FigureCanvasGTK3._get_key`.
        Z	BackSpaceZ	Page_DownZPage_UpZScroll_Lock)Z	backspaceZpagedownZpageupZscroll_lockrz   c                 S   s   g | ]}d | d qS )<>r4   )r   modr4   r4   r5   
<listcomp>}  r   z0HelpGTK3._normalize_shortcut.<locals>.<listcomp>Nre   r   z<shift>r    )splitlen
capitalizeisupperjoin)r2   rr   ZspecialpartsZmodsr4   r4   r5   _normalize_shortcuto  s    



zHelpGTK3._normalize_shortcutc                 C   s   d|vo| d S )z
        Check for a valid shortcut to be displayed.

        - GTK will never send 'cmd+' (see `FigureCanvasGTK3._get_key`).
        - The shortcut window only shows keyboard shortcuts, not mouse buttons.
        zcmd+zMouseButton.)
startswith)r2   rr   r4   r4   r5   _is_valid_shortcut  s    zHelpGTK3._is_valid_shortcutc                    s   t  }t jj D ]l\}}|js(qt  }|| |	dd d  t j
d fdd j|D |j|jd}|| qt jdd jj d	}|  || |  d S )
Nc                 S   s
   |  dS )NF)Zset_visible)rj   datar4   r4   r5   r     r   z1HelpGTK3._show_shortcuts_window.<locals>.<lambda> c                 3   s"   | ]}  |r |V  qd S rV   )r   r  )r   rr   rW   r4   r5   r     s   
z2HelpGTK3._show_shortcuts_window.<locals>.<genexpr>)Zacceleratorr   ZsubtitleHelpT)r   modalZtransient_for)r   ZShortcutsSectionsortedr   Ztoolsr   r  ZShortcutsGroupr   forallZShortcutsShortcutr  Zget_tool_keymapr=   ZShortcutsWindow_figurer   r   r   r   )r2   sectionr=   Ztoolr   ZshortcutrY   r4   rW   r5   _show_shortcuts_window  s.    



zHelpGTK3._show_shortcuts_windowc                 C   s>   t j| jj dt jjt jj| 	 dd}|
  |  d S )Nr   r#  )r   )r   MessageDialogr'  r   r   MessageTypeINFOButtonsTyper   Z_get_help_textr   rX   )r2   r   r4   r4   r5   _show_shortcuts_dialog  s    
zHelpGTK3._show_shortcuts_dialogc                 G   s(   t dddd u r|   n|   d S )Nr      r   )r   Zcheck_versionr)  r.  r   r4   r4   r5   r    s    
zHelpGTK3.triggerN)r7   r8   r9   r  r   r)  r.  r  r4   r4   r4   r5   r  n  s
   	"r  c                   @   s   e Zd Zdd ZdS )ToolCopyToClipboardGTK3c           
      O   sH   t jtj}| j }| \}}}}t|||||}	|	|	 d S rV   )
r   Z	Clipboardgetr   ZSELECTION_CLIPBOARDr   r   Zget_geometryZpixbuf_get_from_windowZ	set_image)
r2   r   r   Z	clipboardrY   r_   rb   ru   ra   Zpbr4   r4   r5   r    s
    
zToolCopyToClipboardGTK3.triggerNr  r4   r4   r4   r5   r0    s   r0  win32zmatplotlib.pngzmatplotlib.svgr   c                 C   sd   |d ur|  }| sd }t| ts6dtt| } tj|tjj	tj
j| d}|  |  d S )N,)r   typer   Zmessage_format)r   Zis_toplevel
isinstancer   r  mapr   r*  r+  ERRORr-  r   r   rX   )msgr   r   r4   r4   r5   r     s    
r   c                   @   s   e Zd ZeZeZdS )_BackendGTK3N)r7   r8   r9   r?   ZFigureCanvasr   ZFigureManagerr4   r4   r4   r5   r9    s   r9  )N)Vr&   loggingr   pathlibr   sysr   r   r   r   r   Zmatplotlib._pylab_helpersr   Zmatplotlib.backend_basesr   r   r	   r
   r   r   Zmatplotlib.backend_toolsr   Zmatplotlib.figurer   Zmatplotlib.widgetsr   ZgiImportErrorerrZrequire_version
ValueErrorr   Zgi.repositoryr   r   r   r   r   Z_backend_gtkr   r   r   r   r   r   r   r   ZConfigureSubplotsGTK3r   ZRubberbandGTK3	getLoggerr7   _logZcaching_module_getattrr   	lru_cacher>   ZDrawingArear?   r   r  r   r   r   ZSaveFigureBaser  r:   ZSetCursorBaser  ZToolHelpBaser  ZToolCopyToClipboardBaser0  platformZicon_filenamer   r   r   r   ZToolSaveFigureZToolConfigureSubplotsZToolRubberbandZToolHelpZToolCopyToClipboardZexportr9  r4   r4   r4   r5   <module>   sd     (	

 a ^P	U

