o c\@sXddlmZGdddeZGdddeZddZdd Zd d Zd d Z ddZ dS))xrangec@seZdZdZdS) SequenceErrorz@Raised when the sequence isn't proper for translation to ranges.N)__name__ __module__ __qualname____doc__rr>/usr/lib/python3/dist-packages/landscape/lib/sequenceranges.pyrsrc@s`eZdZdZddZeddZeddZdd Zd d Z d d Z ddZ ddZ ddZ dS)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] cCs g|_dSN_rangesselfrrr __init__ zSequenceRanges.__init__cCs|}t||jdd<|Sr )sequence_to_rangesr )clssequenceobjrrr from_sequenceszSequenceRanges.from_sequencecCs|}||jdd<|Sr r )rrangesrrrr from_ranges!szSequenceRanges.from_rangescCstt|jSr )listranges_to_sequencer rrrr to_sequence'szSequenceRanges.to_sequencecC t|jSr )rr rrrr to_ranges*rzSequenceRanges.to_rangescCrr )rr rrrr __iter__-rzSequenceRanges.__iter__cCsZt|j|}|t|jkr+|j|}t|tr'|d|ko$|dkSS||kSdS)NrF)find_ranges_indexr len isinstancetuple)ritemindextestrrr __contains__0s    zSequenceRanges.__contains__cCt|j|dSr ) add_to_rangesr rr$rrr add9zSequenceRanges.addcCr(r )remove_from_rangesr r*rrr remove<r,zSequenceRanges.removeN)rrrrr classmethodrrrrrr'r+r.rrrr r s   r ccst|}zt|}}Wn tyYdSw|durxzt|}Wn ty-d}Ynw||dkr9|d7}n9|durT||krT||krMtd||ftd|f||kr\|Vn||dkri|V|Vn||fV|}}|dusdSdS)z9Iterate over range items that compose the given sequence.NrzSequence is unordered (%r < %r)zFound duplicated item (%r))iternext StopIterationr)riterator range_start range_stopr$rrr r@s:       rccsX|D]&}t|tr&|\}}||krtd||t||dD]}|Vqq|VqdS)z;Iterate over individual items represented in a ranges list.zRange error %d > %drN)r"r# ValueErrorr)rr$startendrrr r`s  rcCsjd}t|}||kr3||d}||}z|d}Wn ty#Ynw||kr-|d}n|}||ks |S)z'Find the index where an entry *may* be.rr)r! TypeError)rr$lohimidr&rrr r ms     r c CsZt||}}}|}}t|}||kr6||}t|tr0|d|kr-|dkr/dSnn||kr6dS|dkrf||d}t|trS|d|dkrNn|d}n ||dkrZn |d8}|d8}|dks:||kr||}t|tr|d|dkr|n|d}n ||dkrn |d7}|d7}||ksj||dkr|||dS||ff|||<dS)z.Insert item in ranges, reorganizing as needed.rrNr9)r r!r"r#insert) rr$ index_start index_stopr%r4r5 ranges_lenr&rrr r)sH          r)cCst||}t|}||krp||}t|trg|\}}||kre||dkr4t|d|d|||d<n |d|ff|||d<||dkrX||krVt|||||<dSdS||dff|||<dSdS||krr||=dSdSdS)z0Remove item from ranges, reorganizing as needed.rN)r r!r"r#range)rr$r%rAr&r4r5rrr r-s(      r-N) twisted.python.compatr Exceptionrobjectr rrr r)r-rrrr s 8   1