B
    18\                 @   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
   \/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/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_int	beginning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   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_deltasF
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   SAVEDCWDprintstderrdash_R_cleanupsumopenr   )$
the_moduletestZindirect_test
huntrleaksr)   fspspicr3   zdcabcsr   objr   nwarmupntrackedfnameZrepcountZ	rc_deltasZalloc_deltasZ	fd_deltasZ	rc_beforeZalloc_beforeZ	fd_beforeiZalloc_afterZrc_afterZfd_afterr%   r'   failedr$   Z	item_nameZcheckermsgZrefrepr
   )r   r   r   dash_R   sx    













rQ   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/   r0   clearupdater,   r2   r3   r4   r5   _clear_type_cacher   r6   filterr   r7   getsetregister_abc_caches_clearclear_cachesgetallocatedblocksr   collectr   fd_count)rE   rF   rG   rH   rI   rR   r)   r3   Zabs_classesr   rJ   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)rR   r,   modulesvaluesr+   r`   stdoutr>   
__stdout__
__stderr__r   KeyErrorZ_path_createdrS   repurgeZ_regex_cacheZclear_cache
urlcleanup
clearcacheZ_default_mime_types_cache_clearcacheZmasterZ_reset_cache	_cleanupsr]   )rR   modstreamZdistutils_dir_utilra   Zurllib_parseZurllib_requestrb   rc   rd   re   rf   rg   rh   fr
   r
   r   r[      s    



r[   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   rN   r
   r
   r   r     s    zwarm_caches.<locals>.<listcomp>i  )bytesr8   list)srN   r
   r
   r   warm_caches  s
    r   )errnor9   ro   r,   r.   inspectr   rC   r   _abcr   r4   rQ   r?   r[   r   r
   r
   r
   r   <module>   s   g(b