예제 #1
0
def test_distribution():
    a, b, c = make_variables("A B C", 2)
    eq1 = Equation('xor', [a, b], [c], equations.xor_)
    net = CausalGraph([eq1])
    ab = UniformDist(a, b)
    j_obs = net.generate_joint(ab)
    j_do_a = net.generate_joint(ab, do_dist=JointDistByState({a: 0}))

    # for ass, p in j_obs.iter_conditional(c, a):
    #     print ass, p
    #     # assert p == 0.5
    #
    # for ass, p in j_do_a.iter_conditional(c, a):
    #     # assert p == 0.5
    #     print ass, p

    assert j_obs.mutual_info(b, c) == 0
    # Very different under "Doing"
    assert j_do_a.mutual_info(b, c) == 1.0
예제 #2
0
def test_distribution():
    a, b, c = make_variables("A B C", 2)
    eq1 = Equation('xor', [a, b], [c], equations.xor_)
    net = CausalGraph([eq1])
    ab = UniformDist(a, b)
    j_obs = net.generate_joint(ab)
    j_do_a = net.generate_joint(ab, do_dist=JointDistByState({a: 0}))

    # for ass, p in j_obs.iter_conditional(c, a):
    #     print ass, p
    #     # assert p == 0.5
    #
    # for ass, p in j_do_a.iter_conditional(c, a):
    #     # assert p == 0.5
    #     print ass, p

    assert j_obs.mutual_info(b, c) == 0
    # Very different under "Doing"
    assert j_do_a.mutual_info(b, c) == 1.0
예제 #3
0
def test_signal3():
    def merge_(i1, i2, o1):
        if i2:
            # Perfect spec
            o1[i1] = 1.0
        else:
            o1[i1 / 2] = 1.0

    c1, s1, s3, a = make_variables('C1 S1 S3 A', 4)
    c2, s2 = make_variables('C2 S2', 2)
    eq1 = Equation('Send1', [c1], [s1], equations.same_)
    eq2 = Equation('Send2', [c2], [s2], equations.same_)
    eq3 = Equation('Rec1', [s1, s2], [a], merge_)
    network = CausalGraph([eq1, eq2, eq3])
    root_dist = JointDist({c1: [.25] * 4, c2: [.5, .5]})
    m = MeasureCause(network, root_dist)
    j_observe = network.generate_joint(root_dist)

    # We check on the equivalence of these.
    assert_allclose(m.causal_flow(s1, a, s2), m.average_sad(s1, a))
    assert_allclose(m.causal_flow(s2, a, s1), m.average_sad(s2, a))
예제 #4
0
def test_signal3():

    def merge_(i1, i2, o1):
        if i2:
            # Perfect spec
            o1[i1] = 1.0
        else:
            o1[i1/2] = 1.0

    c1, s1, s3, a = make_variables('C1 S1 S3 A', 4)
    c2, s2 = make_variables('C2 S2', 2)
    eq1 = Equation('Send1', [c1], [s1], equations.same_)
    eq2 = Equation('Send2', [c2], [s2], equations.same_)
    eq3 = Equation('Rec1', [s1, s2], [a], merge_)
    network = CausalGraph([eq1, eq2, eq3])
    root_dist = JointDist({c1: [.25] * 4, c2: [.5, .5]})
    m = MeasureCause(network, root_dist)
    j_observe = network.generate_joint(root_dist)

    # We check on the equivalence of these.
    assert_allclose(m.causal_flow(s1, a, s2), m.average_sad(s1, a))
    assert_allclose(m.causal_flow(s2, a, s1), m.average_sad(s2, a))