3
h                  @   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mZ d dlm	Z	m
Z
mZmZmZmZ edZede	dZG dd dZed	d
eeedddZed	d
eeedddZed	d
eeedddZG dd dZG dd dZG dd dZG dd deZeedddZd'eeee f eeddd Ze e d!d"d#Z!eeed$d%d&Z"dS )(    N)	lru_cachewraps)CallableListUnionIterableTypeVarcast\   C)Zboundc               @   sR   e Zd ZU dZg Zee g Zee dZe	dd Z
e	dd Ze	dd ZdS )	__config_flagsz=Internal class for defining compatibility and debugging flagsZconfigurationc             C   sx   || j krFtj| j d| d| j dtt| |j  ddd d S || jkr^t	| || nt
d| j d|d S )N. z is z and cannot be overridden   )
stacklevelzno such )_fixed_nameswarningswarn__name__
_type_descstrgetattrupper
_all_namessetattr
ValueError)clsZdnamevalue r   3/tmp/pip-build-fibhr3ey/pyparsing/pyparsing/util.py_set   s    
,
z__config_flags._setc             C   s   | j |dS )NT)r    )r   namer   r   r   <lambda>#   s    z__config_flags.<lambda>c             C   s   | j |dS )NF)r    )r   r!   r   r   r   r"   $   s    N)r   
__module____qualname____doc__r   r   r   r   r   classmethodr    enabledisabler   r   r   r   r      s   
r      )maxsize)locstrgreturnc             C   sF   |}d|   k ot |k n  r4|| d  dkr4dS | |jdd|  S )a  
    Returns current column within a string, counting newlines as line separators.
    The first column is number 1.

    Note: the default parsing behavior is to expand tabs in the input string
    before starting the parsing process.  See
    :class:`ParserElement.parse_string` for more
    information on parsing strings containing ``<TAB>`` s, and suggested
    methods to maintain a consistent view of the parsed string, the parse
    location, and line and column positions within the parsed string.
    r      
)lenrfind)r+   r,   sr   r   r   col'   s    r3   c             C   s   |j dd| d S )a  Returns current line number within a string, counting newlines as line separators.
    The first line is number 1.

    Note - the default parsing behavior is to expand tabs in the input string
    before starting the parsing process.  See :class:`ParserElement.parse_string`
    for more information on parsing strings containing ``<TAB>`` s, and
    suggested methods to maintain a consistent view of the parsed string, the
    parse location, and line and column positions within the parsed string.
    r/   r   r.   )count)r+   r,   r   r   r   lineno8   s    r5   c             C   sB   |j dd| }|jd| }|dkr2||d | S ||d d S )zh
    Returns the line of text containing loc within a string, counting newlines as line separators.
    r/   r   r.   N)r1   find)r+   r,   Zlast_crZnext_crr   r   r   lineF   s    r7   c               @   s   e Zd Zdd ZdS )_UnboundedCachec                sp   i   j t  | _fdd} fdd} fdd}d | _tj|| | _ tj|| | _tj|| | _d S )Nc                s
    |S )Nr   )_key)	cache_getnot_in_cacher   r   getV   s    z%_UnboundedCache.__init__.<locals>.getc                s   | |< d S )Nr   )r9   r:   r   )cacher   r   set_Y   s    z&_UnboundedCache.__init__.<locals>.set_c                s    j   d S )N)clear)r9   )r>   r   r   r@   \   s    z'_UnboundedCache.__init__.<locals>.clear)r=   objectr<   sizetypes
MethodTypesetr@   )selfr=   r?   r@   r   )r>   r;   r<   r   __init__Q   s    z_UnboundedCache.__init__N)r   r#   r$   rG   r   r   r   r   r8   P   s   r8   c               @   s   e Zd Zdd ZdS )
_FifoCachec                s   t   | _i  t  g  j jtjtfdd} fdd} fdd}| _tj	|| | _tj	|| | _
tj	|| | _d S )Nc                s
    |S )Nr   )r9   r:   )r;   r<   r   r   r=   n   s    z _FifoCache.__init__.<locals>.getc                s*   | |< t }| d  ||< d S )N)next)r9   r:   r   i)r>   	cache_popkeyiterkeyringr   r   r?   q   s    z!_FifoCache.__init__.<locals>.set_c                s     j   t g d d < d S )N)r@   rA   )r9   )r>   rM   rB   r   r   r@   w   s    z"_FifoCache.__init__.<locals>.clear)rA   r<   r=   pop	itertoolscyclerangerB   rC   rD   rE   r@   )rF   rB   r=   r?   r@   r   )r>   r;   rK   rL   rM   r<   rB   r   rG   f   s    z_FifoCache.__init__N)r   r#   r$   rG   r   r   r   r   rH   e   s   rH   c               @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )LRUMemoz
    A memoizing mapping that retains `capacity` deleted items

    The memo tracks retained items by their access order; once `capacity` items
    are retained, the least recently used item is discarded.
    c             C   s   || _ i | _tj | _d S )N)	_capacity_activecollectionsOrderedDict_memory)rF   capacityr   r   r   rG      s    zLRUMemo.__init__c             C   s6   y
| j | S  tk
r0   | jj| | j| S X d S )N)rT   KeyErrorrW   move_to_end)rF   r:   r   r   r   __getitem__   s
    
zLRUMemo.__getitem__c             C   s   | j j|d  || j|< d S )N)rW   rN   rT   )rF   r:   r   r   r   r   __setitem__   s    zLRUMemo.__setitem__c             C   sX   y| j j|}W n tk
r$   Y n0X x"t| j| jkrH| jjdd q(W || j|< d S )NF)last)rT   rN   rY   r0   rW   rS   popitem)rF   r:   r   r   r   r   __delitem__   s    zLRUMemo.__delitem__c             C   s   | j j  | jj  d S )N)rT   r@   rW   )rF   r   r   r   r@      s    
zLRUMemo.clearN)	r   r#   r$   r%   rG   r[   r\   r_   r@   r   r   r   r   rR      s   
rR   c               @   s   e Zd ZdZdd ZdS )UnboundedMemoz<
    A memoizing mapping that retains all deleted items
    c             C   s   d S )Nr   )rF   r:   r   r   r   r_      s    zUnboundedMemo.__delitem__N)r   r#   r$   r%   r_   r   r   r   r   r`      s   r`   )r2   r-   c             C   s>   xdD ]}| j |t| } qW | j dd} | j dd} t| S )Nz\^-[]r/   z\n	z\t)replace_bslashr   )r2   cr   r   r   _escape_regex_range_chars   s
    
re   T)r2   	re_escaper-   c       	         s  fddd_ tj _d_dd  dd }|s:| g }d	jtt| } t| d
krxtj	| dD ]\}}t
| }}tjtjt|g|ddj }||kr|j | qlt|t|d krd	nd}|j | |  |  qlW n fdd| D }d	j|S )Nc                s4   t | }| j  _}|| dkr.t j _ jS )Nr.   )ordprevrI   counterr   )rd   c_intrh   )is_consecutiver   r   rk      s
    z2_collapse_string_to_ranges.<locals>.is_consecutiver   r.   c             S   s   | dkrd|  S | S )Nz\^-][\r   )rd   r   r   r   escape_re_range_char   s    z8_collapse_string_to_ranges.<locals>.escape_re_range_charc             S   s   | S )Nr   )rd   r   r   r   no_escape_re_range_char   s    z;_collapse_string_to_ranges.<locals>.no_escape_re_range_char r   )r:   )maxlen-c                s   g | ]} |qS r   r   ).0rd   )rm   r   r   
<listcomp>   s    z._collapse_string_to_ranges.<locals>.<listcomp>)rh   rO   r4   ri   r   joinsortedrE   r0   groupbyrI   rU   dequechainiterrN   appendrg   )	r2   rf   rn   retr9   charsfirstr]   sepr   )rm   rk   r   _collapse_string_to_ranges   s,    
 r   )llr-   c             C   s:   g }x0| D ](}t |tr(|jt| q
|j| q
W |S )N)
isinstancelistextend_flattenr{   )r   r|   rJ   r   r   r   r      s    

r   )compat_namefnr-   c                s   t  d  dgttj jd d kr@t  fdd}nt  fdd}d j d|_| |_ j|_t	 t
jr j|_n&t	 trt d	r jj|_nd |_ j|_tt|S )
N__func__rF   r.   c                s    | f||S )Nr   )rF   argskwargs)r   r   r   _inner   s    z replaced_by_pep8.<locals>._innerc                 s
    | |S )Nr   )r   r   )r   r   r   r     s    zDeprecated - use :class:``rG   )r   r   inspect	signature
parametersr   r   r%   __annotations__r   rC   FunctionType__kwdefaults__typehasattrrG   r$   r	   r   )r   r   r   r   )r   r   replaced_by_pep8   s    	
r   )T)#r   r   rC   rU   rO   	functoolsr   r   typingr   r   r   r   r   r	   chrrc   r   r   intr   r3   r5   r7   r8   rH   rR   dictr`   re   boolr   r   r   r   r   r   r   r   <module>   s0    	'	
*
