Ë
    ¨eh’"  ã                   ó0  — 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 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y)é    N)Ú_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     €ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/matplotlib/tests/test_backend_tk.pyú	<genexpr>z7_isolated_tk_test.<locals>.test_func.<locals>.<genexpr>E   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)r4   r3   r5   s   `` r   r8   r8      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 Ðó    é   )r4   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)é   rK   rK   )Údtype))éÿÿÿÿr   r   r   )r   r   r   r   )é   rG   r   r   )r   r   rM   r   )r   r   r   r   )r   r   rN   rG   )r   rN   r   r   r!   )Úmatplotlib.pyplotÚpyplotÚnumpyÚ!matplotlib.backends.backend_tkaggÚmatplotlib.backendsrI   rJ   ÚsubplotsÚcanvasÚ_tkphotoÚonesÚuint8ÚblitÚtkÚ
interpaddrr/   ÚTK_PHOTO_COMPOSITE_OVERLAYÚ
ValueErrorÚprintÚclose)ÚpltÚnpÚ
matplotlibrI   rJ   ÚfigÚaxÚ
photoimageÚdataÚ	bad_boxesÚbad_boxs              r   Ú	test_blitri   K   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$rN   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 )NrN   r   r   é   r   )ÚfigureÚplotr_   Úafter)Úlegitimate_quitr`   Úroots   €€€r   Údo_plotz;test_figuremanager_preserves_host_mainloop.<locals>.do_ploto   s9   ø€ Ø�
‰
ŒØ�‰�!�Q�˜!˜Q˜Ô Ø�	‰	ŒØ�
‰
�1�oÕ&rF   c                  óH   •— ‰ j                  «        ‰j                  d«       y ©NT)ÚquitÚappend)rq   r!   s   €€r   rp   zCtest_figuremanager_preserves_host_mainloop.<locals>.legitimate_quitu   s   ø€ Ø�	‰	ŒØ�‰�tÕrF   r!   )r   rO   rP   ÚTkro   Úmainloopr^   )r   rr   rp   r`   rq   r!   s     @@@@r   Ú*test_figuremanager_preserves_host_mainloopry   i   sL   û€ ãÝ#Ø€Gö'õð �:‰:‹<€DØ‡J�Jˆq�'ÔØ‡M�M„OáÜˆiÕð rF   Ú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©rN   r   r   )rN   r   rl   c                  óª   •— d ‰ «       k(  s‰j                  d«       d ‰ «       k(  sŒ‰j                  «        ‰j                  «       rt        d«       y y )NrZ   g{®Gáz„?r!   )Úsleepr_   Úwaitr^   )r}   r`   Úshow_finished_eventÚtimes   €€€€r   Útargetz6test_figuremanager_cleans_own_mainloop.<locals>.target�   sJ   ø€ ØÑ<Ó>Ò>Ø�J‰J�sŒOð Ñ<Ó>Ó>à�	‰	ŒØ×#Ñ#Ô%Ü�)Õð &rF   T)r„   Údaemon©Úblock)r   rƒ   rO   rP   Ú	threadingÚmatplotlib.cbookr}   rw   rn   ÚEventÚThreadÚstartÚshowÚsetÚjoin)	r   rˆ   rq   r„   Úthreadr}   r`   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…MrF   c                  ó‚  — dd l } | j                  `| j                  `dd lm} |j                  «       }|j                  d¬«       |j                  «        |j                  j                  j                  «        |j                  j                  «       j                  d|j                  |«       |j                  d¬«       y )Nr   Fr†   éd   T)r   ÚMiscÚupdateÚupdate_idletasksrO   rP   rm   r�   ÚdrawrU   ÚtoolbarÚconfigure_subplotsÚget_tk_widgetro   r_   )r   r`   rc   s      r   Útest_never_updater›   Ÿ   s‰   € ó Ø�‰ÐØ�‰Ð%å#Ø
�*‰*‹,€CØ‡H�H�5€HÔà‡H�H„JØ‡J�J×Ñ×)Ñ)Ô+à‡J�J×ÑÓ×$Ñ$ S¨#¯)©)°SÔ9ð ‡H�H�4€HÕrF   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!   )	rO   rP   rR   r�   rm   r^   rU   ÚmanagerÚwindow)r`   r¨   rc   r�   s      @r   Útest_missing_back_buttonr«   ·   sQ   ø€ å#ÝFö6Ð&ô 6ð
 �*‰*‹,€CÜ	ˆ)ÔÙˆC�J‰J˜Ÿ
™
×*Ñ*×1Ñ1Ô2Ü	ˆ)ÕrF   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!   Ú )rO   rP   Úunittestr­   rm   ÚpatchrU   r©   r˜   Úsave_figurer9   Úremover^   )r`   r­   rc   Ú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 rt   )rU   rš   Úwinfo_viewableÚwait_visibilityÚfocus_lastforrv   r_   Údestroy)Útkcanvasrc   r`   rq   r!   s    €€€€r   Úcheck_focusz&test_canvas_focus.<locals>.check_focusÞ   s^   ø€ Ø—:‘:×+Ñ+Ó-ˆà×&Ñ&Ô(Ø×$Ñ$Ô&ð ×!Ñ!Ó# xÒ/Ø�N‰N˜4Ô Ø�	‰	ŒØ�‰�rF   r~   r“   r!   )
r   rO   rP   rw   rm   rn   ro   r�   rx   r^   )rZ   r¾   rc   r`   rq   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Õð rF   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_subplotrn   r—   Úmpl_connectrš   ÚpackÚforget)	rÅ   rc   rd   rU   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ˆÔ+à×ÑÓ×%Ñ%Ô'Ø�‰ÕrF   r!   zsky bluezmidnight blueÚwhite)Ú
backgroundÚselectColorÚ
foreground)r   rR   rÁ   r�   Úmatplotlib.backend_basesrÂ   Úmatplotlib.figurerÃ   rw   r^   Útk_setPalette)rZ   rq   rÐ   rÃ   rÁ   r�   rÂ   s      @@@@r   Útest_embeddingrØ   õ   s_   û€ ã÷1å:Ý(à�5‰5‹7€D÷ñ  �ÔÜ	ˆ)Ôð
 	×Ñ *¸/Ø")ð ô +á�ÔÜ	ˆ)ÕrF   r   )r6   r=   r9   rA   r+   r@   r"   rb   r   Úmatplotlib.testingr   r$   r8   ri   ry   r;   r<   Úpython_implementationÚflakyr‘   r›   r«   r¶   r¿   rØ   r   rF   r   ú<module>rÜ      sb  ðÛ Û Û 	Û Û Û 
ã å (Ý 4ð €ó7ñt  Ô#ñ5ó $ð5ñ:  Ô#ñó $ðð. ‡�×ÑÐ2�H×2Ñ2Ó4¸	ÑAðOð ó Pð ‡�×Ñ˜!ÐÓÙ Ô#ñó $ó óPð
ð2 ‡�×Ñ˜!ÐÓÙ Ô#ñó $ó ðñ,  Ô#ñó $ðñ  Ô#ñó $ðñ   Ô#ñó $ðñ8  Ô#ñ"ó $ñ"rF   