
    ^j3                        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 	 d dlmZ d dlmZ d d	lmZ d d
lmZ dZe	j.                  j7                  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&'      e	j.                  j;                  d( e	j<                  d)e	j.                  j7                  d)d      *       e	j<                  de	j.                  j7                  dd      *      g      d+               Ze	j.                  j7                  dd      d,        Z e	j.                  j7                  dd      d-        Z!e	j.                  j7                  dd      d.        Z"e	j.                  j7                  dd      d/        Z#e	j.                  j7                  dd      d0        Z$e	j.                  j7                  dd      d1        Z%e	j.                  j7                  dd      d2        Z&e	j.                  j7                  d)d      d3        Z'd4 Z(e	j.                  j7                  dd      d5        Z)e	j.                  j7                  dd      d6        Z*y# e$ r e	j.                  j1                  d      ZY w xY w)7    N)datedatetime)mock)pyplot)Gcf)_c_internal_utils)QtCore)QtGui)	QtWidgets)_formlayoutzNo usable Qt bindings<   QtAggT)skip_on_importerrorc                      t        j                   t        j                        } t        j                         }|j
                  j                  j                  j                          | t        j                  k(  sJ y N)	copyr   figspltfigurecanvasmanagerwindowclose)	init_figsfigs     k/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/matplotlib/tests/test_backend_qt.pytest_fig_closer      sU     		#((#I **,C JJ##%        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                 T  	
 ddl m
m	 t        j                  dk(  r8|6|j                  dd      }|j                  dd      }|j                  dd      }d	j                  j                  j                  |D ]%  }t        	j                  j                  |      z  '  G 	
fd	d
      }|j                  t        j                  dfd       fd}t        j                         j                  }|j!                  d|       |j#                   |              |k(  sJ y)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cmdr0   metac                   "    e Zd Zd Z fdZy) test_correct_key.<locals>._Eventc                      y)NF )selfs    r   isAutoRepeatz-test_correct_key.<locals>._Event.isAutoRepeatv   s    ur   c                 P     t        j                  j                              S r   )getattrQtKey)rF   r	   r=   qt_keys    r   keyz$test_correct_key.<locals>._Event.keyw   s    ggfiimmV&DEEr   N)__name__
__module____qualname__rG   rM   )r	   r=   rL   s   r   _EventrC   u   s	    ,Er   rQ   keyboardModifiersc                     S r   rE   )rF   qt_mods    r   <lambda>z"test_correct_key.<locals>.<lambda>z   s    V r   c                     | j                   y r   )rM   )eventresults    r   on_key_pressz&test_correct_key.<locals>.on_key_press|   s    r   key_press_event)matplotlib.backends.qt_compatr=   r	   sysplatformreplacerJ   KeyboardModifier
NoModifierrI   setattrr   QApplicationr   r   r   mpl_connectkeyPressEvent)r9   rL   qt_modsanswermonkeypatchmodrQ   rY   	qt_canvasr	   r=   rT   rX   s    `       @@@@r   test_correct_keyrj   /   s    v >
||xF$6.	51/FYY''22F ;'&))44c::;F F 	..0C+- 

##I+\:FH%Vr   c                  H  	
 d} t        j                  |       5 	d	_        t        j                  dd      }|j
                  

j                          	
fd}
j                  j                          
j                          
j                          
j                         }g d}|D ]  \  }}}}| ||       |j                  |k(  sJ 
j                  j                  |k(  sJ 
j                  j                  |k(  sJ |j                         d	k(  sJ |j                         d
k(  sJ 
j                         dk(  sJ |j!                         dk(  j#                         rJ  t        j$                  |       |j                  dk(  sJ 	 ddd       y# 1 sw Y   yxY w)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                 (   | _         j                         j                         }t        d t	        j
                         j                  dd      d d D              }|dk\  rVt        j                  j                  |t	        j                  t        j                  j                  j                               n)|j                         j                  j                  d       j                          j!                          j"                  | k(  sJ y )Nc              3   2   K   | ]  }t        |        y wr   )int).0xs     r   	<genexpr>zQtest_device_pixel_ratio_change.<locals>.set_device_pixel_ratio.<locals>.<genexpr>   s     #XqCF#Xs   .rn   )   ry   `   )return_valuer   windowHandletupler	   qVersionsplitQCoreApplication	sendEventQEventTypeDevicePixelRatioChangescreenlogicalDotsPerInchChangedemitdrawflush_eventsdevice_pixel_ratio)ratior   current_versionpri   s      r   set_device_pixel_ratioz>test_device_pixel_ratio_change.<locals>.set_device_pixel_ratio   s    "AN%%'446F##XFOO4E4K4KCQR4STVUV4W#XXO&(''11MM&--"4"4"K"KLN 99>>rBNN""$ //5888r   ))Nh      )rl   r   r   r   )rn      i  i  )g      ?   i  r   NX  r   )r   r   )r   patchr{   r   r   r   showr   r   r   sizerq   rendererwidthheightget_width_heightget_size_inchesallr   )propr   r   r   optionsr   rq   r   r   r   ri   s            @@r   test_device_pixel_ratio_changer      s    MD	D	 9QjjS1JJ		9, 	  ~~
 *1 	;%E3v &u- 77c>!>%%++u444%%,,666 ::<3&&&;;=C'''--/:==='')V388:::	;  			#ww#~~s9 9 9s   E
F%)FF!c                  V   t        j                         \  } }t        j                  dd       5  | j                  j
                  j                  j                         }|J || j                  j
                  j                  j                         k(  sJ 	 d d d        y # 1 sw Y   y xY w)N#matplotlib.backends.qt_compat._execc                      y r   rE   objs    r   rU   z"test_subplottool.<locals>.<lambda>       r   )r   subplotsr   r   r   r   toolbarconfigure_subplots)r   axtools      r   test_subplottoolr      s    llnGC	9;K	L Gzz!!))<<>szz))11DDFFFFG G Gs   A&BB(c                     t        j                         \  } }|j                  ddg       |j                  dgg       |j	                  t        d      t        d      t        d             t        j                  dd       5  | j                  j                  j                  j                          d d d        y # 1 sw Y   y xY w)N   rn   rl   )cr   c                      y r   rE   r   s    r   rU   z$test_figureoptions.<locals>.<lambda>   r   r   )r   r   plotimshowscatterranger   r   r   r   r   edit_parameters)r   r   s     r   test_figureoptionsr      s    llnGCGGQFOIIseJJuQxqU1XJ.	9;K	L 5

""2245 5 5s   /B<<Cc                 4   t        j                         \  }}|j                  dgg       | dz  }d}t        j                  |t        |      d f      5  |j                  j                  j                  j                         }|t        |      k(  sJ |j                         sJ 	 d d d        t        j                  |d      5  |j                  j                  j                  j                         }|J 	 d d d        y # 1 sw Y   ]xY w# 1 sw Y   y xY w)Nr   z
foobar.pngzCmatplotlib.backends.qt_compat.QtWidgets.QFileDialog.getSaveFileName)r{   )NN)r   r   r   r   r   strr   r   r   save_figureexists)tmp_pathr   r   expectedr   fnames         r   test_save_figure_returnr      s    llnGCIIse,&HPD	DHt'<	= !

""**668H%%%   ! 
D|	4 

""**668}} 	! ! s   AD3DDDc                  B   t        j                         \  } }t        ddd      t        ddd      g}|j                  ||       t	        j
                  dd       5  | j                  j                  j                  j                          d d d        y # 1 sw Y   y xY w)N  r   yearmonthdayrn   r   c                      y r   rE   r   s    r   rU   z7test_figureoptions_with_datetime_axes.<locals>.<lambda>   r   r   )
r   r   r   r   r   r   r   r   r   r   )r   r   xydatas      r   %test_figureoptions_with_datetime_axesr      s    llnGCd!+d!+F GGFF	9;K	L 5

""2245 5 5s   /BBc                  X   t        j                         \  } }| j                  j                          | j                  j                  j
                  }d\  }}| j                  ||       | j                  j                         |t        j                  d   z  k(  sJ | j                  j                         |t        j                  d   z  k(  sJ |j                         }|j                         }| j                  ||       |j                         |k(  sJ |j                         |k(  sJ y )N)rl   rn   z
figure.dpi)r   r   r   r   r   r   set_size_inchesr   
matplotlibrcParamsr   )r   r   r   wh	old_width
old_heights          r   test_double_resizer      s     llnGCJJOOZZ&&FDAq1::Z%8%8%F!FFFF::!j&9&9,&G"GGGGIJ1<<>Y&&&==?j(((r   c                      ddl m}  dfd}t        j                         \  }}||_         | |      }d|_        sJ y )Nr   )FigureCanvasQTAggFc                 >    | j                   j                          dy )NT)r   	draw_idle)r   stalecalleds     r   crashing_callbackz-test_canvas_reinit.<locals>.crashing_callback  s    

r   T)!matplotlib.backends.backend_qtaggr   r   r   stale_callbackr   )r   r   r   r   r   r   s        @r   test_canvas_reinitr     sA    CF
 llnGC*Cs#FCIM6r   c                  
   ddl m}   |         dt        ddd      fdt        ddd      fg}t	        j
                  |      }|j                          |j                         }|t        ddd      t        ddd      gk(  sJ y )	Nr   )_create_qAppzDatetime fieldr   rl      r   z
Date field)matplotlib.backends.backend_qtr   r   r   r   
FormWidgetsetupget)r   formwidgetvaluess       r   2test_form_widget_get_with_datetime_and_date_fieldsr     s    ;N 
8QB?@	tQB78D ##D)F
LLNZZ\Fd!,$aR(   r   c            
      ~   g } dD cg c]
  }|gd|df c}D ]  \  }}d }|D cg c]$  }t         j                  j                  |      r#|& }}t        j                  dk(  rt        j                         sd}nL|r!dj                  dj                  |            }n)|d   d	k(  r!t        j                  j                  d
      rd}g }|r5|j                  t        j                  j                  d| d|              | j                  t        j                   ||t#        |                    | S c c}w c c}w )N)PyQt6PySide6PyQt5PySide2qtagg)
MPLBACKENDQT_API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)	importlibutil	find_specr\   r]   r   display_is_validformatjoinosenvironr   appendpytestmarkskipparamr   )envsqt_apidepsenvr   depmissingr;   s           r   _get_testable_qt_backendsr  1  s,   D C Xg@A A	c "&L3inn.F.Fs.K3LLLLG#%668>F,33DIIg4FGF(*rzz~~j/I4FLL))"3%y9 * ; <FLLEc#h?@#A$ K%
 Ms   D5$D:D:c                     ddl m}  t        j                          d fd}t        j
                  j                  d|       t        j                  t        j                        }d }t        j                  t        j                  |       	 t        j                  j                  j                  j                          |k7  sJ t        j                  t        j                        |k(  sJ t        j                  t        j                   fD ]  }t        j
                  j                  d|       t        j                  t        j                  |       | j                          |k(  sJ t        j                  t        j                        |k(  rJ  	 t        j                  t        j                  |       y # t        j                  t        j                  |       w xY w)Nr   )_BackendQT5c                      t        j                  t         j                         t        j                  j                          y r   )signal	getsignalSIGINTr	   r   exit)event_loop_handlers   r   fire_signal_and_quitz6test_fig_sigint_override.<locals>.fire_signal_and_quitR  s.     $--fmm< 	$$&r   c                      y r   rE   )signumframes     r   custom_handlerz0test_fig_sigint_override.<locals>.custom_handlera  s    r   )matplotlib.backends.backend_qt5r  r   r   r	   QTimer
singleShotr
  r  r  r   backends
backend_qt
_BackendQTmainloopSIG_DFLSIG_IGN)r  r  original_handlerr  r  s       @r   test_fig_sigint_overrider  H  s^   ;JJL ' MMQ 45 ''6 MM&--07 	&&11::< "^333 ..@@@  &~~v~~> 	ENMM$$Q(<=MM&--8  "%777##FMM2nDDD	E 	fmm%56fmm%56s   DF= F= =&G#c                  *    ddl m}   | ddddd       y )Nr   ipython_in_subprocessqtr   r   r:   ))      )r#     )   r   )matplotlib.testingr!  r   s    r   test_ipythonr(    s    8$'GX VWr   )+r   r   r   r
  r\   r   r   unittestr   r   r   r   r   matplotlib._pylab_helpersr   r   r[   r	   r
   r   matplotlib.backends.qt_editorr   ImportErrorr   r   
pytestmark_test_timeoutr9   r   parametrizer   rj   r   r   r   r   r   r   r   r   r  r  r(  rE   r   r   <module>r0     sl     	  
 #    $ ) (;4379
  W$7! 8!" 	?#S)	"c	$%23	

 
r@A	-9	&'4>@	
 
R	"k*	
+6	;  *V FLLkk!!(!EG FLLkk!!'t!DF%  W*h F W$7@ 8@F W$7G 8G W$75 85 W$7 8 W$75 85 W$7) 8)& W$7 8$ X48 9". W$757 857p W$7X 8XY  ;!!"9:J;s   J2 2 KK