def test_ast(): # create a new offline loader with explicit github url to local directory association loader = Loader() loader.add_repo("https://github.com/imodels/simgen.git", os.path.split(os.path.dirname(__file__))[0]) ast_node = AstNode(file_name='prg', loader=loader, search_path=['https://github.com/imodels/simgen/res/ast_test']) assert ast_node is not None assert ast_node.nodetype_name == 'add' assert ast_node.mapping['add'] is not None assert ast_node.mapping['add']['expr1'] is not None assert ast_node.mapping['add']['expr2'] is not None ast_node.validate()
def render_string(self, ast_yaml_string, search_path=None): ast_node = AstNode(ast_yaml_string, loader=self.loader, code_path=self.code_path, concept_path=self.concept_path) return self.render_ast(ast_node)
def render_file(self, file_name): ast_node = AstNode(file_name=file_name, loader=self.loader, code_path=self.code_path, concept_path=self.concept_path) return self.render_ast(ast_node)
def test_ast(): # create a new offline loader with explicit github url to local directory association loader = Loader() loader.add_repo("https://github.com/imodels/simgen.git", os.path.split(os.path.dirname(__file__))[0]) ast_node = AstNode( file_name='prg', loader=loader, search_path=['https://github.com/imodels/simgen/res/ast_test']) assert ast_node is not None assert ast_node.nodetype_name == 'add' assert ast_node.mapping['add'] is not None assert ast_node.mapping['add']['expr1'] is not None assert ast_node.mapping['add']['expr2'] is not None ast_node.validate()
def render_ast(self, ast): log.debug("Render_ast called with:\n{}".format(pprint.pformat(ast))) # for primitive types, convert to string if isinstance(ast, (string_types, float, int)): return str(ast) # if ast is not an AstNode, convert ast to AstNode if not isinstance(ast, AstNode): ast = AstNode(ast, self.loader, self.concept_path) # get template template = self.env.get_template(ast.nodetype_name + '.jinja') # render and return ast rendered_ast = template.render(ast.mapping[ast.nodetype_name]) assert rendered_ast is not None return rendered_ast
def load_ast(self, file_name, inject_dict=None, validation=True): # find file log.debug('Loading ast from file: {}'.format(file_name)) # load ast ast = AstNode(file_name=file_name, loader=self.loader, code_path=self.code_path, concept_path=self.concept_path) log.debug("Ast loaded: {}".format(ast)) # inject values from inject_dict to replace placeholders in ast if inject_dict: ast.inject(inject_dict) # validate if validation: ast.validate() return ast
def test_render_local(): # create a new offline loader with explicit github url to local directory association res_dir = os.path.join(dirname(__file__), '..', 'res', 'ast_test') loader = Loader() manifest = { 'title': 'adder', 'code_path': [os.path.join(res_dir, 'code')], 'concept_path': [os.path.join(res_dir, 'concepts')], 'template_path': [os.path.join(res_dir, 'templates')] } ast_node = AstNode(file_name='prg', loader=loader, **manifest) renderer = Renderer(loader, **manifest) rendered_code = renderer.render_ast(ast_node) assert rendered_code == '1 + 2 + 3' rendered_code = renderer.render_file('prg') assert rendered_code == '1 + 2 + 3'