
    ^jW                         d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z
 d Zd Z ej                  dd	
      dd       Z ej                  dd
      dd       ZddZy)z|
========================
Widget testing utilities
========================

See also :mod:`matplotlib.tests.test_widgets`.
    )mock)_api)
MouseEventKeyEventNc                      t        j                  dd      \  } }|j                  ddgddg       |j                  d       | j                  j                          |S )z"Create a plot and return its Axes.   r      g      ?)pltsubplotsplot
set_aspectcanvasdraw)figaxs     e/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/matplotlib/testing/widgets.pyget_axr      sK    ll1a GCGGQHq#hMM#JJOOI    c                       y N )argskwargss     r   noopr      s    r   z3.11zMouseEvent or KeyEvent)alternativec                 D   t        j                         }||_        | j                  j	                  ||f||fg      d   \  |_        |_        ||c|_        |_        | |_	        | j                  d      j                  |_        ||_        ||_        d|_        d|_        |S )a  
    Create a mock event that can stand in for `.Event` and its subclasses.

    This event is intended to be used in tests where it can be passed into
    event handling functions.

    Parameters
    ----------
    ax : `~matplotlib.axes.Axes`
        The Axes the event will be in.
    xdata : float
        x coord of mouse in data coords.
    ydata : float
        y coord of mouse in data coords.
    button : None or `MouseButton` or {'up', 'down'}
        The mouse button pressed in this event (see also `.MouseEvent`).
    key : None or str
        The key pressed when the mouse event triggered (see also `.KeyEvent`).
    step : int
        Number of scroll steps (positive for 'up', negative for 'down').

    Returns
    -------
    event
        A `.Event`\-like Mock instance.
    r   T)rootNCustom)r   Mockbutton	transData	transformxyxdataydatainaxes
get_figurer   keystepguiEventname)r   r    r%   r&   r)   r*   events          r   
mock_eventr.      s    8 IIKEEL||--u~05u~/? @@ACEGUW$eEKEL==d=+22ELEIEJENEJLr   zcallbacks.process(event)c                 `    t        | j                  |||||      }t        | |      } ||       y)aT  
    Trigger an event on the given tool.

    Parameters
    ----------
    tool : matplotlib.widgets.AxesWidget
    etype : str
        The event to trigger.
    xdata : float
        x coord of mouse in data coords.
    ydata : float
        y coord of mouse in data coords.
    button : None or `MouseButton` or {'up', 'down'}
        The mouse button pressed in this event (see also `.MouseEvent`).
    key : None or str
        The key pressed when the mouse event triggered (see also `.KeyEvent`).
    step : int
        Number of scroll steps (positive for 'up', negative for 'down').
    N)r.   r   getattr)	tooletyper    r%   r&   r)   r*   r-   funcs	            r   do_eventr4   G   s/    * twwuc4@E4DKr   c                    | j                   }|&t        j                  d|||      j                          t	        j                  d||d      j                          t	        j                  d||d      j                          t	        j                  d||d      j                          |'t        j                  d|||      j                          yy)a}  
    Helper to simulate a mouse drag operation.

    Parameters
    ----------
    tool : `~matplotlib.widgets.Widget`
    start : [float, float]
        Starting point in data coordinates.
    end : [float, float]
        End point in data coordinates.
    key : None or str
         An optional key that is pressed during the whole operation
         (see also `.KeyEvent`).
    Nkey_press_eventbutton_press_eventr   motion_notify_eventbutton_release_eventkey_release_event)r   r   _from_ax_coords_processr   )r1   startendr)   r   s        r   click_and_dragr?   a   s     
B
  !2BsCLLN3RBKKM4b#qAJJL5r3BKKM
  !4b#sCLLN r   )r   r   r   Nr   r   )__doc__unittestr   
matplotlibr   matplotlib.backend_basesr   r   matplotlib.pyplotpyplotr
   r   r   
deprecatedr.   r4   r?   r   r   r   <module>rG      sn      9 	 %=>& ?&R %?@ A2Or   