Пример #1
0
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))
Пример #2
0
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))
Пример #3
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))
Пример #4
0
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))
Пример #5
0
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))
Пример #6
0
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))
Пример #7
0
def test_uniform():
    u = dit.distconst.uniform_distribution(3, 2)
    assert(np.isclose(disclosure(u), 0))
Пример #8
0
def test_xor():
    xor = dit.example_dists.Xor()
    assert(np.isclose(disclosure(xor), 1))