
    iE1                     z   d dl Z d dlZd dlZd dlmZ d dlZd dlZe j                            d          Z	e j                            d          pe	Z
e j                            d          Ze
peZe j                            d          Zepe j                            d          Ze j                            d          Ze j                            d	          Zd
 Zd Z G d de          Z eed          r  G d de          Z e            e_        eZnd Z G d de          Z G d de          Zd ZdS )    N)wrapsGITHUB_ACTIONSTRAVISAPPVEYORGREENLET_MANYLINUXGREENLET_SKIP_LEAKCHECKS GREENLET_SKIP_FAILING_LEAKCHECKS GREENLET_ONLY_FAILING_LEAKCHECKSc                     d| _         | S )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    ^/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/greenlet/tests/leakcheck.pyignores_leakcheckr   J   s     !DK    c                 \    d| _         t          r t          j        d          |           } | S )z2
    Mark that the function is known to leak.
    TzSkipping known failures)fails_leakcheckSKIP_FAILING_LEAKCHECKSunittestskipr   s    r   r   r   Y   s3      D >7x}677==Kr   c                       e Zd ZdS )LeakCheckErrorN)__name__
__module____qualname__ r   r   r   r   b   s        Dr   r   
getobjectsc                       e Zd Zd Zd ZdS )_MockGCc                 *    t          j        d          S )Nr   )sysr   selfs    r   get_objectsz_MockGC.get_objectsj   s    >!$$$r   c                 ,    t          t          |          S N)getattrgc)r#   names     r   __getattr__z_MockGC.__getattr__l   s    2t$$$r   N)r   r   r   r$   r*   r   r   r   r   r   i   s2        	% 	% 	%	% 	% 	% 	% 	%r   r   c                     | S )a  
        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_leakcheckr,   q   s	     r   c                       e Zd Zd Zd ZdS )!ignores_types_in_strict_leakcheckc                     || _         d S r&   )types)r#   r0   s     r   __init__z*ignores_types_in_strict_leakcheck.__init__|   s    


r   c                     | j         |_        |S r&   )r0   leakcheck_ignore_types)r#   r   s     r   __call__z*ignores_types_in_strict_leakcheck.__call__~   s    &*j#r   N)r   r   r   r1   r4   r   r   r   r.   r.   {   s2              r   r.   c                   F    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )_RefCountCheckerr   )uop_executorc                 Z    || _         || _        g | _        i | _        d| _        d| _        d S )Nr   F)testcasefunctiondeltas
peak_statsignored_typesneeds_setUp)r#   r9   r:   s      r   r1   z_RefCountChecker.__init__   s6       !r   c                    || u rdS t          |          }|t          | j                  k    rW	 | j                            |          }n.# t          $ r! | j                            |          dk    }Y nw xY w|t
          ur|rdS | j                                        D ]	}||u r dS 
|| j        v s|| j	        v s|j
        | j        v rdS dS )NFr   T)type_include_object_p__eq__AttributeError__cmp__NotImplemented__dict__valuesr=   IGNORED_TYPESr   IGNORED_TYPE_NAMES)r#   objkindexact_method_equalsxs        r   rA   z"_RefCountChecker._include_object_p   s   
 $;;5Cyy 4.////O&*&<&C&CC&H&H##! O O O '+&<&D&DS&I&IQ&N###	O #.88=P8u %%'' 	 	Aaxxuu 
 D&&&t)))} 7775 ts   A
 
(A54A5c                 D    t          j        d | j        | j                  S )N)limitr<   filter)objgraphgrowthr<   rA   r"   s    r   _growthz_RefCountChecker._growth   s'    Tdo&*&<> > > 	>r   c                     |sdS g }t          d |D                       }|D ]"\  }}}|                    d||||fz             #d                    |          }|S )Nz<Unable to calculate growth>c              3   <   K   | ]\  }}}t          |          V  d S r&   )len).0r)   _s      r   	<genexpr>z0_RefCountChecker._report_diff.<locals>.<genexpr>   s.      77*$1CII777777r   z%-*s%9d %+9d
)maxappendjoin)r#   rR   lineswidthr)   countdeltadiffs           r   _report_diffz_RefCountChecker._report_diff   s     	2117777777"( 	G 	GD%LL5$u*EEFFFFyyr   c                 P   t          j                    }t          j                     | j        r%| j                                         d| j        _        	  | j        | j        g|R i | | j                                         | j        	                                 d| j        _        d| _        |rt          j
                     d S d S # | j                                         | j        	                                 d| j        _        d| _        |rt          j
                     w w xY w)NFT)r(   	isenableddisabler>   r9   setUpskipTearDownr:   tearDown
doCleanupsenable)r#   argskwargs
gc_enableds       r   	_run_testz_RefCountChecker._run_test   s   \^^


 	/M!!!).DM&	DM$-9$999&999M""$$$M$$&&&)-DM&#D 	 	 M""$$$M$$&&&)-DM&#D 	s   C AD%c                     dt           j        v r$t           j        d                                          dt           j        v r$t           j        d                                          |                                 S )Nurlparsezurllib.parse)r!   modulesclear_cacherS   r"   s    r   _growth_afterz_RefCountChecker._growth_after   s^     $$K
#//111S[((K'33555||~~r   c                 >   | j         }|sdS t          j        rt          dt          j                  |dd          ddgk    rt	          |          dv rdS |dd          g dk    rdS t	          |          d	k    rt          |d
d                    dk    rdS t	          |          dk    rZ|d         dk    rN|d         |d         k    r<|d         |d         k    r*|                     |          }t          d|d|          t          |dd                    dk    s<t          |d
d                    dk    s!|d
d                              d          dk    rd}nd}t	          |          |k    r(t          d|d|                     |                    dS )NTz Generated uncollectable garbage r   )      F)r   r   r      rx   zrefcount increased by rZ   rw         )r;   r(   garbager   rV   sumrc   r`   )r#   rR   r;   rb   rO   s        r   _check_deltasz_RefCountChecker._check_deltas   s   
  	4: 	W .!UVVV "##;1a&  S[[F%:%:5"##;)))##5v;;!F233K 0 0A 5 55v;;!r
Q6":3K3KPVWYPZ^deg^hPhPh$$V,,D .66644!PQQQ vbcc{q  Crss$4$4$9$9VBCC[=N=Nq=Q=QUV=V=VEEEv;;% .$*FF$($5$5f$=$=$="? @ @ @
 tr   c                 ^   t          d          D ]}t          j                     t          | j        dd          }|rd| j        _        t          | j        dd          | _        |                                 }	 | 	                    |          rp| 
                    ||           |                                 }| j                            t          d |D                                  | 	                    |          p|rt          d| j        d	          d S # t          $ r |s Y d S w xY w)
Nrx   r   FTr3   r   c              3   &   K   | ]}|d          V  dS )rw   Nr   )rW   stats     r   rY   z,_RefCountChecker.__call__.<locals>.<genexpr>:  s&      'C'CDQ'C'C'C'C'C'Cr   z	Expected z to leak but it did not.)ranger(   collectr'   r:   r9   expect_greenlet_leakr=   rS   r   ro   rt   r;   r\   r   r   )r#   rl   rm   rX   expect_failurerR   s         r   r4   z_RefCountChecker.__call__'  s_   q 	 	AJLLLL 0A5II 	615DM.$T]4LbQQ 	_$$V,, FtV,,,++--""3'C'CF'C'C'C#D#DEEE $$V,, F  _$ndmmm%]^^^_ _	  	 	 	!   	s   :BD D,+D,N)r   r   r   rH   rI   r1   rA   rS   rc   ro   rt   r   r4   r   r   r   r6   r6      s        
 M	! 	! 	!( ( (T> > >
 
 
  "  / / /b_ _ _ _ _r   r6   c                 p     t           dd          st          r S t                      fd            }|S )Nr   Fc                     t          | dd          rt          j        d          t          r%t          dd          st          j        d           t	          |           ||          S )Nr   Fz$This class ignored during leakchecksr   z(Only running tests that fail leakchecks.)r'   r   SkipTestONLY_FAILING_LEAKCHECKSr6   )r#   rl   rm   methods      r   wrapperzwrap_refcount.<locals>.wrapperF  sx    4+U33 	L#$JKKK" 	P76;Le+T+T 	P#$NOOO-f--dF;;;r   )r'   SKIP_LEAKCHECKSr   )r   r   s   ` r   wrap_refcountr   B  sT    v)511 _ 
6]]< < < < ]< Nr   )osr!   r(   	functoolsr   r   rQ   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   r,   r.   r6   r   r   r   r   <module>r      s  0 
			 



 				        B JNN+;<< JNN8,,I0I jnnZ00 !8%8z~~&:;; &T"*..9S*T*T*..)KLL *..)KLL     	 	 	 	 	^ 	 	 	 73 % % % % %& % % %
 '))HK,         ~_ ~_ ~_ ~_ ~_v ~_ ~_ ~_@    r   