def test_combined_variable(): """Test that using a coalesced input gives the same result as constraining on a bivariate marginal.""" d = dit.random_distribution(4, 2) r1 = disclosure(d, cons=[[0, 1], [2]], output=[3]) r2 = disclosure(d.coalesce([[0, 1], [2], [3]])) assert (np.isclose(r1, r2)) # Same, but on self-disclosure d = dit.random_distribution(3, 2) r1 = self_disclosure(d, cons=[[0, 1], [2]]) r2 = self_disclosure(d.coalesce([[0, 1], [2]])) assert (np.isclose(r1, r2))
def test_all_constraints(): """Test that fully constrained disclosure is zero.""" nb_reps = 10 for _ in range(nb_reps): d = dit.random_distribution(3, 2) syn = disclosure(d, cons=[[0, 1]]) assert (np.isclose(syn, 0))
def test_no_constraints(): """Test that unconstrained disclosure is MI.""" nb_reps = 10 for _ in range(nb_reps): d = dit.random_distribution(3, 2) MI = coinformation(d, [[0, 1], [2]]) syn = disclosure(d, cons=[]) assert (np.isclose(MI, syn))
def test_ternary_xor(): # Ternary XOR: y = x1 + x2 (mod 3) dist = dit.distconst.uniform(['000','011','022','101','112', '120','202','210','221']) mi = np.log2(3) assert(np.isclose(coinformation(dist, [[0],[2]]), 0)) assert(np.isclose(coinformation(dist, [[1],[2]]), 0)) assert(np.isclose(coinformation(dist, [[0,1],[2]]), mi)) assert(np.isclose(disclosure(dist), mi))
def test_nbit_xor(): def nbit_xor(n): u = dit.distconst.uniform_distribution(n-1, 2) xorfun = lambda outcome: (np.mod(np.sum(outcome), 2),) return dit.insert_rvf(u, xorfun) for n in range(3, 6): xor = nbit_xor(n) assert(np.isclose(disclosure(xor), 1))
def test_output(): xor = dit.example_dists.Xor() # Standard disclosure computation assert(np.isclose(disclosure(xor), 1)) # Change output assert(np.isclose(disclosure(xor, output=[0]), 1)) assert(np.isclose(disclosure(xor, output=[1]), 1)) assert(np.isclose(disclosure(xor, output=[2]), 1)) # Change output and constraints assert(np.isclose(disclosure(xor, cons=[[0,1]], output=[0]), 0)) assert(np.isclose(disclosure(xor, cons=[[0,1]], output=[1]), 0)) assert(np.isclose(disclosure(xor, cons=[[0,1]], output=[2]), 0))
def test_uniform(): u = dit.distconst.uniform_distribution(3, 2) assert(np.isclose(disclosure(u), 0))
def test_xor(): xor = dit.example_dists.Xor() assert(np.isclose(disclosure(xor), 1))