§
    †ÛgÙ€  ã                   ó,  — d Z ddlZddlZddlZddlZddlmZ ddlZddlm	Z	 ddl
ZddlZddlmZ ddlmZmZ  G d„ dej        ¦  «        ZeZ e¦   «         ZdWd	„Zd
„ ZdZ G d„ d¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z  G d„ de¦  «        Z! G d„ de¦  «        Z" G d„ de¦  «        Z# G d „ d!e¦  «        Z$ G d"„ d#e$¦  «        Z% G d$„ d%e$¦  «        Z& G d&„ d'e¦  «        Z' G d(„ d)e¦  «        Z( G d*„ d+e(¦  «        Z) G d,„ d-e(¦  «        Z* G d.„ d/e(¦  «        Z+ G d0„ d1e¦  «        Z, G d2„ d3e¦  «        Z- G d4„ d5e¦  «        Z. G d6„ d7e.¦  «        Z/ G d8„ d9e.¦  «        Z0 G d:„ d;e¦  «        Z1 G d<„ d=e¦  «        Z2i d>e)“d?e*“d@e+“dAe/“dBe0“dCe,“dDe-“dEe!“dFe"“dGe#“dHe“dIe “dJe&“dKe%“dLe“ee'“dMe“ee1e2dNœ¥Z3dOg dP¢gdQg dR¢gdSdDdTgggZ4e3fdU„Z5e4fdV„Z6dS )XaR  
Abstract base classes define the primitives for Tools.
These tools are used by `matplotlib.backend_managers.ToolManager`

:class:`ToolBase`
    Simple stateless tool

:class:`ToolToggleBase`
    Tool that has two states, only one Toggle tool can be
    active at any given time for the same
    `matplotlib.backend_managers.ToolManager`
é    N)ÚSimpleNamespace)ÚWeakKeyDictionary)ÚGcf)Ú_apiÚcbookc                   óä   — e Zd ZdZ ej        ¦   «         Z ej        ¦   «         Z ej        ¦   «         Z ej        ¦   «         Z	 ej        ¦   «         Z
 ej        ¦   «         Z ej        ¦   «         ZdS )ÚCursorsz!Backend-independent cursor types.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚenumÚautoÚPOINTERÚHANDÚSELECT_REGIONÚMOVEÚWAITÚRESIZE_HORIZONTALÚRESIZE_VERTICAL© ó    úN/granary/edev/quantum/lib/python3.11/site-packages/matplotlib/backend_tools.pyr	   r	      sp   € € € € € Ø+Ð+ØˆdŒi‰kŒk€GØˆ4Œ9‰;Œ;€DØ�D”I‘K”K€MØˆ4Œ9‰;Œ;€DØˆ4Œ9‰;Œ;€DØ!˜œ	™œÐØ�d”i‘k”k€O€O€Or   r	   c                 óv   — |€t          j        t          | ¦  «        S t                               | |f¦  «         |S )zBDecorator registering *tool_cls* as a tool class for *canvas_cls*.)Ú	functoolsÚpartialÚ_register_tool_classÚ_tool_registryÚadd)Ú
canvas_clsÚtool_clss     r   r   r   4   s:   € àÐÝÔ Õ!5°zÑBÔBÐBÝ×Ò˜
 HÐ-Ñ.Ô.Ð.Ø€Or   c                 ój   — | j         D ]*}t          j        |¦  «        D ]}||ft          v r|c c S ŒŒ+|S )z:Find a subclass of *tool_cls* registered for *canvas_cls*.)Ú__mro__r   Úrecursive_subclassesr   )r    r!   Úcanvas_parentÚ
tool_childs       r   Ú_find_tool_classr'   <   sa   € à#Ô+ð "ð "ˆÝÔ3°HÑ=Ô=ð 	"ð 	"ˆJØ˜zÐ*­nÐ<Ð<Ø!Ð!Ð!Ð!Ð!Ð!ð =ð	"ð €Or   Úviewposc                   ó  — e Zd ZdZdZ	 dZ	 dZ	 d„ Z ed„ d¬¦  «        Z	 ed„ d¬¦  «        Z
 ed	„ d
¬¦  «        Zed„ ¦   «         Zej        d„ ¦   «         Zej        Zd„ Zdd„Z ej        dd¬¦  «        d„ ¦   «         ZdS )ÚToolBasez­
    Base tool class.

    A base tool, only implements `trigger` method or no method at all.
    The tool is instantiated by `matplotlib.backend_managers.ToolManager`.
    Nc                 ó0   — || _         || _        d | _        d S ©N)Ú_nameÚ_toolmanagerÚ_figure)ÚselfÚtoolmanagerÚnames      r   Ú__init__zToolBase.__init__j   s   € ØˆŒ
Ø'ˆÔØˆŒˆˆr   c                 ó   — | j         S r,   )r-   ©r0   s    r   ú<lambda>zToolBase.<lambda>p   s   € �T”Z€ r   z@The tool id (str, must be unique among tools of a tool manager).)Údocc                 ó   — | j         S r,   )r.   r5   s    r   r6   zToolBase.<lambda>s   s	   € �TÔ&€ r   z+The `.ToolManager` that controls this tool.c                 ó,   — | j         �| j         j        nd S r,   )r/   Úcanvasr5   s    r   r6   zToolBase.<lambda>v   s   € ¨D¬LÐ,D�T”\Ô(Ð(È$€ r   z8The canvas of the figure affected by this tool, or None.c                 ó   — | j         S )z*The Figure affected by this tool, or None.©r/   r5   s    r   ÚfigurezToolBase.figurey   s   € ð Œ|Ðr   c                 ó   — || _         d S r,   r<   ©r0   r=   s     r   r=   zToolBase.figure~   s   € àˆŒˆˆr   c                 ó,   — t          | j        ¬¦  «        S )z¿
        Return a placeholder object with a single `canvas` attribute.

        This is useful to reuse the implementations of tools already provided
        by the classic Toolbars.
        )r:   )r   r:   r5   s    r   Ú"_make_classic_style_pseudo_toolbarz+ToolBase._make_classic_style_pseudo_toolbar„   s   € õ  d¤kÐ2Ñ2Ô2Ð2r   c                 ó   — dS )at  
        Called when this tool gets used.

        This method is called by `.ToolManager.trigger_tool`.

        Parameters
        ----------
        event : `.Event`
            The canvas event that caused this tool to be called.
        sender : object
            Object that requested the tool to be triggered.
        data : object
            Extra data.
        Nr   ©r0   ÚsenderÚeventÚdatas       r   ÚtriggerzToolBase.trigger�   s	   € ð 	ˆr   z3.6Útool_removed_event)Úalternativec                 ó   — dS )za
        Destroy the tool.

        This method is called by `.ToolManager.remove_tool`.
        Nr   r5   s    r   ÚdestroyzToolBase.destroyž   s	   € ð 	ˆr   r,   )r
   r   r   r   Údefault_keymapÚdescriptionÚimager3   Úpropertyr2   r1   r:   r=   ÚsetterÚfsetÚ
set_figurerA   rG   r   Ú
deprecatedrK   r   r   r   r*   r*   I   sL  € € € € € ðð ð €Nðð €Kðð €Eððð ð ð
 ˆ8ØÐØNðPñ Pô P€Dð �(Ø&Ð&Ø9ð;ñ ;ô ;€Kð ˆXØNÐNØFðHñ Hô H€Fð ðð ñ „Xðð „]ðð ñ „]ðð ”€Jð3ð 3ð 3ðð ð ð ð" €T„_�UÐ(<Ð=Ñ=Ô=ðð ñ >Ô=ðð ð r   r*   c                   ól   ‡ — e Zd ZdZdZ	 dZ	 dZ	 ˆ fd„Zd
d„Zd
d„Z	d
d„Z
ed„ ¦   «         Zˆ fd	„Zˆ xZS )ÚToolToggleBaseac  
    Toggleable tool.

    Every time it is triggered, it switches between enable and disable.

    Parameters
    ----------
    ``*args``
        Variable length argument to be used by the Tool.
    ``**kwargs``
        `toggled` if present and True, sets the initial state of the Tool
        Arbitrary keyword arguments to be consumed by the Tool
    NFc                 óz   •— |                      d| j        ¦  «        | _         t          ¦   «         j        |i |¤Ž d S )NÚtoggled)ÚpopÚdefault_toggledÚ_toggledÚsuperr3   ©r0   ÚargsÚkwargsÚ	__class__s      €r   r3   zToolToggleBase.__init__Ä   s=   ø€ ØŸ
š
 9¨dÔ.BÑCÔCˆŒØ�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)r   c                 ó„   — | j         r|                      |¦  «         n|                      |¦  «         | j          | _         dS )z5Calls `enable` or `disable` based on `toggled` value.N)rZ   ÚdisableÚenablerC   s       r   rG   zToolToggleBase.triggerÈ   sC   € àŒ=ð 	Ø�LŠL˜ÑÔÐÐà�KŠK˜ÑÔÐØ œMÐ)ˆŒˆˆr   c                 ó   — dS )zg
        Enable the toggle tool.

        `trigger` calls this method when `toggled` is False.
        Nr   ©r0   rE   s     r   rb   zToolToggleBase.enableÐ   ó	   € ð 	ˆr   c                 ó   — dS )ay  
        Disable the toggle tool.

        `trigger` call this method when `toggled` is True.

        This can happen in different circumstances.

        * Click on the toolbar tool button.
        * Call to `matplotlib.backend_managers.ToolManager.trigger_tool`.
        * Another `ToolToggleBase` derived tool is triggered
          (from the same `.ToolManager`).
        Nr   rd   s     r   ra   zToolToggleBase.disableØ   s	   € ð 	ˆr   c                 ó   — | j         S )zState of the toggled tool.)rZ   r5   s    r   rW   zToolToggleBase.toggledç   s   € ð Œ}Ðr   c                 óð   •— | j         }|r%| j        r|                      | d ¦  «         nd| _        t	          ¦   «                              |¦  «         |r#|r|                      | d ¦  «         d S d| _        d S d S )NFT)rW   r=   rG   rZ   r[   rR   )r0   r=   rW   r_   s      €r   rR   zToolToggleBase.set_figureì   s•   ø€ Ø”,ˆØð 	&ØŒ{ð &Ø—’˜T 4Ñ(Ô(Ð(Ð(ð !&�”Ý‰Œ×Ò˜6Ñ"Ô"Ð"Øð 	%Øð %Ø—’˜T 4Ñ(Ô(Ð(Ð(Ð(ð !%�”��ð	%ð 	%r   r,   )r
   r   r   r   Úradio_groupÚcursorrY   r3   rG   rb   ra   rO   rW   rR   Ú__classcell__©r_   s   @r   rU   rU   ¨   sÐ   ø€ € € € € ðð ð €Kðð €FØ0à€OØ#ð*ð *ð *ð *ð *ð*ð *ð *ð *ðð ð ð ðð ð ð ð ðð ñ „Xðð%ð %ð %ð %ð %ð %ð %ð %ð %r   rU   c                   óD   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )ÚToolSetCursorz®
    Change to the current cursor while inaxes.

    This tool, keeps track of all `ToolToggleBase` derived tools, and updates
    the cursor when a tool gets triggered.
    c                 ó<  •—  t          ¦   «         j        |i |¤Ž d | _        d | _        t          j        | _        | j        | _        | j         	                    d| j
        ¦  «         | j        j                             ¦   «         D ]}|                      |¦  «         Œd S )NÚtool_added_event)r[   r3   Ú_id_dragÚ_current_toolÚcursorsr   Ú_default_cursorÚ_last_cursorr1   Útoolmanager_connectÚ_add_tool_cbkÚtoolsÚvaluesÚ	_add_tool)r0   r]   r^   Útoolr_   s       €r   r3   zToolSetCursor.__init__  s¬   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ØˆŒØ!ˆÔÝ&œˆÔØ Ô0ˆÔØÔ×,Ò,Ð-?Ø-1Ô-?ñ	Aô 	Að 	Að Ô$Ô*×1Ò1Ñ3Ô3ð 	!ð 	!ˆDØ�NŠN˜4Ñ Ô Ð Ð ð	!ð 	!r   c                 óè   •— | j         r| j                             | j         ¦  «         t          ¦   «                              |¦  «         |r'| j                             d| j        ¦  «        | _         d S d S ©NÚmotion_notify_event)rq   r:   Úmpl_disconnectr[   rR   Úmpl_connectÚ_set_cursor_cbk©r0   r=   r_   s     €r   rR   zToolSetCursor.set_figure  st   ø€ ØŒ=ð 	6ØŒK×&Ò& t¤}Ñ5Ô5Ð5Ý‰Œ×Ò˜6Ñ"Ô"Ð"Øð 	=Ø œK×3Ò3Ø% tÔ';ñ=ô =ˆDŒMˆMˆMð	=ð 	=r   c                 óz   — |j         j        r|j         | _        nd | _        |                      |j        ¦  «         d S r,   )r{   rW   rr   r�   Úcanvaseventrd   s     r   Ú_tool_trigger_cbkzToolSetCursor._tool_trigger_cbk  sA   € ØŒ:Ôð 	&Ø!&¤ˆDÔÐà!%ˆDÔØ×Ò˜UÔ.Ñ/Ô/Ð/Ð/Ð/r   c                 ó|   — t          |dd¦  «        �*| j                             d|j        z  | j        ¦  «         dS dS )z*Set the cursor when the tool is triggered.rj   Nztool_trigger_%s)Úgetattrr1   rv   r2   r…   )r0   r{   s     r   rz   zToolSetCursor._add_tool!  sV   € å�4˜ 4Ñ(Ô(Ð4ØÔ×0Ò0Ð1BÀTÄYÑ1NØ15Ô1GñIô Ið Ið Ið Ið 5Ð4r   c                 óP   — |j         | u rdS |                      |j         ¦  «         dS )zProcess every newly added tool.N)r{   rz   rd   s     r   rw   zToolSetCursor._add_tool_cbk'  s.   € àŒ:˜ÐÐØˆFØ�Š�u”zÑ"Ô"Ð"Ð"Ð"r   c                 ó”  — |r| j         sd S | j        rxt          |dd ¦  «        rg|j                             ¦   «         rN| j        | j        j        k    r7| j                              | j        j        ¦  «         | j        j        | _        d S d S | j        | j        k    r-| j                              | j        ¦  «         | j        | _        d S d S )NÚinaxes)	r:   rr   r‡   rŠ   Úget_navigateru   rj   Ú
set_cursorrt   rd   s     r   r�   zToolSetCursor._set_cursor_cbk-  sÝ   € Øð 	˜DœKð 	ØˆFØÔð 	5¥7¨5°(¸DÑ#AÔ#Að 	5Ø”L×-Ò-Ñ/Ô/ð	5àÔ  DÔ$6Ô$=Ò=Ð=Ø”×&Ò& tÔ'9Ô'@ÑAÔAÐAØ$(Ô$6Ô$=�Ô!Ð!Ð!ð >Ð=ð Ô $Ô"6Ò6Ð6ØŒK×"Ò" 4Ô#7Ñ8Ô8Ð8Ø $Ô 4ˆDÔÐÐð 7Ð6r   )r
   r   r   r   r3   rR   r…   rz   rw   r�   rk   rl   s   @r   rn   rn   ÿ   sš   ø€ € € € € ðð ð
!ð 
!ð 
!ð 
!ð 
!ð=ð =ð =ð =ð =ð0ð 0ð 0ðIð Ið Ið#ð #ð #ð
5ð 
5ð 
5ð 
5ð 
5ð 
5ð 
5r   rn   c                   ó2   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zd„ Zˆ xZS )ÚToolCursorPositionz…
    Send message with the current pointer position.

    This tool runs in the background reporting the position of the cursor.
    c                 óH   •— d | _          t          ¦   «         j        |i |¤Ž d S r,   )rq   r[   r3   r\   s      €r   r3   zToolCursorPosition.__init__@  s,   ø€ ØˆŒØ�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)r   c                 óè   •— | j         r| j                             | j         ¦  «         t          ¦   «                              |¦  «         |r'| j                             d| j        ¦  «        | _         d S d S r}   )rq   r:   r   r[   rR   r€   Úsend_messager‚   s     €r   rR   zToolCursorPosition.set_figureD  st   ø€ ØŒ=ð 	6ØŒK×&Ò& t¤}Ñ5Ô5Ð5Ý‰Œ×Ò˜6Ñ"Ô"Ð"Øð 	:Ø œK×3Ò3Ø% tÔ'8ñ:ô :ˆDŒMˆMˆMð	:ð 	:r   c                 ó²   — | j         j                             ¦   «         rdS ddlm} |                     |¦  «        }| j                              || ¦  «         dS )z=Call `matplotlib.backend_managers.ToolManager.message_event`.Nr   )ÚNavigationToolbar2)r1   ÚmessagelockÚlockedÚmatplotlib.backend_basesr“   Ú_mouse_event_to_messageÚmessage_event)r0   rE   r“   Úmessages       r   r‘   zToolCursorPosition.send_messageL  se   € àÔÔ'×.Ò.Ñ0Ô0ð 	ØˆFà?Ð?Ð?Ð?Ð?Ð?Ø$×<Ò<¸UÑCÔCˆØÔ×&Ò& w°Ñ5Ô5Ð5Ð5Ð5r   )r
   r   r   r   r3   rR   r‘   rk   rl   s   @r   rŽ   rŽ   :  sj   ø€ € € € € ðð ð
*ð *ð *ð *ð *ð:ð :ð :ð :ð :ð6ð 6ð 6ð 6ð 6ð 6ð 6r   rŽ   c                   ó&   — e Zd ZdZdd„Zd„ Zd„ ZdS )ÚRubberbandBasezDraw and remove a rubberband.Nc                 ó–   — | j         j        j                             |¦  «        sdS |� | j        |Ž  dS |                      ¦   «          dS )z<Call `draw_rubberband` or `remove_rubberband` based on data.N)r=   r:   Ú
widgetlockÚ	availableÚdraw_rubberbandÚremove_rubberbandrC   s       r   rG   zRubberbandBase.triggerX  sY   € àŒ{Ô!Ô,×6Ò6°vÑ>Ô>ð 	ØˆFØÐØ ˆDÔ  $Ð'Ð'Ð'Ð'à×"Ò"Ñ$Ô$Ð$Ð$Ð$r   c                 ó   — t           ‚)zY
        Draw rubberband.

        This method must get implemented per backend.
        )ÚNotImplementedError)r0   rF   s     r   rŸ   zRubberbandBase.draw_rubberbanda  s
   € õ "Ð!r   c                 ó   — dS )z]
        Remove rubberband.

        This method should get implemented per backend.
        Nr   r5   s    r   r    z RubberbandBase.remove_rubberbandi  re   r   r,   )r
   r   r   r   rG   rŸ   r    r   r   r   r›   r›   V  sL   € € € € € Ø'Ð'ð%ð %ð %ð %ð"ð "ð "ðð ð ð ð r   r›   c                   ó6   — e Zd ZdZdZ ed„ ¦  «        Zdd„ZdS )ÚToolQuitú/Tool to call the figure manager destroy method.zQuit the figurec                 ó&   — t           j        d         S )Nzkeymap.quit©ÚmplÚrcParamsr5   s    r   r6   zToolQuit.<lambda>v  ó   € ­3¬<¸Ô+F€ r   Nc                 ó8   — t          j        | j        ¦  «         d S r,   )r   Údestroy_figr=   rC   s       r   rG   zToolQuit.triggerx  s   € ÝŒ˜œÑ$Ô$Ð$Ð$Ð$r   r,   ©r
   r   r   r   rM   rO   rL   rG   r   r   r   r¥   r¥   r  sF   € € € € € Ø9Ð9à#€KØ�XÐFÐFÑGÔG€Nð%ð %ð %ð %ð %ð %r   r¥   c                   ó6   — e Zd ZdZdZ ed„ ¦  «        Zdd„ZdS )ÚToolQuitAllr¦   zQuit all figuresc                 ó&   — t           j        d         S )Nzkeymap.quit_allr¨   r5   s    r   r6   zToolQuitAll.<lambda>€  s   € ­3¬<Ð8IÔ+J€ r   Nc                 ó,   — t          j        ¦   «          d S r,   )r   Údestroy_allrC   s       r   rG   zToolQuitAll.trigger‚  s   € ÝŒÑÔÐÐÐr   r,   r®   r   r   r   r°   r°   |  sF   € € € € € Ø9Ð9à$€KØ�XÐJÐJÑKÔK€Nðð ð ð ð ð r   r°   c                   ó6   — e Zd ZdZdZ ed„ ¦  «        Zdd„ZdS )ÚToolGridz-Tool to toggle the major grids of the figure.zToggle major gridsc                 ó&   — t           j        d         S )Núkeymap.gridr¨   r5   s    r   r6   zToolGrid.<lambda>Š  r«   r   Nc                 óT  — t          t          j        ¦   «         ¦  «        }t          j        ||¬¦  «        5  t          j        d|i¦  «        5  t
          j                             || j	        j
        ¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )N©Úkeyr·   ©ÚstrÚuuidÚuuid4r   Ú_setattr_cmr©   Ú
rc_contextÚbackend_basesÚkey_press_handlerr=   r:   ©r0   rD   rE   rF   Úsentinels        r   rG   zToolGrid.triggerŒ  s>  € Ý•t”z‘|”|Ñ$Ô$ˆõ Ô˜u¨(Ð3Ñ3Ô3ð 	Kð 	KÝŒ^˜]¨HÐ5Ñ6Ô6ð	Kð 	KåÔ×/Ò/°°t´{Ô7IÑJÔJÐJð	Kð 	Kð 	Kñ 	Kô 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Køøøð 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Kñ 	Kô 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Køøøð 	Kð 	Kð 	Kð 	Kð 	Kð 	Kó5   ·BÁ+BÁ9BÂB		Â	BÂB		ÂBÂB!Â$B!r,   r®   r   r   r   rµ   rµ   †  sL   € € € € € Ø7Ð7à&€KØ�XÐFÐFÑGÔG€NðKð Kð Kð Kð Kð Kr   rµ   c                   ó6   — e Zd ZdZdZ ed„ ¦  «        Zdd„ZdS )ÚToolMinorGridz7Tool to toggle the major and minor grids of the figure.zToggle major and minor gridsc                 ó&   — t           j        d         S )Núkeymap.grid_minorr¨   r5   s    r   r6   zToolMinorGrid.<lambda>™  ó   € ­3¬<Ð8KÔ+L€ r   Nc                 óT  — t          t          j        ¦   «         ¦  «        }t          j        ||¬¦  «        5  t          j        d|i¦  «        5  t
          j                             || j	        j
        ¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )Nr¹   rÉ   r»   rÃ   s        r   rG   zToolMinorGrid.trigger›  s?  € Ý•t”z‘|”|Ñ$Ô$ˆõ Ô˜u¨(Ð3Ñ3Ô3ð 	Kð 	KÝŒ^Ð0°(Ð;Ñ<Ô<ð	Kð 	KåÔ×/Ò/°°t´{Ô7IÑJÔJÐJð	Kð 	Kð 	Kñ 	Kô 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Køøøð 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Kñ 	Kô 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Køøøð 	Kð 	Kð 	Kð 	Kð 	Kð 	KrÅ   r,   r®   r   r   r   rÇ   rÇ   •  sL   € € € € € ØAÐAà0€KØ�XÐLÐLÑMÔM€NðKð Kð Kð Kð Kð Kr   rÇ   c                   ó6   — e Zd ZdZdZ ed„ ¦  «        Zdd„ZdS )ÚToolFullScreenzTool to toggle full screen.zToggle fullscreen modec                 ó&   — t           j        d         S )Nzkeymap.fullscreenr¨   r5   s    r   r6   zToolFullScreen.<lambda>¨  rÊ   r   Nc                 óL   — | j         j        j                             ¦   «          d S r,   )r=   r:   ÚmanagerÚfull_screen_togglerC   s       r   rG   zToolFullScreen.triggerª  s"   € ØŒÔÔ"×5Ò5Ñ7Ô7Ð7Ð7Ð7r   r,   r®   r   r   r   rÍ   rÍ   ¤  sF   € € € € € Ø%Ð%à*€KØ�XÐLÐLÑMÔM€Nð8ð 8ð 8ð 8ð 8ð 8r   rÍ   c                   ó4   ‡ — e Zd ZdZdˆ fd„	Zdd„Zdd„Zˆ xZS )ÚAxisScaleBasez3Base Tool to toggle between linear and logarithmic.Nc                 ó`   •— |j         €d S t          ¦   «                              |||¦  «         d S r,   )rŠ   r[   rG   )r0   rD   rE   rF   r_   s       €r   rG   zAxisScaleBase.trigger±  s0   ø€ ØŒ<ÐØˆFÝ‰Œ�Š˜  tÑ,Ô,Ð,Ð,Ð,r   c                 óx   — |                       |j        d¦  «         | j        j                             ¦   «          d S )NÚlog©Ú	set_scalerŠ   r=   r:   Ú	draw_idlerd   s     r   rb   zAxisScaleBase.enable¶  s5   € Ø�Š�u”| UÑ+Ô+Ð+ØŒÔ×$Ò$Ñ&Ô&Ð&Ð&Ð&r   c                 óx   — |                       |j        d¦  «         | j        j                             ¦   «          d S )NÚlinearr×   rd   s     r   ra   zAxisScaleBase.disableº  s5   € Ø�Š�u”| XÑ.Ô.Ð.ØŒÔ×$Ò$Ñ&Ô&Ð&Ð&Ð&r   r,   )r
   r   r   r   rG   rb   ra   rk   rl   s   @r   rÓ   rÓ   ®  sk   ø€ € € € € Ø=Ð=ð-ð -ð -ð -ð -ð -ð
'ð 'ð 'ð 'ð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r   rÓ   c                   ó4   — e Zd ZdZdZ ed„ ¦  «        Zd„ ZdS )Ú
ToolYScalezCTool to toggle between linear and logarithmic scales on the Y axis.zToggle scale Y axisc                 ó&   — t           j        d         S )Nzkeymap.yscaler¨   r5   s    r   r6   zToolYScale.<lambda>Ã  ó   € ­3¬<¸Ô+H€ r   c                 ó0   — |                      |¦  «         d S r,   )Ú
set_yscale©r0   ÚaxÚscales      r   rØ   zToolYScale.set_scaleÅ  ó   € Ø
�Š�eÑÔÐÐÐr   N©r
   r   r   r   rM   rO   rL   rØ   r   r   r   rÝ   rÝ   ¿  óA   € € € € € ØMÐMà'€KØ�XÐHÐHÑIÔI€Nðð ð ð ð r   rÝ   c                   ó4   — e Zd ZdZdZ ed„ ¦  «        Zd„ ZdS )Ú
ToolXScalezCTool to toggle between linear and logarithmic scales on the X axis.zToggle scale X axisc                 ó&   — t           j        d         S )Nzkeymap.xscaler¨   r5   s    r   r6   zToolXScale.<lambda>Í  rß   r   c                 ó0   — |                      |¦  «         d S r,   )Ú
set_xscalerâ   s      r   rØ   zToolXScale.set_scaleÏ  rå   r   Nræ   r   r   r   ré   ré   É  rç   r   ré   c                   ó\   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zdd„Zd„ Z	dd	„Z
d
„ Zd„ Zd„ Zˆ xZS )ÚToolViewsPositionsa%  
    Auxiliary Tool to handle changes in views and positions.

    Runs in the background and should get used by all the tools that
    need to access the figure's history of views and positions, e.g.

    * `ToolZoom`
    * `ToolPan`
    * `ToolHome`
    * `ToolBack`
    * `ToolForward`
    c                 ó¬   •— t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _         t	          ¦   «         j        |i |¤Ž d S r,   )r   ÚviewsÚ	positionsÚ
home_viewsr[   r3   r\   s      €r   r3   zToolViewsPositions.__init__á  sL   ø€ Ý&Ñ(Ô(ˆŒ
Ý*Ñ,Ô,ˆŒÝ+Ñ-Ô-ˆŒØ�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)r   c                 ó  ‡ — |‰ j         vr{t          j        ¦   «         ‰ j         |<   t          j        ¦   «         ‰ j        |<   t	          ¦   «         ‰ j        |<   ‰                      |¦  «         |                     ˆ fd„¦  «         dS dS )z;Add the current figure to the stack of views and positions.c                 ó.   •— ‰                      | ¦  «        S r,   )Úupdate_home_views)Úfigr0   s    €r   r6   z/ToolViewsPositions.add_figure.<locals>.<lambda>ñ  s   ø€ ¨d×.DÒ.DÀSÑ.IÔ.I€ r   N)rð   r   ÚStackrñ   r   rò   Úpush_currentÚadd_axobserverr?   s   ` r   Ú
add_figurezToolViewsPositions.add_figureç  sˆ   ø€ ð ˜œÐ#Ð#Ý!&¤¡¤ˆDŒJ�vÑÝ%*¤[¡]¤]ˆDŒN˜6Ñ"Ý&7Ñ&9Ô&9ˆDŒO˜FÑ#à×Ò˜fÑ%Ô%Ð%à×!Ò!Ð"IÐ"IÐ"IÐ"IÑJÔJÐJÐJÐJð $Ð#r   c                 óþ   — || j         v rs| j         |                              ¦   «          | j        |                              ¦   «          | j        |                              ¦   «          |                      ¦   «          dS dS )zReset the axes stack.N)rð   Úclearrñ   rò   rõ   r?   s     r   rü   zToolViewsPositions.clearó  sz   € à�T”ZÐÐØŒJ�vÔ×$Ò$Ñ&Ô&Ð&ØŒN˜6Ô"×(Ò(Ñ*Ô*Ð*ØŒO˜FÔ#×)Ò)Ñ+Ô+Ð+Ø×"Ò"Ñ$Ô$Ð$Ð$Ð$ð	  Ðr   c                 óD  —  | j         | j                 ¦   «         }|€dS  | j        | j                 ¦   «         }|€dS | j        | j                 }| j                             ¦   «         }|D ],}||v r	||         }n||         }|                     |¦  «         Œ-t          |¦  «                             |¦  «        rI|D ]F}|                     ||         d         d¦  «         |                     ||         d         d¦  «         ŒG| j        j	         
                    ¦   «          dS )a  
        Update the view limits and position for each axes from the current
        stack position. If any axes are present in the figure that aren't in
        the current stack position, use the home view limits for those axes and
        don't update *any* positions.
        Nr   Úoriginalé   Úactive)rð   r=   rñ   rò   Úget_axesÚ	_set_viewÚsetÚissubsetÚ_set_positionr:   rÙ   )r0   rð   Úposrò   Úall_axesÚaÚcur_views          r   Úupdate_viewzToolViewsPositions.update_viewû  s)  € ð (�”
˜4œ;Ô'Ñ)Ô)ˆØˆ=ØˆFØ)ˆdŒn˜Tœ[Ô)Ñ+Ô+ˆØˆ;ØˆFØ”_ T¤[Ô1ˆ
Ø”;×'Ò'Ñ)Ô)ˆØð 	"ð 	"ˆAØ�EˆzˆzØ  œ8��à% aœ=�Ø�KŠK˜Ñ!Ô!Ð!Ð!åˆx‰=Œ=×!Ò! #Ñ&Ô&ð 	5Øð 5ð 5�à—’  A¤ q¤	¨:Ñ6Ô6Ð6Ø—’  A¤ q¤	¨8Ñ4Ô4Ð4Ð4àŒÔ×$Ò$Ñ&Ô&Ð&Ð&Ð&r   Nc                 ó\  — |s| j         }t          ¦   «         }t          ¦   «         }|                     ¦   «         D ]1}|                     ¦   «         ||<   |                      |¦  «        ||<   Œ2| j        |                              |¦  «         | j        |                              |¦  «         dS )zY
        Push the current view limits and position onto their respective stacks.
        N)r=   r   r  Ú	_get_viewÚ	_axes_posrð   Úpushrñ   )r0   r=   rð   r  r  s        r   rø   zToolViewsPositions.push_current  s¦   € ð ð 	!Ø”[ˆFÝ!Ñ#Ô#ˆÝÑ!Ô!ˆØ—’Ñ"Ô"ð 	'ð 	'ˆAØ—{’{‘}”}ˆE�!‰HØ—^’^ AÑ&Ô&ˆC�‰FˆFØŒ
�6Ô×Ò Ñ&Ô&Ð&ØŒ�vÔ×#Ò# CÑ(Ô(Ð(Ð(Ð(r   c                 óœ   — |                      d¦  «                             ¦   «         |                      ¦   «                              ¦   «         fS )aY  
        Return the original and modified positions for the specified axes.

        Parameters
        ----------
        ax : matplotlib.axes.Axes
            The `.Axes` to get the positions for.

        Returns
        -------
        original_position, modified_position
            A tuple of the original and modified positions.
        T)Úget_positionÚfrozen)r0   rã   s     r   r  zToolViewsPositions._axes_pos(  sB   € ð —’ Ñ%Ô%×,Ò,Ñ.Ô.Ø—’Ñ!Ô!×(Ò(Ñ*Ô*ð,ð 	,r   c                 ó¨   — |s| j         }|                     ¦   «         D ]3}|| j        |         vr"|                     ¦   «         | j        |         |<   Œ4dS )zm
        Make sure that ``self.home_views`` has an entry for all axes present
        in the figure.
        N)r=   r  rò   r  )r0   r=   r  s      r   rõ   z$ToolViewsPositions.update_home_views:  sb   € ð ð 	!Ø”[ˆFØ—’Ñ"Ô"ð 	;ð 	;ˆAØ˜œ¨Ô/Ð/Ð/Ø-.¯[ª[©]¬]�” Ô'¨Ñ*øð	;ð 	;r   c                 ó–   — | j         | j                                      ¦   «          | j        | j                                      ¦   «          dS )z2Recall the first view and position from the stack.N)rð   r=   Úhomerñ   r5   s    r   r  zToolViewsPositions.homeF  ó>   € àŒ
�4”;Ô×$Ò$Ñ&Ô&Ð&ØŒ�t”{Ô#×(Ò(Ñ*Ô*Ð*Ð*Ð*r   c                 ó–   — | j         | j                                      ¦   «          | j        | j                                      ¦   «          dS )z2Back one step in the stack of views and positions.N)rð   r=   Úbackrñ   r5   s    r   r  zToolViewsPositions.backK  r  r   c                 ó–   — | j         | j                                      ¦   «          | j        | j                                      ¦   «          dS )z5Forward one step in the stack of views and positions.N)rð   r=   Úforwardrñ   r5   s    r   r  zToolViewsPositions.forwardP  s>   € àŒ
�4”;Ô×'Ò'Ñ)Ô)Ð)ØŒ�t”{Ô#×+Ò+Ñ-Ô-Ð-Ð-Ð-r   r,   )r
   r   r   r   r3   rú   rü   r
  rø   r  rõ   r  r  r  rk   rl   s   @r   rî   rî   Ó  sÖ   ø€ € € € € ðð ð*ð *ð *ð *ð *ð
Kð 
Kð 
Kð%ð %ð %ð'ð 'ð 'ð>)ð )ð )ð )ð,ð ,ð ,ð$
;ð 
;ð 
;ð 
;ð+ð +ð +ð
+ð +ð +ð
.ð .ð .ð .ð .ð .ð .r   rî   c                   ó   — e Zd ZdZdZdd„ZdS )ÚViewsPositionsBasez8Base class for `ToolHome`, `ToolBack` and `ToolForward`.Nc                 óJ  — | j                              t          ¦  «                             | j        ¦  «          t          | j                              t          ¦  «        | j        ¦  «        ¦   «          | j                              t          ¦  «                             ¦   «          d S r,   )r1   Úget_toolÚ_views_positionsrú   r=   r‡   Ú_on_triggerr
  rC   s       r   rG   zViewsPositionsBase.trigger[  sŽ   € ØÔ×!Ò!Õ"2Ñ3Ô3×>Ò>¸t¼{ÑKÔKÐKð	"��Ô ×)Ò)Õ*:Ñ;Ô;ØÔ ñ	"ô 	"ñ 	$ô 	$ð 	$àÔ×!Ò!Õ"2Ñ3Ô3×?Ò?ÑAÔAÐAÐAÐAr   r,   )r
   r   r   r   r  rG   r   r   r   r  r  V  s9   € € € € € ØBÐBà€KðBð Bð Bð Bð Bð Br   r  c                   ó6   — e Zd ZdZdZdZ ed„ ¦  «        ZdZdS )ÚToolHomez!Restore the original view limits.zReset original viewr  c                 ó&   — t           j        d         S )Nzkeymap.homer¨   r5   s    r   r6   zToolHome.<lambda>g  r«   r   N©	r
   r   r   r   rM   rN   rO   rL   r  r   r   r   r!  r!  b  s6   € € € € € Ø+Ð+à'€KØ€EØ�XÐFÐFÑGÔG€NØ€K€K€Kr   r!  c                   ó6   — e Zd ZdZdZdZ ed„ ¦  «        ZdZdS )ÚToolBackz#Move back up the view limits stack.zBack to previous viewr  c                 ó&   — t           j        d         S )Nzkeymap.backr¨   r5   s    r   r6   zToolBack.<lambda>p  r«   r   Nr#  r   r   r   r%  r%  k  s6   € € € € € Ø-Ð-à)€KØ€EØ�XÐFÐFÑGÔG€NØ€K€K€Kr   r%  c                   ó6   — e Zd ZdZdZdZ ed„ ¦  «        ZdZdS )ÚToolForwardz#Move forward in the view lim stack.zForward to next viewr  c                 ó&   — t           j        d         S )Nzkeymap.forwardr¨   r5   s    r   r6   zToolForward.<lambda>y  s   € ­3¬<Ð8HÔ+I€ r   Nr#  r   r   r   r(  r(  t  s6   € € € € € Ø-Ð-à(€KØ€EØ�XÐIÐIÑJÔJ€NØ€K€K€Kr   r(  c                   ó   — e Zd ZdZdZdZdS )ÚConfigureSubplotsBasez,Base tool for the configuration of subplots.zConfigure subplotsÚsubplotsN)r
   r   r   r   rM   rN   r   r   r   r+  r+  }  s   € € € € € Ø6Ð6à&€KØ€E€E€Er   r+  c                   ó2   — e Zd ZdZdZdZ ed„ ¦  «        ZdS )ÚSaveFigureBasezBase tool for figure saving.zSave the figureÚfilesavec                 ó&   — t           j        d         S )Nzkeymap.saver¨   r5   s    r   r6   zSaveFigureBase.<lambda>‰  r«   r   N)r
   r   r   r   rM   rN   rO   rL   r   r   r   r.  r.  „  s1   € € € € € Ø&Ð&à#€KØ€EØ�XÐFÐFÑGÔG€N€N€Nr   r.  c                   óD   ‡ — e Zd ZdZˆ fd„Zdd„Zdd„Zdˆ fd„	Zd„ Zˆ xZ	S )	ÚZoomPanBasez(Base class for `ToolZoom` and `ToolPan`.c                 óÖ   •—  t          ¦   «         j        |Ž  d | _        d | _        d | _        d | _        d | _        d| _        d| _        t          j	        ¦   «         | j        z
  | _
        d S )Ng       @g      à?)r[   r3   Ú_button_pressedÚ_xypressÚ_idPressÚ
_idReleaseÚ	_idScrollÚ
base_scaleÚscrollthreshÚtimeÚ
lastscroll©r0   r]   r_   s     €r   r3   zZoomPanBase.__init__Ž  sc   ø€ Ø�‰ŒÔ˜$ÐÐØ#ˆÔØˆŒØˆŒØˆŒØˆŒØˆŒØˆÔÝœ)™+œ+ dÔ&7Ñ7ˆŒˆˆr   Nc                 ó@  — | j         j                             | ¦  «         | j         j                             d| j        ¦  «        | _        | j         j                             d| j        ¦  «        | _        | j         j                             d| j        ¦  «        | _	        dS )z1Connect press/release events and lock the canvas.Úbutton_press_eventÚbutton_release_eventÚscroll_eventN)
r=   r:   r�   r€   Ú_pressr6  Ú_releaser7  Úscroll_zoomr8  rd   s     r   rb   zZoomPanBase.enable™  s‰   € àŒÔ×%Ò% dÑ+Ô+Ð+ØœÔ*×6Ò6Ø  $¤+ñ/ô /ˆŒàœ+Ô,×8Ò8Ø" D¤Mñ3ô 3ˆŒàœÔ+×7Ò7Ø˜DÔ,ñ.ô .ˆŒˆˆr   c                 óN  — |                       ¦   «          | j        j        j                             | ¦  «         | j        j                             | j        ¦  «         | j        j                             | j        ¦  «         | j        j                             | j        ¦  «         dS )z7Release the canvas and disconnect press/release events.N)	Ú_cancel_actionr=   r:   r�   Úreleaser   r6  r7  r8  rd   s     r   ra   zZoomPanBase.disable£  s‡   € à×ÒÑÔÐØŒÔÔ%×-Ò-¨dÑ3Ô3Ð3ØŒÔ×)Ò)¨$¬-Ñ8Ô8Ð8ØŒÔ×)Ò)¨$¬/Ñ:Ô:Ð:ØŒÔ×)Ò)¨$¬.Ñ9Ô9Ð9Ð9Ð9r   c                 óH  •— | j                              t          ¦  «                             | j        ¦  «         t          ¦   «                              |||¦  «         | j        r| j         	                    ¦   «         nd }| j        j
        D ]}|                     |¦  «         Œd S r,   )r1   r  r  rú   r=   r[   rG   rW   r2   ÚupperÚaxesÚset_navigate_mode)r0   rD   rE   rF   Únew_navigate_moderã   r_   s         €r   rG   zZoomPanBase.trigger«  s™   ø€ ØÔ×!Ò!Õ"2Ñ3Ô3×>Ò>¸t¼{ÑKÔKÐKÝ‰Œ�Š˜  tÑ,Ô,Ð,Ø15´ÐG˜DœIŸOšOÑ-Ô-Ð-À4ÐØ”+Ô"ð 	4ð 	4ˆBØ× Ò Ð!2Ñ3Ô3Ð3Ð3ð	4ð 	4r   c                 ó8  — |j         €d S |j        dk    r| j        }n|j        dk    rd| j        z  }nd}|j         }|                     |j        |j        |g¦  «         t          j        ¦   «         | j        z
  | j        k     r1| j	         
                    t          ¦  «                             ¦   «          | j        j                             ¦   «          t          j        ¦   «         | _        | j	         
                    t          ¦  «                             ¦   «          d S )NÚupÚdownrÿ   )rŠ   Úbuttonr9  Ú_set_view_from_bboxÚxÚyr;  r<  r:  r1   r  r  r  r=   r:   rÙ   rø   )r0   rE   Úsclrã   s       r   rD  zZoomPanBase.scroll_zoom²  sü   € àŒ<ÐØˆFàŒ<˜4ÒÐà”/ˆCˆCØŒ\˜VÒ#Ð#à�D”OÑ#ˆCˆCð ˆCàŒ\ˆØ
×Ò ¤¨¬°#Ð6Ñ7Ô7Ð7õ ŒI‰KŒK˜œÑ'¨4Ô+<Ò<Ð<ØÔ×%Ò%Õ&6Ñ7Ô7×<Ò<Ñ>Ô>Ð>àŒÔ×$Ò$Ñ&Ô&Ð&åœ)™+œ+ˆŒØÔ×!Ò!Õ"2Ñ3Ô3×@Ò@ÑBÔBÐBÐBÐBr   r,   )
r
   r   r   r   r3   rb   ra   rG   rD  rk   rl   s   @r   r2  r2  Œ  sš   ø€ € € € € Ø2Ð2ð	8ð 	8ð 	8ð 	8ð 	8ð.ð .ð .ð .ð:ð :ð :ð :ð4ð 4ð 4ð 4ð 4ð 4ðCð Cð Cð Cð Cð Cð Cr   r2  c                   óx   ‡ — e Zd ZdZdZdZ ed„ ¦  «        Zej	        Z
dZˆ fd„Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zˆ xZS )ÚToolZoomz.A Tool for zooming using a rectangle selector.zZoom to rectangleÚzoom_to_rectc                 ó&   — t           j        d         S )Nzkeymap.zoomr¨   r5   s    r   r6   zToolZoom.<lambda>Ô  r«   r   Údefaultc                 óB   •—  t          ¦   «         j        |Ž  g | _        d S r,   )r[   r3   Ú	_ids_zoomr=  s     €r   r3   zToolZoom.__init__Ø  s"   ø€ Ø�‰ŒÔ˜$ÐÐØˆŒˆˆr   c                 óô   — | j         D ]!}| j        j                             |¦  «         Œ"| j                             d| ¦  «         | j        j                             ¦   «          d | _        d | _        g | _         d S )NÚ
rubberband)	r[  r=   r:   r   r1   Útrigger_toolrÙ   r5  r4  )r0   Úzoom_ids     r   rF  zToolZoom._cancel_actionÜ  sz   € Ø”~ð 	7ð 	7ˆGØŒKÔ×-Ò-¨gÑ6Ô6Ð6Ð6ØÔ×%Ò% l°DÑ9Ô9Ð9ØŒÔ×$Ò$Ñ&Ô&Ð&ØˆŒØ#ˆÔØˆŒØˆr   c           	      ó$  — | j         r|                      ¦   «          |j        dk    rd| _        n)|j        dk    rd| _        n|                      ¦   «          dS |j        |j        }}g | _        t          | j         	                    ¦   «         ¦  «        D ]w\  }}|�p|�n| 
                    |¦  «        rY|                     ¦   «         rE|                     ¦   «         r1| j                             |||||                     ¦   «         f¦  «         Œx| j        j                             d| j        ¦  «        }| j        j                             d| j        ¦  «        }| j        j                             d| j        ¦  «        }|||f| _         |j        | _        dS )z<Callback for mouse button presses in zoom-to-rectangle mode.rÿ   é   Nr~   Úkey_press_eventÚkey_release_event)r[  rF  rP  r4  rR  rS  r5  Ú	enumerater=   r  Úin_axesr‹   Úcan_zoomÚappendr  r:   r€   Ú_mouse_moveÚ_switch_on_zoom_modeÚ_switch_off_zoom_moderº   Ú
_zoom_mode)	r0   rE   rR  rS  Úir  Úid1Úid2Úid3s	            r   rB  zToolZoom._pressæ  s�  € ð
 Œ>ð 	"Ø×ÒÑ!Ô!Ð!àŒ<˜1ÒÐØ#$ˆDÔ Ð ØŒ\˜QÒÐØ#$ˆDÔ Ð à×ÒÑ!Ô!Ð!ØˆFàŒw˜œˆ1ˆàˆŒÝ˜dœk×2Ò2Ñ4Ô4Ñ5Ô5ð 	Bð 	B‰DˆAˆqØ� ! -°A·I²I¸eÑ4DÔ4D -Ø—N’NÑ$Ô$ð #0Ø)*¯ª©¬ð #0à”×$Ò$ a¨¨A¨q°!·+²+±-´-Ð%@ÑAÔAÐAøàŒkÔ ×,Ò,Ø! 4Ô#3ñ5ô 5ˆàŒkÔ ×,Ò,Ø˜tÔ8ñ:ô :ˆàŒkÔ ×,Ò,Ø Ô!;ñ=ô =ˆð ˜c 3˜ˆŒØœ)ˆŒˆˆr   c                 óH   — |j         | _        |                      |¦  «         d S r,   )rº   rk  rh  rd   s     r   ri  zToolZoom._switch_on_zoom_mode  s%   € Øœ)ˆŒØ×Ò˜ÑÔÐÐÐr   c                 ó>   — d | _         |                      |¦  «         d S r,   )rk  rh  rd   s     r   rj  zToolZoom._switch_off_zoom_mode  s#   € ØˆŒØ×Ò˜ÑÔÐÐÐr   c                 óx  — | j         r²|j        |j        }}| j         d         \  }}}}}t          j        ||g||gg|j        j        |j        j        ¦  «        \  \  }	}
\  }}| j        dk    r|j        j	        \  }
}n| j        dk    r|j        j
        \  }	}| j                             d| |	|
||f¬¦  «         dS dS )z3Callback for mouse moves in zoom-to-rectangle mode.r   rR  rS  r]  )rF   N)r5  rR  rS  ÚnpÚclipÚbboxÚminÚmaxrk  Ú	intervalyÚ	intervalxr1   r^  )r0   rE   rR  rS  ÚlastxÚlastyr  ÚindÚviewÚx1Úy1Úx2Úy2s                r   rh  zToolZoom._mouse_move  sê   € ð Œ=ð 
	;Ø”7˜EœGˆqˆAØ)-¬°qÔ)9Ñ&ˆE�5˜!˜S $Ý!#¤Ø˜� ! Q Ð(¨!¬&¬*°a´f´jñ"Bô "BÑ‰HˆR�‘h�r˜2àŒ #Ò%Ð%ØœÔ)‘��B�BØ” CÒ'Ð'ØœÔ)‘��BØÔ×)Ò)Ø˜d¨"¨b°"°bÐ)9ð *ñ ;ô ;ð ;ð ;ð ;ð
	;ð 
	;r   c                 ó  ‡— | j         D ]!}| j        j                             |¦  «         Œ"g | _         | j        s|                      ¦   «          dS g }| j        D ]å}|j        |j        }}|\  }}Š}	}
t          ||z
  ¦  «        dk     st          ||z
  ¦  «        dk     r|                      ¦   «           dS t          ˆfd„|D ¦   «         ¦  «        }t          ˆfd„|D ¦   «         ¦  «        }| 
                    ‰¦  «         | j        dk    rd}n| j        dk    rd}nŒÃ‰                     ||||f|| j        ||¦  «         Œæd| _        | j                             t           ¦  «                             ¦   «          |                      ¦   «          dS )	z=Callback for mouse button releases in zoom-to-rectangle mode.Né   c              3   óh   •K  — | ],}‰                      ¦   «                              ‰|¦  «        V — Œ-d S r,   )Úget_shared_x_axesÚjoined©Ú.0Úa1r  s     €r   ú	<genexpr>z$ToolZoom._release.<locals>.<genexpr>5  ó?   øè è € ÐNÐNÀ˜×+Ò+Ñ-Ô-×4Ò4°Q¸Ñ;Ô;ÐNÐNÐNÐNÐNÐNr   c              3   óh   •K  — | ],}‰                      ¦   «                              ‰|¦  «        V — Œ-d S r,   )Úget_shared_y_axesr†  r‡  s     €r   rŠ  z$ToolZoom._release.<locals>.<genexpr>6  r‹  r   rÿ   Úinra  Úout)r[  r=   r:   r   r5  rF  rR  rS  ÚabsÚanyrg  r4  rQ  rk  r1   r  r  rø   )r0   rE   r_  Údone_axÚcur_xypressrR  rS  rz  r{  Ú_indr}  ÚtwinxÚtwinyÚ	directionr  s                 @r   rC  zToolZoom._release  sÒ  ø€ ð ”~ð 	7ð 	7ˆGØŒKÔ×-Ò-¨gÑ6Ô6Ð6Ð6ØˆŒàŒ}ð 	Ø×ÒÑ!Ô!Ð!ØˆFàˆàœ=ð 	Að 	AˆKØ”7˜EœGˆqˆAØ*5Ñ'ˆE�5˜!˜T 4å�1�u‘9‰~Œ~ Ò!Ð!¥S¨¨U©¡^¤^°aÒ%7Ð%7Ø×#Ò#Ñ%Ô%Ð%Ø��õ ÐNÐNÐNÐNÀgÐNÑNÔNÑNÔNˆEÝÐNÐNÐNÐNÀgÐNÑNÔNÑNÔNˆEØ�NŠN˜1ÑÔÐàÔ# qÒ(Ð(Ø �	�	ØÔ%¨Ò*Ð*Ø!�	�	àà×!Ò! 5¨%°°AÐ"6¸	Ø"&¤/°5¸%ñAô Að Að Að ˆŒØÔ×!Ò!Õ"2Ñ3Ô3×@Ò@ÑBÔBÐBØ×ÒÑÔÐÐÐr   )r
   r   r   r   rM   rN   rO   rL   rs   r   rj   ri   r3   rF  rB  ri  rj  rh  rC  rk   rl   s   @r   rV  rV  Ï  sÃ   ø€ € € € € Ø8Ð8à%€KØ€EØ�XÐFÐFÑGÔG€NØÔ"€FØ€Kðð ð ð ð ðð ð ð $ð  $ð  $ðD ð  ð  ð ð  ð  ð;ð ;ð ;ð&ð &ð &ð &ð &ð &ð &r   rV  c                   ól   ‡ — e Zd ZdZ ed„ ¦  «        ZdZdZej	        Z
dZˆ fd„Zd„ Zd„ Zd	„ Zd
„ Zˆ xZS )ÚToolPanz*Pan axes with left mouse, zoom with right.c                 ó&   — t           j        d         S )Nz
keymap.panr¨   r5   s    r   r6   zToolPan.<lambda>K  s   € ­3¬<¸Ô+E€ r   z)Pan axes with left mouse, zoom with rightÚmoverY  c                 óB   •—  t          ¦   «         j        |Ž  d | _        d S r,   )r[   r3   rq   r=  s     €r   r3   zToolPan.__init__Q  s"   ø€ Ø�‰ŒÔ˜$ÐÐØˆŒˆˆr   c                 óä   — d | _         g | _        | j        j                             | j        ¦  «         | j        j                             | ¦  «         | j        j         	                    ¦   «          d S r,   )
r4  r5  r=   r:   r   rq   r1   r”   rG  rÙ   r5   s    r   rF  zToolPan._cancel_actionU  sc   € Ø#ˆÔØˆŒØŒÔ×)Ò)¨$¬-Ñ8Ô8Ð8ØÔÔ$×,Ò,¨TÑ2Ô2Ð2ØŒÔ×$Ò$Ñ&Ô&Ð&Ð&Ð&r   c                 óz  — |j         dk    rd| _        n)|j         dk    rd| _        n|                      ¦   «          d S |j        |j        }}g | _        t          | j                             ¦   «         ¦  «        D ]Â\  }}|�»|�¹| 	                    |¦  «        r¤| 
                    ¦   «         r�|                     ¦   «         r||                     |||j         ¦  «         | j                             ||f¦  «         | j                             | ¦  «         | j        j                             d| j        ¦  «        | _        ŒÃd S )Nrÿ   ra  r~   )rP  r4  rF  rR  rS  r5  rd  r=   r  re  r‹   Úcan_panÚ	start_panrg  r1   r”   r:   r€   rh  rq   )r0   rE   rR  rS  rl  r  s         r   rB  zToolPan._press\  s9  € ØŒ<˜1ÒÐØ#$ˆDÔ Ð ØŒ\˜QÒÐØ#$ˆDÔ Ð à×ÒÑ!Ô!Ð!ØˆFàŒw˜œˆ1ˆàˆŒÝ˜dœk×2Ò2Ñ4Ô4Ñ5Ô5ð 	=ð 	=‰DˆAˆqØ� ! -°A·I²I¸eÑ4DÔ4D -Ø—N’NÑ$Ô$ð #0Ø)*¯ª©¬ð #0à—’˜A˜q %¤,Ñ/Ô/Ð/Ø”×$Ò$ a¨ VÑ,Ô,Ð,ØÔ ×,Ò,¨TÑ2Ô2Ð2Ø $¤Ô 2× >Ò >Ø)¨4Ô+;ñ!=ô !=�”øð	=ð 	=r   c                 óÌ  — | j         €|                      ¦   «          d S | j        j                             | j        ¦  «         | j        j                             | ¦  «         | j	        D ]\  }}| 
                    ¦   «          Œ| j	        s|                      ¦   «          d S | j                             t          ¦  «                             ¦   «          |                      ¦   «          d S r,   )r4  rF  r=   r:   r   rq   r1   r”   rG  r5  Úend_panr  r  rø   ©r0   rE   r  r”  s       r   rC  zToolPan._releaseq  sØ   € ØÔÐ'Ø×ÒÑ!Ô!Ð!ØˆFàŒÔ×)Ò)¨$¬-Ñ8Ô8Ð8ØÔÔ$×,Ò,¨TÑ2Ô2Ð2à”}ð 	ð 	‰GˆAˆtØ�IŠI‰KŒKˆKˆKØŒ}ð 	Ø×ÒÑ!Ô!Ð!ØˆFàÔ×!Ò!Õ"2Ñ3Ô3×@Ò@ÑBÔBÐBØ×ÒÑÔÐÐÐr   c                 ó´   — | j         D ]1\  }}|                     | j        |j        |j        |j        ¦  «         Œ2| j        j                             ¦   «          d S r,   )	r5  Údrag_panr4  rº   rR  rS  r1   r:   rÙ   r£  s       r   rh  zToolPan._mouse_move‚  s]   € Ø”}ð 	Jð 	J‰GˆAˆtð �JŠJ�tÔ+¨U¬Y¸¼ÀÄÑIÔIÐIÐIØÔÔ×)Ò)Ñ+Ô+Ð+Ð+Ð+r   )r
   r   r   r   rO   rL   rM   rN   rs   r   rj   ri   r3   rF  rB  rC  rh  rk   rl   s   @r   r™  r™  H  s£   ø€ € € € € Ø4Ð4à�XÐEÐEÑFÔF€NØ=€KØ€EØŒ\€FØ€Kðð ð ð ð ð'ð 'ð 'ð=ð =ð =ð*ð ð ð",ð ,ð ,ð ,ð ,ð ,ð ,r   r™  c                   ó\   — e Zd ZdZ ed„ ¦  «        ZdZed„ ¦   «         Zd„ Z	d„ Z
d„ Zd„ Zd	S )
ÚToolHelpBasez*Print tool list, shortcuts and descriptionc                 ó&   — t           j        d         S )Nzkeymap.helpr¨   r5   s    r   r6   zToolHelpBase.<lambda>Œ  r«   r   Úhelpc                 ó|   — t          | ¦  «        dk    r| n't          j        dd| ¦  «                             ¦   «         S )z¥
        Convert a shortcut string from the notation used in rc config to the
        standard notation for displaying shortcuts, e.g. 'ctrl+a' -> 'Ctrl+A'.
        rÿ   z\+[A-Z]z+Shift\g<0>)ÚlenÚreÚsubÚtitle)Úkey_sequences    r   Úformat_shortcutzToolHelpBase.format_shortcut�  s>   € õ !$ LÑ 1Ô 1°QÒ 6Ð 6��Ý”�z >°<Ñ@Ô@×FÒFÑHÔHð	Jr   c                 óz   ‡ — ‰ j                              |¦  «        }d                     ˆ fd„|D ¦   «         ¦  «        S )Nz, c              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r,   )r°  )rˆ  Úkeymapr0   s     €r   rŠ  z3ToolHelpBase._format_tool_keymap.<locals>.<genexpr>š  s1   øè è € ÐLÐL¸&˜×-Ò-¨fÑ5Ô5ÐLÐLÐLÐLÐLÐLr   )r1   Úget_tool_keymapÚjoin)r0   r2   Úkeymapss   `  r   Ú_format_tool_keymapz ToolHelpBase._format_tool_keymap˜  s@   ø€ ØÔ"×2Ò2°4Ñ8Ô8ˆØ�yŠyÐLÐLÐLÐLÀGÐLÑLÔLÑLÔLÐLr   c                 ór   ‡ — ˆ fd„t          ‰ j        j                             ¦   «         ¦  «        D ¦   «         S )Nc                 ó^   •— g | ])\  }}|j         ¯|‰                     |¦  «        |j         f‘Œ*S r   )rM   r·  )rˆ  r2   r{   r0   s      €r   ú
<listcomp>z2ToolHelpBase._get_help_entries.<locals>.<listcomp>�  sM   ø€ ð %ð %ð %Ù�D˜$ØÔ#ð%��t×/Ò/°Ñ5Ô5°tÔ7GÐHð %ð %ð %r   )Úsortedr1   rx   Úitemsr5   s   `r   Ú_get_help_entrieszToolHelpBase._get_help_entriesœ  sH   ø€ ð%ð %ð %ð %Ý"(¨Ô)9Ô)?×)EÒ)EÑ)GÔ)GÑ"HÔ"Hð%ñ %ô %ð 	%r   c                 ól   — |                       ¦   «         }d„ |D ¦   «         }d                     |¦  «        S )Nc                 ó"   — g | ]} d j         |Ž ‘ŒS )z
{}: {}
	{}©Úformat)rˆ  Úentrys     r   rº  z/ToolHelpBase._get_help_text.<locals>.<listcomp>£  s#   € ÐFÐFÐF°UÐ(�>Ô(¨%Ð0ÐFÐFÐFr   ú
)r½  rµ  )r0   Úentriess     r   Ú_get_help_textzToolHelpBase._get_help_text¡  s8   € Ø×(Ò(Ñ*Ô*ˆØFÐF¸gÐFÑFÔFˆØ�yŠy˜Ñ!Ô!Ð!r   c                 óÖ   ‡— dŠ‰                      ddd¦  «        g}|ˆfd„|                      ¦   «         D ¦   «         z  }d|d         z   d                     |d	d …         ¦  «        z   d
z   S )Nz*<tr><td>{}</td><td>{}</td><td>{}</td></tr>z<b>Action</b>z<b>Shortcuts</b>z<b>Description</b>c                 ó$   •— g | ]} ‰j         |Ž ‘ŒS r   rÀ  )rˆ  ÚrowÚfmts     €r   rº  z/ToolHelpBase._get_help_html.<locals>.<listcomp>ª  s"   ø€ ÐFÐFÐF c��”˜SÐ!ÐFÐFÐFr   z2<style>td {padding: 0px 4px}</style><table><thead>r   z</thead><tbody>rÿ   z</tbody></table>)rÁ  r½  rµ  )r0   ÚrowsrÉ  s     @r   Ú_get_help_htmlzToolHelpBase._get_help_html¦  s’   ø€ Ø:ˆØ—
’
ØÐ/Ð1EñGô Gð HˆàÐFÐFÐFÐF¨T×-CÒ-CÑ-EÔ-EÐFÑFÔFÑFˆð!Ø#'¨¤7ñ+ð.ßš$˜t A B Bœx™.œ.ñ)à+=ñ>ð 	?r   N)r
   r   r   rM   rO   rL   rN   Ústaticmethodr°  r·  r½  rÅ  rË  r   r   r   r§  r§  Š  sŒ   € € € € € Ø>€KØ�XÐFÐFÑGÔG€NØ€EàðJð Jñ „\ðJðMð Mð Mð%ð %ð %ð
"ð "ð "ð
?ð ?ð ?ð ?ð ?r   r§  c                   ó4   — e Zd ZdZdZ ed„ ¦  «        Zd„ ZdS )ÚToolCopyToClipboardBasez)Tool to copy the figure to the clipboard.z#Copy the canvas figure to clipboardc                 ó&   — t           j        d         S )Nzkeymap.copyr¨   r5   s    r   r6   z ToolCopyToClipboardBase.<lambda>´  r«   r   c                 ó@   — d}| j                              || ¦  «         d S )NzCopy tool is not available)r1   r˜   )r0   r]   r^   r™   s       r   rG   zToolCopyToClipboardBase.trigger¶  s&   € Ø.ˆØÔ×&Ò& w°Ñ5Ô5Ð5Ð5Ð5r   Nr®   r   r   r   rÎ  rÎ  °  sA   € € € € € Ø3Ð3à7€KØ�XÐFÐFÑGÔG€Nð6ð 6ð 6ð 6ð 6r   rÎ  r  r  r  ÚzoomÚpanr,  ÚsaveÚgridÚ
grid_minorÚ
fullscreenÚquitÚquit_allÚxscaleÚyscaleÚpositionrj   )r]  r©  ÚcopyÚ
navigation)r  r  r  Úzoompan)rÒ  rÑ  r,  Úior©  c                 óf   — |                      ¦   «         D ]\  }}|                      ||¦  «         ŒdS )aM  
    Add multiple tools to a `.ToolManager`.

    Parameters
    ----------
    toolmanager : `.backend_managers.ToolManager`
        Manager to which the tools are added.
    tools : {str: class_like}, optional
        The tools to add in a {name: tool} dict, see
        `.backend_managers.ToolManager.add_tool` for more info.
    N)r¼  Úadd_tool)r1   rx   r2   r{   s       r   Úadd_tools_to_managerrâ  Ó  sB   € ð —k’k‘m”mð )ð )‰
ˆˆdØ×Ò˜T 4Ñ(Ô(Ð(Ð(ð)ð )r   c                 ón   — |D ]1\  }}t          |¦  «        D ]\  }}|                      |||¦  «         ŒŒ2dS )aµ  
    Add multiple tools to the container.

    Parameters
    ----------
    container : Container
        `.backend_bases.ToolContainerBase` object that will get the tools
        added.
    tools : list, optional
        List in the form ``[[group1, [tool1, tool2 ...]], [group2, [...]]]``
        where the tools ``[tool1, tool2, ...]`` will display in group1.
        See `.backend_bases.ToolContainerBase.add_tool` for details.
    N)rd  rá  )Ú	containerrx   ÚgroupÚ
grouptoolsrÛ  r{   s         r   Úadd_tools_to_containerrç  ä  s]   € ð #ð 6ð 6ÑˆˆzÝ'¨
Ñ3Ô3ð 	6ð 	6‰NˆH�dØ×Ò˜t U¨HÑ5Ô5Ð5Ð5ð	6ð6ð 6r   r,   )7r   r   r   r¬  r;  Útypesr   r½   Úweakrefr   Únumpyrs  Ú
matplotlibr©   Úmatplotlib._pylab_helpersr   r   r   ÚIntEnumr	   rs   r  r   r   r'   r  r*   rU   rn   rŽ   r›   r¥   r°   rµ   rÇ   rÍ   rÓ   rÝ   ré   rî   r  r!  r%  r(  r+  r.  r2  rV  r™  r§  rÎ  Údefault_toolsÚdefault_toolbar_toolsrâ  rç  r   r   r   ú<module>rð     sØ  ððð ð €€€Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð à Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "ð"ð "ð "ð "ð "ˆdŒlñ "ô "ð "ð €ð �‘”€ðð ð ð ðð ð ð Ð ð\ð \ð \ð \ð \ñ \ô \ð \ð~T%ð T%ð T%ð T%ð T%�Xñ T%ô T%ð T%ðn85ð 85ð 85ð 85ð 85�Hñ 85ô 85ð 85ðv6ð 6ð 6ð 6ð 6˜ñ 6ô 6ð 6ð8ð ð ð ð �Xñ ô ð ð8%ð %ð %ð %ð %ˆxñ %ô %ð %ðð ð ð ð �(ñ ô ð ðKð Kð Kð Kð Kˆxñ Kô Kð KðKð Kð Kð Kð K�Hñ Kô Kð Kð8ð 8ð 8ð 8ð 8�Xñ 8ô 8ð 8ð'ð 'ð 'ð 'ð '�Nñ 'ô 'ð 'ð"ð ð ð ð �ñ ô ð ðð ð ð ð �ñ ô ð ð@.ð @.ð @.ð @.ð @.˜ñ @.ô @.ð @.ðF	Bð 	Bð 	Bð 	Bð 	B˜ñ 	Bô 	Bð 	Bðð ð ð ð Ð!ñ ô ð ðð ð ð ð Ð!ñ ô ð ðð ð ð ð Ð$ñ ô ð ðð ð ð ð ˜Hñ ô ð ðHð Hð Hð Hð H�Xñ Hô Hð Hð@Cð @Cð @Cð @Cð @C�.ñ @Cô @Cð @CðFvð vð vð vð vˆ{ñ vô vð vðr?,ð ?,ð ?,ð ?,ð ?,ˆkñ ?,ô ?,ð ?,ðD#?ð #?ð #?ð #?ð #?�8ñ #?ô #?ð #?ðL6ð 6ð 6ð 6ð 6˜hñ 6ô 6ð 6ð�˜ð  6¨8ð °YÀð Ø˜ðØ#(¨'ðàÐ2ðð ˜ðð ˜ð	ð
 ˜}ðð ˜~ðð ˜ðð ˜[ðð ˜:ðð ˜:ðð Ð/ðð "Ð#5ðð ˜=ðð  .Ø%Ø0ð!ð ð €ð& 'Ð(CÐ(CÐ(CÐDØ#Ð%@Ð%@Ð%@ÐAØ ¨Ð 0Ð1ð3Ð ð
 -:ð )ð )ð )ð )ð" -Bð 6ð 6ð 6ð 6ð 6ð 6r   