コード例 #1
0
    def test_fill_with_numpy_array_0(self):
        ar = lambda *args: numpy.array(args, dtype=float)
        a = histogram(integer(0, 3, uoflow=False))
        a.fill(ar(-1, 0, 1, 2, 1))
        a.fill((4, -1, 0, 1, 2))
        self.assertEqual(a.value(0), 2)
        self.assertEqual(a.value(1), 3)
        self.assertEqual(a.value(2), 2)

        with self.assertRaises(ValueError):
            a.fill(numpy.empty((2, 2)))
        with self.assertRaises(ValueError):
            a.fill(numpy.empty(2), 1)
        with self.assertRaises(ValueError):
            a.fill("abc")

        a = histogram(integer(0, 2, uoflow=False),
                      regular(2, 0, 2, uoflow=False))
        a.fill(ar(-1, 0, 1),
               ar(-1., 1., 0.1))
        self.assertEqual(a.value(0, 0), 0)
        self.assertEqual(a.value(0, 1), 1)
        self.assertEqual(a.value(1, 0), 1)
        self.assertEqual(a.value(1, 1), 0)

        with self.assertRaises(ValueError):
            a.fill(ar(1, 2, 3))

        a = histogram(integer(0, 3, uoflow=False))
        a.fill(ar(0, 0, 1, 2, 1, 0, 2, 2))
        self.assertEqual(a.value(0), 3)
        self.assertEqual(a.value(1), 2)
        self.assertEqual(a.value(2), 3)
コード例 #2
0
    def test_add_2d_w(self):
        for uoflow in (False, True):
            h = histogram(integer(-1, 2, uoflow=uoflow),
                          regular(4, -2, 2, uoflow=uoflow))
            h.fill(-1, -2)
            h.fill(-1, -1)
            h.fill(0, 0)
            h.fill(0, 1)
            h.fill(1, 0)
            h.fill(3, -1)
            h.fill(0, -3)

            m = [[1, 1, 0, 0, 0, 0],
                 [0, 0, 1, 1, 0, 1],
                 [0, 0, 1, 0, 0, 0],
                 [0, 1, 0, 0, 0, 0],
                 [0, 0, 0, 0, 0, 0]]

            h2 = histogram(integer(-1, 2, uoflow=uoflow),
                           regular(4, -2, 2, uoflow=uoflow))
            h2.fill(0, 0, weight=0)

            h2 += h
            h2 += h
            h += h
            self.assertEqual(h, h2)

            for i in range(-uoflow, len(h.axis(0)) + uoflow):
                for j in range(-uoflow, len(h.axis(1)) + uoflow):
                    self.assertEqual(h.value(i, j), 2 * m[i][j])
                    self.assertEqual(h.variance(i, j), 2 * m[i][j])
コード例 #3
0
    def test_numpy_conversion_2(self):
        a = histogram(integer(0, 2, uoflow=False),
                      integer(0, 3, uoflow=False),
                      integer(0, 4, uoflow=False))
        r = numpy.zeros((2, 3, 4), dtype=numpy.int8)
        for i in range(len(a.axis(0))):
            for j in range(len(a.axis(1))):
                for k in range(len(a.axis(2))):
                    for m in range(i+j+k):
                        a.fill(i, j, k)
                    r[i,j,k] = i+j+k

        d = numpy.zeros((2, 3, 4), dtype=numpy.int8)
        for i in range(len(a.axis(0))):
            for j in range(len(a.axis(1))):
                for k in range(len(a.axis(2))):
                    d[i,j,k] = a.value(i,j,k)

        self.assertTrue(numpy.all(d == r))

        c = numpy.array(a) # a copy
        v = numpy.asarray(a) # a view

        self.assertTrue(numpy.all(c == r))
        self.assertTrue(numpy.all(v == r))
コード例 #4
0
    def test_numpy_conversion_4(self):
        a = histogram(integer(0, 2, uoflow=False),
                      integer(0, 4, uoflow=False))
        a1 = numpy.asarray(a)
        self.assertEqual(a1.dtype, numpy.uint8)
        self.assertEqual(a1.shape, (2, 4))

        b = histogram()
        b1 = numpy.asarray(b)
        self.assertEqual(b1.shape, (0,))
        self.assertEqual(numpy.sum(b1), 0)
コード例 #5
0
    def test_init(self):
        histogram()
        histogram(integer(-1, 1))
        with self.assertRaises(TypeError):
            histogram(1)
        with self.assertRaises(TypeError):
            histogram("bla")
        with self.assertRaises(TypeError):
            histogram([])
        with self.assertRaises(TypeError):
            histogram(regular)
        with self.assertRaises(TypeError):
            histogram(regular())
        with self.assertRaises(TypeError):
            histogram([integer(-1, 1)])
        with self.assertRaises(RuntimeError):
            histogram(integer(-1, 1), unknown_keyword="nh")

        h = histogram(integer(-1, 2))
        self.assertEqual(h.dim, 1)
        self.assertEqual(h.axis(0), integer(-1, 2))
        self.assertEqual(h.axis(0).shape, 5)
        self.assertEqual(histogram(integer(-1, 2, uoflow=False)).axis(0).shape, 3)
        self.assertNotEqual(h, histogram(regular(1, -1, 1)))
        self.assertNotEqual(h, histogram(integer(-1, 2)))
        self.assertNotEqual(h, histogram(integer(-1, 1, label="ia")))
コード例 #6
0
    def test_reduce_to(self):
        h = histogram(integer(0, 2), integer(1, 4))
        h.fill(0, 1)
        h.fill(0, 2)
        h.fill(1, 3)

        h0 = h.reduce_to(0)
        self.assertEqual(h0.dim, 1)
        self.assertEqual(h0.axis(), integer(0, 2))
        self.assertEqual([h0.value(i) for i in range(2)], [2, 1])

        h1 = h.reduce_to(1)
        self.assertEqual(h1.dim, 1)
        self.assertEqual(h1.axis(), integer(1, 4))
        self.assertEqual([h1.value(i) for i in range(3)], [1, 1, 1])
コード例 #7
0
    def test_pickle_0(self):
        a = histogram(category(0, 1, 2),
                      integer(0, 20, label='ia'),
                      regular(20, 0.0, 20.0, uoflow=False),
                      variable(0.0, 1.0, 2.0),
                      circular(4, label='pa'))
        for i in range(len(a.axis(0))):
            a.fill(i, 0, 0, 0, 0)
            for j in range(len(a.axis(1))):
                a.fill(i, j, 0, 0, 0)
                for k in range(len(a.axis(2))):
                    a.fill(i, j, k, 0, 0)
                    for l in range(len(a.axis(3))):
                        a.fill(i, j, k, l, 0)
                        for m in range(len(a.axis(4))):
                            a.fill(i, j, k, l, m * 0.5 * pi)

        io = BytesIO()
        pickle.dump(a, io)
        io.seek(0)
        b = pickle.load(io)
        self.assertNotEqual(id(a), id(b))
        self.assertEqual(a.dim, b.dim)
        self.assertEqual(a.axis(0), b.axis(0))
        self.assertEqual(a.axis(1), b.axis(1))
        self.assertEqual(a.axis(2), b.axis(2))
        self.assertEqual(a.axis(3), b.axis(3))
        self.assertEqual(a.axis(4), b.axis(4))
        self.assertEqual(a.sum, b.sum)
        self.assertEqual(a, b)
コード例 #8
0
    def test_pickle_1(self):
        a = histogram(category(0, 1, 2),
                       integer(0, 3, label='ia'),
                       regular(4, 0.0, 4.0, uoflow=False),
                       variable(0.0, 1.0, 2.0))
        for i in range(len(a.axis(0))):
            a.fill(i, 0, 0, 0, weight=3)
            for j in range(len(a.axis(1))):
                a.fill(i, j, 0, 0, weight=10)
                for k in range(len(a.axis(2))):
                    a.fill(i, j, k, 0, weight=2)
                    for l in range(len(a.axis(3))):
                        a.fill(i, j, k, l, weight=5)

        io = BytesIO()
        pickle.dump(a, io)
        io.seek(0)
        b = pickle.load(io)
        self.assertNotEqual(id(a), id(b))
        self.assertEqual(a.dim, b.dim)
        self.assertEqual(a.axis(0), b.axis(0))
        self.assertEqual(a.axis(1), b.axis(1))
        self.assertEqual(a.axis(2), b.axis(2))
        self.assertEqual(a.axis(3), b.axis(3))
        self.assertEqual(a.sum, b.sum)
        self.assertEqual(a, b)
コード例 #9
0
    def test_numpy_conversion_0(self):
        a = histogram(integer(0, 3, uoflow=False))
        for i in range(10):
            a.fill(1)
        a.fill(1, count=90)
        c = numpy.array(a) # a copy
        v = numpy.asarray(a) # a view

        for t in (c, v):
            self.assertEqual(t.dtype, numpy.uint8)
            self.assertTrue(numpy.all(t == numpy.array((0, 100, 0))))

        for i in range(20):
            a.fill(1)
        a.fill(1, count=2 * numpy.ones(40, dtype=numpy.uint32))
        # copy does not change, but view does
        self.assertTrue(numpy.all(c == numpy.array((0, 100, 0))))
        self.assertTrue(numpy.all(v == numpy.array((0, 200, 0))))

        a.fill(1, count=100)
        c = numpy.array(a)
        self.assertEqual(c.dtype, numpy.uint16)
        self.assertTrue(numpy.all(c == numpy.array((0, 300, 0))))
        # view does not follow underlying switch in word size
        self.assertFalse(numpy.all(c == v))
コード例 #10
0
 def test_getitem(self):
     v = [-1, 0, 1, 2]
     a = integer(-1, 3)
     for i in range(4):
         self.assertEqual(a[i][0], v[i])
     self.assertEqual(a[-1][0], -2 ** 31 + 1)
     self.assertEqual(a[4][1], 2 ** 31 - 1)
コード例 #11
0
    def test_fill_with_numpy_array_1(self):
        ar = lambda *args: numpy.array(args, dtype=float)
        a = histogram(integer(0, 3, uoflow=True))
        v = ar(-1, 0, 1, 2, 3, 4)
        w = ar( 2, 3, 4, 5, 6, 7)
        a.fill(v, weight=w)
        a.fill((0, 1), weight=(2, 3))
        self.assertEqual(a.value(-1), 2)
        self.assertEqual(a.value(0), 5)
        self.assertEqual(a.value(1), 7)
        self.assertEqual(a.value(2), 5)
        self.assertEqual(a.variance(-1), 4)
        self.assertEqual(a.variance(0), 13)
        self.assertEqual(a.variance(1), 25)
        self.assertEqual(a.variance(2), 25)
        a.fill((1, 2), weight=1)
        a.fill(0, weight=(1, 2))
        self.assertEqual(a.value(0), 8)
        self.assertEqual(a.value(1), 8)
        self.assertEqual(a.value(2), 6)

        with self.assertRaises(RuntimeError):
            a.fill((1, 2), foo=(1, 1))
        with self.assertRaises(ValueError):
            a.fill((1, 2), weight=(1,))
        with self.assertRaises(ValueError):
            a.fill((1, 2), weight="ab")
        with self.assertRaises(RuntimeError):
            a.fill((1, 2), weight=(1, 1), foo=1)
        with self.assertRaises(ValueError):
            a.fill((1, 2), weight=([1, 1], [2, 2]))

        a = histogram(integer(0, 2, uoflow=False),
                      regular(2, 0, 2, uoflow=False))
        a.fill((-1, 0, 1), (-1, 1, 0.1))
        self.assertEqual(a.value(0, 0), 0)
        self.assertEqual(a.value(0, 1), 1)
        self.assertEqual(a.value(1, 0), 1)
        self.assertEqual(a.value(1, 1), 0)
        a = histogram(integer(0, 3, uoflow=False))
        a.fill((0, 0, 1, 2))
        a.fill((1, 0, 2, 2))
        self.assertEqual(a.value(0), 3)
        self.assertEqual(a.value(1), 2)
        self.assertEqual(a.value(2), 3)
コード例 #12
0
 def test_numpy_conversion_1(self):
     a = histogram(integer(0, 3))
     for i in range(10):
         a.fill(1, weight=3)
     c = numpy.array(a) # a copy
     v = numpy.asarray(a) # a view
     self.assertEqual(c.dtype, numpy.float64)
     self.assertTrue(numpy.all(c == numpy.array(((0, 30, 0, 0, 0), (0, 90, 0, 0, 0)))))
     self.assertTrue(numpy.all(v == c))
コード例 #13
0
 def test_copy(self):
     a = histogram(integer(-1, 1))
     import copy
     b = copy.copy(a)
     self.assertEqual(a, b)
     self.assertNotEqual(id(a), id(b))
     c = copy.deepcopy(b)
     self.assertEqual(b, c)
     self.assertNotEqual(id(b), id(c))
コード例 #14
0
 def test_index(self):
     a = integer(-1, 3)
     self.assertEqual(a.index(-3), -1)
     self.assertEqual(a.index(-2), -1)
     self.assertEqual(a.index(-1), 0)
     self.assertEqual(a.index(0), 1)
     self.assertEqual(a.index(1), 2)
     self.assertEqual(a.index(2), 3)
     self.assertEqual(a.index(3), 4)
     self.assertEqual(a.index(4), 4)
コード例 #15
0
 def test(self):
     axes = (regular(10, 0, 1), integer(0, 1))
     h = histogram(*axes)
     for i, a in enumerate(axes):
         self.assertEqual(h.axis(i), a)
     with self.assertRaises(IndexError):
         h.axis(2)
     self.assertEqual(h.axis(-1), axes[-1])
     self.assertEqual(h.axis(-2), axes[-2])
     with self.assertRaises(IndexError):
         h.axis(-3)
コード例 #16
0
 def test_numpy_conversion_5(self):
     a = histogram(integer(0, 3, uoflow=False),
                   integer(0, 2, uoflow=False))
     a.fill(0, 0)
     for i in range(80):
         a += a
     # a now holds a multiprecision type
     a.fill(1, 0)
     for i in range(2): a.fill(2, 0)
     for i in range(3): a.fill(0, 1)
     for i in range(4): a.fill(1, 1)
     for i in range(5): a.fill(2, 1)
     a1 = numpy.asarray(a)
     self.assertEqual(a1.shape, (3, 2))
     self.assertEqual(a1[0, 0], float(2 ** 80))
     self.assertEqual(a1[1, 0], 1)
     self.assertEqual(a1[2, 0], 2)
     self.assertEqual(a1[0, 1], 3)
     self.assertEqual(a1[1, 1], 4)
     self.assertEqual(a1[2, 1], 5)
コード例 #17
0
    def test_fill_1d(self):
        h0 = histogram(integer(-1, 2, uoflow=False))
        h1 = histogram(integer(-1, 2, uoflow=True))
        for h in (h0, h1):
            with self.assertRaises(ValueError):
                h.fill()
            with self.assertRaises(ValueError):
                h.fill(1, 2)
            h.fill(-10)
            h.fill(-1)
            h.fill(-1)
            h.fill(0)
            h.fill(1)
            h.fill(1)
            h.fill(1)
            h.fill(10)
        self.assertEqual(h0.sum, 6)
        self.assertEqual(h0.axis(0).shape, 3)
        self.assertEqual(h1.sum, 8)
        self.assertEqual(h1.axis(0).shape, 5)

        for h in (h0, h1):
            self.assertEqual(h.value(0), 2)
            self.assertEqual(h.value(1), 1)
            self.assertEqual(h.value(2), 3)
            with self.assertRaises(RuntimeError):
                h.value(0, 1)
            with self.assertRaises(RuntimeError):
                h.value(0, foo=None)
            self.assertEqual(h.variance(0), 2)
            self.assertEqual(h.variance(1), 1)
            self.assertEqual(h.variance(2), 3)
            with self.assertRaises(RuntimeError):
                h.variance(0, 1)
            with self.assertRaises(RuntimeError):
                h.variance(0, foo=None)

        self.assertEqual(h1.value(-1), 1)
        self.assertEqual(h1.value(3), 1)
コード例 #18
0
 def test_numpy_conversion_6(self):
     a = integer(0, 2)
     b = regular(2, 0, 2)
     c = variable(0, 1, 2)
     ref = numpy.array((0., 1., 2.))
     self.assertTrue(numpy.all(numpy.array(a) == ref))
     self.assertTrue(numpy.all(numpy.array(b) == ref))
     self.assertTrue(numpy.all(numpy.array(c) == ref))
     d = circular(4)
     ref = numpy.array((0., 0.5*pi, pi, 1.5*pi, 2.0*pi))
     self.assertTrue(numpy.all(numpy.array(d) == ref))
     e = category(1, 2)
     ref = numpy.array((1, 2))
     self.assertTrue(numpy.all(numpy.array(e) == ref))
コード例 #19
0
    def test_numpy_conversion_3(self):
        a = histogram(integer(0, 2),
                      integer(0, 3),
                      integer(0, 4))
        r = numpy.zeros((2, 4, 5, 6))
        for i in range(len(a.axis(0))):
            for j in range(len(a.axis(1))):
                for k in range(len(a.axis(2))):
                    a.fill(i, j, k, weight=i+j+k)
                    r[0, i, j, k] = i+j+k
                    r[1, i, j, k] = (i+j+k)**2
        c = numpy.array(a) # a copy
        v = numpy.asarray(a) # a view

        c2 = numpy.zeros((2, 4, 5, 6))
        for i in range(len(a.axis(0))):
            for j in range(len(a.axis(1))):
                for k in range(len(a.axis(2))):
                    c2[0, i, j, k] = a.value(i,j,k)
                    c2[1, i, j, k] = a.variance(i,j,k)

        self.assertTrue(numpy.all(c == c2))
        self.assertTrue(numpy.all(c == r))
        self.assertTrue(numpy.all(v == r))
コード例 #20
0
 def test_growth(self):
     h = histogram(integer(-1, 2))
     h.fill(-1)
     h.fill(1)
     h.fill(1)
     for i in range(255):
         h.fill(0)
     h.fill(0)
     for i in range(1000-256):
         h.fill(0)
     self.assertEqual(h.value(-1), 0)
     self.assertEqual(h.value(0), 1)
     self.assertEqual(h.value(1), 1000)
     self.assertEqual(h.value(2), 2)
     self.assertEqual(h.value(3), 0)
コード例 #21
0
 def test_operators(self):
     h = histogram(integer(0, 2))
     h.fill(0)
     h += h
     self.assertEqual(h.value(0), 2)
     self.assertEqual(h.variance(0), 2)
     self.assertEqual(h.value(1), 0)
     h *= 2
     self.assertEqual(h.value(0), 4)
     self.assertEqual(h.variance(0), 8)
     self.assertEqual(h.value(1), 0)
     self.assertEqual((h + h).value(0), (2 * h).value(0))
     self.assertEqual((h + h).value(0), (h * 2).value(0))
     self.assertNotEqual((h + h).variance(0), (2 * h).variance(0))
     self.assertNotEqual((h + h).variance(0), (h * 2).variance(0))
     h2 = histogram(regular(2, 0, 2))
     with self.assertRaises(RuntimeError):
         h + h2
コード例 #22
0
    def test_fill_2d(self):
        for uoflow in (False, True):
            h = histogram(integer(-1, 2, uoflow=uoflow),
                           regular(4, -2, 2, uoflow=uoflow))
            h.fill(-1, -2)
            h.fill(-1, -1)
            h.fill(0, 0)
            h.fill(0, 1)
            h.fill(1, 0)
            h.fill(3, -1)
            h.fill(0, -3)
            with self.assertRaises(Exception):
                h.fill(1)
            with self.assertRaises(Exception):
                h.fill(1, 2, 3)

            m = [[1, 1, 0, 0, 0, 0],
                 [0, 0, 1, 1, 0, 1],
                 [0, 0, 1, 0, 0, 0],
                 [0, 1, 0, 0, 0, 0],
                 [0, 0, 0, 0, 0, 0]]
            for i in range(-uoflow, len(h.axis(0)) + uoflow):
                for j in range(-uoflow, len(h.axis(1)) + uoflow):
                    self.assertEqual(h.value(i, j), m[i][j])
コード例 #23
0
 def test_init(self):
     integer(-1, 2)
     with self.assertRaises(TypeError):
         integer()
     with self.assertRaises(TypeError):
         integer(1)
     with self.assertRaises(TypeError):
         integer("1", 2)
     with self.assertRaises(RuntimeError):
         integer(2, -1)
     with self.assertRaises(TypeError):
         integer(1, 2, 3)
     self.assertEqual(integer(-1, 2), integer(-1, 2))
     self.assertNotEqual(integer(-1, 2), integer(-1, 2, label="ia"))
     self.assertNotEqual(integer(-1, 2, uoflow=False),
                         integer(-1, 2, uoflow=True))
コード例 #24
0
 def test_label(self):
     self.assertEqual(integer(-1, 2, label="ia").label, "ia")
コード例 #25
0
 def test_iter(self):
     v = [-1, 0, 1, 2, 3]
     a = integer(-1, 3)
     self.assertEqual([x[0] for x in a], v[:-1])
     self.assertEqual([x[1] for x in a], v[1:])
コード例 #26
0
 def test_add_2d_bad(self):
     a = histogram(integer(-1, 1))
     b = histogram(regular(3, -1, 1))
     with self.assertRaises(RuntimeError):
         a += b
コード例 #27
0
 def test_repr(self):
     h = histogram(regular(10, 0, 1), integer(0, 1))
     h2 = eval(repr(h))
     self.assertEqual(h, h2)
コード例 #28
0
 def test_len(self):
     self.assertEqual(len(integer(-1, 3)), 4)