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
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
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))
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))