Esempio n. 1
0
  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)])
Esempio n. 2
0
  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)])
Esempio n. 3
0
  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)
Esempio n. 4
0
  def testQuantileAccumulatorUpdateOneValueIncrement(self):
    acc = utils.QuantileAccumulator(max_bins=2)
    acc.UpdateOneValue(5)
    acc.UpdateOneValue(5)
    acc.UpdateOneValue(5)

    self.assertHistogramsEqual(acc.bins, [(5, 3)])
Esempio n. 5
0
  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)])
Esempio n. 6
0
  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)
Esempio n. 7
0
  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)])
Esempio n. 9
0
 def testQuantileAccumulatorNeverUpdated(self):
   acc = utils.QuantileAccumulator()
   self.assertTrue(math.isnan(acc.Quantile(0.1)), msg="expected NaN")
Esempio n. 10
0
  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)])