
    /hh"]                     p   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Jr  S SKJr  S SKJrJrJr  S SKJr  S SKJr   " S S\R.                  5      r " S	 S
\R.                  5      r " S S\R.                  5      r " S S\R.                  5      r " S S\R8                  5      r " S S\R.                  5      r " S S\R.                  5      r\R@                  " \
SL S5       " S S\R.                  5      5       r!\"S:X  a  \RF                  " 5         gg! \ a    Sr
 GNf = f)    N)Mapping)support)import_helperthreading_helperPy_GIL_DISABLED)assert_python_ok)mapping_testsc                   |    \ rS rSrSrSS jrS rS rS rS r	S r
S	 rS
 rS rS r\R                   S 5       rSrg)	ClearTest   z
Tests for frame.clear().
c                     SS-    g N   r    )selfxkwargss      8/opt/python-3.13.8/usr/lib/python3.13/test/test_frame.pyinnerClearTest.inner   s	    	!    c                 `     U R                   " S0 UD6  W$ ! [         a  nUn S nAU$ S nAff = f)Nr   )r   ZeroDivisionError)r   r   eexcs       r   outerClearTest.outer   s9    	JJ   
 ! 	C
	s    
-(-c                 b    Ub,  UR                   R                  5         UR                  nUb  M+  gg)z"
Clear all frames in a traceback.
N)tb_framecleartb_next)r   tbs     r   clear_traceback_frames ClearTest.clear_traceback_frames&   s)     nKKB nr   c                 X    " S S5      nU" 5       n[         R                  " U5      nU R                  US9nA[        R                  " 5         U R                  S U" 5       5        U R                  UR                  5        [        R                  " 5         U R                  S U" 5       5        g )Nc                       \ rS rSrSrg)&ClearTest.test_clear_locals.<locals>.C/   r   N__name__
__module____qualname____firstlineno____static_attributes__r   r   r   Cr'   /       r   r/   c)	weakrefrefr   r   
gc_collectassertIsNotr#   __traceback__assertIsr   r/   r2   wrr   s        r   test_clear_localsClearTest.test_clear_locals.   s    	 	C[[^jj1jort$##C$5$56dBD!r   c                 t  ^^  " S S5      mS mUU4S jn U" 5         g ! [          a  n[        R                  " 5         U R                  T" 5       5        UR                  R
                  R                  R                  5         [        R                  " 5         U R                  T" 5       5         S nAg S nAff = f)Nc                       \ rS rSrSrg)<ClearTest.test_clear_locals_after_f_locals_access.<locals>.C?   r   Nr)   r   r   r   r/   r?   ?   r0   r   r/   c                  J   > T" 5       n [         R                  " U 5      mSS-    g r   )r3   r4   )r2   r/   r:   s    r   r   @ClearTest.test_clear_locals_after_f_locals_access.<locals>.innerC   s    AQBaCr   )	r   r   r5   assertIsNotNoner7   r!   r   r    assertIsNone)r   r   r   r/   r:   s      @@r   'test_clear_locals_after_f_locals_access1ClearTest.test_clear_locals_after_f_locals_access=   s    	 	 		$G  	$   &%%..446 bd##	$s    
B7BB22B7c                 r    " S S5      nU" 5       nU R                  US9nAUR                  R                  nUR                  5         U R	                  UR
                  S 5        U R	                  UR                  S 5        U R	                  UR                  S 5        U R	                  UR                  S 5        g )Nc                       \ rS rSrSrg)7ClearTest.test_clear_does_not_clear_specials.<locals>.CS   r   Nr)   r   r   r   r/   rI   S   r0   r   r/   r1   )	r   r7   r   r    r6   f_codef_locals
f_builtins	f_globals)r   r/   r2   r   fs        r   "test_clear_does_not_clear_specials,ClearTest.test_clear_does_not_clear_specialsR   s    	 	Cjj1jo&&		4(T*t,d+r   c                   ^ ^ SmUU 4S jnU" 5       n[        U5        T R                  T5        T R                  [        S5         UR                  R                  5         S S S 5        T R                  T5        g ! , (       d  f       N = f)NFc               3   J   >#     S v   TR                  5         Sm g ! Sm f = f7f)NT)r   )endlyr   s   r   g)ClearTest.test_clear_generator.<locals>.ga   s!     

s   # # #suspended frame)nextassertFalseassertRaisesRegexRuntimeErrorgi_framer    )r   rU   genrT   s   `  @r   test_clear_generatorClearTest.test_clear_generator_   sl    	 cS	 ##L2DELL  F FEs   A::
Bc                 z    SS-    U R                  [        5         WR                  5         S S S 5        U R                  [        5         WR                  R                  5         S S S 5        g ! [          a   nUR                  R                  n S nANS nAff = f! , (       d  f       Nt= f! , (       d  f       g = fr   r   r7   r   assertRaisesr[   r    f_back)r   r   rO   s      r   test_clear_executingClearTest.test_clear_executingq   s    	)aC |,GGI -|,HHNN -,	 ! 	)((A	),,,,s.   A. B
B,.
B8BB
B),
B:c                   ^ ^ SmUU 4S jnU" 5       n[        U5      nT R                  T5        T R                  [        S5         UR	                  5         S S S 5        T R                  T5        g ! , (       d  f       N = f)NFc               3     >#     SS-    Smg ! [          a  n U R                  R                  nTR                  [        5         UR                  5         S S S 5        O! , (       d  f       O= fTR                  [        5         UR                  R                  5         S S S 5        O! , (       d  f       O= fUv    S n A NS n A ff = f! Smf = f7f)Nr   r   Tra   )r   rO   rT   r   s     r   rU   3ClearTest.test_clear_executing_generator.<locals>.g   s     
!  % OO,,&&|4GGI 544&&|4HHNN$ 544 sf   C C
C+C A	C 
A*	&C B&	C &
B4	0C ;C  CC CCrW   )rX   rY   rZ   r[   r    )r   rU   r]   rO   rT   s   `   @r   test_clear_executing_generator(ClearTest.test_clear_executing_generator|   se    	 cI##L2CDGGI E EDs   A00
A>c                    ^^ U4S jmU4S jn/ SQn/ mU" S5        U R                  TU5        / mU" S5        U R                  TU5        g )Nc                     > [         R                  " S5      n TR                  U R                  U R                  R
                  -
  5        g Nr   )sys	_getframeappendf_linenorK   co_firstlineno)rO   liness    r   record_line7ClearTest.test_lineno_with_tracing.<locals>.record_line   s0    a ALLAHH$;$;;<r   c                 t   > T" 5         U (       a  S[         R                  " S5      l        T" 5         T" 5         g )NTr   )rn   ro   f_trace)tracert   s    r   test0ClearTest.test_lineno_with_tracing.<locals>.test   s&    M+/a (MMr   )r         FTassertEqual)r   ry   expected_linesrs   rt   s      @@r   test_lineno_with_tracing"ClearTest.test_lineno_with_tracing   sL    	=	 #U/T
/r   c                 b   [         R                  " 5           " S S5      nU" 5       n[        R                  " U5      nU R	                  US9nAU R                  S U" 5       5        U R                  UR                  5        U R                  S U" 5       5        S S S 5        g ! , (       d  f       g = f)Nc                       \ rS rSrSrg))ClearTest.test_clear_refcycles.<locals>.C   r   Nr)   r   r   r   r/   r      s    r   r/   r1   )	r   
disable_gcr3   r4   r   r6   r#   r7   r8   r9   s        r   test_clear_refcyclesClearTest.test_clear_refcycles   s     ! AQB**q*/CT24(''(9(9:MM$% "!!s   BB  
B.r   N)r|   )r*   r+   r,   r-   __doc__r   r   r#   r;   rE   rP   r^   rd   ri   r   r   cpython_onlyr   r.   r   r   r   r   r      sS    "$*, $	 00( & &r   r   c                   ,    \ rS rSrS rS rS rS rSrg)FrameAttrsTest   c                     S n U" 5         W$ ! [          aP  nUR                  n/ nU(       a0  UR                  UR                  5        UR                  nU(       a  M0   S nAU$ S nAff = f)Nc                  &   ^ SmSn U4S jnU" 5       $ )Nr|      c                     > TS-   n SS-    Sng N   r   r   	   r   ztr   s     r   r   8FrameAttrsTest.make_frames.<locals>.outer.<locals>.inner       E!r   r   yr   r   s     @r   r   )FrameAttrsTest.make_frames.<locals>.outer       AA 7Nr   )r   r7   rp   r   r!   )r   r   r   r"   framess        r   make_framesFrameAttrsTest.make_frames   sc    		 G  ! 	 BFbkk*ZZ " 	 s    
A(AA##A(c                     U R                  5       u  pnUR                  5         UR                  5         U R                  UR                  0 5        U R                  UR                  0 5        g N)r   r    r~   rL   r   rO   r   r   s       r   r;    FrameAttrsTest.test_clear_locals   sN    **,%,,r   c                 J   U R                  5       u  pnU R                  UR                  0 5        U R                  UR                  0 5        UR                  5         UR                  5         U R	                  UR                  0 5        U R	                  UR                  0 5        g r   )r   assertNotEqualrL   r    r~   r   s       r   test_locals_clear_locals'FrameAttrsTest.test_locals_clear_locals   sv    **,%ENNB/ENNB/,,r   c                     U R                  5       u  n  nU R                  [        5         U?S S S 5        g ! , (       d  f       g = fr   )r   rb   AttributeErrorrq   )r   rO   _s      r   test_f_lineno_del_segfault)FrameAttrsTest.test_f_lineno_del_segfault   s5    ""$1a~.
 /..s	   6
Ar   N)	r*   r+   r,   r-   r   r;   r   r   r.   r   r   r   r   r      s    &--r   r   c                       \ rS rSrSrS rSrg)ReprTest   z
Tests for repr(frame).
c                 <   S nUR                   R                  n U" 5         U R                  S5        Wu  pgn[        R                  " [        [        5      5      n	U R                  [        U5      SXS-   4-  5        U R                  [        U5      SXS-   4-  5        U R                  [        U5      SXS-   4-  5        g ! [         aO  nUR                  n/ nU(       a0  UR                  UR                  5        UR                  nU(       a  M0   S nANS nAff = f)	Nc                  &   ^ SmSn U4S jnU" 5       $ )Nr|   r   c                     > TS-   n SS-    Sng r   r   r   s     r   r   0ReprTest.test_repr.<locals>.outer.<locals>.inner   r   r   r   r   s     @r   r   !ReprTest.test_repr.<locals>.outer   r   r   zshould have raisedz=^<frame at 0x[0-9a-fA-F]+, file %s, line %d, code test_repr>$r   z9^<frame at 0x[0-9a-fA-F]+, file %s, line %d, code outer>$   z9^<frame at 0x[0-9a-fA-F]+, file %s, line %d, code inner>$r|   )__code__rr   failr   r7   rp   r   r!   reescaperepr__file__assertRegex)
r   r   offsetr   r"   r   f_thisf_outerf_inner	file_reprs
             r   	test_reprReprTest.test_repr   s   	 ..		,G II*+#) IId8n-	fY%{34	5 	gU%z23	4 	gU%z23	4# ! 	 BFbkk*ZZ "	 s   C 
DADDr   N)r*   r+   r,   r-   r   r   r.   r   r   r   r   r      s     4r   r   c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS r\R"                  S 5       rS rS rS rS rS rS rS rSrg)TestFrameLocalsi  c                    ^   " S S5      nT R                  UR                  S5        T R                  UR                  S5        U 4S jnU" 5         g )Nc                       \ rS rSrSrS\R                  " 5       R                  S'   S\R                  " 5       R                  S'   Srg)%TestFrameLocals.test_scope.<locals>.Ai  r   r   r   r   r   N)	r*   r+   r,   r-   r   rn   ro   rL   r.   r   r   r   Ar     s3    A,-CMMO$$S),-CMMO$$S)r   r   r   c                     > Sn S[         R                  " 5       R                  S'   S[         R                  " 5       R                  S'   TR                  U S5        TR                  [	        5       S   S5        g )Nr   r   r   r   )rn   ro   rL   r~   locals)r   r   s    r   rO   %TestFrameLocals.test_scope.<locals>.f  sZ    A,-CMMO$$S),-CMMO$$S)Q"VXc]A.r   )r~   r   r   )r   r   rO   s   `  r   
test_scopeTestFrameLocals.test_scope  sC    	. 	.
 	a a 	/ 	
r   c                 x   ^ ^^ SmSmU UU4S jnU" 5         T R                  TS5        T R                  TS5        g )Nr   r   c                     > TT-   n [         R                  " 5       R                  nTR                  US   S5        TR                  US   S5        SUS'   SUS'   g )Nr   r   r   r      rn   ro   rL   r~   )r   dr   r   r   s     r   rO   'TestFrameLocals.test_closure.<locals>.f!  sW    AA((AQsVQ'QsVQ'AcFAcFr   r   r}   )r   rO   r   r   s   ` @@r   test_closureTestFrameLocals.test_closure  s9    	 	
AAr   c                    ^ U4S j  SmS Vs/ s H  n[        5       PM     nnU R                  US   S   S5        g s  snf )Nc                     > T $ r   r   )ks   r   <lambda>HTestFrameLocals.test_closure_with_inline_comprehension.<locals>.<lambda>.  s    r   r   r   r   r   )r   r~   )r   r   lsts    ` r   &test_closure_with_inline_comprehension6TestFrameLocals.test_closure_with_inline_comprehension-  s>    !$%Avx%Qa( &s   =c           	         SnSn[         R                  " 5       R                  nU R                  [	        U5      S5        U R                  US   U5        U R                  [        UR                  5       5      [        / SQ5      5        U R                  [	        UR                  5       5      S5        U R                  SUR                  5       5        U R                  [	        UR                  5       5      S5        U R                  SUR                  5       5        U R                  UR                  S5      S5        UR                  SS5        U R                  US   S5        U R                  UR                  S5      S5        U R                  UR                  SS 5      S 5        U R                  UR                  5       S5        U R                  [        U Vs/ s H  oDPM     sn5      [        / SQ5      5        U R                  SU5        U R                  UR!                  S5      5        U R                  [#        U5      [%        [#        UR                  5       5      5      5        UR'                  S	SS
.5        U R                  US   S	5        U R                  US   S5        U R)                  [*        5         UR'                  SS/5        S S S 5        U R                  UR-                  SS5      S	5        U R                  UR-                  SS5      S5        U R                  US   S5        U R)                  [.        5         US     S S S 5        g s  snf ! , (       d  f       N= f! , (       d  f       g = f)Nr   r   r{   r   )r   r   r   r   )r   r   r   	non_existr   )r   r   r   r|   new)rn   ro   rL   r~   lenr8   setkeysvaluesassertInitems__getitem____setitem__get__len__
assertTrue__contains__reversedlistupdaterb   	TypeError
setdefaultKeyError)r   r   r   r   keys        r   test_as_dictTestFrameLocals.test_as_dict3  s   MMO$$Q#afa QVVX,C(DEQXXZ!,a$QWWY+h	*s+Q/	c13#sQ'aeeK.5a(Q/QccQ/0#6M2NOc1s+,!d8AFFH+=&>?	qq!"3#3#y)HHaV * 	c1-q1eQ/351%x(kN )(# 0 *) )(s   M;MM*
M'*
M8c                    SnSn[         R                  " 5       R                  nU R                  SUSS0-  5        USS0-  nU R	                  US   S5        USS0-  nU R	                  US   S5        U R                  [        5         US-  nS S S 5        U R                  [        5         US/-  nS S S 5        g ! , (       d  f       N3= f! , (       d  f       g = f)Nr   r   r   r   r   )rn   ro   rL   r   r~   rb   r   )r   r   r   r   r   s        r   test_as_numberTestFrameLocals.test_as_numberY  s    MMO$$c1Qx<(	c1X3#	c1X3#y)FA *y)QCA *) *)))s   B;+C;
C	
Cc                 v    [         R                  " 5       R                  nSUS'   U R                  US   S5        g Nr   r   r   r   r   s     r   test_non_string_key#TestFrameLocals.test_non_string_keyg  s0    MMO$$!1q!r   c                     ^  U 4S jnU" 5         g )Nc                     > S V s/ s H"  n [         R                  " 5       R                  PM$     sn S   nSUS'   SUS'   TR                  W S5        TR                  WS5        Sn Sng s  sn f )Nr   r   r   br   r2   r   )r  rL   r2   r   s      r   rO   1TestFrameLocals.test_write_with_hidden.<locals>.fm  si    :=>#Q00#>qAHHSMHSMQ"Q"AA ?s   )A(r   r   rO   s   ` r   test_write_with_hidden&TestFrameLocals.test_write_with_hiddenl  s    	 	
r   c                     [        5       nSR                  / SQ5      n[        R                  " 5       R                  nUS   US'   U R                  US5        g )N.)ar  r2   r   oza.b.c)objectjoinrn   ro   rL   r~   )r   r  r   rL   s       r   test_local_objects"TestFrameLocals.test_local_objectsw  sE    HHH_%==?++ G$r   c                     Sn[         R                  " 5       R                  nUR                  5       nU R	                  U[
        5        U R                  US   S5        SUS'   U R                  US5        g )Nr   r   r   )rn   ro   rL   copyassertIsInstancedictr~   )r   r   r   d_copys       r   	test_copyTestFrameLocals.test_copy~  s`    MMO$$fd+a(sAr   c                     S nU" 5         g )Nc                      [         R                  " 5       R                  n U R                  U 5        U R                  U 5        U R                  U 5        g r   )rn   ro   rL   r   )rL   s    r   rO   0TestFrameLocals.test_update_with_self.<locals>.f  s7    }}//HOOH%OOH%OOH%r   r   r  s     r   test_update_with_self%TestFrameLocals.test_update_with_self  s    	&
 	
r   c                     Sn[         R                  " 5       nU R                  [        UR                  5      [        [        UR                  5      5      5        g rm   )rn   ro   r~   r   rL   r  )r   r   frames      r   r   TestFrameLocals.test_repr  s9    enn-tD4H/IJr   c                    Sn[         R                  " 5       R                  nU R                  [        S5         US	 S S S 5        U R                  [        5         UR                  S5        S S S 5        U R                  [        S5         US	 S S S 5        U R                  [        5         UR                  5         S S S 5        U R                  [        5         UR                  S5        S S S 5        U R                  [        5         UR                  SS 5        S S S 5        SUS'   SUS'   U R                  [        5         UR                  S5        S S S 5        US	 U R                  UR                  S5      S5        U R                  SU5        U R                  SU5        U R                  UR                  SS5      S5        g ! , (       d  f       GN= f! , (       d  f       GNt= f! , (       d  f       GNd= f! , (       d  f       GNH= f! , (       d  f       GN+= f! , (       d  f       GN= f! , (       d  f       N= f)Nr   r   zlocal variablesr   mnr   )rn   ro   rL   rZ   r   rb   pop
ValueErrorr   r    r~   assertNotInr   r   r   s      r   test_deleteTestFrameLocals.test_delete  s   MMO$$ ##Hk:+ ; x(EE+ ) ##J0AB# C ~.GGI / z*EE#J + z*EE#t + ##x(EE+ ) cFsQ'a a sA*? ;: )( CB /. +* +* )(sS   GG	G**G<HH H2
G
G'*
G9<
H
H 
H/2
I c                     [         R                  " 5       R                  n[        R                  " X[        R
                  " S5      5        g )NP)rn   ro   rL   r   check_sizeofcalcobjsize)r   proxys     r   test_sizeofTestFrameLocals.test_sizeof  s.    ((T'*=*=c*BCr   c                 Z   Sn[         R                  " 5       R                  nU R                  [        5         [
        R
                  " U5        S S S 5        U R                  [        5         [
        R                  " U5        S S S 5        g ! , (       d  f       NC= f! , (       d  f       g = frm   )rn   ro   rL   rb   r   r  deepcopyr%  s      r   test_unsupportTestFrameLocals.test_unsupport  sl    MMO$$y)IIaL * y)MM! *) *) *)s   B+B
B
B*c                     Sn[         R                  " 5       R                  nU R                  U[        5        U a'   S:  a!  S =b  u  n    U R                  US5        SnO       SnU R                  US5        g )Nr   mappingother)r   )rn   ro   rL   r  r   r~   )r   r   r   valuekinds        r   test_is_mappingTestFrameLocals.test_is_mapping  sf    MMO$$a)  *   y)r   c                 T     " S S[         5      n " S S5      nU" S5      U" 5       S4$ )Nc                       \ rS rSrSrg)6TestFrameLocals._x_stringlikes.<locals>.StringSubclassi  r   Nr)   r   r   r   StringSubclassr<    r0   r   r=  c                        \ rS rSrS rS rSrg)1TestFrameLocals._x_stringlikes.<locals>.ImpostorXi  c                     [        S5      $ Nr   )hashr   s    r   __hash__:TestFrameLocals._x_stringlikes.<locals>.ImpostorX.__hash__  s    Cy r   c                     US:H  $ rA  r   )r   r5  s     r   __eq__8TestFrameLocals._x_stringlikes.<locals>.ImpostorX.__eq__  s    |#r   r   N)r*   r+   r,   r-   rD  rG  r.   r   r   r   	ImpostorXr?    s    !$r   rI  r   )str)r   r=  rI  s      r   _x_stringlikesTestFrameLocals._x_stringlikes  s.    	S 		$ 	$ c"IK44r   c                    S nU R                  5        H  nU R                  [        U5      R                  S9   U" U5      u  p4n/ SQnSSUS.nU R	                  UR                  5       U5        U R	                  XW5        U R	                  X65        U R	                  XG5        S S S 5        M     g ! , (       d  f       M  = f)Nc                     Sn[         R                  " 5       R                  nSX '   [        UR	                  5       5      [        U5      U4$ Nr   r   )rn   ro   rL   r   r   r  objr   r,  s      r   rO   ?TestFrameLocals.test_proxy_key_stringlikes_overwrite.<locals>.f  sA    AMMO,,EEJUZZ\"U r   clsrP  r   r   )rK  subTesttyper*   r~   r   )r   rO   rQ  keys_snapshotproxy_snapshotr,  expected_keysexpected_dicts           r   $test_proxy_key_stringlikes_overwrite4TestFrameLocals.test_proxy_key_stringlikes_overwrite  s    	 &&(C$s)"4"4578v4u 5(+!e D  >  6  ?  ? 65 )55s   A)B//
B>	c                    ^  U 4S jnT R                  5        H6  nT R                  [        U5      R                  S9   U" U5        S S S 5        M8     g ! , (       d  f       MJ  = f)Nc                 t   > [         R                  " 5       R                  nSX'   TR                  WS5        Sng r   r   )rQ  r,  r   r   s      r   rO   ATestFrameLocals.test_proxy_key_stringlikes_ftrst_write.<locals>.f  s0    MMO,,EEJQ"Ar   rS  )rK  rU  rV  r*   )r   rO   rQ  s   `  r   &test_proxy_key_stringlikes_ftrst_write6TestFrameLocals.test_proxy_key_stringlikes_ftrst_write  sK    	 &&(C$s)"4"45# 65 )55s   	A
A"	c                     " S S[         5      n " S S5      n[        R                  " 5       R                  nU" S5      U" 5       4 Hr  nU R	                  [        U5      R                  S9   U R                  [        5         X4     S S S 5        U R                  [        5         SX4'   S S S 5        S S S 5        Mt     g ! , (       d  f       N== f! , (       d  f       N,= f! , (       d  f       M  = f)Nc                       \ rS rSrSrSrg)BTestFrameLocals.test_proxy_key_unhashables.<locals>.StringSubclassi  Nr   r*   r+   r,   r-   rD  r.   r   r   r   r=  rd        Hr   r=  c                       \ rS rSrSrSrg)BTestFrameLocals.test_proxy_key_unhashables.<locals>.ObjectSubclassi  Nr   re  r   r   r   ObjectSubclassrh    rf  r   ri  r   rS  r   )	rJ  rn   ro   rL   rU  rV  r*   rb   r   )r   r=  ri  r,  rQ  s        r   test_proxy_key_unhashables*TestFrameLocals.test_proxy_key_unhashables  s    	S 		 	 ((!#&(88C$s)"4"45&&y1J 2&&y1!"EJ 2 65 91111 65s<   -C!B?C!%C*C!?
C	C!
CC!!
C0	c                    [        [        S5       Vs/ s H"  n[        R                  " 5       R                  PM$     snS   5      nU R                  UR                  S5        S nU" U" 5       5      nU R                  USSS.5        U R                  [        5         U" 5         S S S 5        U R                  [        5         U" S5        S S S 5        U R                  [        5         U" [        R                  " 5       S9  S S S 5        g s  snf ! , (       d  f       Nq= f! , (       d  f       N\= f! , (       d  f       g = f)	Nr   r   FrameLocalsProxyc                  4    Sn Sn[         R                  " 5       $ rO  rn   ro   r   r   s     r   
make_frame4TestFrameLocals.test_constructor.<locals>.make_frame  s    AA==?"r   r   rp  {   )r  )	rV  rangern   ro   rL   r~   r*   rb   r   )r   r   rm  rq  r,  s        r   test_constructor TestFrameLocals.test_constructor  s    */(!4*2Q "%!9!9*2!445!7 8)224FG	#
 !.aa 01 y) *y)S! *y)3==?3 *)#!4 *)))))s)   )D
D	D 'D1
D 
D.1
D?r   N)r*   r+   r,   r-   r   r   r   r   r   r   r  r  r  r  r   r&  r   r   r-  r1  r8  rK  r[  r`  rj  ru  r.   r   r   r   r   r     s    " )$L"
	%K$+L D D
*5@,	# 4r   r   c                      \ rS rSrSrS r\r\R                  " SS5      S 5       r	\R                  " SS5      S 5       r
\R                  " SS	5      S
 5       r\R                  " SS5      S 5       r\R                  " SS5      S 5       r\R                  " SS5      S 5       rS r\R                  " SS5      S 5       rS r\R                  " SS5      S 5       rSrg)FrameLocalsProxyMappingTestsi)  zCTest that FrameLocalsProxy behaves like a Mapping (with exceptions)c                      S nU" 5       $ )Nc                  @    [         R                  " 5       R                  $ r   )rn   ro   rL   r   r   r   _f+FrameLocalsProxyMappingTests._f.<locals>._f-  s    ==?+++r   r   )argsr   r{  s      r   r{  FrameLocalsProxyMappingTests._f,  s    	,tr   Tz:Locals proxies for different frames never compare as equalc                     g r   r   rC  s    r   ru  -FrameLocalsProxyMappingTests.test_constructor2      r   z&Unlike a mapping: del proxy[key] failsc                     g r   r   rC  s    r   
test_write'FrameLocalsProxyMappingTests.test_write6  r  r   z"Unlike a mapping: no proxy.popitemc                     g r   r   rC  s    r   test_popitem)FrameLocalsProxyMappingTests.test_popitem:  r  r   zUnlike a mapping: no proxy.popc                     g r   r   rC  s    r   test_pop%FrameLocalsProxyMappingTests.test_pop>  r  r   z Unlike a mapping: no proxy.clearc                     g r   r   rC  s    r   
test_clear'FrameLocalsProxyMappingTests.test_clearB  r  r   z#Unlike a mapping: no proxy.fromkeysc                     g r   r   rC  s    r   test_fromkeys*FrameLocalsProxyMappingTests.test_fromkeysF  r  r   c                 &   [         R                  R                  U 5        U R                  SSS.5      nU R	                  US   S5        U R	                  US   S5        SUS'   SUS'   U R	                  US   S5        U R	                  US   S5        g )	Nr   r   )r
  r  r
  r  r   r2   r{   )r	   BasicTestMappingProtocoltest_getitem_full_mappingr~   r   s     r   r  )FrameLocalsProxyMappingTests.test_getitemK  s    ..;;DAQQ/03#3###3#3#r   z!Unlike a mapping: no proxy.updatec                     g r   r   rC  s    r   test_update(FrameLocalsProxyMappingTests.test_updateU  r  r   c                 `   U R                  SSSS.5      nU R                  UR                  5       SSSS.5        U R                  5       nU R                  UR                  5       U5        U R	                  [
        UR                  S 5        U R                  UR                  5       [        5        g )Nr   r   r   )r   r   r   )r  r~   r  _empty_mappingrb   r   r  r  r   s     r   r  &FrameLocalsProxyMappingTests.test_copyZ  s    !qA/a1?3!1%)QVVT2affh-r   c                     g r   r   rC  s    r   test_eq$FrameLocalsProxyMappingTests.test_eqc  r  r   r   N)r*   r+   r,   r-   r   r{  	type2testunittestskipIfru  r  r  r  r  r  r  r  r  r  r.   r   r   r   rx  rx  )  s   M I__TWX Y __TCD E __T?@ A __T;< = __T=> ? __T@A B$ __T>? @. __TWX Yr   rx  c                       \ rS rSrS rSrg)TestFrameCApiih  c                    Sn[         R                  " S5      nUR                  R                  nUR                  Ul        U" 5       nU R                  [        U5      [        5        U R                  US   S5        SUS'   U R                  US5        UR                  R                  nUR                  Ul        U" 5       nU R                  [        U5      [        5        U R                  U[        5       5        UR                  R                  nUR                  Ul        U" 5       nU R                  U[        5        UR                  R                  n	UR                  /U	l        UR                  U	l        ["        R$                  " 5       n
U	" U
5      nU R                  US   S5        SUS'   U R                  US5        g )Nr   ctypesr   r   )r   import_module	pythonapiPyEval_GetFrameLocals	py_objectrestyper   rV  r  r~   PyEval_GetFrameGlobalsr8   globalsPyEval_GetFrameBuiltins__builtins__PyFrame_GetLocalsargtypesrn   ro   )r   r   r  r  frame_localsr  frame_globalsr  frame_builtinsr  r  rL   s               r   
test_basicTestFrameCApi.test_basici  sz   ,,X6 & 0 0 F F(.(8(8%,.\*D1c*A.SA!'!1!1!H!H)/)9)9&.0]+T2mWY/"("2"2"J"J*0*:*:'026",,>>&,&6&6%7"$*$4$4!$U+q)Ar   r   N)r*   r+   r,   r-   r  r.   r   r   r   r  r  h  s    r   r  c                   l    \ rS rSrS r\R                  \R                  " 5       S 5       5       r	S r
Srg)TestIncompleteFrameAreInvisiblei  c                 Z    [         R                  " S[        < S35      n[        SU5        g )Nz
            import gc

            gc.set_threshold(1,1,1)
            class GCHello:
                def __del__(self):
                    print("Destroyed from gc")

            def gen():
                yield

            fd = open(zy)
            l = [fd, GCHello()]
            l.append(l)
            del fd
            del l
            gen()
        z-c)textwrapdedentr   r   )r   codes     r   test_issue95818/TestIncompleteFrameAreInvisible.test_issue95818  s2     $  l #	  $ 	t$r   c                 X  ^^  " U4S jS5      m " U4S jS[         R                  5      nS mU" 5       nUR                  5         UR                  5         U R	                  T5        TbB  U R                  TR                  UR                  R                  5        TR                  mTb  MA  g g )Nc                   "   > \ rS rSrU 4S jrSrg)TTestIncompleteFrameAreInvisible.test_sneaky_frame_object_teardown.<locals>.SneakyDeli  c                 0   > [         R                  " 5       mg)z
Stash a reference to the entire stack for walking later.

It may look crazy, but you'd be surprised how common this is
when using a test runner (like pytest). The typical recipe is:
ResourceWarning + -Werror + a custom sys.unraisablehook.
Nro  )r   sneaky_frame_objects    r   __del__\TestIncompleteFrameAreInvisible.test_sneaky_frame_object_teardown.<locals>.SneakyDel.__del__  s     '*mmo#r   r   N)r*   r+   r,   r-   r  r.   )r  s   r   	SneakyDelr    s    	6 	6r   r  c                   &   > \ rS rSrSrU 4S jrSrg)WTestIncompleteFrameAreInvisible.test_sneaky_frame_object_teardown.<locals>.SneakyThreadi  z
A separate thread isn't needed to make this code crash, but it does
make crashes more consistent, since it means sneaky_frame_object is
backed by freed memory after the thread completes!
c                    > T" 5       ng)z.Run SneakyDel.__del__ as this frame is popped.Nr   )r   r4   r  s     r   run[TestIncompleteFrameAreInvisible.test_sneaky_frame_object_teardown.<locals>.SneakyThread.run  s
    kr   r   N)r*   r+   r,   r-   r   r  r.   )r  s   r   SneakyThreadr    s    " "r   r  )
	threadingThreadstartr  rC   r6   rK   r  r   rc   )r   r  r   r  r  s      @@r   !test_sneaky_frame_object_teardownATestIncompleteFrameAreInvisible.test_sneaky_frame_object_teardown  s    
	6 
	6		"9++ 		" #N			 	01!-#**L,<,<,E,E #6"<"<	 "-r   c                 0  ^  " S S5      mU4S jn[         R                  " 5        n[        R                  " U5      nU R	                  UR
                  R                  [        5        S S S 5        U R                  W" 5       5        g ! , (       d  f       N%= f)Nc                       \ rS rSrSrSrg)ZTestIncompleteFrameAreInvisible.test_entry_frames_are_invisible_during_teardown.<locals>.Ci  zA weakref'able class.r   N)r*   r+   r,   r-   r   r.   r   r   r   r/   r    s    'r   r/   c                  H   > T" 5       n [         R                  " U [        5      $ )z>Try to find globals and locals as this frame is being cleared.)r3   r4   exec)r4   r/   s    r   rO   ZTestIncompleteFrameAreInvisible.test_entry_frames_are_invisible_during_teardown.<locals>.f  s    #C
 ;;sD))r   )	r   catch_unraisable_exceptionoperatorcallr8   
unraisableexc_typer   rD   )r   rO   catcherweakr/   s       @r   /test_entry_frames_are_invisible_during_teardownOTestIncompleteFrameAreInvisible.test_entry_frames_are_invisible_during_teardown  sj    	( 	(	* //1W==#DMM',,55yA	 2
 	$&! 21s   AB
Br   N)r*   r+   r,   r-   r  r   r   r   requires_working_threadingr  r  r.   r   r   r   r  r    s8    %, 002%= 3 %=N"r   r  zneed _testcapic                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestCAPIi  c                 ,    [         R                  " 5       $ r   ro  rC  s    r   getframeTestCAPI.getframe  s    }}r   c                    U R                  5       nU R                  UR                  [        R                  " U5      5        U R                  UR                  [        R                  " U5      5        U R                  UR                  [        R                  " U5      5        U R                  UR                  [        R                  " U5      5        g r   )r  r~   rL   	_testcapiframe_getlocalsr8   rN   frame_getglobalsrM   frame_getbuiltinsf_lastiframe_getlasti)r   r  s     r   test_frame_gettersTestCAPI.test_frame_getters  s    )B)B5)IJeooy'A'A%'HIe&&	(C(CE(JK	(@(@(GHr   c                    [         R                  " 5       nSnU R                  [        R                  " US5      S5        U R                  [        R
                  " US5      S5        U R                  [        5         [        R                  " US5        S S S 5        U R                  [        5         [        R
                  " US5        S S S 5        U R                  [        5         [        R                  " US5        S S S 5        U R                  [        5         [        R                  " US5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nf= f! , (       d  f       g = f)Nr   r      xr      yrs  )	rn   ro   r~   r  frame_getvarframe_getvarstringrb   	NameErrorr   )r   current_framer   s      r   test_getvarTestCAPI.test_getvar  s    //sCQG55mTJANy)""=#6 *y)((= * y)""=$7 *y)""=#6 *) *))) *)))s0   ;D;0E%EE.;
E	
E
E+.
E<c              #   :   #    [         R                  " 5       v   g 7fr   ro  rC  s    r   getgenframeTestCAPI.getgenframe  s     mmos   c                     U R                  5       n[        U5      nU R                  U[        R                  " U5      5        g r   )r  rX   r8   r  frame_getgenerator)r   r]   r  s      r   test_frame_get_generator!TestCAPI.test_frame_get_generator  s2     S	c977>?r   c                     S n[         R                  " UR                  [        5       [	        5       5      nU R                  UR                  5        g)zrTest that accessing `f_back` does not cause a segmentation fault on
a frame created with `PyFrame_New` (GH-99110).c                      g r   r   r   r   r   dummy,TestCAPI.test_frame_fback_api.<locals>.dummy  s    r   N)r  	frame_newr   r  r   rD   rc   )r   r  r  s      r   test_frame_fback_apiTestCAPI.test_frame_fback_api  s7    	 ##ENNGIvxH%,,'r   r   N)r*   r+   r,   r-   r  r  r  r  r  r  r.   r   r   r   r  r    s"    I7 @
(r   r  __main__)$r  gcr  r   rn   r  r  typesr  r3   r  ImportErrorcollections.abcr   ry   r   test.supportr   r   r   test.support.script_helperr   r	   TestCaser   r   r   r   TestHashMappingProtocolrx  r  r  r  r  r*   mainr   r   r   <module>r     s,    	  	 
      $  I I 7 ]&!! ]&@*X&& *Z%4x   %4N[4h'' [4|<=#H#H <~H%% BS"h&7&7 S"j 
d"$45+(x   +( 6+(Z zMMO   Is   D) )D54D5