
    )uyc4                        d dl Z d dl mZ 	 d dlmZmZmZmZmZmZm	Z	m
Z
mZmZ  e	d          Zn# e$ r dZ
Y nw xY wd Z G d de          ZeZd	 Z G d
 dee                   Z G d dee                   Z G d de          ZdS )    N)ReferenceType)
IterableOptionalGenericDictListIteratorTypeVarTYPE_CHECKINGAnyCallableTFc                     | 
 |             nd S N )refs    ./usr/lib/python3/dist-packages/debian/_util.pyresolve_refr      s    O33555-    c                   J     e Zd ZdZdgZer fdZd Zd Zd Z	d Z
d Z xZS )	_CaseInsensitiveStringzCase insensitive string.
    	str_lowerc                 f    t          t          |                               |           d| _        d S )N )superr   __init__r   )selfs	__class__s     r   r   z_CaseInsensitiveString.__init__   s-    ($//88;;;DNNNr   c                 n    t                               | |          }|                                |_        |S r   )str__new__lowerr   )clsstr_r   s      r   r"   z_CaseInsensitiveString.__new__#   s)    KKT""jjllr   c                 *    t          | j                  S r   )hashr   r   s    r   __hash__z_CaseInsensitiveString.__hash__)   s    DN###r   c                 `    	 | j         |                                k    S # t          $ r Y dS w xY w)NF)r   r#   AttributeErrorr   others     r   __eq__z_CaseInsensitiveString.__eq__-   s>    	>U[[]]22 	 	 	55	s    
--c                     | |k     S r   r   r,   s     r   __ne__z_CaseInsensitiveString.__ne__4   s    5=  r   c                     | j         S r   )r   r(   s    r   r#   z_CaseInsensitiveString.lower8   s
    ~r   )__name__
__module____qualname____doc__	__slots__r   r   r"   r)   r.   r0   r#   __classcell__)r   s   @r   r   r      s         I  	  	  	  	  	 
  $ $ $  ! ! !      r   r   c                 *    |                                  S r   )r#   )xs    r   default_field_sort_keyr:   @   s    7799r   c                       e Zd ZdZd Zed             Zej        d             Zd ZdddZ	ddd	Z
ed
             Zed             Zd Zd ZdS )LinkedListNode)_previous_nodevalue	next_node__weakref__c                 0    d | _         d | _        || _        d S r   )r=   r?   r>   r   r>   s     r   r   zLinkedListNode.__init__I   s    "


r   c                 *    t          | j                  S r   )r   r=   r(   s    r   previous_nodezLinkedListNode.previous_nodeO   s     4.///r   c                 @    |t          j        |          nd | _        d S r   )weakrefr   r=   r   nodes     r   rD   zLinkedListNode.previous_nodeT   s&     483Cgk$///r   c                 v    t                               | j        | j                   d | _        d | _        | j        S r   )r<   
link_nodesrD   r?   r>   r(   s    r   removezLinkedListNode.removeY   s4    !!$"4dnEEE!zr   F)skip_currentc             #   B   K   |r| j         n| }|r|V  |j         }|d S d S r   )r?   r   rL   rH   s      r   	iter_nextzLinkedListNode.iter_next`   sN       ".7t~~4 	"JJJ>D  	" 	" 	" 	" 	"r   c             #   B   K   |r| j         n| }|r|V  |j         }|d S d S r   )rD   rN   s      r   iter_previouszLinkedListNode.iter_previousi   sQ       &2;t!!t 	&JJJ%D  	& 	& 	& 	& 	&r   c                 .    |r| |_         | r	|| _        d S d S r   rD   r?   rS   s     r   rJ   zLinkedListNode.link_nodesr   s4      	4&3I# 	0&/M###	0 	0r   c                 r    t                               | |           t                               ||           d S r   )r<   rJ   )
first_nodenew_node	last_nodes      r   _insert_linkzLinkedListNode._insert_linkz   s6     	!!*h777!!(I66666r   c                 f    | |ur	|| j         usJ t                              | j         ||            d S r   )rD   r<   rX   r   rV   s     r   insert_beforezLinkedListNode.insert_before   sA    8##8J(J(J(J(J##D$6$GGGGGr   c                 f    | |ur	|| j         usJ t                              | || j                    d S r   )r?   r<   rX   rZ   s     r   insert_afterzLinkedListNode.insert_after   s?    8##(F(F(F(F##D(DNCCCCCr   N)r2   r3   r4   r6   r   propertyrD   setterrK   rO   rQ   staticmethodrJ   rX   r[   r]   r   r   r   r<   r<   E   s       GI   0 0 X0 N N N    %" " " " " $)& & & & & 0 0 \0 7 7 \7H H H
D D D D Dr   r<   c                       e Zd ZdZdZddZd Zd Zed             Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )
LinkedListav  Specialized 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_sizeNc                 b    d | _         d | _        d| _        ||                     |           d S d S Nr   )rd   re   rf   extend)r   valuess     r   r   zLinkedList.__init__   s=    
KK r   c                     | j         d uS r   )rd   r(   s    r   __bool__zLinkedList.__bool__   s    ~T))r   c                     | j         S r   )rf   r(   s    r   __len__zLinkedList.__len__   s
    zr   c                 ,    | j         | j         j        nd S r   )re   r>   r(   s    r   tailzLinkedList.tail   s     (,~'At~##tKr   c                 f    | j         t          d          |                     | j                    d S )Nzpop from empty list)re   
IndexErrorremove_noder(   s    r   popzLinkedList.pop   s5    >!2333(((((r   c              #   T   K   | j         }|d S |                                E d {V  d S r   )rd   rO   )r   rd   s     r   
iter_nodeszLinkedList.iter_nodes   sB      N	F&&(((((((((((r   c              #   R   K   d |                                  D             E d {V  d S )Nc              3   $   K   | ]}|j         V  d S r   r>   ).0rH   s     r   	<genexpr>z&LinkedList.__iter__.<locals>.<genexpr>   s$      ==4DJ======r   )rv   r(   s    r   __iter__zLinkedList.__iter__   s<      ==4??+<+<============r   c              #   h   K   | j         }|d S d |                                D             E d {V  d S )Nc              3   $   K   | ]}|j         V  d S r   ry   )rz   ns     r   r{   z*LinkedList.__reversed__.<locals>.<genexpr>   s$      ??AG??????r   )re   rQ   )r   re   s     r   __reversed__zLinkedList.__reversed__   sP      N	F??Y%<%<%>%>????????????r   c                     || j         u r|j        | _         | j         d | _        n|| j        u r|j        | _        | j        J | j        dk    sJ | xj        dz  c_        |                                 d S )Nr      )rd   r?   re   rD   rf   rK   rG   s     r   rs   zLinkedList.remove_node   s~    4>!!!^DN~%!%T^##!/DN >---zA~~~~

a

r   c                 p    | j         |                     |          S |                     || j                   S r   )rd   appendr[   rB   s     r   insert_at_headzLinkedList.insert_at_head   s4    >!;;u%%%!!%888r   c                     t          |          }| j        || _        || _        n3| j        J | j        |usJ | j        |_        || j        _        || _        | xj        dz  c_        |S )Nr   )r<   rd   re   rD   r?   rf   )r   r>   rH   s      r   r   zLinkedList.append   s{    e$$>!!DN!DNN >--- >----!%D'+DN$!DN

a

r   c                 H    |                      t          |          |          S r   )insert_node_beforer<   r   r>   existing_nodes      r   r[   zLinkedList.insert_before   s     &&~e'<'<mLLLr   c                 H    |                      t          |          |          S r   )insert_node_afterr<   r   s      r   r]   zLinkedList.insert_after   s     %%nU&;&;]KKKr   c                     | j         t          d          |j        |j        t          d          |                    |           || j         u r|| _         | xj        dz  c_        |S Nz,List is empty; node argument cannot be validz&New node must not already be inserted!r   )rd   
ValueErrorr?   rD   r[   rf   r   rV   r   s      r   r   zLinkedList.insert_node_before   su    >!KLLL)X-C-OEFFF##H---DN**%DN

a

r   c                     | j         t          d          |j        |j        t          d          |                    |           || j         u r|| _         | xj        dz  c_        |S r   )re   r   r?   rD   r]   rf   r   s      r   r   zLinkedList.insert_node_after  su    >!KLLL)X-C-OEFFF""8,,,DN**%DN

a

r   c                 :    |D ]}|                      |           d S r   )r   )r   rj   vs      r   ri   zLinkedList.extend  s,     	 	AKKNNNN	 	r   c                 0    d | _         d | _        d| _        d S rh   rc   r(   s    r   clearzLinkedList.clear  s    


r   r   )r2   r3   r4   r5   r6   r   rl   rn   r^   rp   rt   rv   r|   r   rs   r   r   r[   r]   r   r   ri   r   r   r   r   rb   rb      sA         4I       * * *   L L XL) ) )) ) )> > >@ @ @  9 9 9  &M M ML L L
 
 

 
 
  
    r   rb   c                   f    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
eZd
 Zd Zd Zd Zd Zd ZdS )
OrderedSetzA 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.
    Nc                 v    i | _         t                      | _        |g }|D ]}|                     |           d S r   )_OrderedSet__tablerb   _OrderedSet__orderaddr   iterableitems      r   r   zOrderedSet.__init__!  sK     !||H 	 	DHHTNNNN	 	r   c                     || vrP| j                             |          }	 || j        |<   d S # t          $ r | j                             |            w xY wd S r   )r   r   r   	Exceptionrs   r   r   rH   s      r   r   zOrderedSet.add/  sw    t
 <&&t,,D%)T"""   ((... s	   
, &Ac                 d    | j         |         }| j         |= | j                            |           d S r   )r   r   rs   r   s      r   rK   zOrderedSet.remove=  s6     |D!L  &&&&&r   c                 *    t          | j                  S r   )iterr   r(   s    r   r|   zOrderedSet.__iter__E  s     DL!!!r   c                 D    t          t          | j                            S r   )r   reversedr   r(   s    r   r   zOrderedSet.__reversed__J  s     HT\**+++r   c                 *    t          | j                  S r   )lenr   r(   s    r   rn   zOrderedSet.__len__O  s    4<   r   c                     || j         v S r   )r   r   r   s     r   __contains__zOrderedSet.__contains__S  s     t|##r   c                 :    |D ]}|                      |           d S r   )r   r   s      r   ri   zOrderedSet.extend\  s,     	 	DHHTNNNN	 	r   c                 F    |                      || j        j                   dS )z2Re-order the given item so it is "last" in the setN)_reorderr   r   r   s     r   
order_lastzOrderedSet.order_lastb  s#     	dDL/00000r   c                 F    |                      || j        j                   dS )z3Re-order the given item so it is "first" in the setN)r   r   r   r   s     r   order_firstzOrderedSet.order_firstg  s#     	dDL788888r   c                      ||k    rt          d           j        |                              | fd           dS )zTRe-order the given item so appears directly after the reference item in the sequence*Cannot re-order an item relative to itselfc                 :    j                             |           S r   )r   r[   r9   reference_noder   s    r   <lambda>z)OrderedSet.order_before.<locals>.<lambda>r  s    dl&@&@N&S&S r   Nr   r   r   r   r   reference_itemr   s   `  @r   order_beforezOrderedSet.order_beforel  sS     >!!IJJJn5dSSSSSTTTTTr   c                      ||k    rt          d           j        |                              | fd           dS )zURe-order the given item so appears directly before the reference item in the sequencer   c                 :    j                             |           S r   )r   r]   r   s    r   r   z(OrderedSet.order_after.<locals>.<lambda>z  s    dl&?&?>&R&R r   Nr   r   s   `  @r   order_afterzOrderedSet.order_aftert  sS     >!!IJJJn5dRRRRRSSSSSr   c                     | j         |         }| j                            |            ||j                  }|| j         |<   d S r   )r   r   rs   r>   )r   r   
reinserterrH   rV   s        r   r   zOrderedSet._reorder|  sI    
 |D!  &&&:dj))%Tr   r   )r2   r3   r4   r5   r   r   rK   r|   r   rn   r   r   ri   r   r   r   r   r   r   r   r   r   r     s              ' ' '" " "
, , ,
! ! !$ $ $ F  1 1 1
9 9 9
U U UT T T& & & & &r   r   )rF   r   typingr   r   r   r   r   r	   r
   r   r   r   r   ImportErrorr   r!   r   _strIr:   r<   rb   objectr   r   r   r   <module>r      s    ! ! ! ! ! !                        	AA   MMM. . .
# # # # #S # # #L 	  
FD FD FD FD FDWQZ FD FD FDRI I I I I I I IXj& j& j& j& j& j& j& j& j& j&s   #0 ::