def testEmptyBins(self): x = Histogram(10, 2) self.assertEqual(x.size(), 10) self.assertEqual(x.min(), float('inf')) self.assertEqual(x.max(), 1.) self.assertEqual(x._upperBound(), 10.) self.assertEqual(len(x.histograms), 2) p = x.getProbabilities() self.assertTrue((p == numpy.zeros(10, numpy.float64)).all())
def testConstantValueBins(self): # Basic tests with constant-value bins. size = 8 values = range(size) weights = [1.] * size mean, variance = _computeMeanAndVariance(values, weights) x = Histogram(size, 2) x.setCurrentToMinimum() for i in range(8): x.accumulate(i, 1.) self.assertAlmostEqual(x.getMean(), mean) self.assertAlmostEqual(x.getUnbiasedVariance(), variance) self.assertEqual(x.size(), 8) self.assertEqual(x.min(), 0.) self.assertEqual(x.max(), 8.) self.assertEqual(x._upperBound(), 8.) p = x.getProbabilities() self.assertTrue((p == 1./8.).all())
def testPoisson1(self): # Poisson with mean 4. 20 bins. PMF = e^-lambda lambda^n / n! # Store in the first array of bins. lam = 4. size = 20 poisson = [math.exp(-lam)] for n in range(1, size): poisson.append(poisson[-1] * lam / n) cardinality = size sumOfWeights = sum(poisson) mean = 0. for i in range(size): mean += poisson[i] * i mean /= sumOfWeights summedSecondCenteredMoment = 0. for i in range(size): summedSecondCenteredMoment += poisson[i] * (i - mean)**2 stream = StringIO(repr(cardinality) + '\n' + repr(sumOfWeights) + '\n' + repr(mean) + '\n' + repr(summedSecondCenteredMoment) + '\n' + '0\n1\n' + ''.join([repr(_x) + ' ' for _x in poisson]) + '\n' + '0 ' * len(poisson) + '\n') x = Histogram() x.read(stream, 2) assert x.cardinality == cardinality assert x.sumOfWeights == sumOfWeights assert x.mean == mean assert x.summedSecondCenteredMoment == summedSecondCenteredMoment assert x.size() == len(poisson) self.assertAlmostEqual(sum(x.getProbabilities()), 1) stream = StringIO() writer = XmlWriter(stream) writer.beginDocument() x.writeXml(writer, 0, 0) writer.endDocument()