o
    ë6Wj}>  ã                   @   sJ  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mZ d dlZddl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 G d!d"„ d"ƒZ!ee"fe#fd#d$„Z$d%edefd&d'„Z%	(dGd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fd/d0„Z*	1dHd(dd2œd3ee d4ed5e&d6edef
d7d8„Z+d9ed:edefd;d<„Z,e -d=¡fdedefd>d?„Z.	dId@dAœdBeeef dCedDedefdEdF„Z/dS )Jé    N)Ú	lru_cacheÚwraps)ÚCallableÚUnionÚIterableÚTypeVarÚcastÚAnyé   )ÚPyparsingDeprecationWarningÚPyparsingDiagnosticWarningé\   Ú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 r$tj| j› d|› d| j› dtt| |ƒƒ ¡ › d�tdd� d S || j	v r1t
| ||ƒ 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   r   ÚsetattrÚ
ValueError)ÚclsÚdnameÚvalue© r%   ú]/home/esfera/Documents/content_generation/venv/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   r
   Ú
)ÚlenÚrfind)r8   r9   Ú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.
    r;   r   r
   )Úcount)r8   r9   r%   r%   r&   Úlineno<   s   rA   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.
    r;   r   r
   N)r=   Úfind)r8   r9   Úlast_crÚnext_crr%   r%   r&   ÚlineJ   s   (rE   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&   ÚgetZ   ó   
z%_UnboundedCache.__init__.<locals>.getc                    s   |ˆ |< d S rI   r%   ©rK   rL   r$   ©Úcacher%   r&   Úset_]   ó   z&_UnboundedCache.__init__.<locals>.set_c                    ó   ˆ   ¡  d S rI   ©Úclear©rK   rS   r%   r&   rY   `   rV   z'_UnboundedCache.__init__.<locals>.clear)rP   ÚobjectrO   ÚsizeÚtypesÚ
MethodTypeÚsetrY   )ÚselfrP   rU   rY   r%   )rT   rN   rO   r&   Ú__init__U   s   z_UnboundedCache.__init__N©r   r.   r/   ra   r%   r%   r%   r&   rG   T   ó    rG   c                   @   rF   )Ú
_FifoCachec                    sz   i ‰ ˆ| _ tƒ  | _‰ˆ j‰ˆ j‰‡‡fdd„}‡ ‡‡fdd„}‡ fdd„}t || ¡| _t || ¡| _t || ¡| _d S )Nc                    rH   rI   r%   rJ   rM   r%   r&   rP   q   rQ   z _FifoCache.__init__.<locals>.getc                    s8   |ˆ |< t ˆ ƒˆkrˆttˆ ƒƒƒ t ˆ ƒˆks
d S d S rI   )r<   ÚnextÚiterrR   )rT   Ú	cache_popr\   r%   r&   rU   t   s   þz!_FifoCache.__init__.<locals>.set_c                    rW   rI   rX   rZ   rS   r%   r&   rY   z   rV   z"_FifoCache.__init__.<locals>.clear)	r\   r[   rO   rP   Úpopr]   r^   r_   rY   )r`   r\   rP   rU   rY   r%   )rT   rN   rg   rO   r\   r&   ra   j   s   z_FifoCache.__init__Nrb   r%   r%   r%   r&   rd   i   rc   rd   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 rI   )Ú	_capacityÚ_activeÚ_memory)r`   Úcapacityr%   r%   r&   ra   Š   s   
zLRUMemo.__init__c                 C   s<   z| j | W S  ty   | j |¡| j|< | j|  Y S w rI   )rk   ÚKeyErrorrl   rh   ©r`   rL   r%   r%   r&   Ú__getitem__�   s   þzLRUMemo.__getitem__c                 C   s   | j  |d ¡ || j|< d S rI   )rl   rh   rk   )r`   rL   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 ©Nr
   )rk   rh   rn   r1   rl   rj   )r`   rL   r$   Úoldest_keysÚkey_to_deleter%   r%   r&   Ú__delitem__š   s   ÿzLRUMemo.__delitem__c                 C   s   | j  ¡  | j ¡  d S rI   )rk   rY   rl   ©r`   r%   r%   r&   rY   ¥   s   
zLRUMemo.clearN)	r   r.   r/   r0   ra   rp   rq   ru   rY   r%   r%   r%   r&   ri   ‚   s    ri   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 rI   r%   ro   r%   r%   r&   ru   ¯   s   zUnboundedMemo.__delitem__N)r   r.   r/   r0   ru   r%   r%   r%   r&   rw   ª   s    rw   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
   r|   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'])
    r:   Nc                 C   s   d| _ t ¡ | _d| _d S )Nr   éÿÿÿÿ)ÚprevÚ	itertoolsr@   Úcounterr$   rv   r%   r%   r&   ra   Ô   s   

z_GroupConsecutive.__init__Úcharc                 C   s4   t |ƒ}|| j| _}|| dkrt| jƒ| _| jS rr   )Úordr   re   r�   r$   )r`   r‚   Úc_intr   r%   r%   r&   Ú__call__Ù   s
   z_GroupConsecutive.__call__)r:   N)r   r.   r/   r0   ra   r   Úintr…   r%   r%   r%   r&   r}   ¼   s    
r}   c                 C   s2   t | |ƒrdS zt| ƒ W dS  |y   Y dS w )NFT)Ú
isinstancerf   )ÚobjÚ	_str_typeÚ_iter_exceptionr%   r%   r&   Ú_is_iterableá   s   

ýÿr‹   r{   c                 C   s   | dv r	d| › �S | S )Nz\^-][ú\r%   )r{   r%   r%   r&   Ú_escape_re_range_charî   s   r�   TÚ	re_escapec              	      s
  |rt ‰ ndd„ ‰ g }tt| ƒƒ}t|ƒdkrwtj|tƒ d�D ]V\}}t|ƒ }}t 	t
¡� |�^ }}W d  ƒ n1 s>w   Y  ||krO| ˆ |ƒ¡ q|tt|ƒd ƒkrg| ˆ |ƒ› ˆ |ƒ› �¡ 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]'
    c                 S   s   | S rI   r%   )Ússr%   r%   r&   r,     s    z,_collapse_string_to_ranges.<locals>.<lambda>é   ©rL   Nr
   ú-c                    s   g | ]}ˆ |ƒ‘qS r%   r%   )Ú.0r{   ©Úescape_re_range_charr%   r&   Ú
<listcomp>E  s    z._collapse_string_to_ranges.<locals>.<listcomp>Ú )r�   Úsortedr_   r<   r€   Úgroupbyr}   re   Ú
contextlibÚsuppressr!   ÚappendÚchrrƒ   Újoin)r>   rŽ   ÚretÚs_charsrK   ÚcharsÚfirstÚlastr%   r”   r&   Ú_collapse_string_to_rangesò   s*   (ÿÿì
r¤   Úllc                 C   sL   g }| D ]}t |tƒr| |¡ qt |tƒr| t|ƒ¡ q| |¡ q|S rI   )r‡   r   rœ   r   ÚextendÚ_flatten)r¥   rŸ   Úir%   r%   r&   r§   J  s   

r§   c                 C   sR   | dkrdS |   ¡ rt| ƒdkrtt| dƒƒS |  d¡r'tt| dd … dƒƒS | S )NÚ0ú r   é   )ÚuÚxr
   é   )Úisdigitr<   r�   r†   Ú
startswith©r>   r%   r%   r&   Ú!_convert_escaped_numerics_to_charY  s   
r²   r�   ©Ú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 rÄt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 )
Nr
   c                 S   s   | d d… S rr   r%   r±   r%   r%   r&   r,   t  r-   zOmake_compressed_re.<locals>.get_suffixes_from_common_prefixes.<locals>.<lambda>r‘   c                 S   s   g | ]}|d d… ‘qS ©r
   Nr%   ©r“   r>   r%   r%   r&   r–   u  s    zQmake_compressed_re.<locals>.get_suffixes_from_common_prefixes.<locals>.<listcomp>T©rL   Úreverser   )r<   r€   r™   r˜   )r¸   ÚprefixÚsuffixesr%   r%   r&   Ú!get_suffixes_from_common_prefixesr  s   € ÿ$z=make_compressed_re.<locals>.get_suffixes_from_common_prefixesr
   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¹   ©r<   ©r“   Úwdr%   r%   r&   Ú	<genexpr>ˆ  ó   € z%make_compressed_re.<locals>.<genexpr>ú|c                 S   s   g | ]}t  |¡‘qS r%   ©ÚreÚescaperÁ   r%   r%   r&   r–   Š  s    z&make_compressed_re.<locals>.<listcomp>Tr»   ú[c                 s   ó   � | ]}t |ƒV  qd S rI   ©r|   rÁ   r%   r%   r&   rÃ   �  ó   € ú]z?:ú?c                 s   ó   � | ]	}t |ƒd kV  qdS r¹   rÀ   rº   r%   r%   r&   rÃ   Ÿ  rÄ   c                 s   rÊ   rI   rË   rº   r%   r%   r&   rÃ   ¡  rÌ   r³   ú(ú)c                 s   rÏ   r¹   rÀ   rº   r%   r%   r&   rÃ   ­  rÄ   c                 s   rÊ   rI   rË   rº   r%   r%   r&   rÃ   ¯  rÌ   c                 s   s   � | ]}t  |¡V  qd S rI   rÆ   rº   r%   r%   r&   rÃ   ´  s   € )r1   r   r!   ÚfromkeysÚanyrž   r˜   r<   rœ   rÇ   rÈ   ÚremoveÚallÚmake_compressed_reÚsort)r¶   r·   r´   rµ   r¿   rŸ   ÚsepÚncgroupÚinitialr¾   ÚtrailingÚ	suffix_reÚsuffixr%   r%   r&   rÖ   c  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ƒrFˆj|_nt	ˆtƒrVtˆd	ƒrVˆjj|_nd |_ˆj|_tt|ƒS )
NÚ__func__r`   r
   c                    s2   t jˆ ›dˆj›�tdd� ˆ| g|¢R i |¤ŽS ©Nz deprecated - use r�   r   ©r   r   r   r   )r`   ÚargsÚkwargs©rÞ   rß   r%   r&   Ú_innerË  s   ýz replaced_by_pep8.<locals>._innerc                     s*   t jˆ ›dˆj›�tdd� ˆ| i |¤ŽS rá   râ   )rã   rä   rå   r%   r&   ræ   Ö  s   ýz6
        .. deprecated:: 3.0.0
           Use :class:`z` instead
        ra   )r   r1   ÚinspectÚ	signatureÚ
parametersr   r   r0   r2   r‡   r]   ÚFunctionTypeÚ__kwdefaults__ÚtypeÚhasattrra   r/   r   r   )rÞ   rß   ræ   r%   rå   r&   Úreplaced_by_pep8Â  s$   

þ

rî   z([a-z])([A-Z])c                 C   s   |  d| ¡} |  ¡ S )Nz\1_\2)ÚsubÚlower)r>   Ú_re_sub_patternr%   r%   r&   Ú_to_pep8_nameï  s   rò   r—   )Únew_namerä   Úarg_nameró   c                C   sF   || v r|p	t |ƒ}tj|›d|›�tdd� | | S || |< | | S )Nz argument is deprecated, use r   )Úcategoryr   )rò   r   r   r   )rä   rô   Údefault_valueró   r%   r%   r&   Údeprecate_argumentô  s   ýþr÷   )T)r�   rI   )0rš   rÇ   Ú	functoolsr   r   rç   r€   r]   Útypingr   r   r   r   r   r	   r   r   r   r�   rz   r   r   r†   r   r?   rA   rE   rG   rd   ri   Údictrw   r|   r}   ÚbytesÚ	Exceptionr‹   r�   Úboolr¤   r1   r§   r²   rÖ   rî   Úcompilerò   r÷   r%   r%   r%   r&   Ú<module>   s‚    	(		%ÿÿÿ
þXþûÿþüû
ú_-ÿÿ
ÿÿÿþ