o
    liS                     @   sN  d dl Z d dlZ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mZ d dlmZ W n eyc   ejd	ZY nw d
Zejdd Zejjddddd ZG dd dej Z!dd Z"ejjdddej#ddddifdddifgdd Z$dd Z%ejj&ej'd kd!d"ejjdddej#ddddifdddif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d0fd/g d1fd2d3gd4fd5d-gd6fd/g d7d8fd9g 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dAdB Z+ejjddddCdD Z,ejjddddEdF Z-ejjddddGdH Z.ejjddddIdJ Z/ejjddddKdL Z0ejjddddMdN Z1ejjd%dddOdP Z2dQdR Z3dSdT Z4ej#dUe4 dVdW Z5dS )X    N)datedatetime)mock)pyplot)Gcf)_c_internal_utils)QtGui	QtWidgets)_formlayoutzNo usable Qt bindings<   c                 C   s   t d}|j}|S )Nzmatplotlib.backends.qt_compat)pytestimportorskipQtCore)request	qt_compatr    r   ^/home/ubuntu/SoloSpeech/.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!   c                       s(   e Zd ZdZ fddZdd Z  ZS )WaitForStringPopenzL
    A Popen that passes flags that allow triggering KeyboardInterrupt.
    c                    sH   t jdkr
tj|d< t j|i |i tjdddtjdd d S )Nwin32creationflagsAgg0)
MPLBACKENDSOURCE_DATE_EPOCHT)envstdoutuniversal_newlines)	sysplatform
subprocessCREATE_NEW_CONSOLEsuper__init__osenvironPIPE)selfargskwargs	__class__r   r   r1   =   s   

zWaitForStringPopen.__init__c                 C   s<   d}	 | j d}|std|||7 }||rdS q)z%Read until the terminator is reached. T   z)Subprocess died before emitting expected N)r*   readRuntimeErrorendswith)r5   
terminatorbufcr   r   r   wait_forF   s   
zWaitForStringPopen.wait_for)__name__
__module____qualname____doc__r1   rB   __classcell__r   r   r8   r   r"   8   s    	r"   c           	         s   dd l dd lm} dd l dd l}||  ddlm}  fdd}t||}|	d||
 }|jddd  |jdfd	d z
|di | W d S  tya   td
dd Y d S w )Nr   r   c                     s@   j dkrdd l} | dd d S dd l}   |j d S )Nr#   r   )r-   win32apiGenerateConsoleCtrlEventsignalkillgetpidSIGINT)rI   rK   )r2   r,   r   r   interrupter\   s
   
z&_test_sigint_impl.<locals>.interrupterr;   
draw_eventc                  W      t dddS NDRAWTflushprintr6   r   r   r   <lambda>i       z#_test_sigint_impl.<locals>.<lambda>c                     s      S r   startrX   timerr   r   rY   m   s    SUCCESSTrT   r   )r,   matplotlib.pyplotr   r2   	threadingswitch_backendmatplotlib.backends.qt_compatr   getattrTimerr   r   mpl_connectKeyboardInterruptrW   )	backendtarget_namer7   r   ra   r   rO   targetr    r   )r2   r,   r^   r   _test_sigint_implS   s.   


rk   ztarget, kwargsshowblockpauseinterval
   c                 C   s   t  }ttjdttd|d| d|d g}z|d |j	t
d\}}W n   |  |	 \}} t| d|v sCJ d S )N-cz
_test_sigint_impl(, )rS   timeoutr_   )r   get_backendr"   r,   
executableinspect	getsourcerk   rB   communicate_test_timeoutrL   rW   rj   r7   rh   procr*   _r   r   r   test_sigintu   s"   
r   c           	         s   dd l }dd lm} ||  ddlm} t||}| }|j	ddd  |jj
dd d _ jtd	dd
  fdd}| |j| z
|di | W d S  ty`   tddd
 Y d S w )Nr   rH   rP   c                  W   rQ   rR   rV   rX   r   r   r   rY      rZ   z7_test_other_signal_before_sigint_impl.<locals>.<lambda>r;   )ro   TSIGUSR1rT   c                    s       d S r   r[   signumframer]   r   r   custom_signal_handler   s   zD_test_other_signal_before_sigint_impl.<locals>.custom_signal_handlerr_   r   )rK   r`   r   rb   rc   r   rd   r   r   rf   	new_timersingle_shotadd_callbackrW   r   rg   )	rh   ri   r7   rK   r   r   rj   r    r   r   r]   r   %_test_other_signal_before_sigint_impl   s&   

r   r#   z,No other signal available to send on Windowsreasonc                 C   s   t  }ttjdttd|d| d|d g}z$|d t	
|jtj |d t	
|jtj |jtd\}}W n   |
  | \}} t| d|v sXJ t   d S )	Nrq   z'
_test_other_signal_before_sigint_impl(rr   rs   rS   r   rt   r_   )r   rv   r"   r,   rw   rx   ry   r   rB   r2   rL   pidrK   r   rN   rz   r{   rW   r   r|   r   r   r   test_other_signal_before_sigint   s6   

r   Qt5Aggc              
      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   )rK   	getsignalrN   QCoreApplicationexitr   event_loop_handlerr   r   r   fire_signal_and_quit   s   z6test_fig_sigint_override.<locals>.fire_signal_and_quitc                 S      d S r   r   r   r   r   r   custom_handler   s   z0test_fig_sigint_override.<locals>.custom_handler)matplotlib.backends.backend_qt5r   r   r   QTimer
singleShotrK   r   rN   
matplotlibbackends
backend_qt
_BackendQTmainloopSIG_DFLSIG_IGN)r   r   r   original_handlerr   r   r   r   test_fig_sigint_override   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)idsrh   )marksc           
         s   ddl m m tjdkr#|dur#|dd}|dd}|dd}d d	j|D ]}t d	|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   _enum_to_intdarwinNctrlcmdr   metaQtCore.Qt.KeyboardModifierc                       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   r5   r   r   r   isAutoRepeatB      z-test_correct_key.<locals>._Event.isAutoRepeatc                    s   t  dS )NQtCore.Qt.Keyrd   r   r   r   qt_keyr   r   keyC  s    z$test_correct_key.<locals>._Event.keyN)rC   rD   rE   r   r   r   r   r   r   _EventA  s    r   keyboardModifiersc                    s    S r   r   r   )qt_modr   r   rY   F  r   z"test_correct_key.<locals>.<lambda>c                    s
   | j  d S r   )r   )event)resultr   r   on_key_pressH  s   
z&test_correct_key.<locals>.on_key_presskey_press_event)rc   r   r   r,   r-   replace
NoModifierrd   setattrr	   QApplicationr   r   r   rf   keyPressEvent)
rh   r   r   qt_modsanswermonkeypatchmodr   r   	qt_canvasr   )r   r   r   r   r   r   test_correct_key   s$   ;



r   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pr   screenr   r   set_device_pixel_ratioa  s
   z>test_device_pixel_ratio_change.<locals>.set_device_pixel_ratioih  i  i  X     )r   r   r   i  i  g      ?   i  N)r   patchr   r   r   r   rl   r   sizer   windowHandler   r   rendererwidthheightget_width_heightget_size_inchesall)propr    r   r   r   r   r   test_device_pixel_ratio_changeR  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   r   r   r   objr   r   r   rY     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 )Nr;   r   r   )rA   r   c                 S   r   r   r   r  r   r   r   rY     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   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dayr   r   c                 S   r   r   r   r  r   r   r   rY     r   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)r   r   z
figure.dpi)r   r  r   r   r   r   set_size_inchesr   r   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  r      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                     sl  dd l } ddlm m ddlm}m}  dj  dj  dj	  dj
 dD ]	}t d| q* dj  dj  fdd	g d
ddddddddddddddddddd| jdkrsdnd fd!| jdkr~d"ndfd#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2R D } fd3d4d5D } fd6d	|jd7f|jd8f|jd9f|jd:f|jd;ffD } fd<d	d=|jfd>|jfd?|jfd@|jfdA|jffD } dBj  dCj  dDj  dDj  dEj  dEj  dFj  dFj  dGj  dDj  dDj  dEj  dEj  dFj  dFj d S )HNr   r   )cursorsMouseButtonzQtGui.QDoubleValidator.Statez)QtWidgets.QDialogButtonBox.StandardButton)OkCancelzQtGui.QImage.Formatc                    s$   i | ]\}}t  d ||qS )r   r   .0kvr   r   r   
<dictcomp>  s    z$_test_enums_impl.<locals>.<dictcomp>)
Key_Escapeescape)Key_Tabtab)r   r   )
Key_Returnenter)	Key_Enterr>  )
Key_Insertinsert)
Key_Deletedelete)	Key_Pausern   )
Key_SysReqsysreq)	Key_Clearclear)Key_Homehome)Key_Endend)Key_Leftleft)Key_Upup)	Key_Rightright)Key_Downdown)
Key_PageUppageup)Key_PageDownpagedown)	Key_Shiftr   r   r   r   r   Key_Metar   )r   alt)Key_CapsLock	caps_lock)Key_F1f1)Key_F2f2)Key_F3f3)Key_F4f4)Key_F5f5)Key_F6f6)Key_F7f7)Key_F8f8)Key_F9f9)Key_F10f10)rp  f11)Key_F12f12)Key_Super_Lr0   )Key_Super_Rr0   c                    s4   g | ]\}}t  d |t  d|fqS )r   r   r   )r5  r   r   r   r   r   
<listcomp>3  s    z$_test_enums_impl.<locals>.<listcomp>))r   r   )r   r   )r   rY  )r   rZ  c                    s    i | ]\}}|t  d |qS )zQtCore.Qt.CursorShaper   r4  r   r   r   r8  ?      SizeAllCursorPointingHandCursorArrowCursorCrossCursor
WaitCursorc                    s    i | ]\}}t  d ||qS )zQtCore.Qt.MouseButtonr   r4  rx  r   r   r8  J  ry  
LeftButtonRightButtonMiddleButtonXButton1XButton2zQtCore.Qt.WidgetAttributezQtCore.Qt.FocusPolicyzQtCore.Qt.ToolBarAreazQtCore.Qt.AlignmentFlagzQtWidgets.QSizePolicy.PolicyzQtCore.Qt.MaskMode) r,   rc   r   r   matplotlib.backend_basesr0  r1  
Acceptabler2  r3  Applyrd   Format_ARGB32_Premultipliedr-   MOVEHANDPOINTERSELECT_REGIONWAITLEFTRIGHTMIDDLEBACKFORWARDWA_OpaquePaintEventStrongFocusTopToolBarArea
AlignRightAlignVCenter	ExpandingIgnoredMaskOutColor)r,   r0  r1  btn_typeSPECIAL_KEYS_MODIFIER_KEYScursordbuttondr   r   r   _test_enums_impl  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)r'   QT_APIr   )r5  qt_apir   r   r   rw  h  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)r5  depr   r   r   rw  m  s    linuxz'$DISPLAY and $WAYLAND_DISPLAY are unsetz{} cannot be importedrr   r'   macosxTF_BUILDzmacosx backend fails on Azurez	Skipping z	 because r   )r   id)r,   r-   r   display_is_validformatjoinr2   r3   r+  appendr   markskipparamstr)envsdepsr)   r   missingr   r   r   r   _get_testable_qt_backendsf  s*   

r  r)   c                 C   s@   t jtjdttd gi tjddi| t	dt j
dd}d S )Nrq   z
_test_enums_impl()r(   r&   T)r)   ru   checkr*   r+   )r.   runr,   rw   rx   ry   r  r2   r3   r{   r4   )r)   r}   r   r   r   test_enums_available}  s   
r  )6r   r  rx   r2   rK   r.   r,   r   r   unittestr   r   r   r   r   matplotlib._pylab_helpersr   r   rc   r   r	   matplotlib.backends.qt_editorr
   ImportErrorr  r  
pytestmarkr{   fixturer   rh   r!   Popenr"   rk   parametrizer   r   skipifr-   r   r   r  r   r   r  r  r  r  r%  r/  r  r  r  r   r   r   r   <module>   s    

"




8



+	#
H

	



s