~eVXddlmZGddeZGddZdZdZdZd Zd Z y ) )xrangeceZdZdZy) SequenceErrorz@Raised when the sequence isn't proper for translation to ranges.N)__name__ __module__ __qualname____doc__>/usr/lib/python3/dist-packages/landscape/lib/sequenceranges.pyrrsJr rcZeZdZdZdZedZedZdZdZ dZ dZ d Z d Z y ) SequenceRangesaZHigh level interface to ranges. A ranges list represent a sequence of ordered and non-repeating elements into a more compact format, by representing 3 or more consecutive entries by a range. This means that a sequence such as [1, 2, 4, 5, 6, 8, 10, 11, 12, 14] becomes [1, 2, (4, 6), 8, (10, 12), 14] cg|_yN_rangesselfs r __init__zSequenceRanges.__init__s  r cD|}t||jdd|Sr)sequence_to_rangesr)clssequenceobjs r from_sequencezSequenceRanges.from_sequences e+H5 A r c2|}||jdd|Srr)rrangesrs r from_rangeszSequenceRanges.from_ranges!se A r c>tt|jSr)listranges_to_sequencerrs r to_sequencezSequenceRanges.to_sequence's&t||455r c,t|jSr)r rrs r to_rangeszSequenceRanges.to_ranges*sDLL!!r c,t|jSr)r!rrs r __iter__zSequenceRanges.__iter__-s!$,,//r ct|j|}|t|jkr:|j|}t|tr|d|cxkxr|dkScS||k(Sy)NrF)find_ranges_indexrlen isinstancetuple)ritemindextests r __contains__zSequenceRanges.__contains__0sf!$,,5 3t||$ $<<&D$&Aw$1$q'11114< r c0t|j|yr) add_to_rangesrrr-s r addzSequenceRanges.add9sdllD)r c0t|j|yr)remove_from_rangesrr3s r removezSequenceRanges.remove<s4<<.r N)rrrr r classmethodrrr"r$r&r0r4r7r r r rrsR   6"0*/r rc#bKt|} t|x}}|p t|}||dzk(r|dz }nR|+||kr&||krtd|d|dtd|d||k(r|n||dzk(r ||n||f|x}}|oyy#t$rYywxYw#t$rd}YwxYww)z9Iterate over range items that compose the given sequence.Nr(zSequence is unordered (z < )zFound duplicated item ()iternext StopIterationr)riterator range_start range_stopr-s r rr@sH~H#'>1 j  ! >D :> ! !OJDJ$6*$'1$ZN!L(*A$(KLL[(!!{Q.!!  "J//'+ +K*-  !   D sP B/ BB/ BA"B/ B/ BB/BB/ B,)B/+B,,B/c#K|D]F}t|tr0|\}}||kDr td||t||dzD]}|C|Hyw)z;Iterate over individual items represented in a ranges list.zRange error %d > %dr(N)r+r, ValueErrorr)rr-startends r r!r!ase dE "JE3s{ !6sCCucAg.   JsA Acd}t|}||kr&||zdz}||} |d}||kDr|dz}n|}||kr&|S#t$rY wxYw)z'Find the index where an entry *may* be.rr()r* TypeError)rr-lohimidr/s r r)r)nsv B VB r'Bw1nc{ 7D $;qBB r' I    s; AAc t||x}x}}|x}}t|}||kr/||}t|tr|d|cxkr|dkr yn||k(ry|dkDrC||dz }t|tr|d|dz k7rn|d}n||dz k7rn|dz}|dz}|dkDrC||kr@||}t|tr|d|dzk7rn|d}n||dzk7rn|dz }|dz }||kr@||z dkr|j ||y||ff|||y)z.Insert item in ranges, reorganizing as needed.rr(NrF)r)r*r+r,insert) rr- index_start index_stopr.r?r@ ranges_lenr/s r r2r2sp(9'FFKF*u##K*VJ ze} dE "Aw$)$q')* T\  /kAo& dE "Aw+/)q'K{Q& 1 Kq  / z !j! dE "Aw*q.(aJzA~% !OJa  z !K!# eT"+6 *C)E{:&r cBt||}t|}||kr||}t|trd|\}}||k\rY||dzkrt |dz|dz|||dzn|dz|ff|||dz||dz kDr||k7rt |||||y||dz ff|||yyy||k(r||=yyy)z0Remove item from ranges, reorganizing as needed.r(N)r)r*r+r,range)rr-r.rOr/r?r@s r r6r6s fd +EVJ ze} dE "&* #K{"q(05dQh Q0OF5519-26(J1G0IF5519-)"d*.3K.FuU+,7+B*DF5'+#T\u #r N) twisted.python.compatr Exceptionrrrr!r)r2r6r r r rUs=(KIK5/5/p,B $.Fbr