o
    Zh2                  	   @   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
dededefddZed	d
dededefddZed	d
dededefddZG dd dZG dd dZG dd dZG dd deZdedefddZG dd  d Z	!d3de	ee
e f d"edefd#d$Zd%e
de fd&d'Z!	)d4d*e
e d+ed,edefd-d.Z"d/ed0edefd1d2Z#dS )5    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   sv   || j v r#tj| j d| d| j dtt| |  ddd d S || jv r0t	| || d S t
d| j d|)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   E/var/www/html/lang_env/lib/python3.10/site-packages/pyparsing/util.py_set   s   
,
z__config_flags._setc                 C      |  |dS )NTr!   r   namer   r   r    <lambda>#       z__config_flags.<lambda>c                 C   r"   )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 rn n
|| d  dkrd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)r2   r3   sr   r   r    col'   s   Br:   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.
    r6   r   r5   )count)r2   r3   r   r   r    lineno8   s   r<   c                 C   sB   | dd| }|d| }|dkr||d | S ||d d S )zh
    Returns the line of text containing loc within a string, counting newlines as line separators.
    r6   r   r5   N)r8   find)r2   r3   Zlast_crZnext_crr   r   r    lineF   s   (r>   c                   @      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 Nr   _key	cache_getnot_in_cacher   r    getV      
z%_UnboundedCache.__init__.<locals>.getc                    s   | |< d S rB   r   rD   rE   r   cacher   r    set_Y      z&_UnboundedCache.__init__.<locals>.set_c                           d S rB   clearrD   rL   r   r    rR   \   rO   z'_UnboundedCache.__init__.<locals>.clear)rI   objectrH   sizetypes
MethodTypesetrR   )selfrI   rN   rR   r   )rM   rG   rH   r    __init__Q   s   z_UnboundedCache.__init__Nr   r(   r)   rZ   r   r   r   r    r@   P       r@   c                   @   r?   )
_FifoCachec                    sz   i  | _ t  | _ j jfdd} fdd} fdd}t|| | _t|| | _t|| | _d S )Nc                    rA   rB   r   rC   rF   r   r    rI   m   rJ   z _FifoCache.__init__.<locals>.getc                    s8   | |< t  krtt  t  ks
d S d S rB   )r7   nextiterrK   )rM   	cache_poprU   r   r    rN   p   s   z!_FifoCache.__init__.<locals>.set_c                    rP   rB   rQ   rS   rL   r   r    rR   v   rO   z"_FifoCache.__init__.<locals>.clear)	rU   rT   rH   rI   poprV   rW   rX   rR   )rY   rU   rI   rN   rR   r   )rM   rG   r`   rH   rU   r    rZ   f   s   z_FifoCache.__init__Nr[   r   r   r   r    r]   e   r\   r]   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 rB   )	_capacity_active_memory)rY   capacityr   r   r    rZ      s   
zLRUMemo.__init__c                 C   s<   z| j | W S  ty   | j|| j|< | j|  Y S w rB   )rd   KeyErrorre   ra   rY   rE   r   r   r    __getitem__   s   zLRUMemo.__getitem__c                 C   s   | j |d  || j|< d S rB   )re   ra   rd   )rY   rE   r   r   r   r    __setitem__   s   zLRUMemo.__setitem__c                 C   sd   z| j |}W n
 ty   Y d S w t| jd | jd   }|D ]}| j| q"|| j|< d S Nr5   )rd   ra   rg   r+   re   rc   )rY   rE   r   Zoldest_keysZkey_to_deleter   r   r    __delitem__   s   zLRUMemo.__delitem__c                 C   s   | j   | j  d S rB   )rd   rR   re   rY   r   r   r    rR      s   
zLRUMemo.clearN)	r   r(   r)   r*   rZ   ri   rj   rl   rR   r   r   r   r    rb   ~   s    rb   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 rB   r   rh   r   r   r    rl         zUnboundedMemo.__delitem__N)r   r(   r)   r*   rl   r   r   r   r    rn      s    rn   r9   c                 C   s:   dD ]
}|  |t| } q|  dd} |  dd} t| S )Nz\^-[]r6   z\n	z\t)replace_bslashr   )r9   cr   r   r    _escape_regex_range_chars   s
   rt   c                   @   s*   e Zd ZdZdd Zdedef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   rm   r   r   r    rZ      s   

z_GroupConsecutive.__init__charr4   c                 C   s4   t |}|| j| _}|| dkrt| j| _| jS rk   )ordrw   r^   ry   r   )rY   rz   Zc_intrw   r   r   r    __call__   s
   z_GroupConsecutive.__call__N)r   r(   r)   r*   rZ   r   intr|   r   r   r   r    ru      s    ru   T	re_escapec           	   	      s$  dt dt fdd dt dt fdd}|s| g }tt| }t|dkrtj|t dD ]V\}}t| }}t	t
 |^ }}W d	   n1 sKw   Y  ||kr\| | q,|tt|d
 krt| |  |  q,| | d |  q,n	 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]'
    rs   r4   c                 S   s   | dv rd|  S | S )Nz\^-][\r   rs   r   r   r    escape_re_range_char   s   z8_collapse_string_to_ranges.<locals>.escape_re_range_charc                 S   s   | S rB   r   r   r   r   r    no_escape_re_range_char   ro   z;_collapse_string_to_ranges.<locals>.no_escape_re_range_char   rE   Nr5   -c                    s   g | ]} |qS r   r   ).0rs   r   r   r    
<listcomp>   s    z._collapse_string_to_ranges.<locals>.<listcomp> )r   sortedrX   r7   rx   groupbyru   r^   
contextlibsuppressr   appendchrr{   join)	r9   r~   r   retZs_charsrD   charsfirstlastr   r   r    _collapse_string_to_ranges   s,    
r   llc                 C   sN   g }g | }|r%| d}t|trt|ts||d d< n|| |s|S )Nr   )ra   
isinstancer   r   r   )r   r   Zto_visitir   r   r    _flatten%  s   

r   r   r5   	word_list	max_level_levelc                 C   s  dt t fdd}|dkrdt| tddS g }d}|t| D ]\}}|| d}d}d|v r9d	}|d t|d
krtdd |D rY|| dd| d|  q!||k rutt|||d
 }	|| d|	 d|  q!|j	tdd || dd| d|  q!|r|d }
t|
d
kr|r|| d|
 d|  q!|| |
 |  q!|| q!d|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   sp    t | dkr&tj| dd dD ]\}}|tdd |D t ddfV  qd S | d	 d	 | d	 dd  gfV  d S )
Nr5   c                 S   s   | d d S rk   r   )r9   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 r5   Nr   r   r9   r   r   r    r   ?  s    zQmake_compressed_re.<locals>.get_suffixes_from_common_prefixes.<locals>.<listcomp>TrE   reverser   )r7   rx   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   ?r5   c                 s   s    | ]	}t |d kV  qdS r   )r7   r   r   r   r    	<genexpr>R  s    z%make_compressed_re.<locals>.<genexpr>[]())
r+   r   r   r   r7   r   removeallmake_compressed_resort)r   r   r   r   r   sepinitialr   ZtrailingZ	suffix_resuffixr   r   r    r   1  s:   

""
r   compat_namefnc                    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rD j|_nt	 trTt d	rT jj|_nd |_ j|_tt|S )
N__func__rY   r5   c                    s    | g|R i |S rB   r   )rY   argskwargsr   r   r    _innert  s   z replaced_by_pep8.<locals>._innerc                     s    | i |S rB   r   )r   r   r   r   r    r   }  s   zDeprecated - use :class:``rZ   )r   r+   inspect	signature
parametersr   r   r*   r,   r   rV   FunctionType__kwdefaults__typehasattrrZ   r)   r   r
   )r   r   r   r   r   r    replaced_by_pep8i  s    

r   )T)r   r5   )$r   	functoolsr   r   r   rx   rV   typingr   r   r   r   r   r   r   rr   r
   r   r}   r   r:   r<   r>   r@   r]   rb   dictrn   rt   ru   boolr   r+   r   r   r   r   r   r   r    <module>   sT   	(		
T
8