Пример #1
0
def construct_sample_ky_approx_encoding(p_target):
    P, k, l = construct_sample_ky_approx_matrix(p_target)
    root = make_ddg_tree(P, k, l)
    enc = {}
    pack_tree(enc, root, 0)
    n = len(P)
    return [enc[i] for i in range(len(enc))], n, k
Пример #2
0
def construct_sample_rejection_encoding(p_target):
    P, k, l = construct_sample_rejection_matrix(p_target)
    root = make_ddg_tree(P, k, l)
    enc = {}
    pack_tree(enc, root, 0)
    encoding = [enc[i] for i in range(len(enc))]
    n = len(P)
    return encoding, n, k
def test_reduction_to_single_node():
    # An end-to-end test with automatic
    # reduction and so forth.
    P_desired = [
        [0, 0, 0, 0], # 0
        [1, 1, 1, 1], # 15
    ]
    Ms, k, l = [0, 15], 4, 0
    P, kp, lp = make_ddg_matrix(Ms, k, l)
    root = make_ddg_tree(P, kp, lp)
    assert kp == 1
    assert lp == 0
    assert root.label == 1
    assert root.right is None
    assert root.left is None
def test_deterministic(seed):
    rng = numpy.random.RandomState(seed)

    Ms, k, l = [0, 31], 5, 0
    P, kp, lp = make_ddg_matrix(Ms, k, l)
    root = make_ddg_tree(P, kp, lp)
    encoding = {}
    pack_tree(encoding, root, 0)

    bits = BitStream(kp, rng)
    N_sample = 10000
    samples_mat = [sample_ky_matrix(P, kp, lp, bits) for _i in range(N_sample)]
    samples_enc = [sample_ky_encoding(encoding, bits) for _i in range(N_sample)]
    assert Counter(samples_mat)[1] == N_sample
    assert Counter(samples_enc)[1] == N_sample
Пример #5
0
def test_one_back_edge():
    k, l = 4, 0
    P = [
        [0, 0, 1, 1],  # 3
        [1, 1, 0, 0],  # 12
    ]

    root = make_ddg_tree(P, k, l)
    encoding = {}
    pack_tree(encoding, root, 0)

    back_edges = [b for a, b in encoding.items() if 0 <= b < a]
    assert back_edges == [0]

    leaves_three = sum(1 for b in encoding.values() if b == -1)
    assert leaves_three == 2

    leaves_twelve = sum(1 for b in encoding.values() if b == -2)
    assert leaves_twelve == 2
def test_nondetermistic(seed):
    rng = numpy.random.RandomState(seed)

    Ms, k, l = [3, 12], 4, 0
    P, kp, lp = make_ddg_matrix(Ms, k, l)
    root = make_ddg_tree(P, kp, lp)
    encoding = {}
    pack_tree(encoding, root, 0)

    bits = BitStream(kp, rng)
    N_sample = 10000
    samples_mat = [sample_ky_matrix(P, kp, lp, bits) for _i in range(N_sample)]
    samples_enc = [sample_ky_encoding(encoding, bits) for _i in range(N_sample)]

    pval_mat = get_chisquare_pval([3/15, 12/15], samples_mat)
    assert 0.05 < pval_mat

    pval_enc = get_chisquare_pval([3/15, 12/15], samples_enc)
    assert 0.05 < pval_enc