Ë
    òT•j=  ã                   óª   — d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 ddl
mZ ddlmZ 	 d d	lmZ dedefd„Zd„ Zd„ Zy# e$ r
 d dlZd
„ ZY Œw xY w)é    N)Ú
isabstract)ÚAny)Úsupport)Ú	os_helperé   )ÚHuntRefleak)Úclear_caches)Ú	_get_dumpc                 ó‚   — t        d„ | j                  D «       «      }|| j                  | j                  | j                  fS )Nc              3   óF   K  — | ]  }t        j                  |«      –— Œ y ­w©N)ÚweakrefÚref)Ú.0Úobjs     ú//usr/lib/python3.12/test/libregrtest/refleak.pyú	<genexpr>z_get_dump.<locals>.<genexpr>   s   è ø€ ÒN°S¤§¡¨C× 0ÑNùs   ‚!)ÚsetÚ_abc_registryÚ
_abc_cacheÚ_abc_negative_cacheÚ_abc_negative_cache_version)ÚclsÚregistry_weakrefss     r   r
   r
      sA   € ô  ÑN¸C×<MÑ<MÔNÓNÐØ! 3§>¡>Ø×'Ñ'¨×)HÑ)HðJð 	Jó    Úhunt_refleakÚquietc           
      óº  ‡4— ddl }ddl}t        t        d«      st	        d«      ‚t        «        t        j                  dd }|j                  j                  «       }t        j                  j                  «       }	 ddl}	|	j                  j                  «       }
i }|j                  j                  D �cg c]  }t!        |j                  |«      ‘Œ c}D ]8  }t#        |«      sŒ|j%                  «       |gz   D ]  }t'        |«      d   ||<   Œ Œ: t)        dd«      D �ci c]  }||“Œ c}Š4ˆ4fd„}|j*                  }|j,                  }|j.                  }||z   }t1        t)        |«      «      }dg|z  }dg|z  }dg|z  }t        j2                  }t        j4                  }t        j6                  }t8        j:                  }dx}x}x}} |sUt=        d|d	t        j>                  ¬
«       d|dz  dz   z  d| }!|!d| dz   |!|d z   }!t=        |!t        j>                  d¬«       d}"tA        ||||
|«       tC        jD                  «        |D ]ñ  }# |«       }"tA        ||||
|«       tC        jD                  «         |«       }$ |«       |$z
  }% |«       |$dz  z
  }& |«       }' ||&|z
  «      ||#<    ||%|z
  «      ||#<    ||'|z
  «      ||#<   |sltG        ||#   ||#   ||#   «      }(|(dk  rd})n|(dk  rd|(   })nd})|#|k(  rt=        ddt        j>                  d¬«       t=        |)dt        j>                  d¬«       ~(~)|%}|&}|'}|$} Œó |st=        t        j>                  ¬
«       d„ }*d„ }+d},|d|*f|d|*f|d|+ffD ]Å  \  }-}.}/|-|d }- |/|-«      }0tI        |-«      }1|0s|1sŒ$| ›d|-›d|.›dtK        |-«      ›�}2t=        |2dt        j>                  ¬ «       |0rRt=        t        j>                  d¬«       tM        |d!d"¬#«      5 }3t=        |2|3¬
«       |3jO                  «        ddd«       d},Œªt=        d$t        j>                  d¬«       ŒÇ |,|"fS # t        $ r d}
Y �Œªw xY wc c}w c c}w # 1 sw Y   ŒJxY w)%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                 ó(   •— ‰j                  | | «      S r   )Ú
setdefault)ÚvalueÚint_pools    €r   Úget_pooled_intz'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&   Úflushé   ú.)
r,   Ú1Ú2Ú3Ú4Ú5Ú6Ú7Ú8Ú9ÚXú Ú )Úendr&   r*   c                 ó&   — t        d„ | D «       «      S )Nc              3   ó&   K  — | ]	  }|d k\  –— Œ y­w)r   N© )r   Údeltas     r   r   z;runtest_refleak.<locals>.check_rc_deltas.<locals>.<genexpr>Ÿ   s   è ø€ Ò2 %�5˜A•:Ñ2ùs   ‚)Úall©Údeltass    r   Úcheck_rc_deltasz(runtest_refleak.<locals>.check_rc_deltas’   s   € ô Ñ2¨6Ô2Ó2Ð2r   c                 ó   — t        | «      S r   )Úanyr?   s    r   Úcheck_fd_deltasz(runtest_refleak.<locals>.check_fd_deltas¡   s   € Ü�6‹{Ðr   FÚ
referenceszmemory blockszfile descriptorsz leaked z, sum=)r9   r&   Úazutf-8)Úencodingz (this is fine))(ÚcopyregÚcollections.abcÚhasattrÚsysÚ	ExceptionÚwarm_cachesÚwarningsÚfiltersÚdispatch_tableÚcopyÚpath_importer_cacheÚ	zipimportÚ_zip_directory_cacheÚImportErrorÚabcÚ__all__Úgetattrr   Ú__subclasses__r
   ÚrangeÚwarmupsÚrunsÚfilenameÚlistÚgetallocatedblocksr   Úgetunicodeinternedsizer   Úfd_countÚprintÚstderrÚdash_R_cleanupr   Ú
gc_collectÚmaxrC   ÚsumÚopenr*   )5Ú	test_nameÚ	test_funcr   r   rH   ÚcollectionsÚfsÚpsÚpicrS   ÚzdcÚabcsrF   rV   r   r"   r$   r[   r\   r]   ÚrepcountÚ	rep_rangeÚ	rc_deltasÚalloc_deltasÚ	fd_deltasr_   r   r`   ra   Ú	rc_beforeÚalloc_beforeÚ	fd_beforeÚinterned_beforeÚnumbersÚresultsÚiÚinterned_afterÚalloc_afterÚrc_afterÚfd_afterÚtotal_leaksÚsymbolrA   rD   Úfailedr@   Ú	item_nameÚcheckerÚfailingÚ
suspiciousÚmsgÚrefrepr#   s5                                                       @r   Úruntest_refleakrŠ      s™  ø€ ó Ûä”3Ð*Ô+Üð $ó %ð 	%ô
 „Mô 
×	Ñ	™!Ð	€BØ	×	Ñ	×	$Ñ	$Ó	&€BÜ
×
!Ñ
!×
&Ñ
&Ó
(€Cð4Ûð
 ×,Ñ,×1Ñ1Ó3ˆØ€DØ5@·_±_×5LÑ5LÖM°”˜Ÿ™¨Õ+ÒMò *ˆÜ˜#ŒØØ×%Ñ%Ó'¨3¨%Ñ/ò 	*ˆCÜ! #› qÑ)ˆD�ŠIñ	*ð*ô +0°°tÓ*<Ö= ��u‘Ò=€Hô1ð ×"Ñ"€GØ×Ñ€DØ×$Ñ$€HØ˜‰~€Hô ”U˜8“_Ó%€IØ��h‘€IØ�3˜‘>€LØ��h‘€IÜ×/Ñ/ÐÜ×+Ñ+ÐÜ ×7Ñ7ÐÜ×!Ñ!€Hà=>Ð>€IÐ>�Ð>˜y¨?áÜˆk˜8ð &6ä—:‘:õ	ð   ¨2¡°Ñ!1Ñ2°I°XÐ>ˆØ˜(˜7Ð# cÑ)¨G°G°HÐ,=Ñ=ˆÜˆgœCŸJ™J¨dÕ3à€GÜ�2�r˜3  TÔ*Ü×ÑÔàò ')ˆÙ“+ˆä�r˜2˜s C¨Ô.Ü×ÑÔñ 0Ó1ˆÙ(Ó*¨^Ñ;ˆÙ#Ó%¨¸Ñ(:Ñ:ˆÙ“:ˆá% h°Ñ&:Ó;ˆ	�!‰Ù(¨°|Ñ)CÓDˆ�Q‰Ù% h°Ñ&:Ó;ˆ	�!‰áä˜i¨™l¨L¸©O¸YÀq¹\ÓJˆKØ˜aÒØ‘Ø˜rÒ!ðà!ñ#‘ð �Ø�GŠ|Ü�c˜r¬¯
©
¸$Õ?Ü�&˜b¤s§z¡z¸Õ>ØØà"ˆØˆ	Øˆ	Ø(‰ðO')ñR Ü”3—:‘:Õò3òð €Fà	�L /Ð2Ø	�¨Ð8Ø	Ð&¨Ð8ð'ò FÑ"ˆ�	˜7ð ˜˜Ð!ˆÙ˜&“/ˆÜ˜“[ˆ
Ù’jâš6¢9¬c°&¬kð;ˆCä�#˜2¤C§J¡JÕ/ÙÜœ3Ÿ:™:¨TÕ2Ü˜( C°'Ô:ð #¸fÜ˜# FÕ+Ø—L‘L”N÷#ð ‘äÐ'¬c¯j©jÀÖEð)Fð* �GÐÐøôM ò Ø‹ðüò Nùò >÷`#ð #ús*   Á;P5 Â3QÄ
QÏ*QÐ5QÑQÑQ	c                 ó^  — dd l }dd l}| t        j                  d d  |j                  j                  «        |j                  j                  |«       t        j                  j                  «        t        j                  j                  |«       	 dd l	}|j                  j                  «        |j                  j                  |«       |j                  j                  D �cg c]  }t        |j                  |«      ‘Œ }	}t        t         |	«      }	|	D ]h  }
|
j#                  «       |
gz   D ]O  }|j%                  |t'        «       «      D ]   } |«       €Œ|j)                   |«       «       Œ" |j+                  «        ŒQ Œj t-        «        t        j.                  «        y # t        $ r Y ŒÞw xY wc c}w )Nr   )rH   rI   rN   rO   rP   ÚclearÚupdaterK   rR   rS   rT   rU   rV   rW   rX   Úfilterr   rY   Úgetr   ÚregisterÚ_abc_caches_clearr	   Ú_clear_type_cache)rl   rm   rn   ro   rp   rH   rk   rS   rF   Úabs_classesrV   r   r   s                r   rd   rd   ½   si  € ÛÛð „H×Ñ‘QÐØ×Ñ× Ñ Ô"Ø×Ñ×!Ñ! "Ô%Ü×Ñ×!Ñ!Ô#Ü×Ñ×"Ñ" 3Ô'ð3Ûð 	×&Ñ&×,Ñ,Ô.Ø×&Ñ&×-Ñ-¨cÔ2ð 9D¿¹×8OÑ8OÖP°1”7˜;Ÿ?™?¨AÕ.ÐP€KÐPÜœ [Ó1€KØò $ˆØ×%Ñ%Ó'¨3¨%Ñ/ò 	$ˆCØ—x‘x ¤S£UÓ+ò (�Ù“5Ñ$Ø—L‘L¡£Õ'ð(ð ×!Ñ!Õ#ñ		$ð$ô „Nô ×ÑÕøô+ ò Ùðüò Qs   ÂF Ã F*Æ	F'Æ&F'c                  óÔ   — t        t        d«      «      } t        d«      D ]
  }| ||dz     Œ t        d«      D �cg c]  }t        |«      ‘Œ c} t        t        dd«      «       y c c}w )Né   r   éûÿÿÿi  )ÚbytesrZ   Úchrr^   )Úsr|   s     r   rM   rM   á   s[   € äŒe�C‹jÓ€AÜ�3‹Zò ˆØ	ˆ!ˆAˆa‰CŠðô ˜3“ZÖ �„Sˆ…VÓ äŒˆr�3‹Õùò !s   ºA%)rK   rN   Úinspectr   Útypingr   Útestr   Útest.supportr   Úruntestsr   Úutilsr	   Ú_abcr
   rU   r   ÚboolrŠ   rd   rM   r<   r   r   ú<module>r¢      sg   ðÛ 
Û Ý Ý å Ý "å !Ý ð
JÝðaØ"-ðaàóaòH!óHøðg ò JÛôJðJús   ®A ÁAÁA