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)
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)
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)
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)
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)
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)
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)
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()
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])