U
    	ڲg                      @   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)boundc                   @   sZ   e Zd ZU dZg Zee ed< g Zee ed< 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 flags
_all_names_fixed_namesconfigurationc                 C   sx   || j krFtj| j d| d| j dtt| |  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 )r   warningswarn__name__
_type_descstrgetattrupperr   setattr
ValueError)clsZdnamevalue r    2/tmp/pip-unpacked-wheel-8n0dx3ox/pyparsing/util.py_set   s    
,
z__config_flags._setc                 C   s   |  |dS )NTr"   r   namer    r    r!   <lambda>#       z__config_flags.<lambda>c                 C   s   |  |dS )NFr#   r$   r    r    r!   r&   $   r'   N)r   
__module____qualname____doc__r   r   r   __annotations__r   r   classmethodr"   enabledisabler    r    r    r!   r      s   

r      )maxsize)locstrgreturnc                 C   sF   |}d|   k rt |k r4n n|| d  dkr4dS | |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)r1   r2   sr    r    r!   col'   s    r9   c                 C   s   | 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.
    r5   r   r4   )count)r1   r2   r    r    r!   lineno8   s    r;   c                 C   sB   | dd| }|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.
    r5   r   r4   N)r7   find)r1   r2   Zlast_crZnext_crr    r    r!   lineF   s    r=   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|| | _ t|| | _t|| | _d S )Nc                    s
    |S Nr    _key	cache_getnot_in_cacher    r!   getV   s    z%_UnboundedCache.__init__.<locals>.getc                    s   | |< d S r?   r    )rA   rB   r   cacher    r!   set_Y   s    z&_UnboundedCache.__init__.<locals>.set_c                    s       d S r?   )clearrA   rG   r    r!   rJ   \   s    z'_UnboundedCache.__init__.<locals>.clear)rF   objectrE   sizetypes
MethodTypesetrJ   )selfrF   rI   rJ   r    )rH   rD   rE   r!   __init__Q   s    z_UnboundedCache.__init__Nr   r(   r)   rR   r    r    r    r!   r>   P   s   r>   c                   @   s   e Zd Zdd ZdS )
_FifoCachec                    s   t   | _i  t  g  j jttfdd} fdd} fdd}| _t	|| | _t	|| | _
t	|| | _d S )Nc                    s
    |S r?   r    r@   rC   r    r!   rF   n   s    z _FifoCache.__init__.<locals>.getc                    s*   | |< t }| d  ||< d S r?   )next)rA   rB   r   i)rH   	cache_popkeyiterkeyringr    r!   rI   q   s    z!_FifoCache.__init__.<locals>.set_c                    s        t g d d < d S r?   )rJ   rL   rK   )rH   rY   rM   r    r!   rJ   w   s    z"_FifoCache.__init__.<locals>.clear)rL   rE   rF   pop	itertoolscyclerangerM   rN   rO   rP   rJ   )rQ   rM   rF   rI   rJ   r    )rH   rD   rW   rX   rY   rE   rM   r!   rR   f   s    z_FifoCache.__init__NrS   r    r    r    r!   rT   e   s   rT   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 | _d S r?   )	_capacity_activecollectionsOrderedDict_memory)rQ   capacityr    r    r!   rR      s    zLRUMemo.__init__c                 C   s<   z| j | W S  tk
r6   | j| | j|  Y S X d S r?   )r`   KeyErrorrc   move_to_endrQ   rB   r    r    r!   __getitem__   s
    zLRUMemo.__getitem__c                 C   s   | j |d  || j|< d S r?   )rc   rZ   r`   rQ   rB   r   r    r    r!   __setitem__   s    zLRUMemo.__setitem__c                 C   sT   z| j |}W n tk
r$   Y n,X t| j| jkrF| jjdd q&|| j|< d S )NF)last)r`   rZ   re   r6   rc   r_   popitemri   r    r    r!   __delitem__   s    zLRUMemo.__delitem__c                 C   s   | j   | j  d S r?   )r`   rJ   rc   )rQ   r    r    r!   rJ      s    
zLRUMemo.clearN)	r   r(   r)   r*   rR   rh   rj   rm   rJ   r    r    r    r!   r^      s   
r^   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 r?   r    rg   r    r    r!   rm      s    zUnboundedMemo.__delitem__N)r   r(   r)   r*   rm   r    r    r    r!   rn      s   rn   )r8   r3   c                 C   s:   dD ]}|  |t| } q|  dd} |  dd} t| S )Nz\^-[]r5   z\n	z\t)replace_bslashr   )r8   cr    r    r!   _escape_regex_range_chars   s
    rs   T)r8   	re_escaper3   c           	         s  fddd_ t _d_dd  dd }|s:| g }d	tt| } t| d
krtj	| dD ]\}}t
| }}tjtt|g|dd }||kr| | qjt|t|d krd	nd}| | |  |  qjn fdd| D }d	|S )Nc                    s4   t | }| j  _}|| dkr.t j _ jS )Nr4   )ordprevrU   counterr   )rr   c_intrv   )is_consecutiver    r!   ry      s
    z2_collapse_string_to_ranges.<locals>.is_consecutiver   c                 S   s   | dkrd|  S | S )Nz\^-][\r    rr   r    r    r!   escape_re_range_char   s    z8_collapse_string_to_ranges.<locals>.escape_re_range_charc                 S   s   | S r?   r    r|   r    r    r!   no_escape_re_range_char   s    z;_collapse_string_to_ranges.<locals>.no_escape_re_range_char r   )rB   r4   )maxlen-c                    s   g | ]} |qS r    r    ).0rr   )r}   r    r!   
<listcomp>   s     z._collapse_string_to_ranges.<locals>.<listcomp>)rv   r[   r:   rw   r   joinsortedrP   r6   groupbyrU   ra   dequechainiterrZ   appendru   )	r8   rt   r~   retrA   charsfirstrk   sepr    )r}   ry   r!   _collapse_string_to_ranges   s2    
 
r   )llr3   c                 C   s6   g }| D ](}t |tr&|t| q|| q|S r?   )
isinstancelistextend_flattenr   )r   r   rV   r    r    r!   r      s    
r   )compat_namefnr3   c                    s   t  d  dgtt 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__rQ   r4   c                    s    | f||S r?   r    )rQ   argskwargsr   r    r!   _inner   s    z replaced_by_pep8.<locals>._innerc                     s
    | |S r?   r    )r   r   r   r    r!   r     s    zDeprecated - use :class:``rR   )r   r   inspect	signature
parametersr   r   r*   r+   r   rN   FunctionType__kwdefaults__typehasattrrR   r)   r	   r   )r   r   r   r    r   r!   replaced_by_pep8   s     
r   )T)#r   r   rN   ra   r[   	functoolsr   r   typingr   r   r   r   r   r	   chrrq   r   r   intr   r9   r;   r=   r>   rT   r^   dictrn   rs   boolr   r   r   r   r    r    r    r!   <module>   s8    	'	
  ,
