Exemple #1
0
    def test_new_context_replace_fact(self):
        predicate_shot = Predicate(content="$shooter shot $victim")
        predicate_no_gun = Predicate(content="$suspect had a gun", truth=False)
        predicate_told = Predicate(content="$speaker told $hearer $statement")
        shot = Fact(predicate=predicate_shot,
                    terms=[Entity(name="Alice"),
                           Entity(name="Bob")])
        told = Fact(
            predicate=predicate_told,
            terms=[Entity(name="Henry"),
                   Entity(name="Jenna"), shot],
        )
        no_gun = Fact(predicate=predicate_no_gun, terms=Entity(name="Dan"))

        changes = ContextRegister.from_lists(
            [
                Entity(name="Alice"),
                Entity(name="Henry"),
                Entity(name="Jenna"), shot
            ],
            [
                Entity(name="Dan"),
                Entity(name="Leslie"),
                Entity(name="Mike"), no_gun
            ],
        )
        result = told.new_context(changes)
        assert (
            "told <Mike> the fact it was false that <Dan> had a gun".lower()
            in result.short_string.lower())
Exemple #2
0
 def test_new_statement_from_entities(self):
     predicate = Predicate(content="$person managed $place")
     statement = Fact(
         predicate=predicate,
         terms=[Entity(name="Steve Jobs"),
                Entity(name="Apple")])
     different = statement.new_context(
         [Entity(name="Darth Vader"),
          Entity(name="the Death Star")])
     assert "<Darth Vader> managed" in str(different)
     assert isinstance(different.term_sequence, TermSequence)
Exemple #3
0
 def test_new_concrete_context(self):
     """
     "Dragonfly Inn" is still a string representation of an Entity
     object, but it's not in angle brackets because it can't be
     replaced by another Entity object without changing the meaning
     of the Fact.
     """
     predicate = Predicate(content="$place was a hotel")
     statement = Fact(predicate=predicate,
                      terms=[Entity(name="Independence Inn")])
     different = statement.new_context(
         [Entity(name="Dragonfly Inn", generic=False)])
     assert "Dragonfly Inn was a hotel" in str(different)
Exemple #4
0
 def test_too_much_info_to_change_context(self):
     """Test that a list of terms to replace requires "changes" to be consistent."""
     statement = Fact(
         predicate="$person1 loved $person2",
         terms=[Entity(name="Donald"),
                Entity(name="Daisy")],
     )
     new = statement.new_context(
         changes=[Entity(name="Mickey")],
         terms_to_replace=[Entity(name="Donald"),
                           Entity(name="Daisy")],
     )
     assert "<Mickey> loved <Daisy>" in str(new)
Exemple #5
0
    def test_equal_with_different_generic_subfactors(self):
        shot_predicate = Predicate(content="$shooter shot $victim")
        shot_fact = Fact(predicate=shot_predicate,
                         terms=[Entity(name="Alice"),
                                Entity(name="Bob")])
        murder_predicate = Predicate(content="$shooter murdered $victim")
        murder_fact = Fact(predicate=murder_predicate,
                           terms=[Entity(name="Alice"),
                                  Entity(name="Bob")])
        relevant_predicate = Predicate(
            content="$clue was relevant to $conclusion")
        relevant_fact = Fact(predicate=relevant_predicate,
                             terms=[shot_fact, murder_fact])

        changes = ContextRegister.from_lists(
            [Entity(name="Alice"), Entity(name="Bob")],
            [Entity(name="Deb"), Entity(name="Eve")],
        )
        new_fact = relevant_fact.new_context(changes)

        assert relevant_fact.means(new_fact)