B
    2*\                 @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ yd dl	m
Z
 W n ek
rl   dd Z
Y nX dd Zd	d
 Zdd Zdd ZdS )    N)
isabstract)support)	_get_dumpc             C   s   | j | j| j| jfS )N)_abc_registry
_abc_cache_abc_negative_cache_abc_negative_cache_version)cls r
   CC:\ALexclude\prg\programme\Python37\Lib\test\libregrtest\refleak.pyr      s    r   c       $   
      s  ddl }ddl ttds"tdtjdd }|j }tj	 }yddl
}W n tk
rh   d}	Y nX |j }	i }
xP fdd jjD D ]6}t|sqx&| |g D ]}t|d |
|< qW qW dd td	d
D fdd}|\}}}tjtj|}|| }dg| }dg| }dg| }td|dtjd td|d d  d| tjdd d } }}xt|D ]z}|  t||||	|
\}}}tddtjdd ||kr||| ||< ||| ||< ||| ||< |}|}|}qvW ttjd dd }dd }d}x|d|f|d|f|d|fgD ]t\}} }!||d }|!|r2d ||| t|f }"t|"tjdd t|d!}#t|"|#d |#  W dQ R X d}q2W |S )"zRun a test multiple times, looking for reference leaks.

    Returns:
        False if the test didn't leak references; True if we detected refleaks.
    r   Ngettotalrefcountz9Tracking reference leaks requires a debug build of Pythonc                s   g | ]}t  j|qS r
   )getattrabc).0a)collectionsr
   r   
<listcomp>*   s    zdash_R.<locals>.<listcomp>c             S   s   i | ]
}||qS r
   r
   )r   valuer
   r
   r   
<dictcomp>4   s    zdash_R.<locals>.<dictcomp>ii  c                s     | | S )N)
setdefault)r   )int_poolr
   r   get_pooled_int5   s    zdash_R.<locals>.get_pooled_intZ	beginningZrepetitions)fileZ
1234567890
      T)r   flush. )endr   r   c             S   s   t dd | D S )Nc             s   s   | ]}|d kV  qdS )r   Nr
   )r   Zdeltar
   r
   r   	<genexpr>`   s    z2dash_R.<locals>.check_rc_deltas.<locals>.<genexpr>)all)deltasr
   r
   r   check_rc_deltasS   s    zdash_R.<locals>.check_rc_deltasc             S   s   t | S )N)any)r!   r
   r
   r   check_fd_deltasb   s    zdash_R.<locals>.check_fd_deltasFZ
referenceszmemory blockszfile descriptorsz%s leaked %s %s, sum=%sr   )copyregcollections.abchasattrsys	Exceptionwarningsfiltersdispatch_tablecopypath_importer_cache	zipimportImportError_zip_directory_cacher   __all__r   __subclasses__r   rangeospathjoinr   ZSAVEDCWDprintstderrdash_R_cleanupsumopenr   )$Z
the_moduletestZindirect_testZ
huntrleaksr%   fspspicr/   zdcabcsr   objr   ZnwarmupZntrackedZfnameZrepcountZ	rc_deltasZalloc_deltasZ	fd_deltasZ	rc_beforeZalloc_beforeZ	fd_beforeiZalloc_afterZrc_afterZfd_afterr"   r$   Zfailedr!   Z	item_nameZcheckermsgZrefrepr
   )r   r   r   dash_R   sx    













rF   c                s:  dd l }dd l}dd l | tjd d < |j  |j| tj	  tj	| ydd l
}W n tk
rr   Y nX |j  |j| t   fdd jjD }tt|}xZ|D ]R}	xL|	 |	g D ]:}
x,||
t D ]}| d k	r|
|  qW |
  qW qW t  tj}tj}|  | | t fS )Nr   c                s   g | ]}t  j|qS r
   )r   r   )r   r   )r   r
   r   r      s    z"dash_R_cleanup.<locals>.<listcomp>)gcr%   r&   r*   r+   r,   clearupdater(   r.   r/   r0   r1   _clear_type_cacher   r2   filterr   r3   getsetregister_abc_caches_clearclear_cachesgetallocatedblocksr   collectr   Zfd_count)r>   r?   r@   rA   rB   rG   r%   r/   Zabs_classesr   rC   refZfunc1Zfunc2r
   )r   r   r:   x   s6    





r:   c              C   st  dd l } x tj D ]}t|dr|`qW x,tjtjtjtj	fD ]}|d k	r@|
  q@W ytjd }W n tk
rz   Y nX |j  t  ytjd }W n tk
r   Y nX |j  ytjd }W n tk
r   Y n
X |  ytjd }W n tk
r   Y n
X |  ytjd }W n tk
r:   Y n
X |  ytjd }W n tk
rh   Y n
X |  ytjd	 }	W n tk
r   Y nX |	j  ytjd
 }
W n tk
r   Y n
X |
  ytjd }W n tk
r   Y nX d |_ytjd }W n tk
r    Y n
X |  ytjd }W n tk
rN   Y nX x|jD ]}|  qXW |   d S )Nr   __warningregistry__zdistutils.dir_util	_strptimezurllib.parsezurllib.request	linecache	mimetypesfilecmpstructdoctestctypestyping)rG   r(   modulesvaluesr'   rT   stdoutr9   
__stdout__
__stderr__r   KeyErrorZ_path_createdrH   repurgeZ_regex_cacheZclear_cacheZ
urlcleanup
clearcacheZ_default_mime_types_cache_clearcacheZmasterZ_reset_cacheZ	_cleanupsrR   )rG   modstreamZdistutils_dir_utilrU   Zurllib_parseZurllib_requestrV   rW   rX   rY   rZ   r[   r\   fr
   r
   r   rP      s    



rP   c              C   sR   t td} x tdD ]}| ||d   qW dd tdD  ttdd d S )N   r   c             S   s   g | ]}t |qS r
   )chr)r   rD   r
   r
   r   r     s    zwarm_caches.<locals>.<listcomp>i  )bytesr4   list)srD   r
   r
   r   warm_caches  s
    rq   )errnor5   rc   r(   r*   inspectr   r=   r   _abcr   r0   rF   r:   rP   rq   r
   r
   r
   r   <module>   s   g(b