Fixed #109 : Mix python and concept. List comprehension
Fixed #110 : SheerkaDebugManager: add list_debug_settings Fixed #111 : SheerkaDebugManager: Implement ListDebugLogger Fixed #112 : SyaNodeParser: rewrite this parser Fixed #113 : Sheerka.: Add enable_parser_caching to disable parsers caching Fixed #114 : SyaNodeParser : Implement fast cache to resolve unrecognized tokens requests Fixed #115 : BnfNodeParser : Implement fast cache to resolve unrecognized tokens requests Fixed #116 : SequenceNodeParser : Implement fast cache to resolve unrecognized tokens requests Fixed #117 : ResolveMultiplePluralAmbiguityEvaluator: Resolve Multiple plural ambiguity
This commit is contained in:
@@ -73,6 +73,7 @@ class TestSheerkaDebugManager(TestUsingMemoryBasedSheerka):
|
||||
|
||||
item_container = f"debug_{item_type}_settings"
|
||||
assert getattr(service, item_container) == [DebugItem(
|
||||
item_type,
|
||||
item,
|
||||
service_name,
|
||||
method_name,
|
||||
@@ -89,7 +90,7 @@ class TestSheerkaDebugManager(TestUsingMemoryBasedSheerka):
|
||||
|
||||
service.add_or_update_debug_item(context, "vars", item="item")
|
||||
assert service.debug_vars_settings == [
|
||||
DebugItem("item", None, None, None, False, None, False, True)
|
||||
DebugItem("vars", "item", None, None, None, False, None, False, True)
|
||||
]
|
||||
|
||||
def test_i_can_update_debug_item(self):
|
||||
@@ -101,8 +102,8 @@ class TestSheerkaDebugManager(TestUsingMemoryBasedSheerka):
|
||||
service.add_or_update_debug_item(context, "vars", "item", "service_name", "method_name", enabled=False)
|
||||
|
||||
assert service.debug_vars_settings == [
|
||||
DebugItem("item", "service_name", "method_name", None, False, None, False, False),
|
||||
DebugItem("item2", "service_name", "method_name", None, False, None, False, True),
|
||||
DebugItem("vars", "item", "service_name", "method_name", None, False, None, False, False),
|
||||
DebugItem("vars", "item2", "service_name", "method_name", None, False, None, False, True),
|
||||
]
|
||||
|
||||
@pytest.mark.parametrize("settings, expected", [
|
||||
@@ -407,7 +408,7 @@ class TestSheerkaDebugManager(TestUsingMemoryBasedSheerka):
|
||||
|
||||
sheerka.set_debug_var(context, "s.m.v", "1+", 10, variable="my_var")
|
||||
assert service.debug_vars_settings == [
|
||||
DebugItem("my_var", "s", "m", 1, True, 10, False, True)
|
||||
DebugItem("vars", "my_var", "s", "m", 1, True, 10, False, True)
|
||||
]
|
||||
assert service.debug_concepts_settings == []
|
||||
assert service.debug_rules_settings == []
|
||||
@@ -418,7 +419,7 @@ class TestSheerkaDebugManager(TestUsingMemoryBasedSheerka):
|
||||
|
||||
sheerka.set_debug_rule(context, "s.m.v", "1+", 10, rule="my_rule")
|
||||
assert service.debug_rules_settings == [
|
||||
DebugItem("my_rule", "s", "m", 1, True, 10, False, True)
|
||||
DebugItem("rules", "my_rule", "s", "m", 1, True, 10, False, True)
|
||||
]
|
||||
assert service.debug_concepts_settings == []
|
||||
assert service.debug_vars_settings == []
|
||||
@@ -429,7 +430,7 @@ class TestSheerkaDebugManager(TestUsingMemoryBasedSheerka):
|
||||
|
||||
sheerka.set_debug_concept(context, "s.m.v", "1+", 10, concept="my_concept")
|
||||
assert service.debug_concepts_settings == [
|
||||
DebugItem("my_concept", "s", "m", 1, True, 10, False, True)
|
||||
DebugItem("concepts", "my_concept", "s", "m", 1, True, 10, False, True)
|
||||
]
|
||||
assert service.debug_rules_settings == []
|
||||
assert service.debug_vars_settings == []
|
||||
@@ -449,11 +450,11 @@ class TestSheerkaDebugManager(TestUsingMemoryBasedSheerka):
|
||||
|
||||
assert another_service.activated
|
||||
assert another_service.debug_vars_settings == [
|
||||
DebugItem('var', 'service_name', None, None, False, None, False, True)]
|
||||
DebugItem("vars", 'var', 'service_name', None, None, False, None, False, True)]
|
||||
assert another_service.debug_rules_settings == [
|
||||
DebugItem('1', None, None, None, False, None, False, True)]
|
||||
DebugItem("rules", '1', None, None, None, False, None, False, True)]
|
||||
assert another_service.debug_concepts_settings == [
|
||||
DebugItem('1001', None, None, None, False, None, False, True)]
|
||||
DebugItem("concepts", '1001', None, None, None, False, None, False, True)]
|
||||
|
||||
def test_i_can_inspect_concept_all_attributes(self):
|
||||
sheerka, context, foo = self.init_concepts("foo")
|
||||
@@ -766,9 +767,12 @@ class TestSheerkaDebugManager(TestUsingMemoryBasedSheerka):
|
||||
|
||||
sheerka.pop_ontology(context)
|
||||
assert service.activated
|
||||
assert service.debug_vars_settings == [DebugItem("v_name", "v_service", "v_method", 1, True, 1, False, True)]
|
||||
assert service.debug_rules_settings == [DebugItem("r_name", "r_service", "r_method", 2, True, 2, False, True)]
|
||||
assert service.debug_concepts_settings == [DebugItem("c_name", "c_serv", "c_method", 3, True, 3, False, True)]
|
||||
assert service.debug_vars_settings == [
|
||||
DebugItem("vars", "v_name", "v_service", "v_method", 1, True, 1, False, True)]
|
||||
assert service.debug_rules_settings == [
|
||||
DebugItem("rules", "r_name", "r_service", "r_method", 2, True, 2, False, True)]
|
||||
assert service.debug_concepts_settings == [
|
||||
DebugItem("concepts", "c_name", "c_serv", "c_method", 3, True, 3, False, True)]
|
||||
|
||||
def test_i_can_register_debug_item(self):
|
||||
sheerka, context = self.init_concepts()
|
||||
|
||||
@@ -4,7 +4,7 @@ from core.builtin_concepts import BuiltinConcepts, ReturnValueConcept, ParserRes
|
||||
from core.concept import Concept, DoNotResolve, ConceptParts, InfiniteRecursionResolved, \
|
||||
DEFINITION_TYPE_DEF
|
||||
from core.global_symbols import NotInit, NotFound
|
||||
from core.sheerka.services.SheerkaEvaluateConcept import SheerkaEvaluateConcept
|
||||
from core.sheerka.services.SheerkaEvaluateConcept import EvaluationHints, SheerkaEvaluateConcept
|
||||
from core.sheerka.services.SheerkaExecute import ParserInput
|
||||
from core.sheerka.services.SheerkaMemory import SheerkaMemory
|
||||
from parsers.BaseParser import BaseParser
|
||||
@@ -13,7 +13,7 @@ from parsers.ExpressionParser import ExpressionParser
|
||||
from parsers.PythonParser import PythonNode, PythonParser
|
||||
from parsers.SyaNodeParser import SyaNodeParser
|
||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||
from tests.evaluators.EvaluatorTestsUtils import pr_ret_val, python_ret_val
|
||||
from tests.evaluators.EvaluatorTestsUtils import exact, pr_ret_val, python_ret_val
|
||||
from tests.parsers.parsers_utils import CB, compare_with_test_object
|
||||
|
||||
|
||||
@@ -487,7 +487,9 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
eval_where=True,
|
||||
)
|
||||
|
||||
evaluated = sheerka.evaluate_concept(self.get_context(sheerka, False, True), concept, eval_body=False)
|
||||
evaluated = sheerka.evaluate_concept(self.get_context(sheerka, False, True),
|
||||
concept,
|
||||
hints=EvaluationHints(eval_body=False))
|
||||
|
||||
if expected:
|
||||
assert evaluated.key == concept.key
|
||||
@@ -532,13 +534,13 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
)
|
||||
|
||||
foo_instance = sheerka.new("foo")
|
||||
evaluated = sheerka.evaluate_concept(context, foo_instance, eval_body=False)
|
||||
evaluated = sheerka.evaluate_concept(context, foo_instance, hints=EvaluationHints(eval_body=False))
|
||||
|
||||
assert ConceptParts.BODY in evaluated.get_compiled()
|
||||
assert evaluated.body == NotInit
|
||||
assert not evaluated.get_hints().is_evaluated
|
||||
|
||||
evaluated = sheerka.evaluate_concept(context, foo_instance, eval_body=True) # evaluate the body this time
|
||||
evaluated = sheerka.evaluate_concept(context, foo_instance, hints=EvaluationHints(eval_body=True)) # evaluate the body this time
|
||||
assert isinstance(evaluated.body, bool) and evaluated.body
|
||||
|
||||
def test_i_can_apply_intermediate_where_condition_using_python(self):
|
||||
@@ -811,7 +813,7 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
Concept("bar", pre="print('10')"), # print won't be executed
|
||||
)
|
||||
|
||||
evaluated = sheerka.evaluate_concept(context, foo, eval_body=True)
|
||||
evaluated = sheerka.evaluate_concept(context, foo, hints=EvaluationHints(eval_body=True))
|
||||
captured = capsys.readouterr()
|
||||
assert evaluated.key == foo.key
|
||||
assert captured.out == "10\n"
|
||||
@@ -828,7 +830,7 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
Concept("foo", pre="in_context('foo')", body="print('10')"),
|
||||
)
|
||||
|
||||
evaluated = sheerka.evaluate_concept(context, concept, eval_body=True)
|
||||
evaluated = sheerka.evaluate_concept(context, concept, hints=EvaluationHints(eval_body=True))
|
||||
assert sheerka.isinstance(evaluated, BuiltinConcepts.CONDITION_FAILED)
|
||||
assert evaluated.body == "in_context('foo')"
|
||||
assert evaluated.concept == concept
|
||||
@@ -898,7 +900,7 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
def test_is_evaluated_is_correctly_set(self, concept, expected):
|
||||
sheerka, context, concept = self.init_concepts(concept)
|
||||
|
||||
evaluated = sheerka.evaluate_concept(context, concept, eval_body=True)
|
||||
evaluated = sheerka.evaluate_concept(context, concept, hints=EvaluationHints(eval_body=True))
|
||||
|
||||
assert evaluated.key == concept.key
|
||||
assert concept.get_hints().is_evaluated == expected
|
||||
@@ -919,24 +921,24 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
res = sheerka.evaluate_concept(context, bar)
|
||||
assert sheerka.isinstance(res, "bar")
|
||||
|
||||
res = sheerka.evaluate_concept(context, bar, eval_body=True)
|
||||
res = sheerka.evaluate_concept(context, bar, hints=EvaluationHints(eval_body=True))
|
||||
assert sheerka.isinstance(res, "foo")
|
||||
|
||||
# And the result is still the same after a second call
|
||||
assert bar.get_hints().is_evaluated
|
||||
res = sheerka.evaluate_concept(context, bar, eval_body=True)
|
||||
res = sheerka.evaluate_concept(context, bar, hints=EvaluationHints(eval_body=True))
|
||||
assert sheerka.isinstance(res, "foo")
|
||||
|
||||
def test_ret_is_evaluated_only_is_body_is_requested(self):
|
||||
sheerka, context, foo, bar = self.init_concepts("foo", Concept("bar", ret="__NOT_FOUND"))
|
||||
|
||||
res = sheerka.evaluate_concept(context, bar, eval_body=False)
|
||||
res = sheerka.evaluate_concept(context, bar, hints=EvaluationHints(eval_body=False))
|
||||
assert res.id == bar.id
|
||||
|
||||
def test_i_can_eval_concept_with_rules(self):
|
||||
sheerka, context, foo = self.init_concepts(Concept("foo a", body="a.name").def_var("a", "r:|1:"))
|
||||
|
||||
res = sheerka.evaluate_concept(context, foo, eval_body=True)
|
||||
res = sheerka.evaluate_concept(context, foo, hints=EvaluationHints(eval_body=True))
|
||||
assert res.body == "Print return values"
|
||||
|
||||
def test_i_can_manage_python_concept_infinite_recursion_when_initializing_ast(self):
|
||||
@@ -957,18 +959,18 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
evaluator = SheerkaEvaluateConcept(sheerka)
|
||||
|
||||
# 'def concept foo as foo'
|
||||
return_values = [pr_ret_val(foo, parser="ExactConcept"), python_ret_val("foo")]
|
||||
return_values = [pr_ret_val(foo, parser=exact), python_ret_val("foo")]
|
||||
|
||||
res = evaluator.get_recursive_definitions(context, foo, return_values)
|
||||
|
||||
assert list(res) == [BaseParser.get_name("ExactConcept")]
|
||||
assert list(r.name for r in res) == [BaseParser.get_name("ExactConcept")]
|
||||
|
||||
def test_i_can_detect_when_no_recursive_definition(self):
|
||||
sheerka, context, foo, bar = self.init_concepts("foo", "bar")
|
||||
evaluator = SheerkaEvaluateConcept(sheerka)
|
||||
|
||||
# 'def concept foo as bar'
|
||||
return_values = [pr_ret_val(bar, parser="ExactConcept"), python_ret_val("foo")]
|
||||
return_values = [pr_ret_val(bar, parser=exact), python_ret_val("foo")]
|
||||
|
||||
res = evaluator.get_recursive_definitions(context, foo, return_values)
|
||||
|
||||
@@ -980,7 +982,7 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
evaluator = SheerkaEvaluateConcept(sheerka)
|
||||
|
||||
# i dunno how to construct the return value
|
||||
return_values = [pr_ret_val(q, parser="ExactConcept")]
|
||||
return_values = [pr_ret_val(q, parser=exact)]
|
||||
|
||||
res = evaluator.get_recursive_definitions(context, q, return_values)
|
||||
|
||||
@@ -1004,7 +1006,7 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
assert evaluated.get_compiled()["y"][0].body.body.get_hints().use_copy
|
||||
|
||||
# get the body
|
||||
evaluated = evaluator.evaluate_concept(context, concept, eval_body=True)
|
||||
evaluated = evaluator.evaluate_concept(context, concept, hints=EvaluationHints(eval_body=True))
|
||||
assert evaluated.get_compiled()["x"][0].body.body.get_hints().use_copy
|
||||
assert evaluated.get_compiled()["y"][0].body.body.get_hints().use_copy
|
||||
assert not evaluated.get_value("x").get_hints().use_copy
|
||||
@@ -1025,7 +1027,7 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
|
||||
# get the body
|
||||
context.add_to_protected_hints(BuiltinConcepts.EVAL_QUESTION_REQUESTED)
|
||||
evaluated = evaluator.evaluate_concept(context, concept, eval_body=True)
|
||||
evaluated = evaluator.evaluate_concept(context, concept, hints=EvaluationHints(eval_body=True))
|
||||
assert evaluated.get_compiled()["x"][0].body.body.get_hints().use_copy
|
||||
assert evaluated.get_compiled()["y"][0].body.body.get_hints().use_copy
|
||||
assert not evaluated.get_value("x").get_hints().use_copy
|
||||
@@ -1043,7 +1045,9 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
|
||||
# Sanity check for normal behaviour
|
||||
to_evaluate1 = parsed_ret_val.body.body[0].concept.copy()
|
||||
evaluated1 = sheerka.evaluate_concept(context, to_evaluate1, eval_body=True, validation_only=False)
|
||||
evaluated1 = sheerka.evaluate_concept(context,
|
||||
to_evaluate1,
|
||||
hints=EvaluationHints(eval_body=True, expression_only=False))
|
||||
|
||||
assert sheerka.isinstance(evaluated1, shirt)
|
||||
assert evaluated1.get_value("body_ax_is_evaluated") == True
|
||||
@@ -1053,7 +1057,9 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
|
||||
# check validation_only behaviour
|
||||
to_evaluate2 = parsed_ret_val.body.body[0].concept.copy()
|
||||
evaluated2 = sheerka.evaluate_concept(context, to_evaluate2, eval_body=True, validation_only=True)
|
||||
evaluated2 = sheerka.evaluate_concept(context,
|
||||
to_evaluate2,
|
||||
hints=EvaluationHints(eval_body=True, expression_only=True))
|
||||
|
||||
assert sheerka.isinstance(evaluated2, shirt)
|
||||
assert evaluated2.get_value("body_ax_is_evaluated") == NotInit
|
||||
@@ -1073,7 +1079,7 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
parsed_ret_val = SyaNodeParser().parse(context, ParserInput("a red shirt"))
|
||||
to_evaluate = parsed_ret_val.body.body[0].concept
|
||||
|
||||
evaluated = sheerka.evaluate_concept(context, to_evaluate, eval_body=False)
|
||||
evaluated = sheerka.evaluate_concept(context, to_evaluate, hints=EvaluationHints(eval_body=False))
|
||||
|
||||
assert sheerka.isinstance(evaluated, a_x)
|
||||
assert "x" in evaluated.get_compiled()
|
||||
@@ -1085,7 +1091,7 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
# sanity check
|
||||
parsed_ret_val = SyaNodeParser().parse(context, ParserInput("a red shirt"))
|
||||
to_evaluate = parsed_ret_val.body.body[0].concept
|
||||
evaluated = sheerka.evaluate_concept(context, to_evaluate, eval_body=True)
|
||||
evaluated = sheerka.evaluate_concept(context, to_evaluate, hints=EvaluationHints(eval_body=True))
|
||||
|
||||
assert sheerka.isinstance(evaluated, shirt)
|
||||
assert evaluated.get_value("body_ax_is_evaluated") == True
|
||||
@@ -1095,7 +1101,7 @@ class TestSheerkaEvaluateConcept(TestUsingMemoryBasedSheerka):
|
||||
def test_concept_is_not_evaluated_when_method_access_error(self):
|
||||
sheerka, context, foo = self.init_concepts(Concept("foo", body="set_attr(self, 'prop_name', 'prop_value')"))
|
||||
|
||||
evaluated = sheerka.evaluate_concept(context, foo, eval_body=True, validation_only=True)
|
||||
evaluated = sheerka.evaluate_concept(context, foo, hints=EvaluationHints(eval_body=True, expression_only=True))
|
||||
|
||||
assert sheerka.isinstance(evaluated, foo)
|
||||
assert not foo.get_hints().is_evaluated
|
||||
|
||||
Reference in New Issue
Block a user