def testEmptyIntersection(self): values, ix1, ix2 = intersect([1, 2, 3], [4, 5, 6]) self.assertEqual(len(values), 0) self.assertEqual(len(ix1), 0) self.assertEqual(len(ix2), 0) values, ix1, ix2 = intersect([], []) self.assertEqual(len(values), 0) self.assertEqual(len(ix1), 0) self.assertEqual(len(ix2), 0)
def testPartialIntersection6(self): v1 = [1, 1, 2, 2, 3, 3] v2 = [1, 2, 3] values, ix1, ix2 = intersect(v1, v2) self.assertEqual(values, [1, 2, 3]) self.assertEqual(ix1, [0, 2, 4]) self.assertEqual(ix2, [0, 1, 2]) values, ix2, ix1 = intersect(v2, v1) self.assertEqual(values, [1, 2, 3]) self.assertEqual(ix1, [0, 2, 4]) self.assertEqual(ix2, [0, 1, 2])
def testPartialIntersectionSkipNones(self): v1 = [None, 1, None, None, 2, None, 3, None, 4] v2 = [1, None, 2, None, 3, 4] values, ix1, ix2 = intersect(v1, v2, True) self.assertEqual(values, [1, 2, 3, 4]) self.assertEqual(ix1, [1, 4, 6, 8]) self.assertEqual(ix2, [0, 2, 4, 5]) values, ix2, ix1 = intersect(v2, v1, True) self.assertEqual(values, [1, 2, 3, 4]) self.assertEqual(ix1, [1, 4, 6, 8]) self.assertEqual(ix2, [0, 2, 4, 5])
def update(self): if self.__isDirty(): # Search for datetime intersections between the data series, # but start right after the last one found. ds1DateTimes = self.__ds1.getDecorated().getDateTimes() ds2DateTimes = self.__ds2.getDecorated().getDateTimes() if self.__lastPos1 != None: ds1DateTimes = ds1DateTimes[self.__lastPos1+1:] if self.__lastPos2 != None: ds2DateTimes = ds2DateTimes[self.__lastPos2+1:] # Calculate the intersections. dateTimes, pos1, pos2 = intersect(ds1DateTimes, ds2DateTimes) # Update each array's relative position to make them absolute positions. if self.__lastPos1 != None and len(pos1): pos1 = [self.__lastPos1 + pos + 1 for pos in pos1] if self.__lastPos2 != None and len(pos2): pos2 = [self.__lastPos2 + pos + 1 for pos in pos2] # Update the last intersection. if len(pos1): self.__lastPos1 = pos1[-1] if len(pos2): self.__lastPos2 = pos2[-1] # Update the aligned data series. self.__ds1.update(dateTimes, pos1) self.__ds2.update(dateTimes, pos2) self.__resetDirty()
def testPartialIntersection3(self): values, ix1, ix2 = intersect([1, 2, 5], [1, 3, 5]) self.assertEqual(len(values), 2) self.assertEqual(values[0], 1) self.assertEqual(values[1], 5) self.assertEqual(ix1[0], 0) self.assertEqual(ix1[1], 2) self.assertEqual(ix2[0], 0) self.assertEqual(ix2[1], 2)
def testFullIntersectionWithDateTimes(self): size = 1000 dateTimes1 = [] dateTimes2 = [] now = datetime.datetime.now() for i in xrange(size): dateTimes1.append(now + datetime.timedelta(seconds=i)) dateTimes2.append(now + datetime.timedelta(seconds=i)) self.assertEqual(dateTimes1, dateTimes2) values, ix1, ix2 = intersect(dateTimes1, dateTimes2) self.assertEqual(values, dateTimes1) self.assertEqual(values, dateTimes2) self.assertEqual(ix1, range(size)) self.assertEqual(ix1, ix2)
def testPartialIntersection5(self): values, ix1, ix2 = intersect([1, 2, 3], [3, 6]) self.assertEqual(len(values), 1) self.assertEqual(values[0], 3) self.assertEqual(ix1[0], 2) self.assertEqual(ix2[0], 0)
def testPartialIntersection1(self): values, ix1, ix2 = intersect([0, 2, 4], [1, 2, 3]) self.assertEqual(len(values), 1) self.assertEqual(values[0], 2) self.assertEqual(ix1[0], 1) self.assertEqual(ix2[0], 1)
def testFullIntersection(self): values, ix1, ix2 = intersect([1, 2, 3], [1, 2, 3]) self.assertEqual(len(values), 3) self.assertEqual(len(ix1), 3) self.assertEqual(len(ix2), 3) self.assertEqual(ix1, ix2)