def testQuantileAccumulatorUpdateAccumulatorMergeDuplicateCentroids(self): acc1 = utils.QuantileAccumulator(max_bins=5) acc1.UpdateOneValue(9) acc1.UpdateOneValue(22) acc2 = utils.QuantileAccumulator(max_bins=5) acc2.UpdateOneValue(9) acc2.UpdateOneValue(19) acc1.UpdateAccumulator(acc2) self.assertHistogramsEqual(acc1.bins, [(9, 2), (19, 1), (22, 1)])
def testQuantileAccumulatorUpdateAccumulatorMerge(self): acc1 = utils.QuantileAccumulator(max_bins=2) acc1.UpdateOneValue(5) acc1.UpdateOneValue(22) acc2 = utils.QuantileAccumulator(max_bins=2) acc2.UpdateOneValue(9) acc2.UpdateOneValue(19) acc1.UpdateAccumulator(acc2) self.assertHistogramsEqual(acc1.bins, [(7, 2), (20.5, 2)])
def testQuantileAccumulatorQuantileExact(self): acc = utils.QuantileAccumulator() acc.bins = [(1, 10), (2, 5), (3, 10)] self.assertAlmostEqual(acc.Quantile(0.4), 1.6666667) self.assertAlmostEqual(acc.Quantile(0.5), 2) self.assertAlmostEqual(acc.Quantile(0.6), 2.3333333)
def testQuantileAccumulatorUpdateOneValueIncrement(self): acc = utils.QuantileAccumulator(max_bins=2) acc.UpdateOneValue(5) acc.UpdateOneValue(5) acc.UpdateOneValue(5) self.assertHistogramsEqual(acc.bins, [(5, 3)])
def testQuantileAccumulatorUpdateOneValueMerge(self): acc = utils.QuantileAccumulator(max_bins=2) acc.UpdateOneValue(5) acc.UpdateOneValue(22) acc.UpdateOneValue(9) self.assertHistogramsEqual(acc.bins, [(7, 2), (22, 1)])
def testQuantileAccumulatorQuantileBeforeAfter(self): acc = utils.QuantileAccumulator() acc.bins = [(1, 10), (2, 5), (3, 10)] self.assertAlmostEqual(acc.Quantile(0), 1) self.assertAlmostEqual(acc.Quantile(0.1), 1) self.assertAlmostEqual(acc.Quantile(0.9), 3) self.assertAlmostEqual(acc.Quantile(1), 3)
def testQuantileAccumulatorQuantileLots(self): acc = utils.QuantileAccumulator(max_bins=100) for i in range(10001): acc.UpdateOneValue(i/10) self.assertAlmostEqual(acc.Quantile(0.5), 500, places=0) self.assertAlmostEqual(acc.Quantile(0.2), 200, places=0) self.assertAlmostEqual(acc.Quantile(0.1), 100, places=0)
def testQuantileAccumulatorUpdateHistogramPaperExample(self): acc = utils.QuantileAccumulator(max_bins=5) acc.bins = [(2, 1), (9.5, 2), (17.5, 2), (23, 1), (36, 1)] acc.UpdateHistogram([(32, 1), (30, 1), (45, 1)]) self.assertHistogramsEqual(acc.bins, [(2, 1), (9.5, 2), (19.3333333, 3), (32.6666667, 3), (45, 1)])
def testQuantileAccumulatorNeverUpdated(self): acc = utils.QuantileAccumulator() self.assertTrue(math.isnan(acc.Quantile(0.1)), msg="expected NaN")
def testQuantileAccumulatorUpdateHistogramManyDuplicateCentroids(self): acc = utils.QuantileAccumulator(max_bins=5) acc.bins = [(2, 1), (2, 1), (2, 1), (2, 1), (2, 1)] acc.UpdateHistogram([(1, 1), (1, 1), (1, 1)]) self.assertHistogramsEqual(acc.bins, [(1, 3), (2, 5)])