ó
    F\h¡h ã                   óh  • S r \S:w  a  \" S5      eSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKrSSKrSSKrSSKr/ SQrSrSrSrS	r\R.                  R1                  \R.                  R3                  \5      5      r\R.                  R1                  \5      r\R.                  R1                  \5      r\R.                  R1                  \5      r " S
 S\5      r  " S S\ 5      r! " S S\!5      r" " S S\ 5      r# " S S\RH                  5      r%S r&S r'S r(Sr)Sr*Sq+Sq,Sr-Sr.Sq/S r0S r1S r2S r3S r4SçS jr5S r6S  r7S! r8S" r9SçS# jr:SSSSS$.S% jr;SçSSSSS$.S& jjr<\;" S'S(9r=S) r>S* r?S+r@S,rA\R„                  " \CR‰                  S-5      R‹                  S.5      S/5      rFSèS0 jrGSéS1 jrHSêS2 jrISëS3 jrJS4 rKSìS5 jrL\Rš                  SíS6 j5       rNS7 rO\R                   S8:H  rQ\R                   R‹                  S95      rR\R                   S::H  rS\R                   S;;  a  \S(       a  S<OS=rTOSrT\R                   S>:H  rU\R                   S?:H  rV\R                   S@;   rW\W=(       d    \R                   SA:H  rX\Y" \SB5      =(       a"    \U=(       d    \V=(       d    \W=(       d    \S(       + rZSC r[\U=(       d    \V=(       d    \W=(       d    \S(       + r\SD r]\U=(       d    \V(       + r^SSE.SF jr_Sr`\R                   S8:w  a   \RÂ                  " SG5      SG:g  r`SHrcSrdSre\R.                  RÍ                  \SI5      rgSJ rhSçSK jriSL rjSM\kSN\l\k\m4   4SO jrnSîSSSP.SQ jjroSR rp\Rš                  SS 5       rqST rrSU rsSV rtSW ru\Rš                  SX 5       rv\Rš                  SY 5       rwSZ rxS[ ryS\ rz\{" \Rø                  " S]5      5      r}SïS^ jr~S_ r\}(       a  S`r€OSar€Sbr�\€Sc-   r‚Sd rƒSe r„Sfr…Sgr†Sh r‡SSi.Sj jrˆ\Rš                  Sk 5       r‰Sl rŠSm r‹SnrŒSo\Œ-  r�Sp\�-  rŽSq\�-  r�\GR                   r‘Sr\kSN\’4Ss jr“Sr\kSNS4St jr” " Su Sv5      r•SíSw jr–Sx r—Sy r˜Sz r™S{ ršSçS| jr›S} rœS~ r�S ržS€ rŸS� r \Rø                  " S‚5      =(       d    SƒSƒ:H  r¡S„ r¢S… r£\�" 5       =(       a-    \R                   S8:g  =(       a    \Rø                  " S†5      (       + r¤\£R                   SLr¥\¥=(       a    \¤(       + r¦\R„                  " \¦S‡5      r§Sˆ r¨S‰ r©\GRT                  \©l«        Sq¬SŠ r­\Rš                  S‹ 5       r®\Rš                  SŒ 5       r¯S� r°SŽ r± " S� S�\m5      r²Sq³S‘ r´ " S’ S“5      rµS” r¶S•S–.S— jr·  SðS˜ jr¸SñS™ jr¹ " Sš S›5      rºSœ r»\Rš                  S� 5       r¼Sž r½SSŸ.S  jr¾S¡ r¿SòS¢ jrÀ/ 4S£ jrÁSqÂS¤ rÃS¥ rÄ\Rš                  S¦ 5       rÅ " S§ S¨5      rÆS© rÇSª rÈ " S« S¬5      rÉ\É" 5       rÊ " S­ S®5      rË\Ë" 5       rÌ\GRš                   " S¯ S°5      5       rÎ\Î" 5       rÏ\GRš                   " S± S²5      5       rÐ\Ð" 5       rÑS³ rÒ\GR¦                  GR¨                  rÕ\ÕS´;   d   eSµ rÖ " S¶ S·5      r×SS¸.S¹ jrØSº rÙS» rÚS¼ rÛS½ rÜ\Rš                  S¾ 5       rÝSçS¿ jrÞSÀ\kSÁ\kSN\m4SÂ jrßSÃ\mSNS4SÄ jràSÅ rá\GRÄ                  SÆ 5       rã\Rš                  SÇ 5       rä\Y" \SÈ5      råSÉ ræSçS'SÊ.SË jjrçSçSÌSÍS'SÎ.SÏ jjrè " SÐ SÑ5      ré\Rš                  SÒ 5       rêSÓ rëSÔ rì\Y" \SÕ5      =(       a     \GRÚ                  " 5       GRÜ                  SÖ:H  rï\GRà                  " \ïS×5      rñ\Y" \SØ5      ròSÙ ró\ô" SÚSÛ15      rõSÜ röSÝ r÷SÞ rø\Rš                  Sß 5       rùSà rúSá rûSN\l\k\k4   4Sâ jrüSã rý " Sä Så5      rþSæ rÿg! \b a     GN–f = f)óz7Supporting definitions for the Python regression tests.ztest.supportz.support must be imported from the test packageé    N)XÚPIPE_MAX_SIZEÚverboseÚ
max_memuseÚuse_resourcesÚfailfastÚErrorÚ
TestFailedÚTestDidNotRunÚResourceDeniedÚrecord_original_stdoutÚget_original_stdoutÚcaptured_stdoutÚcaptured_stdinÚcaptured_stderrÚcaptured_outputÚis_resource_enabledÚrequiresÚrequires_freebsd_versionÚrequires_gil_enabledÚrequires_linux_versionÚrequires_mac_verÚcheck_syntax_errorÚrequires_gzipÚrequires_bz2Úrequires_lzmaÚ
bigmemtestÚbigaddrspacetestÚcpython_onlyÚget_attributeÚrequires_IEEE_754Úrequires_zlibÚhas_fork_supportÚrequires_forkÚhas_subprocess_supportÚrequires_subprocessÚhas_socket_supportÚrequires_working_socketÚanticipate_failureÚload_package_testsÚdetect_api_mismatchÚcheck__all__Úskip_if_buggy_ucrt_strfptimeÚcheck_disallow_instantiationÚcheck_sanitizerÚskip_if_sanitizerÚrequires_limited_apiÚrequires_specializationÚ
MS_WINDOWSÚ	is_jythonÚ
is_androidÚis_emscriptenÚis_wasiÚis_apple_mobileÚcheck_impl_detailÚ
unix_shellÚsetswitchintervalÚget_pagesizeÚopen_urlresourceÚreap_childrenÚrun_with_localeÚ	swap_itemÚfindfileÚinfinite_recursionÚ	swap_attrÚMatcherÚset_memlimitÚSuppressCrashReportÚsortdictÚrun_with_tzÚPGOÚmissing_compiler_executableÚ	ALWAYS_EQÚNEVER_EQÚLARGESTÚSMALLESTÚLOOPBACK_TIMEOUTÚINTERNET_TIMEOUTÚSHORT_TIMEOUTÚLONG_TIMEOUTÚPy_DEBUGÚexceeds_recursion_limitÚget_c_recursion_limitÚskip_on_s390xÚwithout_optimizerÚforce_not_colorizedÚforce_not_colorized_test_classÚmake_clean_envÚ
BrokenIterg      $@g      N@g      >@g     Àr@c                   ó   • \ rS rSrSrSrg)r   éq   z*Base class for regression test exceptions.© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r]   ó    Ú,/usr/lib/python3.13/test/support/__init__.pyr   r   q   s   † Ü4re   r   c                   ó:   ^ • \ rS rSrSrSS.U 4S jjrS rSrU =r$ )r	   ét   úTest failed.N©Ústatsc                ó@   >• Xl         X l        [        TU ]  " U/UQ76   g ©N)Úmsgrk   ÚsuperÚ__init__)Úselfrn   rk   ÚargsÚ	__class__s       €rf   rp   ÚTestFailed.__init__v   s   ø€ ØŒØŒ
Ü‰Ò˜Ð$˜tÔ$re   c                 ó   • U R                   $ rm   ©rn   ©rq   s    rf   Ú__str__ÚTestFailed.__str__{   s   € Ø�x‰xˆre   )rn   rk   )	r_   r`   ra   rb   rc   rp   rx   rd   Ú__classcell__©rs   s   @rf   r	   r	   t   s   ø† ÙØ)-÷ %ð %÷
ð re   r	   c                   ó,   ^ • \ rS rSrSrU 4S jrSrU =r$ )ÚTestFailedWithDetailsé~   ri   c                 ó:   >• X l         X0l        [        TU ]  XX4S9  g )Nrj   )ÚerrorsÚfailuresro   rp   )rq   rn   r€   r�   rk   rs   s        €rf   rp   ÚTestFailedWithDetails.__init__€   s   ø€ ØŒØ ŒÜ‰Ñ˜ hÐÒ<re   )r€   r�   )r_   r`   ra   rb   rc   rp   rd   rz   r{   s   @rf   r}   r}   ~   s   ø† Ù÷=ó =re   r}   c                   ó   • \ rS rSrSrSrg)r
   é…   zTest did not run any subtests.r]   Nr^   r]   re   rf   r
   r
   …   s   † Ü(re   r
   c                   ó   • \ rS rSrSrSrg)r   éˆ   zÐTest skipped because it requested a disallowed resource.

This is raised when a test calls requires() for a resource that
has not be enabled.  It is used to distinguish between expected
and unexpected skips.
r]   Nr^   r]   re   rf   r   r   ˆ   s   † ôre   r   c                 ó6   • U (       a  [         R                  $ S $ )z�Decorator to mark a test that is known to be broken in some cases

Any use of this decorator should have a comment identifying the
associated tracker issue.
c                 ó   • U $ rm   r]   )Úfs    rf   Ú<lambda>Ú$anticipate_failure.<locals>.<lambda>˜   s   € ‘Qre   )ÚunittestÚexpectedFailure)Ú	conditions    rf   r(   r(   �   s   € ö Ü×'Ñ'Ð'ÙÐre   c                 ó`   • Uc  Sn[         nUR                  U UUS9nUR                  U5        U$ )zâGeneric load_tests implementation for simple test packages.

Most packages can implement load_tests using this function as follows:

   def load_tests(*args):
       return load_package_tests(os.path.dirname(__file__), *args)
ztest*)Ú	start_dirÚtop_level_dirÚpattern)Ú
STDLIB_DIRÚdiscoverÚaddTests)Úpkg_dirÚloaderÚstandard_testsr’   Útop_dirÚpackage_testss         rf   r)   r)   š   sD   € ð �ØˆÜ€GØ—O‘O¨gØ29Ø,3ð $ð 5€Mð ×Ñ˜MÔ*ØÐre   c                 óv   •  [        X5      nU$ ! [         a    [        R                  " SU < SU< 35      ef = f)z?Get an attribute, raising SkipTest if AttributeError is raised.zobject z has no attribute )ÚgetattrÚAttributeErrorrŒ   ÚSkipTest)ÚobjÚnameÚ	attributes      rf   r   r   ¬   sB   € ðÜ˜CÓ&ˆ	ð Ðøô ó OÜ×ÓÃ3ÊÐ MÓNÐNðOús   ‚ �)8é   Fc                 ó   • U q g rm   )Ú_original_stdout)Ústdouts    rf   r   r   Á   s   € àÑre   c                  ó<   • [         =(       d    [        R                  $ rm   )r¤   Úsysr¥   r]   re   rf   r   r   Å   s   € Ü×)œsŸz™zÐ)re   c                 ó¤  •  U" U6 $ ! [          a6  n[        S:¼  a&  [        UR                  R                  < SU< 35        e S nAf[
         a€  n[        S:¼  aB  [        UR                  R                  < SU< 35        [        SUR                  < U< 35        [        R                  " U [        R                  5        U" U6 s S nA$ S nAff = f)Né   ú: zre-run )
ÚFileNotFoundErrorr   Úprintrs   r_   ÚOSErrorÚosÚchmodÚstatÚS_IRWXU)ÚpathÚfuncrr   Úerrs       rf   Ú
_force_runrµ   É   s–   € ðÙ�Tˆ{ÐøÜó ä�a‹<Ü˜cŸm™m×4Ô4²cÐ:Ô;ØûÜó Ü�a‹<Ü˜cŸm™m×4Ô4²cÐ:Ô;Ý 4§=£=²$Ð7Ô8Ü
�Š�”t—|‘|Ô$Ù�Tˆ{Õûðús'   ‚ ‡
C‘1AÁCÁA5C
ÃCÃ
Cc            	      ó¢  ^• [        [        S5      (       a  [        R                  $ SS Kn S n[        R                  R                  S5      (       a  U R                  5       (       a  SnGO�[        R                  R                  S5      (       aû  SS KmSS KmSnSn " U4S jSTR                  5      nTR                  R                  nUR                  5       nU(       d  TR                  5       eU" 5       nTR                  R                  5       nUR!                  UUTR#                  U5      TR%                  U5      TR#                  U5      5      n	U	(       d  TR                  5       e['        UR(                  U-  5      (       d  SnOb[        R                  S	:X  aN  SS Kn
 U
R-                  S
S/SSS9nUR.                  R1                  S5      R3                  5       nUS:w  a  SU< S3nU(       d>   SSKJn  U" 5       nUR;                  5         UR=                  5         UR?                  5         U[        l&        U(       + [        l        [        R                  $ ! U
R4                   a    Sn N„f = f! [@         aQ  n[C        U5      n[E        U5      S:”  a  US S S-   nSRG                  [I        U5      RJ                  U5      n S nAN™S nAff = f)NÚresultr   Úwinz(gui is not available on Windows IoT Corer¢   c                   óª   >• \ rS rSrS Y R                  R
                  4S Y R                  R
                  4S Y R                  R                  4/rSrg)Ú*_is_gui_available.<locals>.USEROBJECTFLAGSéè   ÚfInheritÚ	fReservedÚdwFlagsr]   N)	r_   r`   ra   rb   ÚwintypesÚBOOLÚDWORDÚ_fields_rd   )Úctypess   €rf   ÚUSEROBJECTFLAGSrº   è   s@   ø† Ø#¡V§_¡_×%9Ñ%9Ð:Ø$¡f§o¡o×&:Ñ&:Ð;Ø"¡F§O¡O×$9Ñ$9Ð:ð<‹Hre   rÄ   z,gui not available (WSF_VISIBLE flag not set)ÚdarwinÚ	launchctlÚmanagernameT)Úcapture_outputÚcheckzutf-8ÚAquazmanagername=z' -- can only run in a macOS GUI sessionz*unable to detect macOS launchd job manager)ÚTké2   z [...]zTk unavailable due to {}: {})'ÚhasattrÚ_is_gui_availabler·   Úplatformr§   Ú
startswithÚwin32_is_iotrÃ   Úctypes.wintypesÚ	StructureÚwindllÚuser32ÚGetProcessWindowStationÚWinErrorr¿   rÁ   ÚGetUserObjectInformationWÚbyrefÚsizeofÚboolr¾   Ú
subprocessÚrunr¥   ÚdecodeÚstripÚCalledProcessErrorÚtkinterrË   ÚwithdrawÚupdateÚdestroyÚ	ExceptionÚstrÚlenÚformatÚtyper_   Úreason)rÏ   rê   Ú	UOI_FLAGSÚWSF_VISIBLErÄ   ÚdllÚhÚuofÚneededÚresrÜ   ÚrcrÇ   rË   ÚrootÚeÚ
err_stringrÃ   s                    @rf   rÎ   rÎ   Ú   si  ø€ ÜÔ  (×+Ñ+Ü ×'Ñ'Ð'ÛØ€FÜ
‡|�|×Ñ˜u×%Ñ%¨(×*?Ñ*?×*AÑ*AØ;ŠÜ	�‰×	 Ñ	  ×	'Ñ	'ó 	ÛØˆ	Øˆ÷	<˜f×.Ñ.ô 	<ð �m‰m×"Ñ"ˆØ×'Ñ'Ó)ˆÞØ—/‘/Ó#Ð#ÙÓˆØ—‘×&Ñ&Ó(ˆØ×+Ñ+¨AØØ�L‰L˜ÓØ�M‰M˜#ÓØ�L‰L˜Ó ó	"ˆö
 Ø—/‘/Ó#Ð#Ü�C—K‘K +Ñ-×.Ñ.ØCˆFøÜ	�‰˜Ó	!ó 	ð	RØ—‘ ¨mÐ <Ø/3¸4ð  ð AˆBàŸ)™)×*Ñ*¨7Ó3×9Ñ9Ó;ˆKð ˜fÓ$Ø(˜K™>Ð)PÐQ�ö ð	GÝ"Ù“4ˆDØ�M‰MŒOØ�K‰KŒMØ�L‰LŒNð  &ÔÔØ#)œzÔÔä×#Ñ#Ð#øð1 ×,Ñ,ó 	BØAŠFð	Bûô ó 	GÜ˜Q›ˆJÜ�:‹ Ó#Ø'¨¨˜_¨xÑ7�
Ø3×:Ñ:¼4À»7×;KÑ;KØ;EóG�Fûð		Gús+   Æ"<I Ç3=I3 ÉI0É/I0É3
KÉ=AK	Ë	Kc                 ó2   • [         SL =(       d	    U [         ;   $ )zµTest whether a resource is enabled.

Known resources are set by regrtest.py.  If not running under regrtest.py,
all resources are assumed enabled unless use_resources has been set.
N)r   ©Úresources    rf   r   r   !  s   € ô ˜DÐ ×= H´Ñ$=Ð=re   c                 óà   • [        U 5      (       d  Uc  SU -  n[        U5      eU S;   a  [        (       d  [        S5      eU S:X  a)  [        5       (       d  [        [        R                  5      egg)z@Raise ResourceDenied if the specified resource is not available.Nz"Use of the %r resource not enabled>   ÚnetworkÚurlfetchzNo socket supportÚgui)r   r   r&   rÎ   rê   )rø   rn   s     rf   r   r   )  sm   € ä˜x×(Ñ(Ø‰;Ø6¸ÑAˆCÜ˜SÓ!Ð!ØÐ*Ó*×3EÒ3EÜÐ0Ó1Ð1Ø�5ÓÔ!2×!4Ñ!4ÜÔ.×5Ñ5Ó6Ð6ð "5Ðre   c                 óx  • SSK nSR                  [        [        U5      5      nUR	                  5       R                  SS5      S   nUR                  5       U :X  a.   [        [        [        UR                  S5      5      5      nXQ:  nOSn[        R                  " UU  SU SU 35      $ ! [         a    Sn N-f = f)	zÐDecorator raising SkipTest if the OS is `sysname` and the version is less
than `min_version`.

For example, @_requires_unix_version('FreeBSD', (7, 2)) raises SkipTest if
the FreeBSD version is less than 7.2.
r   NÚ.Ú-r¢   Fz	 version ú or higher required, not )rÏ   ÚjoinÚmapræ   ÚreleaseÚsplitÚsystemÚtupleÚintÚ
ValueErrorrŒ   ÚskipIf)ÚsysnameÚmin_versionrÏ   Úmin_version_txtÚversion_txtÚversionÚskips          rf   Ú_requires_unix_versionr  4  s¾   € ó Ø—h‘hœs¤3¨Ó4Ó5€OØ×"Ñ"Ó$×*Ñ*¨3°Ó2°1Ñ5€KØ‡�Ó˜GÓ#ð	)ÜœC¤ [×%6Ñ%6°sÓ%;Ó<Ó=ˆGð Ñ(‰Dàˆä�?Š?ØØˆ)�9˜_Ð-Ð-FØˆ-ð	óð øô ó 	ØŠDð	ús   Á(B* Â*B9Â8B9c                  ó   • [        SU 5      $ )zËDecorator raising SkipTest if the OS is FreeBSD and the FreeBSD version is
less than `min_version`.

For example, @requires_freebsd_version(7, 2) raises SkipTest if the FreeBSD
version is less than 7.2.
ÚFreeBSD©r  ©r  s    rf   r   r   O  s   € ô " )¨[Ó9Ð9re   c                  ó   • [        SU 5      $ )zÊDecorator raising SkipTest if the OS is Linux and the Linux version is
less than `min_version`.

For example, @requires_linux_version(2, 6, 32) raises SkipTest if the Linux
version is less than 2.6.32.
ÚLinuxr  r  s    rf   r   r   X  s   € ô " '¨;Ó7Ð7re   c                  ó   ^ • U 4S jnU$ )zÀDecorator raising SkipTest if the OS is Mac OS X and the OS X
version if less than min_version.

For example, @requires_mac_ver(10, 5) raises SkipTest if the OS X version
is lesser than 10.5.
c                 óX   >^ • [         R                  " T 5      U U4S j5       nTUl        U$ )Nc                  ód  >• [         R                  S:X  a„  SS KnUR                  5       S   n [        [	        [
        UR                  S5      5      5      nUT:  a=  SR                  [	        [        T5      5      n[        R                  " SU< SU< 35      e T" U 0 UD6$ ! [         a     Nf = f)NrÅ   r   rþ   z	Mac OS X r   )r§   rÏ   Úmac_verr  r  r  r  r  ræ   rŒ   rž   r  )rr   ÚkwrÏ   r  r  r  r³   r  s         €€rf   ÚwrapperÚ4requires_mac_ver.<locals>.decorator.<locals>.wrapperi  s­   ø€ ä�|‰|˜xÓ'ÛØ&×.Ñ.Ó0°Ñ3�ð	>Ü#¤C¬¨[×->Ñ->¸sÓ-CÓ$DÓE�Gð  Ó,Ø*-¯(©(´3´s¸KÓ3HÓ*I˜Ü&×/Ó/ã.²ð=ó>ð >ð -ñ
 ˜Ð$ Ñ$Ð$øô "ó Ùðús   ®(B" Â"
B/Â.B/)Ú	functoolsÚwrapsr  )r³   r  r  s   ` €rf   Ú	decoratorÚ#requires_mac_ver.<locals>.decoratorh  s-   ù€ Ü	�Š˜Ó	õ	%ó 
ð	%ð *ˆÔØˆre   r]   )r  r   s   ` rf   r   r   a  s   ø€ õð& Ðre   c                 ó  • SSK nU (       d  Sn  UR                  5       R                  5       S:H  n[        R                  " X 5      $ ! [        [        4 a4  n[
        R                  " [        5      R                  SX3S9  Sn SnANUSnAff = f)z4Decorator raising SkipTest if running on a buildbot.r   Nznot suitable for buildbotsÚbuildbotzgetpass.getuser() failed %s.©Úexc_infoF)ÚgetpassÚgetuserÚlowerÚKeyErrorr­   ÚloggingÚ	getLoggerr_   ÚwarningrŒ   r	  )rê   r&  Ú
isbuildbotr´   s       rf   Úskip_if_buildbotr.  ~  sx   € ãÞØ-ˆðØ—_‘_Ó&×,Ñ,Ó.°*Ñ<ˆ
ô �?Š?˜:Ó.Ð.øô ”gÐó Ü×Òœ(Ó#×+Ñ+Ð,JÈCÐ+Ñ^Ø�
ûðús   �!A ÁB
Á*BÂB
©ÚaddressÚmemoryÚubÚthreadc                 óÖ  • U (       d   U(       d  U(       d  U(       d  [        S5      e[        R                  " S5      =(       d    Sn[        R                  " S5      =(       d    SnSU;   =(       d    SU;   nSU;   =(       d    SU;   nS	U;   =(       d    S
U;   nSU;   =(       d    SU;   n	U=(       a    U=(       d/    U =(       a    U=(       d    U=(       a    U=(       d    U=(       a    U	$ )z9Returns True if Python is compiled with sanitizer supportz:At least one of address, memory, ub or thread must be TrueÚCFLAGSÚ ÚCONFIG_ARGSz-fsanitize=memoryz--with-memory-sanitizerz-fsanitize=addressz--with-address-sanitizerz-fsanitize=undefinedz#--with-undefined-behavior-sanitizerz-fsanitize=threadz--with-thread-sanitizer)r  Ú	sysconfigÚget_config_var)
r0  r1  r2  r3  ÚcflagsÚconfig_argsÚmemory_sanitizerÚaddress_sanitizerÚub_sanitizerÚthread_sanitizers
             rf   r.   r.   Š  sì   € æ–v¦¦vÜÐUÓVÐVô ×%Ò% hÓ/×5°2€FÜ×*Ò*¨=Ó9×?¸R€Kà˜vÑ%÷ 	1Ø! [Ñ0ð ð
 	 Ñ&÷ 	2Ø" kÑ1ð ð
 	 &Ñ(÷ 	=Ø-°Ñ<ð ð
 	˜vÑ%÷ 	1Ø! [Ñ0ð ð
 
×	$Ð$÷ 	&Ø	×	&Ð&÷	&à	×	�÷	&ð 
×	$Ð$ð	re   c                óT   • U (       d  Sn [        XX4S9n[        R                  " XP5      $ )z>Decorator raising SkipTest if running with a sanitizer active.z"not working with sanitizers activer/  )r.   rŒ   r	  )rê   r0  r1  r2  r3  r  s         rf   r/   r/   ª  s%   € æØ5ˆÜ 7¸bÑP€DÜ�?Š?˜4Ó(Ð(re   T)r0  c                 óJ   • S H  nX ;   a  X==   SU 3-  ss'   M  XU'   M     g )N)ÚASAN_OPTIONSÚMSAN_OPTIONSÚUBSAN_OPTIONSÚTSAN_OPTIONSÚ:r]   )ÚenvÚoptionr    s      rf   Úset_sanitizer_env_varrI  ¶  s+   € ÛQˆØ‹;Ø‹I˜1˜V˜H˜Ñ%�Ià�‹Iò	 Rre   c                 óF   ^ • [         R                  " T 5      U 4S j5       nU$ )z5Skip the test on TLS certificate validation failures.c                  óˆ   >•  T" U 0 UD6  g ! [          a+  nS[        U5      ;   a  [        R                  " S5      ee S nAff = f)NÚCERTIFICATE_VERIFY_FAILEDz.system does not contain necessary certificates)r­   ræ   rŒ   rž   )rr   Úkwargsrô   r‰   s      €rf   ÚdecÚ&system_must_validate_cert.<locals>.decÀ  sO   ø€ ð	ÙˆtÐ�vÓøÜó 	Ø*¬c°!«fÓ4Ü×'Ò'ð )Aó Bð Bàûð		ús   ƒ Œ
A–&<¼A©r  r  )r‰   rN  s   ` rf   Úsystem_must_validate_certrQ  ¾  s%   ø€ ä‡_‚_�QÓôó ðð €Jre   i @ i  ÚdoubleÚIEEEztest requires IEEE 754 doublesc                 ó\   •  SS K n[        R                  " X5      $ ! [         a    S n N$f = f©Nr   )ÚzlibÚImportErrorrŒ   Ú
skipUnless)rê   rV  s     rf   r!   r!   Þ  ó3   € ðÛô ×Ò˜tÓ,Ð,øô ó ØŠðúó   ‚ œ+ª+c                 ó\   •  SS K n[        R                  " X5      $ ! [         a    S n N$f = frU  )ÚgziprW  rŒ   rX  )rê   r\  s     rf   r   r   å  rY  rZ  c                 ó\   •  SS K n[        R                  " X5      $ ! [         a    S n N$f = frU  )Úbz2rW  rŒ   rX  )rê   r^  s     rf   r   r   ì  s3   € ðÛô ×Ò˜sÓ+Ð+øô ó ØŠðúrZ  c                 ó\   •  SS K n[        R                  " X5      $ ! [         a    S n N$f = frU  )ÚlzmarW  rŒ   rX  )rê   r`  s     rf   r   r   ó  rY  rZ  c                  óš   •  SS K n U R	                  5       n[        US   5      (       + $ ! [         a    [        R                  " S5      ef = f)Nr   ú_testinternalcapi requiredÚcode_debug_ranges)Ú_testinternalcapirW  rŒ   rž   Ú
get_configrÛ   )rd  Úconfigs     rf   Úhas_no_debug_rangesrg  ú  sQ   € ð>Û ð ×)Ñ)Ó+€FÜ�FÐ.Ñ/Ó0Ô0Ð0øô ó >Ü×ÒÐ <Ó=Ð=ð>ús	   ‚) ©!A
c                 ó@   • [         R                  " [        5       U 5      $ rm   )rŒ   r	  rg  )rê   s    rf   Úrequires_debug_rangesri    s   € Ü�?Š?Ô.Ó0°&Ó9Ð9re   c              #   óÐ   #   •  SSK nU (       d  Sv •  gUR                  S5         Sv •  UR                  S5        g! [         a    Sv •   gf = f! UR                  S5        f = f7f)z-Suppress immortalization of deferred objects.r   NTF)rd  rW  Úsuppress_immortalization)Úsuppressrd  s     rf   rk  rk    sc   é € ðÛ ö
 ÛØà×.Ñ.¨tÔ4ð:Ûà×2Ñ2°5Õ9øô ó ÛÙðûð 	×2Ñ2°5Õ9üs;   ‚A&„< ˆA&¦A ªA&¼AÁ
A&ÁAÁA&ÁA#Á#A&c                  óv   •  SS K n [        R                  " U R	                  5       S5      $ ! [         a     g f = f)Nr   z,requires immortalization of deferred objects)rd  rW  rŒ   rX  Úget_immortalize_deferred)rd  s    rf   Ú skip_if_suppress_immortalizationro    sD   € ðÛ ô ×ÒÐ0×IÑIÓKØ NóPð Pøô ó Ùðús   ‚+ «
8·8Úwin32ÚjavaÚandroid>   ÚiosÚtvosrp  ÚvxworksÚwatchosz/system/bin/shz/bin/shÚ
emscriptenÚwasi>   rs  rt  rv  rÅ   Úforkc                  ó8   • [         R                  " [        S5      $ )Nzrequires working os.fork())rŒ   rX  r"   r]   re   rf   r#   r#   @  s   € Ü×ÒÔ/Ð1MÓNÐNre   c                  ó8   • [         R                  " [        S5      $ )z3Used for subprocess, os.spawn calls, fd inheritancezrequires subprocess support)rŒ   rX  r$   r]   re   rf   r%   r%   O  s   € ä×ÒÔ5Ð7TÓUÐUre   )Úmodulec                 óŽ   • SnU (       a"  [         (       d  [        R                  " U5      eg[        R                  " [         U5      $ )z{Skip tests or modules that require working sockets

Can be used as a function/class decorator or to skip an entire module.
zrequires socket supportN)r&   rŒ   rž   rX  )r|  rn   s     rf   r'   r'   Y  s>   € ð
 $€CÞß!Ò!Ü×#Ò# CÓ(Ð(ð "ô ×"Ò"Ô#5°sÓ;Ð;re   z%4Yzhttp://www.pythontest.netÚdatac                 óÐ   • [         R                  S:w  a  gSSKnSnU  S3nUR                  5       u  pE[	        UR                  US5      5        [	        U5        [	        SU-  5        g)zKAssure user that loud errors generated by macOS libc's malloc are
expected.rÅ   Nr   z NOTICE zÅ may generate "malloc can't allocate region"
warnings on macOS systems. This behavior is known. Do not
report a bug unless tests are also failing.
See https://github.com/python/cpython/issues/85100rÿ   )r§   rÏ   ÚshutilÚget_terminal_sizer¬   Úcenter)Ú	test_namer€  rn   ÚdetailÚpaddingÚ_s         rf   Údarwin_malloc_err_warningr‡  ~  sf   € ô ‡|�|�xÓØãØ
€CØ�ð Cð C€Fð
 ×)Ñ)Ó+�J€GÜ	ˆ#�*‰*�W˜cÓ
"Ô#Ü	ˆ&„MÜ	ˆ#�‰-Õre   c                 óf  • [         R                  R                  U 5      (       a  U $ Ub  [         R                  R                  X5      n [        /[
        R                  -   nU HJ  n[         R                  R                  X05      n[         R                  R                  U5      (       d  MH  Us  $    U $ )aG  Try to find a file on sys.path or in the test directory.  If it is not
found the argument passed to the function is returned (this does not
necessarily signal failure; could still be the legitimate path).

Setting *subdir* indicates a relative path to use to find the file
rather than looking directly in the path directories.
)r®   r²   Úisabsr  ÚTEST_HOME_DIRr§   Úexists)ÚfilenameÚsubdirr²   ÚdnÚfns        rf   r@   r@   ‘  s~   € ô 
‡w�w‡}�}�X×ÑØˆØÑÜ—7‘7—<‘< Ó1ˆÜˆ?œSŸX™XÑ%€DÛˆÜ�W‰W�\‰\˜"Ó'ˆÜ�7‰7�>‰>˜"×Ó bšyñ ð €Ore   c                 ó”   • [        U R                  5       5      nU Vs/ s H  nSU-  PM
     nnSR                  U5      nSU-  $ s  snf )z%Like repr(dict), but in sorted order.z%r: %rz, z{%s})ÚsortedÚitemsr  )Údictr’  ÚpairÚ	reprpairsÚ
withcommass        rf   rF   rF   ¤  sH   € ä�4—:‘:“<Ó €EÙ-2Ó3ªU T�˜D”©U€IÐ3Ø—‘˜9Ó%€JØ�JÑÐùò 4s   žAÚcodeÚreturnc                 óJ   • 0 n[        [        R                  " U 5      U5        U$ )zHRun a piece of code after dedenting it, and return its global namespace.)ÚexecÚtextwrapÚdedent)r—  Únss     rf   Úrun_coderž  ¬  s   € à	€BÜŒ�Š˜Ó	 Ô#Ø€Ire   )ÚlinenoÚoffsetc                ó€  • U R                  [        U5       n[        USS5        S S S 5        WR                  nU R	                  UR
                  5        Ub  U R                  UR
                  U5        U R	                  UR                  5        Ub  U R                  UR                  U5        g g ! , (       d  f       N�= f)Nz<test string>rš  )ÚassertRaisesRegexÚSyntaxErrorÚcompileÚ	exceptionÚassertIsNotNonerŸ  ÚassertEqualr   )ÚtestcaseÚ	statementÚerrtextrŸ  r   Úcmr´   s          rf   r   r   ³  s”   € Ø	×	#Ñ	#¤K°Ô	9¸RÜ�	˜?¨FÔ3÷ 
:à
�,‰,€CØ×Ñ˜SŸZ™ZÔ(ØÑØ×Ñ˜SŸZ™Z¨Ô0Ø×Ñ˜SŸZ™ZÔ(ØÑØ×Ñ˜SŸZ™Z¨Õ0ð ÷ 
:Õ	9ús   —B/Â/
B=c                 óR  ^^^• SS K nSS KnSSKJn   SS KnTR                  SS 5      mUR                  R                  U 5      S   R                  S5      S   n[        R                  R                  [        U5      nUUU4S jn[        R                  R                  U5      (       a  U" U5      n	U	b  U	$ U" U5        [        S	5        [         (       a  [#        S
U -  [%        5       S9  UR&                  R)                  5       n
U(       a  U
R*                  R-                  S5        U
R/                  U [0        S9n	U(       a.  U	R2                  R5                  S5      S:X  a  UR7                  U	S9n	 [/        US5       nU	R9                  5       nU(       a*  UR;                  U5        U	R9                  5       nU(       a  M*  S S S 5        U	R=                  5         U" U5      n	U	b  U	$ [?        SU-  5      e! [
         a    S n GNèf = f! , (       d  f       NL= f! U	R=                  5         f = f)Nr   r¢   )ÚunlinkrÉ   r©   Ú/éÿÿÿÿc                 óŽ   >• [        U /TQ70 TD6nTc  U$ T" U5      (       a  UR                  S5        U$ UR                  5         g rU  )ÚopenÚseekÚclose)r�  r‰   rr   rÉ   r  s     €€€rf   Úcheck_valid_fileÚ*open_urlresource.<locals>.check_valid_fileÍ  sC   ø€ Ü�Ð!�dÒ!˜bÑ!ˆØ‰=ØˆHÙ�1�X‰XØ�F‰F�1ŒIØˆHØ	�‰�	re   rû   z	fetching %s ...©Úfile)zAccept-Encodingr\  ©ÚtimeoutzContent-Encodingr\  )ÚfileobjÚwbzinvalid resource %r) Úurllib.requestÚurllib.parseÚ	os_helperr­  r\  rW  ÚpopÚparseÚurlparser  r®   r²   r  ÚTEST_DATA_DIRr‹  r   r   r¬   r   ÚrequestÚbuild_openerÚ
addheadersÚappendr±  rO   ÚheadersÚgetÚGzipFileÚreadÚwriter³  r	   )Úurlrr   r  Úurllibr­  r\  rŒ  r�  r´  r‰   ÚopenerÚoutÚsrÉ   s    ``          @rf   r<   r<   ¿  s¹  ú€ ß'Ý!ðÛð �F‰F�7˜DÓ!€Eà�|‰|×$Ñ$ SÓ)¨!Ñ,×2Ñ2°3Ó7¸Ñ;€Hä	�‰�‰”m XÓ	.€B÷ô 
‡w�w‡~�~�b×ÑÙ˜RÓ ˆØ‰=ØˆHÙˆrŒ
ô ˆZÔç‚wÜÐ! CÑ'Ô.AÓ.CÒDØ�^‰^×(Ñ(Ó*€FÞØ×Ñ× Ñ Ð!<Ô=Ø�‰�CÔ!1ˆÐ2€AÞ�—	‘	—‘Ð0Ó1°VÓ;Ø�M‰M !ˆMÐ$ˆðÜ�"�dŒ^˜sØ—‘“ˆAÞØ—	‘	˜!”Ø—F‘F“H�÷ �!÷ ð 	
�‰Œ	á˜Ó€AØ�}ØˆÜ
Ð*¨RÑ/Ó
0Ð0øô_ ó Ø‹ðú÷H �^ûð 	
�‰�	ús6   “G0 Å/H Å;A HÆ=H Ç0H Ç?H È
HÈH ÈH&c              #   óà   #   • SSK n[        [        U 5      n[        [        XR	                  5       5         [        [        U 5      v •  [        [        X5        g! [        [        X5        f = f7f)z…Return a context manager used by captured_stdout/stdin/stderr
that temporarily replaces the sys stream *stream_name* with a StringIO.r   N)Úiorœ   r§   ÚsetattrÚStringIO)Ústream_namerÒ  Úorig_stdouts      rf   r   r   ö  sL   é € ó Üœ#˜{Ó+€KÜŒC�Ÿk™k›mÔ,ð/Ü”c˜;Ó'Ò'ä”�[Õ.øŒ”�[Õ.üs   ‚3A.¶A ÁA.ÁA+Á+A.c                  ó   • [        S5      $ )z‡Capture the output of sys.stdout:

with captured_stdout() as stdout:
    print("hello")
self.assertEqual(stdout.getvalue(), "hello\n")
r¥   ©r   r]   re   rf   r   r     ó   € ô ˜8Ó$Ð$re   c                  ó   • [        S5      $ )z˜Capture the output of sys.stderr:

with captured_stderr() as stderr:
    print("hello", file=sys.stderr)
self.assertEqual(stderr.getvalue(), "hello\n")
ÚstderrrØ  r]   re   rf   r   r     rÙ  re   c                  ó   • [        S5      $ )zÛCapture the input to sys.stdin:

with captured_stdin() as stdin:
    stdin.write('hello\n')
    stdin.seek(0)
    # call test code that consumes from sys.stdin
    captured = input()
self.assertEqual(captured, "hello")
ÚstdinrØ  r]   re   rf   r   r     s   € ô ˜7Ó#Ð#re   c                  ól   • SSK n U R                  5         U R                  5         U R                  5         g)a¾  Force as many objects as possible to be collected.

In non-CPython implementations of Python, this is needed because timely
deallocation is not guaranteed by the garbage collector.  (Even in CPython
this can be the case in case of reference cycles.)  This means that __del__
methods may be called later than expected and weakrefs may remain alive for
longer than expected.  This function tries its best to force all garbage
objects to disappear.
r   N)ÚgcÚcollect)rß  s    rf   Ú
gc_collectrá  !  s"   € ó Ø‡J�J„LØ‡J�J„LØ‡J�J…Lre   c               #   óÈ   #   • SS K n U R                  5       nU R                  5          S v •  U(       a  U R                  5         g g ! U(       a  U R                  5         f f = f7frU  )rß  Ú	isenabledÚdisableÚenable)rß  Úhave_gcs     rf   Ú
disable_gcrç  0  sF   é € ãØ�l‰l‹n€GØ‡J�J„LðÛæØ�I‰I�Kð øŽ7Ø�I‰I�Kð üs   ‚%A"¨A ¬A"ÁAÁA"c               '   ó¢   #   • SS K nUR                  5       nUR                  " U 6    S v •  UR                  " U6   g ! UR                  " U6   f = f7frU  )rß  Úget_thresholdÚset_threshold)rr   rß  Úold_thresholds      rf   Úgc_thresholdrì  ;  sH   é € ãØ×$Ñ$Ó&€MØ×Ò�dÑð)Ûà
×Ò˜-Ò(øˆ×Ò˜-Ò(üs   ‚$A§; «A»AÁAc                  óò   • [         R                  " S5      =(       d    Sn SnU R                  5        H  nUR                  S5      (       d  M  UnM     [         R                  " S5      S:X  a  SnX;  $ SnX;  $ )z,Find if Python was built with optimizations.Ú	PY_CFLAGSr6  z-OÚCCÚgcc)r6  ú-O0z-Og)r6  rñ  )r8  r9  r  rÐ   )r:  Ú	final_optÚoptÚnon_optss       rf   Úpython_is_optimizedrõ  E  su   € ä×%Ò% kÓ2×8°b€FØ€IØ�|‰|Ž~ˆØ�>‰>˜$×ÓØŠIñ ô ×Ò Ó%¨Ó.Ø%ˆð Ñ$Ð$ð ˆØÑ$Ð$re   c                  óÐ   ^• [         R                  " S5      =(       d    Sm/ SQn [         R                  " S5      nU(       a  U R                  U5        [        U4S jU  5       5      $ )NÚPY_CFLAGS_NODISTr6  )z-fprofile-usez-fprofile-instr-usez	-prof-useÚPGO_PROF_USE_FLAGc              3   ó,   >#   • U  H	  oT;   v •  M     g 7frm   r]   )Ú.0rH  Úcflags_nodists     €rf   Ú	<genexpr>Ú#check_cflags_pgo.<locals>.<genexpr>b  s   øé € ÐA²[¨6˜Ö&²[ùs   ƒ)r8  r9  rÆ  Úany)Úpgo_optionsrø  rû  s     @rf   Úcheck_cflags_pgor   S  sY   ø€ ô ×,Ò,Ð-?Ó@×FÀB€Mò€Kô "×0Ò0Ð1DÓEÐÞØ×ÑÐ,Ô-ÜÔA±[ÓAÓAÐAre   c                  ób   • [         (       a  g[        R                  " S5      =(       d    Sn SU ;   $ )NFr7  r6  z--enable-bolt)r6   r8  r9  )r;  s    rf   Úcheck_bolt_optimizedr  e  s,   € ÷ ‚wØÜ×*Ò*¨=Ó9×?¸R€KØ˜kÑ)Ð)re   ÚPy_GIL_DISABLEDc                 ó8   • [         R                  " [        U 5      $ )z8Decorator for skipping tests on the free-threaded build.)rŒ   r	  r  rv   s    rf   r   r   p  s   € ä�?Š?œ?¨CÓ0Ð0re   c                  ó>   • [         (       a  [        R                  $ S $ )z+Expect test failure if the GIL is disabled.c                 ó   • U $ rm   r]   )Ú	test_cases    rf   rŠ   Ú2expected_failure_if_gil_disabled.<locals>.<lambda>x  s   € ™Yre   )r  rŒ   r�   r]   re   rf   Ú expected_failure_if_gil_disabledr	  t  s   € ç‚Ü×'Ñ'Ð'Ù&Ð&re   ÚPHBBInPÚnPÚ0nÚnc                 óH   • SS K nUR                  [        U -   [        -   5      $ rU  )ÚstructÚcalcsizeÚ_headerÚ_align©Úfmtr  s     rf   Úcalcobjsizer  �  s   € ÛØ�?‰?œ7 S™=¬6Ñ1Ó2Ð2re   c                 óH   • SS K nUR                  [        U -   [        -   5      $ rU  )r  r  Ú_vheaderr  r  s     rf   Úcalcvobjsizer  …  s   € ÛØ�?‰?œ8 c™>¬FÑ2Ó3Ð3re   i @  i   c                 ó   •  SS K n[        R
                  " U5      n[        U5      [        :X  a  UR                  [        -  (       d4  [        U5      [        :w  a/  [        U5      R                  [        -  (       a  X#R                  -  nS[        U5      XB4-  nU R                  XBU5        g ! [         a    [        R                  " S5      ef = f)Nr   rb  z&wrong size for %s: got %d, expected %d)rd  rW  rŒ   rž   r§   Ú	getsizeofré   Ú	__flags__Ú_TPFLAGS_HEAPTYPEÚ_TPFLAGS_HAVE_GCÚSIZEOF_PYGC_HEADr§  )ÚtestÚoÚsizerd  r·   rn   s         rf   Úcheck_sizeofr"  �  s¥   € ð>Û ô �]Š]˜1Ó€Fä	ˆa‹”D‹˜qŸ{™{Ô->×>Ü
ˆq‹'”T‹/¤ Q£× 1Ñ 1Ô4D× DØ×2Ñ2Ñ2ˆØ
2Ü�A‹w˜Ð%ñ&€Cà×Ñ�V 3Õ'øô ó >Ü×ÒÐ <Ó=Ð=ð>ús   ‚B, Â,!C)Ú_do_cleanupsc               óÆ   ^ ^^^• Sm[        T [        5      (       a1  T R                  SS5      R                  5       m [	        T 5      S:X  a  Sm[        T5      mUU UU4S jnU$ )z5Run multiple subtests with different parameters.
    FÚ,Ú r¢   Tc                 ó�   >^ • [        T [        5      (       a  [        S5      e[        R                  " T 5      UUUU U4S j5       nU$ )Nz1subTests() can only decorate methods, not classesc                óü   >• T Hd  nT	(       a  U4n[        [        TU5      5      nU R                  " S0 UD6   T" U /UQ70 UDUD6  S S S 5        T(       d  MT  U R                  5         Mf     g ! , (       d  f       N,= f)Nr]   )r“  ÚzipÚsubTestÚ
doCleanups)
rq   rr   rM  ÚvaluesÚsubtest_kwargsr#  Ú	arg_namesÚ
arg_valuesr³   Úsingle_params
        €€€€€rf   r  Ú,subTests.<locals>.decorator.<locals>.wrapper§  sk   ø€ ã$�ÞØ$˜Y�FÜ!%¤c¨)°VÓ&<Ó!=�Ø—\’\Ñ3 NÓ3Ù˜ÐA ÒA¨ÐA°.ÒA÷ 4ç�<Ø—O‘OÖ%ò %÷ 4Õ3ús   ¸A-Á-
A;	)Ú
isinstanceré   Ú	TypeErrorr  r  )r³   r  r#  r.  r/  r0  s   ` €€€€rf   r   ÚsubTests.<locals>.decorator¤  sC   ù€ Ü�dœD×!Ñ!ÜÐOÓPÐPÜ	�Š˜Ó	÷	&ð 	&ó 
ð	&ð ˆre   )r2  ræ   Úreplacer  rç   r  )r.  r/  r#  r   r0  s   ``` @rf   ÚsubTestsr6  ›  s_   û€ ð €LÜ�)œS×!Ñ!Ø×%Ñ% c¨#Ó.×4Ñ4Ó6ˆ	Üˆy‹>˜QÓØˆLÜ�zÓ"€J÷ð ð Ðre   c              '   ó   #   •  SS K n[        X 5      nUR                  U5      nU H  n UR                  X55          O"   SU;  a  [        R
                  " SU 35      e  S v •  U(       a  U(       a  UR                  WU5        g g g ! UR                   a     Mt  f = f! [         a    e [         a"    S =p$SU;  a  [        R
                  " S5      e Ntf = f! U(       a  U(       a  UR                  WU5        f f f = f7f)Nr   r6  zno locales z
no locales)Úlocalerœ   Ú	setlocaler   rŒ   rž   r�   rå   )ÚcatstrÚlocalesr8  ÚcategoryÚorig_localeÚlocs         rf   r>   r>   ¸  s  é € ðAÛÜ˜6Ó*ˆØ×&Ñ& xÓ0ˆó ˆCðØ× Ñ  Ô/Ùñ ð ˜Ó Ü×'Ò'¨+°g°YÐ(?Ó@Ð@ð !ð4Ûæ–kØ×Ñ˜X {Õ3ð "ˆ6øð —<‘<ó Úðûô ó àÜó 2à#Ð#ˆØ�WÓÜ×#Ò# LÓ1Ð1ñ ð2ûö& –kØ×Ñ˜X {Õ3ð "ˆ6üsa   ‚C>„ B ¤C>ªB»$C>Á C Á$#C>ÂBÂC>ÂBÂC>Â3CÃC>ÃCÃC>Ã$C;Ã;C>c                 ó   ^ ^• U U4S jnU$ )Nc                 óL   >^ • [         R                  " T 5      UU U4S j5       nU$ )Nc                óN  >• ST
;   n SS K n[        UT5      nUR                  U5      n T
 H;  nU R                  US9    UR                  XW5        SnT	" U /UQ70 UD6  S S S 5        M=     UR                  XV5        U(       a%  U R                  S S9   T	" U /UQ70 UD6  S S S 5        g g ! UR                   a    U R                  SU< 35         Nqf = f! , (       d  f       M·  = f! UR                  XV5        f = f! [         a    e [         a     N–f = f! , (       d  f       g = f)Nr6  r   )r8  Fz
no locale )r8  rœ   r9  r*  r   ÚskipTestr�   rå   )rq   rr   rM  Údry_runr8  r<  r=  r>  r:  r³   r;  s           €€€rf   r  Ú/run_with_locales.<locals>.deco.<locals>.wrapperÝ  s.  ø€ à˜G‘mˆGð<ÛÜ" 6¨6Ó2�Ø$×.Ñ.¨xÓ8�ð<Û&˜Ø!Ÿ\™\°˜\Ò5ð<Ø &× 0Ñ 0°Ô ?ð +0 Ù $ TÐ ;¨DÒ ;°FÒ ;÷ 6Ñ5ñ  'ð ×$Ñ$ XÔ;Þð —\‘\¨�\Ò.Ù˜Ð/ Ò/¨Ò/÷ /Ð.ð øð $*§<¡<ó DØ $§¡°
¸3¹'Ð.BÖ CðDú÷ 6Ö5ûð ×$Ñ$ XÕ;ûô% "ó àÜó áðú÷& /Õ.úsc   ˆ!C< ªC& ¾CÁ B)ÁCÁC& ÂDÂ)%CÃCÃCÃCÃ
C#	ÃC& Ã&C9Ã<DÄDÄ
D$rP  )r³   r  r:  r;  s   ` €€rf   ÚdecoÚrun_with_locales.<locals>.decoÜ  s%   ù€ Ü	�Š˜Ó	ö	0ó 
ð	0ð< ˆre   r]   )r:  r;  rE  s   `` rf   Úrun_with_localesrG  Û  s   ù€ ö ðB €Kre   c                 ó   ^ • U 4S jnU$ )Nc                 ó\   >^ • U U4S jnT R                   Ul         T R                  Ul        U$ )Nc                  ó  >•  [         R                  nS[
        R                  ;   a  [
        R                  S   nOS nT[
        R                  S'   U" 5          T" U 0 UD6Uc  [
        R                  S	 OU[
        R                  S'   [         R                  " 5         $ ! [         a    [        R                  " S5      ef = f! Uc  [
        R                  S	 OU[
        R                  S'   [         R                  " 5         f = f)Nztzset requiredÚTZ)ÚtimeÚtzsetr�   rŒ   rž   r®   Úenviron)rr   ÚkwdsrM  Úorig_tzr³   Útzs       €€rf   ÚinnerÚ-run_with_tz.<locals>.decorator.<locals>.inner  sÍ   ø€ ð:ÜŸ
™
�ð ”r—z‘zÓ!ÜŸ*™* TÑ*‘à�Ø!ŒB�J‰J�tÑÙŒGðÙ˜TÐ* TÑ*à‘?ÜŸ
™
 4Ñ(à'.”B—J‘J˜tÑ$Ü—
’
•øô# "ó :Ü×'Ò'Ð(8Ó9Ð9ð:ûð ‘?ÜŸ
™
 4Ñ(à'.”B—J‘J˜tÑ$Ü—
’
•ús   ƒB ÁC Â!B>Ã?D )r_   rc   )r³   rR  rQ  s   ` €rf   r   Úrun_with_tz.<locals>.decorator  s%   ù€ ö	ð, Ÿ™ˆŒØŸ™ˆŒØˆre   r]   )rQ  r   s   ` rf   rG   rG     s   ø€ õð4 Ðre   i   é   r©   é   Úlimitc                 óJ  • S[         [        S[        -  S.n[        R                  " SU [        R                  [        R
                  -  5      nUc  [        SU < 35      e[        [        UR                  S5      5      XR                  S5      R                  5          -  5      $ )NrU  )ÚkÚmÚgÚtz(\d+(?:\.\d+)?) (K|M|G|T)b?$zInvalid memory limit: r¢   r©   )Ú_1MÚ_1GÚreÚmatchÚ
IGNORECASEÚVERBOSEr  r  ÚfloatÚgroupr(  )rW  ÚsizesrZ  s      rf   Ú_parse_memlimitrf  -  s‡   € àÜÜØ”#‰Xñ	€Eô 	�ŠÐ0°%Ü—‘¤§¡Ñ+ó	-€Aà�yÜÐ1°%±Ð;Ó<Ð<ÜŒu�Q—W‘W˜Q“ZÓ  5¯©°«×)9Ñ)9Ó);Ñ#<Ñ<Ó=Ð=re   c                 ó|   • [        U 5      nU[        S-
  :  a  [        SU < S35      eUq[	        U[
        5      nUqg )Nr¢   zMemory limit z too low to be useful)rf  Ú_2Gr  Úreal_max_memuseÚminÚMAX_Py_ssize_tr   )rW  Úmemlimits     rf   rD   rD   :  sE   € ô ˜uÓ%€HØ”#˜‘'ÓÜ˜=¨©	Ð1FÐGÓHÐHà€OÜ�8œ^Ó,€HØ�Jre   c                   ó*   • \ rS rSrSrS rS rS rSrg)Ú_MemoryWatchdogiF  zXAn object which periodically watches the process' memory consumption
and prints it out.
c                 ó`   • SR                  [        R                  " 5       S9U l        SU l        g )Nz/proc/{pid}/statm)ÚpidF)rè   r®   ÚgetpidÚprocfileÚstartedrw   s    rf   rp   Ú_MemoryWatchdog.__init__K  s$   € Ø+×2Ñ2´r·y²y³{Ð2ÐCˆŒØˆ�re   c                 ó¸  • SS K n [        U R                  S5      nSS KnU   [        S5      nUR                  [        R                  U/UUR                  S9U l        S S S 5        SU l        g ! [         aP  n[        R
                  " [        5      R                  SX3S9  [        R                  R                  5          S nAg S nAff = f! , (       d  f       Ns= f)Nr   Úrz!/proc not available for stats: %sr$  zmemory_watchdog.py)rÝ  rÛ  T)Úwarningsr±  rr  r­   r*  r+  r_   r,  r§   rÛ  ÚflushrÜ   r@   ÚPopenÚ
executableÚDEVNULLÚmem_watchdogrs  )rq   rw  r‰   rô   rÜ   Úwatchdog_scripts         rf   ÚstartÚ_MemoryWatchdog.startO  s¸   € Ûð	Ü�T—]‘] CÓ(ˆAó 	ÚÜ&Ð';Ó<ˆOØ *× 0Ñ 0´#·.±.À/Ð1RØ78Ø8B×8JÑ8Jð !1ð !LˆDÔ÷ ð
 ˆ�øô ó 	Ü×ÒœhÓ'×/Ñ/Ð0SÐUVÐ/ÑcÜ�J‰J×ÑÔÜûð	ú÷ �Qús#   †A. ¢<CÁ.
CÁ8ACÃCÃ
Cc                 ó�   • U R                   (       a5  U R                  R                  5         U R                  R                  5         g g rm   )rs  r|  Ú	terminateÚwaitrw   s    rf   ÚstopÚ_MemoryWatchdog.stop`  s2   € Ø�<�<Ø×Ñ×'Ñ'Ô)Ø×Ñ×"Ñ"Õ$ð re   )r|  rr  rs  N)	r_   r`   ra   rb   rc   rp   r~  rƒ  rd   r]   re   rf   rn  rn  F  s   † ñòòõ"%re   rn  c                 ó   ^ ^^• UUU 4S jnU$ )aP  Decorator for bigmem tests.

'size' is a requested size for the test (in arbitrary, test-interpreted
units.) 'memuse' is the number of bytes per unit for the test, or a good
estimate of it. For example, a test that needs two byte buffers, of 4 GiB
each, could be decorated with @bigmemtest(size=_4G, memuse=2).

The 'size' argument is normally passed to the decorated test method as an
extra argument. If 'dry_run' is true, the value passed to the test method
may be less than the requested value. If 'dry_run' is false, it means the
test doesn't support dummy runs when -M is not specified.
c                 ó8   >^ ^• UU U4S jmTTl         TTl        T$ )Nc                 óü  >• TR                   nTR                  n[        (       d  SnOUn[        (       d  T(       d*  [        X2-  :  a  [        R                  " SX-  S-  -  5      e[        (       aM  [
        (       aB  [        5         [        SR                  X-  S-  S95        [        5       nUR                  5         OS n T" X5      U(       a  UR                  5         $ $ ! U(       a  UR                  5         f f = f)Ni  ú'not enough memory: %.1fG minimum neededé   @z* ... expected peak memory use: {peak:.1f}G)Úpeak)r!  Úmemuseri  rŒ   rž   r   r¬   rè   rn  r~  rƒ  )rq   r!  r‹  ÚmaxsizeÚwatchdogrC  r‰   r  s        €€€rf   r  Ú.bigmemtest.<locals>.decorator.<locals>.wrappert  sÑ   ø€ Ø—<‘<ˆDØ—^‘^ˆFß"’?Ø‘à�ç ’®Ü# gÑ&6Ó6Ü×'Ò'Ø=Ø‘}¨	Ñ2ñ4ó5ð 5÷ Š§7¢7Ü”ÜÐBß‘v 4¡=°IÑ#>�vÐ?ôAä*Ó,�Ø—‘Õ à�ð$Ù˜Ó'æØ—M‘M•Oð ø–8Ø—M‘M•Oð ús   ÃC! Ã!C;)r!  r‹  )r‰   r  rC  r‹  r!  s   `@€€€rf   r   Úbigmemtest.<locals>.decorators  s   ú€ ÷	$ð: ˆŒØˆŒØˆre   r]   )r!  r‹  rC  r   s   ``` rf   r   r   f  s   ú€ ÷ ðB Ðre   c                 ó   ^ • U 4S jnU$ )z0Decorator for tests that fill the address space.c                 óÄ   >• [         [        :  aJ  [        S:¼  a   [         S:¼  a  [        R                  " S5      e[        R                  " S[        S-  -  5      eT" U 5      $ )Nl   ÿÿÿÿ l        z-not enough memory: try a 32-bit build insteadrˆ  r‰  )r   rk  rŒ   rž   )rq   r‰   s    €rf   r  Ú!bigaddrspacetest.<locals>.wrapper˜  sb   ø€ ÜœÓ&Ü Ó*¬z¸UÓ/BÜ×'Ò'ØCóEð Eô ×'Ò'Ø=Ü%¨Ñ3ñ5ó6ð 6ñ �T“7ˆNre   r]   )r‰   r  s   ` rf   r   r   –  s   ø€ õ
ð €Nre   c                 ó   • U $ rm   r]   )rŸ   s    rf   Ú_idr”  ¨  s   € Ø€Jre   c                 óê   • U S:X  a3  [        5       (       d$  [        R                  " [         R                  5      $ [	        U 5      (       a  [
        $ [        R                  " SR                  U 5      5      $ )Nrü   zresource {0!r} is not enabled)rÎ   rŒ   r  rê   r   r”  rè   r÷   s    rf   Úrequires_resourcer–  «  sT   € Ø�5ÓÔ!2×!4Ñ!4Ü�}Š}Ô.×5Ñ5Ó6Ð6Ü˜8×$Ñ$Üˆ
ä�}Š}Ð<×CÑCÀHÓMÓNÐNre   c                 ó    • [        SS9" U 5      $ )z1
Decorator for tests only applicable on CPython.
T)Úcpython)Úimpl_detail©r  s    rf   r   r   ³  s   € ô ˜tÒ$ TÓ*Ð*re   c                 ó  • [        S0 UD6(       a  [        $ U cR  [        U5      u  p#U(       a  Sn OSn [        UR	                  5       5      nU R                  SR                  U5      5      n [        R                  " U 5      $ )Nz*implementation detail not available on {0}z%implementation detail specific to {0}z or r]   )	r8   r”  Ú_parse_guardsr‘  Úkeysrè   r  rŒ   r  )rn   ÚguardsÚ
guardnamesÚdefaults       rf   r™  r™  ¹  sh   € ÜÑ"˜6×"Üˆ
Ø
�{Ü+¨FÓ3Ñˆ
ÞØ>‰Cà9ˆCÜ˜JŸO™OÓ-Ó.ˆ
Ø�j‰j˜Ÿ™ ZÓ0Ó1ˆÜ�=Š=˜ÓÐre   c                 ó¼   • U (       d  SS0S4$ [        U R                  5       5      S   n[        U R                  5       5      U/[        U 5      -  :X  d   eX(       + 4$ )Nr˜  TFr   )Úlistr,  rç   )rž  Úis_trues     rf   rœ  rœ  Æ  sY   € æØ˜DÐ! 5Ð)Ð)Ü�6—=‘=“?Ó# AÑ&€GÜ�—‘“Ó  W I´°F³Ñ$;Ó;Ð;Ð;Ø”KÐ Ð re   c                  óp   • [        U 5      u  pU R                  [        R                  R                  U5      $ )a  This function returns True or False depending on the host platform.
Examples:
   if check_impl_detail():               # only on CPython (default)
   if check_impl_detail(jython=True):    # only on Jython
   if check_impl_detail(cpython=False):  # everywhere except on CPython
)rœ  rÈ  r§   Úimplementationr    )rž  r   s     rf   r8   r8   Ð  s-   € ô $ FÓ+�O€FØ�:‰:”c×(Ñ(×-Ñ-¨wÓ7Ð7re   c                 ó  ^ ^^• T m[        [        S5      (       a  [        R                  " T 5      U 4S j5       mTnS[        R                  ;   a:  [        R
                  R                  m[        R                  " T 5      UU4S j5       nU$ )zEDecorator to temporarily turn off tracing for the duration of a test.Úgettracec                  óÎ   >• [         R                  " 5       n [         R                  " S 5        T" U 0 UD6[         R                  " U5        $ ! [         R                  " U5        f = frm   )r§   r§  Úsettrace)rr   rM  Úoriginal_tracer³   s      €rf   Útrace_wrapperÚ!no_tracing.<locals>.trace_wrapperß  sE   ø€ ä Ÿ\š\›^ˆNð-Ü—’˜TÔ"Ù˜TÐ, VÑ,ä—’˜^Õ,ø”—’˜^Õ,ús   ˜A ÁA$ztest.covc                  ó  >• [         R                  R                  T5      n [         R                  R                  TS5        T" U 0 UD6[         R                  R                  TU5        $ ! [         R                  R                  TU5        f = frU  )r§   Ú
monitoringÚ
get_eventsÚ
set_events)rr   rM  Úoriginal_eventsÚcovr«  s      €€rf   Úcoverage_wrapperÚ$no_tracing.<locals>.coverage_wrapperë  sg   ø€ ä!Ÿn™n×7Ñ7¸Ó<ˆOð@Ü—‘×)Ñ)¨#¨qÔ1Ù$ dÐ5¨fÑ5ä—‘×)Ñ)¨#¨Õ?ø”—‘×)Ñ)¨#¨Õ?ús   ¢'A* Á*"B)rÍ   r§   r  r  Úmodulesr®  ÚCOVERAGE_ID)r³   r³  r²  r«  s   ` @@rf   Ú
no_tracingr·  Û  sx   ú€ à€MÜŒs�J×ÑÜ	�Š˜Ó	ô	-ó 
ð	-ð %ÐØ”S—[‘[Ó Ü�n‰n×(Ñ(ˆÜ	�Š˜Ó	õ	@ó 
ð	@ð Ðre   c                 ó*   • [        [        U 5      5      $ )zöDecorator for tests which involve reference counting.

To start, the decorator does not run the test if is not run by CPython.
After that, any trace function is unset during the test to prevent
unexpected refcounts caused by the trace function.

)r·  r   rš  s    rf   Úrefcount_testr¹  ÷  s   € ô ”l 4Ó(Ó)Ð)re   c                 óp   •  SS K nSS KnU $ ! [         a    [        R                  " S5      " U 5      s $ f = f)Nr   z,needs _testcapi and _testlimitedcapi modules)Ú	_testcapiÚ_testlimitedcapirW  rŒ   r  )r  r»  r¼  s      rf   r0   r0     s=   € ðSÛÛð €Køô ó SÜ�}Š}ÐKÔLÈTÓRÒRðSús   ‚ Œ&5´5ÚTEST_MODULESÚyesc                 óX   • [         R                  " [        R                  S5      " U 5      $ )Nzrequires specialization)rŒ   rX  Ú_opcodeÚENABLE_SPECIALIZATIONrš  s    rf   r1   r1     s,   € Ü×ÒÜ×%Ñ%Ð'@ôBØBFóHð Hre   c                  ó   • g)z,Just used to check if docstrings are enabledNr]   r]   re   rf   Ú_check_docstringsrÃ    s   � re   ÚWITH_DOC_STRINGSztest requires docstringsc                  óÂ   • [         R                  b  [         R                  R                  5         [         R                  b  [         R                  R                  5         g g rm   )r§   r¥   rx  rÛ  r]   re   rf   Úflush_std_streamsrÆ  +  s;   € Ü
‡z�zÑÜ�
‰
×ÑÔÜ
‡z�zÑÜ�
‰
×ÑÕð re   c                 ó    • [        5         [        R                  nU R                  5        H  n[	        SU 3US9  M     UR                  5         g )NzWarning -- r¶  )rÆ  Úprint_warningÚorig_stderrÚ
splitlinesr¬   rx  )rn   ÚstreamÚlines      rf   rÈ  rÈ  2  s>   € äÔÜ×&Ñ&€FØ—‘Ö ˆÜ�˜D˜6Ð"¨Ô0ñ !à
‡L�L…Nre   c                  ó  • [        [        S5      (       a  [        [        S5      (       d  g[        (       d  g  [        R                  " S[        R                  5      u  pU S:X  a  g[        SU  35        SqMA  ! [
         a     gf = f)zÕUse this function at the end of test_main() whenever sub-processes
are started.  This will help ensure that no extra children (zombies)
stick around to hog resources and create problems when looking
for refleaks.
ÚwaitpidÚWNOHANGNTr¯  r   z%reap_children() reaped child process )rÍ   r®   r$   rÎ  rÏ  r­   rÈ  Úenvironment_altered)rp  Ústatuss     rf   r=   r=   G  s„   € ô ”B˜	×"Ñ"¤w¬r°9×'=Ñ'=Øß#Ò#Øð ð	äŸ*š* R¬¯©Ó4‰KˆCð �!‹8ØäÐ=¸c¸UÐCÔDØ"Ðñ øô ó 	Ùð	ús   º'A: Á:
BÂBc              #   ó<  #   • [        X5      (       a)  [        X5      n[        XU5         Uv •  [        XU5        g[        XU5         Sv •  [        X5      (       a  [        X5        gg! [        XU5        f = f! [        X5      (       a  [        X5        f f = f7f)aÆ  Temporary swap out an attribute with a new object.

Usage:
    with swap_attr(obj, "attr", 5):
        ...

    This will set obj.attr to 5 for the duration of the with: block,
    restoring the old value at the end of the block. If `attr` doesn't
    exist on `obj`, it will be created and then deleted at the end of the
    block.

    The old value (or None if it doesn't exist) will be assigned to the
    target of the "as" clause, if there is one.
N)rÍ   rœ   rÓ  Údelattr)rŸ   ÚattrÚnew_valÚreal_vals       rf   rB   rB   e  sŒ   é € ô  ˆs×ÑÜ˜3Ó%ˆÜ�˜7Ô#ð	)ØŠNä�C˜xÕ(ä�˜7Ô#ð	#Ûä�s×!Ñ!Ü˜Õ"ð "øô �C˜xÕ(ûô �s×!Ñ!Ü˜Õ"ð "üs3   ‚(B«A* ¯BÁ	A; ÁBÁ*A8Á8BÁ;BÂBc              #   óˆ   #   • X;   a  X   nX U'    Uv •  X0U'   gX U'    Sv •  X;   a  X	 gg! X0U'   f = f! X;   a  X	 f f = f7f)aÄ  Temporary swap out an item with a new object.

Usage:
    with swap_item(obj, "item", 5):
        ...

    This will set obj["item"] to 5 for the duration of the with: block,
    restoring the old value at the end of the block. If `item` doesn't
    exist on `obj`, it will be created and then deleted at the end of the
    block.

    The old value (or None if it doesn't exist) will be assigned to the
    target of the "as" clause, if there is one.
Nr]   )rŸ   ÚitemrÕ  rÖ  s       rf   r?   r?   „  se   é € ð  ƒ{Ø‘9ˆØˆD‰	ð	!ØŠNà �ŠIàˆD‰	ð	Ûà‹{Ø‘Ið øð !�ŠIûð ‹{Ø‘Ið üs)   ‚A‘, •	AŸ5 £	A¬2²Aµ
?¿Ac                  ó*   • SSK n U R                  5       $ )zjReturn a list of command-line arguments reproducing the current
settings in sys.flags and sys.warnoptions.r   N)rÜ   Ú_args_from_interpreter_flags©rÜ   s    rf   Úargs_from_interpreter_flagsrÜ  £  s   € ó Ø×2Ñ2Ó4Ð4re   c                  ó*   • SSK n U R                  5       $ )zcReturn a list of command-line arguments reproducing the current
optimization settings in sys.flags.r   N)rÜ   Ú"_optim_args_from_interpreter_flagsrÛ  s    rf   Ú!optim_args_from_interpreter_flagsrß  ©  s   € ó Ø×8Ñ8Ó:Ð:re   c                   ó$   • \ rS rSrSrS rS rSrg)rC   i°  )rn   Úmessagec                 ó~   • SnU H4  nX$   nUR                  U5      nU R                  XFU5      (       a  M1  Sn  U$    U$ )a  
Try to match a single dict with the supplied arguments.

Keys whose values are strings and which are in self._partial_matches
will be checked for partial (i.e. substring) matches. You can extend
this scheme to (for example) do regular expression matching, etc.
TF)rÈ  Úmatch_value)rq   ÚdrM  r·   rY  ÚvÚdvs          rf   ÚmatchesÚMatcher.matches´  sN   € ð ˆÛˆAØ‘	ˆAØ—‘�q“ˆBØ×#Ñ# A¨1×-Ó-Ø�ØØˆñ ð ˆre   c                 ó´   • [        U5      [        U5      :w  a  SnU$ [        U5      [        Ld  XR                  ;  a  X2:H  nU$ UR                  U5      S:¬  nU$ )zD
Try to match a single stored value (dv) with a supplied value (v).
Fr   )ré   ræ   Ú_partial_matchesÚfind)rq   rY  ræ  rå  r·   s        rf   rã  ÚMatcher.match_valueÅ  s_   € ô �‹7”d˜2“hÓØˆFð
 ˆô	 �"‹XœSÒ  A×-BÑ-BÓ$BØ‘gˆFð ˆð —W‘W˜Q“Z 1‘_ˆFØˆre   r]   N)r_   r`   ra   rb   rê  rç  rã  rd   r]   re   rf   rC   rC   °  s   † à)Ðòõ"
re   rC   c                 ó
  • SSK n[        cP  [        R                  S:X  a:  UR	                  5       S:X  a&  [
        R                  " 5       R                  S:X  a  SqOSq[        (       a  [        R                  " S5      " U 5      $ U $ )	a  
Skip decorator for tests that use buggy strptime/strftime

If the UCRT bugs are present time.localtime().tm_zone will be
an empty string, otherwise we assume the UCRT bugs are fixed

See bpo-37552 [Windows] strptime/strftime return invalid
results with UCRT version 17763.615
r   Nrp  Úcp65001r6  TFz!buggy MSVC UCRT strptime/strftime)
r8  Ú_buggy_ucrtr§   rÏ   ÚgetencodingrL  Ú	localtimeÚtm_zonerŒ   r  )r  r8  s     rf   r,   r,   Ó  sh   € ó äÑÜ�<‰<˜7Ó"Ø×"Ñ"Ó$¨	Ó1Ü—’Ó ×(Ñ(¨BÓ.Ø‰KàˆKßGRÂ{Œ8�=Š=Ð<Ô=¸dÓCÐ\ÐX\Ð\re   c                   ó~   • \ rS rSrSrSS jr\R                  S:X  a  S rOS rS r	S	 r
S
 rSS.S jrSS.S jrSrg)ÚPythonSymlinkiè  z3Creates a symlink for the current Python executableNc                 ó  • SSK Jn  U=(       d    [        R                  R	                  U5      U l        / U l        [        R                  R                  [        R                  5      U l
        / U l        S U l        U R                  5         g )Nr¢   )ÚTESTFN)r¾  rö  r®   r²   ÚabspathÚlinkÚ_linkedÚrealpathr§   rz  ÚrealÚ
_also_linkÚ_envÚ_platform_specific)rq   rø  rö  s      rf   rp   ÚPythonSymlink.__init__ê  sY   € Ý%à×3œBŸG™GŸO™O¨FÓ3ˆŒ	ØˆŒÜ—G‘G×$Ñ$¤S§^¡^Ó4ˆŒ	ØˆŒàˆŒ	à×ÑÕ!re   rp  c           
      ó  • SS K nSS Kn[        R                  R	                  U R
                  5      (       aD  [        R                  R                  U R
                  5      (       d  UR                  S5      U l        UR                  [        R                  5      n[        R                  R                  U5      n[        R                  R                  U R                  5      nU R                  R                  U[        R                  R                  U[        R                  R                  U5      5      45        UR                  [        R                  R                  UR!                  U5      S5      5       H[  nU R                  R                  U[        R                  R                  U[        R                  R                  U5      5      45        M]     [        R"                   Vs0 s H'  owR%                  5       [        R&                  " U5      _M)     snU l        [        R                  R                  U R
                  5      U R(                  S'   [*        R,                  " 5       (       a  [.        U R(                  S'   g g s  snf )Nr   zvcruntime*.dllÚ
PYTHONHOMEÚ
PYTHONPATH)ÚglobÚ_winapir®   r²   Úlexistsrû  r‹  ÚGetModuleFileNamer§   Ú	dllhandleÚdirnamerø  rü  rÆ  r  ÚbasenameÚescaperN  ÚupperÚgetenvrý  r8  Úis_python_buildr“   )rq   r  r  rí   Úsrc_dirÚdest_dirÚruntimerY  s           rf   rþ  Ú PythonSymlink._platform_specific÷  sž  € ÛÛä�w‰w�‰˜tŸy™y×)Ñ)´"·'±'·.±.ÀÇÁ×2KÑ2Kð $×5Ñ5°aÓ8�”	à×+Ñ+¬C¯M©MÓ:ˆCÜ—g‘g—o‘o cÓ*ˆGÜ—w‘w—‘ t§y¡yÓ1ˆHØ�O‰O×"Ñ"ØÜ—‘—‘˜X¤r§w¡w×'7Ñ'7¸Ó'<Ó=ð$ô ð  Ÿ9™9¤R§W¡W§\¡\°$·+±+¸gÓ2FÐHXÓ%YÖZ�Ø—‘×&Ñ&ØÜ—G‘G—L‘L ¬2¯7©7×+;Ñ+;¸GÓ+DÓEð(ö ñ [ô ;=¿*º*ÓEº*°QŸ™›¤B§I¢I¨a£LÒ0¹*ÑEˆDŒIÜ&(§g¡g§o¡o°d·i±iÓ&@ˆD�I‰I�lÑ#Ü×(Ò(×*Ñ*Ü*4�—	‘	˜,Ò'ð +ùò Fs   Ç).Jc                 ó   • g rm   r]   rw   s    rf   rþ  r    ó   € Øre   c                 ó2  • [         R                  " U R                  U R                  5        U R                  R                  U R                  5        U R                   H6  u  p[         R                  " X5        U R                  R                  U5        M8     U $ rm   )r®   Úsymlinkrû  rø  rù  rÆ  rü  )rq   rû  rø  s      rf   Ú	__enter__ÚPythonSymlink.__enter__  sc   € Ü
�
Š
�4—9‘9˜dŸi™iÔ(Ø�‰×Ñ˜DŸI™IÔ&ØŸ/œ/‰JˆDÜ�JŠJ�tÔ"Ø�L‰L×Ñ Ö%ñ *ð ˆre   c                 óÞ   • U R                    H  n [        R                  " U5        M     g ! [         a6  n[        (       a   [        SR                  XE5      5         S nAMT   S nAMZ  S nAff = f)Nzfailed to clean up {}: {})rù  r®   ÚremoveÚIOErrorr   r¬   rè   )rq   Úexc_typeÚ	exc_valueÚexc_tbrø  Úexs         rf   Ú__exit__ÚPythonSymlink.__exit__  sV   € Ø—L”LˆDðHÜ—	’	˜$–ò !øô ó Hß’7ÜÐ5×<Ñ<¸TÓF×GÒGõ ûðHús   ‘,¬
A,¶%A'Á'A,c                 óv  • SS K nU/UQnUR                  XeR                  UR                  US9nUR                  5       nUR                  U:w  aj  [
        (       a;  [        [        US   5      5        [        [        US   5      [        R                  S9  [        SR                  UR                  5      5      eU$ )Nr   )r¥   rÛ  rG  r¢   r¶  z'unexpected return code: {0} (0x{0:08X}))rÜ   ry  ÚPIPEÚcommunicateÚ
returncoder   r¬   Úreprr§   rÛ  ÚRuntimeErrorrè   )	rq   Úpythonrr   rG  r$  rÜ   ÚcmdÚprv  s	            rf   Ú_callÚPythonSymlink._call%  sœ   € ÛØˆo˜ˆoˆØ×Ñ˜S¯©Ø$.§O¡O¸ð ð >ˆà�M‰M‹OˆØ�<‰<˜:Ó%ßŠwÜ”d˜1˜Q™4“jÔ!Ü”d˜1˜Q™4“j¤s§z¡zÒ2ÜØ9×@Ñ@ÀÇÁÓNóPð Pàˆre   r   )r$  c                ó>   • U R                  U R                  US U5      $ rm   )r*  rû  ©rq   r$  rr   s      rf   Ú	call_realÚPythonSymlink.call_real3  s   € Ø�z‰z˜$Ÿ)™) T¨4°Ó<Ð<re   c                óP   • U R                  U R                  X R                  U5      $ rm   )r*  rø  rý  r-  s      rf   Ú	call_linkÚPythonSymlink.call_link6  s   € Ø�z‰z˜$Ÿ)™) T¯9©9°jÓAÐAre   )rü  rý  rù  rø  rû  rm   )r_   r`   ra   rb   rc   rp   r§   rÏ   rþ  r  r  r*  r.  r1  rd   r]   re   rf   rô  rô  è  sM   † Ù=ô
"ð ‡|�|�wÓó	5ò6	òòHòð +,õ =ð +,÷ Bð Bre   rô  c                 ó€   • [         (       + =(       d    [        nSnU(       a  U $ [        R                  " U5      " U 5      $ )z;Skip decorator for tests not run in (non-extended) PGO taskz#Not run for (non-extended) PGO task)rH   ÚPGO_EXTENDEDrŒ   r  )r  Úokrn   s      rf   Úskip_if_pgo_taskr6  :  s.   € äŒ×	 ”L€BØ
/€CÞˆ4Ð3œ8Ÿ=š=¨Ô-¨dÓ3Ð3re   r]   )Úignorec                ó¦   • [        [        U 5      5      [        [        U5      5      -
  nU(       a  U[        U5      -  n[        S U 5       5      nU$ )zûReturns the set of items in ref_api not in other_api, except for a
defined list of items to be ignored in this check.

By default this skips private attributes beginning with '_' but
includes all magic methods, i.e. those starting and ending in '__'.
c              3   ó‚   #   • U  H5  nUR                  S 5      (       a  UR                  S5      (       d  M1  Uv •  M7     g7f)r†  Ú__N)rÐ   Úendswith)rú  rZ  s     rf   rü  Ú&detect_api_mismatch.<locals>.<genexpr>K  s2   é € ð F¢=˜aØ Ÿ|™|¨C×0Ñ0°A·J±J¸t×4D÷ ™¢=ùs   ‚0?¶	?)ÚsetÚdir)Úref_apiÚ	other_apir7  Úmissing_itemss       rf   r*   r*   A  sP   € ô œ˜G›Ó%¬¬C°	«NÓ(;Ñ;€MÞØœ˜V›Ñ$ˆÜñ F¡=ó Fó F€MàÐre   c                 óÄ  • Uc  UR                   4nO[        U[        5      (       a  U4n[        U5      n[	        U5       H�  nUR                  S5      (       d  Xd;   a  M   [        X5      n[        USS5      U;   d4  [        US5      (       a  MO  [        U[        R                  5      (       a  Mp  UR                  U5        Mƒ     U R                  UR                  U5        g)aµ  Assert that the __all__ variable of 'module' contains all public names.

The module's public names (its API) are detected automatically based on
whether they match the public name convention and were defined in
'module'.

The 'name_of_module' argument can specify (as a string or tuple thereof)
what module(s) an API could be defined in in order to be detected as a
public API. One case for this is when 'module' imports part of its public
API from other modules, possibly a C backend (like 'csv' and its '_csv').

The 'extra' argument can be a set of names that wouldn't otherwise be
automatically detected as "public", like objects without a proper
'__module__' attribute. If provided, it will be added to the
automatically detected ones.

The 'not_exported' argument can be a set of names that must not be treated
as part of the public API even though their names indicate otherwise.

Usage:
    import bar
    import foo
    import unittest
    from test import support

    class MiscTestCase(unittest.TestCase):
        def test__all__(self):
            support.check__all__(self, foo)

    class OtherTestCase(unittest.TestCase):
        def test__all__(self):
            extra = {'BAR_CONST', 'FOO_CONST'}
            not_exported = {'baz'}  # Undocumented name.
            # bar imports part of its API from _bar.
            support.check__all__(self, bar, ('bar', '_bar'),
                                 extra=extra, not_exported=not_exported)

Nr†  r`   )r_   r2  ræ   r=  r>  rÐ   rœ   rÍ   ÚtypesÚ
ModuleTypeÚaddÚassertCountEqualÚ__all__)r  r|  Úname_of_moduleÚextraÚnot_exportedÚexpectedr    rŸ   s           rf   r+   r+   P  s·   € ðR ÑØ Ÿ/™/Ð,‰Ü	�N¤C×	(Ñ	(Ø(Ð+ˆä�5‹z€Hä�F–ˆØ�?‰?˜3×Ñ 4Ó#7ÙÜ�fÓ#ˆÜ�C˜ tÓ,°Ó>Ü˜S ,×/Ó/Ü ¤U×%5Ñ%5×6Ó6Ø�L‰L˜Öñ ð ×Ñ˜vŸ~™~¨xÕ8re   c                 óÌ  •  SS K nUR                  UR                  UR                  -  UR
                  -  UR                  -  5        [        US5      (       a|  UR                  UR                  UR                  4 HT  nU (       a8  UR                  X!R                  5        UR                  X!R                  5        MB  UR                  US5        MV     g g ! [         a     g f = f)Nr   ÚCrtSetReportMode)ÚmsvcrtrW  ÚSetErrorModeÚSEM_FAILCRITICALERRORSÚSEM_NOALIGNMENTFAULTEXCEPTÚSEM_NOGPFAULTERRORBOXÚSEM_NOOPENFILEERRORBOXrÍ   ÚCRT_WARNÚ	CRT_ERRORÚ
CRT_ASSERTrM  ÚCRTDBG_MODE_FILEÚCrtSetReportFileÚCRTDBG_FILE_STDERR)r   rN  rZ  s      rf   Úsuppress_msvcrt_assertsrZ  ‹  sÔ   € ðÛð ×Ñ˜×5Ñ5Ø ×;Ñ;ñ<à ×6Ñ6ñ7ð !×7Ñ7ñ8ô 9ô ˆvÐ)×*Ñ*Ø—/‘/ 6×#3Ñ#3°V×5FÑ5FÓGˆAÞØ×'Ñ'¨×+BÑ+BÔCØ×'Ñ'¨×+DÑ+DÖEà×'Ñ'¨¨1Ö-ò Hð +øô ó Ùðús   ‚C Ã
C#Ã"C#c                   ó,   • \ rS rSrSrSrSrS rS rSr	g)rE   i   zŸTry to prevent a crash report from popping up.

On Windows, don't display the Windows Error Reporting dialog.  On UNIX,
disable the creation of coredump file.
Nc                 óœ  • [         R                  R                  S5      (       aÎ   SSKnUR                  5       U l        UR                  U R                  UR                  -  5        [        US5      (       ay  0 U l
        UR                  UR                  UR                  4 HK  nUR                  UUR                  5      nUR!                  UUR"                  5      nX44U R                  U'   MM     U $  SSKnXPl        U R$                  bt   U R$                  R'                  U R$                  R(                  5      U l        U R$                  R+                  U R$                  R(                  SU R                  S   45        [         R                  S:X  aj  SSKn/ SQnUR3                  UUR4                  UR4                  S9nU   UR7                  5       S   n	SSS5        W	R9                  5       S	:X  a  [;        S
SSS9  U $ ! [         a     gf = f! [         a    SU l         GN%f = f! [,        [.        4 a     Nºf = f! , (       d  f       Nm= f)z´On Windows, disable Windows Error Reporting dialogs using
SetErrorMode() and CrtSetReportMode().

On UNIX, try to save the previous core file size limit, then set
soft limit to 0.
r¸   r   NrM  r¢   rÅ   )z/usr/bin/defaultsrÊ  zcom.apple.CrashReporterÚ
DialogType)r¥   rÛ  s	   developerz:this test triggers the Crash Reporter, that is intentionalr6  T)Úendrx  )r§   rÏ   rÐ   rN  rW  ÚGetErrorModeÚ	old_valuerO  rR  rÍ   Ú	old_modesrT  rU  rV  rM  rW  rX  rY  rø   Ú	getrlimitÚRLIMIT_COREÚ	setrlimitr  r­   rÜ   ry  r"  r#  rß   r¬   )
rq   rN  Úreport_typeÚold_modeÚold_filerø   rÜ   r(  Úprocr¥   s
             rf   r  ÚSuppressCrashReport.__enter__©  s  € ô �<‰<×"Ñ" 5×)Ñ)ðÛð $×0Ñ0Ó2ˆDŒNà×Ñ §¡°×1MÑ1MÑ MÔNô �vÐ1×2Ñ2Ø!#�”Ø$*§O¡OØ$*×$4Ñ$4Ø$*×$5Ñ$5ó$7�Kð  &×6Ñ6°{Ø"×3Ñ3ó 5�Hà%×6Ñ6°{Ø"×5Ñ5ó 7�Hà2:Ð2D�D—N‘N ;Ó/ñ$7ðT ˆðA%ÛØ (”ð �}‰}Ñ(ðØ%)§]¡]×%<Ñ%<¸T¿]¹]×=VÑ=VÓ%W�D”NØ—M‘M×+Ñ+¨D¯M©M×,EÑ,EØ-.°·±¸qÑ0AÐ,BôDô
 �|‰|˜xÓ'Û!ò@�à!×'Ñ'¨Ø/9¯©Ø/9¯©ð (ð @�ò Ø!×-Ñ-Ó/°Ñ2�F÷ à—<‘<“> \Ó1Üð 0Ø57¸tòEð ˆøôk ó Ùðûô0 ó %Ø $�—ð%ûô #¤GÐ,ó Ùðú÷  •TúsB   ¦G? Ã4
H ÄA3H' ÇH=Ç?
HÈHÈH$È#H$È'H:È9H:È=
Ic                 ó  • U R                   c  g[        R                  R                  S5      (       az  SSKnUR                  U R                   5        U R                  (       aI  U R                  R                  5        H*  u  nu  pEUR                  X45        UR                  X55        M,     ggU R                  b<   U R                  R                  U R                  R                  U R                   5        gg! [        [        4 a     gf = f)zARestore Windows ErrorMode or core file behavior to initial value.Nr¸   r   )r`  r§   rÏ   rÐ   rN  rO  ra  r’  rM  rX  rø   rd  rc  r  r­   )rq   Ú
ignore_excrN  re  rf  rg  s         rf   r  ÚSuppressCrashReport.__exit__ë  sÒ   € à�>‰>Ñ!Øä�<‰<×"Ñ" 5×)Ñ)ÛØ×Ñ §¡Ô/à�~�~Ø9=¿¹×9MÑ9MÖ9OÑ5�KÑ!5 (Ø×+Ñ+¨KÔBØ×+Ñ+¨KÖBò :Pð ð
 �}‰}Ñ(ðØ—M‘M×+Ñ+¨D¯M©M×,EÑ,EÀtÇ~Á~ÕVð )øô #¤GÐ,ó Ùðús   Â;:C7 Ã7D
Ä	D
)ra  r`  rø   )
r_   r`   ra   rb   rc   r`  ra  r  r  rd   r]   re   rf   rE   rE      s   † ñð
 €IØ€Iò@õDre   rE   c                 óà   ^^^^• [        TT5        Sm TR                  T   mSmUUUU4S jnU R	                  U5        [        TTU5        g! [        [        4 a    [        TTS5      m NGf = f)zãOverride 'object_to_patch'.'attr_name' with 'new_value'.

Also, add a cleanup procedure to 'test_instance' to restore
'object_to_patch' value for 'attr_name'.
The 'attr_name' should be a valid attribute for 'object_to_patch'.

FTNc                  óH   >• T (       a  [        TTT5        g [        TT5        g rm   )rÓ  rÓ  )Úattr_is_localÚ	attr_nameÚobject_to_patchr`  s   €€€€rf   ÚcleanupÚpatch.<locals>.cleanup  s   ø€ ÞÜ�O Y°	Õ:ä�O YÕ/re   )rœ   Ú__dict__r�   r)  Ú
addCleanuprÓ  )Útest_instancerq  rp  Ú	new_valuerr  ro  r`  s    ``  @@rf   Úpatchrx     s~   û€ ô ˆO˜YÔ'ð €MðØ#×,Ñ,¨YÑ7ˆ	ð ˆ÷0ð 0ð ×Ñ˜WÔ%ô ˆO˜Y¨	Õ2øô œHÐ%ó >Ü˜O¨Y¸Ó=Š	ð>ús   ”A ÁA-Á,A-c              #   ó<   #   •  U SS nSv •  XSS& g! WU SS& f = f7f)z-Like unittest.mock.patch.dict, but for lists.Nr]   )ÚorigÚsaveds     rf   Ú
patch_listr|  "  s&   é € ðØ‘Q�ˆÛà‰Q‰ø�%ˆ‰Q‰üs   ‚„	 �’™c                 óŠ   • [        5          SSKnUR                  U 5      $ ! [         a    [        R                  " S5      ef = f)ú]
Run code in a subinterpreter. Raise unittest.SkipTest if the tracemalloc
module is enabled.
r   Núrequires _testcapi)Ú_check_tracemallocr»  rW  rŒ   rž   Úrun_in_subinterp)r—  r»  s     rf   r�  r�  ,  sH   € ô
 Ôð6Ûð ×%Ñ% dÓ+Ð+øô ó 6Ü×ÒÐ 4Ó5Ð5ð6ús	   Œ! ¡!A)Úown_gilc                óˆ  • [        5          SSKnUb  SU;  d   X45       eU(       a  SOSUS'   OIUS   nUS:X  a  SUS'   O8US:X  a  SUS'   O,US	:X  a  SUS'   O [        U[        5      (       d  [        U5      e[        R                  " S
0 UD6nUR                  X5      $ ! [         a    [        R                  " S5      ef = f)r~  r   Nzrequires _testinternalcapiÚgilÚownÚsharedr   r¢   r©   r]   )r€  rd  rW  rŒ   rž   r2  ræ   ÚNotImplementedErrorrC  ÚSimpleNamespaceÚrun_in_subinterp_with_config)r—  r‚  rf  rd  r„  s        rf   r‰  r‰  9  sÕ   € ô
 Ôð>Û ð ÑØ˜FÓ"Ð5 WÐ$5Ó5Ð"Þ!(™¨hˆˆuŠà�U‰mˆØ�!‹8Ø%ˆF�5ŠMØ�A‹XØ$ˆF�5ŠMØ�A‹XØ!ˆF�5ŠMÜ˜C¤×%Ñ%Ü% cÓ*Ð*Ü×"Ò"Ñ, VÑ,€FØ×9Ñ9¸$ÓGÐGøô! ó >Ü×ÒÐ <Ó=Ð=ð>ús   ŒB  Â !Cc                  ó„   •  SS K n U R                  5       (       a  [        R                  " S5      eg ! [         a     g f = f)Nr   zUrun_in_subinterp() cannot be used if tracemalloc module is tracing memory allocations)ÚtracemallocÚ
is_tracingrŒ   rž   rW  )r‹  s    rf   r€  r€  T  sL   € ð;Ûð ×!Ñ!×#Ñ#Ü×#Ò#ð %:ó ;ð ;ð $øô ó Ùðús   ‚2 ²
?¾?c                 ój   ^ ^^^^• SmUUUUU 4S jnU" 5         [        5         T R                  T5        g )NFc                  ór   >^•  " UU4S jST5      n T" U " T6 5      mTR                  [        [        T5        g )Nc                   ó$   >• \ rS rSrU U4S jrSrg)Ú6check_free_after_iterating.<locals>.wrapper.<locals>.Aie  c                 óB   >• Sm [        T5        g ! [         a     g f = f©NT)ÚnextÚStopIteration)rq   ÚdoneÚits    €€rf   Ú__del__Ú>check_free_after_iterating.<locals>.wrapper.<locals>.A.__del__f  s&   ø€ à�ðÜ˜•HøÜ$ó Ùðús   … ‘
�r]   N)r_   r`   ra   rb   r—  rd   )r•  r–  s   €€rf   ÚAr�  e  s   ø† ÷ñ re   r™  )ÚassertRaisesr”  r“  )r™  r–  rr   Úclsr•  Úiterr  s    @€€€€€rf   r  Ú+check_free_after_iterating.<locals>.wrapperd  s5   ù€ ÷	ð 	�ô 	ñ ‘!�T�(‹^ˆà×Ñœ-¬¨rÕ2re   )rá  Ú
assertTrue)r  rœ  r›  rr   r  r•  s   ```` @rf   Úcheck_free_after_iteratingrŸ  b  s*   ü€ Ø€D÷3ñ 3ñ „Iä„LØ‡O�O�DÕre   c                 ó¦  • SSK JnJn  SSKJn  SSKnUR                  5       nUR                  " U5        UR                  S:X  a   UR                  5         UR                   HV  nU (       a  X`;  a  M  [        XV5      nU (       a  Uc
   SU-  5       eO	U(       d  M:  UR                  US   5      b  MQ  US   s  $    g! UR                   a     gf = f)a(  Check if the compiler components used to build the interpreter exist.

Check for the existence of the compiler executables whose names are listed
in 'cmd_names' or all the compiler executables when 'cmd_names' is empty
and return the first missing executable or None when none is found
missing.

r   )Ú	ccompilerr8  )r€   NÚmsvcz%the '%s' executable is not configured)Úsetuptools._distutilsr¡  r8  Ú
setuptoolsr€   r€  Únew_compilerÚcustomize_compilerÚcompiler_typeÚ
initializeÚPlatformErrorÚexecutablesrœ   Úwhich)Ú	cmd_namesr¡  r8  r€   r€  Úcompilerr    r(  s           rf   rI   rI   x  sÉ   € ÷ ;Ý!Ûà×%Ñ%Ó'€HØ× Ò  Ô*Ø×Ñ Ó'ð	Ø×ÑÔ!ð ×$Ô$ˆÞ˜Ó.ÙÜ�hÓ%ˆÞØ‘?ð CØ;¸dÑBóC‘?æÙØ�<‰<˜˜A™ÓÓ'Ø�q‘6ŠMò %øð ×#Ñ#ó 	Ùð	ús   ÁB= Â=CÃCc                 óæ   • Sn[         (       aO  X:  aJ  [        c6  SS KnUR                  5       nUR                  =(       a    UR
                  S:  q[        (       a  Un [        R                  " U 5      $ )Ng-Cëâ6?r   é   )r4   Ú_old_android_emulatorrÏ   Úandroid_verÚis_emulatorÚ	api_levelr§   r:   )ÚintervalÚminimum_intervalrÏ   Úavs       rf   r:   r:   ›  s_   € ð Ðß‚z�hÓ1ä Ñ(ÛØ×%Ñ%Ó'ˆBØ$&§N¡N×$H°r·|±|ÀbÑ7HÐ!ß Ò Ø'ˆHÜ× Ò  Ó*Ð*re   c                  óÄ   •  [         R                  " S5      n U $ ! [        [        4 a5     [         R                  " S5      n  U $ ! [        [        4 a    Sn   U $ f = ff = f)zGet size of a page in bytes.ÚSC_PAGESIZEÚSC_PAGE_SIZEi   )r®   Úsysconfr  r�   )Ú	page_sizes    rf   r;   r;   ª  so   € ðÜ—J’J˜}Ó-ˆ	ð Ðøô œÐ'ó ð	ÜŸ
š
 >Ó2‰Ið Ðøô œNÐ+ó 	ØŠIØÐð	úðús&   ‚ šA«AÁAÁAÁAÁAc               #   ó  #   • SS K n [        R                  R                  5       nU R	                  5       n U R                  5         S v •  U(       a  U R                  USS9  g g ! U(       a  U R                  USS9  f f = f7f)Nr   T)r·  Úall_threads)Úfaulthandlerr§   Ú
__stderr__ÚfilenoÚ
is_enabledrä  rå  )r¾  ÚfdrÁ  s      rf   Údisable_faulthandlerrÃ  ¶  st   é € ãô
 
�‰×	Ñ	Ó	 €Bà×(Ñ(Ó*€Jð;Ø×ÑÔÛæØ×Ñ R°TÐÒ:ð øŽ:Ø×Ñ R°TÐÒ:ð üs   ‚3B ¶A# Á
B Á#A=Á=B c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚSaveSignalsiÈ  z²
Save and restore signal handlers.

This class is only able to save/restore signal handlers registered
by the Python signal module: see bpo-13285 for "external" signal
handlers.
c                 óÒ   • SS K nXl         UR                  5       U l        S H*  n [        X5      nU R                  R                  U5        M,     0 U l        g ! [         a     MC  f = f)Nr   )ÚSIGKILLÚSIGSTOP)ÚsignalÚvalid_signalsÚsignalsrœ   r�   r  Úhandlers)rq   rÉ  ÚsignameÚsignums       rf   rp   ÚSaveSignals.__init__Ñ  sd   € ÛØŒØ×+Ñ+Ó-ˆŒã-ˆGðÜ  Ó1�ð �L‰L×Ñ Ö'ñ .ð ˆ�øô "ó Úðús   ¦AÁ
A&Á%A&c                 ó†   • U R                    H1  nU R                  R                  U5      nUc  M#  X R                  U'   M3     g rm   )rË  rÉ  Ú	getsignalrÌ  ©rq   rÎ  Úhandlers      rf   ÚsaveÚSaveSignals.saveÞ  s:   € Ø—l”lˆFØ—k‘k×+Ñ+¨FÓ3ˆGØ‰ñ Ø$+�M‰M˜&Ó!ò #re   c                 ó€   • U R                   R                  5        H   u  pU R                  R                  X5        M"     g rm   )rÌ  r’  rÉ  rÒ  s      rf   ÚrestoreÚSaveSignals.restoreê  s-   € Ø#Ÿ}™}×2Ñ2Ö4‰OˆFØ�K‰K×Ñ˜vÖ/ò  5re   )rÌ  rÉ  rË  N)	r_   r`   ra   rb   rc   rp   rÔ  r×  rd   r]   re   rf   rÅ  rÅ  È  s   † ñòò
,õ0re   rÅ  c                  ó�   •  SS K n U R                  =(       a    [
        (       + $ ! [         a    [        R                  " S5      ef = f©Nr   r  )r»  rW  rŒ   rž   ÚWITH_PYMALLOCr  ©r»  s    rf   Úwith_pymallocrÝ  ï  sC   € ð6Ûð ×"Ñ"×:¬?Ô':Ð:øô ó 6Ü×ÒÐ 4Ó5Ð5ð6ús	   ‚$ ¤!Ac                  ól   •  SS K n U R                  $ ! [         a    [        R                  " S5      ef = frÚ  )r»  rW  rŒ   rž   ÚWITH_MIMALLOCrÜ  s    rf   Úwith_mimallocrà  ÷  s;   € ð6Ûð ×"Ñ"Ð"øô ó 6Ü×ÒÐ 4Ó5Ð5ð6ús   ‚ ’!3c                   ó$   • \ rS rSrSrS rS rSrg)Ú
_ALWAYS_EQiÿ  z#
Object that is equal to anything.
c                 ó   • gr’  r]   ©rq   Úothers     rf   Ú__eq__Ú_ALWAYS_EQ.__eq__  ó   € Øre   c                 ó   • g©NFr]   rä  s     rf   Ú__ne__Ú_ALWAYS_EQ.__ne__  ó   € Øre   r]   N)r_   r`   ra   rb   rc   ræ  rë  rd   r]   re   rf   râ  râ  ÿ  s   † ñòõre   râ  c                   ó*   • \ rS rSrSrS rS rS rSrg)Ú	_NEVER_EQi
  z'
Object that is not equal to anything.
c                 ó   • grê  r]   rä  s     rf   ræ  Ú_NEVER_EQ.__eq__  rí  re   c                 ó   • gr’  r]   rä  s     rf   rë  Ú_NEVER_EQ.__ne__  rè  re   c                 ó   • g)Nr¢   r]   rw   s    rf   Ú__hash__Ú_NEVER_EQ.__hash__  s   € Øre   r]   N)	r_   r`   ra   rb   rc   ræ  rë  rõ  rd   r]   re   rf   rï  rï  
  s   † ñòòõre   rï  c                   ó$   • \ rS rSrSrS rS rSrg)Ú_LARGESTi  z7
Object that is greater than anything (except itself).
c                 ó"   • [        U[        5      $ rm   )r2  rø  rä  s     rf   ræ  Ú_LARGEST.__eq__  s   € Ü˜%¤Ó*Ð*re   c                 ó   • grê  r]   rä  s     rf   Ú__lt__Ú_LARGEST.__lt__  rí  re   r]   N)r_   r`   ra   rb   rc   ræ  rü  rd   r]   re   rf   rø  rø    s   † ñò+õre   rø  c                   ó$   • \ rS rSrSrS rS rSrg)Ú	_SMALLESTi#  z4
Object that is less than anything (except itself).
c                 ó"   • [        U[        5      $ rm   )r2  rÿ  rä  s     rf   ræ  Ú_SMALLEST.__eq__(  s   € Ü˜%¤Ó+Ð+re   c                 ó   • grê  r]   rä  s     rf   Ú__gt__Ú_SMALLEST.__gt__*  rí  re   r]   N)r_   r`   ra   rb   rc   ræ  r  rd   r]   re   rf   rÿ  rÿ  #  s   † ñò,õre   rÿ  c                  ó6   • SSK n U R                  R                  $ )zDReturn the global event loop policy if one is set, else return None.r   N)Úasyncio.eventsÚeventsÚ_event_loop_policy)Úasyncios    rf   Úmaybe_get_event_loop_policyr
  /  s   € ãØ�>‰>×,Ñ,Ð,re   )é    é@   c                 ó|  • Xp2SS K nUR                  5        nUR                  5       S-  n[        US5      Ul        UR                  U5      nUS-
  U-  U-  nX(-  n	X)-
  n
X:-
  nXwS-
  -  US-
  U-  U-  -  U	SU	-
  -  -   n[        U5      [        UR                  5       5      4sS S S 5        $ ! , (       d  f       g = f)Nr   r©   é   r¢   )ÚdecimalÚlocalcontextÚ
bit_lengthÚmaxÚprecÚDecimalrc  Úsqrt)ÚnbinsÚnballsr  rY  r  ÚctxÚbitsrŽ  Úp1emptyÚ	meanemptyÚoccupiedÚ
collisionsÚvars                rf   Úcollision_statsr  <  s¼   € Ø€qó$ Ø	×	Ñ	Ô	 3Ø�|‰|‹~ Ñ!ˆô �t˜R“=ˆŒØ�_‰_˜QÓˆØ˜‘F˜b‘= QÑ&ˆØ‘Kˆ	Ø‘=ˆØ‘\ˆ
Ø�Q‘$‰i˜"˜Q™$ ™ Q™Ñ&¨°a¸)±mÑ)DÑDˆÜ�ZÓ ¤%¨¯©«
Ó"3Ð3÷ 
 ×	×	ús   —BB-Â-
B;c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	Úcatch_unraisable_exceptioni^  a°  
Context manager catching unraisable exception using sys.unraisablehook.

Storing the exception value (cm.unraisable.exc_value) creates a reference
cycle. The reference cycle is broken explicitly when the context manager
exits.

Storing the object (cm.unraisable.object) can resurrect it if it is set to
an object which is being finalized. Exiting the context manager clears the
stored object.

Usage:

    with support.catch_unraisable_exception() as cm:
        # code creating an "unraisable exception"
        ...

        # check the unraisable exception: use cm.unraisable
        ...

    # cm.unraisable attribute no longer exists at this point
    # (to break a reference cycle)
c                 ó    • S U l         S U l        g rm   )Ú
unraisableÚ	_old_hookrw   s    rf   rp   Ú#catch_unraisable_exception.__init__w  s   € ØˆŒØˆ�re   c                 ó   • Xl         g rm   )r#  )rq   r#  s     rf   Ú_hookÚ catch_unraisable_exception._hook{  s	   € ð %�re   c                 óZ   • [         R                  U l        U R                  [         l        U $ rm   )r§   Úunraisablehookr$  r'  rw   s    rf   r  Ú$catch_unraisable_exception.__enter__€  s    € Ü×+Ñ+ˆŒØ!ŸZ™ZŒÔØˆre   c                 ó2   • U R                   [        l        U ?g rm   )r$  r§   r*  r#  )rq   r%  s     rf   r  Ú#catch_unraisable_exception.__exit__…  s   € Ø!Ÿ^™^ŒÔØ‰Ore   )r$  r#  N)
r_   r`   ra   rb   rc   rp   r'  r  r  rd   r]   re   rf   r!  r!  ^  s   † ñò0ò%ò
õ
re   r!  r¸  c          	      ó”  • [         R                  S:w  aÅ  SSKnUc  [        n[        R
                  " 5       n[        USS9 H2  n[         R                  " U [         R                  5      u  pgUS:w  d  M2    O~    [         R                  " XR                  5        [         R                  " U S5        [        R
                  " 5       U-
  n[        SU  SUS S	35      e[         R                  " U S5      u  pg[         R                  " U5      n	X‘:w  a  [        SU  S
U	 SU S35      eX`:w  a  [        SU SU  35      eg! [         a     N—f = f)al  
Wait until process pid completes and check that the process exit code is
exitcode.

Raise an AssertionError if the process exit code is not equal to exitcode.

If the process runs longer than timeout seconds (LONG_TIMEOUT by default),
kill the process (if signal.SIGKILL is available) and raise an
AssertionError. The timeout feature is not available on Windows.
Úntr   NF©Úerrorzprocess z is still running after ú.1fz secondsz exited with code z, but exit code z is expectedzpid z != pid )r®   r    rÉ  rQ   rL  Ú	monotonicÚsleeping_retryrÎ  rÏ  ÚkillrÇ  r­   ÚAssertionErrorÚwaitstatus_to_exitcode)
rp  Úexitcoder¹  rÉ  Ú
start_timer†  Úpid2rÑ  ÚdtÚ	exitcode2s
             rf   Úwait_processr=  Š  sF  € ô 
‡w�w�$ƒÛà‰?Ü"ˆGä—^’^Ó%ˆ
Ü ¨uÔ5ˆAÜŸ:š: c¬2¯:©:Ó6‰LˆDØ�q�yÙñ 6ðÜ—’˜Ÿ^™^Ô,Ü—
’
˜3 Ô"ô
 —’Ó! JÑ.ˆBÜ  8¨C¨5ð 1*Ø*,¨S¨°ð";ó <ð <ô —z’z # qÓ)‰ˆä×)Ò)¨&Ó1€IØÓÜ˜x¨ uÐ,>¸y¸kð J.Ø.6¨Z°|ðEó Fð 	Fð ƒ{Ü˜t D 6¨°#°Ð7Ó8Ð8ð øô# ó áðús   Á87D: Ä:
EÅEc                  óÒ   • SSK Jn   U " S5        U " S5      n[        R                  S:X  a   UR	                  SS9  gg! [
         a  n[        R                  " SU< 35      eSnAff = f)	z®
Skip tests if the multiprocessing.synchronize module is missing, if there
is no available semaphore implementation, or if creating a lock raises an
OSError (on Linux only).
r¢   )Úimport_moduleÚ_multiprocessingzmultiprocessing.synchronizeÚlinuxN)r  z broken multiprocessing SemLock: )Úimport_helperr?  r§   rÏ   ÚLockr­   rŒ   rž   )r?  ÚsynchronizeÚexcs      rf   Ú*skip_if_broken_multiprocessing_synchronizerF  ¹  sv   € õ -ñ Ð$Ô%ñ  Ð =Ó>€Kä
‡|�|�wÓð	Pð ×Ñ ÐÒ&ð øô ó 	PÜ×#Ò#Ð&FÀsÁgÐ$NÓOÐOûð	Pús   ¬= ½
A&ÁA!Á!A&c                 óÀ   • UR                   nUR                  nUS:w  a  U SU 3nOU nS[        R                  " U5       S3nU R                  " [
        Xq/UQ70 UD6  g)z‡
Check that given type cannot be instantiated using *args and **kwds.

See bpo-43916: Add Py_TPFLAGS_DISALLOW_INSTANTIATION type flag.
Úbuiltinsrþ   zcannot create 'z' instancesN)r`   r_   r_  r
  r¢  r3  )r¨  Útprr   rO  Úmodr    Úqualnamern   s           rf   r-   r-   Ò  sf   € ð �-‰-€CØ�;‰;€DØ
ˆjÓØ�U˜!˜D˜6�?‰à�VˆØœBŸIšI hÓ/Ð0°Ð
<€CØ×Òœy¨#ÐA°DÒA¸DÓAre   c                  óø   •  SSK n U R                  5       n[        US-
  S5      $ ! [        [        4 aD  n Sn[        R
                  " 5       nUb  US-  nUR                  nUb  M  Sn SnANW! Snf = fSnAff = f)znGet the recursion depth of the caller function.

In the __main__ module, at the module level, it should be 1.
r   Nr¢   )rd  Úget_recursion_depthrW  ÚRecursionErrorr§   Ú	_getframeÚf_backr  )rd  ÚdepthrE  Úframes       rf   rM  rM  á  sƒ   € ð
Û Ø!×5Ñ5Ó7ˆô ˆu�q‰y˜!ÓÐøô œÐ(ó 
ð	ØˆEÜ—M’M“OˆEØÑ#Ø˜‘
�ØŸ™�ð Ó#ð
 �Eø�D‰Eþð
ús&   ‚% ¥A9¶.A-Á&A4Á-A1Á1A4Á4A9c                  óH   • [         R                  " 5       n [        5       nX-
  $ )z™Get the number of available frames before RecursionError.

It depends on the current recursion depth of the caller function and
sys.getrecursionlimit().
)r§   ÚgetrecursionlimitrM  )rW  rQ  s     rf   Úget_recursion_availablerU  ø  s"   € ô ×!Ò!Ó#€EÜÓ!€EØ‰=Ðre   c              #   óÎ   #   • [         R                  " 5       n [         R                  " U 5        Sv •  [         R                  " U5        g! [         R                  " U5        f = f7f)z'Temporarily change the recursion limit.N)r§   rT  Úsetrecursionlimit)rW  Úoriginal_limits     rf   Úset_recursion_limitrY  	  sG   é € ô ×*Ò*Ó,€Nð.Ü×Ò˜eÔ$Ûä×Ò˜nÕ-øŒ×Ò˜nÕ-üó   ‚A%™A
 ³A%Á
A"Á"A%c                 ó†   • U c  Sn OU S:  a  [        SU  35      e[        5       n[        US-
  S5      nX-   n[        U5      $ )Ni N  é   z"max_depth must be at least 3, got r¢   )r  rM  r  rY  )Ú	max_depthrQ  rW  s      rf   rA   rA   	  sT   € ØÑð ‰	Ø	�Q‹ÜÐ=¸i¸[ÐIÓJÐJÜÓ!€EÜ�˜‘	˜1Ó€EØÑ€EÜ˜uÓ%Ð%re   r|  Úlikec          
      óp   • [        5       n[        R                  " S[        U US[	        U5       S3-   S9  U$ )Nr7  ú
(?#supportÚ))r<  r|  rá  )Úobjectrw  ÚfilterwarningsÚDeprecationWarningÚid)r|  r^  Útokens      rf   Úignore_deprecations_fromrg  	  s<   € Ü‹H€EÜ×ÒØÜ#ØØ˜*¤R¨£Y K¨qÐ1Ñ1ò	ð €Lre   Útokensc                  óä  • U (       d  [        S5      e/ n[        S U  5       5      n[        R                   Hy  u  p4pVnUS:X  aX  U[        L aO  [        U[        R                  5      (       a  UR                  nOU=(       d    SnUR                  U5      (       a  Me  UR                  X4XVU45        M{     [        R                  U:w  a)  U[        R                  S S & [        R                  " 5         g g )Nz<Provide token or tokens returned by ignore_deprecations_fromc              3   ó@   #   • U  H  nS [        U5       S3v •  M     g7f)r`  ra  N)re  )rú  rf  s     rf   rü  Ú-clear_ignored_deprecations.<locals>.<genexpr>(	  s   é € ÐDºV°E˜
¤2 e£9 +¨QÕ/ºVùs   ‚r7  r6  )r  r  rw  Úfiltersrd  r2  r_  ÚPatternr’   r;  rÆ  Ú_filters_mutated)	rh  Únew_filtersr;  Úactionrá  r<  r|  rŸ  rn   s	            rf   Úclear_ignored_deprecationsrq  #	  sÉ   € ÞÜÐWÓXÐXà€KÜÑD¹VÓDÓD€HÜ5=×5EÔ5EÑ1ˆ˜¨6Ø�XÓ (Ô.@Ò"@Ü˜'¤2§:¡:×.Ñ.Ø—o‘o‘à—m �Ø�|‰|˜H×%Ñ%ÙØ×Ñ˜F¨X¸vÐFÖGñ 6Fô ×Ñ˜;Ó&Ø)Œ×Ñ™ÐÜ×!Ò!Õ#ð 're   c                  ó¶   •  SS K n  SS Kn[        R
                  " US5      $ ! [         a    [        R                  " SS5      s $ f = f! [         a    S n NLf = f)Nr   Tzvenv: ensurepip requires zlibzvenv: pip requires ctypes)rV  rW  rŒ   r	  rÃ   rX  )rV  rÃ   s     rf   Úrequires_venv_with_piprs  8	  sc   € ðFÛðÛô ×Ò˜vÐ'BÓCÐCøô ó FÜ�Š˜tÐ%DÓEÒEðFûô ó ØŠðús    ‚" ‡A	 ¢!AÁAÁ	AÁAc                 ó   • [         R                  " S5      =(       d$    [        R                  R	                  [
        S5      n[        R                  " U5      n[        USS9nU HW  nUR                  S5      (       d  M  U S-   nUR                  U5      (       d  M8  [        R                  R	                  X5      s  $    [        SU  SU 35      e)	zºTry to find a wheel with the package specified as pkgname.

If set, the wheels are searched for in WHEEL_PKG_DIR (see ensurepip).
Otherwise, they are searched for in the test directory.
ÚWHEEL_PKG_DIRÚ	wheeldataT)Úreversez.whlrÿ   zNo wheel for z
 found in )r8  r9  r®   r²   r  rŠ  Úlistdirr‘  r;  rÐ   r«   )ÚpkgnameÚ	wheel_dirÚ	filenamesrŒ  Úprefixs        rf   Ú
_findwheelr}  H	  s®   € ô ×(Ò(¨Ó9÷ ¼R¿W¹W¿\¹\Ü�{ó>€Iô —
’
˜9Ó%€IÜ�y¨$Ñ/€IÛˆà× Ñ  ×(Ñ(ÙØ˜3‘ˆØ×Ñ˜v×&Ó&Ü—7‘7—<‘< 	Ó4Ò4ñ ô ˜m¨G¨9°J¸y¸kÐJÓ
KÐKre   c           
   #   ó.  ^#   • SS K mSSKJn  U4S jnU" 5        n[        R                  SSSSU /nU" U5        [
        R                  R                  X05      n[
        R                  R                  [        R                  5      n[        R                  S	:X  a"  [
        R                  R                  US
U5      nO![
        R                  R                  USU5      nUSSSSS[        S5      4nU" U5        Uv •  S S S 5        g ! , (       d  f       g = f7f)Nr   r¢   )Útemp_cwdc           	      ó  >• [         (       aN  SS Kn[        5         [        SSR                  [	        UR
                  U 5      5      5        TR                  U SS9  g TR                  U TR                  TR                  SS9  g )Nr   zRun:r&  T)rÉ   )r¥   rÛ  rÉ   )	r   Úshlexr¬   r  r  ÚquoterÝ   r"  ÚSTDOUT)r(  r�  rÜ   s     €rf   Úrun_commandÚ3setup_venv_with_pip_setuptools.<locals>.run_commande	  sd   ø€ ßŠ7ÛÜŒGÜ�&˜#Ÿ(™(¤3 u§{¡{°CÓ#8Ó9Ô:Ø�N‰N˜3 dˆNÒ+à�N‰N˜3Ø",§/¡/Ø",×"3Ñ"3Ø!%ð ò 're   z-XÚdevz-mÚvenvrp  ÚScriptsÚbinÚpipÚinstallr¤  )rÜ   r¾  r  r§   rz  r®   r²   r  r	  rÏ   r}  )	Úvenv_dirr  r„  Útemp_dirr(  r‡  Ú
python_exer'  rÜ   s	           @rf   Úsetup_venv_with_pip_setuptoolsr�  `	  sÑ   øé € ãÝ#õ
'ñ 
Œ�xä�~‰~˜t U¨D°&¸(ÐCˆÙ�CÔä�w‰w�|‰|˜HÓ/ˆô —W‘W×%Ñ%¤c§n¡nÓ5ˆ
Ü�<‰<˜7Ó"Ü—W‘W—\‘\ $¨	°:Ó>‰Fä—W‘W—\‘\ $¨¨zÓ:ˆFà�t˜UØ�U˜IÜ˜,Ó'ðˆñ 	�CÔàŠ÷) 
�Žüs   ƒD›C DÃ;	DÄ
DÄDÚgettotalrefcountc                 óÎ   • U /nUR                  U5        SSKnS nXl        UR                  U5        [	        [
        S5      (       a  S nXl        [
        R                  " US9  gg)aR  
Keep a Python alive as long as possible.

Create a reference cycle and store the cycle in an object deleted late in
Python finalization. Try to keep the object alive until the very last
garbage collection.

The function keeps a strong reference by design. It should be called in a
subprocess to not mark a test as "leaking a reference".
r   Nc                 ó   • g rm   r]   )Úencodings    rf   Úsearch_funcÚ"late_deletion.<locals>.search_func¥	  rè  re   Úregister_at_forkc                  ó   • g rm   r]   r]   re   rf   Úatfork_funcÚ"late_deletion.<locals>.atfork_func¬	  r  re   )Úbefore)rÆ  ÚcodecsÚ	referenceÚregisterrÍ   r®   r–  )rŸ   Ú	ref_cycler›  r”  r˜  s        rf   Úlate_deletionrŸ  �	  sa   € ð& �€IØ×Ñ�YÔó òà%ÔØ
‡O�O�KÔ äŒrÐ%×&Ñ&ò	à )ÔÜ
×Ò ;Ó/ð 're   r0  c            #   ó   #   • U S::  a  [        S5      e[        R                  " 5       nX0-   n Sv •  [        R                  " 5       U:¼  a  OM   U(       a8  [        R                  " 5       U-
  nSUS S3nU(       a  U SU 3n[        U5      eg7f)aÅ  
Run the loop body until "break" stops the loop.

After *timeout* seconds, raise an AssertionError if *error* is true,
or just stop if *error is false.

Example:

    for _ in support.busy_retry(support.SHORT_TIMEOUT):
        if check():
            break

Example of error=False usage:

    for _ in support.busy_retry(support.SHORT_TIMEOUT, error=False):
        if check():
            break
    else:
        raise RuntimeError('my custom error')

r   z!timeout must be greater than zeroNz	timeout (r2  z	 seconds)rª   )r  rL  r3  r6  )r¹  Úerr_msgr1  r9  Údeadliner;  rn   s          rf   Ú
busy_retryr£  ²	  s”   é € ð, �!ƒ|ÜÐ<Ó=Ð=ä—’Ó!€JØÑ#€Hà
Ûä�>Š>Ó˜xÓ'Øñ	 ö Ü�^Š^Ó 
Ñ*ˆØ˜"˜S˜ Ð+ˆÞØ�E˜˜G˜9Ð%ˆCÜ˜SÓ!Ð!ð ùs   ‚BBg{®Gáz„?g      ð?)Ú
init_delayÚ	max_delayr1  c            #   ó„   #   • Un[        XUS9 H,  nSv •  [        R                  " U5        [        US-  U5      nM.     g7f)a‰  
Wait strategy that applies exponential backoff.

Run the loop body until "break" stops the loop. Sleep at each loop
iteration, but not at the first iteration. The sleep delay is doubled at
each iteration (up to *max_delay* seconds).

See busy_retry() documentation for the parameters usage.

Example raising an exception after SHORT_TIMEOUT seconds:

    for _ in support.sleeping_retry(support.SHORT_TIMEOUT):
        if check():
            break

Example of error=False usage:

    for _ in support.sleeping_retry(support.SHORT_TIMEOUT, error=False):
        if check():
            break
    else:
        raise RuntimeError('my custom error')
r0  Nr©   )r£  rL  Úsleeprj  )r¹  r¡  r¤  r¥  r1  Údelayr†  s          rf   r4  r4  Ü	  s<   é € ð4 €EÜ˜°Ô6ˆÛä�
Š
�5ÔÜ�E˜A‘I˜yÓ)Šò	 7ùs   ‚>A c                   ó$   • \ rS rSrSrS rS rSrg)ÚCPUStopwatchiþ	  aŸ  Context manager to roughly time a CPU-bound operation.

Disables GC. Uses CPU time if it can (i.e. excludes sleeps & time of
other processes).

N.B.:
- This *includes* time spent in other threads.
- Some systems only have a coarse resolution; check
  stopwatch.clock_info.rseolution if.

Usage:

with ProcessStopwatch() as stopwatch:
    ...
elapsed = stopwatch.seconds
resolution = stopwatch.clock_info.resolution
c                 ó6  • [         R                  n[         R                  " S5      nU" 5       S::  a&  [         R                  n[         R                  " S5      n[	        5       U l        U R
                  R                  5         Xl        X l        U" 5       U l	        U $ )NÚprocess_timer   r3  )
rL  r¬  Úget_clock_infor3  rç  Úcontextr  Úget_timeÚ
clock_infor9  )rq   r¯  r°  s      rf   r  ÚCPUStopwatch.__enter__
  sp   € Ü×$Ñ$ˆÜ×(Ò(¨Ó8ˆ
Ù‹:˜‹?Ü—~‘~ˆHÜ×,Ò,¨[Ó9ˆJÜ!“|ˆŒØ�‰×ÑÔ Ø ŒØ$ŒÙ"›*ˆŒØˆre   c                 ó¼   •  U R                  5       nU R                  R                  " U6 nX R                  -
  U l        U$ ! U R                  R                  " U6 nf = frm   )r¯  r®  r  r9  Úseconds)rq   rE  Úend_timer·   s       rf   r  ÚCPUStopwatch.__exit__
  sQ   € ð	1Ø—}‘}“ˆHà—\‘\×*Ò*¨CÐ0ˆFØ§/¡/Ñ1ˆŒØˆøð —\‘\×*Ò*¨CÐ0‰Fús   ‚A  Á A)r°  r®  r¯  r³  r9  N)r_   r`   ra   rb   rc   r  r  rd   r]   re   rf   rª  rª  þ	  s   † ñò"õre   rª  c              #   óÎ   #   • [         R                  " 5       n [         R                  " U 5        Sv •  [         R                  " U5        g! [         R                  " U5        f = f7f)z>Temporarily change the integer string conversion length limit.N)r§   Úget_int_max_str_digitsÚset_int_max_str_digits)Ú
max_digitsÚcurrents     rf   Úadjust_int_max_str_digitsr»  &
  sG   é € ô ×(Ò(Ó*€Gð,Ü×"Ò" :Ô.Ûä×"Ò" 7Õ+øŒ×"Ò" 7Õ+ürZ  c                  ól   •  SS K n U R                  $ ! [         a    [        R                  " S5      ef = frÚ  )r»  ÚPy_C_RECURSION_LIMITrW  rŒ   rž   rÜ  s    rf   rT   rT   1
  s7   € ð6ÛØ×-Ñ-Ð-øÜó 6Ü×ÒÐ 4Ó5Ð5ð6ús   ‚ ’!3c                  ó   • [        5       S-  $ )z<For recursion tests, easily exceeds default recursion limit.r\  )rT   r]   re   rf   rS   rS   9
  s   € ä Ó" QÑ&Ð&re   ÚunameÚs390xzskipped on s390xÚ
getobjectsc                 ó„   ^ ^^•  SSK JmJm  [        R
                  " T 5      U UU4S j5       nU$ ! [         a    T s $ f = f)Nr   )Úget_optimizerÚset_optimizerc                  ó^   >• T" 5       n T" S 5        T" U 0 UD6T" U5        $ ! T" U5        f = frm   r]   )rr   rM  Úsave_optr³   rÃ  rÄ  s      €€€rf   r  Ú"without_optimizer.<locals>.wrapperJ
  s5   ø€ á “?ˆð	$Ù˜$ÔÙ˜Ð( Ñ(á˜(Õ#ø‰M˜(Õ#ús   Š" ¢
,)rd  rÃ  rÄ  rW  r  r  )r³   r  rÃ  rÄ  s   ` @@rf   rV   rV   E
  sE   ú€ ðßBô ‡_‚_�TÓö$ó ð$ð €Nøô ó ØŠðús   …0 °?¾?z.gitÚ__pycache__c                 ó‚   • [         n[        R                  R                  U 5      S:X  a	  USS1-  nU$ SU;   a  US1-  nU$ )NÚDocÚbuildr‡  ÚModules)Ú _BASE_COPY_SRC_DIR_IGNORED_NAMESr®   r²   r	  )r²   ÚnamesÚignoreds      rf   Úcopy_python_src_ignorerÐ  ]
  s]   € Ü.€GÜ	‡w�w×Ñ˜Ó Ó&Øààð	
ñ 	
ˆð €Nð 
�eÓ	Øàð
ñ 	
ˆð €Nre   c               #   ó    #   • [         R                  5        H2  n [        U [        5      (       d  M  U nUR                  S:w  a  M.  Uv •  M4     g 7f)NrH  )Ú__builtins__r,  r2  ré   r`   )rŸ   r›  s     rf   Úiter_builtin_typesrÓ  p
  sA   é € Ü×"Ñ"Ö$ˆÜ˜#œt×$Ñ$ÙØˆØ�>‰>˜ZÓ'ÙØŒ	ò %ùs   ‚AAc              #   óæ  ^ #   • T R                   S:X  d   T 5       eU 4S jn[        T 5      n[        U5      n[        T 5       HÀ  nXB;   a  UR	                  U5         [        T U5      nUR                  S5      (       a  UR                  S5      (       d  U" XE5      (       a	   T XE45       eU" XE5      (       d%  XB;   a  U" XBU   5      (       a   T XEX$   45       eM˜  Mš  XB;   a  X$   UL d   T XEX$   45       eUS4v •  Mº  US4v •  MÂ     U H  nX$   nU" T XE5      (       d  M  US4v •  M     g ! [         a:    US;   d	   T U45       eXB;   a!  U" XBU   5      (       a  UR                  U5         GM+  f = f7f)NrH  c                 ó‚  >• [        U[        R                  5      (       d)  [        U5      R	                  S5      (       a	   TX45       eg[        U5      R	                  S5      (       d	   TX45       e[        U5      (       d	   TX45       eU R	                  S5      (       a  U R                  S5      (       d	   TX45       eg)Nz<slot wrapper Fr:  T)r2  rC  ÚWrapperDescriptorTyper%  rÐ   Úcallabler;  )r    Úvaluer›  s     €rf   Úis_slot_wrapperÚ+iter_slot_wrappers.<locals>.is_slot_wrapper}
  s­   ø€ Ü˜%¤×!<Ñ!<×=Ñ=Ü˜E“{×-Ñ-Ð.>×?Ñ?ÐSÀ#ÀtÐASÓSÐ?ØÜ�E‹{×%Ñ%Ð&6×7Ñ7ÐK¸#¸tÐ9KÓKÐ7Ü˜�‰Ð2  dÐ 2Ó2ˆØ�‰˜t×$Ñ$¨¯©°t×)<Ñ)<ÐP¸sÀDÐ>PÓPÐ<Øre   )Ú__annotate__Ú__annotations__Ú__abstractmethods__r:  TF)
r`   Úvarsr=  r>  r  rœ   r�   rE  rÐ   r;  )r›  rÙ  r�  Úunusedr    rØ  s   `     rf   Úiter_slot_wrappersrà  z
  s‹  øé € Ø�>‰>˜ZÓ'Ð,¨Ó,Ð'õô 
ˆc‹€BÜ�‹W€FÜ�C–ˆØ‹:Ø�M‰M˜$Ôð	Ü˜C Ó&ˆEð �‰˜t×$Ñ$¨D¯M©M¸$×,?Ñ,?Ù& t×3Ñ3ÐG°c¸4Ð5GÓGÐ3Ù˜t×+Ñ+Ø‹zÙ*¨4°D±×:Ñ:ÐX¸SÀ$ÈrÉxÐ<XÓXÐ:Ñ:ñ ð ‹zØ‘x 5Ò(ÐF¨3°¸R¹XÐ*FÓFÐ(Ø˜D�jÔ à˜E�kÔ!ñ/ ó2 ˆØ‘ˆÙ˜3 ×,Ó,Ø˜�*Ôò øô' ó 	àÐUÓUÐbÐX[Ð]aÐWbÓbÐUØ‹z™o¨d°t±H×=Ñ=Ø—
‘
˜4Ô Ûð	üs1   ƒAE1ÁD*Á(B3E1ÄE1Ä*?E.Å)E1Å-E.Å.E1c               #   ó  #   • SS K n SSKJn  [        U SS
S j5         U" 5        nUR	                  SSS5        UR                  SS	5        S v •  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f7f)Nr   r¢   )ÚEnvironmentVarGuardÚcan_colorizec                 ó   • grê  r]   r¶  s    rf   rŠ   Úno_color.<locals>.<lambda>­
  s   € ¸ure   ÚFORCE_COLORÚNO_COLORÚPYTHON_COLORSÚ1rm   )Ú	_colorizer¾  râ  rB   Úunsetr=  )rê  râ  rG  s      rf   Úno_colorrì  §
  sa   é € ãÝ.ô 	�)˜^Ó-DÕEÙÔ à�	‰	�- ¨_Ô=Ø�‰�
˜CÔ Û÷	 	÷ 	FÐEßÕú÷ 	FÕEüs3   ‚B�A1¥*A ÁA1Á	BÁ 
A.	Á*A1Á1
A?Á;Bc                 óF   ^ • [         R                  " T 5      U 4S j5       nU$ )z'Force the terminal not to be colorized.c                  ó^   >• [        5          T" U 0 UD6sS S S 5        $ ! , (       d  f       g = frm   )rì  )rr   rM  r³   s     €rf   r  Ú$force_not_colorized.<locals>.wrapper·
  s   ø€ ä�ZÙ˜Ð( Ñ(÷ �Z�Zús   Œž
,rP  )r³   r  s   ` rf   rW   rW   µ
  s%   ø€ ä‡_‚_�TÓô)ó ð)ð €Nre   c                 ó�   ^• U R                   m[        [        R                  " U R                   5      U4S j5       5       nXl         U $ )zAForce the terminal not to be colorized for the entire test class.c                 óF   >• U R                  [        5       5        T" 5         g rm   )ÚenterClassContextrì  )r›  Úoriginal_setUpClasss    €rf   Únew_setUpClassÚ6force_not_colorized_test_class.<locals>.new_setUpClassÂ
  s   ø€ ð 	×Ñœh›jÔ)ÙÕre   )Ú
setUpClassÚclassmethodr  r  )r›  rô  ró  s     @rf   rX   rX   ¾
  s@   ø€ àŸ.™.ÐäÜ‡_‚_�S—^‘^Ó$ôó %ó ðð $„NØ€Jre   c                  ó
  • [         R                  R                  5       n U R                  5        H,  nUR                  S5      (       d  M  U R	                  U5        M.     U R	                  SS 5        U R	                  SS 5        U $ )NÚPYTHONræ  rç  )r®   rN  ÚcopyrÐ   r¿  )Ú	clean_envrY  s     rf   rY   rY   Ì
  sb   € Ü—
‘
—‘Ó!€IØ�^‰^ÖˆØ�<‰<˜×!Ó!Ø�M‰M˜!Öñ ð ‡M�M�- Ô&Ø‡M�M�*˜dÔ#ØÐre   c                  ó<   • [        [        R                  S   S5      $ )z<Detect whether PyREPL was used during Python initialization.Ú__main__Ú__file__)rÍ   r§   rµ  r]   re   rf   Úinitialized_with_pyreplrÿ  Ö
  s   € ô ”3—;‘;˜zÑ*¨JÓ7Ð7re   c                   ó*   • \ rS rSrSS jrS rS rSrg)rZ   iÜ
  c                 ó4   • U(       a  SS-    X l         X0l        g ©Nr¢   r   )Únext_raisesÚiter_raises)rq   Úinit_raisesr  r  s       rf   rp   ÚBrokenIter.__init__Ý
  s   € ÞØˆaŠCØ&ÔØ&Õre   c                 ó2   • U R                   (       a  SS-    g g r  )r  rw   s    rf   Ú__next__ÚBrokenIter.__next__ã
  s   € Ø××Øˆa‹Cð re   c                 ó2   • U R                   (       a  SS-    U $ r  )r  rw   s    rf   Ú__iter__ÚBrokenIter.__iter__ç
  s   € Ø××ØˆaŠCØˆre   )r  r  N)FFF)r_   r`   ra   rb   rp   r  r  rd   r]   re   rf   rZ   rZ   Ü
  s   † ô'òõre   rZ   c                  óô   • [         R                  S:w  a  gSSKn [        [         S[         R                  5      nSU/n U R                  USU R                  S9nS	U;   $ ! [        U R                  4 a     gf = f)
z@
Test if the Python executable is linked to the musl C library.
rA  Fr   NÚ_base_executableÚlddT)ÚtextrÛ  Úmusl)	r§   rÏ   rÜ   rœ   rz  Úcheck_outputrƒ  r­   rà   )rÜ   Úexer(  r¥   s       rf   Úlinked_to_muslr  í
  s‡   € ô ‡|�|�wÓØãÜ
”#Ð)¬3¯>©>Ó
:€CØ�#ˆ,€CðØ×(Ñ(¨Ø.2Ø0:×0AÑ0Að )ð Cˆð
 �fÑÐøô �Z×2Ñ2Ð3ó Ùðús   ¾A ÁA7Á6A7rm   )zrequires zlib)zrequires gzip)zrequires bz2)zrequires lzma)z$requires co_positions / debug_ranges)T)r6  )zneeds the GIL enabled)Nr]   r]   )F)r]   (   rc   r_   rW  Ú
contextlibÚdataclassesr  r*  rÀ  r®   r_  r°   r§   r8  r›  rL  rC  rŒ   rw  rG  rN   rO   rP   rQ   r²   r  r÷  rþ  ÚTEST_SUPPORT_DIRrŠ  r“   Ú	REPO_ROOTrå   r   r	   r}   r
   rž   r   r(   r)   r   r   r   r   ri  Újunit_xml_listr   r¤   r   r   rµ   rÎ   r   r   r  r   r   r   r.  r.   r/   ÚHAVE_ASAN_FORK_BUGrI  rQ  r   ÚSOCK_MAX_SIZErX  rc  Ú__getformat__rÐ   r    r!   r   r   r   rg  ri  Úcontextmanagerrk  ro  rÏ   r2   r3   r4   r9   r5   r6   r7   Úis_applerÍ   r"   r#   r$   r%   r&   r'   Úhas_strftime_extensionsÚstrftimer  ÚTEST_HTTP_URLrH   r4  r  rÂ  r‡  r@   rF   ræ   r“  rb  rž  r   r<   r   r   r   r   rá  rç  rì  rõ  r   r  rÛ   r9  r  r   r	  r  r  r  r  r  r  r  r"  r6  r>   rG  rG   r]  r^  rh  Ú_4GrŒ  rk  r  rf  rD   rn  r   r   r”  r–  r   r™  rœ  r8   r·  r¹  r0   ÚTEST_MODULES_ENABLEDr1   rÃ  ÚMISSING_C_DOCSTRINGSÚHAVE_PY_DOCSTRINGSÚHAVE_DOCSTRINGSÚrequires_docstringsrÆ  rÈ  rÛ  rÉ  rÐ  r=   rB   r?   rÜ  rß  rC   rï  r,   rô  r6  r*   r+   rZ  rE   rx  r|  r�  r‰  r€  rŸ  rI   r°  r:   r;   rÃ  rÅ  rÝ  rà  râ  rJ   rï  rK   Útotal_orderingrø  rL   rÿ  rM   r
  Ú	hash_infoÚwidthÚ	NHASHBITSr  r!  r=  rF  r-   rM  rU  rY  rA   rg  rq  rs  Úcacher}  r�  rR   rŸ  r£  r4  rª  r»  rT   rS   r¿  ÚmachineÚis_s390xr	  rU   ÚPy_TRACE_REFSrV   Ú	frozensetrÍ  rÐ  rÓ  rà  rì  rW   rX   rY   rÿ  rZ   r  r]   re   rf   Ú<module>r1     sÍ	  ðÙ =àˆ~ÓÙ
ÐFÓ
GÐGã Û Û Û Û Û 	Û 	Û Û 
Û Û Û Û Û Û ò,€ðp Ð ð Ð ð €ð €ð —7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ð Ø—‘—‘Ð 0Ó1€Ø�W‰W�_‰_˜]Ó+€
Ø�G‰G�O‰O˜JÓ'€	ô5ˆIô 5ô�ô ô=˜Jô =ô)�Eô )ô�X×&Ñ&ô òòò$ð €Ø€Ø€
à€Ø€Ø€ð
 Ð òò*òò"E$òN>ô	7òò6:ò8òô:
/ð  %¨U°uÀUõ ð@)¨e¸EÀeÐTYö )ñ %¨TÑ2Ð òòð$ $€ð %€ð ×'Ò'Ø	×Ñ˜Ó!×,Ñ,¨VÓ4Ø$ó&Ð ô-ô-ô,ô-ò1ô:ð ×Ñó:ó ð:ò$Pð �l‰l˜gÑ%€
ð �L‰L×#Ñ# FÓ+€	à�\‰\˜YÑ&€
à‡<�<ÐEÓEÞ%/Ñ!°Y�Jà€Jð —‘ Ñ,€Ø
�,‰,˜&Ñ
 €à—,‘,Ð"<Ñ<€Ø×6˜cŸl™l¨hÑ6€á˜2˜vÓ&÷ 	à÷ Ø÷à÷ð ô	,Ð òOð
 ÷ Ø÷à÷ð ô
Ð òVð ÷ ØôÐ ð
 ',õ 
<ð  Ð Ø‡<�<�7ÓðØ"&§-¢-°Ó"6¸%Ñ"?Ðð ,€ð €ð €ð —‘—‘˜]¨FÓ3€òô&ò&ð�3ð ˜4  V Ñ,ô ð	1À$Ètö 	1ò41ðn ×Ññ	/ó ð	/ò%ò%ò
$òð ×Ññó ðð ×Ññ)ó ð)ò%òBò$*ñ �y×/Ò/Ð0AÓBÓC€ô1ò'ö Ø�Gà€GØ	€Ø�S‰=€ò3ò4ð
 Ð ØÐ ò(ð 8=õ ð: ×Ññ4ó ð4òD"òPðF €Ø
ˆS�j€Øˆ#�g€Øˆ#�g€à—’€ð>˜3ð > 3ô >ð	˜ð 	 ô 	÷%ñ %ô@.ò`ò$òOò+ôò!ò8òò8*òð "×0Ò0°Ó@×IÀEÈeÑSÐ òHò7ñ *Ó+÷ IØŸ™¨Ñ/÷Ià%×4Ò4Ð5GÓHÔHð ð '×.Ñ.°dÐ:Ð Ø%×BÐ.BÔ*B€à×)Ò)¨/Ø*DóFÐ òòð  ŸJšJ€Ô ð Ð ò#ð< ×Ññ#ó ð#ð< ×Ññó ðò<5ò;ôˆfô ðD €ò]÷*OBñ OBòd4ð 79õ ð @BØ ô89ôv.÷*]ñ ]ò@3ðD ×Ññó ðò
,ð 37õ Hò6;ôð, +-ô ðD Ð ò+ò	ð ×Ññ;ó ð;÷"$0ñ $0òN;ò#÷ñ ñ ‹L€	÷	ñ 	ñ ‹;€à
×Ò÷ð ó ðñ ‹*€à
×Ò÷ð ó ðñ ‹;€ò-ð �MŠM×Ò€	Ø�HÓÐ Ðò4÷D)ñ )ðX ,0õ -9ò^Pò2Bòò.ð ×Ññ.ó ð.ô&ð Sð °3ð ¸6ô ð$¨ð $°4ô $ò*Dð  ‡‚ñLó ðLð. ×Ññ$ó ð$ñR �3Ð*Ó+€ò"0ðJ'"°$ö '"ðT*Ø#(°C¸tö*÷D%ñ %ðP ×Ññ,ó ð,ò6ò'ñ �2�wÓ×A B§H£H£J×$6Ò$6¸'Ñ$A€Ø—“ Ð*<Ó=€á˜˜\Ó*€òñ  $-à
àð	.ó $Ð  òò&ò*ðZ ×Ññ
ó ð
òòð˜˜S #˜X™ô ò8÷ñ ó"øðED ó Úðús   Ì^' Þ'^1Þ0^1