
    /hh:                     d   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	   " S S5      r
 " S	 S
\
5      r\ " S S\
5      5       r\ " S S\
5      5       r " S S\5      r " S S\5      r " S S5      r " S S\\R"                  5      r " S S5      r " S S\\5      r " S S\\5      r " S S\\5      r " S S \\R"                  5      r " S! S"5      r " S# S$\\5      r " S% S&\\5      r " S' S(\\5      r " S) S*\\R"                  5      r " S+ S,\5      r\ " S- S.\5      5       r\ " S/ S0\5      5       r\ " S1 S2\\5      5       r \	RB                   " S3 S4\\R"                  5      5       r"\#S5:X  a  \RH                  " 5         gg! \ a    S r GNf = f! \ a    S r GNf = f)6    N)with_tp_delc                 $     " S S[         5      nU$ )Nc                       \ rS rSrS rSrg)with_tp_del.<locals>.C   c                 .    [         R                  " S5      e)Nzrequires _testcapi.with_tp_delunittestSkipTestclsargskwargss      ?/opt/python-3.13.8/usr/lib/python3.13/test/test_finalization.py__new__with_tp_del.<locals>.C.__new__   s    ''(HII     N__name__
__module____qualname____firstlineno__r   __static_attributes__r   r   r   Cr      s    Jr   r   )objectr   r   s     r   r   r      s    	J 	J r   )
without_gcc                      " S S5      nU$ )Nc                       \ rS rSrS rSrg)without_gc.<locals>.C   c                 .    [         R                  " S5      e)Nzrequires _testcapi.without_gcr	   r   s      r   r   without_gc.<locals>.C.__new__   s    ''(GHHr   r   Nr   r   r   r   r   r!      s    Ir   r   r   r   s     r   r   r      s    	I 	I r   )supportc                   |    \ rS rSr/ r/ r/ r/ rSrSr	\
S 5       r\
\R                  S 5       5       rS rS rS rSrg	)
NonGCSimpleBase   Fr   c                 :   U R                   R                  5         U R                  R                  5         [        R                  R                  5         [        R
                  " 5         U R                  R                  5         U R                  R                  5         g N)	survivorsclearerrorsgcgarbagecollect	del_callstp_del_callsr   s    r   _cleanupNonGCSimpleBase._cleanup.   s]    







 r   c              #     #    [         R                  " 5          U R                  R                  5         U R                  R                  5         S[
        l         S v   U R                  (       a  U R                  S   e S[
        l        U R                  5          S S S 5        g ! S[
        l        U R                  5         f = f! , (       d  f       g = f7f)NFr   T)	r%   
disable_gcr1   r,   r2   r'   	_cleaningr-   r4   r3   s    r   testNonGCSimpleBase.test7   s      !MM!""$(-O%::**Q-'  -1) "! -1) "!s5   CA C$B#>C	C#C  C
CCc                     g r*   r   selfs    r   check_sanityNonGCSimpleBase.check_sanityI       r   c                     U R                   (       dE  U R                  R                  [        U 5      5        U R	                  5         U R                  5         g g ! [         a%  nU R                  R                  U5         S nAg S nAff = fr*   )r8   r1   appendidr>   side_effect	Exceptionr-   r=   es     r   __del__NonGCSimpleBase.__del__N   sh    
	">>%%bh/!!#  " "  	"KKq!!	"   AA 
B#BBc                     g r*   r   r<   s    r   rD   NonGCSimpleBase.side_effect[   r@   r   N)r   r   r   r   r+   r1   r2   r-   r8   	__slots__classmethodr4   
contextlibcontextmanagerr9   r>   rH   rD   r   r   r   r   r'   r'      se     IILFII! !    
"r   r'   c                        \ rS rSrS rS rSrg)
SimpleBasea   c                 $    [        U 5      U l        g r*   )rC   id_r<   s    r   __init__SimpleBase.__init__c   s    d8r   c                     g r*   r   r<   s    r   r>   SimpleBase.check_sanityf   r@   r   )rU   N)r   r   r   r   rV   r>   r   r   r   r   rR   rR   a   s    $r   rR   c                       \ rS rSrSrSrg)NonGCj   r   N)r   r   r   r   rM   r   r   r   r   r[   r[   j   s    Ir   r[   c                       \ rS rSrSrS rSrg)NonGCResurrectorn   r   c                 :    U R                   R                  U 5        g r*   r+   rB   r<   s    r   rD   NonGCResurrector.side_effectr        	d#r   N)r   r   r   r   rM   rD   r   r   r   r   r^   r^   n   s    I$r   r^   c                       \ rS rSrSrg)Simplex   r   Nr   r   r   r   r   r   r   r   re   re   x       r   re   c                       \ rS rSrS rSrg)SimpleResurrector|   c                 :    U R                   R                  U 5        g r*   ra   r<   s    r   rD   SimpleResurrector.side_effect~   rc   r   r   Nr   r   r   r   rD   r   r   r   r   rj   rj   |   s    $r   rj   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)TestBase   c                 Z    [         R                  S S  U l        / [         R                  S S & g r*   )r.   r/   old_garbager<   s    r   setUpTestBase.setUp   s    ::a=

1r   c                      U R                  [        R                  / 5        U ?[        R                  " 5         g ! U ?[        R                  " 5         f = fr*   )assertEqualr.   r/   rs   r0   r<   s    r   tearDownTestBase.tearDown   s=    	RZZ, JJL  JJLs	    : Ac                 h    U R                  [        [        R                  5      [        U5      5        g r*   )rw   sortedrR   r1   r=   idss     r   assert_del_callsTestBase.assert_del_calls   s!    
 4 45vc{Cr   c                 h    U R                  [        [        R                  5      [        U5      5        g r*   )rw   r{   rR   r2   r|   s     r   assert_tp_del_callsTestBase.assert_tp_del_calls   s!    
 7 78&+Fr   c                 v    U R                  [        S [        R                   5       5      [        U5      5        g )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr*   rC   .0xs     r   	<genexpr>,TestBase.assert_survivors.<locals>.<genexpr>   s     D/C!1/C   )rw   r{   rR   r+   r|   s     r   assert_survivorsTestBase.assert_survivors   s'    Dz/C/CDDfSkRr   c                 v    U R                  [        S [        R                   5       5      [        U5      5        g )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr*   r   r   s     r   r   *TestBase.assert_garbage.<locals>.<genexpr>   s     :z!1zr   )rw   r{   r.   r/   r|   s     r   assert_garbageTestBase.assert_garbage   s%    :rzz::F3KHr   c                 @    [         R                  R                  5         g r*   )rR   r+   r,   r<   s    r   clear_survivorsTestBase.clear_survivors   s    ""$r   )rs   N)r   r   r   r   rt   rx   r~   r   r   r   r   r   r   r   r   rp   rp      s)    DGSI%r   rp   c                   h    \ rS rSrS rS r\R                  S 5       r\R                  S 5       r	Sr
g)SimpleFinalizationTest   c                    [         R                  5          [        5       n[        U5      /n[        R
                  " U5      nA[        R                  " 5         U R                  U5        U R                  / 5        U R                  U" 5       S 5        [        R                  " 5         U R                  U5        U R                  / 5        S S S 5        g ! , (       d  f       g = fr*   )rR   r9   re   rC   weakrefrefr.   r0   r~   r   assertIsr=   sr}   wrs       r   test_simple"SimpleFinalizationTest.test_simple   s    __Aa5'CQBJJL!!#&!!"%MM"$%JJL!!#&!!"%    B3C
Cc                    [         R                  5          [        5       n[        U5      /n[        R
                  " U5      nA[        R                  " 5         U R                  U5        U R                  U5        U R                  U" 5       S 5        U R                  5         [        R                  " 5         U R                  U5        U R                  / 5        S S S 5        U R                  W" 5       S 5        g ! , (       d  f       N&= fr*   )rR   r9   rj   rC   r   r   r.   r0   r~   r   assertIsNotr   r   r   s       r   test_simple_resurrect,SimpleFinalizationTest.test_simple_resurrect   s    __!#Aa5'CQBJJL!!#&!!#&RT4(  "JJL!!#&!!"%  	bdD! s   CC88
Dc                    [         R                  5          [        5       nU R                  [        R
                  " U5      5        [        U5      /nA[        R                  " 5         U R                  U5        U R                  / 5        [        R                  " 5         U R                  U5        U R                  / 5        S S S 5        g ! , (       d  f       g = fr*   )
rR   r9   r[   assertFalser.   
is_trackedrC   r0   r~   r   r=   r   r}   s      r   test_non_gc"SimpleFinalizationTest.test_non_gc   s    __AR]]1-.a5'CJJL!!#&!!"%JJL!!#&!!"% s   B+C		
Cc                    [         R                  5          [        5       nU R                  [        R
                  " U5      5        [        U5      /nA[        R                  " 5         U R                  U5        U R                  U5        U R                  5         [        R                  " 5         U R                  US-  5        U R                  U5        S S S 5        g ! , (       d  f       g = fN   )rR   r9   r^   r   r.   r   rC   r0   r~   r   r   r   s      r   test_non_gc_resurrect,SimpleFinalizationTest.test_non_gc_resurrect   s    __ "AR]]1-.a5'CJJL!!#&!!#&  "JJL!!#'*!!#& s   B>C
C*r   N)r   r   r   r   r   r   r%   cpython_onlyr   r   r   r   r   r   r   r      s@    
&"  & & ' 'r   r   c                   4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )SelfCycleBase   c                 .   > [         TU ]  5         X l        g r*   )superrV   r   r=   	__class__s    r   rV   SelfCycleBase.__init__   s    r   c                 "   > [         TU ]  5         g r*   )r   r>   r   s    r   r>   SelfCycleBase.check_sanity   s    r   r   )r   r   r   r   rV   r>   r   __classcell__r   s   @r   r   r      s       r   r   c                       \ rS rSrSrg)SimpleSelfCycle   r   Nrg   r   r   r   r   r      rh   r   r   c                       \ rS rSrSrg)SelfCycleResurrector   r   Nrg   r   r   r   r   r      rh   r   r   c                       \ rS rSrS rSrg)SuicidalSelfCycle   c                     S U l         g r*   r   r<   s    r   rD   SuicidalSelfCycle.side_effect   s     r   r   Nrn   r   r   r   r   r      s    r   r   c                   &    \ rS rSrS rS rS rSrg)SelfCycleFinalizationTest   c                    [         R                  5          [        5       n[        U5      /n[        R
                  " U5      nA[        R                  " 5         U R                  U5        U R                  / 5        U R                  U" 5       S 5        [        R                  " 5         U R                  U5        U R                  / 5        S S S 5        g ! , (       d  f       g = fr*   )rR   r9   r   rC   r   r   r.   r0   r~   r   r   r   s       r   r   %SelfCycleFinalizationTest.test_simple  s    __!Aa5'CQBJJL!!#&!!"%MM"$%JJL!!#&!!"% r   c                    [         R                  5          [        5       n[        U5      /n[        R
                  " U5      nA[        R                  " 5         U R                  U5        U R                  U5        U R                  U" 5       S 5        U R                  5         [        R                  " 5         U R                  U5        U R                  / 5        U R                  U" 5       S 5        S S S 5        g ! , (       d  f       g = fr*   )rR   r9   r   rC   r   r   r.   r0   r~   r   r   r   r   s       r   r   /SelfCycleFinalizationTest.test_simple_resurrect  s    __$&Aa5'CQBJJL!!#&!!#&MM"$%   "JJL!!#&!!"%MM"$%! s   CC88
Dc                    [         R                  5          [        5       n[        U5      /n[        R
                  " U5      nA[        R                  " 5         U R                  U5        U R                  / 5        U R                  U" 5       S 5        [        R                  " 5         U R                  U5        U R                  / 5        U R                  U" 5       S 5        S S S 5        g ! , (       d  f       g = fr*   )rR   r9   r   rC   r   r   r.   r0   r~   r   r   r   s       r   test_simple_suicide-SelfCycleFinalizationTest.test_simple_suicide%  s     __!#Aa5'CQBJJL!!#&!!"%MM"$%JJL!!#&!!"%MM"$% s   C
C((
C6r   N)r   r   r   r   r   r   r   r   r   r   r   r   r      s    &&(&r   r   c                   .   ^  \ rS rSrS rU 4S jrSrU =r$ )ChainedBasei7  c                 *    SU l         Xl        Xl        g )NFsuicidedleftright)r=   r   s     r   chainChainedBase.chain9  s    	
r   c                    > [         TU ]  5         U R                  (       a  g U R                  nUR                  (       a   U R                  nUR                  (       a  g g r*   )r   r>   r   r   r   )r=   r   r   r   s      r   r>   ChainedBase.check_sanity>  s?    === 99D}}} JJE~~~r   )r   r   )r   r   r   r   r   r>   r   r   r   s   @r   r   r   7  s    
* *r   r   c                       \ rS rSrSrg)SimpleChainediO  r   Nrg   r   r   r   r   r   O  rh   r   r   c                       \ rS rSrSrg)ChainedResurrectoriR  r   Nrg   r   r   r   r   r   R  rh   r   r   c                       \ rS rSrS rSrg)SuicidalChainediU  c                 .    SU l         S U l        S U l        g )NTr   r<   s    r   rD   SuicidalChained.side_effectW  s     	
r   )r   r   r   Nrn   r   r   r   r   r   U  s    r   r   c                   V    \ 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g)CycleChainFinalizationTesti`  c                     U Vs/ s H	  o"" 5       PM     nn[        [        U5      5       H  nX4   R                  X4S-
     5        M     U$ s  snf )N   )rangelenr   )r=   classesr   nodesis        r   build_chain&CycleChainFinalizationTest.build_chaing  sI    ")*'3'*s5z"AHNN51:& # +s   Ac                 J   [        U5      n[        R                  5          U R                  U5      nU Vs/ s H  n[	        U5      PM     nnU Vs/ s H  n[
        R                  " U5      PM     nnA[        R                  " 5         U R                  U5        U R                  / 5        U R                  U Vs/ s H	  ow" 5       PM     snS /U-  5        [        R                  " 5         U R                  U5        S S S 5        g s  snf s  snf s  snf ! , (       d  f       g = fr*   )r   rR   r9   r   rC   r   r   r.   r0   r~   r   rw   )r=   r   Nr   r   r}   wrsr   s           r   check_non_resurrecting_chain7CycleChainFinalizationTest.check_non_resurrecting_chainm  s    L__$$W-E"'(%Q2a5%C(+015a7;;q>5C1JJL!!#&!!"%S1SrbdS1D6A:>JJL!!#& (1
 2 s5   DDD D
1A	D:D

2DD
D"c                    [        U5      n[        R                  5          U R                  U5      n[        U5      nU Vs/ s H  n[	        U5      PM     nnU Vs/ s H%  n[        U[        5      (       d  M  [	        U5      PM'     nnU Vs/ s H  n[        R                  " U5      PM     nnA[        R                  " 5         U R                  U5        U R                  U5        U R                  U Vs/ s H	  o" 5       PM     snS /U-  5        U R                  5         [        R                  " 5         U R                  U5        U R                  / 5        S S S 5        g s  snf s  snf s  snf s  snf ! , (       d  f       g = fr*   )r   rR   r9   r   rC   
isinstancerj   r   r   r.   r0   r~   r   rw   r   )	r=   r   r   r   r   r}   survivor_idsr   r   s	            r   check_resurrecting_chain3CycleChainFinalizationTest.check_resurrecting_chain{  s'   L__$$W-EE
A"'(%Q2a5%C(+0U5aJqBS4TEBqE5LU+015a7;;q>5C1JJL!!#&!!,/S1SrbdS1D6A:>  "JJL!!#&!!"%  )U1 2 sI   !E7E#E7E(9E(E7 E-.A	E77E2
AE7#E77
Fc                 6    U R                  [        /S-  5        g N   )r   r   r<   s    r   test_homogenous*CycleChainFinalizationTest.test_homogenous  s    ))=/A*=>r   c                 6    U R                  [        /S-  5        g r   )r   r   r<   s    r   test_homogenous_resurrect4CycleChainFinalizationTest.test_homogenous_resurrect  s    %%'9&:Q&>?r   c                 6    U R                  [        /S-  5        g r   )r   r   r<   s    r   test_homogenous_suicidal3CycleChainFinalizationTest.test_homogenous_suicidal  s    ))?*;a*?@r   c                 @    U R                  [        [        /S-  5        g r   r   r   r   r<   s    r   test_heterogenous_suicidal_one9CycleChainFinalizationTest.test_heterogenous_suicidal_one  s    ))?M*JQ*NOr   c                 L    U R                  [        /S-  [        /S-  -   5        g r   r	  r<   s    r   test_heterogenous_suicidal_two9CycleChainFinalizationTest.test_heterogenous_suicidal_two  s'    ))!]Oa$77	9r   c                 @    U R                  [        [        /S-  5        g r   )r   r   r   r<   s    r   test_heterogenous_resurrect_one:CycleChainFinalizationTest.test_heterogenous_resurrect_one  s    %%'9=&IA&MNr   c                 J    U R                  [        [        [        /S-  5        g r   r   r   r   r   r<   s    r   test_heterogenous_resurrect_two:CycleChainFinalizationTest.test_heterogenous_resurrect_two  s     %%@1D	Fr   c                 b    U R                  [        /S-  [        /S-  -   [        /S-  -   5        g r   r  r<   s    r   !test_heterogenous_resurrect_three<CycleChainFinalizationTest.test_heterogenous_resurrect_three  s6    %% 1$'::o=NQR=RR	Tr   r   N)r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r  r   r   r   r   r   r   `  s?    '&&?@AP9OFTr   r   c                        \ rS rSrS rS rSrg)
LegacyBasei  c                      U R                   (       d5  U R                  R                  [        U 5      5        U R	                  5         g g ! [
         a%  nU R                  R                  U5         S nAg S nAff = fr*   )r8   r1   rB   rC   r>   rE   r-   rF   s     r   rH   LegacyBase.__del__  s^    	" >>%%bh/!!# "  	"KKq!!	"s   AA	 	
A8A33A8c                     U R                   (       dE  U R                  R                  [        U 5      5        U R	                  5         U R                  5         g g ! [         a%  nU R                  R                  U5         S nAg S nAff = fr*   )r8   r2   rB   rC   r>   rD   rE   r-   rF   s     r   
__tp_del__LegacyBase.__tp_del__  sj    	">>!!((D2!!#  " "  	"KKq!!	"rJ   r   N)r   r   r   r   rH   r  r   r   r   r   r  r    s    "
"r   r  c                       \ rS rSrSrg)Legacyi  r   Nrg   r   r   r   r!  r!        r   r!  c                       \ rS rSrS rSrg)LegacyResurrectori  c                 :    U R                   R                  U 5        g r*   ra   r<   s    r   rD   LegacyResurrector.side_effect  rc   r   r   Nrn   r   r   r   r$  r$    s    $r   r$  c                       \ rS rSrSrg)LegacySelfCyclei  r   Nrg   r   r   r   r(  r(    r"  r   r(  c                   :   ^  \ rS rSrU 4S jrS rS rS rSrU =r	$ )LegacyFinalizationTesti  c                    > [         R                  R                  5         [         R                  " 5         [        TU ]  5         g r*   )r.   r/   r,   r0   r   rx   r   s    r   rx   LegacyFinalizationTest.tearDown  s)     	




r   c                    [         R                  5          [        5       n[        U5      /n[        R
                  " U5      nA[        R                  " 5         U R                  U5        U R                  U5        U R                  / 5        U R                  U" 5       S 5        [        R                  " 5         U R                  U5        U R                  U5        S S S 5        g ! , (       d  f       g = fr*   )rR   r9   r!  rC   r   r   r.   r0   r~   r   r   r   r   s       r   test_legacy"LegacyFinalizationTest.test_legacy  s    __Aa5'CQBJJL!!#&$$S)!!"%MM"$%JJL!!#&$$S) s   CC""
C0c                 \   [         R                  5          [        5       n[        U5      /n[        R
                  " U5      nA[        R                  " 5         U R                  U5        U R                  U5        U R                  U5        U R                  U" 5       S 5        U R                  5         [        R                  " 5         U R                  U5        U R                  US-  5        U R                  U5        S S S 5        U R                  W" 5       S 5        g ! , (       d  f       N&= fr   )rR   r9   r$  rC   r   r   r.   r0   r~   r   r   r   r   r   s       r   test_legacy_resurrect,LegacyFinalizationTest.test_legacy_resurrect  s    __!#Aa5'CQBJJL!!#&$$S)!!#&MM"$%  "JJL!!#&$$S1W-!!#&   	bdD!! s   C(D
D+c                    [         R                  5          [        5       n[        U5      /n[        R
                  " U5      nA[        R                  " 5         U R                  / 5        U R                  / 5        U R                  / 5        U R                  U5        U R                  U" 5       S 5        S [        R                  S   l        S S S 5        U R                  / 5        U R                  W" 5       S 5        g ! , (       d  f       N7= f)Nr   )rR   r9   r(  rC   r   r   r.   r0   r~   r   r   r   r   r/   r   r   s       r   test_legacy_self_cycle-LegacyFinalizationTest.test_legacy_self_cycle  s    __!Aa5'CQBJJL!!"%$$R(!!"%$RT4( $BJJqM  	BbdD! s   B6C<<
D
r   )
r   r   r   r   rx   r.  r1  r4  r   r   r   s   @r   r*  r*    s    *"&" "r   r*  __main__)%rO   r.   r
   r   	_testcapir   ImportErrorr   r9   r%   r'   rR   r[   r^   re   rj   rp   TestCaser   r   r   r   r   r   r   r   r   r   r   r  r!  r$  r(  r   r*  r   mainr   r   r   <module>r;     s  
  	  %$ ? ?D$ $ O   $ $ $	Z 	$
 $% %<>'Xx'8'8 >'B   	mV 		=*; 	v 7&(*;*; 7&t* *0	K 		&7 	k6 GT8+<+< GTZ" "0 	Z 	 	 $
 $ $ 	mZ 	 	 	>"Xx'8'8 >" >"B zMMO [    s"   F F" 	FF"	F/.F/