o
    tBhR                     @   sJ  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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$   | j dj\}td}|j}|S )Nbackendzmatplotlib.backends.qt_compat)nodeget_closest_markerargspytestimportorskipQtCore)requestr   	qt_compatr    r   w/var/www/html/riverr-enterprise-integrations-main/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)selfr   kwargs	__class__r   r   r5   >   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)r9   
terminatorbufcr   r   r   wait_forG   s   
zWaitForStringPopen.wait_for)__name__
__module____qualname____doc__r5   rE   __classcell__r   r   r;   r   r&   9   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   )r1   win32apiGenerateConsoleCtrlEventsignalkillgetpidSIGINT)rL   rN   )r6   r0   r   r   
interupter]   s
   
z%_test_sigint_impl.<locals>.interupterr>   
draw_eventc                  W      t dddS NDRAWTflushprintr   r   r   r   <lambda>j       z#_test_sigint_impl.<locals>.<lambda>c                     s      S r   startr[   timerr   r   r\   n   s    SUCCESSTrW   r   )r0   matplotlib.pyplotr   r6   	threadingswitch_backendmatplotlib.backends.qt_compatr   getattrTimerr   r   mpl_connectKeyboardInterruptrZ   )	r   target_namer:   r   rd   r   rR   targetr$   r   )r6   r0   ra   r   _test_sigint_implT   s.   


rm   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(, )rV   timeoutrb   )r   get_backendr&   r0   
executableinspect	getsourcerm   rE   communicate_test_timeoutrO   rZ   rl   r:   r   procr.   _r   r   r   test_sigintv   s"   
r   c           
         s   dd l }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yd   tddd
 Y d S w )Nr   rK   rS   c                  W   rT   rU   rY   r[   r   r   r   r\      r]   z7_test_other_signal_before_sigint_impl.<locals>.<lambda>r>   )rq   TSIGUSR1rW   c                    s       d S r   r^   signumframer`   r   r   custom_signal_handler   s   zD_test_other_signal_before_sigint_impl.<locals>.custom_signal_handlerrb   r   )rN   r0   rc   r   re   rf   r   rg   r   r   ri   	new_timersingle_shotadd_callbackrZ   r   rj   )
r   rk   r:   rN   r0   r   r   rl   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 )	Nrs   z'
_test_other_signal_before_sigint_impl(rt   ru   rV   r   rv   rb   )r   rx   r&   r0   ry   rz   r{   r   rE   r6   rO   pidrN   r   rQ   r|   r}   rZ   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   )rN   	getsignalrQ   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
singleShotrN   r   rQ   
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)idsr   )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}fdd}t	 j
}|d| ||  |ksaJ 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                       s0   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   r9   r   r   r   isAutoRepeatD      z-test_correct_key.<locals>._Event.isAutoRepeatc                    s   t  dS )NQtCore.Qt.Keyrg   r   )r   r   qt_keyr   r   keyE  s    z$test_correct_key.<locals>._Event.keyc                    s    S r   r   r   )qt_modr   r   	modifiersF  r   z*test_correct_key.<locals>._Event.modifiersN)rF   rG   rH   r   r   r   r   )r   r   r   r   r   r   _EventC  s    r   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)rf   r   r   r0   r1   replace
NoModifierrg   r   r   r   ri   keyPressEvent)	r   r   r   qt_modsanswer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   rn   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   r\     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   )rD   r   c                 S   r   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   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   r\     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            	         sp  dd l } ddlm 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rudnd fd!| jdkrd"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   r   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_Pauserp   )
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)rn  f11)Key_F12f12)Key_Super_Lr4   )Key_Super_Rr4   c                    s4   g | ]\}}t  d |t  d|fqS )r   r   r   )r3  r   r   r   r   r   
<listcomp>3  s    z$_test_enums_impl.<locals>.<listcomp>))r   r   )r   r   )r   rW  )r   rX  c                    s    i | ]\}}|t  d |qS )zQtCore.Qt.CursorShaper   r2  r   r   r   r6  ?      SizeAllCursorPointingHandCursorArrowCursorCrossCursor
WaitCursorc                    s    i | ]\}}t  d ||qS )zQtCore.Qt.MouseButtonr   r2  rv  r   r   r6  J  rw  
LeftButtonRightButtonMiddleButtonXButton1XButton2zQtCore.Qt.WidgetAttributezQtCore.Qt.FocusPolicyzQtCore.Qt.ToolBarAreazQtCore.Qt.AlignmentFlagzQtWidgets.QSizePolicy.PolicyzQtCore.Qt.MaskMode)!r0   rf   r   r   r   matplotlib.backend_basesr.  r/  
Acceptabler0  r1  Applyrg   Format_ARGB32_Premultipliedr1   MOVEHANDPOINTERSELECT_REGIONWAITLEFTRIGHTMIDDLEBACKFORWARDWA_OpaquePaintEventStrongFocusTopToolBarArea
AlignRightAlignVCenter	ExpandingIgnoredMaskOutColor)	r0   r   r.  r/  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   )r3  qt_apir   r   r   ru  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)r3  depr   r   r   ru  m  s    linuxz'$DISPLAY and $WAYLAND_DISPLAY are unsetz{} cannot be importedrt   r+   macosxTF_BUILDzmacosx backend fails on Azurez	Skipping z	 because r   )r   id)r0   r1   r   display_is_validformatjoinr6   r7   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 )Nrs   z
_test_enums_impl()r,   r*   T)r-   rw   checkr.   r/   )r2   runr0   ry   rz   r{   r  r6   r7   r}   r8   )r-   r   r   r   r   test_enums_available}  s   
r  )6r   r  rz   r6   rN   r2   r0   r   r   unittestr   r   r   r   r   matplotlib._pylab_helpersr   r   rf   r   r	   matplotlib.backends.qt_editorr
   ImportErrorr  r  
pytestmarkr}   fixturer   r   r%   Popenr&   rm   parametrizer   r   skipifr1   r   r   r  r   r   r  r  r  r  r#  r-  r  r  r  r   r   r   r   <module>   s    

"





8



+	!
H

	



s