Esempio n. 1
0
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()
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
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()
Esempio n. 5
0
    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
Esempio n. 6
0
    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
Esempio n. 7
0
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'