a
    hbòf•  ã                   @   s(  d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	 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d"eee	e f eedœdd„Zeedœd d!„ZdS )#é    N)Ú	lru_cache)ÚListÚUnionÚIterableé\   c                   @   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   sd   || j v r6t d | j|| jtt| |ƒƒ ¡ ¡¡ d S || j	v rNt
| ||ƒ ntd | j|¡ƒ‚d S )Nz'{}.{} {} is {} and cannot be overriddenzno such {} {!r})r	   ÚwarningsÚwarnÚformatÚ__name__Ú
_type_descÚstrÚgetattrÚupperr   ÚsetattrÚ
ValueError)ÚclsÚdnameÚvalue© r   úW/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pip/_vendor/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   r   r   Ú__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.parseString` 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    r1   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.parseString`
    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)r)   r*   r   r   r   Úlineno9   s    r3   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.
    r-   r   r,   N)r/   Úfind)r)   r*   Úlast_crÚnext_crr   r   r   ÚlineG   s    r7   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   ÚgetW   s    z%_UnboundedCache.__init__.<locals>.getc                    s   |ˆ |< d S r9   r   ©r;   r<   r   ©Úcacher   r   Úset_Z   s    z&_UnboundedCache.__init__.<locals>.set_c                    s   ˆ   ¡  d S r9   ©Úclear©r;   rB   r   r   rF   ]   s    z'_UnboundedCache.__init__.<locals>.clear)r@   Úobjectr?   ÚsizeÚtypesÚ
MethodTypeÚsetrF   )Úselfr@   rD   rF   r   )rC   r>   r?   r   Ú__init__R   s    z_UnboundedCache.__init__N©r   r    r!   rN   r   r   r   r   r8   Q   s   r8   c                   @   s   e Zd Zdd„ ZdS )Ú
_FifoCachec                    sv   t ƒ  | _‰t ¡ ‰ ˆ j‰‡‡fdd„}‡ ‡fdd„}‡ fdd„}ˆ| _t || ¡| _t || ¡| _t || ¡| _	d S )Nc                    s
   ˆ |ˆƒS r9   r   r:   r=   r   r   r@   l   s    z _FifoCache.__init__.<locals>.getc                    s&   |ˆ |< t ˆ ƒˆkr"ˆ jdd� qd S ©NF)Úlast)r.   ÚpopitemrA   )rC   rI   r   r   rD   o   s    z!_FifoCache.__init__.<locals>.set_c                    s   ˆ   ¡  d S r9   rE   rG   rB   r   r   rF   t   s    z"_FifoCache.__init__.<locals>.clear)
rH   r?   ÚcollectionsÚOrderedDictr@   rI   rJ   rK   rL   rF   )rM   rI   r@   rD   rF   r   )rC   r>   r?   rI   r   rN   g   s    z_FifoCache.__init__NrO   r   r   r   r   rP   f   s   rP   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 r9   )Ú	_capacityÚ_activerT   rU   Ú_memory)rM   Úcapacityr   r   r   rN   …   s    zLRUMemo.__init__c                 C   s:   z| j | W S  ty4   | j |¡ | j|  Y S 0 d S r9   )rX   ÚKeyErrorrY   Úmove_to_end©rM   r<   r   r   r   Ú__getitem__Š   s
    zLRUMemo.__getitem__c                 C   s   | j  |d ¡ || j|< d S r9   )rY   ÚpoprX   ©rM   r<   r   r   r   r   Ú__setitem__‘   s    zLRUMemo.__setitem__c                 C   sR   z| j  |¡}W n ty"   Y n,0 t| jƒ| jkrD| jjdd� q$|| j|< d S rQ   )rX   r_   r[   r.   rY   rW   rS   r`   r   r   r   Ú__delitem__•   s    zLRUMemo.__delitem__c                 C   s   | j  ¡  | j ¡  d S r9   )rX   rF   rY   )rM   r   r   r   rF   Ÿ   s    
zLRUMemo.clearN)	r   r    r!   r"   rN   r^   ra   rb   rF   r   r   r   r   rV   }   s   
rV   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 r9   r   r]   r   r   r   rb   ©   s    zUnboundedMemo.__delitem__N)r   r    r!   r"   rb   r   r   r   r   rc   ¤   s   rc   )r0   r+   c                 C   s:   dD ]}|   |t| ¡} q|   dd¡} |   dd¡} t| ƒS )Nz\^-[]r-   z\nú	z\t)ÚreplaceÚ_bslashr   )r0   Úcr   r   r   Ú_escape_regex_range_chars­   s
    rh   T)r0   Ú	re_escaper+   c           	   	      s  ‡fdd„‰dˆ_ t ¡ ˆ_dˆ_dd„ ‰ dd„ }|s:|‰ g }d	 tt| ƒƒ¡} t| ƒd
kròtj	| ˆd�D ]„\}}t
|ƒ }}tjt t|gƒ|¡dd� ¡ }||kr¶| ˆ |ƒ¡ qjt|ƒt|ƒd krÎd	nd}| d ˆ |ƒ|ˆ |ƒ¡¡ qjn‡ fdd„| D ƒ}d	 |¡S )Nc                    s4   t | ƒ}|ˆ j ˆ _}|| dkr.tˆ jƒˆ _ˆ jS )Nr,   )ÚordÚprevÚnextÚcounterr   )rg   Úc_intrk   )Úis_consecutiver   r   ro   ¹   s
    z2_collapse_string_to_ranges.<locals>.is_consecutiver   éÿÿÿÿc                 S   s   | dv rd|  S | S )Nz\^-][ú\r   ©rg   r   r   r   Úescape_re_range_charÄ   s    z8_collapse_string_to_ranges.<locals>.escape_re_range_charc                 S   s   | S r9   r   rr   r   r   r   Úno_escape_re_range_charÇ   s    z;_collapse_string_to_ranges.<locals>.no_escape_re_range_charÚ é   )r<   r,   )Úmaxlenú-z{}{}{}c                    s   g | ]}ˆ |ƒ‘qS r   r   )Ú.0rg   )rs   r   r   Ú
<listcomp>ß   r   z._collapse_string_to_ranges.<locals>.<listcomp>)rk   Ú	itertoolsr2   rm   r   ÚjoinÚsortedrL   r.   Úgroupbyrl   rT   ÚdequeÚchainÚiterr_   Úappendrj   r   )	r0   ri   rt   Úretr;   ÚcharsÚfirstrR   Úsepr   )rs   ro   r   Ú_collapse_string_to_ranges¶   s4    
ÿ
ÿÿr‡   )Úllr+   c                 C   s6   g }| D ](}t |tƒr&| t|ƒ¡ q| |¡ q|S r9   )Ú
isinstanceÚlistÚextendÚ_flattenr‚   )rˆ   rƒ   Úir   r   r   rŒ   ä   s    
rŒ   )T)r   rJ   rT   r{   Ú	functoolsr   Útypingr   r   r   Úchrrf   r   Úintr   r1   r3   r7   r8   rP   rV   Údictrc   rh   Úboolr‡   rŠ   rŒ   r   r   r   r   Ú<module>   s0   	'	
 ÿþ.