def testIncremental_Recursive(self):
		size = 20
		ds1 = dataseries.SequenceDataSeries()
		ds2 = dataseries.SequenceDataSeries()
		ads1, ads2 = dataseries.datetime_aligned(ds1, ds2)
		# Align the aligned dataseries again with respect to each other.
		ads1, ads2 = dataseries.datetime_aligned(ads1, ads2)

		now = datetime.datetime.now()
		for i in range(size):
			ds1.appendWithDateTime(now + datetime.timedelta(seconds=i), i)
			ds2.appendWithDateTime(now + datetime.timedelta(seconds=i), i)
			self.assertEqual(ads1.getLength(), ads2.getLength())
			self.assertEqual(ads1[:], ads2[:])
			self.assertEqual(ads1.getDateTimes()[:], ads2.getDateTimes()[:])
	def __init__(self, ds1, ds2, windowSize):
		# We're going to use datetime aligned versions of the dataseries.
		self.__ds1, self.__ds2 = dataseries.datetime_aligned(ds1, ds2)
		self.__windowSize = windowSize
		self.__hedgeRatio = None
		self.__spread = None
		self.__spreadMean = None
		self.__spreadStd = None
		self.__zScore = None
	def __init__(self, ds1, ds2, windowSize):
		# We're going to use datetime aligned versions of the dataseries.
		self.__ds1, self.__ds2 = dataseries.datetime_aligned(ds1, ds2)
		self.__windowSize = windowSize
		self.__hedgeRatio = None
		self.__spread = None
		self.__spreadMean = None
		self.__spreadStd = None
		self.__zScore = None
	def testFullyAligned_Recursive(self):
		size = 20
		ds1 = dataseries.SequenceDataSeries()
		ds2 = dataseries.SequenceDataSeries()
		ads1, ads2 = dataseries.datetime_aligned(ds1, ds2)
		# Align the aligned dataseries again with respect to each other.
		ads1, ads2 = dataseries.datetime_aligned(ads1, ads2)

		now = datetime.datetime.now()
		for i in range(size):
			ds1.appendWithDateTime(now + datetime.timedelta(seconds=i), i)
			ds2.appendWithDateTime(now + datetime.timedelta(seconds=i), i)

		self.assertEqual(len(ds1), len(ds2))

		for ads in [ads1, ads2]:
			self.assertEqual(ads.getLength(), size)
			self.assertEqual(ads.getFirstValidPos(), 0)
			for i in range(size):
				self.assertEqual(ads.getValueAbsolute(i), i)
				self.assertEqual(ads.getDateTimes()[i], now + datetime.timedelta(seconds=i))
	def testIncremental(self):
		size = 20
		ds1 = dataseries.SequenceDataSeries()
		ds2 = dataseries.SequenceDataSeries()
		ads1, ads2 = dataseries.datetime_aligned(ds1, ds2)

		now = datetime.datetime.now()
		for i in range(size):
			ds1.appendValueWithDatetime(now + datetime.timedelta(seconds=i), i)
			ds2.appendValueWithDatetime(now + datetime.timedelta(seconds=i), i)
			self.assertEqual(ads1.getLength(), ads2.getLength())
			self.assertEqual(ads1[:], ads2[:])
			self.assertEqual(ads1.getDateTimes()[:], ads2.getDateTimes()[:])
	def testPartiallyAligned_Recursive(self):
		size = 20
		commonDateTimes = []
		ds1 = dataseries.SequenceDataSeries()
		ds2 = dataseries.SequenceDataSeries()
		ads1, ads2 = dataseries.datetime_aligned(ds1, ds2)
		# Align the aligned dataseries again with respect to each other.
		ads1, ads2 = dataseries.datetime_aligned(ads1, ads2)

		now = datetime.datetime.now()
		for i in range(size):
			if i % 3 == 0:
				commonDateTimes.append(now + datetime.timedelta(seconds=i))
				ds1.appendWithDateTime(now + datetime.timedelta(seconds=i), i)
				ds2.appendWithDateTime(now + datetime.timedelta(seconds=i), i)
			elif i % 2 == 0:
				ds1.appendWithDateTime(now + datetime.timedelta(seconds=i), i)
			else:
				ds2.appendWithDateTime(now + datetime.timedelta(seconds=i), i)

		self.assertEqual(ads1.getLength(), ads2.getLength())
		self.assertEqual(ads1[:], ads2[:])
		self.assertEqual(ads1.getDateTimes(), commonDateTimes)
		self.assertEqual(ads2.getDateTimes(), commonDateTimes)
	def testFullyAligned(self):
		size = 20
		ds1 = dataseries.SequenceDataSeries()
		ds2 = dataseries.SequenceDataSeries()

		now = datetime.datetime.now()
		for i in range(size):
			ds1.appendValueWithDatetime(now + datetime.timedelta(seconds=i), i)
			ds2.appendValueWithDatetime(now + datetime.timedelta(seconds=i), i)

		self.assertEqual(len(ds1), len(ds2))

		ads1, ads2 = dataseries.datetime_aligned(ds1, ds2)
		for ads in [ads1, ads2]:
			self.assertEqual(ads.getLength(), size)
			self.assertEqual(ads.getFirstValidPos(), 0)
			for i in range(size):
				self.assertEqual(ads.getValueAbsolute(i), i)
				self.assertEqual(ads.getDateTimes()[i], now + datetime.timedelta(seconds=i))
	def testNotAligned(self):
		size = 20
		ds1 = dataseries.SequenceDataSeries()
		ds2 = dataseries.SequenceDataSeries()
		ads1, ads2 = dataseries.datetime_aligned(ds1, ds2)

		now = datetime.datetime.now()
		for i in range(size):
			if i % 2 == 0:
				ds1.appendWithDateTime(now + datetime.timedelta(seconds=i), i)
			else:
				ds2.appendWithDateTime(now + datetime.timedelta(seconds=i), i)

		self.assertEqual(len(ds1), len(ds2))

		for ads in [ads1, ads2]:
			self.assertEqual(ads.getLength(), 0)
			self.assertEqual(ads.getFirstValidPos(), 0)
			self.assertEqual(ads.getValueAbsolute(0), None)
			self.assertEqual(ads.getDateTimes(), [])
	def testPartiallyAligned(self):
		size = 20
		ds1 = dataseries.SequenceDataSeries()
		ds2 = dataseries.SequenceDataSeries()
		commonDateTimes = []

		now = datetime.datetime.now()
		for i in range(size):
			if i % 3 == 0:
				commonDateTimes.append(now + datetime.timedelta(seconds=i))
				ds1.appendValueWithDatetime(now + datetime.timedelta(seconds=i), i)
				ds2.appendValueWithDatetime(now + datetime.timedelta(seconds=i), i)
			elif i % 2 == 0:
				ds1.appendValueWithDatetime(now + datetime.timedelta(seconds=i), i)
			else:
				ds2.appendValueWithDatetime(now + datetime.timedelta(seconds=i), i)

		ads1, ads2 = dataseries.datetime_aligned(ds1, ds2)

		self.assertEqual(ads1.getLength(), ads2.getLength())
		self.assertEqual(ads1[:], ads2[:])
		self.assertEqual(ads1.getDateTimes(), commonDateTimes)
		self.assertEqual(ads2.getDateTimes(), commonDateTimes)