o
    g$                     @   s   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mZ d dl	Z	zd dl
mZ W n ey9   e	jdZY nw e	jdd Ze	jd	e	jd
e	jjd
ddde	jde	jjddddgdd Ze	jjddddd Ze	jjdddgdfdg dfddgdfddgdfdg dfddgdfd dgd!fdg d"d#fd$g dfd%g d&fd%dgd'fgg d(d)e	jd	e	jd
e	jjd
ddde	jde	jjddddgd*d+ Ze	jjdddd,d- Ze	jjdddd.d/ Ze	jjdddd0d1 Ze	jjdddd2d3 Ze	jjdddd4d5 ZdS )6    N)mock)pyplot)Gcf)QtGuizNo usable Qt5 bindingsc                 C   st   | j dj\}td}|j}|dkr8zt|jdd }W n t	y.   |j
d }Y nw |dkr8td |S )Nbackendzmatplotlib.backends.qt_compatQt4Agg.r      zQt4 is not available)nodeget_closest_markerargspytestimportorskipQtCoreintPYQT_VERSION_STRsplitAttributeError__version_info__skip)requestr   	qt_compatr   	py_qt_ver r   ^/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/matplotlib/tests/test_backend_qt.pyqt_core   s   

r   r   r   T)skip_on_importerror)marksQt5Aggc                 C   s4   t  tj}t }|jjj  |tjksJ d S N)	copyr   figspltfigurecanvasmanagerwindowclose)r   	init_figsfigr   r   r   test_fig_close#   s   r*   c                    s   t   d   fdd}jd| ttj}dd }ttj| tjj	j
   tjks3J |ttjks=J ttj| d S )Nc                      s   t t j j  d S r   )signal	getsignalSIGINTQCoreApplicationexitr   event_loop_signalr   r   r   fire_signal_and_quitE   s   z.test_fig_signals.<locals>.fire_signal_and_quitr   c                 S      d S r   r   )signumframer   r   r   CustomHandlerT   s   z'test_fig_signals.<locals>.CustomHandler)r"   r#   QTimer
singleShotr+   r,   r-   
matplotlibbackendsbackend_qt5_BackendQT5mainloopSIG_DFL)r   r2   original_signalr6   r   r0   r   test_fig_signals<   s   	r@   zqt_key, qt_mods, answerKey_AShiftModifierAaControlModifierzctrl+a
Key_Aacute   Á   áKey_ControlAltModifierzalt+controlKey_Altzctrl+alt)rE   rJ   MetaModifieru   ctrl+alt+super+áKey_PlayKey_Backspace	backspacezctrl+backspace)shiftlowercontrolunicode_upperunicode_loweralt_controlcontrol_altmodifier_ordernon_unicode_keyrO   backspace_mod)idsc           	         sj   j j|D ]
}tj |O qG fddd} fdd}t j}|d| ||  dS )z
    Make a figure.
    Send a key_press_event event (using non-public, qtX backend specific api).
    Catch the event.
    Assert sent and caught keys are the same.
    c                       s.   e Zd Zdd Z fddZfddZdS )z test_correct_key.<locals>._Eventc                 S   s   dS )NFr   selfr   r   r   isAutoRepeat       z-test_correct_key.<locals>._Event.isAutoRepeatc                    s   t  jS r   )getattrQtr[   )r   qt_keyr   r   key   s    z$test_correct_key.<locals>._Event.keyc                    s    S r   r   r[   )qt_modr   r   	modifiers   r^   z*test_correct_key.<locals>._Event.modifiersN)__name__
__module____qualname__r]   rb   rd   r   )r   ra   rc   r   r   _Event   s    rh   c                    s   | j  ksJ d S r   )rb   )event)answerr   r   on_key_press   s   z&test_correct_key.<locals>.on_key_presskey_press_eventN)r`   
NoModifierr_   r"   r#   r$   mpl_connectkeyPressEvent)	r   r   ra   qt_modsrj   modrh   rk   	qt_canvasr   )rj   r   ra   rc   r   test_correct_keyg   s   0
rs   c                     s  d} t |  d _tjddd}|j   fdd}j   }	 
  |d |jdks=J jjd	ksEJ jjd
ksMJ | dksUJ | dks]J  dkseJ | dk soJ |d |jdkszJ jjdksJ jjdksJ | dksJ | dksJ  dksJ | dk sJ |d |jdksJ jjdksJ jjdksJ | dksJ | dksJ  dksJ | dk sJ W d   dS 1 sw   Y  dS )z~
    Make sure that if the pixel ratio changes, the figure dpi changes but the
    widget remains the same physical size.
    z@matplotlib.backends.backend_qt5.FigureCanvasQT.devicePixelRatioF   )      x   )figsizedpic                    s4   |  _ j| ks
J jd     d S )N`   )return_value
_dpi_ratiologicalDotsPerInchChangedemitdrawflush_events)ratioprr   screenr   r   set_pixel_ratio   s
   z0test_pixel_ratio_change.<locals>.set_pixel_ratioih  i  i  X     )r   r   rv   i  i  g      ?   i  N)r   patchr{   r"   r#   r$   showr%   sizer&   windowHandler   ry   rendererwidthheightget_width_heightget_size_inchesall)propr)   r   r   r   r   r   test_pixel_ratio_change   sF   
"r   c                  C   sP   t  \} }tddd  | jjj  W d    d S 1 s!w   Y  d S )Nz3matplotlib.backends.backend_qt5.SubplotToolQt.exec_c                 S   r3   r   r   r[   r   r   r   <lambda>   r^   z"test_subplottool.<locals>.<lambda>)r"   subplotsr   r   r$   r%   toolbarconfigure_subplotsr)   axr   r   r   test_subplottool   s   "r   c                  C   s   t  \} }|ddg |dgg |jtdtdtdd tddd  | jj	j
  W d    d S 1 s=w   Y  d S )N   rv   rt   )cz:matplotlib.backends.qt_editor._formlayout.FormDialog.exec_c                 S   r3   r   r   r[   r   r   r   r     r^   z$test_figureoptions.<locals>.<lambda>)r"   r   plotimshowscatterranger   r   r$   r%   r   edit_parametersr   r   r   r   test_figureoptions   s   "r   c                  C   s   t  \} }| j  | jjj}d\}}| || | j |tj	d  ks(J | j
 |tj	d  ks6J | }|
 }| || | |ksLJ |
 |ksTJ d S )N)rt   rv   z
figure.dpi)r"   r   r$   r   r%   r&   set_size_inchesr   r9   rcParamsr   )r)   r   r&   wh	old_width
old_heightr   r   r   test_double_resize  s   

r   c                     sH   ddl m}  d  fdd}t \}}||_| |}d|_ s"J d S )Nr   )FigureCanvasQTAggFc                    s   | j   d d S )NT)r$   	draw_idle)r)   stalecalledr   r   crashing_callback  s   
z-test_canvas_reinit.<locals>.crashing_callbackT)"matplotlib.backends.backend_qt5aggr   r"   r   stale_callbackr   )r   r   r)   r   r$   r   r   r   test_canvas_reinit  s   r   )r    r+   unittestr   r9   r   r"   matplotlib._pylab_helpersr   r   matplotlib.backends.qt_compatr   ImportErrormarkr   
pytestmarkfixturer   parametrizeparamr   r*   r@   rs   r   r   r   r   r   r   r   r   r   <module>   s    

	
*




 	
G


