ó
    “’¤j3  ã                   óT  • S SK r S SKrS SKrS SKrS SKrS SKJrJr  S SKJr  S SK	r	S SK
r
S SK
Jr  S SKJr  S SK
Jr   S SKJr  S SKJr  S S	KJr  S S
KJr  Sr\	R.                  R7                  SSS9S 5       r\	R.                  R;                  SSS/S4S/ S4SS/S4SS/S4S/ S4SS/S4SS/S4S/ S QS!4S"/ S4S#/ S$4S#S/S%4// S&QS'9\	R.                  R;                  S(\	R<                  " S)\	R.                  R7                  S)SS9S*9\	R<                  " S\	R.                  R7                  SSS9S*9/5      S+ 5       5       r\	R.                  R7                  SSS9S, 5       r \	R.                  R7                  SSS9S- 5       r!\	R.                  R7                  SSS9S. 5       r"\	R.                  R7                  SSS9S/ 5       r#\	R.                  R7                  SSS9S0 5       r$\	R.                  R7                  SSS9S1 5       r%\	R.                  R7                  SSS9S2 5       r&\	R.                  R7                  S)SS9S3 5       r'S4 r(\	R.                  R7                  SSS9S5 5       r)\	R.                  R7                  SSS9S6 5       r*g! \ a    \	R.                  R1                  S5      r GNPf = f)7é    N)ÚdateÚdatetime)Úmock)Úpyplot)ÚGcf)Ú_c_internal_utils)ÚQtCore)ÚQtGui)Ú	QtWidgets)Ú_formlayoutzNo usable Qt bindingsé<   ÚQtAggT)Úskip_on_importerrorc                  óþ   • [         R                   " [        R                  5      n [        R                  " 5       nUR
                  R                  R                  R                  5         U [        R                  :X  d   eg ©N)	Úcopyr   ÚfigsÚpltÚfigureÚcanvasÚmanagerÚwindowÚclose)Ú	init_figsÚfigs     Ú®C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\matplotlib/tests/test_backend_qt.pyÚtest_fig_closer      sU   € ô —	’	œ#Ÿ(™(Ó#€Iô �*Š*‹,€Cð ‡J�J×Ñ×Ñ×#Ñ#Ô%ð œŸ™Ó Ð Ñ ó    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                 óf  ^^	^
^^• SSK Jm
Jm	  [        R                  S:X  a9  Ub6  UR                  SS5      nUR                  SS5      nUR                  SS5      nSmT	R                  R                  R                  mU H&  nT[        T	R                  R                  U5      -  mM(      " U	U
U4S	 jS
5      nUR                  [        R                  SU4S j5        U4S jn[        R                  " 5       R                  nUR!                  SU5        UR#                  U" 5       5        TU:X  d   eg)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                   ó,   >• \ rS rSrS rU UU4S jrSrg)Ú test_correct_key.<locals>._Eventéu   c                 ó   • g)NF© )Úselfs    r   ÚisAutoRepeatÚ-test_correct_key.<locals>._Event.isAutoRepeatv   s   €  ur   c                 óP   >• T" [        TR                  R                  T5      5      $ r   )ÚgetattrÚQtÚKey)rG   r	   r=   Úqt_keys    €€€r   ÚkeyÚ$test_correct_key.<locals>._Event.keyw   s   ø€ ™g¤g¨f¯i©i¯m©m¸VÓ&DÓEÐEr   rF   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rH   rO   Ú__static_attributes__)r	   r=   rN   s   €€€r   Ú_EventrC   u   s   ø† Ú,ßEÒEr   rV   ÚkeyboardModifiersc                 ó   >• T$ r   rF   )rG   Úqt_mods    €r   Ú<lambda>Ú"test_correct_key.<locals>.<lambda>z   s   ø€ ¡Vr   c                 ó   >• U R                   mg r   )rO   )ÚeventÚresults    €r   Úon_key_pressÚ&test_correct_key.<locals>.on_key_press|   s   ø€ à—‘‰r   Úkey_press_event)Úmatplotlib.backends.qt_compatr=   r	   ÚsysÚplatformÚreplacerL   ÚKeyboardModifierÚ
NoModifierrK   Úsetattrr   ÚQApplicationr   r   r   Úmpl_connectÚkeyPressEvent)r9   rN   Úqt_modsÚanswerÚmonkeypatchÚmodrV   r_   Ú	qt_canvasr	   r=   rY   r^   s    `       @@@@r   Útest_correct_keyrq   /   sú   ü€ ÷v >ä
‡|�|�xÓ FÑ$6Ø—‘ ¨Ó.ˆØ—‘ 	¨5Ó1ˆØ—‘ ¨Ó/ˆØ€FØ�Y‰Y×'Ñ'×2Ñ2€FÛˆØ”'˜&Ÿ)™)×4Ñ4°cÓ:Ñ:Šñ ÷Fö Fð ×Ñœ	×.Ñ.Ð0CÜ+ô-õô —
’
“×#Ñ#€IØ×ÑÐ+¨\Ô:Ø×Ñ™F›HÔ%Ø�VÓÐÑr   c                  ón  ^	^
• Sn [         R                  " U 5       m	ST	l        [        R                  " SSS9nUR
                  m
T
R                  5         U	U
4S jnT
R                  R                  5         T
R                  5         T
R                  5         T
R                  5       n/ SQnU HÅ  u  pVpxUb  U" U5        UR                  U:X  d   eT
R                  R                  U:X  d   eT
R                  R                  U:X  d   eUR                  5       S	:X  d   eUR                  5       S
:X  d   eT
R                  5       S:X  d   eUR!                  5       S:H  R#                  5       (       a  MÅ   e   [        R$                  " U5        UR                  S:X  d   e SSS5        g! , (       d  f       g= f)zq
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                 ó0  >• U Tl         TR                  5       R                  5       n[        S [        R
                  " 5       R                  SS5      S S  5       5      nUS:¼  aW  [        R                  R                  U[        R                  " [        R                  R                  R                  5      5        O)UR                  5       R                  R                  S5        TR                  5         TR!                  5         TR"                  U :X  d   eg )Nc              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr   )Úint)Ú.0Úxs     r   Ú	<genexpr>ÚQtest_device_pixel_ratio_change.<locals>.set_device_pixel_ratio.<locals>.<genexpr>™   s   é € Ð#XÒ4W¨q¤C¨§F FÒ4Wùs   ‚Ú.ru   )é   r�   é`   )Úreturn_valuer   ÚwindowHandleÚtupler	   ÚqVersionÚsplitÚQCoreApplicationÚ	sendEventÚQEventÚTypeÚDevicePixelRatioChangeÚscreenÚlogicalDotsPerInchChangedÚemitÚdrawÚflush_eventsÚdevice_pixel_ratio)Úratior   Úcurrent_versionÚprp   s      €€r   Úset_device_pixel_ratioÚ>test_device_pixel_ratio_change.<locals>.set_device_pixel_ratio•   sÓ   ø€ Ø"ˆAŒNà×%Ñ%Ó'×4Ñ4Ó6ˆFÜ#Ñ#X´F·O²OÓ4E×4KÑ4KÈCÐQRÓ4SÐTVÐUVÑ4WÓ#XÓXˆOØ &Ó(Ü×'Ñ'×1Ñ1ØÜ—M’M¤&§-¡-×"4Ñ"4×"KÑ"KÓLõNð —‘“×9Ñ9×>Ñ>¸rÔBà�N‰NÔØ×"Ñ"Ô$ð ×/Ñ/°5Ó8Ð8Ñ8r   ))Néh  é  éÐ  )rs   r˜   r™   rš   )ru   éð   i°  ià  )g      ø?é´   i„  r˜   NéX  r›   )r�   r›   )r   Úpatchrƒ   r   r   r   Úshowr   r�   r‘   Úsizerx   ÚrendererÚwidthÚheightÚget_width_heightÚget_size_inchesÚallr   )Úpropr   r–   r    Úoptionsr“   rx   r¢   r£   r•   rp   s            @@r   Útest_device_pixel_ratio_changer©   †   sx  ù€ ð M€DÜ	�Š�DÔ	˜QØˆŒä�jŠj ¨SÑ1ˆØ—J‘Jˆ	Ø�‰Ôö	9ð, 	×Ñ×ÑÔ Ø�‰ÔØ×ÑÔ Ø�~‰~Óˆò
ˆó *1Ñ%ˆE˜ØÑ Ù& uÔ-ð —7‘7˜c“>Ð!�>Ø×%Ñ%×+Ñ+¨uÓ4Ð4Ð4Ø×%Ñ%×,Ñ,°Ó6Ð6Ð6ð —:‘:“< 3Ó&Ð&Ð&Ø—;‘;“= CÓ'Ð'Ð'Ø×-Ñ-Ó/°:Ó=Ð=Ð=Ø×'Ñ'Ó)¨VÑ3×8Ñ8×:Ó:Ð:Ð:ñ *1ô  	�	Š	�#ŒØ�w‰w˜#‹~Ð‰~÷s 
×	Ö	ús   ›EF&Å0,F&Æ&
F4c                  ód  • [         R                  " 5       u  p[        R                  " SS 5         U R                  R
                  R                  R                  5       nUc   eX R                  R
                  R                  R                  5       :X  d   e S S S 5        g ! , (       d  f       g = f)Nú#matplotlib.backends.qt_compat._execc                 ó   • g r   rF   ©Úobjs    r   rZ   Ú"test_subplottool.<locals>.<lambda>Í   ó   € Àtr   )r   Úsubplotsr   rž   r   r   ÚtoolbarÚconfigure_subplots)r   ÚaxÚtools      r   Útest_subplottoolr¶   Ê   s{   € ä�lŠl‹n�G€CÜ	�ŠÐ9Ñ;KÕ	LØ�z‰z×!Ñ!×)Ñ)×<Ñ<Ó>ˆØÑÐÐØ—z‘z×)Ñ)×1Ñ1×DÑDÓFÓFÐFÑF÷ 
M×	LÖ	Lús   °A'B!Â!
B/c                  ó–  • [         R                  " 5       u  pUR                  SS/5        UR                  S//5        UR	                  [        S5      [        S5      [        S5      S9  [        R                  " SS 5         U R                  R                  R                  R                  5         S S S 5        g ! , (       d  f       g = f)Né   ru   rs   )Úcr«   c                 ó   • g r   rF   r­   s    r   rZ   Ú$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…   € ä�lŠl‹n�G€CØ‡G�GˆQ�ˆF„OØ‡I�I�ˆsˆeÔØ‡J�JŒu�Q‹xœ˜q›¤U¨1£X€JÑ.Ü	�ŠÐ9Ñ;KÕ	LØ�
‰
×Ñ×"Ñ"×2Ñ2Ô4÷ 
M×	LÖ	Lús   Â/B:Â:
Cc                 óN  • [         R                  " 5       u  pUR                  S//5        U S-  nSn[        R                  " U[        U5      S 4S9   UR                  R                  R                  R                  5       nU[        U5      :X  d   eUR                  5       (       d   e S S S 5        [        R                  " USS9   UR                  R                  R                  R                  5       nUb   e S S S 5        g ! , (       d  f       Na= f! , (       d  f       g = f)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ß   € ä�lŠl‹n�G€CØ‡I�I�ˆsˆeÔØ˜,Ñ&€HØP€DÜ	�Š�D¬¨H«°tÐ'<Ó	=Ø—
‘
×"Ñ"×*Ñ*×6Ñ6Ó8ˆØœ˜H›Ó%Ð%Ð%Ø�‰× Ñ Ð Ñ ÷ 
>ô 
�Š�D |Ó	4Ø—
‘
×"Ñ"×*Ñ*×6Ñ6Ó8ˆØ‰}Ð‰}÷ 
5Ð	4÷	 
>Õ	=ú÷ 
5Õ	4ús   ÁADÃ4DÄ
DÄ
D$c                  ó@  • [         R                  " 5       u  p[        SSSS9[        SSSS9/nUR                  X"5        [        R
                  " SS 5         U R                  R                  R                  R                  5         S S S 5        g ! , (       d  f       g = f)Néå  r¸   ©ÚyearÚmonthÚdayru   r«   c                 ó   • g r   rF   r­   s    r   rZ   Ú7test_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Ó   ì   su   € ä�lŠl‹n�G€Cä�d !¨Ñ+Ü�d !¨Ñ+ð€Fð ‡G�GˆFÔÜ	�ŠÐ9Ñ;KÕ	LØ�
‰
×Ñ×"Ñ"×2Ñ2Ô4÷ 
M×	LÖ	Lús   Á/BÂ
Bc                  óZ  • [         R                  " 5       u  pU R                  R                  5         U R                  R                  R
                  nSu  p4U R                  X45        U R                  R                  5       U[        R                  S   -  :X  d   eU R                  R                  5       U[        R                  S   -  :X  d   eUR                  5       nUR                  5       nU R                  X45        UR                  5       U:X  d   eUR                  5       U:X  d   eg )N)rs   ru   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ë   € ô �lŠl‹n�G€CØ‡J�J‡O�OÔØ�Z‰Z×Ñ×&Ñ&€Fà�D€AØ×Ñ˜ÔØ�:‰:×ÑÓ ¤Z×%8Ñ%8¸Ñ%FÑ!FÓFÐFÐFØ�:‰:×ÑÓ !¤j×&9Ñ&9¸,Ñ&GÑ"GÓGÐGÐGà—‘“€IØ—‘“€Jà×Ñ˜ÔØ�<‰<‹>˜YÓ&Ð&Ð&Ø�=‰=‹?˜jÓ(Ð(Ñ(r   c                  óŒ   ^• SSK Jn   SmU4S jn[        R                  " 5       u  p#Xl        U " U5      nSUl        T(       d   eg )Nr   )ÚFigureCanvasQTAggFc                 ó>   >• U R                   R                  5         Smg )NT)r   Ú	draw_idle)r   ÚstaleÚcalleds     €r   Úcrashing_callbackÚ-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ç     s=   ø€ åCà€Fõô
 �lŠl‹n�G€CØ*Ôá˜sÓ#€FØ€C„IÞ€M‰6r   c                  óö   • SSK Jn   U " 5         S[        SSSS94S[        SSSS94/n[        R
                  " U5      nUR                  5         UR                  5       nU[        SSSS9[        SSSS9/:X  d   eg )	Nr   )Ú_create_qAppzDatetime fieldrË   rs   é   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¨°Q¸BÑ?Ð@Ø	”t ¨Q°BÑ7Ð8ð€Dô ×#Ò# DÓ)€FØ
‡L�L„NØ�Z‰Z‹\€FØÜ�d !¨Ñ,Ü�$˜a RÑ(ðó ð ñ r   c            
      óº  • / n S Vs/ s H  nU/SUS.4PM     sn GH0  u  p#S nU Vs/ s H+  n[         R                  R                  U5      (       a  M)  UPM-     nn[        R                  S:X  a  [
        R                  " 5       (       d  SnOWU(       a!  SR                  SR                  U5      5      nO/US   S	:X  a&  [        R                  R                  S
5      (       a  Sn/ nU(       a2  UR                  [        R                  R                  SU SU 3S95        U R                  [        R                   " X7[#        U5      S95        GM3     U $ s  snf s  snf )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_specrc   rd   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óâB�ð ˆX g¸Ñ@ÓAÙBõ‰	ˆð ˆÙ"&ÓL¢$˜3¬i¯n©n×.FÑ.FÀs×.K—3¡$ˆÐLÜ�L‰L˜GÓ#Ü%×6Ò6×8Ñ8Ø>‰FÞØ,×3Ñ3°D·I±I¸gÓ4FÓG‰FØ�Ñ (Ó*¬r¯z©z¯~©~¸j×/IÑ/IØ4ˆFØˆÞØ�L‰LœŸ™×)Ñ)Ø" 3 % y°°Ð9ð *ð ;ô <à�‰”F—L’L ´c¸#³hÑ?×@ñ#ð$ €Kùò%ùò
 Ms   ‡E¨(EÁEc                  óè  ^• SSK Jn   [        R                  " 5         S mU4S jn[        R
                  R                  SU5        [        R                  " [        R                  5      nS n[        R                  " [        R                  U5         [        R                  R                  R                  R                  5         TU:w  d   e[        R                  " [        R                  5      U:X  d   e[        R                  [        R                   4 HŠ  n[        R
                  R                  SU5        [        R                  " [        R                  U5        U R                  5         TU:X  d   e[        R                  " [        R                  5      U:X  a  MŠ   e   [        R                  " [        R                  U5        g ! [        R                  " [        R                  U5        f = f)Nr   )Ú_BackendQT5c                  óŠ   >• [         R                  " [         R                  5      m [        R                  R                  5         g r   )ÚsignalÚ	getsignalÚSIGINTr	   rˆ   Úexit)Úevent_loop_handlers   €r   Úfire_signal_and_quitÚ6test_fig_sigint_override.<locals>.fire_signal_and_quitR  s.   ø€ ô $×-Ò-¬f¯m©mÓ<Ðô 	×Ñ×$Ñ$Õ&r   c                 ó   • g r   rF   )ÚsignumÚframes     r   Úcustom_handlerÚ0test_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  sW  ø€ å;ä‡J‚J„Lð Ðõ'ô ‡M�M×Ñ˜QÐ 4Ô5ô ×'Ò'¬¯©Ó6Ðòô ‡M‚M”&—-‘- Ô0ð7ô 	×Ñ×&Ñ&×1Ñ1×:Ñ:Ô<ð " ^Ó3Ð3Ð3ô ×Ò¤§¡Ó.°.Ó@Ð@Ð@ô  &Ÿ~™~¬v¯~©~Ó>ˆNÜ�M‰M×$Ñ$ QÐ(<Ô=Ü�MŠMœ&Ÿ-™-¨Ô8à× Ñ Ô"à%¨Ó7Ð7Ð7Ü×#Ò#¤F§M¡MÓ2°nÕDÐDÐDñ ?ô 	�Š”f—m‘mÐ%5Õ6øŒ�Š”f—m‘mÐ%5Õ6ús   ÂD
G
 Æ G
 Ç
'G1c                  ó*   • SSK Jn   U " SSSSS.5        g )Nr   ©Úipython_in_subprocessÚqtrø   r   r:   ))é   é   )r2  é   )é   r   )Úmatplotlib.testingr0  r/  s    r   Útest_ipythonr7  �  s   € å8Ù˜$¨'¸GÈXÑ VÕWr   )+r   r   r  r  rc   r   r   Úunittestr   r	  rÖ   r   r   Úmatplotlib._pylab_helpersr   r   rb   r	   r
   r   Úmatplotlib.backends.qt_editorr   ÚImportErrorr
  r  Ú
pytestmarkÚ_test_timeoutr9   r   Úparametrizer  rq   r©   r¶   rÁ   rÉ   rÓ   rÜ   rç   rò   r  r-  r7  rF   r   r   Ú<module>r?     sh  ðÛ Û Û 	Û Û 
ç #Ý ã ã Ý $Ý )Ý (ð;Ý4Ý3Ý7Ý9ð
 €ð ‡�×Ñ�W°$ÐÐ7ñ!ó 8ð!ð" ‡�×ÑØà	�?Ð# SÐ)Ø	�"�cÐØ	Ð$Ð%¨Ð2àØÐØ3ð	
ð
 
�rÐ@ÐAØ	˜˜¨-Ð9Ø	Ð&Ð'¨Ð4àÚ>Ø@ð	
ð 
�R˜ÐØ	˜"˜kÐ*àØÐØð	
ð+ò6	ð; ð *ðV ‡�×Ñ˜à
‡L‚LØØ�k‰k×!Ñ! (ÀÐ!ÐEñGð ‡L‚LØØ�k‰k×!Ñ! '¸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ðð$ ‡�×Ñ�X°4ÐÐ8ñó 9ðò"ð. ‡�×Ñ�W°$ÐÐ7ñ57ó 8ð57ðp ‡�×Ñ�W°$ÐÐ7ñXó 8ñXøðY ó ;Ø—‘×!Ñ!Ð"9Ó:ƒJð;ús   ¾J Ê!J'Ê&J'