from core.builtin_concepts import BuiltinConcepts from core.concept import Concept from evaluators.BaseEvaluator import AllReturnValuesEvaluator class EvalEvaluator(AllReturnValuesEvaluator): """ Returns the body of all successful concepts """ NAME = "Eval" def __init__(self): super().__init__(self.NAME, [BuiltinConcepts.AFTER_EVALUATION], 80) self.eval_requested = None def matches(self, context, return_values): sheerka = context.sheerka for ret in return_values: if ret.status and sheerka.isinstance(ret.body, BuiltinConcepts.CONCEPT_EVAL_REQUESTED): self.eval_requested = ret return True return False def eval(self, context, return_values): sheerka = context.sheerka result = [] for ret_val in return_values: if ret_val.status and isinstance(ret_val.body, Concept) and ret_val.body.body: context.log(self.verbose_log, f"Evaluating {ret_val.body}", who=self) result.append(sheerka.ret(self.name, True, ret_val.body.body, parents=[ret_val, self.eval_requested])) elif ret_val.status and sheerka.isaset(context, ret_val.body): context.log(self.verbose_log, f"Evaluating set {ret_val.body}", who=self) result.append(sheerka.ret( self.name, True, sheerka.get_set_elements(context, ret_val.body), parents=[ret_val, self.eval_requested])) if len(result) > 0: return result else: # suppress the successful BuiltinConcepts.CONCEPT_EVAL_REQUESTED # status of CONCEPT_EVAL_REQUESTED is now set to False return sheerka.ret( self.name, False, sheerka.new(BuiltinConcepts.CONCEPT_EVAL_REQUESTED), parents=[self.eval_requested])