§
    (¶Õi½  ã                   ó”   — d dl Z 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 n# e$ r
 d dlZd„ ZY nw xY wd„ Zd	„ Zd
„ ZdS )é    N)Ú
isabstract)Úsupport)Ú	os_helper)Úclear_caches)Ú	_get_dumpc                 óh   — t          d„ | j        D ¦   «         ¦  «        }|| j        | j        | j        fS )Nc              3   ó>   K  — | ]}t          j        |¦  «        V — Œd S ©N)ÚweakrefÚref)Ú.0Úobjs     ú//usr/lib/python3.11/test/libregrtest/refleak.pyú	<genexpr>z_get_dump.<locals>.<genexpr>   s,   è è € ÐNÐN°S¥¤¨CÑ 0Ô 0ÐNÐNÐNÐNÐNÐNó    )ÚsetÚ_abc_registryÚ
_abc_cacheÚ_abc_negative_cacheÚ_abc_negative_cache_version)ÚclsÚregistry_weakrefss     r   r   r      sB   € õ  ÐNÐN¸CÔ<MÐNÑNÔNÑNÔNÐØ! 3¤>ØÔ'¨Ô)HðJð 	Jr   c           
      óÈ  ‡(‡)— ddl }ddlŠ(t          t          d¦  «        st	          d¦  «        ‚t          ¦   «          t          j        dd…         }|j         	                    ¦   «         }t          j
         	                    ¦   «         }	 ddl}|j         	                    ¦   «         }n# t          $ r d}Y nw xY wi }	ˆ(fd„‰(j        j        D ¦   «         D ]E}
t!          |
¦  «        sŒ|
                     ¦   «         |
gz   D ]}t%          |¦  «        d         |	|<   ŒŒFd„ t'          dd¦  «        D ¦   «         Š)ˆ)fd	„}| j        \  }}}t*          j                             t0          j        |¦  «        }||z   }t5          t'          |¦  «        ¦  «        }dg|z  }dg|z  }dg|z  }t          j        }t          j        }t          j        }t0          j        }dx}x}}| j        sJtA          d
|dt          j!        ¬¦  «         tA          d|dz  dz   z  d|…         t          j!        d¬¦  «         tE          |||||	¦  «         tG          j$        ¦   «          |D ]¸} |¦   «          tE          |||||	¦  «         tG          j$        ¦   «           |¦   «          |¦   «         z
  } |¦   «         } |¦   «         }| j        stA          ddt          j!        d¬¦  «          |||z
  ¦  «        ||<    |||z
  ¦  «        ||<    |||z
  ¦  «        ||<   |}|}|}Œ¹| j        stA          t          j!        ¬¦  «         d„ } d„ }!d}"|d| f|d| f|d|!ffD ]¢\  }#}$}%|#|d…         }# |%|#¦  «        r‡|›d|#›d|$›dtK          |#¦  «        ›�}&tA          |&t          j!        d¬¦  «         tM          |dd¬ ¦  «        5 }'tA          |&|'¬¦  «         |' '                    ¦   «          ddd¦  «         n# 1 swxY w Y   d}"Œ£|"S )!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 Pythonc                 ó:   •— g | ]}t          ‰j        |¦  «        ‘ŒS © ©ÚgetattrÚabc©r   ÚaÚcollectionss     €r   ú
<listcomp>zdash_R.<locals>.<listcomp>3   s%   ø€ ÐMÐMÐM°•˜œ¨Ñ+Ô+ÐMÐMÐMr   c                 ó   — i | ]}||“ŒS r   r   )r   Úvalues     r   ú
<dictcomp>zdash_R.<locals>.<dictcomp>=   s   € Ð=Ð=Ð= ��uÐ=Ð=Ð=r   iüÿÿiè  c                 ó0   •— ‰                      | | ¦  «        S r
   )Ú
setdefault)r%   Úint_pools    €r   Úget_pooled_intzdash_R.<locals>.get_pooled_int>   s   ø€ Ø×"Ò" 5¨%Ñ0Ô0Ð0r   Ú	beginningÚrepetitions)ÚfileÚ
1234567890é
   é   T)r-   Úflushú.Ú )Úendr-   r1   c                 ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3   ó"   K  — | ]
}|d k    V — ŒdS )r0   Nr   )r   Údeltas     r   r   z2dash_R.<locals>.check_rc_deltas.<locals>.<genexpr>€   s&   è è € Ð2Ð2 %�5˜A’:Ð2Ð2Ð2Ð2Ð2Ð2r   )Úall©Údeltass    r   Úcheck_rc_deltaszdash_R.<locals>.check_rc_deltass   s!   € õ Ð2Ð2¨6Ð2Ñ2Ô2Ñ2Ô2Ð2r   c                 ó    — t          | ¦  «        S r
   )Úanyr9   s    r   Úcheck_fd_deltaszdash_R.<locals>.check_fd_deltas‚   s   € Ý�6‰{Œ{Ðr   FÚ
referenceszmemory blockszfile descriptorsz leaked ú z, sum=r!   zutf-8)Úencoding)(ÚcopyregÚcollections.abcÚhasattrÚsysÚ	ExceptionÚwarm_cachesÚwarningsÚfiltersÚdispatch_tableÚcopyÚpath_importer_cacheÚ	zipimportÚ_zip_directory_cacheÚImportErrorr   Ú__all__r   Ú__subclasses__r   ÚrangeÚ
huntrleaksÚosÚpathÚjoinr   ÚSAVEDCWDÚlistÚgetallocatedblocksr   Ú_getquickenedcountÚfd_countÚquietÚprintÚstderrÚdash_R_cleanupr   Ú
gc_collectÚsumÚopenr1   )*ÚnsÚ	test_nameÚ	test_funcrB   ÚfsÚpsÚpicrM   ÚzdcÚabcsr   r   r*   ÚnwarmupÚntrackedÚfnameÚrepcountÚ	rep_rangeÚ	rc_deltasÚalloc_deltasÚ	fd_deltasrY   r   rZ   r[   Ú	rc_beforeÚalloc_beforeÚ	fd_beforeÚiÚalloc_afterÚrc_afterÚfd_afterr;   r>   Úfailedr:   Ú	item_nameÚcheckerÚmsgÚrefrepr"   r)   s*                                           @@r   Údash_Rr      s  øø€ ð €N€N€NØÐÐÐå•3Ð*Ñ+Ô+ð %Ýð $ñ %ô %ð 	%õ
 �M„M€Mõ 
Ô	˜!˜!˜!Ô	€BØ	Ô	×	$Ò	$Ñ	&Ô	&€BÝ
Ô
!×
&Ò
&Ñ
(Ô
(€Cð4ØÐÐÐð Ô,×1Ò1Ñ3Ô3ˆˆøõ ð ð ð Øˆˆˆðøøøð €DØMÐMÐMÐM°[´_Ô5LÐMÑMÔMð *ð *ˆÝ˜#‰Œð 	ØØ×%Ò%Ñ'Ô'¨3¨%Ñ/ð 	*ð 	*ˆCÝ! #™œ qÔ)ˆD�‰IˆIð	*ð >Ð=­%°°tÑ*<Ô*<Ð=Ñ=Ô=€Hð1ð 1ð 1ð 1ð 1ð  "œ}Ñ€GˆX�uÝŒG�LŠL�Ô+¨UÑ3Ô3€EØ˜Ñ!€Hõ •U˜8‘_”_Ñ%Ô%€IØ��h‘€IØ�3˜‘>€LØ��h‘€IÝÔ/ÐÝÔ+ÐÝÔ/ÐÝÔ!€Hà+,Ð,€IÐ,�˜yàŒ8ð Ýˆk˜8 ]½¼ÐDÑDÔDÐDÝˆ|˜X r™\¨AÑ-Ñ.°	°°	Ô:ÅÄØð	ñ 	ô 	ð 	õ �2�r˜3  TÑ*Ô*Ð*ÝÔÑÔÐàð ð ˆØˆ	‰Œˆå�r˜2˜s C¨Ñ.Ô.Ð.ÝÔÑÔÐð )Ð(Ñ*Ô*Ð-?Ð-?Ñ-AÔ-AÑAˆØ#Ð#Ñ%Ô%ˆØ�8‘:”:ˆàŒxð 	<Ý�#˜2¥C¤J°dÐ;Ñ;Ô;Ð;à%�~ h°Ñ&:Ñ;Ô;ˆ	�!‰Ø(˜.¨°|Ñ)CÑDÔDˆ�Q‰Ø%�~ h°Ñ&:Ñ;Ô;ˆ	�!‰à"ˆØˆ	Øˆ	ˆ	àŒ8ð Ý•3”:ÐÑÔÐð3ð 3ð 3ðð ð ð €Fà	�L /Ð2Ø	�¨Ð8Ø	Ð&¨Ð8ð'ð ð Ñ"ˆ�	˜7ð ˜˜˜Ô!ˆØˆ7�6‰?Œ?ð 	à�	�	˜6˜6˜6 9 9 9­c°&©k¬k¨kð;ˆCå�#�CœJ¨dÐ3Ñ3Ô3Ð3Ý�e˜S¨7Ð3Ñ3Ô3ð °vÝ�c Ð'Ñ'Ô'Ð'Ø—’‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ˆFøØ€Ms$   Â	B' Â'B6Â5B6Î"&OÏO	ÏO	c                 óH  ‡— dd l }dd lŠ| t          j        d d …<   |j                             ¦   «          |j                             |¦  «         t          j                             ¦   «          t          j                             |¦  «         	 dd l	}|j
                             ¦   «          |j
                             |¦  «         n# t          $ r Y nw xY wˆfd„‰j        j        D ¦   «         }t          t          |¦  «        }|D ]}}|                     ¦   «         |gz   D ]b}	|                     |	t%          ¦   «         ¦  «        D ])}
 |
¦   «         �|	                      |
¦   «         ¦  «         Œ*|	                     ¦   «          ŒcŒ~t+          ¦   «          t          j        ¦   «          d S )Nr   c                 ó:   •— g | ]}t          ‰j        |¦  «        ‘ŒS r   r   r    s     €r   r#   z"dash_R_cleanup.<locals>.<listcomp>«   s%   ø€ ÐPÐPÐP°1•7˜;œ?¨AÑ.Ô.ÐPÐPÐPr   )rB   rC   rH   rI   rJ   ÚclearÚupdaterE   rL   rM   rN   rO   r   rP   Úfilterr   rQ   Úgetr   ÚregisterÚ_abc_caches_clearr   Ú_clear_type_cache)rf   rg   rh   ri   rj   rB   rM   Úabs_classesr   r   r   r"   s              @r   r_   r_   ˜   sÊ  ø€ Ø€N€N€NØÐÐÐð …HÔ�Q�Q�QÑØÔ× Ò Ñ"Ô"Ð"ØÔ×!Ò! "Ñ%Ô%Ð%ÝÔ×!Ò!Ñ#Ô#Ð#ÝÔ×"Ò" 3Ñ'Ô'Ð'ð3ØÐÐÐð 	Ô&×,Ò,Ñ.Ô.Ð.ØÔ&×-Ò-¨cÑ2Ô2Ð2Ð2øõ	 ð ð ð Øˆðøøøð QÐPÐPÐP¸¼Ô8OÐPÑPÔP€KÝ� [Ñ1Ô1€KØð $ð $ˆØ×%Ò%Ñ'Ô'¨3¨%Ñ/ð 	$ð 	$ˆCØ—x’x ¥S¡U¤UÑ+Ô+ð (ð (�Ø�3‘5”5Ð$Ø—L’L  ¡¤Ñ'Ô'Ð'øØ×!Ò!Ñ#Ô#Ð#Ð#ð		$õ �N„N€Nõ ÔÑÔÐÐÐs   ÂC Ã
CÃCc                  óè   — t          t          d¦  «        ¦  «        } t          d¦  «        D ]}| ||dz   …          Œd„ t          d¦  «        D ¦   «          t          t          dd¦  «        ¦  «         d S )Né   r0   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )Úchr)r   rv   s     r   r#   zwarm_caches.<locals>.<listcomp>Á   s   € Ð Ð Ð �…Sˆ�V„VÐ Ð Ð r   éûÿÿÿi  )ÚbytesrR   rX   )Úsrv   s     r   rG   rG   »   ss   € å�e�C‰jŒjÑÔ€AÝ�3‰ZŒZð ð ˆØ	ˆ!ˆAˆa‰Cˆ%Œˆˆà Ð •U˜3‘Z”ZÐ Ñ Ô Ð å�ˆr�3‰ŒÑÔÐÐÐr   )rT   rE   rH   Úinspectr   Útestr   Útest.supportr   Útest.libregrtest.utilsr   Ú_abcr   rO   r   r   r_   rG   r   r   r   ú<module>r–      s  ðØ 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø /Ð /Ð /Ð /Ð /Ð /ð
JØÐÐÐÐÐÐøØð Jð Jð JØ€N€N€NðJð Jð Jð Jð JðJøøøðð ð ðD ð  ð  ðFð ð ð ð s   ¦- ­<»<