def generate_from_template(path_template, overwrite=True, **kwargs):
    from utils.common import check_update
    # ^ Need nnabla/build-tools/code_generator/ in python path.

    path_out = path_template.replace('.tmpl', '')
    generated = render_with_template(filename=path_template,
                                     template_kwargs=kwargs)
    check_update(path_out, generated, force=overwrite)
示例#2
0
def generate_version(template, rootdir, version = None, suffix=None, **kwargs):
    if suffix is not None:
        version = version + suffix
    tmpl_kwargs = dict(
        version=version, build_number=time.strftime('%y%m%d%H%M%S', time.gmtime()))
    tmpl_kwargs.update(kwargs)
    generated = render_with_template(filename=template, template_kwargs=tmpl_kwargs)
    path_o = template.replace('.tmpl', '')
    check_update(path_o, generated, force=True)
示例#3
0
def generate_version(template=None, rootdir=None):
    if template is None:
        template = join(base, 'python/src/nnabla/_version.py.tmpl')
    if rootdir is None:
        rootdir = base
    version, short_version = get_version(rootdir)
    generated = render_with_template(filename=template, template_kwargs=dict(
        version=version, short_version=short_version))
    path_o = template.replace('.tmpl', '')
    check_update(path_o, generated, force=True)
示例#4
0
def generate_solver_types(solver_info, solver_types, ext_info=None, template=None, output_dir=None, output_format='%s.cpp'):
    if template is None:
        template = join(
            base, 'src/nbla/solver/solver.cpp.tmpl')
    if output_dir is None:
        output_dir = dirname(template)
    for name, ttypes_list in solver_types.items():
        snake = solver_info[name]['snake_name']
        generated = generate_solver_types_one(
            template, name, snake, ttypes_list, ext_info=ext_info)
        path_o = join(output_dir, output_format % snake)
        check_update(path_o, generated, force=True)
示例#5
0
def generate_skelton_function_impl_one(ext_info, name, func, template, output_dir, output_format):
    path_o = join(output_dir, output_format % func['snake_name'])
    if exists(path_o):
        return
    in_types = [v.get('template', 'T')
                for v in func['inputs'].values()]
    out_types = [v.get('template', 'T')
                 for v in func['outputs'].values()]
    ttypes = unique_ordered(in_types, out_types)
    if 'arguments' not in func:
        func['arguments'] = {}
    generated = render_with_template(filename=template, template_kwargs=dict_union(
        ext_info, dict(name=name, in_types=in_types, out_types=out_types, ttypes=ttypes, **func)))
    check_update(path_o, generated, force=False)
示例#6
0
def generate_skeleton_backward_function_impl(function_info, template, output_dir, output_format='%s.py'):
    """This function now generate the template of a backward function in python-layer using PythonFunction.
    """
    from mako.template import Template
    import os

    for name, func in function_info.items():
        path_o = join(output_dir, output_format % func['snake_name'])
        if os.path.exists(path_o):
            continue
        # Create the skelton file of Backward Function Class
        generated = render_with_template(
            filename=template, template_kwargs=dict(function_name=name))
        check_update(path_o, generated, force=False)
示例#7
0
def generate_version(template=None, rootdir=None, suffix=None):
    if template is None:
        template = join(base, 'python/src/nnabla/_version.py.tmpl')
    if rootdir is None:
        rootdir = base
    version, short_version = get_version(rootdir)
    if suffix is not None:
        version = version + suffix
    generated = render_with_template(filename=template,
                                     template_kwargs=dict(
                                         version=version,
                                         short_version=short_version,
                                         build_number=time.strftime(
                                             '%y%m%d%H%M%S', time.gmtime())))
    path_o = template.replace('.tmpl', '')
    check_update(path_o, generated, force=True)
示例#8
0
for implements, filelist in generation_list.items():
    for fn in filelist:
        filename = '{}/{}'.format(base, fn)
        modulename = fn.replace('/', '_').replace('.', '_')
        temp = '{}/{}_template{}'.format(template,
                                         modulename, os.path.splitext(fn)[1])
        exec('import generator.generate_{}'.format(modulename))
        code_template = None
        with io.open(temp, 'rt', encoding='utf_8_sig') as f:
            code_template = f.read()
        if code_template:
            code = eval(
                ('generator.generate_{}.generate' +
                 '(info, code_template)').format(modulename))
            if code:
                check_update(filename, code, force=True)

for category, functions in info['Functions'].items():
    for function, function_info in functions.items():
        function_name = info['Names'][function]
        for implement in info['Implements'][function]:
            for fn in function_generation_list[implement]:
                filename = '{}/{}'.format(base, fn.format(function_name))
                modulename = fn.replace(
                    '/', '_').replace('.', '_').replace('_{}', '')
                temp = '{}/{}_template{}'.format(template,
                                                 modulename, os.path.splitext(fn)[1])
                exec('import function_generator.generate_{}'.format(modulename))
                s = None
                with io.open(temp, 'rt', encoding='utf_8_sig') as f:
                    s = f.read()
示例#9
0
for implements, filelist in generation_list.items():
    for fn in filelist:
        filename = '{}/{}'.format(base, fn)
        modulename = fn.replace('/', '_').replace('.', '_')
        temp = '{}/{}_template{}'.format(template, modulename,
                                         os.path.splitext(fn)[1])
        exec('import generator.generate_{}'.format(modulename))
        code_template = None
        with io.open(temp, 'rt', encoding='utf_8_sig') as f:
            code_template = f.read()
        if code_template:
            code = eval(('generator.generate_{}.generate' +
                         '(info, code_template)').format(modulename))
            if code:
                check_update(filename, code, force=True)

for category, functions in info['Functions'].items():
    for function, function_info in functions.items():
        function_name = info['Names'][function]
        imp_list = []
        if function in info['Implements']:
            imp_list = info['Implements'][function]
        for implement in imp_list:
            for fn in function_generation_list[implement]:
                filename = '{}/{}'.format(base, fn.format(function_name))
                modulename = fn.replace('/',
                                        '_').replace('.',
                                                     '_').replace('_{}', '')
                temp = '{}/{}_template{}'.format(template, modulename,
                                                 os.path.splitext(fn)[1])