Esempio n. 1
0
    def test_bin_13(self):
        Sy = [5, 10, 15]
        Sx = [11]
        bins = [1, 1, 1]
        T = 16
        res, total = compute_binning(Sy, Sx, bins, T)

        self.assertEqual(total, 15)
        self.assertEqual(res[(0, 0, 1, 0, 1, 0)], 1.0 / 15)
        self.assertEqual(res[(0, 0, 1, 0, 0, 0)], 1.0 / 15)
        self.assertEqual(res[(1, 0, 0, 0, 0, 0)], 3.0 / 15)
        self.assertEqual(res[(0, 1, 0, 0, 0, 0)], 2.0 / 15)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0)], 6.0 / 15)
        self.assertEqual(res[(0, 1, 0, 1, 0, 0)], 1.0 / 15)
        self.assertEqual(res[(0, 0, 0, 0, 0, 1)], 1.0 / 15)

        bins = [1, 2, 3]
        res, total = compute_binning(Sy, Sx, bins, T)
        self.assertEqual(total, 12)
        self.assertEqual(res[(1, 0, 1, 0, 0, 0)], 1.0 / 12)
        self.assertEqual(res[(0, 0, 1, 0, 1, 0)], 1.0 / 12)
        self.assertEqual(res[(0, 1, 0, 0, 1, 0)], 1.0 / 12)
        self.assertEqual(res[(0, 0, 1, 0, 0, 0)], 2.0 / 12)
        self.assertEqual(res[(1, 0, 0, 0, 0, 0)], 1.0 / 12)
        self.assertEqual(res[(0, 1, 0, 0, 0, 0)], 2.0 / 12)
        self.assertEqual(res[(0, 0, 1, 0, 0, 1)], 1.0 / 12)
        self.assertEqual(res[(1, 0, 1, 0, 0, 1)], 1.0 / 12)
        self.assertEqual(res[(0, 1, 0, 1, 0, 0)], 1.0 / 12)
        self.assertEqual(res[(0, 1, 0, 0, 0, 1)], 1.0 / 12)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0)], 0.0 / 12)
Esempio n. 2
0
    def test_bin_15(self):
        Sy = [62, 2, 92, 27, 57, 25, 45, 23, 69, 88]
        Sx = [52, 3, 39, 41, 22, 76, 98, 44, 17, 6]

        T = 100
        bins = [1, 2, 3]
        res, total = compute_binning(Sy, Sx, bins, T)

        self.assertEqual(total, 96.0)
        self.assertEqual(res[(0, 1, 0, 0, 1, 1)], 1.0 / 96.0)
        self.assertEqual(res[(1, 0, 0, 0, 1, 0)], 1.0 / 96.0)
        self.assertEqual(res[(0, 0, 1, 0, 0, 0)], 16.0 / 96.0)
        self.assertEqual(res[(0, 0, 1, 1, 0, 1)], 1.0 / 96.0)
        self.assertEqual(res[(1, 0, 0, 0, 0, 1)], 1.0 / 96.0)
        self.assertEqual(res[(0, 0, 1, 0, 1, 1)], 1.0 / 96.0)
        self.assertEqual(res[(1, 0, 1, 0, 0, 0)], 2.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 0, 1, 1)], 3.0 / 96.0)
        self.assertEqual(res[(1, 1, 0, 0, 0, 1)], 1.0 / 96.0)
        self.assertEqual(res[(1, 0, 0, 0, 0, 0)], 2.0 / 96.0)
        self.assertEqual(res[(1, 1, 1, 0, 0, 1)], 1.0 / 96.0)
        self.assertEqual(res[(1, 0, 0, 0, 1, 1)], 1.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 1, 0, 1)], 2.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0)], 20.0 / 96.0)
        self.assertEqual(res[(0, 1, 0, 0, 1, 0)], 1.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 1, 1, 0)], 1.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 0, 0, 1)], 10.0 / 96.0)
        self.assertEqual(res[(0, 1, 0, 0, 0, 1)], 1.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 1, 0, 0)], 5.0 / 96.0)
        self.assertEqual(res[(0, 1, 1, 0, 0, 0)], 3.0 / 96.0)
        self.assertEqual(res[(0, 0, 1, 0, 1, 0)], 1.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 0, 1, 0)], 9.0 / 96.0)
        self.assertEqual(res[(0, 1, 0, 0, 0, 0)], 9.0 / 96.0)
        self.assertEqual(res[(0, 1, 1, 0, 0, 1)], 1.0 / 96.0)
        self.assertEqual(res[(0, 0, 1, 0, 0, 1)], 2.0 / 96.0)
Esempio n. 3
0
    def test_bin_14(self):
        Sy = [12, 81, 27, 66, 16, 69, 9, 42, 75, 15]
        Sx = [84, 97, 88, 21, 32, 94, 14, 63, 51, 36]
        T = 100
        bins = [1, 2, 3]
        res, total = compute_binning(Sy, Sx, bins, T)

        self.assertEqual(total, 96.0)
        self.assertEqual(res[(1, 0, 1, 0, 0, 0)], 2.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0)], 13.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 0, 1, 0)], 12.0 / 96.0)
        self.assertEqual(res[(0, 1, 0, 0, 0, 1)], 2.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 0, 1, 1)], 4.0 / 96.0)
        self.assertEqual(res[(1, 0, 1, 0, 1, 0)], 1.0 / 96.0)
        self.assertEqual(res[(0, 0, 1, 0, 0, 0)], 12.0 / 96.0)
        self.assertEqual(res[(1, 0, 0, 0, 0, 0)], 5.0 / 96.0)
        self.assertEqual(res[(0, 1, 0, 0, 0, 0)], 10.0 / 96.0)
        self.assertEqual(res[(0, 0, 1, 1, 0, 0)], 3.0 / 96.0)
        self.assertEqual(res[(0, 1, 1, 0, 0, 1)], 2.0 / 96.0)
        self.assertEqual(res[(0, 0, 1, 0, 1, 0)], 2.0 / 96.0)
        self.assertEqual(res[(0, 0, 1, 0, 0, 1)], 1.0 / 96.0)
        self.assertEqual(res[(0, 1, 1, 1, 0, 0)], 1.0 / 96.0)
        self.assertEqual(res[(1, 0, 0, 0, 0, 1)], 1.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 0, 0, 1)], 15.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 1, 0, 1)], 3.0 / 96.0)
        self.assertEqual(res[(0, 0, 0, 1, 0, 0)], 3.0 / 96.0)
        self.assertEqual(res[(0, 1, 1, 0, 0, 0)], 3.0 / 96.0)
        self.assertEqual(res[(1, 1, 1, 0, 1, 0)], 1.0 / 96.0)
Esempio n. 4
0
 def test_bin_20(self):
     Sy = [
         5794872, 8521503, 5160203, 6970555, 5394460, 4868795, 5528838,
         2656425, 738190, 3388549, 2710033, 4625363, 2213201, 7353506,
         275778, 4045780, 3980515, 9074583, 3513606, 2722249, 1552599,
         2510575, 8853283, 7469933, 1482614, 8249944, 3413151, 898077,
         1784071, 1290751, 8004110, 9723082, 2292587, 2774755, 1867822,
         1750241, 9859374, 385795, 7783911, 5243866, 5574209, 7419988,
         6034063, 5970672, 7276745, 8720298, 5752114, 9433016, 4594207,
         534465
     ]
     Sx = [
         1646556, 9532998, 5321762, 835566, 2897468, 1035603, 1002595,
         4045530, 2069799, 5581481, 6658449, 4655977, 7104045, 5475766,
         3175328, 2344459, 7760081, 4088226, 5432869, 2426765
     ]
     T = 10000000
     bins = [30, 20, 10]
     res, total = compute_binning(Sy, Sx, bins, T)
     self.assertEqual(total, 9999942.0)
     self.assertEqual(res[(0, 0, 0, 0, 0, 0)], 9995742.0 / 9999942.0)
     self.assertEqual(res[(0, 0, 1, 0, 0, 0)], 500.0 / 9999942.0)
     self.assertEqual(res[(1, 0, 0, 0, 0, 0)], 1500.0 / 9999942.0)
     self.assertEqual(res[(0, 1, 0, 0, 0, 0)], 1000.0 / 9999942.0)
     self.assertEqual(res[(0, 0, 0, 0, 0, 1)], 200.0 / 9999942.0)
     self.assertEqual(res[(0, 0, 0, 1, 0, 0)], 600.0 / 9999942.0)
     self.assertEqual(res[(0, 0, 0, 0, 1, 0)], 400.0 / 9999942.0)
Esempio n. 5
0
    def test_bin_1(self):
        Sy = [1, 5, 9, 17, 22, 29]
        Sx = [1, 5, 9, 17, 22, 29]
        bins = [1, 2, 3]
        T = 30
        res, total = compute_binning(Sy, Sx, bins, T)

        self.assertEqual(total, 26)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0)], 3.0 / 26)
        self.assertEqual(res[(0, 1, 0, 0, 1, 0)], 7.0 / 26)
        self.assertEqual(res[(0, 1, 1, 0, 1, 1)], 2.0 / 26)
        self.assertEqual(res[(1, 0, 0, 1, 0, 0)], 2.0 / 26)
        self.assertEqual(res[(0, 0, 1, 0, 0, 1)], 9.0 / 26)
        self.assertEqual(res[(1, 0, 1, 1, 0, 1)], 3.0 / 26)

        pY_t_tmk = eliminate_bin(res, [3, 4, 5])

        pY_tm1_tmk = eliminate_bin(res, [0, 3, 4, 5])  #ignore bin[0]

        self.assertEqual(pY_t_tmk[((1, 0, 1))], 3.0 / 26.0)
        self.assertEqual(pY_t_tmk[((0, 1, 1))], 2.0 / 26.0)
        self.assertEqual(pY_t_tmk[((0, 1, 0))], 7.0 / 26.0)
        self.assertEqual(pY_t_tmk[((0, 0, 1))], 9.0 / 26.0)
        self.assertEqual(pY_t_tmk[((0, 0, 0))], 3.0 / 26.0)
        self.assertEqual(pY_t_tmk[((1, 0, 0))], 2.0 / 26.0)

        self.assertEqual(pY_tm1_tmk[((0, 1))], 12.0 / 26.0)
        self.assertEqual(pY_tm1_tmk[((1, 1))], 2.0 / 26.0)
        self.assertEqual(pY_tm1_tmk[((1, 0))], 7.0 / 26.0)
        self.assertEqual(pY_tm1_tmk[((0, 0))], 5.0 / 26.0)
Esempio n. 6
0
    def test_bin_8(self):
        St = [
            0, 1, 2, 3, 4, 7, 9, 11, 12, 21, 24, 25, 28, 32, 36, 41, 43, 46,
            47, 48, 50, 53
        ]
        bins = [1, 1, 1]
        T = 60
        res, total = compute_binning(St, [], bins, T)

        self.assertEqual(total, 59)
        self.assertEqual(res[(1, 0, 1, 0, 0, 0)], 4.0 / 59)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0)], 15.0 / 59)
        self.assertEqual(res[(1, 1, 1, 0, 0, 0)], 4.0 / 59)
        self.assertEqual(res[(1, 1, 0, 0, 0, 0)], 3.0 / 59)
        self.assertEqual(res[(0, 0, 1, 0, 0, 0)], 10.0 / 59)
        self.assertEqual(res[(1, 0, 0, 0, 0, 0)], 9.0 / 59)
        self.assertEqual(res[(0, 1, 0, 0, 0, 0)], 10.0 / 59)
        self.assertEqual(res[(0, 1, 1, 0, 0, 0)], 4.0 / 59)

        res = eliminate_bin(res, [3, 4, 5])
        self.assertEqual(res[((1, 1, 1))], 4.0 / 59)
        self.assertEqual(res[((0, 1, 1))], 4.0 / 59)
        self.assertEqual(res[((0, 0, 1))], 10.0 / 59)
        self.assertEqual(res[((1, 0, 0))], 9.0 / 59)
        self.assertEqual(res[((0, 1, 0))], 10.0 / 59)
        self.assertEqual(res[((1, 0, 1))], 4.0 / 59)
        self.assertEqual(res[((1, 1, 0))], 3.0 / 59)
        self.assertEqual(res[((0, 0, 0))], 15.0 / 59)
Esempio n. 7
0
def TE(Sy, Sx, bins, T, T_func):
    """Computes transfer entropy from X to Y (TE_XY)
    
    Arguments:
        Sy {list of float} -- timestamps of user Y
        Sx {list of float} -- timestamps of user X
        bins {list of int} -- bin widths in seconds, bin[0] = bin width at time t0, bin[1] = bin width at time t-1, bin[2] = bin width at time t-2, ...
        T {int} -- time boundary in hours
        T_func {function} -- which function to use for TE computation
    
    Returns:
        float -- transfer entropy from X to Y
        float -- bias estimation
    """
    Sx.sort()
    Sy.sort()
    k = len(bins)
    prob_map, total = binning.compute_binning(Sy, Sx, bins, T)
    binsX_indices = list(range(k, 2 * k))
    pY_t_tmk_X_tm1_tml = binning.eliminate_bin(prob_map, [binsX_indices[0]])

    pY_tm1_tmk_X_tm1_tml = binning.eliminate_bin(prob_map,
                                                 [0] + [binsX_indices[0]])
    pY_t_tmk = binning.eliminate_bin(prob_map, binsX_indices)
    pY_tm1_tmk = binning.eliminate_bin(prob_map, [0] + binsX_indices)
    pt_bias = panzeri_treves_bias(prob_map, total, len(bins), len(bins))

    te = T_func(pY_t_tmk, pY_tm1_tmk, pY_tm1_tmk_X_tm1_tml, pY_t_tmk_X_tm1_tml,
                k)
    return te, pt_bias
Esempio n. 8
0
    def test_bin_16(self):
        Sy = [86, 55, 75, 61, 22, 9, 94, 3, 63, 93]
        Sx = [82, 58, 76, 30, 65, 97, 5, 49, 67, 62]

        T = 100
        bins = [4, 4, 4, 4]
        res, total = compute_binning(Sy, Sx, bins, T)

        self.assertEqual(total, 86.0)
        self.assertEqual(res[(0, 0, 1, 0, 1, 0, 1, 0)], 2.0 / 86.0)
        self.assertEqual(res[(1, 0, 1, 0, 0, 1, 1, 0)], 1.0 / 86.0)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0, 0, 1)], 4.0 / 86.0)
        self.assertEqual(res[(1, 1, 0, 0, 0, 0, 1, 0)], 1.0 / 86.0)
        self.assertEqual(res[(0, 1, 0, 0, 1, 0, 1, 0)], 2.0 / 86.0)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0, 1, 0)], 4.0 / 86.0)
        self.assertEqual(res[(0, 0, 0, 1, 0, 0, 0, 0)], 1.0 / 86.0)
        self.assertEqual(res[(1, 1, 0, 0, 1, 0, 0, 1)], 1.0 / 86.0)
        self.assertEqual(res[(1, 0, 0, 0, 1, 0, 1, 0)], 1.0 / 86.0)
        self.assertEqual(res[(0, 1, 0, 0, 1, 0, 0, 1)], 1.0 / 86.0)
        self.assertEqual(res[(0, 0, 0, 1, 0, 1, 0, 0)], 4.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 0, 1, 0, 0, 1)], 1.0 / 86.0)
        self.assertEqual(res[(0, 1, 1, 1, 0, 1, 0, 0)], 0.0 / 86.0)
        self.assertEqual(res[(0, 1, 0, 1, 1, 0, 0, 0)], 3.0 / 86.0)
        self.assertEqual(res[(0, 0, 1, 0, 1, 1, 0, 0)], 1.0 / 86.0)
        self.assertEqual(res[(1, 0, 0, 1, 0, 0, 1, 1)], 1.0 / 86.0)
        self.assertEqual(res[(0, 0, 1, 0, 0, 0, 0, 1)], 2.0 / 86.0)
        self.assertEqual(res[(0, 1, 0, 0, 0, 1, 0, 1)], 2.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 0, 1, 1, 0, 0)], 1.0 / 86.0)
        self.assertEqual(res[(1, 0, 0, 0, 0, 0, 1, 0)], 1.0 / 86.0)
        self.assertEqual(res[(1, 0, 0, 1, 0, 0, 0, 0)], 3.0 / 86.0)
        self.assertEqual(res[(0, 0, 1, 1, 0, 1, 1, 1)], 2.0 / 86.0)
        self.assertEqual(res[(1, 0, 0, 1, 1, 0, 1, 1)], 3.0 / 86.0)
        self.assertEqual(res[(1, 1, 0, 0, 1, 1, 0, 1)], 1.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 0, 1, 1, 1, 0)], 1.0 / 86.0)
        self.assertEqual(res[(0, 1, 0, 0, 0, 0, 0, 0)], 4.0 / 86.0)
        self.assertEqual(res[(0, 1, 0, 1, 1, 1, 1, 0)], 2.0 / 86.0)
        self.assertEqual(res[(1, 0, 0, 1, 0, 1, 0, 1)], 2.0 / 86.0)
        self.assertEqual(res[(0, 1, 0, 0, 1, 1, 0, 1)], 1.0 / 86.0)
        self.assertEqual(res[(0, 0, 1, 0, 0, 1, 1, 1)], 2.0 / 86.0)
        self.assertEqual(res[(1, 0, 0, 0, 0, 0, 0, 0)], 1.0 / 86.0)
        self.assertEqual(res[(0, 1, 0, 0, 0, 0, 1, 1)], 1.0 / 86.0)
        self.assertEqual(res[(0, 0, 0, 0, 1, 0, 0, 0)], 4.0 / 86.0)
        self.assertEqual(res[(1, 0, 0, 0, 0, 1, 0, 0)], 2.0 / 86.0)
        self.assertEqual(res[(1, 0, 1, 0, 1, 1, 0, 1)], 2.0 / 86.0)
        self.assertEqual(res[(1, 0, 0, 1, 0, 1, 1, 0)], 1.0 / 86.0)
        self.assertEqual(res[(0, 0, 1, 1, 0, 0, 0, 1)], 2.0 / 86.0)
        self.assertEqual(res[(0, 0, 1, 0, 1, 0, 0, 0)], 4.0 / 86.0)
        self.assertEqual(res[(0, 1, 0, 1, 0, 0, 1, 0)], 2.0 / 86.0)
        self.assertEqual(res[(0, 1, 0, 1, 0, 0, 1, 1)], 1.0 / 86.0)
        self.assertEqual(res[(0, 1, 0, 0, 0, 0, 1, 0)], 1.0 / 86.0)
        self.assertEqual(res[(0, 1, 1, 1, 1, 1, 1, 1)], 1.0 / 86.0)
        self.assertEqual(res[(0, 0, 0, 0, 0, 1, 0, 0)], 2.0 / 86.0)
        self.assertEqual(res[(1, 0, 1, 0, 0, 0, 0, 1)], 3.0 / 86.0)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0, 0, 0)], 3.0 / 86.0)
        self.assertEqual(res[(0, 1, 1, 1, 1, 1, 1, 0)], 1.0 / 86.0)
Esempio n. 9
0
    def test_bin_12(self):
        St = [5, 10, 15]
        bins = [1, 1, 1]
        T = 20
        res, total = compute_binning(St, St, bins, T)

        self.assertEqual(total, 19)
        self.assertEqual(res[(1, 0, 0, 1, 0, 0)], 3.0 / 19)
        self.assertEqual(res[(0, 1, 0, 0, 1, 0)], 3.0 / 19)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0)], 10.0 / 19)
        self.assertEqual(res[(0, 0, 1, 0, 0, 1)], 3.0 / 19)
Esempio n. 10
0
 def test_bin_2(self):
     St = [1, 5, 9, 17, 22, 29]
     bins = [1]
     T = 30
     res, total = compute_binning(St, [], bins, T)
     self.assertEqual(total, 31)
     self.assertEqual(res[(1, 0)], 6.0 / 31.0)
     self.assertEqual(res[(0, 0)], 25.0 / 31.0)
     res = eliminate_bin(res, [1])
     self.assertEqual(res[((0, ))], 25.0 / 31.0)
     self.assertEqual(res[((1, ))], 6.0 / 31.0)
Esempio n. 11
0
    def test_bin_4(self):
        St = [10, 15, 20, 25, 30, 35, 40]
        bins = [1, 4]
        T = 50
        k = l = 2
        res, total = compute_binning(St, [], bins, T)

        self.assertEqual(total, 47)
        self.assertEqual(res[(0, 0, 0, 0)], 12.0 / 47.0)
        self.assertEqual(res[(0, 1, 0, 0)], 28.0 / 47.0)
        self.assertEqual(res[(1, 0, 0, 0)], 7.0 / 47.0)
        res = eliminate_bin(res, [2, 3])
        self.assertEqual(res[((0, 0))], 12.0 / 47.0)
        self.assertEqual(res[((1, 0))], 7.0 / 47.0)
        self.assertEqual(res[((0, 1))], 28.0 / 47.0)
Esempio n. 12
0
    def test_bin_6(self):
        St = [1, 2, 9, 10, 14, 15, 19, 21, 22, 27, 28, 29]
        bins = [4, 1]
        T = 30
        res, total = compute_binning(St, [], bins, T)

        self.assertEqual(total, 27)
        self.assertEqual(res[(1, 1, 0, 0)], 7.0 / 27.0)
        self.assertEqual(res[(0, 0, 0, 0)], 2.0 / 27.0)
        self.assertEqual(res[(0, 1, 0, 0)], 2.0 / 27.0)
        self.assertEqual(res[(1, 0, 0, 0)], 16.0 / 27.0)

        res = eliminate_bin(res, [2, 3])
        self.assertEqual(res[((1, 0))], 16.0 / 27.0)
        self.assertEqual(res[((1, 1))], 7.0 / 27.0)
        self.assertEqual(res[(0, 1)], 2.0 / 27.0)
        self.assertEqual(res[((0, 0))], 2.0 / 27.0)
Esempio n. 13
0
    def test_bin_5(self):
        St = [1, 5, 5, 5, 9, 9, 17, 17, 22, 29]
        bins = [1, 4]
        T = 30
        res, total = compute_binning(St, [], bins, T)

        self.assertEqual(total, 27)
        self.assertEqual(res[(1, 1, 0, 0)], 2.0 / 27)
        self.assertEqual(res[(0, 0, 0, 0)], 5.0 / 27)
        self.assertEqual(res[(0, 1, 0, 0)], 17.0 / 27)
        self.assertEqual(res[(1, 0, 0, 0)], 3.0 / 27)

        res = eliminate_bin(res, [2, 3])
        self.assertEqual(res[((0, 1))], 17.0 / 27.0)
        self.assertEqual(res[((1, 1))], 2.0 / 27.0)
        self.assertEqual(res[((0, 0))], 5.0 / 27.0)
        self.assertEqual(res[((1, 0))], 3.0 / 27.0)
Esempio n. 14
0
    def test_bin_7(self):
        St = [
            6, 7, 9, 11, 19, 20, 21, 22, 23, 25, 29, 35, 36, 37, 42, 49, 52,
            53, 57, 58
        ]
        bins = [5, 3, 9]
        T = 60
        res, total = compute_binning(St, [], bins, T)

        self.assertEqual(total, 45)
        self.assertEqual(res[(1, 0, 1, 0, 0, 0)], 15.0 / 45.0)
        self.assertEqual(res[(0, 1, 1, 0, 0, 0)], 6.0 / 45.0)
        self.assertEqual(res[(1, 1, 1, 0, 0, 0)], 24.0 / 45.0)
        res = eliminate_bin(res, [3, 4, 5])
        self.assertEqual(res[((0, 1, 1))], 6.0 / 45.0)
        self.assertEqual(res[((1, 0, 1))], 15.0 / 45.0)
        self.assertEqual(res[((1, 1, 1))], 24.0 / 45.0)
Esempio n. 15
0
    def test_bin_17(self):
        Sy = [
            54, 17, 84, 2, 57, 13, 15, 69, 80, 78, 58, 83, 1, 49, 16, 70, 34,
            96, 64, 24, 29, 59, 93, 36, 81, 31, 68, 65, 48, 9, 86, 62, 22, 74,
            66, 46, 92, 55, 19, 94, 14, 99, 25, 77, 10, 98, 45, 67, 4, 21
        ]
        Sx = [
            90, 22, 99, 36, 27, 85, 73, 74, 66, 96, 20, 1, 89, 16, 53, 40, 52,
            56, 98, 59
        ]

        T = 100
        bins = [4, 4, 4, 4]
        res, total = compute_binning(Sy, Sx, bins, T)

        self.assertEqual(total, 86.0)
        self.assertEqual(res[(1, 0, 1, 1, 0, 1, 1, 0)], 5.0 / 86.0)
        self.assertEqual(res[(1, 0, 1, 1, 1, 1, 0, 0)], 1.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 1, 0, 1, 1)], 8.0 / 86.0)
        self.assertEqual(res[(1, 1, 0, 0, 1, 0, 0, 1)], 1.0 / 86.0)
        self.assertEqual(res[(1, 1, 0, 1, 1, 1, 1, 0)], 1.0 / 86.0)
        self.assertEqual(res[(0, 1, 1, 0, 1, 0, 0, 1)], 1.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 0, 1, 0, 0, 1)], 2.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 1, 0, 0, 0)], 3.0 / 86.0)
        self.assertEqual(res[(0, 1, 1, 1, 1, 1, 0, 1)], 3.0 / 86.0)
        self.assertEqual(res[(1, 0, 0, 1, 0, 0, 1, 1)], 1.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 0, 1, 1, 1)], 6.0 / 86.0)
        self.assertEqual(res[(1, 1, 0, 1, 0, 0, 1, 1)], 3.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 0, 0, 1, 1)], 1.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 0, 1, 1, 0, 0)], 2.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 1, 1, 0, 1)], 2.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 1, 1, 1, 0)], 8.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 1, 1, 1, 1)], 5.0 / 86.0)
        self.assertEqual(res[(1, 1, 0, 1, 1, 0, 1, 1)], 2.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 0, 0, 0, 1)], 1.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 0, 1, 0, 1)], 6.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 1, 1, 0, 0)], 6.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 0, 0, 1, 0)], 3.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 0, 0, 1, 1, 1)], 1.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 0, 1, 1, 0)], 2.0 / 86.0)
        self.assertEqual(res[(0, 1, 1, 1, 1, 1, 0, 0)], 3.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 1, 0, 0, 1)], 4.0 / 86.0)
        self.assertEqual(res[(0, 0, 1, 1, 0, 1, 1, 0)], 1.0 / 86.0)
        self.assertEqual(res[(1, 1, 0, 1, 1, 0, 0, 1)], 1.0 / 86.0)
        self.assertEqual(res[(1, 1, 1, 1, 1, 0, 1, 0)], 3.0 / 86.0)
Esempio n. 16
0
    def test_bin_9(self):
        St = [
            0, 2, 3, 5, 13, 14, 15, 19, 22, 24, 26, 27, 31, 33, 34, 35, 36, 44,
            46, 48, 50, 52, 53
        ]

        bins = [1, 9, 7]
        T = 60
        res, total = compute_binning(St, [], bins, T)

        self.assertEqual(total, 45)
        self.assertEqual(res[(0, 1, 1, 0, 0, 0)], 29.0 / 45)
        self.assertEqual(res[(1, 1, 1, 0, 0, 0)], 14.0 / 45)
        self.assertEqual(res[(1, 1, 0, 0, 0, 0)], 2.0 / 45)
        res = eliminate_bin(res, [3, 4, 5])
        self.assertEqual(res[((0, 1, 1))], 29.0 / 45)
        self.assertEqual(res[((1, 1, 1))], 14.0 / 45)
        self.assertEqual(res[((1, 1, 0))], 2.0 / 45)
Esempio n. 17
0
    def test_bin_3(self):
        St = [10, 20, 30, 40]
        bins = [4, 4, 4, 4]
        T = 50
        res, total = compute_binning(St, [], bins, T)

        self.assertEqual(total, 36)
        self.assertEqual(res[(1, 0, 0, 1, 0, 0, 0, 0)], 6.0 / 36.0)
        self.assertEqual(res[(0, 1, 0, 1, 0, 0, 0, 0)], 6.0 / 36.0)
        self.assertEqual(res[(0, 0, 1, 0, 0, 0, 0, 0)], 9.0 / 36.0)
        self.assertEqual(res[(0, 1, 0, 0, 0, 0, 0, 0)], 9.0 / 36.0)
        self.assertEqual(res[(1, 0, 1, 0, 0, 0, 0, 0)], 6.0 / 36.0)
        res = eliminate_bin(res, [4, 5, 6, 7])
        self.assertEqual(res[((0, 0, 1, 0))], 9.0 / 36.0)
        self.assertEqual(res[((0, 1, 0, 0))], 9.0 / 36.0)
        self.assertEqual(res[((1, 0, 1, 0))], 6.0 / 36.0)
        self.assertEqual(res[((1, 0, 0, 1))], 6.0 / 36.0)
        self.assertEqual(res[((0, 1, 0, 1))], 6.0 / 36.0)
Esempio n. 18
0
    def test_bin_18(self):
        Sy = [
            1484, 8060, 7191, 7566, 907, 4526, 9175, 4559, 125, 2315, 4268,
            9643, 7740, 3136, 3970, 3315, 2915, 7173, 2392, 8428, 4212, 7337,
            1393, 5325, 6088, 4709, 7341, 4225, 3124, 7629, 3194, 555, 7139,
            1016, 1816, 8874, 5472, 9015, 1570, 4602, 4091, 2406, 2279, 8736,
            7010, 6030, 4191, 1360, 5089, 7196
        ]
        Sx = [
            9770, 5651, 468, 5545, 8823, 8722, 831, 7096, 611, 6434, 1075,
            8931, 6955, 229, 4664, 562, 1512, 1453, 5975, 6052
        ]

        T = 10000
        bins = [30, 20, 10]
        res, total = compute_binning(Sy, Sx, bins, T)

        self.assertEqual(total, 9942.0)
        self.assertEqual(res[(1, 0, 0, 0, 1, 0)], 57.0 / 9942.0)
        self.assertEqual(res[(1, 1, 0, 0, 0, 0)], 148.0 / 9942.0)
        self.assertEqual(res[(0, 0, 1, 0, 0, 0)], 334.0 / 9942.0)
        self.assertEqual(res[(0, 0, 1, 1, 0, 1)], 3.0 / 9942.0)
        self.assertEqual(res[(1, 0, 0, 1, 0, 0)], 48.0 / 9942.0)
        self.assertEqual(res[(1, 0, 0, 0, 0, 1)], 60.0 / 9942.0)
        self.assertEqual(res[(1, 0, 1, 0, 0, 0)], 63.0 / 9942.0)
        self.assertEqual(res[(1, 0, 0, 0, 0, 0)], 982.0 / 9942.0)
        self.assertEqual(res[(1, 0, 0, 1, 0, 1)], 1.0 / 9942.0)
        self.assertEqual(res[(0, 0, 0, 1, 0, 1)], 7.0 / 9942.0)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0)], 6505.0 / 9942.0)
        self.assertEqual(res[(1, 1, 1, 0, 0, 0)], 16.0 / 9942.0)
        self.assertEqual(res[(1, 0, 1, 0, 1, 0)], 2.0 / 9942.0)
        self.assertEqual(res[(0, 1, 0, 0, 1, 0)], 19.0 / 9942.0)
        self.assertEqual(res[(0, 1, 0, 1, 0, 0)], 47.0 / 9942.0)
        self.assertEqual(res[(0, 0, 0, 0, 0, 1)], 119.0 / 9942.0)
        self.assertEqual(res[(0, 1, 0, 0, 0, 1)], 10.0 / 9942.0)
        self.assertEqual(res[(0, 0, 0, 1, 0, 0)], 479.0 / 9942.0)
        self.assertEqual(res[(0, 1, 1, 0, 0, 0)], 42.0 / 9942.0)
        self.assertEqual(res[(0, 0, 1, 0, 1, 0)], 14.0 / 9942.0)
        self.assertEqual(res[(0, 0, 0, 0, 1, 0)], 307.0 / 9942.0)
        self.assertEqual(res[(0, 1, 0, 0, 0, 0)], 664.0 / 9942.0)
        self.assertEqual(res[(0, 0, 1, 1, 0, 0)], 14.0 / 9942.0)
        self.assertEqual(res[(0, 0, 1, 1, 1, 0)], 1.0 / 9942.0)
Esempio n. 19
0
    def test_bin_11(self):
        St = [13, 16, 17, 18]
        bins = [1, 2, 3]
        T = 20
        res, total = compute_binning(St, St, bins, T)

        self.assertEqual(total, 16)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0)], 8.0 / 16)
        self.assertEqual(res[(0, 1, 0, 0, 1, 0)], 2.0 / 16)
        self.assertEqual(res[(0, 1, 1, 0, 1, 1)], 2.0 / 16)
        self.assertEqual(res[(1, 0, 0, 1, 0, 0)], 1.0 / 16)
        self.assertEqual(res[(1, 0, 1, 1, 0, 1)], 1.0 / 16)
        self.assertEqual(res[(1, 1, 1, 1, 1, 1)], 2.0 / 16)
        res = eliminate_bin(res, [3, 4, 5])
        self.assertEqual(res[(1, 1, 1)], 2.0 / 16)
        self.assertEqual(res[(1, 0, 1)], 1.0 / 16)
        self.assertEqual(res[(1, 0, 0)], 1.0 / 16)
        self.assertEqual(res[(0, 1, 1)], 2.0 / 16)
        self.assertEqual(res[(0, 1, 0)], 2.0 / 16)
        self.assertEqual(res[(0, 0, 0)], 8.0 / 16)
Esempio n. 20
0
    def test_bin_19(self):
        Sy = [
            59501, 63387, 97596, 67133, 84610, 86697, 79469, 25100, 6476,
            47952, 18158, 66416, 19987, 33440, 8331, 98105, 84462, 5530, 33506,
            53166, 1894, 67461, 24677, 27559, 64795, 26308, 38221, 31690,
            67452, 84275, 52860, 73382, 5740, 64202, 68341, 87324, 84646,
            33566, 78638, 31101, 55910, 17663, 479, 44979, 85065, 70744, 20027,
            48965, 54573, 86209
        ]
        Sx = [
            17163, 7615, 8027, 84123, 53996, 38542, 82753, 71516, 33675, 71840,
            41189, 11142, 37523, 15166, 53365, 20155, 91251, 51139, 34538,
            63644
        ]
        print("len: ", len(Sy), len(Sx))

        T = 100000
        bins = [30, 20, 10]
        res, total = compute_binning(Sy, Sx, bins, T)
        for r in res:
            if (res[r]):
                print(
                    "ASSERT_NEAR(prob_map[{0}], {1}/{2}, 0.00000001);".format(
                        int("".join([str(c) for c in r]), 2), res[r] * total,
                        total))

        self.assertEqual(total, 99942.0)
        self.assertEqual(res[(1, 0, 1, 0, 0, 0)], 20.0 / 99942.0)
        self.assertEqual(res[(0, 0, 0, 0, 0, 0)], 95837.0 / 99942.0)
        self.assertEqual(res[(1, 1, 0, 0, 0, 0)], 33.0 / 99942.0)
        self.assertEqual(res[(0, 0, 1, 0, 0, 0)], 470.0 / 99942.0)
        self.assertEqual(res[(1, 0, 0, 0, 0, 0)], 1426.0 / 99942.0)
        self.assertEqual(res[(0, 1, 1, 0, 0, 0)], 9.0 / 99942.0)
        self.assertEqual(res[(0, 1, 0, 0, 0, 0)], 947.0 / 99942.0)
        self.assertEqual(res[(0, 0, 0, 0, 0, 1)], 200.0 / 99942.0)
        self.assertEqual(res[(0, 0, 0, 1, 0, 0)], 600.0 / 99942.0)
        self.assertEqual(res[(0, 0, 0, 0, 1, 0)], 400.0 / 99942.0)