U
    Ç½„b•  ã                   @   s(  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mZm	Z	 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dS )#é    N)Ú	lru_cache)ÚListÚUnionÚIterableé\   c                   @   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   sd   || j kr6t d | j|| jtt| |ƒƒ ¡ ¡¡ d S || j	krNt
| ||ƒ ntd | j|¡ƒ‚d S )Nz'{}.{} {} is {} and cannot be overriddenzno such {} {!r})r	   ÚwarningsÚwarnÚformatÚ__name__Ú
_type_descÚstrÚgetattrÚupperr   ÚsetattrÚ
ValueError)ÚclsZdnameÚvalue© r   ú2/tmp/pip-unpacked-wheel-cdpi1ipc/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.parseString` 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    r0   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.parseString`
    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   Úlineno9   s    r2   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.
    r,   r   r+   N)r.   Úfind)r(   r)   Zlast_crZnext_crr   r   r   ÚlineG   s    r4   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   ÚgetW   s    z%_UnboundedCache.__init__.<locals>.getc                    s   |ˆ |< d S r6   r   ©r8   r9   r   ©Úcacher   r   Úset_Z   s    z&_UnboundedCache.__init__.<locals>.set_c                    s   ˆ   ¡  d S r6   ©Úclear©r8   r?   r   r   rC   ]   s    z'_UnboundedCache.__init__.<locals>.clear)r=   Úobjectr<   ÚsizeÚtypesÚ
MethodTypeÚsetrC   )Úselfr=   rA   rC   r   )r@   r;   r<   r   Ú__init__R   s    z_UnboundedCache.__init__N©r   r   r    rK   r   r   r   r   r5   Q   s   r5   c                   @   s   e Zd Zdd„ ZdS )Ú
_FifoCachec                    sv   t ƒ  | _‰t ¡ ‰ ˆ j‰‡‡fdd„}‡ ‡fdd„}‡ fdd„}ˆ| _t || ¡| _t || ¡| _t || ¡| _	d S )Nc                    s
   ˆ |ˆƒS r6   r   r7   r:   r   r   r=   l   s    z _FifoCache.__init__.<locals>.getc                    s&   |ˆ |< t ˆ ƒˆkr"ˆ jdd� qd S ©NF)Úlast)r-   Úpopitemr>   )r@   rF   r   r   rA   o   s    z!_FifoCache.__init__.<locals>.set_c                    s   ˆ   ¡  d S r6   rB   rD   r?   r   r   rC   t   s    z"_FifoCache.__init__.<locals>.clear)
rE   r<   ÚcollectionsÚOrderedDictr=   rF   rG   rH   rI   rC   )rJ   rF   r=   rA   rC   r   )r@   r;   r<   rF   r   rK   g   s    z_FifoCache.__init__NrL   r   r   r   r   rM   f   s   rM   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 r6   )Ú	_capacityÚ_activerQ   rR   Ú_memory)rJ   Úcapacityr   r   r   rK   …   s    zLRUMemo.__init__c                 C   s<   z| j | W S  tk
r6   | j |¡ | j|  Y S X d S r6   )rU   ÚKeyErrorrV   Úmove_to_end©rJ   r9   r   r   r   Ú__getitem__Š   s
    zLRUMemo.__getitem__c                 C   s   | j  |d ¡ || j|< d S r6   )rV   ÚpoprU   ©rJ   r9   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 rN   )rU   r\   rX   r-   rV   rT   rP   r]   r   r   r   Ú__delitem__•   s    zLRUMemo.__delitem__c                 C   s   | j  ¡  | j ¡  d S r6   )rU   rC   rV   )rJ   r   r   r   rC   Ÿ   s    
zLRUMemo.clearN)	r   r   r    r!   rK   r[   r^   r_   rC   r   r   r   r   rS   }   s   
rS   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 r6   r   rZ   r   r   r   r_   ©   s    zUnboundedMemo.__delitem__N)r   r   r    r!   r_   r   r   r   r   r`   ¤   s   r`   )r/   r*   c                 C   s:   dD ]}|   |t| ¡} q|   dd¡} |   dd¡} t| ƒS )Nz\^-[]r,   z\nú	z\t)ÚreplaceÚ_bslashr   )r/   Úcr   r   r   Ú_escape_regex_range_chars­   s
    re   T)r/   Ú	re_escaper*   c           	   	      s  ‡fdd„‰dˆ_ t ¡ ˆ_dˆ_dd„ ‰ dd„ }|s:|‰ g }d	 tt| ƒƒ¡} t| ƒd
kròtj	| ˆd�D ]„\}}t
|ƒ }}tjt t|gƒ|¡dd� ¡ }||kr¶| ˆ |ƒ¡ qjt|ƒt|ƒd krÎd	nd}| d ˆ |ƒ|ˆ |ƒ¡¡ qjn‡ fdd„| D ƒ}d	 |¡S )Nc                    s4   t | ƒ}|ˆ j ˆ _}|| dkr.tˆ jƒˆ _ˆ jS )Nr+   )ÚordÚprevÚnextÚcounterr   )rd   Úc_intrh   )Úis_consecutiver   r   rl   ¹   s
    z2_collapse_string_to_ranges.<locals>.is_consecutiver   éÿÿÿÿ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 r6   r   ro   r   r   r   Úno_escape_re_range_charÇ   s    z;_collapse_string_to_ranges.<locals>.no_escape_re_range_charÚ é   )r9   r+   )Úmaxlenú-z{}{}{}c                    s   g | ]}ˆ |ƒ‘qS r   r   )Ú.0rd   )rp   r   r   Ú
<listcomp>ß   s     z._collapse_string_to_ranges.<locals>.<listcomp>)rh   Ú	itertoolsr1   rj   r   ÚjoinÚsortedrI   r-   Úgroupbyri   rQ   ÚdequeÚchainÚiterr\   Úappendrg   r   )	r/   rf   rq   Úretr8   ÚcharsÚfirstrO   Úsepr   )rp   rl   r   Ú_collapse_string_to_ranges¶   s:    
 ÿ
  ÿÿr„   )Úllr*   c                 C   s6   g }| D ](}t |tƒr&| t|ƒ¡ q| |¡ q|S r6   )Ú
isinstanceÚlistÚextendÚ_flattenr   )r…   r€   Úir   r   r   r‰   ä   s    
r‰   )T)r   rG   rQ   rx   Ú	functoolsr   Útypingr   r   r   Úchrrc   r   Úintr   r0   r2   r4   r5   rM   rS   Údictr`   re   Úboolr„   r‡   r‰   r   r   r   r   Ú<module>   s2   	'	
 ÿ þ.