
    i#                          d dl mZ d dlZd dlZd dlmZ d dlZ	 d dlZn# e$ r dZY nw xY wd dl	Z	d dl
Z	d Z G d de          Zd ZdS )    )print_functionN)wrapsc                     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    C/usr/local/lib/python3.11/dist-packages/gevent/testing/leakcheck.pyignores_leakcheckr	   %   s     !DK    c                       e Zd ZeefZ	 ej        j        Z	n# e
$ r	 ddlmZ	 Y nw xY wd Zd Zd Zd Zd Zd Zd	 Zd
 ZdS )_RefCountCheckerr   )callbackc                 L    || _         || _        g | _        i | _        d| _        d S )NF)testcasefunctiondeltas
peak_statsneeds_setUp)selfr   r   s      r   __init__z_RefCountChecker.__init__A   s.       !r
   c                     || u rdS 	 || j                                         v s|| j        k    rdS n# t          t          f$ r Y dS w xY wt          |          }|| j        v rdS || j        u r|j        	|j	        dS dS NFT)
__dict__values_ignore_object_pAttributeError	TypeErrortypeIGNORED_TYPESCALLBACK_KINDr   args)r   objkinds      r   r   z!_RefCountChecker._ignore_object_pK   s    $;;5	 t}++----$///u 0 	* 	 	 	 44		 Cyy4%%%54%%%#,*>38CS
 5ts   &1 AAc                 D    t          j        d | j        | j                  S )N)limitr   filter)objgraphgrowthr   r   r   s    r   _growthz_RefCountChecker._growthj   s    TdodNcddddr
   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 )N)len).0name_s      r   	<genexpr>z0_RefCountChecker._report_diff.<locals>.<genexpr>r   s.      77*$1CII777777r
   z%-*s%9d %+9d
)maxappendjoin)r   r'   lineswidthr.   countdeltadiffs           r   _report_diffz_RefCountChecker._report_diffm   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r   )gc	isenableddisabler   r   setUpskipTearDownr   tearDown
doCleanupsenable)r   r    kwargs
gc_enableds       r   	_run_testz_RefCountChecker._run_testz   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)sysmodulesclear_cacher)   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      rP   zrefcount increased by r1   rO         )r   r<   garbageAssertionErrorr,   sumr:   r7   )r   r'   r   r9   r$   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                     |                                 }|                     |          rr|                     ||           |                                 }| j                            t          d |D                                  |                     |          pd S d S )NrP   c              3   &   K   | ]}|d          V  dS )rO   N )r-   stats     r   r0   z,_RefCountChecker.__call__.<locals>.<genexpr>   s&      #?#?DG#?#?#?#?#?#?r
   )
ranger<   collectr)   rZ   rF   rL   r   r3   rY   )r   r    rD   r/   r'   s        r   __call__z_RefCountChecker.__call__   s    q 	 	AJLLLL   (( 	BNN4(((''))FKs#?#?#?#?#?@@AAA   (( 	B 	B 	B 	B 	Br
   N)__name__
__module____qualname__tupledictr   geventcorer   r   r   gevent._ffi.callbackr   r   r)   r:   rF   rL   rZ   ra   r]   r
   r   r   r   4   s        
 DNMC, C C CBBBBBBBBC
! ! !  >e e e
 
 
  "  / / /bB B B B Bs    %%r   c                      t           t           dd          r:t           dd l}|                    d           t	                     d             }|S t	                      fd            }|S )Nr   Fr   z+objgraph not available, leakchecks disabledc                 0    |                      d           d S )Nz%This method ignored during leakchecks)skipTest)r   _args_kwargss      r    _method_skipped_during_leakcheckz7wrap_refcount.<locals>._method_skipped_during_leakcheck   s    MMABBBBBr
   c                     t          | dd          rt          j        d           t          |           ||          S )Nr   Fz$This class ignored during leakchecks)getattrunittestSkipTestr   )r   r    rD   methods      r   wrapperzwrap_refcount.<locals>.wrapper   sH    4+U33 	L#$JKKK-f--dF;;;r
   )r&   rq   warningswarnr   )rt   rv   ro   ru   s   `   r   wrap_refcountrx      s    76+=uEEOOOMMGHHH	v	C 	C 
	C// 6]]< < < < ]<
 Nr
   )
__future__r   rI   r<   	functoolsr   rr   r&   ImportErrorrg   gevent.corer	   objectr   rx   r]   r
   r   <module>r~      s   ( & % % % % % 



 				       OOOO   HHH       ^B ^B ^B ^B ^Bv ^B ^B ^BB    s    ))