HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //proc/1233/cwd/usr/lib/python3/dist-packages/debian/__pycache__/_util.cpython-38.pyc
U

�|�a�4�@s�ddlZddlmZz<ddlmZmZmZmZmZmZm	Z	m
Z
mZmZe	d�Z
Wnek
rhdZ
YnXdd�ZGdd	�d	e�ZeZd
d�ZGdd
�d
ee
�ZGdd�dee
�ZGdd�de�ZdS)�N)�
ReferenceType)
�Iterable�Optional�Generic�Dict�List�Iterator�TypeVar�
TYPE_CHECKING�Any�Callable�TFcCs|dk	r|�SdS�N�)�refrr�./usr/lib/python3/dist-packages/debian/_util.py�resolve_refsrcs\eZdZdZddgZer$�fdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Z�Z
S)�_CaseInsensitiveStringzCase insensitive string.
    �	str_lower�str_origcs tt|��|�d|_d|_dS)N�)�superr�__init__rr)�self�s��	__class__rrrsz_CaseInsensitiveString.__init__cCs t�||�}||_|��|_|Sr)�str�__new__r�lowerr)�clsZstr_rrrrr$s
z_CaseInsensitiveString.__new__cCs|jSr)r�rrrr�__str__,sz_CaseInsensitiveString.__str__cCs
t|j�Sr)�hashrr!rrr�__hash__0sz_CaseInsensitiveString.__hash__cCs,z|j|��kWStk
r&YdSXdS)NF)rr�AttributeError�r�otherrrr�__eq__4sz_CaseInsensitiveString.__eq__cCs
||kSrrr&rrr�__ne__;sz_CaseInsensitiveString.__ne__cCs|jSr)rr!rrrr?sz_CaseInsensitiveString.lower)�__name__�
__module__�__qualname__�__doc__�	__slots__r
rrr"r$r(r)r�
__classcell__rrrrrsrcCs|��Sr)r��xrrr�default_field_sort_keyGsr2c@s~eZdZdZdd�Zedd��Zejdd��Zdd�Zd	d
�dd�Z	d	d
�d
d�Z
edd��Zedd��Z
dd�Zdd�ZdS)�LinkedListNode)�_previous_node�value�	next_node�__weakref__cCsd|_d|_||_dSr)r4r6r5�rr5rrrrPszLinkedListNode.__init__cCs
t|j�Sr)rr4r!rrr�
previous_nodeVszLinkedListNode.previous_nodecCs|dk	rt�|�nd|_dSr)�weakrefrr4�r�noderrrr9[scCs"t�|j|j�d|_d|_|jSr)r3�
link_nodesr9r6r5r!rrr�remove`szLinkedListNode.removeF)�skip_currentccs$|r
|jn|}|r |V|j}qdSr)r6�rr?r<rrr�	iter_nextgszLinkedListNode.iter_nextccs$|r
|jn|}|r |V|j}qdSr)r9r@rrr�
iter_previouspszLinkedListNode.iter_previouscCs|r
||_|r||_dSr�r9r6rCrrrr=yszLinkedListNode.link_nodescCst�||�t�||�dSr)r3r=)Z
first_node�new_nodeZ	last_noderrr�_insert_link�szLinkedListNode._insert_linkcCs*||k	r||jk	st�t�|j||�dSr)r9�AssertionErrorr3rE�rrDrrr�
insert_before�szLinkedListNode.insert_beforecCs*||k	r||jk	st�t�|||j�dSr)r6rFr3rErGrrr�insert_after�szLinkedListNode.insert_afterN)r*r+r,r.r�propertyr9�setterr>rArB�staticmethodr=rErHrIrrrrr3Ls"

�
�	

r3c@s�eZdZdZdZd&dd�Zdd�Zdd	�Zed
d��Z	dd
�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�ZdS)'�
LinkedListavSpecialized linked list implementation to support the deb822 parser needs

    We deliberately trade "encapsulation" for features needed by this library
    to facilitate their implementation.  Notably, we allow nodes to leak and assume
    well-behaved calls to remove_node - because that makes it easier to implement
    components like Deb822InvalidParagraphElement.
    ��	head_node�	tail_node�_sizeNcCs(d|_d|_d|_|dk	r$|�|�dS�Nr)rOrPrQ�extend)r�valuesrrrr�s
zLinkedList.__init__cCs
|jdk	Sr)rOr!rrr�__bool__�szLinkedList.__bool__cCs|jSr)rQr!rrr�__len__�szLinkedList.__len__cCs|jdk	r|jjSdSr)rPr5r!rrr�tail�szLinkedList.tailcCs"|jdkrtd��|�|j�dS)Nzpop from empty list)rP�
IndexError�remove_noder!rrr�pop�s
zLinkedList.popccs$|j}|dkrdS|��EdHdSr)rOrA)rrOrrr�
iter_nodes�szLinkedList.iter_nodesccsdd�|��D�EdHdS)Ncss|]}|jVqdSr�r5)�.0r<rrr�	<genexpr>�sz&LinkedList.__iter__.<locals>.<genexpr>)r[r!rrr�__iter__�szLinkedList.__iter__ccs.|j}|dkrdSdd�|��D�EdHdS)Ncss|]}|jVqdSrr\)r]�nrrrr^�sz*LinkedList.__reversed__.<locals>.<genexpr>)rPrB)rrPrrr�__reversed__�szLinkedList.__reversed__cCsl||jkr$|j|_|jdkrDd|_n ||jkrD|j|_|jdk	sDt�|jdksRt�|jd8_|��dS)Nr�)rOr6rPr9rFrQr>r;rrrrY�s


zLinkedList.remove_nodecCs"|jdkr|�|�S|�||j�Sr)rO�appendrHr8rrr�insert_at_head�s

zLinkedList.insert_at_headcCsRt|�}|jdkr ||_||_n |jdk	s.t�|j�|�||_|jd7_|S)Nrb)r3rOrPrFrIrQ)rr5r<rrrrc�s
zLinkedList.appendcCs|�t|�|�Sr)�insert_node_beforer3�rr5�
existing_noderrrrH�szLinkedList.insert_beforecCs|�t|�|�Sr)�insert_node_afterr3rfrrrrI�szLinkedList.insert_aftercCsZ|jdkrtd��|jdk	s&|jdk	r.td��|�|�||jkrH||_|jd7_|S�Nz,List is empty; node argument cannot be validz&New node must not already be inserted!rb)rO�
ValueErrorr6r9rHrQ�rrDrgrrrre�s


zLinkedList.insert_node_beforecCsZ|jdkrtd��|jdk	s&|jdk	r.td��|�|�||jkrH||_|jd7_|Sri)rPrjr6r9rIrQrkrrrrhs


zLinkedList.insert_node_aftercCs|D]}|�|�qdSr)rc)rrT�vrrrrSszLinkedList.extendcCsd|_d|_d|_dSrRrNr!rrr�clearszLinkedList.clear)N)r*r+r,r-r.rrUrVrJrWrZr[r_rarYrdrcrHrIrerhrSrmrrrrrM�s(

rMc@s~eZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
eZdd�Zdd�Z
dd�Zdd�Zdd�Zdd�ZdS)�
OrderedSetz�A set-like object that preserves order when iterating over it

    We use this to keep track of keys in Deb822Dict, because it's much faster
    to look up if a key is in a set than in a list.
    NcCs2i|_t�|_|dkrg}|D]}|�|�qdSr)�_OrderedSet__tablerM�_OrderedSet__order�add�r�iterable�itemrrrr#szOrderedSet.__init__cCsJ||krF|j�|�}z||j|<Wn"tk
rD|j�|��YnXdSr)rprcro�	ExceptionrY�rrtr<rrrrq1szOrderedSet.addcCs"|j|}|j|=|j�|�dSr)rorprYrvrrrr>?s
zOrderedSet.removecCs
t|j�Sr)�iterrpr!rrrr_GszOrderedSet.__iter__cCstt|j��Sr)rw�reversedrpr!rrrraLszOrderedSet.__reversed__cCs
t|j�Sr)�lenrpr!rrrrVQszOrderedSet.__len__cCs
||jkSr)ro�rrtrrr�__contains__UszOrderedSet.__contains__cCs|D]}|�|�qdSr)rqrrrrrrS^szOrderedSet.extendcCs|�||jj�dS)z2Re-order the given item so it is "last" in the setN)�_reorderrprcrzrrr�
order_lastdszOrderedSet.order_lastcCs|�||jj�dS)z3Re-order the given item so it is "first" in the setN)r|rprdrzrrr�order_firstiszOrderedSet.order_firstcs4||krtd���j|���|��fdd��dS)zTRe-order the given item so appears directly after the reference item in the sequence�*Cannot re-order an item relative to itselfcs�j�|��Sr)rprHr0�Zreference_noderrr�<lambda>t�z)OrderedSet.order_before.<locals>.<lambda>N�rjror|�rrtZreference_itemrr�r�order_beforens
zOrderedSet.order_beforecs4||krtd���j|���|��fdd��dS)zURe-order the given item so appears directly before the reference item in the sequencercs�j�|��Sr)rprIr0r�rrr�|r�z(OrderedSet.order_after.<locals>.<lambda>Nr�r�rr�r�order_aftervs
zOrderedSet.order_aftercCs.|j|}|j�|�||j�}||j|<dSr)rorprYr5)rrtZ
reinserterr<rDrrrr|~s

zOrderedSet._reorder)N)r*r+r,r-rrqr>r_rarVr{rcrSr}r~r�r�r|rrrrrns
rn)r:r�typingrrrrrrr	r
rrr
�ImportErrorrrr�_strIr2r3rM�objectrnrrrr�<module>s0
-I