Ejemplo n.º 1
0
    def test_entropy_nonuniform(self):
        d = Dist([2, 1])
        self.assertTrue(isnan(entropy(d, b=-1.0)))
        self.assertTrue(isnan(entropy(d, b=-0.5)))
        self.assertAlmostEqual(0.000000, entropy(d, b=0.0), places=6)
        self.assertAlmostEqual(-0.918296, entropy(d, b=0.5), places=6)
        self.assertAlmostEqual(1.569837, entropy(d, b=1.5), places=6)
        self.assertAlmostEqual(0.918296, entropy(d, b=2), places=6)
        self.assertAlmostEqual(0.579380, entropy(d, b=3), places=6)
        self.assertAlmostEqual(0.459148, entropy(d, b=4), places=6)

        d = Dist([1, 1, 0])
        self.assertTrue(isnan(entropy(d, b=-1.0)))
        self.assertTrue(isnan(entropy(d, b=-0.5)))
        self.assertAlmostEqual(0.000000, entropy(d, b=0.0), places=6)
        self.assertAlmostEqual(-1.000000, entropy(d, b=0.5), places=6)
        self.assertAlmostEqual(1.709511, entropy(d, b=1.5), places=6)
        self.assertAlmostEqual(1.000000, entropy(d, b=2), places=6)
        self.assertAlmostEqual(0.630930, entropy(d, b=3), places=6)
        self.assertAlmostEqual(0.500000, entropy(d, b=4), places=6)

        d = Dist([2, 2, 1])
        self.assertTrue(isnan(entropy(d, b=-1.0)))
        self.assertTrue(isnan(entropy(d, b=-0.5)))
        self.assertAlmostEqual(0.000000, entropy(d, b=0.0), places=6)
        self.assertAlmostEqual(-1.521928, entropy(d, b=0.5), places=6)
        self.assertAlmostEqual(2.601753, entropy(d, b=1.5), places=6)
        self.assertAlmostEqual(1.521928, entropy(d, b=2), places=6)
        self.assertAlmostEqual(0.960230, entropy(d, b=3), places=6)
        self.assertAlmostEqual(0.760964, entropy(d, b=4), places=6)
Ejemplo n.º 2
0
    def test_conditional_entropy_dependent(self):
        joint = Dist([10, 70, 15, 5])
        x = Dist([80, 20])
        y = Dist([25, 75])

        self.assertTrue(isnan(conditional_entropy(joint, x, b=-1.0)))
        self.assertTrue(isnan(conditional_entropy(joint, x, b=-0.5)))
        self.assertAlmostEqual(
            0.000000, conditional_entropy(joint, x, b=0.0), places=6)
        self.assertAlmostEqual(-0.597107,
                               conditional_entropy(joint, x, b=0.5), places=6)
        self.assertAlmostEqual(
            1.020761, conditional_entropy(joint, x, b=1.5), places=6)
        self.assertAlmostEqual(
            0.597107, conditional_entropy(joint, x, b=2), places=6)
        self.assertAlmostEqual(
            0.376733, conditional_entropy(joint, x, b=3), places=6)
        self.assertAlmostEqual(
            0.298554, conditional_entropy(joint, x, b=4), places=6)

        self.assertTrue(isnan(conditional_entropy(joint, y, b=-1.0)))
        self.assertTrue(isnan(conditional_entropy(joint, y, b=-0.5)))
        self.assertAlmostEqual(
            0.000000, conditional_entropy(joint, y, b=0.0), places=6)
        self.assertAlmostEqual(-0.507757,
                               conditional_entropy(joint, y, b=0.5), places=6)
        self.assertAlmostEqual(
            0.868017, conditional_entropy(joint, y, b=1.5), places=6)
        self.assertAlmostEqual(
            0.507757, conditional_entropy(joint, y, b=2), places=6)
        self.assertAlmostEqual(
            0.320359, conditional_entropy(joint, y, b=3), places=6)
        self.assertAlmostEqual(
            0.253879, conditional_entropy(joint, y, b=4), places=6)
Ejemplo n.º 3
0
    def test_relative_entropy_sizes(self):
        p = Dist(5)
        p.tick(0)
        q = Dist(4)
        p.tick(1)

        self.assertTrue(isnan(relative_entropy(p, q)))
        self.assertTrue(isnan(relative_entropy(q, p)))
Ejemplo n.º 4
0
    def test_relative_entropy_invalid(self):
        p = Dist(5)
        q = Dist(5)

        self.assertTrue(isnan(relative_entropy(p, q)))

        p.tick(0)
        self.assertTrue(isnan(relative_entropy(p, q)))
        self.assertTrue(isnan(relative_entropy(q, p)))
Ejemplo n.º 5
0
    def test_relative_entropy(self):
        p = Dist([1, 0, 0])
        q = Dist([1, 1, 1])
        for b in np.arange(2.0, 4.0, 0.5):
            self.assertAlmostEqual(log(3., b), relative_entropy(p, q, b))

        p = Dist([1, 1, 0])
        for b in np.arange(2.0, 4.0, 0.5):
            self.assertAlmostEqual(log(3. / 2., b), relative_entropy(p, q, b))

        p = Dist([2, 2, 1])
        for b in np.arange(2.0, 4.0, 0.5):
            self.assertAlmostEqual(
                (4. * log(6. / 5., b) + log(3. / 5., b)) / 5., relative_entropy(p, q, b))

        q = Dist([1, 2, 2])
        for b in np.arange(2.0, 4.0, 0.5):
            self.assertAlmostEqual(log(2., b) / 5., relative_entropy(p, q, b))

        p = Dist([1, 0, 0])
        q = Dist([4, 1, 0])
        for b in np.arange(2.0, 4.0, 0.5):
            self.assertAlmostEqual(log(5. / 4., b), relative_entropy(p, q, b))

        q = Dist([1, 4, 0])
        for b in np.arange(2.0, 4.0, 0.5):
            self.assertAlmostEqual(log(5., b), relative_entropy(p, q, b))
Ejemplo n.º 6
0
    def test_tick_bounds_error(self):
        d = Dist(2)
        with self.assertRaises(IndexError):
            d.tick(-1)

        with self.assertRaises(IndexError):
            d.tick(3)
Ejemplo n.º 7
0
    def test_set_negative(self):
        d = Dist(2)
        d[0] = 5
        self.assertEqual(5, d[0])

        d[0] = -1
        self.assertEqual(0, d[0])
Ejemplo n.º 8
0
    def test_tick(self):
        d = Dist(2)

        self.assertEqual(1, d.tick(0))
        self.assertEqual(2, d.tick(0))
        self.assertEqual(2, d.counts())
        self.assertTrue(d.valid())
Ejemplo n.º 9
0
    def test_set_bounds_error(self):
        d = Dist(2)
        with self.assertRaises(IndexError):
            d[-1] = 3

        with self.assertRaises(IndexError):
            d[3] = 1
Ejemplo n.º 10
0
 def test_alloc_list_copies(self):
     lst = [0, 0, 0, 0]
     d = Dist(lst)
     for i in range(len(d)):
         d[i] = i
         self.assertEqual(d[i], i)
         self.assertEqual(lst[i], 0)
Ejemplo n.º 11
0
 def test_alloc_array_copies(self):
     arr = np.array([0, 0, 0, 0], dtype=np.uint32)
     d = Dist(arr)
     for i in range(len(d)):
         d[i] = i
         self.assertEqual(d[i], i)
         self.assertEqual(arr[i], 0)
Ejemplo n.º 12
0
    def test_probabilify_bounds_error(self):
        d = Dist(2)
        d[0] = 1
        with self.assertRaises(IndexError):
            d.probability(-1)

        with self.assertRaises(IndexError):
            d.probability(3)
Ejemplo n.º 13
0
 def test_dump(self):
     d = Dist(5)
     for i in range(1, len(d)):
         d[i] = i + 1
     self.assertEqual(14, d.counts())
     probs = d.dump()
     self.assertTrue(
         (probs == np.array([0., 2. / 14, 3. / 14, 4. / 14, 5. / 14])).all())
Ejemplo n.º 14
0
 def test_entropy_delta_function(self):
     d = Dist([0, 1, 0, 0, 0])
     self.assertTrue(isnan(entropy(d, b=-1.0)))
     self.assertTrue(isnan(entropy(d, b=-0.5)))
     self.assertAlmostEqual(0.000000, entropy(d, b=0.0), places=6)
     self.assertAlmostEqual(0.000000, entropy(d, b=0.5), places=6)
     self.assertAlmostEqual(0.000000, entropy(d, b=1.5), places=6)
     self.assertAlmostEqual(0.000000, entropy(d, b=2), places=6)
     self.assertAlmostEqual(0.000000, entropy(d, b=3), places=6)
     self.assertAlmostEqual(0.000000, entropy(d, b=4), places=6)
Ejemplo n.º 15
0
 def test_relative_entropy_same_dist(self):
     p = Dist(np.random.randint(0, 100, 20))
     self.assertTrue(isnan(relative_entropy(p, p, -1.0)))
     self.assertTrue(isnan(relative_entropy(p, p, -0.5)))
     self.assertAlmostEqual(0.000000, relative_entropy(p, p, 0.0), 1e-6)
     self.assertAlmostEqual(0.000000, relative_entropy(p, p, 0.5), 1e-6)
     self.assertAlmostEqual(0.000000, relative_entropy(p, p, 1.5), 1e-6)
     self.assertAlmostEqual(0.000000, relative_entropy(p, p, 2.0), 1e-6)
     self.assertAlmostEqual(0.000000, relative_entropy(p, p, 3.0), 1e-6)
     self.assertAlmostEqual(0.000000, relative_entropy(p, p, 4.0), 1e-6)
Ejemplo n.º 16
0
 def test_entropy_uniform(self):
     d = Dist([1, 1, 1, 1, 1])
     self.assertTrue(isnan(entropy(d, b=-1.0)))
     self.assertTrue(isnan(entropy(d, b=-0.5)))
     self.assertAlmostEqual(0.000000, entropy(d, b=0.0), places=6)
     self.assertAlmostEqual(-2.321928, entropy(d, b=0.5), places=6)
     self.assertAlmostEqual(3.969362, entropy(d, b=1.5), places=6)
     self.assertAlmostEqual(2.321928, entropy(d, b=2), places=6)
     self.assertAlmostEqual(1.464974, entropy(d, b=3), places=6)
     self.assertAlmostEqual(1.160964, entropy(d, b=4), places=6)
Ejemplo n.º 17
0
 def test_valid(self):
     d = Dist(2)
     self.assertFalse(d.valid())
     d[0] = 2
     self.assertTrue(d.valid())
     d[1] = 2
     self.assertTrue(d.valid())
     d[0] = 0
     self.assertTrue(d.valid())
     d[1] = 0
     self.assertFalse(d.valid())
Ejemplo n.º 18
0
    def test_get_and_set(self):
        d = Dist(2)
        self.assertEqual(0, d[0])

        d[0] = 4
        self.assertEqual(4, d[0])
        self.assertEqual(0, d[1])

        d[1] = 2
        self.assertEqual(2, d[1])
        self.assertEqual(4, d[0])
Ejemplo n.º 19
0
    def test_resize_shrink(self):
        d = Dist(5)
        for i in range(len(d)):
            d[i] = i + 1
        self.assertEqual(5, len(d))
        self.assertEqual(15, d.counts())

        d.resize(3)
        self.assertEqual(3, len(d))
        self.assertEqual(6, d.counts())
        for i in range(len(d)):
            self.assertEqual(i + 1, d[i])
Ejemplo n.º 20
0
    def test_resize_grow(self):
        d = Dist(3)
        for i in range(len(d)):
            d[i] = i + 1
        self.assertEqual(3, len(d))
        self.assertEqual(6, d.counts())

        d.resize(5)
        self.assertEqual(5, len(d))
        self.assertEqual(6, d.counts())
        for i in range(3):
            self.assertEqual(i + 1, d[i])
        for i in range(3, len(d)):
            self.assertEqual(0, d[i])
Ejemplo n.º 21
0
    def test_conditional_entropy_independent(self):
        x = Dist([5, 2, 3, 5, 1, 4, 6, 2, 1, 4, 2, 4])
        y = Dist([2, 4, 5, 2, 7, 3, 9, 8, 8, 7, 2, 3])
        joint = Dist(len(x) * len(y))
        for i in range(len(x)):
            for j in range(len(y)):
                joint[i * len(y) + j] = x[i] * y[j]

        self.assertTrue(isnan(conditional_entropy(joint, x, b=-1.0)))
        self.assertTrue(isnan(conditional_entropy(joint, x, b=-0.5)))
        self.assertAlmostEqual(
            0.00000, conditional_entropy(joint, x, b=0.0), places=6)
        self.assertAlmostEqual(-3.391029,
                               conditional_entropy(joint, x, b=0.5), places=6)
        self.assertAlmostEqual(
            5.797002, conditional_entropy(joint, x, b=1.5), places=6)
        self.assertAlmostEqual(
            3.391029, conditional_entropy(joint, x, b=2), places=6)
        self.assertAlmostEqual(
            2.139501, conditional_entropy(joint, x, b=3), places=6)
        self.assertAlmostEqual(
            1.695514, conditional_entropy(joint, x, b=4), places=6)

        self.assertTrue(isnan(conditional_entropy(joint, y, b=-1.0)))
        self.assertTrue(isnan(conditional_entropy(joint, y, b=-0.5)))
        self.assertAlmostEqual(
            0.00000, conditional_entropy(joint, y, b=0.0), places=6)
        self.assertAlmostEqual(-3.401199,
                               conditional_entropy(joint, y, b=0.5), places=6)
        self.assertAlmostEqual(
            5.814387, conditional_entropy(joint, y, b=1.5), places=6)
        self.assertAlmostEqual(
            3.401199, conditional_entropy(joint, y, b=2), places=6)
        self.assertAlmostEqual(
            2.145917, conditional_entropy(joint, y, b=3), places=6)
        self.assertAlmostEqual(
            1.700599, conditional_entropy(joint, y, b=4), places=6)
Ejemplo n.º 22
0
    def test_copy(self):
        d = Dist(5)
        for i in range(len(d)):
            d[i] = i + 1
        self.assertEqual(5, len(d))
        self.assertEqual(15, d.counts())

        e = d.copy()
        self.assertEqual(5, len(d))
        self.assertEqual(15, d.counts())
        for i in range(len(d)):
            self.assertEqual(e[i], d[i])

        d[0] = 5
        self.assertNotEqual(e[0], d[0])
Ejemplo n.º 23
0
    def test_counts(self):
        d = Dist(2)
        self.assertEqual(0, d.counts())

        d[0] = 3
        self.assertEqual(3, d.counts())

        d[0] = 2
        self.assertEqual(2, d.counts())

        d[1] = 3
        self.assertEqual(5, d.counts())

        d[0] = 0
        d[1] = 0
        self.assertEqual(0, d.counts())
Ejemplo n.º 24
0
 def test_dump_invalid(self):
     d = Dist(2)
     with self.assertRaises(ValueError):
         d.dump()
Ejemplo n.º 25
0
 def test_resize_zero(self):
     d = Dist(3)
     with self.assertRaises(ValueError):
         d.resize(0)
Ejemplo n.º 26
0
 def test_resize_negative(self):
     d = Dist(3)
     with self.assertRaises(ValueError):
         d.resize(-1)
Ejemplo n.º 27
0
 def test_alloc_array(self):
     arr = np.array([1, 1, 2, 2], dtype=np.uint32)
     d = Dist(arr)
     self.assertEqual(4, len(d))
     for i in range(len(arr)):
         self.assertEqual(arr[i], d[i])
Ejemplo n.º 28
0
 def test_alloc_list(self):
     lst = [1, 1, 2, 2]
     d = Dist(lst)
     self.assertEqual(4, len(d))
     for i in range(len(d)):
         self.assertEqual(lst[i], d[i])
Ejemplo n.º 29
0
 def test_alloc_size(self):
     d = Dist(5)
     self.assertEqual(5, d.__len__())
     self.assertEqual(5, len(d))
Ejemplo n.º 30
0
    def test_alloc_mulitdimensional(self):
        with self.assertRaises(ValueError):
            Dist([[1, 1, 2, 2]])

        with self.assertRaises(ValueError):
            Dist(np.array([[1, 1, 2, 2]]))