ó
    F\h6&  ã                   óÚ   • S SK r S SKrS SKrS SKJr  S SKJ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 rS rS\S\4S jrS rSS jrg! \ a
    S SKrS r N'f = f)é    N)Ú
isabstract)ÚAny)Úsupport)Ú	os_helper)Úrefleak_helperé   )ÚHuntRefleak)Úclear_caches)Ú	_get_dumpc                 ó€   • [        S U R                   5       5      nXR                  U R                  U R                  4$ )Nc              3   óN   #   • U  H  n[         R                  " U5      v •  M     g 7f©N)ÚweakrefÚref)Ú.0Úobjs     Ú//usr/lib/python3.13/test/libregrtest/refleak.pyÚ	<genexpr>Ú_get_dump.<locals>.<genexpr>   s   é € ÐNÒ<M°S¤§¢¨C× 0Ð 0Ò<Mùs   ‚#%)ÚsetÚ_abc_registryÚ
_abc_cacheÚ_abc_negative_cacheÚ_abc_negative_cache_version)ÚclsÚregistry_weakrefss     r   r   r      s?   € ô  ÑN¸C×<MÒ<MÓNÓNÐØ!§>¡>Ø×'Ñ'¨×)HÑ)HðJð 	Jó    c                 óÒ   • [         R                  c  g SS Kn[        U S5       nUR	                  [         R                  U5        S S S 5        S [         l        g ! , (       d  f       N= f)Nr   Úxb)r   Újunit_xml_listÚpickleÚopenÚdump)Úfilenamer!   Úfps      r   Úsave_support_xmlr&      sJ   € Ü×ÑÑ%ØãÜ	ˆh˜Ô	 Ø�‰”G×*Ñ*¨BÔ/÷ 
à!„GÕ÷ 
Õ	ús   £!AÁ
A&c                 óâ   •  [        U S5      nSS KnU   UR                  U5      nS S S 5        [        R
                  " U 5        W[        l        g ! [         a     g f = f! , (       d  f       N@= f)NÚrbr   )r"   ÚFileNotFoundErrorr!   ÚloadÚosÚunlinkr   r    )r$   r%   r!   Úxml_lists       r   Úrestore_support_xmlr.   &   s]   € ðÜ�(˜DÓ!ˆó Ú	Ø—;‘;˜r“?ˆ÷ 
ä‡I‚IˆhÔà%„GÕøô ó Ùðú÷ 
�ús   ‚A ”A Á
AÁAÁ 
A.Úhunt_refleakÚquietc           
      ó
  ^7• SSK nSSKn[        [        S5      (       d  [	        S5      e[        5         [        R                  SS nUR                  R                  5       n[        R                  R                  5       n[        R                  R                  5       [        R                  R                  5       4n	 SSKn
U
R                  R                  5       n0 nUR"                  R$                   Vs/ s H  n['        UR"                  U5      PM     sn H@  n[)        U5      (       d  M  UR+                  5       U/-    H  n[-        U5      S   XÏ'   M     MB     [/        SS5       Vs0 s H  nUU_M     snm7U74S jnUR0                  nUR2                  nUR4                  nUU-   n[7        [/        U5      5      nS/U-  nS/U-  nS/U-  n[        R8                  n[        R:                  n[        R<                  n[>        R@                  nS=n=n=n n!U(       dO  [C        SUS	[        RD                  S
9  SUS-  S-   -  SU n"U"SU S-   U"US -   n"[C        U"[        RD                  SS9  Sn#Sn$[G        XgX‹XÉ5        [H        RJ                  " 5         U GH*  n%[L        RN                  n&S[L        l'         U" 5       n$U&[L        l'        [Q        U#5        [G        XgX‹XÉ5        [H        RJ                  " 5         U" SS9n'U" 5       U'-
  n(U" 5       n)U" 5       n*U" U)U-
  5      UU%'   U" U(U-
  5      UU%'   U" U*U -
  5      UU%'   U(       di  [S        UU%   UU%   UU%   5      n+U+S::  a  Sn,OU+S:  a  SU+   n,OSn,U%U:X  a  [C        SS[        RD                  SS9  [C        U,S[        RD                  SS9  A+A,U(nU)nU*n U'n![U        U#5        GM-     U(       d  [C        [        RD                  S
9  S n-S n.Sn/USU-4USU-4USU.44 HÌ  u  n0n1n2U0US n0U2" U05      n3[W        U05      n4U3(       d	  U4(       d  M/  U < SU0< SU1< S [Y        U05      < 3n5[C        U5S[        RD                  S!9  U3(       aJ  [C        [        RD                  SS9  [[        US"S#S$9 n6[C        U5U6S
9  U6R]                  5         SSS5        Sn/M³  [C        S%[        RD                  SS9  MÎ     U/U$4$ ! [          a    Sn GN f = fs  snf s  snf ! U&[L        l'        f = f! , (       d  f       N`= f)&zŽRun a test multiple times, looking for reference leaks.

Returns:
    False if the test didn't leak references; True if we detected refleaks.
r   NÚgettotalrefcountz9Tracking reference leaks requires a debug build of Pythoniüÿÿiè  c                 ó&   >• TR                  X 5      $ r   )Ú
setdefault)ÚvalueÚint_pools    €r   Úget_pooled_intÚ'runtest_refleak.<locals>.get_pooled_inte   s   ø€ Ø×"Ñ" 5Ó0Ð0r   Ú	beginningzHrepetitions. Showing number of leaks (. for 0 or less, X for 10 or more))ÚfileÚ
1234567890é
   r   Ú:T)r:   Úflushzrefleak-xml.tmp)Ú_only_immortalÚ.)
r@   Ú1Ú2Ú3Ú4Ú5Ú6Ú7Ú8Ú9ÚXÚ Ú )Úendr:   r>   c                 ó&   • [        S U  5       5      $ )Nc              3   ó*   #   • U  H	  oS :¬  v •  M     g7f)r   N© )r   Údeltas     r   r   Ú;runtest_refleak.<locals>.check_rc_deltas.<locals>.<genexpr>Ê   s   é € Ð2ª6 %˜A–:ª6ùs   ‚)Úall©Údeltass    r   Úcheck_rc_deltasÚ(runtest_refleak.<locals>.check_rc_deltas½   s   € ô Ñ2©6Ó2Ó2Ð2r   c                 ó   • [        U 5      $ r   )ÚanyrT   s    r   Úcheck_fd_deltasÚ(runtest_refleak.<locals>.check_fd_deltasÌ   s   € Ü�6‹{Ðr   FÚ
referenceszmemory blockszfile descriptorsz leaked z, sum=)rM   r:   Úazutf-8)Úencodingz (this is fine))/ÚcopyregÚcollections.abcÚhasattrÚsysÚ	ExceptionÚwarm_cachesÚwarningsÚfiltersÚdispatch_tableÚcopyÚpath_importer_cacheÚ	linecacheÚcacheÚ_interactive_cacheÚ	zipimportÚ_zip_directory_cacheÚImportErrorÚabcÚ__all__Úgetattrr   Ú__subclasses__r   ÚrangeÚwarmupsÚrunsr$   ÚlistÚgetallocatedblocksr2   Úgetunicodeinternedsizer   Úfd_countÚprintÚstderrÚdash_R_cleanupr   Ú
gc_collectr   Ú_hunting_for_refleaksr&   Úmaxr.   rY   Úsumr"   r>   )8Ú	test_nameÚ	test_funcr/   r0   r_   ÚcollectionsÚfsÚpsÚpicÚlinecache_datarm   ÚzdcÚabcsr]   rp   r   r5   r7   ru   rv   r$   ÚrepcountÚ	rep_rangeÚ	rc_deltasÚalloc_deltasÚ	fd_deltasrx   r2   ry   rz   Ú	rc_beforeÚalloc_beforeÚ	fd_beforeÚinterned_immortal_beforeÚnumbersÚxml_filenameÚresultÚiÚcurrentÚinterned_immortal_afterÚalloc_afterÚrc_afterÚfd_afterÚtotal_leaksÚsymbolrV   rZ   ÚfailedrU   Ú	item_nameÚcheckerÚfailingÚ
suspiciousÚmsgÚrefrepr6   s8                                                          @r   Úruntest_refleakr¦   4   sñ  ø€ ó Ûä”3Ð*×+Ñ+Üð $ó %ð 	%ô
 „Mô 
×	Ñ	™!Ð	€BØ	×	Ñ	×	$Ñ	$Ó	&€BÜ
×
!Ñ
!×
&Ñ
&Ó
(€Cô —_‘_×)Ñ)Ó+¬Y×-IÑ-I×-NÑ-NÓ-PÐP€Nð4Ûð
 ×,Ñ,×1Ñ1Ó3ˆØ€DØ5@·_±_×5LÒ5LÓMÒ5L°”˜Ÿ™¨Ö+Ñ5LÔMˆÜ˜#�‰ÙØ×%Ñ%Ó'¨3¨%Ô/ˆCÜ! #› qÑ)ˆD‹Ió 0ñ Nô +0°°tÔ*<Ó=Ò*< ��u’Ñ*<Ñ=€Hõ1ð ×"Ñ"€GØ×Ñ€DØ×$Ñ$€HØ˜‰~€Hô ”U˜8“_Ó%€IØ��h‘€IØ�3˜‘>€LØ��h‘€IÜ×/Ñ/ÐÜ×+Ñ+ÐÜ ×7Ñ7ÐÜ×!Ñ!€HàFGÐG€IÐG�ÐG˜yÐ+CæÜˆk˜8ð &6ä—:‘:ò	ð   ¨2¡°Ñ!1Ñ2°I°XÐ>ˆØ˜(˜7Ð# cÑ)¨G°G°HÐ,=Ñ=ˆÜˆgœCŸJ™J¨dÒ3à$€LØ€FÜ�2˜3 TÔ:Ü×ÒÔäˆÜ ×6Ñ6ˆØ/3ŒÔ,ð	;Ù“[ˆFà3:ŒNÔ0ä˜Ô&Ü�r˜s¨Ô>Ü×ÒÔñ #9àñ#!Ðñ )Ó*Ð-DÑDˆÙ#Ó%ˆÙ“:ˆá% h°Ñ&:Ó;ˆ	�!‰Ù(¨°|Ñ)CÓDˆ�Q‰Ù% h°Ñ&:Ó;ˆ	�!‰æä˜i¨™l¨L¸©O¸YÀq¹\ÓJˆKØ˜aÓØ‘Ø˜rÓ!ðà!ñ#‘ð �Ø�G‹|Ü�c˜r¬¯
©
¸$Ò?Ü�&˜b¤s§z¡z¸Ò>ØØà"ˆØˆ	Øˆ	Ø#:Ð ä˜L×)ñc öf Ü”3—:‘:Òò3òð €Fà	�L /Ð2Ø	�¨Ð8Ø	Ð&¨Ð8ó'Ñ"ˆ�	˜7ð ˜˜Ð!ˆÙ˜&“/ˆÜ˜“[ˆ
Þ—j�jã›6£9¬c°&­kð;ˆCä�#˜2¤C§J¡JÒ/ÞÜœ3Ÿ:™:¨TÒ2Ü˜( C°'Ò:¸fÜ˜# FÒ+Ø—L‘L”N÷ ;ð ’äÐ'¬c¯j©jÀÔEñ)'ð* �FÐÐøôc ó Ø‹ðüò Nùò >øðP 4;ŒNÕ0ú÷f ;Õ:ús6   Â<S Ã4 SÅ)S#Ê4S(ÒS8ÓSÓSÓ(S5Ó8
T	c                 óˆ  • SS K nSS KnU [        R                  S S & UR                  R                  5         UR                  R                  U5        [        R                  R                  5         [        R                  R                  U5        Uu  p‰[        R                  R                  5         [        R                  R                  U	5        [        R                  R                  5         [        R                  R                  U5         SS Kn
U
R                  R                  5         U
R                  R                  U5        UR                  R                    Vs/ s H  n[#        UR                  U5      PM     nn[%        [&        U5      nU Hy  nUR)                  5       U/-    H^  nUR+                  US 5      nUb6  UR-                  5         U H   nU" 5       nUc  M  UR/                  U5        M"     UR1                  5         M`     M{     [3        5         [        R4                  " 5         g ! [         a     Nõf = fs  snf )Nr   )r_   r`   re   rf   rg   ÚclearÚupdaterb   ri   rj   rl   rk   rm   rn   ro   rp   rq   rr   Úfilterr   rs   ÚgetÚ_abc_registry_clearÚregisterÚ_abc_caches_clearr
   Ú_clear_internal_caches)r…   r†   r‡   r‰   rŠ   rˆ   r_   r„   ÚlcacheÚlinteractiverm   r]   Úabs_classesrp   r   Úrefsr   Úsubclasss                     r   r}   r}   è   sÅ  € ÛÛð „H×Ñ‘QÐØ×Ñ× Ñ Ô"Ø×Ñ×!Ñ! "Ô%Ü×Ñ×!Ñ!Ô#Ü×Ñ×"Ñ" 3Ô'Ø)Ñ€FÜ× Ñ ×&Ñ&Ô(Ü× Ñ ×'Ñ'¨Ô5Ü‡O�O×ÑÔÜ‡O�O×Ñ˜6Ô"ð3Ûð 	×&Ñ&×,Ñ,Ô.Ø×&Ñ&×-Ñ-¨cÔ2ð 9D¿¹×8OÒ8OÓPÒ8O°1”7˜;Ÿ?™?¨AÖ.Ñ8O€KÐPÜœ [Ó1€KÛˆØ×%Ñ%Ó'¨3¨%Ô/ˆCØ—8‘8˜C Ó&ˆDØÑØ×'Ñ'Ô)Û�CÙ"›u�HØÓ+ØŸ™ XÖ.ñ  ð ×!Ñ!Ö#ó 0ñ ô „Nô ×ÒÕ øô3 ó Ùðüò Qs   ÄH/ Å H?È/
H<È;H<c                  óÚ   • [        [        S5      5      n [        S5       H
  nXUS-      M     [        S5       Vs/ s H  n[        U5      PM       n[        [        SS5      5        g s  snf )Né   r   éûÿÿÿi  )Úbytesrt   Úchrrw   )Úsr—   s     r   rd   rd     sX   € äŒe�C‹jÓ€AÜ�3ŽZˆØ	ˆAˆa‰C‹ñ ô ˜3”ZÓ ’Z�„Sˆ†V‘ZÑ äŒˆr�3‹Õùò !s   »A()ÚreturnN)r+   rb   re   Úinspectr   Útypingr   rj   Útestr   Útest.supportr   r   Úruntestsr	   Úutilsr
   Ú_abcr   ro   r   r&   r.   Úboolr¦   r}   rd   rP   r   r   Ú<module>rÄ      sz   ðÛ 	Û 
Û Ý Ý Û å Ý "Ý 'å !Ý ð
JÝò"ò&ðqØ"-ðqàôqòh*!õZøðI ó JÛôJðJús   ¼A ÁA*Á)A*