§
    ‡Ûgl  ã                   óú  — 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                              ej        ¦   «         dk    d¬¦  «        ej                             d¬¦  «         ed	¬¦  «        d„ ¦   «         ¦   «         ¦   «         Zej                             dd¬¦  «        ej                             d¬¦  «         ed ¬¦  «        d„ ¦   «         ¦   «         ¦   «         Z ed¬¦  «        d„ ¦   «         Zej                             dd¬¦  «         ed	¬¦  «        d„ ¦   «         ¦   «         Z ed¬¦  «        d„ ¦   «         ZdS )é    N)Ú_c_internal_utils)Úsubprocess_run_helperé<   c                 ó¾  ‡ ‡— ‰€t          j        t          ‰ ¦  «        S dt          j        v r‰S t
          j                             t          j	         
                    d¦  «         d¬¦  «        t
          j                             t          j        dk    ot          j        ¦   «          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 and $WAYLAND_DISPLAY are unsetc                  óì  •‡— t          j        d¦  «         	 t          ‰t          t	          dd¬¦  «        ¬¦  «        } g d¢Šˆfd„| j                             ¦   «         D ¦   «         rJ ‚| j                             d¦  «        ‰k    sJ ‚d S # t          j
        $ r t          j        d	¦  «         Y d S t          j        $ r4}t          j        d
t          |j        ¦  «        z   ¦  «         Y d }~d S d }~ww xY w)Nr   ÚTkAggÚ1)Ú
MPLBACKENDr   )ÚtimeoutÚ	extra_env)ÚOpenGLz!CFMessagePort: bootstrap_registerz%/usr/include/servers/bootstrap_defs.hc                 óL   •‡— g | ]Št          ˆfd „‰D ¦   «         ¦  «        ¯‰‘Œ S )c              3   ó    •K  — | ]}|‰vV — Œ	d S ©N© )Ú.0ÚmsgÚlines     €úV/granary/edev/quantum/lib/python3.11/site-packages/matplotlib/tests/test_backend_tk.pyú	<genexpr>zB_isolated_tk_test.<locals>.test_func.<locals>.<listcomp>.<genexpr>@   s'   øè è € ÐHÐH°3˜s¨$˜ÐHÐHÐHÐHÐHÐHó    )Úall)r   r   Úignored_liness    @€r   ú
<listcomp>z8_isolated_tk_test.<locals>.test_func.<locals>.<listcomp>?   sR   øø€ ð Jð Jð J ÝÐHÐHÐHÐH¸-ÐHÑHÔHÑHÔHðJ˜ð Jð Jð Jr   ÚsuccesszSubprocess timed outz,Subprocess failed to test intended behavior
)ÚpytestÚimportorskipr   Ú_test_timeoutÚdictÚstderrÚ
splitlinesÚstdoutÚcountÚ
subprocessÚTimeoutExpiredÚfailÚCalledProcessErrorÚstr)ÚprocÚer   ÚfuncÚsuccess_counts     @€€r   Ú	test_funcz$_isolated_tk_test.<locals>.test_func!   sq  øø€ õ 	Ô˜IÑ&Ô&Ð&ð	AÝ(Ø�mµtØ&¸cð8Cñ 8Cô 8CðDñ Dô DˆDðFð Fð FˆMðJð Jð Jð J¨¬×)?Ò)?Ñ)AÔ)Að Jñ Jô Jð Jð Jð Jà”;×$Ò$ YÑ/Ô/°=Ò@Ð@Ð@Ð@Ð@Ð@øõ Ô(ð 	0ð 	0ð 	0ÝŒKÐ.Ñ/Ô/Ð/Ð/Ð/Ð/ÝÔ,ð 	)ð 	)ð 	)ÝŒKÐGÝ˜aœh™-œ-ñ(ñ )ô )ð )ð )ð )ð )ð )ð )ð )øøøøð	)øøøs   ˜&B Â#C3Â1C3Â?)C.Ã.C3)Ú	functoolsÚpartialÚ_isolated_tk_testÚosÚenvironr!   ÚmarkÚskipifÚ	importlibÚutilÚ	find_specÚsysÚplatformr   Údisplay_is_validÚwraps)r1   r0   r2   s   `` r   r5   r5      sö   øø€ ð €|ÝÔ Õ!2°MÑBÔBÐBà¥"¤*Ð,Ð,àˆå„[×ÒÝŒN×$Ò$ YÑ/Ô/Ð/Ø ð ñ ô õ „[×ÒÝŒ˜ÒÐLÕ(9Ô(JÑ(LÔ(LÐ$LØ8ð ñ ô õ „_�TÑÔðAð Að Að Að Añ Ôñ	ô ñ	ô ðAð2 Ðr   é   )r1   c            	      óª  — dd l m}  dd l}dd l}ddlm} |                      ¦   «         \  }}|j        j        }| 	                    d¦  «        }|j
        d d…         \  }}	||	|j        j        f}
d}|D ]`}	 |                     |j                             ¦   «         t!          |¦  «        |
dd|¦  «         ŒB# t"          $ r t%          d¦  «         Y Œ]w xY wd S )Nr   )Ú_tkagg)é   rD   rD   é   ))éÿÿÿÿrE   r   rE   )rE   r   r   rE   )é   rA   r   rE   )r   rE   rF   rE   )r   rE   rE   r   )r   rE   rG   rA   )r   rG   rE   é   r    )Úmatplotlib.pyplotÚpyplotÚnumpyÚ!matplotlib.backends.backend_tkaggÚmatplotlib.backendsrC   ÚsubplotsÚcanvasÚ_tkphotoÚonesÚshapeÚctypesÚdataÚblitÚtkÚ
interpaddrr-   Ú
ValueErrorÚprint)ÚpltÚnpÚ
matplotlibrC   ÚfigÚaxÚ
photoimagerT   ÚheightÚwidthÚdataptrÚ	bad_boxesÚbad_boxs                r   Ú	test_blitre   F   s#  € à#Ð#Ð#Ð#Ð#Ð#ØÐÐÐØ,Ð,Ð,Ð,Ø*Ð*Ð*Ð*Ð*Ð*à�lŠl‰nŒn�G€CˆØ”Ô$€JØ�7Š7�9ÑÔ€DØ”J˜r ˜r”N�M€FˆEØ�u˜dœkÔ.Ð/€Gð€Ið ð ð ˆð	Ø�KŠKØ”×(Ò(Ñ*Ô*­C°
©O¬O¸WÀaØ˜gñ'ô 'ð 'ð 'øõ ð 	ð 	ð 	Ý�)ÑÔÐÐÐð	øøøðð s   Á5>B4Â4CÃCrG   c                  óâ   ‡‡‡‡— dd l } dd lmŠ g Šˆˆˆfd„}ˆˆfd„Š|                      ¦   «         Š‰                     d|¦  «         ‰                     ¦   «          ‰rt          d¦  «         d S d S )Nr   c                  ó¸   •— ‰                      ¦   «          ‰                     ddgddg¦  «         ‰                     ¦   «          ‰                     d‰ ¦  «         d S )NrG   rE   rH   é   r   )ÚfigureÚplotÚcloseÚafter)Úlegitimate_quitrZ   Úroots   €€€r   Údo_plotz;test_figuremanager_preserves_host_mainloop.<locals>.do_ploth   sS   ø€ Ø�
Š
‰ŒˆØ�Š�!�Q�˜!˜Q˜Ñ Ô Ð Ø�	Š	‰ŒˆØ�
Š
�1�oÑ&Ô&Ð&Ð&Ð&r   c                  óZ   •— ‰                       ¦   «          ‰                     d¦  «         d S ©NT)ÚquitÚappend)rn   r    s   €€r   rm   zCtest_figuremanager_preserves_host_mainloop.<locals>.legitimate_quitn   s(   ø€ Ø�	Š	‰ŒˆØ�Š�tÑÔÐÐÐr   r    )r   rI   rJ   ÚTkrl   ÚmainlooprY   )r   ro   rm   rZ   rn   r    s     @@@@r   Ú*test_figuremanager_preserves_host_mainlooprv   b   s½   øøøø€ à€N€N€NØ#Ð#Ð#Ð#Ð#Ð#Ø€Gð'ð 'ð 'ð 'ð 'ð 'ð 'ðð ð ð ð ð ð �:Š:‰<Œ<€DØ‡J‚Jˆq�'ÑÔÐØ‡M‚M�O„O€Oàð ÝˆiÑÔÐÐÐðð r   ÚCPythonzZPyPy does not support Tkinter threading: https://foss.heptapod.net/pypy/pypy/-/issues/1929r	   rH   )Úrerunsc                  ó¤  ‡‡‡‡— dd l } dd lŠdd lmŠ dd l}ddlmŠ |                      ¦   «         }‰                     g d¢g d¢¦  «         ˆˆˆˆfd„}| 	                    ¦   «         Š| 
                    |d¬¦  «        }|                     ¦   «          ‰                     d¬¦  «         ‰                     ¦   «          |                     ¦   «          d S )	Nr   )Ú"_get_running_interactive_framework©rG   rE   rH   )rG   rE   rh   c                  óÜ   •— d ‰ ¦   «         k    s#‰                      d¦  «         d ‰ ¦   «         k    ¯#‰                     ¦   «          ‰                     ¦   «         rt          d¦  «         d S d S )NrV   g{®Gáz„?r    )Úsleeprk   ÚwaitrY   )rz   rZ   Úshow_finished_eventÚtimes   €€€€r   Útargetz6test_figuremanager_cleans_own_mainloop.<locals>.target‰   s}   ø€ ØÐ<Ð<Ñ>Ô>Ò>Ð>Ø�JŠJ�s‰OŒOˆOð Ð<Ð<Ñ>Ô>Ò>Ð>à�	Š	‰ŒˆØ×#Ò#Ñ%Ô%ð 	Ý�)ÑÔÐÐÐð	ð 	r   T)r�   Údaemon©Úblock)r   r€   rI   rJ   Ú	threadingÚmatplotlib.cbookrz   rt   rj   ÚEventÚThreadÚstartÚshowÚsetÚjoin)	r   r…   rn   r�   Úthreadrz   rZ   r   r€   s	        @@@@r   Ú&test_figuremanager_cleans_own_mainlooprŽ   z   s	  øøøø€ ð €N€N€NØ€K€K€KØ#Ð#Ð#Ð#Ð#Ð#ØÐÐÐØCÐCÐCÐCÐCÐCà�:Š:‰<Œ<€DØ‡H‚HˆYˆYˆY˜	˜	˜	Ñ"Ô"Ð"ðð ð ð ð ð ð ð ð $Ÿ/š/Ñ+Ô+ÐØ×Ò V°DÐÑ9Ô9€FØ
‡L‚L�N„N€NØ‡H‚H�4€HÑÔÐØ×ÒÑÔÐØ
‡K‚K�M„M€M€M€Mr   r   T)Úskip_on_importerrorc                  ó€  — dd l } | j        `| j        `dd lm} |                     ¦   «         }|                     d¬¦  «         |                     ¦   «          |j	        j
                             ¦   «          |j	                             ¦   «                              d|j        |¦  «         |                     d¬¦  «         d S )Nr   Frƒ   éd   T)r   ÚMiscÚupdateÚupdate_idletasksrI   rJ   ri   rŠ   ÚdrawrO   ÚtoolbarÚconfigure_subplotsÚget_tk_widgetrl   rk   )r   rZ   r]   s      r   Útest_never_updater™   ˜   s¸   € ð €N€N€NØŒÐØŒÐ%à#Ð#Ð#Ð#Ð#Ð#Ø
�*Š*‰,Œ,€CØ‡H‚H�5€HÑÔÐà‡H‚H�J„J€JØ„JÔ×)Ò)Ñ+Ô+Ð+à„J×ÒÑÔ×$Ò$ S¨#¬)°SÑ9Ô9Ð9ð ‡H‚H�4€HÑÔÐÐÐr   rE   c                  óä   ‡— dd l m}  ddlmŠ  G ˆfd„d‰¦  «        }|                      ¦   «         }t          d¦  «          ||j        |j        j        j        ¦  «         t          d¦  «         d S )Nr   ©ÚNavigationToolbar2Tkc                   ó2   •— e Zd Zd„ ” j        D ¦   «         ZdS )ú)test_missing_back_button.<locals>.Toolbarc                 ó&   — g | ]}|d          dv ¯|‘ŒS )r   )ÚHomeÚPanÚZoomr   )r   Úts     r   r   z4test_missing_back_button.<locals>.Toolbar.<listcomp>¸   s1   € ð 6ð 6ð 6˜1Ø�q”TÐ4Ð4Ð4ð Ø4Ð4Ð4r   N)Ú__name__Ú
__module__Ú__qualname__Ú	toolitemsr›   s   €r   ÚToolbarrž   ¶   s0   ø€ € € € € ð6ð 6Ð 4Ô >ð 6ñ 6ô 6ˆ	ˆ	ˆ	r   r¨   r    )	rI   rJ   rL   rœ   ri   rY   rO   ÚmanagerÚwindow)rZ   r¨   r]   rœ   s      @r   Útest_missing_back_buttonr«   ±   s©   ø€ à#Ð#Ð#Ð#Ð#Ð#ØFÐFÐFÐFÐFÐFð6ð 6ð 6ð 6ð 6ð 6ð 6Ð&ñ 6ô 6ð 6ð
 �*Š*‰,Œ,€CÝ	ˆ)ÑÔÐØ€GˆCŒJ˜œ
Ô*Ô1Ñ2Ô2Ð2Ý	ˆ)ÑÔÐÐÐr   c                  ód  ‡‡‡‡— dd l } dd lmŠ g Šˆˆˆˆfd„}|                      ¦   «         Š‰                     ¦   «         Š‰                     g d¢¦  «         ‰                     d‰j        ¦  «         ‰                     d|¦  «         ‰                     ¦   «          ‰rt          d¦  «         d S d S )Nr   c                  ó4  •— ‰j                              ¦   «         } |                      ¦   «         s|                      ¦   «          |                      ¦   «         | k    r‰                     d¦  «         ‰                     ¦   «          ‰                     ¦   «          d S rq   )rO   r˜   Úwinfo_viewableÚwait_visibilityÚfocus_lastforrs   rk   Údestroy)Útkcanvasr]   rZ   rn   r    s    €€€€r   Úcheck_focusz&test_canvas_focus.<locals>.check_focusÈ   s…   ø€ Ø”:×+Ò+Ñ-Ô-ˆà×&Ò&Ñ(Ô(ð 	'Ø×$Ò$Ñ&Ô&Ð&ð ×!Ò!Ñ#Ô# xÒ/Ð/Ø�NŠN˜4Ñ Ô Ð Ø�	Š	‰ŒˆØ�Š‰Œˆˆˆr   r{   r‘   r    )
r   rI   rJ   rt   ri   rj   rl   rŠ   ru   rY   )rV   r³   r]   rZ   rn   r    s     @@@@r   Útest_canvas_focusr´   Á   sâ   øøøø€ ð ÐÐÐØ#Ð#Ð#Ð#Ð#Ð#Ø€Gð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð �5Š5‰7Œ7€DØ
�*Š*‰,Œ,€CØ‡H‚HˆYˆYˆYÑÔÐØ‡J‚Jˆq�#”(ÑÔÐØ‡J‚Jˆs�KÑ Ô Ð Ø‡M‚M�O„O€Oàð ÝˆiÑÔÐÐÐðð r   c                  ó  ‡‡‡‡— dd l } ddlmŠmŠ ddlmŠ ddlmŠ |                      ¦   «         }ˆˆˆˆfd„} ||¦  «         t          d¦  «         | 
                    ddd	¬
¦  «          ||¦  «         t          d¦  «         d S )Nr   )ÚFigureCanvasTkAggrœ   )Úkey_press_handler)ÚFigurec                 óð  •—  ‰¦   «         }|                      ¦   «         }|                     g d¢¦  «          ‰|| ¬¦  «        }|                     ¦   «          |                     d‰¦  «         |                     ¦   «                              dd¬¦  «          ‰|| d¬¦  «        }|                     dd	¬¦  «         |                     ¦   «                              ¦   «          |                     ¦   «          d S )
Nr{   )ÚmasterÚkey_press_eventTÚboth)ÚexpandÚfillF)Úpack_toolbarÚx)Úadd_subplotrj   r•   Úmpl_connectr˜   ÚpackÚforget)	rº   r]   r^   rO   r–   r¸   r¶   rœ   r·   s	        €€€€r   Útest_figurez#test_embedding.<locals>.test_figureé   só   ø€ Øˆf‰hŒhˆØ�_Š_ÑÔˆØ
�Š�	�	�	ÑÔÐà"Ð" 3¨vÐ6Ñ6Ô6ˆØ�Š‰ŒˆØ×ÒÐ,Ð.?Ñ@Ô@Ð@Ø×ÒÑÔ×#Ò#¨4°fÐ#Ñ=Ô=Ð=à&Ð& v¨vÀEÐJÑJÔJˆØ�Š˜D sˆÑ+Ô+Ð+à×ÒÑÔ×%Ò%Ñ'Ô'Ð'Ø�ŠÑÔÐÐÐr   r    zsky bluezmidnight blueÚwhite)Ú
backgroundÚselectColorÚ
foreground)r   rL   r¶   rœ   Úmatplotlib.backend_basesr·   Úmatplotlib.figurer¸   rt   rY   Útk_setPalette)rV   rn   rÅ   r¸   r¶   rœ   r·   s      @@@@r   Útest_embeddingrÍ   ß   sý   øøøø€ àÐÐÐð1ð 1ð 1ð 1ð 1ð 1ð 1ð 1à:Ð:Ð:Ð:Ð:Ð:Ø(Ð(Ð(Ð(Ð(Ð(à�5Š5‰7Œ7€Dðð ð ð ð ð ð ð ð  €K�ÑÔÐÝ	ˆ)ÑÔÐð
 	×Ò *¸/Ø")ð ñ +ô +ð +à€K�ÑÔÐÝ	ˆ)ÑÔÐÐÐr   r   )r3   r:   r6   r>   r)   r=   r!   r\   r   Úmatplotlib.testingr   r#   r5   re   rv   r8   r9   Úpython_implementationÚflakyrŽ   Úbackendr™   r«   r´   rÍ   r   r   r   ú<module>rÒ      s|  ðØ Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 
€
€
€
à €€€à (Ð (Ð (Ð (Ð (Ð (Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ð €ð2ð 2ð 2ð 2ðj Ð Ð#Ñ#Ô#ðð ñ $Ô#ðð6 Ð Ð#Ñ#Ô#ðð ñ $Ô#ðð. „×ÒÐ2�HÔ2Ñ4Ô4¸	ÒAðOð ñ Pô Pð „×Ò˜!ÐÑÔØÐ Ð#Ñ#Ô#ðð ñ $Ô#ñ ÔñPô Pð
ð2 „×Ò�W°$ÐÑ7Ô7Ø„×Ò˜!ÐÑÔØÐ Ð#Ñ#Ô#ðð ñ $Ô#ñ Ôñ 8Ô7ðð, Ð Ð#Ñ#Ô#ðð ñ $Ô#ðð „×Ò�W°$ÐÑ7Ô7ØÐ Ð#Ñ#Ô#ðð ñ $Ô#ñ 8Ô7ðð8 Ð Ð#Ñ#Ô#ð"ð "ñ $Ô#ð"ð "ð "r   