Ë
    íÍ:jé)  ã                   ó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 d dlZd dl	m
Z
 d dlmZ dZdd„Z ed¬«      d	„ «       Z ed
¬«      d„ «       Zej"                  j%                   ej&                  «       dk7  d¬«      ej"                  j)                  d¬«       ed
¬«      d„ «       «       «       Zej"                  j)                  d¬«       ed ¬«      d„ «       «       Z ed¬«      d„ «       Z ed¬«      d„ «       Z ed
¬«      d„ «       Z ed¬«      d„ «       Z ed
¬«      d„ «       Zy)é    N)Úpatch)Ú_c_internal_utils)Úsubprocess_run_helperé<   c                 ó¬  ‡ ‡— ‰€t        j                  t        ‰ «      S dt        j                  v r‰S t
        j                  j                  t        j                  j                  d«       d¬«      t
        j                  j                  t        j                  dk(  xr t        j                  «        d¬«      t
        j                  j                  dt        j                  v xs d	t        j                  v xr+ t        j                  d
k(  xr t        j                   dd dk  d¬«      t        j"                  ‰«      ˆˆ fd„«       «       «       «       }|S )zù
    A decorator to run *func* in a subprocess and assert that it prints
    "success" *success_count* times and nothing on stderr.

    TkAgg tests seem to have interactions between tests, so isolate each test
    in a subprocess. See GH#18261
    NÚMPL_TEST_ESCAPE_HATCHÚtkinterzmissing tkinter©ÚreasonÚlinuxz$DISPLAY is unsetÚTF_BUILDÚGITHUB_ACTIONÚdarwiné   )é   é   z%Tk version mismatch on Azure macOS CIc                  ó&  •‡— t        j                  d«       	 t        ‰t        t	        dd¬«      ¬«      } g d¢}| j
                  j                  «       D �‡cg c]  Št        ˆfd„|D «       «      r‰‘Œ c}rJ ‚| j                  j                  d«      ‰k(  sJ ‚y c c}w # t        j                  $ r t        j                  d	«       Y y t        j                  $ r5}t        j                  d
t        |j
                  «      z   «       Y d }~y d }~ww xY w)Nr	   ÚTkAggÚ1)Ú
MPLBACKENDr   )ÚtimeoutÚ	extra_env)ÚOpenGLz!CFMessagePort: bootstrap_registerz%/usr/include/servers/bootstrap_defs.hc              3   ó&   •K  — | ]  }|‰v–— Œ
 y ­w©N© )Ú.0ÚmsgÚlines     €úu/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/matplotlib/tests/test_backend_tk.pyú	<genexpr>z7_isolated_tk_test.<locals>.test_func.<locals>.<genexpr>F   s   øè ø€ ÒH°3˜s¨$œÑHùs   ƒÚsuccesszSubprocess timed outz,Subprocess failed to test intended behavior
)ÚpytestÚimportorskipr   Ú_test_timeoutÚdictÚstderrÚ
splitlinesÚallÚstdoutÚcountÚ
subprocessÚTimeoutExpiredÚfailÚCalledProcessErrorÚstr)ÚprocÚignored_linesr   ÚeÚfuncÚsuccess_counts     ` €€r    Ú	test_funcz$_isolated_tk_test.<locals>.test_func"   sö   ù€ ô" 	×Ñ˜IÔ&ð	AÜ(Øœm´tØ&¸cô8CôDˆDòFˆMà)-¯©×)?Ñ)?Ó)A÷ J ÜÓH¸-ÔHÔHò ó Jð Jð Jà—;‘;×$Ñ$ YÓ/°=Ò@Ð@Ñ@ùòJøô ×(Ñ(ò 	0Ü�K‰KÐ.Ö/Ü×,Ñ,ò 	)Ü�K‰KÐGÜ˜aŸh™h›-ñ(÷ )ñ )ûð	)ús#   ™B ÁBÂ(DÃ	DÃ+DÄD)Ú	functoolsÚpartialÚ_isolated_tk_testÚosÚenvironr#   ÚmarkÚskipifÚ	importlibÚutilÚ	find_specÚsysÚplatformr   Úxdisplay_is_validÚxfailÚversion_infoÚwraps)r5   r4   r6   s   `` r    r9   r9      s1  ù€ ð €|Ü× Ñ Ô!2°MÓBÐBà¤"§*¡*Ñ,àˆä‡[�[×ÑÜ�N‰N×$Ñ$ YÓ/Ð/Ø ð ó ô ‡[�[×ÑÜ�‰˜ÑÒMÔ(9×(KÑ(KÓ(MÐ$MØ"ð ó ô ‡[�[×ÑØ	”r—z‘zÐ	!Ò	B _¼¿
¹
Ð%Bò 	DÜ�‰˜Ñ ò	DÜ%(×%5Ñ%5°b°qÐ%9¸GÑ%CØ6ð ó ô
 ‡_�_�TÓôAó óó	ó	ðAð2 Ðó    é   )r5   c            	      óÎ  — dd l m}  dd l}dd l}ddlm}m} | j                  «       \  }}|j                  j                  }|j                  d|j                  ¬«      }d}	|	D ]D  }
	 |j                  |j                  j                  «       t        |«      ||j                   d|
«       ŒF | j'                  |«       |j                  ||d«       y # t"        $ r t%        d«       Y Œ‚w xY w)Nr   )Ú_backend_tkÚ_tkagg)é   rL   rL   )Údtype))éÿÿÿÿr   r   r   )r   r   r   r   )é   rH   r   r   )r   r   rN   r   )r   r   r   r   )r   r   rO   rH   )r   rO   r   r   r"   )Úmatplotlib.pyplotÚpyplotÚnumpyÚ!matplotlib.backends.backend_tkaggÚmatplotlib.backendsrJ   rK   ÚsubplotsÚcanvasÚ_tkphotoÚonesÚuint8ÚblitÚtkÚ
interpaddrr0   ÚTK_PHOTO_COMPOSITE_OVERLAYÚ
ValueErrorÚprintÚclose)ÚpltÚnpÚ
matplotlibrJ   rK   ÚfigÚaxÚ
photoimageÚdataÚ	bad_boxesÚbad_boxs              r    Ú	test_blitrj   L   sÉ   € å#ÛÛ,ß7à�l‰l‹n�G€CˆØ—‘×$Ñ$€JØ�7‰7�9 B§H¡Hˆ7Ó-€Dð€Ið ò ˆð	Ø�K‰KØ—‘×(Ñ(Ó*¬C°
«O¸TØ×1Ñ1°<ÀõJðð ‡I�Iˆc„NØ×Ñ�Z  |Õ4øô ò 	Ü�)Öð	ús   Á%ACÃC$Ã#C$rO   c                  ó¾   ‡‡‡‡— dd l } dd lmŠ g Šˆˆˆfd„}ˆˆfd„Š| j                  «       Š‰j	                  d|«       ‰j                  «        ‰rt        d«       y y )Nr   c                  ó–   •— ‰j                  «        ‰j                  ddgddg«       ‰j                  «        ‰j                  d‰ «       y )NrO   r   r   é   r   )ÚfigureÚplotr`   Úafter)Úlegitimate_quitra   Úroots   €€€r    Údo_plotz;test_figuremanager_preserves_host_mainloop.<locals>.do_plotp   s9   ø€ Ø�
‰
ŒØ�‰�!�Q�˜!˜Q˜Ô Ø�	‰	ŒØ�
‰
�1�oÕ&rG   c                  óH   •— ‰ j                  «        ‰j                  d«       y ©NT)ÚquitÚappend)rr   r"   s   €€r    rq   zCtest_figuremanager_preserves_host_mainloop.<locals>.legitimate_quitv   s   ø€ Ø�	‰	ŒØ�‰�tÕrG   r"   )r	   rP   rQ   ÚTkrp   Úmainloopr_   )r	   rs   rq   ra   rr   r"   s     @@@@r    Ú*test_figuremanager_preserves_host_mainlooprz   j   sL   û€ ãÝ#Ø€Gö'õð �:‰:‹<€DØ‡J�Jˆq�'ÔØ‡M�M„OáÜˆiÕð rG   ÚCPythonzZPyPy does not support Tkinter threading: https://foss.heptapod.net/pypy/pypy/-/issues/1929r
   r   )Úrerunsc                  ób  ‡‡‡‡— dd l } dd lŠdd lmŠ dd l}ddlmŠ | j                  «       }‰j                  g d¢g d¢«       ˆˆˆˆfd„}|j                  «       Š|j                  |d¬«      }|j                  «        ‰j                  d¬«       ‰j                  «        |j                  «        y )	Nr   )Ú"_get_running_interactive_framework©rO   r   r   )rO   r   rm   c                  óª   •— d ‰ «       k(  s‰j                  d«       d ‰ «       k(  sŒ‰j                  «        ‰j                  «       rt        d«       y y )Nr[   g{®Gáz„?r"   )Úsleepr`   Úwaitr_   )r~   ra   Úshow_finished_eventÚtimes   €€€€r    Útargetz6test_figuremanager_cleans_own_mainloop.<locals>.target‘   sJ   ø€ ØÑ<Ó>Ò>Ø�J‰J�sŒOð Ñ<Ó>Ó>à�	‰	ŒØ×#Ñ#Ô%Ü�)Õð &rG   T)r…   Údaemon©Úblock)r	   r„   rP   rQ   Ú	threadingÚmatplotlib.cbookr~   rx   ro   ÚEventÚThreadÚstartÚshowÚsetÚjoin)	r	   r‰   rr   r…   Úthreadr~   ra   rƒ   r„   s	        @@@@r    Ú&test_figuremanager_cleans_own_mainloopr’   ‚   s‚   û€ ó ÛÝ#ÛÝCà�:‰:‹<€DØ‡H�HŠYš	Ô"÷ð $Ÿ/™/Ó+ÐØ×Ñ V°DÐÓ9€FØ
‡L�L„NØ‡H�H�4€HÔØ×ÑÔØ
‡K�K…MrG   c                  óÜ  — dd l } | j                  `| j                  `dd lm} |j                  «       }|j                  d¬«       |j                  «        |j                  j                  j                  «       }|€J ‚||j                  j                  j                  «       k(  sJ ‚|j                  j                  «       j                  d|j                  |«       |j                  d¬«       y )Nr   Fr‡   éd   T)r	   ÚMiscÚupdateÚupdate_idletasksrP   rQ   rn   rŽ   ÚdrawrV   ÚtoolbarÚconfigure_subplotsÚget_tk_widgetrp   r`   )r	   ra   rd   Útools       r    Útest_never_updater�       s¸   € ó Ø�‰ÐØ�‰Ð%å#Ø
�*‰*‹,€CØ‡H�H�5€HÔà‡H�H„JØ�:‰:×Ñ×0Ñ0Ó2€DØÐÐÐØ�3—:‘:×%Ñ%×8Ñ8Ó:Ò:Ð:Ð:à‡J�J×ÑÓ×$Ñ$ S¨#¯)©)°SÔ9ð ‡H�H�4€HÕrG   r   c                  óæ   ‡— dd l m}  ddlmŠ  G ˆfd„d‰«      }| j	                  «       }t        d«        ||j                  |j                  j                  j                  «       t        d«       y )Nr   )ÚNavigationToolbar2Tkc                   ób   •— e Zd ZW °j                  D � �cg c]  }|d   dv r|‘Œ c}} Zyc c}} w )ú)test_missing_back_button.<locals>.Toolbarr   )ÚHomeÚPanÚZoomN)Ú__name__Ú
__module__Ú__qualname__Ú	toolitems)r   ÚtrŸ   s   00€r    ÚToolbarr¡   ¿   s2   ø„ á 4× >Ñ >÷ 6˜1Ø�q‘TÐ4Ñ4ò ó 6‰	ùó 6s   –+rª   r"   )	rP   rQ   rS   rŸ   rn   r_   rV   ÚmanagerÚwindow)ra   rª   rd   rŸ   s      @r    Útest_missing_back_buttonr­   º   sQ   ø€ å#ÝFö6Ð&ô 6ð
 �*‰*‹,€CÜ	ˆ)ÔÙˆC�J‰J˜Ÿ
™
×*Ñ*×1Ñ1Ô2Ü	ˆ)ÕrG   c                  ó  — dd l m}  ddlm} | j	                  «       }d}|j                  |d¬«      5  |j                  j                  j                  j                  «       }t        j                  d«       |dk(  sJ ‚t        d«       d d d «       |j                  |d¬«      5  |j                  j                  j                  j                  «       }|�J ‚t        d«       d d d «       y # 1 sw Y   ŒcxY w# 1 sw Y   y xY w)Nr   )Úmockz$tkinter.filedialog.asksaveasfilenamez
foobar.png©Úreturn_valuer"   Ú )rP   rQ   Úunittestr¯   rn   r   rV   r«   r™   Úsave_figurer:   Úremover_   )ra   r¯   rd   ÚpropÚfnames        r    Útest_save_figure_returnr¸   Ê   sÙ   € å#ÝØ
�*‰*‹,€CØ1€DØ	�‰�D |ˆÓ	4ñ Ø—
‘
×"Ñ"×*Ñ*×6Ñ6Ó8ˆÜ
�	‰	�,ÔØ˜Ò$Ð$Ð$ÜˆiÔ÷	ð
 
�‰�D rˆÓ	*ñ Ø—
‘
×"Ñ"×*Ñ*×6Ñ6Ó8ˆØˆ}Ðˆ}ÜˆiÔ÷ð ÷ð ú÷
ð ús   ²AC*Â#>C6Ã*C3Ã6C?c                  ó2  ‡‡‡‡— dd l } dd lmŠ g Šˆˆˆˆfd„}| j                  «       Š‰j	                  «       Š‰j                  g d¢«       ‰j                  d‰j                  «       ‰j                  d|«       ‰j                  «        ‰rt        d«       y y )Nr   c                  ó  •— ‰j                   j                  «       } | j                  «       s| j                  «        | j	                  «       | k(  r‰j                  d«       ‰j                  «        ‰j                  «        y ru   )rV   r›   Úwinfo_viewableÚwait_visibilityÚfocus_lastforrw   r`   Údestroy)Útkcanvasrd   ra   rr   r"   s    €€€€r    Úcheck_focusz&test_canvas_focus.<locals>.check_focusá   s^   ø€ Ø—:‘:×+Ñ+Ó-ˆà×&Ñ&Ô(Ø×$Ñ$Ô&ð ×!Ñ!Ó# xÒ/Ø�N‰N˜4Ô Ø�	‰	ŒØ�‰�rG   r   r”   r"   )
r	   rP   rQ   rx   rn   ro   rp   rŽ   ry   r_   )r[   rÀ   rd   ra   rr   r"   s     @@@@r    Útest_canvas_focusrÁ   Û   sp   û€ ãÝ#Ø€G÷
ð �5‰5‹7€DØ
�*‰*‹,€CØ‡H�HŠYÔØ‡J�Jˆq�#—(‘(ÔØ‡J�Jˆs�KÔ Ø‡M�M„OáÜˆiÕð rG   c                  óà   ‡‡‡‡— dd l } ddlmŠmŠ ddlmŠ ddlmŠ | j                  «       }ˆˆˆˆfd„} ||«       t        d«       |j                  ddd	¬
«        ||«       t        d«       y )Nr   )ÚFigureCanvasTkAggrŸ   )Úkey_press_handler©ÚFigurec                 óŒ  •—  ‰«       }|j                  «       }|j                  g d¢«        ‰|| ¬«      }|j                  «        |j                  d‰«       |j	                  «       j                  dd¬«        ‰|| d¬«      }|j                  dd	¬«       |j	                  «       j                  «        |j                  «        y )
Nr   ©ÚmasterÚkey_press_eventTÚboth)ÚexpandÚfillF)Úpack_toolbarÚx)Úadd_subplotro   r˜   Úmpl_connectr›   ÚpackÚforget)	rÉ   rd   re   rV   r™   rÆ   rÃ   rŸ   rÄ   s	        €€€€r    Útest_figurez#test_embedding.<locals>.test_figure  s¢   ø€ Ù‹hˆØ�_‰_ÓˆØ
�‰’	Ôá" 3¨vÔ6ˆØ�‰ŒØ×ÑÐ,Ð.?Ô@Ø×ÑÓ×#Ñ#¨4°fÐ#Ô=á& v¨vÀEÔJˆØ�‰˜D sˆÔ+à×ÑÓ×%Ñ%Ô'Ø�‰ÕrG   r"   zsky bluezmidnight blueÚwhite)Ú
backgroundÚselectColorÚ
foreground)r	   rS   rÃ   rŸ   Úmatplotlib.backend_basesrÄ   Úmatplotlib.figurerÆ   rx   r_   Útk_setPalette)r[   rr   rÔ   rÆ   rÃ   rŸ   rÄ   s      @@@@r    Útest_embeddingrÜ   ø   s_   û€ ã÷1å:Ý(à�5‰5‹7€D÷ñ  �ÔÜ	ˆ)Ôð
 	×Ñ *¸/Ø")ð ô +á�ÔÜ	ˆ)ÕrG   c                  ó  — ddl } ddlm} ddlm} | j                  «       }|j                  d«       |j                  «         |d¬«      }|j                  d«        |||¬	«      }|j                  «       j                  | j                  d
¬«       |j                  «        |j                  «        |j                  «       j                  «       }|j                  «       j                  «       }|dkD  r|dkD  sJ ‚t        j                   t"        dd«      5  t        j                   |j$                  dd¬«      5  |j'                  «        ddd«       ddd«       |j)                  «       }t+        |d   |j,                  z  «      }	t+        |d   |j,                  z  «      }
t/        |	|z
  «      dk  sJ d|	› d|› �«       ‚t/        |
|z
  «      dk  sJ d|
› d|› �«       ‚t1        d«       |j3                  «        y# 1 sw Y   Œ¯xY w# 1 sw Y   Œ³xY w)zî
    Test that _update_device_pixel_ratio recalculates figure.size_inches
    using the actual widget dimensions, so the render size matches the
    visible canvas area even when constrained by a layout manager.
    See issue #31126.
    r   N)rÃ   rÅ   Ú400x300r”   )Údpiéo   rÈ   T)rÍ   rÌ   rB   r   Úwinfo_fpixelsg      h@r°   rO   r   zrender width z != actual width zrender height z != actual height r"   )r	   rS   rÃ   rÚ   rÆ   rx   Úgeometryr—   rÐ   r›   rÒ   ÚBOTHr˜   Úwinfo_widthÚwinfo_heightr   ÚobjectrA   Ú	_tkcanvasÚ_update_device_pixel_ratioÚget_size_inchesÚroundrß   Úabsr_   r¾   )r[   rÃ   rÆ   rr   rd   rV   Úactual_wÚactual_hÚsizeÚrender_wÚrender_hs              r    Útest_dpi_change_triggers_resizerñ     sÝ  € ó ÝCÝ(à�5‰5‹7€DØ‡M�M�)ÔØ×ÑÔá
�SŒ/€CØ‡O�O�CÔá˜s¨4Ô0€FØ
×ÑÓ×Ñ R§W¡W°TÐÔ:Ø
‡K�K„MØ×ÑÔà×#Ñ#Ó%×1Ñ1Ó3€HØ×#Ñ#Ó%×2Ñ2Ó4€HØ�aŠ<˜H qšLÐ(Ð(ô 
�‰”c˜: wÓ	/ñ ,Ü	�‰�f×&Ñ&¨Ø#(ô
*ñ,ð 	×)Ñ)Ô+÷,÷ ,ð ×ÑÓ €DÜ�T˜!‘W˜sŸw™wÑ&Ó'€HÜ�T˜!‘W˜sŸw™wÑ&Ó'€HÜˆx˜(Ñ"Ó# qÒ(ð >Ø
˜�zÐ!2°8°*Ð=ó>Ð(äˆx˜(Ñ"Ó# qÒ(ð @Ø
˜˜
Ð"4°X°JÐ?ó@Ð(ô 
ˆ)ÔØ‡L�L…N÷!,ð ,ú÷ ,ð ,ús$   Ä#HÄ7G6ÅHÇ6G?	Ç;HÈHr   )r7   r>   r:   rB   r,   rA   Úunittest.mockr   r#   rc   r   Úmatplotlib.testingr   r%   r9   rj   rz   r<   r=   Úpython_implementationÚflakyr’   r�   r­   r¸   rÁ   rÜ   rñ   r   rG   r    ú<module>rö      s  ðÛ Û Û 	Û Û Û 
Ý ã å (Ý 4ð €ó7ñt  Ô#ñ5ó $ð5ñ:  Ô#ñó $ðð. ‡�×ÑÐ2�H×2Ñ2Ó4¸	ÑAðOð ó Pð ‡�×Ñ˜!ÐÓÙ Ô#ñó $ó óPð
ð2 ‡�×Ñ˜!ÐÓÙ Ô#ñó $ó ðñ0  Ô#ñó $ðñ  Ô#ñó $ðñ   Ô#ñó $ðñ8  Ô#ñ"ó $ð"ñJ  Ô#ñ-ó $ñ-rG   