def test_context_preventing_implication_as_dict(self, make_statement): left = FactorGroup( [make_statement["shooting"], make_statement["crime"]]) right = FactorGroup( [make_statement["shooting_craig"], make_statement["crime_craig"]]) assert left.implies(right) assert not left.implies( right, context={ "<Alice>": Entity(name="Dan"), "<Bob>": Entity(name="Craig") }, )
def test_context_prevents_implication(self, make_statement): left = FactorGroup( [make_statement["shooting"], make_statement["crime"]]) right = FactorGroup( [make_statement["shooting_craig"], make_statement["crime_craig"]]) assert left.implies(right) assert not left.implies( right, context=( [Entity(name="Alice"), Entity(name="Bob")], [Entity(name="Dan"), Entity(name="Craig")], ), )
def test_implication_no_repeated_explanations(self): large_payments = FactorGroup([ Statement( predicate=Comparison( content= "the number of dollars that $payer paid to $payee was", sign=">", expression=10000, ), terms=[Entity(name="Alice"), Entity(name="Bob")], ), Statement( predicate=Comparison( content= "the number of dollars that $payer paid to $payee was", sign=">", expression=1000, ), terms=[Entity(name="Dan"), Entity(name="Eve")], ), ]) small_payments = FactorGroup([ Statement( predicate=Comparison( content= "the number of dollars that $payer paid to $payee was", sign=">", expression=100, ), terms={ "payer": Entity(name="Fred"), "payee": Entity(name="Greg") }, ), Statement( predicate=Comparison( content= "the number of dollars that $payer paid to $payee was", sign=">", expression=10, ), terms={ "payer": Entity(name="Jim"), "payee": Entity(name="Kim") }, ), ]) assert large_payments.implies(small_payments) all_explanations = list( large_payments.explanations_implication(small_payments)) assert len(all_explanations) == 2 limited_explanations = list( large_payments.explanations_implication( small_payments, context=([Entity(name="Alice")], [Entity(name="Jim")]))) assert len(limited_explanations) == 1
def test_interchangeable_terms_in_different_orders(self): more_than_100_yards = Comparison( content="the distance between $site1 and $site2 was", sign=">", expression="100 yards", ) less_than_1_mile = Comparison( content="the distance between $site1 and $site2 was", sign="<", expression="1 mile", ) protest_facts = FactorGroup([ Statement( predicate=more_than_100_yards, terms=[ Entity(name="the political convention"), Entity(name="the police cordon"), ], ), Statement( predicate=less_than_1_mile, terms=[ Entity(name="the police cordon"), Entity(name="the political convention"), ], ), ]) assert "between <the political convention> and " in str(protest_facts) more_than_50_meters = Comparison( content="the distance between $site1 and $site2 was", sign=">", expression="50 meters", ) less_than_2_km = Comparison( content="the distance between $site1 and $site2 was", sign="<=", expression="2 km", ) speech_zone_facts = FactorGroup([ Statement( predicate=more_than_50_meters, terms=[ Entity(name="the free speech zone"), Entity(name="the courthouse"), ], ), Statement( predicate=less_than_2_km, terms=[ Entity(name="the free speech zone"), Entity(name="the courthouse"), ], ), ]) assert protest_facts.implies(speech_zone_facts)
def test_interchangeable_implication_no_repeated_explanations(self): nafta = FactorGroup([ Statement( predicate="$country1 signed a treaty with $country2", terms=[Entity(name="Mexico"), Entity(name="USA")], ), Statement( predicate="$country2 signed a treaty with $country3", terms=[Entity(name="USA"), Entity(name="Canada")], ), Statement( predicate="$country3 signed a treaty with $country1", terms=[Entity(name="Canada"), Entity(name="Mexico")], ), ]) nato = FactorGroup([ Statement( predicate="$country1 signed a treaty with $country2", terms=[Entity(name="USA"), Entity(name="UK")], ), Statement( predicate="$country2 signed a treaty with $country3", terms=[Entity(name="UK"), Entity(name="Germany")], ), Statement( predicate="$country3 signed a treaty with $country1", terms=[Entity(name="Germany"), Entity(name="USA")], ), ]) assert nafta.implies(nato) all_answers = list(nafta.explanations_implication(nato)) assert len(all_answers) == 6 limited_answers = list( nafta.explanations_implication(nato, context=([Entity(name="USA")], [Entity(name="UK")]))) assert len(limited_answers) == 2
def test_factorgroup_implication_of_empty_group(self, watt_factor): factor_list = [watt_factor["f1"], watt_factor["f2"]] group = FactorGroup(factor_list) empty_group = FactorGroup() assert group.implies(empty_group)
def test_factorgroup_implies_none(self, watt_factor): group = FactorGroup([watt_factor["f1"], watt_factor["f2"]]) assert group.implies(None)
def test_factorgroup_implication_of_empty_group(self, make_statement): factor_list = [make_statement["crime"], make_statement["shooting"]] group = FactorGroup(factor_list) empty_group = FactorGroup() assert group.implies(empty_group) assert group[:1].implies(empty_group)
def test_factorgroup_implies_none(self, make_statement): group = FactorGroup( [make_statement["crime"], make_statement["shooting"]]) assert group.implies(None)