Ejemplo n.º 1
0
 def decouples(self, rhs):
   """
   Decouple this item with the other
   """
   assert isinstance(rhs, RangeItem)
   # print self.items, rhs.items
   new_values = [self.items - rhs.items, rhs.items - self.items, self.items & rhs.items] 
   new_items = []
   for value in new_values:
     # print value
     # print '%s - %s' % str(value.lower_bound()), str(value.upper_bound)
     if len(value) != 0:
       new_items.append(RangeItem(value.lower_bound(), value.upper_bound()))
     else:
       empty_range = RangeItem(0, 0)
       empty_range.items = IntervalSet.empty()
       new_items.append(empty_range)
   return new_items
Ejemplo n.º 2
0
class RangeItem:
    items = IntervalSet.empty()

    def __init__(self, low, high):
        """
    Initialize a range item with lower bound and higher bound.
    """
        self.items = IntervalSet([Interval(low, high)])

    def __eq__(self, rhs):
        """
    Redefine == operator
    """
        assert isinstance(rhs, RangeItem)
        return self.items == rhs.items

    def empty(self):
        if len(self.items) == 0:
            return True
        return False

    def dump(self, type='ip'):
        if self.empty():
            print 'Empty RangeItem'
        else:
            if type == 'int':
                print 'RangeItem %s - %s' % (self.items.lower_bound(),
                                             self.items.upper_bound())
            elif type == 'ip':
                print 'RangeItem %s - %s' % (long2ip(self.items.lower_bound()),
                                             long2ip(self.items.upper_bound()))

    def produce(self):
        return RangeItem(self.items.lower_bound(), self.items.upper_bound())

    def overlaps(self, rhs):
        """
    If this item is overlapped with the other
    """
        if len(self.items & rhs.items) != 0:
            return True
        return False

    def includes(self, rhs):
        """
    If this item includes the other
    """
        if self.items & rhs.items == rhs.items:
            return True
        return False

    def decouples(self, rhs):
        """
    Decouple this item with the other
    """
        assert isinstance(rhs, RangeItem)
        # print self.items, rhs.items
        new_values = [
            self.items - rhs.items, rhs.items - self.items,
            self.items & rhs.items
        ]
        new_items = []
        for value in new_values:
            # print value
            # print '%s - %s' % str(value.lower_bound()), str(value.upper_bound)
            if len(value) != 0:
                new_items.append(
                    RangeItem(value.lower_bound(), value.upper_bound()))
            else:
                empty_range = RangeItem(0, 0)
                empty_range.items = IntervalSet.empty()
                new_items.append(empty_range)
        return new_items
Ejemplo n.º 3
0
overtime = myHours - OfficeHours





r1 = IntervalSet([Interval(1, 1000), Interval(1100, 1200)])
r2 = IntervalSet([Interval(30, 50), Interval(60, 200), Interval(1150, 1300)])

r3 = IntervalSet([Interval(1000, 3000)])
r4 = IntervalSet([Interval(1000, 3000)])
r5 = IntervalSet([Interval(30000, 12000)])

print (r3 - r4), (r4 - r3), r3 & r4
print len(IntervalSet.empty())

if r3 & r4 == r4:
    print 'yes'

print r3 & r4
if (r3 - r4).empty():
   print "true"
print (r3 - r4).empty()



'''
interval对象初始化参数(lower_bound=-Inf, upper_bound=Inf, **kwargs)
三个boolean参数closed,lower_closed,upper_closed分表表示全闭,左闭右开,左开右闭。
    比如:r = Interval(upper_bound=62, closed=False) between(a, b, closed=True):返回以a和b为界的区间