# HG changeset patch # User Jeff Hammel # Date 1425187697 28800 # Node ID 8e93d7357c6bc46b29073723b34bddbf0ca71883 # Parent 06094870fdd7704a0ec7be31eaa5c30589705dc6 working histogram w tests diff -r 06094870fdd7 -r 8e93d7357c6b numerics/histogram.py --- a/numerics/histogram.py Sat Feb 28 17:05:04 2015 -0800 +++ b/numerics/histogram.py Sat Feb 28 21:28:17 2015 -0800 @@ -33,16 +33,17 @@ """historgram""" def __init__(self, bins): - bins = sorted(bin) + self.bins = sorted(bins) assert len(bins) > 1 - self.data = self.OrderedDict(zip(bins[:-1], - bins[1:])) + self.data = OrderedDict([(bin, []) + for bin in zip(bins[:-1], + bins[1:])]) def add(self, *values): """add values to the histogram""" for value in values: for vmin, vmax in self.data.keys(): - if vmin <= value <= vmax: + if vmin <= value < vmax: self.data[(vmin, vmax)].append(value) def __iadd__(self, value): @@ -55,6 +56,11 @@ OrderedDict of counts """ self.add(*values) + return OrderedDict([(bin, len(value)) + for bin, value in self.data.items()]) + + def keys(self): + return self.data.keys() class HistogramParser(CSVParser): """histogram CLI option parser""" diff -r 06094870fdd7 -r 8e93d7357c6b tests/test_histogram.py --- a/tests/test_histogram.py Sat Feb 28 17:05:04 2015 -0800 +++ b/tests/test_histogram.py Sat Feb 28 21:28:17 2015 -0800 @@ -19,12 +19,49 @@ """basic histogram test""" # make some test data - data = [0,0,1,1,2,3,4,5,6,7,8,8,8] + data = [0.1, 0.1, + 1.1, 1.2, + 2, + 3, + 5, + 6, + 7, + 8, 8, 8, 8.1] bins = range(0,10) # make a histogram h = Histogram(bins) + # add some data to it + h.add(*data) + + # now make sure what we did works + + # First, let's check the bins + expected_bins = [(0,1), + (1,2), + (2,3), + (3,4), + (4,5), + (5,6), + (6,7), + (7,8), + (8,9)] + self.assertEqual(h.keys(), expected_bins) + + # now let's check the values + values = h() + self.assertEqual(values[(0,1)], 2) + self.assertEqual(values[(1,2)], 2) + self.assertEqual(values[(2,3)], 1) + self.assertEqual(values[(3,4)], 1) + self.assertEqual(values[(4,5)], 0) + self.assertEqual(values[(5,6)], 1) + self.assertEqual(values[(6,7)], 1) + self.assertEqual(values[(7,8)], 1) + self.assertEqual(values[(8,9)], 4) + + if __name__ == '__main__': unittest.main()