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