def __getitem__(self, args): assert len(self.variable_list)>1 # 1. map args to var-nodes arg_list = remove_tuples(args) self.env.push_new_frame(self.variable_list) unset = len(self.variable_list) for i in range(len(arg_list)): idNode = self.variable_list[i] atype = self.env.get_type_by_node(idNode) value = build_arg_by_type(atype, arg_list) self.env.set_value(idNode.idName, value) unset = unset -1 # TODO: 2. compute missing bound variables # only implemented one case: {P(x,y)}(x) returning y if not unset==1: print unset, "unset bound variables:", [x.idName for x in self.variable_list[unset:]] raise NotImplementedError() from enumeration import try_all_values result = None for possible in try_all_values(self.predicate, self.env, self.variable_list[unset:]): if possible: result = self.env.get_value(self.variable_list[-1].idName) self.env.pop_frame() # exit scope return result
def __contains__(self, args): args = remove_tuples(args) varList = self.variable_list self.env.push_new_frame(varList) #print len(varList), varList for i in range(len(varList)): idNode = varList[i] # type needed to map args to value atype = self.env.get_type_by_node(idNode) value = build_arg_by_type(atype, args) self.env.set_value(idNode.idName, value) result = self.interpret(self.predicate, self.env) self.env.pop_frame() # exit scope if USE_RPYTHON_CODE: return result.bvalue return result
def __contains__(self, args): args = remove_tuples(args) varList = self.variable_list self.env.push_new_frame(varList) for i in range(len(varList)): idNode = varList[i] atype = self.env.get_type_by_node(idNode) value = build_arg_by_type(atype, args) self.env.set_value(idNode.idName, value) domain_value = self.interpret(self.predicate, self.env) image_value = self.interpret(self.expression, self.env) self.env.pop_frame() # exit scope if USE_RPYTHON_CODE: return domain_value.bvalue and image_value.__eq__(args[-1]) else: return domain_value and image_value==args[-1]