a
    ÅZEg®2  ã                   @   s‚  d dl Z d dlmZmZ d dlZd dlZd dlZd dlmZm	Z	m
Z
mZmZ d dl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G dd„ dƒZd.e	ee
e f eed œd!d"„Ze
e d#œd$d%„Z!d/e
e eeed(œd)d*„Z"eeed+œd,d-„Z#dS )0é    N)Ú	lru_cacheÚwraps)ÚCallableÚ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 v rFtj| j› d|› d| j› dtt| |ƒƒ ¡ › d�dd� d S || jv 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   úG/var/www/sistema_ama/venv/lib/python3.9/site-packages/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   Úlistr   Ú__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   rH   r   r    rL   \   s    z'_UnboundedCache.__init__.<locals>.clear)rF   ÚobjectrE   ÚsizeÚtypesÚ
MethodTypeÚsetrL   )ÚselfrF   rJ   rL   r   )rI   rD   rE   r    Ú__init__Q   s    z_UnboundedCache.__init__N©r   r'   r(   rT   r   r   r   r    r>   P   s   r>   c                   @   s   e Zd Zdd„ ZdS )Ú
_FifoCachec                    sz   i ‰ ˆ| _ tƒ  | _‰ˆ j‰ˆ j‰‡‡fdd„}‡ ‡‡fdd„}‡ fdd„}t || ¡| _t || ¡| _t || ¡| _d S )Nc                    s
   ˆ |ˆƒS r?   r   r@   rC   r   r    rF   m   s    z _FifoCache.__init__.<locals>.getc                    s*   |ˆ |< t ˆ ƒˆkr&ˆttˆ ƒƒƒ qd S r?   )r6   ÚnextÚiterrG   )rI   Ú	cache_poprO   r   r    rJ   p   s    z!_FifoCache.__init__.<locals>.set_c                    s   ˆ   ¡  d S r?   rK   rM   rH   r   r    rL   v   s    z"_FifoCache.__init__.<locals>.clear)	rO   rN   rE   rF   ÚpoprP   rQ   rR   rL   )rS   rO   rF   rJ   rL   r   )rI   rD   rY   rE   rO   r    rT   f   s    z_FifoCache.__init__NrU   r   r   r   r    rV   e   s   rV   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 | _i | _d S r?   )Ú	_capacityÚ_activeÚ_memory)rS   Úcapacityr   r   r    rT   †   s    zLRUMemo.__init__c                 C   s@   z| j | W S  ty:   | j |¡| j|< | j|  Y S 0 d S r?   )r]   ÚKeyErrorr^   rZ   ©rS   rB   r   r   r    Ú__getitem__‹   s
    zLRUMemo.__getitem__c                 C   s   | j  |d ¡ || j|< d S r?   )r^   rZ   r]   )rS   rB   r   r   r   r    Ú__setitem__’   s    zLRUMemo.__setitem__c                 C   sb   z| j  |¡}W n ty"   Y n<0 t| jƒd | jd  … }|D ]}| j |¡ qB|| j|< d S ©Nr4   )r]   rZ   r`   r*   r^   r\   )rS   rB   r   Zoldest_keysZkey_to_deleter   r   r    Ú__delitem__–   s    zLRUMemo.__delitem__c                 C   s   | j  ¡  | j ¡  d S r?   )r]   rL   r^   ©rS   r   r   r    rL   ¡   s    
zLRUMemo.clearN)	r   r'   r(   r)   rT   rb   rc   re   rL   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   ra   r   r   r    re   «   s    zUnboundedMemo.__delitem__N)r   r'   r(   r)   re   r   r   r   r    rg   ¦   s   rg   )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
    rl   c                   @   s(   e Zd ZdZdd„ Zeedœdd„ZdS )Ú_GroupConsecutiveaQ  
    Used as a callable `key` for itertools.groupby to group
    characters that are consecutive:
        itertools.groupby("abcdejkmpqrs", key=IsConsecutive())
        yields:
            (0, iter(['a', 'b', 'c', 'd', 'e']))
            (1, iter(['j', 'k']))
            (2, iter(['m']))
            (3, iter(['p', 'q', 'r', 's']))
    c                 C   s   d| _ t ¡ | _d| _d S )Nr   éÿÿÿÿ)ÚprevÚ	itertoolsr:   Úcounterr   rf   r   r   r    rT   Ã   s    
z_GroupConsecutive.__init__)Úcharr3   c                 C   s4   t |ƒ}|| j | _}|| dkr.t| jƒ| _| jS rd   )Úordro   rW   rq   r   )rS   rr   Úc_intro   r   r   r    Ú__call__È   s
    z_GroupConsecutive.__call__N)r   r'   r(   r)   rT   r   Úintru   r   r   r   r    rm   ¸   s   
rm   T)r8   Ú	re_escaper3   c           	   	      s"  t t dœdd„‰ t t dœdd„}|s(|‰ g }tt| ƒƒ}t|ƒdk�rtj|tƒ d�D ]¬\}}t|ƒ }}t 	t
¡� |�^ }}W d  ƒ n1 s”0    Y  ||kr¶| ˆ |ƒ¡ qV|tt|ƒd	 ƒkræ| ˆ |ƒ› ˆ |ƒ› �¡ qV| ˆ |ƒ› d
ˆ |ƒ› �¡ qVn‡ fdd„|D ƒ}d |¡S )a  
    Take a string or list of single-character strings, and return
    a string of the consecutive characters in that string collapsed
    into groups, as might be used in a regular expression '[a-z]'
    character set:
        'a' -> 'a' -> '[a]'
        'bc' -> 'bc' -> '[bc]'
        'defgh' -> 'd-h' -> '[d-h]'
        'fdgeh' -> 'd-h' -> '[d-h]'
        'jklnpqrtu' -> 'j-lnp-rtu' -> '[j-lnp-rtu]'
    Duplicates get collapsed out:
        'aaa' -> 'a' -> '[a]'
        'bcbccb' -> 'bc' -> '[bc]'
        'defghhgf' -> 'd-h' -> '[d-h]'
        'jklnpqrjjjtu' -> 'j-lnp-rtu' -> '[j-lnp-rtu]'
    Spaces are preserved:
        'ab c' -> ' a-c' -> '[ a-c]'
    Characters that are significant when defining regex ranges
    get escaped:
        'acde[]-' -> r'\-\[\]ac-e' -> r'[\-\[\]ac-e]'
    )rk   r3   c                 S   s   | dv rd|  S | S )Nz\^-][ú\r   ©rk   r   r   r    Úescape_re_range_charð   s    z8_collapse_string_to_ranges.<locals>.escape_re_range_charc                 S   s   | S r?   r   ry   r   r   r    Úno_escape_re_range_charó   s    z;_collapse_string_to_ranges.<locals>.no_escape_re_range_charé   ©rB   Nr4   ú-c                    s   g | ]}ˆ |ƒ‘qS r   r   )Ú.0rk   ©rz   r   r    Ú
<listcomp>  r&   z._collapse_string_to_ranges.<locals>.<listcomp>Ú )r   ÚsortedrR   r6   rp   Úgroupbyrm   rW   Ú
contextlibÚsuppressr   ÚappendÚchrrs   Újoin)	r8   rw   r{   ÚretZs_charsrA   ÚcharsÚfirstÚlastr   r€   r    Ú_collapse_string_to_rangesÐ   s(     (ÿ
rŽ   )Úllr3   c                 C   sL   g }g | ¢}|rH|  d¡}t|tƒr<t|tƒs<||d d…< q| |¡ q|S )Nr   )rZ   Ú
isinstancer   r   r‡   )r�   rŠ   Zto_visitÚir   r   r    Ú_flatten$  s    
r’   r|   r4   )Ú	word_listÚ	max_levelÚ_levelr3   c                 C   sŠ  t t dœdd„}|dkr.d t| tdd�¡S g }d}|t| ƒƒD �]:\}}| |¡ d}d}d|v rtd	}| d¡ t|ƒd
k�rtdd„ |D ƒƒr¶| |› dd |¡› d|› �¡ nf||k rîtt|ƒ||d
 ƒ}	| |› d|	› d|› �¡ n.|j	tdd� | |› dd |¡› d|› �¡ qB|�rt|d }
t|
ƒd
k�r\|�r\| |› d|
› d|› �¡ n| |› |
› |› �¡ qB| |¡ qBd |¡S )zì
    Create a regular expression string from a list of words, collapsing by common
    prefixes and optional suffixes.

    Calls itself recursively to build nested sublists for each group of suffixes
    that have a shared prefix.
    )Únamelistc                 s   sl   t | ƒdkrHtj| dd„ d�D ]&\}}|tdd„ |D ƒt dd�fV  qn | d	 d	 | d	 dd … gfV  d S )
Nr4   c                 S   s   | d d… S rd   r   )r8   r   r   r    r%   =  r&   zOmake_compressed_re.<locals>.get_suffixes_from_common_prefixes.<locals>.<lambda>r}   c                 S   s   g | ]}|d d… ‘qS ©r4   Nr   ©r   r8   r   r   r    r�   >  r&   zQmake_compressed_re.<locals>.get_suffixes_from_common_prefixes.<locals>.<listcomp>T©rB   Úreverser   )r6   rp   r„   rƒ   )r–   ÚprefixÚsuffixesr   r   r    Ú!get_suffixes_from_common_prefixes;  s    "z=make_compressed_re.<locals>.get_suffixes_from_common_prefixesr   ú|Tr™   r‚   ú?r4   c                 s   s   | ]}t |ƒd kV  qdS r—   )r6   r˜   r   r   r    Ú	<genexpr>Q  r&   z%make_compressed_re.<locals>.<genexpr>ú[ú]ú(ú))
r*   r   r‰   rƒ   r6   r‡   ÚremoveÚallÚmake_compressed_reÚsort)r“   r”   r•   r�   rŠ   ÚsepÚinitialrœ   ZtrailingZ	suffix_reÚsuffixr   r   r    r§   0  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ƒr¨tˆ d	ƒr¨ˆ jj|_nd |_ˆ j|_tt|ƒS )
NÚ__func__rS   r4   c                    s   ˆ | g|¢R i |¤ŽS r?   r   )rS   ÚargsÚkwargs©r­   r   r    Ú_inners  s    z replaced_by_pep8.<locals>._innerc                     s   ˆ | i |¤ŽS r?   r   )r¯   r°   r±   r   r    r²   |  s    zDeprecated - use :class:`ú`rT   )r   r*   ÚinspectÚ	signatureÚ
parametersr   r   r)   r+   r�   rP   ÚFunctionTypeÚ__kwdefaults__ÚtypeÚhasattrrT   r(   r   r
   )r¬   r­   r²   r   r±   r    Úreplaced_by_pep8h  s     
r»   )T)r|   r4   )$r…   Ú	functoolsr   r   r´   rp   rP   Útypingr   r   r   r   r   r   rˆ   rj   r
   r   rv   r   r9   r;   r=   r>   rV   r[   Údictrg   rl   rm   ÚboolrŽ   r*   r’   r§   r»   r   r   r   r    Ú<module>   sB   	(		 ÿþT ÿ
þ8