예제 #1
0
 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")
         },
     )
예제 #2
0
 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")],
         ),
     )
예제 #3
0
 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
예제 #4
0
    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)
예제 #5
0
    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
예제 #6
0
 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)
예제 #7
0
 def test_factorgroup_implies_none(self, watt_factor):
     group = FactorGroup([watt_factor["f1"], watt_factor["f2"]])
     assert group.implies(None)
예제 #8
0
 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)
예제 #9
0
 def test_factorgroup_implies_none(self, make_statement):
     group = FactorGroup(
         [make_statement["crime"], make_statement["shooting"]])
     assert group.implies(None)