Пример #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)
Пример #2
0
    def test_hist_generation(self):
        # Make sure dist.dump() matches initial probability dist
        n_trials = 10
        for each in range(n_trials):
            array_size = np.random.randint(1,1000)
            prob_dist = np.zeros(array_size)
            for i in range(array_size):
                prob_dist[i] = np.random.rand()
            prob_dist = prob_dist/np.sum(prob_dist)
            d1 = Dist(prob_dist)
            self.assertTrue(np.allclose(prob_dist,d1.dump()))
            prob_list = np.ndarray.tolist(prob_dist)
            d2 = Dist(prob_list)
            self.assertTrue(np.allclose(prob_dist,d2.dump()))

        # Make sure integer types are all supported
        dtype_array = [np.int64,np.int32,np.int16,np.int8,np.int,np.longlong,np.short,np.intc,np.uint64,np.uint32,np.uint16,np.uint8,np.uint,np.ulonglong,np.ushort,np.uintc]
        for each in dtype_array:
            d = np.asarray([2,2,4],dtype=each)
            self.assertTrue(np.allclose(Dist(d).dump(),[0.25,0.25,0.5]))
        
        # Make sure floating types are all supported
        dtype_array = [np.single,np.double,np.float,np.longfloat,np.float16,np.float32,np.float64]
        for each in dtype_array:
            d = np.asarray([0.25,0.25,0.5],dtype=each)
            self.assertTrue(np.allclose(Dist(d).dump(),[0.25,0.25,0.5]))       
Пример #3
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())
Пример #4
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())
Пример #5
0
    def test_tick_bounds_error(self):
        d = Dist(2)
        with self.assertRaises(IndexError):
            d.tick(-1)

        with self.assertRaises(IndexError):
            d.tick(3)
Пример #6
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())
Пример #7
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)
Пример #8
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())
Пример #9
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)
Пример #10
0
    def test_probability_invalid(self):
        d = Dist(5)
        for i in range(len(d)):
            with self.assertRaises(ValueError):
                d.probability(i)

        with self.assertRaises(ValueError):
            d = Dist([0.5,0.51])
Пример #11
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)))
Пример #12
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])
Пример #13
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))
Пример #14
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])
Пример #15
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])
Пример #16
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])
Пример #17
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)
Пример #18
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])
Пример #19
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)
Пример #20
0
    def test_set_bounds_error(self):
        d = Dist(2)
        with self.assertRaises(IndexError):
            d[-1] = 3

        with self.assertRaises(IndexError):
            d[3] = 1
Пример #21
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)))
Пример #22
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)
Пример #23
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)
Пример #24
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)
Пример #25
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])
Пример #26
0
    def test_tick_bounds_error(self):
        d = Dist(2)
        with self.assertRaises(IndexError):
            d.tick(-1)

        with self.assertRaises(IndexError):
            d.tick(3)
Пример #27
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())
Пример #28
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)
Пример #29
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)
Пример #30
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())
Пример #31
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])
Пример #32
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())
Пример #33
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])
Пример #34
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())
Пример #35
0
 def test_resize_zero(self):
     d = Dist(3)
     with self.assertRaises(ValueError):
         d.resize(0)
Пример #36
0
 def test_resize_zero(self):
     d = Dist(3)
     with self.assertRaises(ValueError):
         d.resize(0)
Пример #37
0
 def test_resize_negative(self):
     d = Dist(3)
     with self.assertRaises(ValueError):
         d.resize(-1)
Пример #38
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])
Пример #39
0
 def test_probability(self):
     d = Dist(5)
     for i in range(len(d)):
         d[i] = i+1
     for i in range(len(d)):
         self.assertAlmostEqual((i+1)/15., d.probability(i))
Пример #40
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])
Пример #41
0
 def test_alloc_size(self):
     d = Dist(5)
     self.assertEqual(5, d.__len__())
     self.assertEqual(5, len(d))
Пример #42
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]]))
Пример #43
0
 def test_dump_invalid(self):
     d = Dist(2)
     with self.assertRaises(ValueError):
         d.dump()
Пример #44
0
 def test_dump_invalid(self):
     d = Dist(2)
     with self.assertRaises(ValueError):
         d.dump()
Пример #45
0
 def test_alloc_size(self):
     d = Dist(5)
     self.assertEqual(5, d.__len__())
     self.assertEqual(5, len(d))
Пример #46
0
 def test_resize_negative(self):
     d = Dist(3)
     with self.assertRaises(ValueError):
         d.resize(-1)