o
    Ȑi8                     @   s  d dl Z 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	!d5de
eee f d"edefd#d$Z d%ede!fd&d'Z"	(d6d!d)d*d+ee d,ed-ed.edef
d/d0Z#d1ed2edefd3d4Z$dS )7    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)clsdnamevalue r    ]/var/www/html/eduruby.in/lip-sync/lip-sync-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
    :meth:`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)r3   r4   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 :meth:`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.
    r7   r   r6   )count)r3   r4   r    r    r!   lineno9   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.
    r7   r   r6   N)r9   find)r3   r4   last_crnext_crr    r    r!   lineG   s   (rA   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!   getW      
z%_UnboundedCache.__init__.<locals>.getc                    s   | |< d S rE   r    rG   rH   r   cacher    r!   set_Z      z&_UnboundedCache.__init__.<locals>.set_c                           d S rE   clearrG   rO   r    r!   rU   ]   rR   z'_UnboundedCache.__init__.<locals>.clear)rL   objectrK   sizetypes
MethodTypesetrU   )selfrL   rQ   rU   r    )rP   rJ   rK   r!   __init__R   s   z_UnboundedCache.__init__Nr   r)   r*   r]   r    r    r    r!   rC   Q       rC   c                   @   rB   )
_FifoCachec                    sz   i  | _ t  | _ j jfdd} fdd} fdd}t|| | _t|| | _t|| | _d S )Nc                    rD   rE   r    rF   rI   r    r!   rL   n   rM   z _FifoCache.__init__.<locals>.getc                    s8   | |< t  krtt  t  ks
d S d S rE   )r8   nextiterrN   )rP   	cache_poprX   r    r!   rQ   q   s   z!_FifoCache.__init__.<locals>.set_c                    rS   rE   rT   rV   rO   r    r!   rU   w   rR   z"_FifoCache.__init__.<locals>.clear)	rX   rW   rK   rL   poprY   rZ   r[   rU   )r\   rX   rL   rQ   rU   r    )rP   rJ   rc   rK   rX   r!   r]   g   s   z_FifoCache.__init__Nr^   r    r    r    r!   r`   f   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 rE   )	_capacity_active_memory)r\   capacityr    r    r!   r]      s   
zLRUMemo.__init__c                 C   s<   z| j | W S  ty   | j|| j|< | j|  Y S w rE   )rg   KeyErrorrh   rd   r\   rH   r    r    r!   __getitem__   s   zLRUMemo.__getitem__c                 C   s   | j |d  || j|< d S rE   )rh   rd   rg   )r\   rH   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 Nr6   )rg   rd   rj   r,   rh   rf   )r\   rH   r   Zoldest_keysZkey_to_deleter    r    r!   __delitem__   s   zLRUMemo.__delitem__c                 C   s   | j   | j  d S rE   )rg   rU   rh   r\   r    r    r!   rU      s   
zLRUMemo.clearN)	r   r)   r*   r+   r]   rl   rm   ro   rU   r    r    r    r!   re      s    re   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 rE   r    rk   r    r    r!   ro         zUnboundedMemo.__delitem__N)r   r)   r*   r+   ro   r    r    r    r!   rq      s    rq   r:   c                 C   s:   dD ]
}|  |t| } q|  dd} |  dd} t| S )Nz\^-[]r7   z\n	z\t)replace_bslashr   )r:   cr    r    r!   _escape_regex_range_chars   s
   rw   c                   @   s,   e Zd ZdZd	ddZdedefddZdS )
_GroupConsecutivea  
    Used as a callable `key` for itertools.groupby to group
    characters that are consecutive:
    
    .. testcode::

       from itertools import groupby
       from pyparsing.util import _GroupConsecutive

       grouped = groupby("abcdejkmpqrs", key=_GroupConsecutive())
       for index, group in grouped:
           print(tuple([index, list(group)]))

    prints:

    .. testoutput::

       (0, ['a', 'b', 'c', 'd', 'e'])
       (1, ['j', 'k'])
       (2, ['m'])
       (3, ['p', 'q', 'r', 's'])
    r5   Nc                 C   s   d| _ t | _d| _d S )Nr   )prev	itertoolsr<   counterr   rp   r    r    r!   r]      s   

z_GroupConsecutive.__init__charc                 C   s4   t |}|| j| _}|| dkrt| j| _| jS rn   )ordrz   ra   r|   r   )r\   r}   c_intrz   r    r    r!   __call__   s
   z_GroupConsecutive.__call__)r5   N)r   r)   r*   r+   r]   r   intr   r    r    r    r!   rx      s    
rx   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]'
    rv   r5   c                 S   s   | dv rd|  S | S )Nz\^-][\r    rv   r    r    r!   escape_re_range_char  s   z8_collapse_string_to_ranges.<locals>.escape_re_range_charc                 S   s   | S rE   r    r   r    r    r!   no_escape_re_range_char  rr   z;_collapse_string_to_ranges.<locals>.no_escape_re_range_char   rH   Nr6   -c                    s   g | ]} |qS r    r    ).0rv   r   r    r!   
<listcomp>4  s    z._collapse_string_to_ranges.<locals>.<listcomp> )r   sortedr[   r8   r{   groupbyrx   ra   
contextlibsuppressr   appendchrr~   join)	r:   r   r   retZs_charsrG   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   )rd   
isinstancer   r   r   )r   r   Zto_visitir    r    r!   _flatten9  s   

r   r   r6   non_capturing_groups_level	word_list	max_levelr   r   c             
   C   sz  dt t fdd}|dkr| stdd| v rtdn| s dS t i | } |dkrQtd	d
 | D rCdtdd | D tddS dddd
 | D  dS g }d}|rYdnd}|t| D ]\}}	|| d}t	
|}d}
d|	v r~d}
|	d t|	dkrtdd
 |	D r|| dddd
 |	D  d|
  qa||k rtt|	|||d d}|| d| | d|
  qatdd
 |	D r|| dddd
 |	D  d|
  qa|	jtdd || d| ddd
 |	D  d|
  qa|	r2t	
|	d }t|dkr&|
r&|| d| | d|
  qa|| | |
  qa|| qad|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 )
Nr6   c                 S   s   | d d S rn   r    )r:   r    r    r!   r'   V  r(   zOmake_compressed_re.<locals>.get_suffixes_from_common_prefixes.<locals>.<lambda>r   c                 S   s   g | ]}|d d qS r6   Nr    r   r:   r    r    r!   r   W  s    zQmake_compressed_re.<locals>.get_suffixes_from_common_prefixes.<locals>.<listcomp>TrH   reverser   )r8   r{   r   r   )r   prefixsuffixesr    r    r!   !get_suffixes_from_common_prefixesT  s    $z=make_compressed_re.<locals>.get_suffixes_from_common_prefixesr6   z&no words given to make_compressed_re()r   z%word list cannot contain empty stringr   c                 s   s    | ]	}t |d kV  qdS r   r8   r   wdr    r    r!   	<genexpr>j      z%make_compressed_re.<locals>.<genexpr>|c                 S   s   g | ]}t |qS r    reescaper   r    r    r!   r   l  s    z&make_compressed_re.<locals>.<listcomp>Tr   [c                 s       | ]}t |V  qd S rE   rw   r   r    r    r!   r   o      ]z?:?c                 s       | ]	}t |d kV  qdS r   r   r   r    r    r!   r     r   c                 s   r   rE   r   r   r    r    r!   r     r   r   ()c                 s   r   r   r   r   r    r    r!   r     r   c                 s   r   rE   r   r   r    r    r!   r     r   c                 s   s    | ]}t |V  qd S rE   r   r   r    r    r!   r     s    )r,   r   r   fromkeysanyr   r   r8   r   r   r   removeallmake_compressed_resort)r   r   r   r   r   r   sepZncgroupinitialr   ZtrailingZ	suffix_resuffixr    r    r!   r   E  sn   


" "& 
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__r\   r6   c                    s    | g|R i |S rE   r    )r\   argskwargsr   r    r!   _inner  s   z replaced_by_pep8.<locals>._innerc                     s    | i |S rE   r    )r   r   r   r    r!   r     s   z6
        .. deprecated:: 3.0.0
           Use :class:`z` instead
        r]   )r   r,   inspect	signature
parametersr   r   r+   r-   r   rY   FunctionType__kwdefaults__typehasattrr]   r*   r   r
   )r   r   r   r    r   r!   replaced_by_pep8  s$   


r   )T)r   )%r   r   	functoolsr   r   r   r{   rY   typingr   r   r   r   r   r   r   ru   r
   r   r   r   r;   r=   rA   rC   r`   re   dictrq   rw   rx   boolr   r,   r   r   r   r    r    r    r!   <module>   s`   	(		&
[
_