Пример #1
0
def test_marginal_constraints():
    d = dit.uniform_distribution(3, 2)
    d.make_dense()

    A, b = marginal_constraints(d, 2)

    A_ = np.array([
        [ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  0.,  0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  1.,  1.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  1.,  1.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.,  0.,  1.,  1.],
        [ 1.,  0.,  1.,  0.,  0.,  0.,  0.,  0.],
        [ 0.,  1.,  0.,  1.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  1.,  0.,  1.,  0.],
        [ 0.,  0.,  0.,  0.,  0.,  1.,  0.,  1.],
        [ 1.,  0.,  0.,  0.,  1.,  0.,  0.,  0.],
        [ 0.,  1.,  0.,  0.,  0.,  1.,  0.,  0.],
        [ 0.,  0.,  1.,  0.,  0.,  0.,  1.,  0.],
        [ 0.,  0.,  0.,  1.,  0.,  0.,  0.,  1.]
    ])

    b_ = np.array([1] + [0.25] * 12)

    assert np.allclose(A, A_)
    assert np.allclose(b, b_)
Пример #2
0
def Or(k=2):
    """
    [0] or [1] = [2]
    """
    d = dit.uniform_distribution(k, ['01'])
    d = dit.distconst.modify_outcomes(d, lambda x: ''.join(x))
    d = dit.insert_rvf(d, lambda x: '1' if any(map(bool, map(int, x))) else '0')
    return d
Пример #3
0
def test_rvfunctions_ints():
    d = dit.uniform_distribution(2, 2)
    rvf = dit.RVFunctions(d)
    partition = [(d.outcomes[i],) for i in range(len(d))]
    mapping = rvf.from_partition(partition)
    d2 = dit.insert_rvf(d, mapping)
    outcomes = ((0,0,0), (0,1,1), (1,0,2), (1,1,3))
    assert_equal(d2.outcomes, outcomes)
Пример #4
0
def test_rvfunctions_ints():
    d = dit.uniform_distribution(2, 2)
    rvf = dit.RVFunctions(d)
    partition = [(d.outcomes[i], ) for i in range(len(d))]
    mapping = rvf.from_partition(partition)
    d2 = dit.insert_rvf(d, mapping)
    outcomes = ((0, 0, 0), (0, 1, 1), (1, 0, 2), (1, 1, 3))
    assert_equal(d2.outcomes, outcomes)
Пример #5
0
def Or(k=2):
    """
    [0] or [1] = [2]
    """
    d = dit.uniform_distribution(k, ['01'])
    d = dit.distconst.modify_outcomes(d, lambda x: ''.join(x))
    d = dit.insert_rvf(d, lambda x: '1' if any(map(bool, map(int, x))) else '0')
    return d
Пример #6
0
def test_product_with_rvs2():
    """
    Test product_distribution() with an rvs specification.
    """
    d = dit.example_dists.Xor()
    d_iid = dit.product_distribution(d, [[0, 1]])
    d_truth = dit.uniform_distribution(2, ['01'])
    d_truth = dit.modify_outcomes(d_truth, lambda x: ''.join(x))
    assert d_truth.is_approx_equal(d_iid)
Пример #7
0
def test_product():
    """
    Smoke test for product_distribution().
    """
    d = dit.example_dists.Xor()
    d_iid = dit.product_distribution(d)
    d_truth = dit.uniform_distribution(3, ['01'])
    d_truth = dit.modify_outcomes(d_truth, lambda x: ''.join(x))
    assert d_truth.is_approx_equal(d_iid)
Пример #8
0
def test_product():
    """
    Smoke test for product_distribution().

    """
    d = dit.example_dists.Xor()
    d_iid = dit.product_distribution(d)
    d_truth = dit.uniform_distribution(3, ['01'])
    d_truth = dit.modify_outcomes(d_truth, lambda x: ''.join(x))
    assert_true(d_truth.is_approx_equal(d_iid))
Пример #9
0
def test_product_with_rvs2():
    """
    Test product_distribution() with an rvs specification.

    """
    d = dit.example_dists.Xor()
    d_iid = dit.product_distribution(d, [[0,1]])
    d_truth = dit.uniform_distribution(2, ['01'])
    d_truth = dit.modify_outcomes(d_truth, lambda x: ''.join(x))
    assert_true(d_truth.is_approx_equal(d_iid))
Пример #10
0
def test_insert_rvf2():
    # Test multiple insertion.
    d = dit.uniform_distribution(2, 2)
    d = dit.modify_outcomes(d, lambda x: ''.join(map(str, x)))
    def xor(outcome):
        o = str(int(outcome[0] != outcome[1]))
        # Here we are returning 2 random variables
        return o*2
    # We are also inserting two times simultaneously.
    d2 = dit.insert_rvf(d, [xor, xor])
    outcomes = ('000000', '011111', '101111', '110000')
    assert_equal(d2.outcomes, outcomes)
Пример #11
0
def test_insert_rvf2():
    # Test multiple insertion.
    d = dit.uniform_distribution(2, 2)
    d = dit.modify_outcomes(d, lambda x: ''.join(map(str, x)))
    def xor(outcome):
        o = str(int(outcome[0] != outcome[1]))
        # Here we are returning 2 random variables
        return o*2
    # We are also inserting two times simultaneously.
    d2 = dit.insert_rvf(d, [xor, xor])
    outcomes = ('000000', '011111', '101111', '110000')
    assert d2.outcomes == outcomes
Пример #12
0
def test_insert_rvf1():
    # Test multiple insertion.
    d = dit.uniform_distribution(2, 2)

    def xor(outcome):
        o = int(outcome[0] != outcome[1])
        # Here we are returning 2 random variables
        return (o, o)

    # We are also inserting two times simultaneously.
    d2 = dit.insert_rvf(d, [xor, xor])
    outcomes = ((0, 0, 0, 0, 0, 0), (0, 1, 1, 1, 1, 1), (1, 0, 1, 1, 1, 1),
                (1, 1, 0, 0, 0, 0))
    assert_equal(d2.outcomes, outcomes)
Пример #13
0
def test_insert_rvf1():
    # Test multiple insertion.
    d = dit.uniform_distribution(2, 2)
    def xor(outcome):
        o = int(outcome[0] != outcome[1])
        # Here we are returning 2 random variables
        return (o,o)
    # We are also inserting two times simultaneously.
    d2 = dit.insert_rvf(d, [xor, xor])
    outcomes = (
        (0, 0, 0, 0, 0, 0),
        (0, 1, 1, 1, 1, 1),
        (1, 0, 1, 1, 1, 1),
        (1, 1, 0, 0, 0, 0)
    )
    assert_equal(d2.outcomes, outcomes)
Пример #14
0
def test_marginal_constraints():
    d = dit.uniform_distribution(3, 2)
    d.make_dense()

    A, b = marginal_constraints(d, 2)

    A_ = np.array([[1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 0, 0, 0, 0, 0, 0],
                   [0, 0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0],
                   [0, 0, 0, 0, 0, 0, 1, 1], [1, 0, 1, 0, 0, 0, 0, 0],
                   [0, 1, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 1, 0],
                   [0, 0, 0, 0, 0, 1, 0, 1], [1, 0, 0, 0, 1, 0, 0, 0],
                   [0, 1, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0],
                   [0, 0, 0, 1, 0, 0, 0, 1]])

    b_ = np.array([1] + [0.25] * 12)

    assert np.allclose(A, A_)
    assert np.allclose(b, b_)
Пример #15
0
def test_uniform_distribution():
    pmf = np.array([1 / 4] * 4)
    dit.math.prng.seed(1)
    d = dit.uniform_distribution(2, 2)
    assert d.outcomes == ((0, 0), (0, 1), (1, 0), (1, 1))
    assert np.allclose(d.pmf, pmf)
Пример #16
0
def test_uniform_distribution():
    pmf = np.array([1 / 4] * 4)
    dit.math.prng.seed(1)
    d = dit.uniform_distribution(2, 2)
    assert_equal(d.outcomes, ((0, 0), (0, 1), (1, 0), (1, 1)))
    np.testing.assert_allclose(d.pmf, pmf)
Пример #17
0
def test_uniform_distribution():
    pmf = np.array([1/4] * 4)
    dit.math.prng.seed(1)
    d = dit.uniform_distribution(2, 2)
    assert d.outcomes == ((0, 0), (0, 1), (1, 0), (1, 1))
    assert np.allclose(d.pmf, pmf)
Пример #18
0
def test_uniform_distribution():
    pmf = np.array([1/4] * 4)
    dit.math.prng.seed(1)
    d = dit.uniform_distribution(2, 2)
    assert_equal(d.outcomes, ((0, 0), (0, 1), (1, 0), (1, 1)))
    np.testing.assert_allclose(d.pmf, pmf)