
    g2                        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Ze	j4                  d        Ze	j,                  j9                  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,                  j9                  d)d      *       e	j>                  de	j,                  j9                  dd      *      g      d+               Z e	j,                  j9                  dd      d,        Z!e	j,                  j9                  dd      d-        Z"e	j,                  j9                  dd      d.        Z#e	j,                  j9                  dd      d/        Z$e	j,                  j9                  dd      d0        Z%e	j,                  j9                  dd      d1        Z&e	j,                  j9                  dd      d2        Z'e	j,                  j9                  d)d      d3        Z(d4 Z)e	j,                  j9                  dd      d5        Z*e	j,                  j9                  dd      d6        Z+y# e$ r e	j,                  j/                  d
      ZY w xY w)7    N)datedatetime)mock)pyplot)Gcf)_c_internal_utils)QtGui)	QtWidgets)_formlayoutzNo usable Qt bindings<   c                     ddl m} |S )Nr   )QtCore)matplotlib.backends.qt_compatr   )requestr   s     ]/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/matplotlib/tests/test_backend_qt.pyqt_corer      s
    4M    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     r   test_fig_closer"   "   sU     		#((#I **,C JJ##%    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_keyr1   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cmdr4   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.isAutoRepeat{   s    ur   c                 P     t        j                  j                              S r   )getattrQtKey)rJ   r   rA   qt_keys    r   keyz$test_correct_key.<locals>._Event.key|   s    ggfiimmV&DEEr   N)__name__
__module____qualname__rK   rQ   )r   rA   rP   s   r   _EventrG   z   s	    ,Er   rU   keyboardModifiersc                     S r   rI   )rJ   qt_mods    r   <lambda>z"test_correct_key.<locals>.<lambda>   s    V r   c                     | j                   y r   )rQ   )eventresults    r   on_key_pressz&test_correct_key.<locals>.on_key_press   s    r   key_press_event)r   rA   r   sysplatformreplacerN   KeyboardModifier
NoModifierrM   setattrr
   QApplicationr   r   r   mpl_connectkeyPressEvent)r=   r   rP   qt_modsanswermonkeypatchmodrU   r]   	qt_canvasr   rA   rX   r\   s     `       @@@@r   test_correct_keyrm   4   s    v >
||xF$6.	51/FYY''22F ;'&))44c::;F F 	..0C+- 

##I+\:FH%Vr   c                     d} t        j                  |       5 d_        t        j                  dd      }|j
                  j                          fd}j                  j                          j                         }j                         j                         j                          |d       |j                  dk(  sJ j                  j                  dk(  sJ j                  j                  d	k(  sJ |j                         d
k(  sJ |j                         dk(  sJ j!                         dk(  sJ |j#                         dk(  j%                         sJ  |d       |j                  dk(  sJ j                  j                  dk(  sJ j                  j                  dk(  sJ |j                         d
k(  sJ |j                         dk(  sJ j!                         dk(  sJ |j#                         dk(  j%                         sJ  |d       |j                  dk(  sJ j                  j                  dk(  sJ j                  j                  dk(  sJ |j                         d
k(  sJ |j                         dk(  sJ j!                         dk(  sJ |j#                         dk(  j%                         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                  d       j                          j	                          j
                  | k(  sJ y )N`   )return_valuelogicalDotsPerInchChangedemitdrawflush_eventsdevice_pixel_ratio)ratioprl   screens    r   set_device_pixel_ratioz>test_device_pixel_ratio_change.<locals>.set_device_pixel_ratio   sL    "AN ,,11"5NN""$ //5888r   ih  i  i  X     )r   r   rq   i  i  g      ?   i  N)r   patchrw   r   r   r   showr   sizer   windowHandler   rt   rendererwidthheightget_width_heightget_size_inchesall)propr!   r   r   r~   rl   r   s       @@@r   test_device_pixel_ratio_changer      s    MD	D	 >7QjjS1JJ		9 	 ~~!!#00299;q! ww#~~!!''4///!!((C/// zz|s"""{{}###))+z999##%/44666q! ww#~~!!''4///!!((C/// zz|s"""{{}###))+z999##%/44666s# ww#~~!!''3...!!((C/// zz|s"""{{}###))+z999##%/44666}>7 >7 >7s   J+KKc                      t        j                         \  } }t        j                  dd       5  | j                  j
                  j                  j                          d d d        y # 1 sw Y   y xY w)N#matplotlib.backends.qt_compat._execc                      y r   rI   objs    r   rY   z"test_subplottool.<locals>.<lambda>       r   )r   subplotsr   r   r   r   toolbarconfigure_subplotsr!   axs     r   test_subplottoolr      sR    llnGC	9;K	L 8

""5578 8 8s   /A''A0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   rq   ro   )cr   c                      y r   rI   r   s    r   rY   z$test_figureoptions.<locals>.<lambda>   r   r   )r   r   plotimshowscatterranger   r   r   r   r   edit_parametersr   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                     t        j                         \  } }|j                  dgg       d}t        j                  |d      5  | j
                  j                  j                  j                         }t        j                  d       |dk(  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   zCmatplotlib.backends.qt_compat.QtWidgets.QFileDialog.getSaveFileName)
foobar.pngN)rw   r   )NN)r   r   r   r   r   r   r   r   save_figureosremove)r!   r   r   fnames       r   test_save_figure_returnr      s    llnGCIIsePD	D';	< %

""**668
		,$$$% 
D|	4 

""**668}} 	% % s   AC,/3C8,C58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dayrq   r   c                      y r   rI   r   s    r   rY   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)ro   rq   z
figure.dpi)r   r   r   rz   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   ro      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joinr   environr   appendpytestmarkskipparamstr)envsqt_apidepsenvr   depmissingr?   s           r   _get_testable_qt_backendsr   8  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} 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 ]  } 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                         j                  j	                          y r   )signal	getsignalSIGINTQCoreApplicationexit)event_loop_handlerr   s   r   fire_signal_and_quitz6test_fig_sigint_override.<locals>.fire_signal_and_quitY  s.     $--fmm< 	  %%'r   c                      y r   rI   )signumframes     r   custom_handlerz0test_fig_sigint_override.<locals>.custom_handlerh  s    r   )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   s   `    @r   test_fig_sigint_overrider  O  s^   ;JJL ( NNa!56 ''6 MM&--07 	&&11::< "^333 ..@@@  &~~v~~> 	ENNN%%a)=>MM&--8  "%777##FMM2nDDD	E 	fmm%56fmm%56s   DF7 F7 7&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
   matplotlib.backends.qt_editorr   ImportErrorr   r   
pytestmark_test_timeoutfixturer   r=   r"   parametrizer   rm   r   r   r   r   r   r   r   r   r   r  r  rI   r   r   <module>r      s     	  
 #    $ ) (;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E7 8E7P W$78 88 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i  ;!!"9:J;s   J> > K"!K"