
    Yh.                        S SK Jr  S SKrS SKrS SKrS SKJr  S SKrS SKr\R                  R                  S5      r\R                  R                  S5      =(       d    \r\R                  R                  S5      r\=(       d    \r\R                  R                  S5      r\=(       d    \R                  R                  S5      r\R                  R                  S	5      r\R                  R                  S
5      rS rS r " S S\5      r\" \S5      (       a   " S S\5      r\" 5       \l        \rOS r " S S\5      r " S S\5      rS rg)    )print_functionN)wrapsGITHUB_ACTIONSTRAVISAPPVEYORGREENLET_MANYLINUXGREENLET_SKIP_LEAKCHECKS GREENLET_SKIP_FAILING_LEAKCHECKS GREENLET_ONLY_FAILING_LEAKCHECKSc                     SU l         U $ )a  
Ignore the given object during leakchecks.

Can be applied to a method, in which case the method will run, but
will not be subject to leak checks.

If applied to a class, the entire class will be skipped during leakchecks. This
is intended to be used for classes that are very slow and cause problems such as
test timeouts; typically it will be used for classes that are subclasses of a base
class and specify variants of behaviour (such as pool sizes).
T)ignore_leakcheckfuncs    J/var/www/html/env/lib/python3.13/site-packages/greenlet/tests/leakcheck.pyignores_leakcheckr   L   s     !DK    c                 b    SU l         [        (       a  [        R                  " S5      " U 5      n U $ )z*
Mark that the function is known to leak.
TzSkipping known failures)fails_leakcheckSKIP_FAILING_LEAKCHECKSunittestskipr   s    r   r   r   [   s+      D}}67=Kr   c                       \ rS rSrSrg)LeakCheckErrord    N)__name__
__module____qualname____firstlineno____static_attributes__r   r   r   r   r   d   s    r   r   
getobjectsc                        \ rS rSrS rS rSrg)_MockGCk   c                 .    [         R                  " S5      $ )Nr   )sysr!   selfs    r   get_objects_MockGC.get_objectsl   s    >>!$$r   c                 "    [        [        U5      $ N)getattrgc)r(   names     r   __getattr___MockGC.__getattr__n   s    2t$$r   r   N)r   r   r   r   r)   r0   r    r   r   r   r#   r#   k   s    	%	%r   r#   c                     U $ )z
Decorator for a function that is known to fail when running
strict (``sys.getobjects()``) leakchecks.

This type of leakcheck finds all objects, even those, such as
strings, which are not tracked by the garbage collector.
r   r   s    r   fails_strict_leakcheckr3   s   s	     r   c                        \ rS rSrS rS rSrg)!ignores_types_in_strict_leakcheck}   c                     Xl         g r,   types)r(   r9   s     r   __init__*ignores_types_in_strict_leakcheck.__init__~   s    
r   c                 (    U R                   Ul        U$ r,   )r9   leakcheck_ignore_types)r(   r   s     r   __call__*ignores_types_in_strict_leakcheck.__call__   s    &*jj#r   r8   N)r   r   r   r   r:   r>   r    r   r   r   r5   r5   }   s    r   r5   c                   H    \ 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)_RefCountChecker   r   c                 T    Xl         X l        / U l        0 U l        SU l        SU l        g )Nr   F)testcasefunctiondeltas
peak_statsignored_typesneeds_setUp)r(   rD   rE   s      r   r:   _RefCountChecker.__init__   s,       !r   c                    XL a  g[        U5      nU[        U R                  5      :X  a-   U R                  R                  U5      nU[
        La  U(       a  gU R                  R                  5        H	  nXL d  M	    g   X R                  ;   d  X R                  ;   a  gg! [         a!    U R                  R	                  U5      S:H  n Nf = f)NFr   T)
type_include_object_p__eq__AttributeError__cmp__NotImplemented__dict__valuesrH   IGNORED_TYPES)r(   objkindexact_method_equalsxs        r   rM   "_RefCountChecker._include_object_p   s    
 ;Cy 4..//O&*&<&<&C&CC&H# #.8=P %%'Ax (
 %%%1C1C)C% " O '+&<&<&D&DS&IQ&N#	Os   B (C	C	c                 V    [         R                  " S U R                  U R                  S9$ )N)limitrG   filter)objgraphgrowthrG   rM   r'   s    r   _growth_RefCountChecker._growth   s$    Tdoo&*&<&<> 	>r   c                     U(       d  g/ n[        S U 5       5      nU H  u  pEnUR                  SX4XV4-  5        M     SR                  U5      nU$ )Nz<Unable to calculate growth>c              3   @   #    U  H  u  n  n[        U5      v   M     g 7fr,   )len).0r/   _s      r   	<genexpr>0_RefCountChecker._report_diff.<locals>.<genexpr>   s     7*$1CIIs   z%-*s%9d %+9d
)maxappendjoin)r(   r^   lineswidthr/   countdeltadiffs           r   _report_diff_RefCountChecker._report_diff   sW    1777"(DLL5*EEF #) yyr   c                    [         R                  " 5       n[         R                  " 5         U R                  (       a+  U R                  R                  5         SU R                  l         U R                  " U R                  /UQ70 UD6  U R                  R                  5         U R                  R                  5         SU R                  l        SU l        U(       a  [         R                  " 5         g g ! U R                  R                  5         U R                  R                  5         SU R                  l        SU l        U(       a  [         R                  " 5         f f = f)NFT)r.   	isenableddisablerI   rD   setUpskipTearDownrE   tearDown
doCleanupsenable)r(   argskwargs
gc_enableds       r   	_run_test_RefCountChecker._run_test   s    \\^



MM!).DMM&	MM$--9$9&9MM""$MM$$&)-DMM&#D		 	 MM""$MM$$&)-DMM&#D		 s   ( C2 2A+Ec                     S[         R                  ;   a!  [         R                  S   R                  5         S[         R                  ;   a!  [         R                  S   R                  5         U R                  5       $ )Nurlparsezurllib.parse)r&   modulesclear_cacher_   r'   s    r   _growth_after_RefCountChecker._growth_after   sR     $KK
#//1S[[(KK'335||~r   c                    U R                   nU(       d  g[        R                  (       a  [        S[        R                  < 35      eUSS  SS/:X  a  [	        U5      S;   a  gUSS  / SQ:X  a  g[	        U5      S	:  a  [        US
S  5      S:X  a  g[	        U5      S:  aE  US   S:  a<  US   US   :X  a0  US   US   :X  a$  U R                  U5      n[        SU< SU< 35      e[        USS  5      S::  d*  [        US
S  5      S::  d  US
S  R                  S5      S:  a  SnOSn[	        U5      U:  a"  [        SU< SU R                  U5      < 35      eg)NTz Generated uncollectable garbage r   )      F)r   r   r      r   zrefcount increased by rh   r         )rF   r.   garbager   rc   sumrq   rn   )r(   r^   rF   rp   r[   s        r   _check_deltas_RefCountChecker._check_deltas   sZ   
 :: !UVV "#;1a& S[F%:"#;)#v;!F23K 0A 5v;!r
Q6":3KPVWYPZ^deg^hPh$$V,D 64!PQQ vbc{q Crs$4$9VBC[=N=Nq=QUV=VEEv;% $*$($5$5f$="? @ @
 r   c                 p   [        S5       H  n[        R                  " 5         M     [        U R                  SS5      nU(       a  SU R
                  l        [        U R                  SS5      U l        U R                  5       n U R                  U5      (       ad  U R                  X5        U R                  5       nU R                  R                  [        S U 5       5      5        U R                  U5      (       a  Md  U(       a  [        SU R                  < S	35      eg ! [         a    U(       d  e  g f = f)
Nr   r   FTr=   r   c              3   *   #    U  H	  oS    v   M     g7f)r   Nr   )rd   stats     r   rf   ,_RefCountChecker.__call__.<locals>.<genexpr>+  s     'CFDQFs   z	Expected z to leak but it did not.)ranger.   collectr-   rE   rD   expect_greenlet_leakrH   r_   r   r~   r   rF   rj   r   r   )r(   r{   r|   re   expect_failurer^   s         r   r>   _RefCountChecker.__call__  s    qAJJL  !0A5I15DMM.$T]]4LbQ 	_$$V,,t,++-""3'CF'C#DE $$V,, $dmm%]^^ 	  	! "	s   A8D   D54D5)rF   rE   rH   rI   rG   rD   N)r   r   r   r   rT   r:   rM   r_   rq   r~   r   r   r>   r    r   r   r   rA   rA      s4    
 M	!#J>
"/b_r   rA   c                 n   ^  [        T SS5      (       d  [        (       a  T $ [        T 5      U 4S j5       nU$ )Nr   Fc                    > [        U SS5      (       a  [        R                  " S5      e[        (       a(  [        TSS5      (       d  [        R                  " S5      e[	        U T5      " X5      $ )Nr   Fz$This class ignored during leakchecksr   z(Only running tests that fail leakchecks.)r-   r   SkipTestONLY_FAILING_LEAKCHECKSrA   )r(   r{   r|   methods      r   wrapperwrap_refcount.<locals>.wrapper7  s^    4+U33##$JKK""76;Le+T+T##$NOOf-d;;r   )r-   SKIP_LEAKCHECKSr   )r   r   s   ` r   wrap_refcountr   3  s9    v)511__
6]< < Nr   )
__future__r   osr&   r.   	functoolsr   r   r]   environgetRUNNING_ON_GITHUB_ACTIONSRUNNING_ON_TRAVISRUNNING_ON_APPVEYORRUNNING_ON_CIRUNNING_ON_MANYLINUXr   r   r   r   r   AssertionErrorr   hasattrobjectr#   r3   r5   rA   r   r   r   r   <module>r      s)  0 & 	 
 	   B JJNN+;< JJNN8,I0I jjnnZ0 !8%8zz~~&:; &T"**..9S*T**..)KL **..)KL 	^ 	 3%& %
 )HK, m_v m_^r   