3
4^^                 @   sn   d Z ddlZddlZddlZddlZdddgZdddZi add Zddd	Z	dd
dZ
dddZdd ZdS )zCache lines from Python source files.

This is intended to read lines from modules imported -- hence if a filename
is not found, it will look down the module search path for a file by
that name.
    Ngetline
clearcache
checkcachec             C   s:   t | |}d|  ko t|kn  r2||d  S dS d S )N    )getlineslen)filenamelinenomodule_globalslines r   p/home/aldo/Documentos/tesis/tesis/device auto/pruebas pulsar/pruebaclonado/envClonado/lib/python3.6/linecache.pyr      s    
c               C   s   i a dS )zClear the cache entirely.N)cacher   r   r   r   r      s    c             C   sR   | t kr(t |  }t|dkr(t |  d S y
t| |S  tk
rL   t  g S X dS )zGet the lines for a Python source file from the cache.
    Update the cache if it doesn't contain an entry for this file already.r      N)r   r   updatecacheMemoryErrorr   )r	   r   entryr   r   r   r   %   s    
r   c             C   s   | dkrt tj }n| tkr&| g}ndS x~|D ]v} t|  }t|dkrJq0|\}}}}|dkr`q0ytj|}W n tk
r   t| = w0Y nX ||jks||jkr0t| = q0W dS )zUDiscard cache entries that are out of date.
    (This is not checked upon each call!)Nr   )	listr   keysr   osstatOSErrorst_sizest_mtime)r	   	filenamesr   sizemtimer   fullnamer   r   r   r   r   5   s&    
c          "   C   s  | t krtt |  dkrt | = |  s8| jdr<| jdr<g S | }ytj|}W n tk
rV   | }t| |ryt |  d  }W n ttfk
r   Y n<X |dkrg S t|ddd |j	 D |ft | < t |  d S tj
j| rg S xjtj
D ]\}ytj
j||}W n ttfk
r    wY nX ytj|}P W q tk
rH   Y qX qW g S Y nX y"tj|}|j }W dQ R X W n tk
r   g S X |r|d
 jd	 r|d  d	7  < |j|j }	}
|	|
||ft | < |S )zUpdate a cache entry and return its list of lines.
    If something's wrong, print a message, discard the cache entry,
    and return an empty list.r   <>r   Nc             S   s   g | ]}|d  qS )
r   ).0liner   r   r   
<listcomp>q   s    zupdatecache.<locals>.<listcomp>r   r!   r%   )r   r   
startswithendswithr   r   r   	lazycacheImportError
splitlinespathisabssysjoin	TypeErrorAttributeErrortokenizeopen	readlinesr   r   )r	   r   r   r   basenamedatadirnamefpr   r   r   r   r   r   r   R   sV    



r   c             C   s   | t kr tt |  dkrdS dS |  s:| jdr>| jdr>dS |rd|kr|jd}|d }t|dd	}|r|rtj||}|ft | < dS dS )
a  Seed the cache for filename with module_globals.

    The module loader will be asked for the source only when getlines is
    called, not immediately.

    If there is an entry in the cache already, it is not altered.

    :return: True if a lazy load is registered in the cache,
        otherwise False. To register such a load a module loader with a
        get_source method must be found, the filename must be a cachable
        filename, and the filename must not be already cached.
    r   TFr   r    
__loader____name__
get_sourceN)r   r   r&   r'   getgetattr	functoolspartial)r	   r   nameloaderr:   Z	get_linesr   r   r   r(      s    

r(   )N)N)N)N)__doc__r=   r-   r   r1   __all__r   r   r   r   r   r   r(   r   r   r   r   <module>   s   




A