o
    9Fe                      @   sx  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
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	d*deeee f d edefd!d"Zd#e de fd$d%Z!d&ed'edefd(d)Z"dS )+    N)	lru_cachewraps)CallableListUnionIterableTypeVarcast\   C)Z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_namesZ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   .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   r   r   __annotations__r   r   classmethodr    ZenableZ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)r.   r/   sr   r   r   col'   s   Br6   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.
    r2   r   r1   )count)r.   r/   r   r   r   lineno8   s   r8   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.
    r2   r   r1   N)r4   find)r.   r/   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 r>   r   )r@   rA   r   cacher   r   set_Y      z&_UnboundedCache.__init__.<locals>.set_c                    s       d S r>   )clearr@   rG   r   r   rK   \   rJ   z'_UnboundedCache.__init__.<locals>.clear)rE   objectrD   sizetypes
MethodTypesetrK   )selfrE   rI   rK   r   )rH   rC   rD   r   __init__Q   s   z_UnboundedCache.__init__Nr   r'   r(   rS   r   r   r   r   r<   P       r<   c                   @   r;   )
_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                    r=   r>   r   r?   rB   r   r   rE   n   rF   z _FifoCache.__init__.<locals>.getc                    s*   | |< t }| d  ||< d S r>   )next)r@   rA   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>   )rK   rM   rL   )rH   r[   rN   r   r   rK   w   s   z"_FifoCache.__init__.<locals>.clear)rM   rD   rE   pop	itertoolscyclerangerN   rO   rP   rQ   rK   )rR   rN   rE   rI   rK   r   )rH   rC   rY   rZ   r[   rD   rN   r   rS   f   s   z_FifoCache.__init__NrT   r   r   r   r   rV   e   rU   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 | _t | _d S r>   )	_capacity_activecollectionsOrderedDict_memory)rR   Zcapacityr   r   r   rS      s   zLRUMemo.__init__c                 C   s6   z| j | W S  ty   | j| | j|  Y S w r>   )rb   KeyErrorre   move_to_endrR   rA   r   r   r   __getitem__   s   zLRUMemo.__getitem__c                 C   s   | j |d  || j|< d S r>   )re   r\   rb   rR   rA   r   r   r   r   __setitem__   s   zLRUMemo.__setitem__c                 C   sb   z| j |}W n
 ty   Y d S w t| j| jkr*| jjdd t| j| jks|| j|< d S )NF)last)rb   r\   rf   r3   re   ra   popitemrj   r   r   r   __delitem__   s   zLRUMemo.__delitem__c                 C   s   | j   | j  d S r>   )rb   rK   re   )rR   r   r   r   rK      s   
zLRUMemo.clearN)	r   r'   r(   r)   rS   ri   rk   rn   rK   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   rh   r   r   r   rn         zUnboundedMemo.__delitem__N)r   r'   r(   r)   rn   r   r   r   r   ro      s    ro   r5   c                 C   s:   dD ]
}|  |t| } q|  dd} |  dd} t| S )Nz\^-[]r2   z\n	z\t)replace_bslashr   )r5   cr   r   r   _escape_regex_range_chars   s
   ru   T	re_escapec           	         s  fddd_ t _d_dd  dd }|s| g }d	tt| } t| d
krztj	| dD ]C\}}t
| }}tjtt|g|dd }||kr[| | q5t|t|d krgd	nd}| | |  |  q5n	 fdd| D }d	|S )Nc                    s4   t | }| j _}|| dkrt j _ jS )Nr1   )ordprevrW   counterr   )rt   Zc_intrx   )is_consecutiver   r   rz      s
   z2_collapse_string_to_ranges.<locals>.is_consecutiver   c                 S   s   | dv rd|  S | S )Nz\^-][\r   rt   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   rp   z;_collapse_string_to_ranges.<locals>.no_escape_re_range_char r   )rA   r1   )maxlen-c                    s   g | ]} |qS r   r   ).0rt   )r~   r   r   
<listcomp>   s    z._collapse_string_to_ranges.<locals>.<listcomp>)rx   r]   r7   ry   r   joinsortedrQ   r3   groupbyrW   rc   dequechainiterr\   appendrw   )	r5   rv   r   retr@   charsfirstrl   sepr   )r~   rz   r   _collapse_string_to_ranges   s6   

r   llc                 C   s6   g }| D ]}t |tr|t| q|| q|S r>   )
isinstancelistextend_flattenr   )r   r   rX   r   r   r   r      s   
r   compat_namefnc                    s   t  d  dtt jd krt  fdd}n
t  fdd}d j d|_| |_ j|_t	 t
jrA j|_nt	 trQt d	rQ jj|_nd |_ j|_tt|S )
N__func__rR   r   c                    s    | g|R i |S r>   r   )rR   argskwargsr   r   r   _inner   s   z replaced_by_pep8.<locals>._innerc                     s    | i |S r>   r   )r   r   r   r   r   r     s   zDeprecated - use :class:``rS   )r   r   inspectZ	signatureZ
parametersr   r   r)   r*   r   rO   FunctionType__kwdefaults__typehasattrrS   r(   r	   r   )r   r   r   r   r   r   replaced_by_pep8   s    

r   )T)#r   r   rO   rc   r]   	functoolsr   r   typingr   r   r   r   r   r	   chrrs   r   r   intr   r6   r8   r:   r<   rV   r`   dictro   ru   boolr   r   r   r   r   r   r   r   <module>   s>    	'	

,
