
    )g3                         S SK r S SK Jr  S SKJrJrJrJrJrJrJ	r	J
r
Jr  \" S5      rS r " S S\5      r\rS\S	\4S
 jr " S S\\   5      r " S S\\   5      r " S S5      rg)    N)ReferenceType)	IterableOptionalGenericDictIteratorTypeVarTYPE_CHECKINGAnyCallableTc                     U b  U " 5       $ S $ N )refs    ./usr/lib/python3/dist-packages/debian/_util.pyresolve_refr      s    O35--    c                      ^  \ rS rSrSrS/r\(       a  S\SS4U 4S jjrS r	S\
4S	 jrS
\S\4S jrS
\S\4S jrS\4S jrSrU =r$ )_CaseInsensitiveString   zCase insensitive string.
    	str_lowersreturnNc                 :   > [         [        U ]  U5        SU l        g )N )superr   __init__r   )selfr   	__class__s     r   r   _CaseInsensitiveString.__init__   s    ($8;DNr   c                 Z    [         R                  X5      nUR                  5       Ul        U$ r   )str__new__lowerr   )clsstr_r   s      r   r$   _CaseInsensitiveString.__new__   s"    KK"jjlr   c                 ,    [        U R                  5      $ r   )hashr   r   s    r   __hash___CaseInsensitiveString.__hash__$   s    DNN##r   otherc                 ^     U R                   UR                  5       :H  $ ! [         a     gf = f)NF)r   r%   AttributeErrorr   r.   s     r   __eq___CaseInsensitiveString.__eq__'   s.    	>>U[[]22 		s    
,,c                     X:X  + $ r   r   r1   s     r   __ne___CaseInsensitiveString.__ne__-   s      r   c                     U R                   $ r   r   r+   s    r   r%   _CaseInsensitiveString.lower0   s    ~~r   r8   )__name__
__module____qualname____firstlineno____doc__	__slots__r
   r#   r   r$   intr,   r   r2   boolr5   r%   __static_attributes____classcell__)r    s   @r   r   r      sm    I	 c 	 d 	 $# $C C !C !D !s  r   r   xr   c                 "    U R                  5       $ r   )r%   )rD   s    r   default_field_sort_keyrF   7   s    779r   c                       \ rS rSrSrS r\S 5       r\R                  S 5       rS r	SS.S	 jr
SS.S
 jr\S 5       r\S 5       rS rS rSrg)LinkedListNode;   )_previous_nodevalue	next_node__weakref__c                 ,    S U l         S U l        Xl        g r   )rJ   rL   rK   r   rK   s     r   r   LinkedListNode.__init__?   s    "
r   c                 ,    [        U R                  5      $ r   )r   rJ   r+   s    r   previous_nodeLinkedListNode.previous_nodeE   s     4..//r   c                 P    Ub  [         R                  " U5      U l        g S U l        g r   )weakrefr   rJ   r   nodes     r   rR   rS   J   s!     483Cgkk$/r   c                     [         R                  U R                  U R                  5        S U l        S U l        U R                  $ r   )rH   
link_nodesrR   rL   rK   r+   s    r   removeLinkedListNode.removeO   s5    !!$"4"4dnnE!zzr   F)skip_currentc             #   x   #    U(       a  U R                   OU nU(       a  Uv   UR                   nU(       a  M  g g 7fr   )rL   r   r\   rW   s      r   	iter_nextLinkedListNode.iter_nextV   s,      ".t~~4J>>D d   4::c             #   x   #    U(       a  U R                   OU nU(       a  Uv   UR                   nU(       a  M  g g 7fr   )rR   r^   s      r   iter_previousLinkedListNode.iter_previous_   s0      &2t!!tJ%%D dra   c                 :    U(       a  Xl         U (       a  Xl        g g r   rR   rL   rf   s     r   rY   LinkedListNode.link_nodesh   s     &3#&/# r   c                 X    [         R                  X5        [         R                  X5        g r   )rH   rY   )
first_nodenew_node	last_nodes      r   _insert_linkLinkedListNode._insert_linkp   s      	!!*7!!(6r   c                 l    XLa  XR                   Ld   e[        R                  U R                   X5        g r   )rR   rH   rl   r   rj   s     r   insert_beforeLinkedListNode.insert_beforey   s/    #8J8J(JJJ##D$6$6Gr   c                 l    XLa  XR                   Ld   e[        R                  XU R                   5        g r   )rL   rH   rl   ro   s     r   insert_afterLinkedListNode.insert_after~   s+    #(FFF##DDNNCr   )rJ   rL   rR   rK   N)r:   r;   r<   r=   r?   r   propertyrR   setterrZ   r_   rc   staticmethodrY   rl   rp   rs   rB   r   r   r   rH   rH   ;   s    GI 0 0 N N  %" $)& 0 0 7 7H
Dr   rH   c                       \ rS rSrSrSrSS jrS\4S jrS\	4S jr
\S	 5       rSS
 jrS rS rS rS rS rS rS rS rS rS rS rSS jrSrg)
LinkedList   ab  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                 X    S U l         S U l        SU l        Ub  U R                  U5        g g Nr   )r|   r}   r~   extend)r   valuess     r   r   LinkedList.__init__   s.    
KK r   r   c                     U R                   S L$ r   )r|   r+   s    r   __bool__LinkedList.__bool__   s    ~~T))r   c                     U R                   $ r   )r~   r+   s    r   __len__LinkedList.__len__   s    zzr   c                 L    U R                   b  U R                   R                  $ S $ r   )r}   rK   r+   s    r   tailLinkedList.tail   s"     (,~~'At~~##KtKr   c                 j    U R                   c  [        S5      eU R                  U R                   5        g )Nzpop from empty list)r}   
IndexErrorremove_noder+   s    r   popLinkedList.pop   s*    >>!233(r   c              #   `   #    U R                   nUc  g UR                  5        S h  vN   g  N7fr   )r|   r_   )r   r|   s     r   
iter_nodesLinkedList.iter_nodes   s)     NN	&&(((s   $.,.c              #   N   #    S U R                  5        5        S h  vN   g  N7f)Nc              3   8   #    U  H  oR                   v   M     g 7fr   rK   ).0rW   s     r   	<genexpr>&LinkedList.__iter__.<locals>.<genexpr>   s     =+<4JJ+<   )r   r+   s    r   __iter__LinkedList.__iter__   s     =4??+<===s   %#%c              #   n   #    U R                   nUc  g S UR                  5        5        S h  vN   g  N7f)Nc              3   8   #    U  H  oR                   v   M     g 7fr   r   )r   ns     r   r   *LinkedList.__reversed__.<locals>.<genexpr>   s     ?%>GG%>r   )r}   rc   )r   r}   s     r   __reversed__LinkedList.__reversed__   s.     NN	?Y%<%<%>???s   +535c                 6   XR                   L a&  UR                  U l         U R                   c  S U l        O.XR                  L a   UR                  U l        U R                  c   eU R                  S:  d   eU =R                  S-  sl        UR                  5         g )Nr      )r|   rL   r}   rR   r~   rZ   rV   s     r   r   LinkedList.remove_node   sx    >>!!^^DN~~%!%^^#!//DN >>---zzA~~

a
r   c                 t    U R                   c  U R                  U5      $ U R                  XR                   5      $ r   )r|   appendrp   rO   s     r   insert_at_headLinkedList.insert_at_head   s0    >>!;;u%%!!%88r   c                    [        U5      nU R                  c  X l        X l        OGU R                  c   eU R                  ULd   eU R                  Ul        X R                  l        X l        U =R
                  S-  sl        U$ )Nr   )rH   r|   r}   rR   rL   r~   )r   rK   rW   s      r   r   LinkedList.append   ss    e$>>!!N!N >>--- >>---!%D'+NN$!N

a
r   c                 8    U R                  [        U5      U5      $ r   )insert_node_beforerH   r   rK   existing_nodes      r   rp   LinkedList.insert_before   s    &&~e'<mLLr   c                 8    U R                  [        U5      U5      $ r   )insert_node_afterrH   r   s      r   rs   LinkedList.insert_after   s    %%nU&;]KKr   c                     U R                   c  [        S5      eUR                  c  UR                  b  [        S5      eUR	                  U5        X R                   L a  Xl         U =R
                  S-  sl        U$ Nz,List is empty; node argument cannot be validz&New node must not already be inserted!r   )r|   
ValueErrorrL   rR   rp   r~   r   rj   r   s      r   r   LinkedList.insert_node_before   sj    >>!KLL)X-C-C-OEFF##H-NN*%N

a
r   c                     U R                   c  [        S5      eUR                  c  UR                  b  [        S5      eUR	                  U5        X R                   L a  Xl         U =R
                  S-  sl        U$ r   )r}   r   rL   rR   rs   r~   r   s      r   r   LinkedList.insert_node_after   sj    >>!KLL)X-C-C-OEFF""8,NN*%N

a
r   c                 8    U H  nU R                  U5        M     g r   )r   )r   r   vs      r   r   LinkedList.extend  s    AKKN r   c                 .    S U l         S U l        SU l        g r   r{   r+   s    r   clearLinkedList.clear  s    
r   )r~   r|   r}   r   )r   N)r:   r;   r<   r=   r>   r?   r   rA   r   r@   r   ru   r   r   r   r   r   r   r   r   rp   rs   r   r   r   r   rB   r   r   r   ry   ry      s     4I *$ *  L L)
)>@9&ML


r   ry   c                       \ rS rSrSrSS jrS\SS4S jrS\SS4S jrS\	\   4S	 jr
S\	\   4S
 jrS\4S jrS\S\4S jr\rS rS\SS4S jrS\SS4S jrS\S\SS4S jrS\S\SS4S jrS rSrg)
OrderedSeti  zA 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                 n    0 U l         [        5       U l        Uc  / nU H  nU R                  U5        M     g r   )_OrderedSet__tablery   _OrderedSet__orderaddr   iterableitems      r   r   OrderedSet.__init__  s4     !|HDHHTN r   r   r   c                     X;  a+  U R                   R                  U5      n X R                  U'   g g ! [         a    U R                   R	                  U5        e f = fr   )r   r   r   	Exceptionr   r   r   rW   s      r   r   OrderedSet.add!  sZ    
 <<&&t,D%)T"   ((.s	   2 'Ac                 r    U R                   U   nU R                   U	 U R                  R                  U5        g r   )r   r   r   r   s      r   rZ   OrderedSet.remove.  s0     ||D!LL  &r   c                 ,    [        U R                  5      $ r   )iterr   r+   s    r   r   OrderedSet.__iter__5  s    DLL!!r   c                 >    [        [        U R                  5      5      $ r   )r   reversedr   r+   s    r   r   OrderedSet.__reversed__9  s    HT\\*++r   c                 ,    [        U R                  5      $ r   )lenr   r+   s    r   r   OrderedSet.__len__=  s    4<<  r   c                     XR                   ;   $ r   )r   r   r   s     r   __contains__OrderedSet.__contains__@  s     ||##r   c                 8    U H  nU R                  U5        M     g r   )r   r   s      r   r   OrderedSet.extendH  s    DHHTN r   c                 N    U R                  XR                  R                  5        g)z2Re-order the given item so it is "last" in the setN)_reorderr   r   r   s     r   
order_lastOrderedSet.order_lastN  s    dLL//0r   c                 N    U R                  XR                  R                  5        g)z3Re-order the given item so it is "first" in the setN)r   r   r   r   s     r   order_firstOrderedSet.order_firstR  s    dLL778r   reference_itemc                 t   ^ ^ X:X  a  [        S5      eT R                  U   mT R                  UUU 4S j5        g)zTRe-order the given item so appears directly after the reference item in the sequence*Cannot re-order an item relative to itselfc                 <   > TR                   R                  U T5      $ r   )r   rp   rD   reference_noder   s    r   <lambda>)OrderedSet.order_before.<locals>.<lambda>[  s    dll&@&@N&Sr   Nr   r   r   r   r   r   r   s   `  @r   order_beforeOrderedSet.order_beforeV  s2    !IJJn5dSTr   c                 t   ^ ^ X:X  a  [        S5      eT R                  U   mT R                  UUU 4S j5        g)zURe-order the given item so appears directly before the reference item in the sequencer   c                 <   > TR                   R                  U T5      $ r   )r   rs   r   s    r   r   (OrderedSet.order_after.<locals>.<lambda>b  s    dll&?&?>&Rr   Nr   r   s   `  @r   order_afterOrderedSet.order_after]  s2    !IJJn5dRSr   c                     U R                   U   nU R                  R                  U5        U" UR                  5      nX@R                   U'   g r   )r   r   r   rK   )r   r   
reinserterrW   rj   s        r   r   OrderedSet._reorderd  s>    
 ||D!  &djj)%Tr   )__order__tabler   )r:   r;   r<   r=   r>   r   r#   r   rZ   r   r   r   r@   r   rA   r   r   r   r   r   r   r   r   rB   r   r   r   r   r     s      '3 '4 '"(3- ",hsm ,! !$ $ $ F1s 1t 19 9 9U Uc Ud UT TS TT T&r   r   )rU   r   typingr   r   r   r   r   r	   r
   r   r   r   r   r#   r   _strIrF   rH   ry   r   r   r   r   <module>r      s     !   CL.
S B 	c c FDWQZ FDRE EP`& `&r   