o
    h2                     @   s  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 d dlmZ d dl	Z	d dl
Z
d dl
mZ d dlmZ d dl
mZ zd dlmZ d dlmZ d d	lmZ W n ey_   e	jd
ZY nw dZe	j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/d0 Z!e	jjdddd1d2 Z"e	jjdddd3d4 Z#e	jjdddd5d6 Z$e	jjdddd7d8 Z%e	jjdddd9d: Z&e	jjdddd;d< Z'e	jjd+ddd=d> Z(d?d@ Z)e	jjddddAdB Z*e	jjddddCdD Z+dS )E    N)datedatetime)mock)pyplot)Gcf)_c_internal_utils)QtGui)	QtWidgets)_formlayoutzNo usable Qt bindings<   c                 C   s   ddl m} |S )Nr   )QtCore)matplotlib.backends.qt_compatr   )requestr    r   t/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/matplotlib/tests/test_backend_qt.pyqt_core   s   r   QtAggT)skip_on_importerrorc                  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)	init_figsfigr   r   r   test_fig_close"   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)r$   r)   MetaModifieru   ctrl+alt+meta+áKey_PlayKey_Backspace	backspacezctrl+backspace)shiftlowercontrolunicode_upperunicode_loweralt_controlcontrol_altmodifier_ordernon_unicode_keyr.   backspace_mod)idsbackendQt5Agg)marksc           
         s   ddl mm  tjdkr#|dur#|dd}|dd}|dd}d jjj|D ]}t	 jj|O q,G  fd	d
d
}|
tjdfdd fdd}t j}	|	d| |	|  |kslJ 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.
    r   )_to_intr   darwinNctrlcmdr1   metac                       s$   e Zd Z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jS r   )getattrQtKeyrB   r   r=   qt_keyr   r   key|   s    z$test_correct_key.<locals>._Event.keyN)__name__
__module____qualname__rD   rK   r   rI   r   r   _Eventz   s    rO   keyboardModifiersc                    s    S r   r   rB   )qt_modr   r   <lambda>   rE   z"test_correct_key.<locals>.<lambda>c                    s
   | j  d S r   )rK   )event)resultr   r   on_key_press   s   
z&test_correct_key.<locals>.on_key_presskey_press_event)r   r=   r   sysplatformreplacerG   KeyboardModifier
NoModifierrF   setattrr	   QApplicationr   r   r   mpl_connectkeyPressEvent)
r:   r   rJ   qt_modsanswermonkeypatchmodrO   rU   	qt_canvasr   )r   r=   rJ   rQ   rT   r   test_correct_key4   s$   ;



re   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 logical size.
    z?matplotlib.backends.backend_qt.FigureCanvasQT.devicePixelRatioF   )      x   )figsizedpic                    s4   |  _ jd     j| ksJ d S )N`   )return_valuelogicalDotsPerInchChangedemitdrawflush_eventsdevice_pixel_ratio)ratioprd   screenr   r   set_device_pixel_ratio   s
   z>test_device_pixel_ratio_change.<locals>.set_device_pixel_ratioih  i  i  X     )rx   ry   rh   i  i  g      ?   i  N)r   patchrm   r   r   r   showr   sizer   windowHandlerv   rk   rendererwidthheightget_width_heightget_size_inchesall)propr   rw   r}   r   rt   r   test_device_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 )N#matplotlib.backends.qt_compat._execc                 S      d S r   r   objr   r   r   rR      rE   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   rh   rf   )cr   c                 S   r   r   r   r   r   r   r   rR      rE   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  \} }|dgg d}tj|dd | jjj }t	
d |dks)J W d    n1 s3w   Y  tj|dd | jjj }|d u sMJ W d    d S 1 sXw   Y  d S )Nr   zCmatplotlib.backends.qt_compat.QtWidgets.QFileDialog.getSaveFileName)
foobar.pngN)rm   r   )NN)r   r   r   r   r{   r   r   r   save_figureosremove)r   r   r   fnamer   r   r   test_save_figure_return   s   
"r   c                  C   sx   t  \} }tddddtddddg}||| tddd  | jjj	  W d    d S 1 s5w   Y  d S )N  r   yearmonthdayrh   r   c                 S   r   r   r   r   r   r   r   rR      rE   z7test_figureoptions_with_datetime_axes.<locals>.<lambda>)
r   r   r   r   r   r{   r   r   r   r   )r   r   xydatar   r   r   %test_figureoptions_with_datetime_axes   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)rf   rh   z
figure.dpi)r   r   r   rp   r   r   set_size_inchesr   
matplotlib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_qtaggr   r   r   stale_callbackr   )r   r   r   r   r   r   r   r   test_canvas_reinit  s   r   c                  C   sx   ddl m}  |   dtddddfdtddddfg}t|}|  | }|tddddtddddgks:J d S )	Nr   )_create_qAppzDatetime fieldr   rf      r   z
Date field)matplotlib.backends.backend_qtr   r   r   r
   
FormWidgetsetupget)r   formwidgetvaluesr   r   r   2test_form_widget_get_with_datetime_and_date_fields&  s   
r   c                  C   s   g } dd dD D ]S\}}d }dd |D }t jdkr"t s"d}n|r-dd|}n|d	 d
kr;tjdr;d}g }|rO|	t
jjd| d| d | 	t
j||t|d q	| S )Nc                 S   s   g | ]
}|gd |dfqS )qtagg)
MPLBACKENDQT_APIr   ).0qt_apir   r   r   
<listcomp>:  s    z-_get_testable_qt_backends.<locals>.<listcomp>)PyQt6PySide6PyQt5PySide2c                 S   s   g | ]
}t j|s|qS r   )	importlibutil	find_spec)r   depr   r   r   r   ?  s    linuxz'$DISPLAY and $WAYLAND_DISPLAY are unsetz{} cannot be importedz, r   macosxTF_BUILDzmacosx backend fails on Azurez	Skipping z	 because )reason)r<   id)rW   rX   r   display_is_validformatjoinr   environr   appendpytestmarkskipparamstr)envsdepsenvr   missingr<   r   r   r   _get_testable_qt_backends8  s*   

r   c              
      s   ddl m} t  d   fdd}jd| ttj}dd }ttj| zLt	j
jj   |ks9J ttj|ksCJ tjtjfD ]$}jd| ttj| |   |kscJ ttj|ksmJ qIW ttj| d S ttj| w )Nr   )_BackendQT5c                      s   t t j j  d S r   )signal	getsignalSIGINTQCoreApplicationexitr   event_loop_handlerr   r   r   fire_signal_and_quitY  s   z6test_fig_sigint_override.<locals>.fire_signal_and_quitc                 S   r   r   r   )signumframer   r   r   custom_handlerh  s   z0test_fig_sigint_override.<locals>.custom_handler)matplotlib.backends.backend_qt5r   r   r   QTimer
singleShotr   r   r   r   backends
backend_qt
_BackendQTmainloopSIG_DFLSIG_IGN)r   r   r   original_handlerr   r   r   r   test_fig_sigint_overrideO  s(   	"r   c                  C   s"   ddl m}  | ddddd d S )Nr   ipython_in_subprocessqtr   r   r;   ))      )r      )   r   )matplotlib.testingr   r   r   r   r   test_ipython  s   r  ),r   r   r   r   rW   r   r   unittestr   r   r   r   r   matplotlib._pylab_helpersr   r   r   r   r	   matplotlib.backends.qt_editorr
   ImportErrorr   r   
pytestmark_test_timeoutfixturer   r:   r   parametrizer   re   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   <module>   s    





+	#
H

	





8