Cfc4ddlZddlmZ ddlmZmZmZmZmZmZm Z m Z m Z m Z e dZ dZGddeZeZd ZGd d ee ZGd d ee ZGddeZy#e$rdZ YDwxYw)N) ReferenceType) IterableOptionalGenericDictListIteratorTypeVar TYPE_CHECKINGAnyCallableTFc||SdSN)refs ./usr/lib/python3/dist-packages/debian/_util.py resolve_refrsO35--cJeZdZdZdgZerfdZdZdZdZ dZ dZ xZ S) _CaseInsensitiveStringzCase insensitive string. str_lowerc:tt| |d|_y)N)superr__init__r)selfs __class__s rrz_CaseInsensitiveString.__init__s ($ 8 ;DNrc\tj||}|j|_|Sr)str__new__lowerr)clsstr_rs rr"z_CaseInsensitiveString.__new__#s$ KKT "jjl rc,t|jSr)hashrrs r__hash__z_CaseInsensitiveString.__hash__)sDNN##rc\ |j|jk(S#t$rYywxYw)NF)rr#AttributeErrorrothers r__eq__z_CaseInsensitiveString.__eq__-s. >>U[[]2 2  s  ++c||k( Srrr,s r__ne__z_CaseInsensitiveString.__ne__4s5=  rc|jSr)rr(s rr#z_CaseInsensitiveString.lower8s ~~r) __name__ __module__ __qualname____doc__ __slots__r rr"r)r.r0r# __classcell__)rs@rrrs0 I  $!rrc"|jSr)r#)xs rdefault_field_sort_keyr:@s 779rceZdZdZdZedZejdZdZdddZ ddd Z e d Z e d Z d Zd Zy)LinkedListNode)_previous_nodevalue next_node __weakref__c.d|_d|_||_yr)r=r?r>rr>s rrzLinkedListNode.__init__Is" rc,t|jSr)rr=r(s r previous_nodezLinkedListNode.previous_nodeOs4..//rcL|tj||_yd|_yr)weakrefrr=rnodes rrDzLinkedListNode.previous_nodeTs!483Cgkk$/rctj|j|jd|_d|_|jSr)r< link_nodesrDr?r>r(s rremovezLinkedListNode.removeYs5!!$"4"4dnnE!zzrF) skip_currentc#XK|r |jn|}|r||j}|ryywr)r?rrLrHs r iter_nextzLinkedListNode.iter_next`s+".t~~4J>>D%**c#XK|r |jn|}|r||j}|ryywr)rDrNs r iter_previouszLinkedListNode.iter_previousis/&2t!!tJ%%DrPc*|r||_|r||_yyrrDr?rTs rrJzLinkedListNode.link_nodesrs &3I # &/M # rc\tj||tj||yr)r<rJ) first_nodenew_node last_nodes r _insert_linkzLinkedListNode._insert_linkzs$ !!*h7!!(I6rcn||ur||jusJtj|j||yr)rDr<rYrrWs r insert_beforezLinkedListNode.insert_befores58#8J8J(JJJ##D$6$6$Grcn||ur||jusJtj|||jyr)r?r<rYr[s r insert_afterzLinkedListNode.insert_afters18#(FFF##D(DNNCrN)r2r3r4r6rpropertyrDsetterrKrOrR staticmethodrJrYr\r^rrrr<r<EsGI 00NN %"$)&0077H Drr<ceZdZdZdZddZdZdZedZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZy) 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_sizeNcVd|_d|_d|_||j|yyNr)rerfrgextend)rvaluess rrzLinkedList.__init__s.   KK  rc|jduSr)rer(s r__bool__zLinkedList.__bool__s~~T))rc|jSr)rgr(s r__len__zLinkedList.__len__s zzrcJ|j|jjSdSr)rfr>r(s rtailzLinkedList.tails"(,~~'At~~##KtKrch|j td|j|jy)Nzpop from empty list)rf IndexError remove_noder(s rpopzLinkedList.pops* >> !23 3 (rc#^K|j}|y|jEd{y7wr)rerO)rres r iter_nodeszLinkedList.iter_nodess*NN   &&(((s #-+-c#NKd|jDEd{y7w)Nc34K|]}|jywrr>).0rHs r z&LinkedList.__iter__..s=4DJJ=)rwr(s r__iter__zLinkedList.__iter__s=4??+<===s %#%c#lK|j}|yd|jDEd{y7w)Nc34K|]}|jywrrz)r{ns rr|z*LinkedList.__reversed__..s?AGG?r})rfrR)rrfs r __reversed__zLinkedList.__reversed__s/NN   ?Y%<%<%>???s *424c0||jur%|j|_|j5d|_n-||jur|j|_|jJ|jdkDsJ|xjdzc_|j y)Nr)rer?rfrDrgrKrGs rrtzLinkedList.remove_nodes{ 4>> !!^^DN~~%!% T^^ #!//DN>>- --zzA~~ a  rct|j|j|S|j||jSr)reappendr\rBs rinsert_at_headzLinkedList.insert_at_heads2 >> !;;u% %!!%88rc t|}|j||_||_nG|jJ|j|usJ|j|_||j_||_|xj dz c_|S)Nr)r<rerfrDr?rg)rr>rHs rrzLinkedList.appends{e$ >> !!DN!DN>>- -->>- --!%D '+DNN $!DN a  rc8|jt||Sr)insert_node_beforer<rr> existing_nodes rr\zLinkedList.insert_befores&&~e'> !KL L    )X-C-C-OEF F##H- DNN *%DN a rc|j td|j |j td|j |||jur||_|xj dz c_|Sr)rfrr?rDr^rgrs rrzLinkedList.insert_node_aftersn >> !KL L    )X-C-C-OEF F""8, DNN *%DN a rc4|D]}|j|yr)r)rrkvs rrjzLinkedList.extends A KKN rc.d|_d|_d|_yrirdr(s rclearzLinkedList.clears rr)r2r3r4r5r6rrmror_rqrurwr~rrtrrr\r^rrrjrrrrrcrcsw4I *LL) )>@ 9 &ML   rrccdeZdZdZddZdZdZdZdZdZ d Z eZ d Z d Z d Zd ZdZdZy) 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. Nchi|_t|_|g}|D]}|j|yr)_OrderedSet__tablerc_OrderedSet__orderaddriterableitems rrzOrderedSet.__init__!s9 !|  H D HHTN rc||vr,|jj|} ||j|<yy#t$r|jj |wxYwr)rrr ExceptionrtrrrHs rrzOrderedSet.add/s^ t  <<&&t,D %) T"   ((. s 2&Acr|j|}|j|=|jj|yr)rrrtrs rrKzOrderedSet.remove=s0||D! LL    &rc,t|jSr)iterrr(s rr~zOrderedSet.__iter__EsDLL!!rc>tt|jSr)rreversedrr(s rrzOrderedSet.__reversed__JsHT\\*++rc,t|jSr)lenrr(s rrozOrderedSet.__len__Os4<<  rc||jvSr)rrrs r __contains__zOrderedSet.__contains__Sst||##rc4|D]}|j|yr)rrs rrjzOrderedSet.extend\s D HHTN rcP|j||jjy)z2Re-order the given item so it is "last" in the setN)_reorderrrrs r order_lastzOrderedSet.order_lastbs dDLL//0rcP|j||jjy)z3Re-order the given item so it is "first" in the setN)rrrrs r order_firstzOrderedSet.order_firstgs dDLL778rcr||k(r tdj|j|fdy)zTRe-order the given item so appears directly after the reference item in the sequence*Cannot re-order an item relative to itselfc<jj|Sr)rr\r9reference_noders rz)OrderedSet.order_before..rsdll&@&@N&SrNrrrrrreference_itemrs` @r order_beforezOrderedSet.order_beforels6 > !IJ Jn5 dSTrcr||k(r tdj|j|fdy)zURe-order the given item so appears directly before the reference item in the sequencerc<jj|Sr)rr^rs rrz(OrderedSet.order_after..zsdll&?&?>&RrNrrs` @r order_afterzOrderedSet.order_afterts6 > !IJ Jn5 dRSrc|j|}|jj|||j}||j|<yr)rrrtr>)rr reinserterrHrWs rrzOrderedSet._reorder|s@ ||D!   &djj)% Trr)r2r3r4r5rrrKr~rrorrrjrrrrrrrrrrsQ  '" , !$F 1 9 UT&rr)rFrtypingrrrrrr r r r r r ImportErrorrr!r_strIr:r<rcobjectrrrrrs!   A . #S#L  FDWQZFDRIIXj&j&YMs A''A10A1