
    f4                         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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y# e$ r dZ
Y Dw xY w)    N)ReferenceType)
IterableOptionalGenericDictListIteratorTypeVarTYPE_CHECKINGAnyCallableTFc                     |  |        S d S N )refs    ./usr/lib/python3/dist-packages/debian/_util.pyresolve_refr      s    O35--    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                 :    t         t        |   |       d| _        y )N )superr   __init__r   )selfs	__class__s     r   r   z_CaseInsensitiveString.__init__   s    ($8;DNr   c                 \    t         j                  | |      }|j                         |_        |S r   )str__new__lowerr   )clsstr_r   s      r   r"   z_CaseInsensitiveString.__new__#   s$    KKT"jjlr   c                 ,    t        | j                        S r   )hashr   r   s    r   __hash__z_CaseInsensitiveString.__hash__)   s    DNN##r   c                 \    	 | j                   |j                         k(  S # t        $ r Y yw xY w)NF)r   r#   AttributeErrorr   others     r   __eq__z_CaseInsensitiveString.__eq__-   s.    	>>U[[]22 		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      s0    I	 
$!r   r   c                 "    | j                         S r   )r#   )xs    r   default_field_sort_keyr:   @   s    779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y)LinkedListNode)_previous_nodevalue	next_node__weakref__c                 .    d | _         d | _        || _        y 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                 L    |t        j                  |      | _        y d | _        y r   )weakrefr   r=   r   nodes     r   rD   zLinkedListNode.previous_nodeT   s!     483Cgkk$/r   c                     t         j                  | j                  | j                         d | _        d | _        | j                  S r   )r<   
link_nodesrD   r?   r>   r(   s    r   removezLinkedListNode.removeY   s5    !!$"4"4dnnE!zzr   F)skip_currentc             #   X   K   |r| j                   n| }|r| |j                   }|ry y wr   )r?   r   rL   rH   s      r   	iter_nextzLinkedListNode.iter_next`   s+      ".t~~4J>>D    %**c             #   X   K   |r| j                   n| }|r| |j                   }|ry y wr   )rD   rN   s      r   iter_previouszLinkedListNode.iter_previousi   s/      &2t!!tJ%%D rP   c                 *    |r| |_         | r|| _        y y r   rD   r?   rT   s     r   rJ   zLinkedListNode.link_nodesr   s     &3I#&/M# r   c                 \    t         j                  | |       t         j                  ||       y r   )r<   rJ   )
first_nodenew_node	last_nodes      r   _insert_linkzLinkedListNode._insert_linkz   s$     	!!*h7!!(I6r   c                 n    | |ur|| j                   usJ t        j                  | j                   ||        y r   )rD   r<   rY   r   rW   s     r   insert_beforezLinkedListNode.insert_before   s5    8#8J8J(JJJ##D$6$6$Gr   c                 n    | |ur|| j                   usJ t        j                  | || j                          y r   )r?   r<   rY   r[   s     r   insert_afterzLinkedListNode.insert_after   s1    8#(FFF##D(DNNCr   N)r2   r3   r4   r6   r   propertyrD   setterrK   rO   rR   staticmethodrJ   rY   r\   r^   r   r   r   r<   r<   E   s    GI 0 0 N N  %" $)& 0 0 7 7H
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y)
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                 V    d | _         d | _        d| _        || j                  |       y y Nr   )re   rf   rg   extend)r   valuess     r   r   zLinkedList.__init__   s.    
KK r   c                     | j                   d uS r   )re   r(   s    r   __bool__zLinkedList.__bool__   s    ~~T))r   c                     | j                   S r   )rg   r(   s    r   __len__zLinkedList.__len__   s    zzr   c                 J    | j                   | j                   j                  S d S r   )rf   r>   r(   s    r   tailzLinkedList.tail   s"     (,~~'At~~##KtKr   c                 h    | j                   t        d      | j                  | j                          y )Nzpop from empty list)rf   
IndexErrorremove_noder(   s    r   popzLinkedList.pop   s*    >>!233(r   c              #   ^   K   | j                   }|y |j                         E d {    y 7 wr   )re   rO   )r   re   s     r   
iter_nodeszLinkedList.iter_nodes   s*     NN	&&(((s   #-+-c              #   N   K   d | j                         D        E d {    y 7 w)Nc              3   4   K   | ]  }|j                     y wr   r>   ).0rH   s     r   	<genexpr>z&LinkedList.__iter__.<locals>.<genexpr>   s     =4DJJ=   )rw   r(   s    r   __iter__zLinkedList.__iter__   s     =4??+<===s   %#%c              #   l   K   | j                   }|y d |j                         D        E d {    y 7 w)Nc              3   4   K   | ]  }|j                     y wr   rz   )r{   ns     r   r|   z*LinkedList.__reversed__.<locals>.<genexpr>   s     ?AGG?r}   )rf   rR   )r   rf   s     r   __reversed__zLinkedList.__reversed__   s/     NN	?Y%<%<%>???s   *424c                 0   || j                   u r%|j                  | _         | j                   5d | _        n-|| j                  u r|j                  | _        | j                  J | j                  dkD  sJ | xj                  dz  c_        |j                          y )Nr      )re   r?   rf   rD   rg   rK   rG   s     r   rt   zLinkedList.remove_node   s{    4>>!!^^DN~~%!%T^^#!//DN >>---zzA~~

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

a
r   c                 8    | j                  t        |      |      S r   )insert_node_beforer<   r   r>   existing_nodes      r   r\   zLinkedList.insert_before   s    &&~e'<mLLr   c                 8    | j                  t        |      |      S r   )insert_node_afterr<   r   s      r   r^   zLinkedList.insert_after   s    %%nU&;]KKr   c                     | j                   t        d      |j                  |j                  t        d      |j	                  |       || 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   )re   
ValueErrorr?   rD   r\   rg   r   rW   r   s      r   r   zLinkedList.insert_node_before   sn    >>!KLL)X-C-C-OEFF##H-DNN*%DN

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

a
r   c                 4    |D ]  }| j                  |        y r   )r   )r   rk   vs      r   rj   zLinkedList.extend  s     	AKKN	r   c                 .    d | _         d | _        d| _        y ri   rd   r(   s    r   clearzLinkedList.clear  s    
r   r   )r2   r3   r4   r5   r6   r   rm   ro   r_   rq   ru   rw   r~   r   rt   r   r   r\   r^   r   r   rj   r   r   r   r   rc   rc      sw     4I * L L))>@9&ML


r   rc   c                   d    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y)
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                 h    i | _         t               | _        |g }|D ]  }| j                  |        y r   )_OrderedSet__tablerc   _OrderedSet__orderaddr   iterableitems      r   r   zOrderedSet.__init__!  s9     !|H 	DHHTN	r   c                     || vr,| j                   j                  |      }	 || j                  |<   y y # t        $ r | j                   j	                  |        w xY wr   )r   r   r   	Exceptionrt   r   r   rH   s      r   r   zOrderedSet.add/  s^    t
 <<&&t,D%)T"   ((.s	   2 &Ac                 r    | j                   |   }| j                   |= | j                  j                  |       y r   )r   r   rt   r   s      r   rK   zOrderedSet.remove=  s0     ||D!LL  &r   c                 ,    t        | j                        S r   )iterr   r(   s    r   r~   zOrderedSet.__iter__E  s     DLL!!r   c                 >    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   ro   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                 4    |D ]  }| j                  |        y r   )r   r   s      r   rj   zOrderedSet.extend\  s     	DHHTN	r   c                 P    | j                  || j                  j                         y)z2Re-order the given item so it is "last" in the setN)_reorderr   r   r   s     r   
order_lastzOrderedSet.order_lastb  s     	dDLL//0r   c                 P    | j                  || j                  j                         y)z3Re-order the given item so it is "first" in the setN)r   r   r   r   s     r   order_firstzOrderedSet.order_firstg  s     	dDLL778r   c                 r     ||k(  rt        d       j                  |    j                  | fd       y)zTRe-order the given item so appears directly after the reference item in the sequence*Cannot re-order an item relative to itselfc                 <    j                   j                  |       S r   )r   r\   r9   reference_noder   s    r   <lambda>z)OrderedSet.order_before.<locals>.<lambda>r  s    dll&@&@N&S r   Nr   r   r   r   r   reference_itemr   s   `  @r   order_beforezOrderedSet.order_beforel  s6     >!IJJn5dSTr   c                 r     ||k(  rt        d       j                  |    j                  | fd       y)zURe-order the given item so appears directly before the reference item in the sequencer   c                 <    j                   j                  |       S r   )r   r^   r   s    r   r   z(OrderedSet.order_after.<locals>.<lambda>z  s    dll&?&?>&R r   Nr   r   s   `  @r   order_afterzOrderedSet.order_aftert  s6     >!IJJn5dRSr   c                     | j                   |   }| j                  j                  |        ||j                        }|| j                   |<   y r   )r   r   rt   r>   )r   r   
reinserterrH   rW   s        r   r   zOrderedSet._reorder|  s@    
 ||D!  &djj)%Tr   r   )r2   r3   r4   r5   r   r   rK   r~   r   ro   r   r   rj   r   r   r   r   r   r   r   r   r   r     sQ    '"
,
!$ F1
9
UT&r   r   )rF   r   typingr   r   r   r   r   r	   r
   r   r   r   r   ImportErrorr   r!   r   _strIr:   r<   rc   objectr   r   r   r   <module>r      s     !   	A.
#S #L 	
FDWQZ FDRI IXj& j&Y  Ms    A' 'A10A1