def aot_compile(file_name): """ :param file_name: :return: """ cc = CC(config['module_name']) func = [] signatures = [] if os.path.exists(config['example']): f = os.open(config['example'], os.O_RDONLY) stdin_bk = os.dup(0) os.dup2(f, 0) try: module = runpy.run_module(file_name, run_name="__main__") for k in module: e = module[k] if type(e) == numba.targets.registry.CPUDispatcher \ and e.nopython_signatures: cc.export(k, e.nopython_signatures[0])(e) func.append(k) signatures.append(str(e.nopython_signatures[0])) auto_jit = True finally: os.dup2(stdin_bk, 0) os.close(f) else: module = importlib.import_module(file_name) for dir_ in dir(module): e = eval('module.' + dir_) if type(e) == numba.targets.registry.CPUDispatcher \ and e.nopython_signatures: cc.export(dir_, e.nopython_signatures[0])(e) func.append(dir_) signatures.append(str(e.nopython_signatures[0])) auto_jit = False cc.output_dir = os.curdir if func: cc.compile() return cc, func, signatures, auto_jit
import os import numpy as np from numba.pycc import CC cc = CC('kernels') output_dir = '{}/dist'.format(os.path.abspath('..')) cc.output_dir = output_dir @cc.export('square', 'f8(f8)') def square(x): return x**2 @cc.export('squarearr', 'f8[:](f8[:])') def square_array(arr): return np.square(arr) cc.compile()
This is the pure python version where the cython code is outlined CSparse3.py: a Concise Sparse matrix Python package @author: Timothy A. Davis @author: Richard Lincoln @author: Santiago Peñate Vera """ import numpy as np import numba as nb from numba.pycc import CC from numba.typed import List import math cc = CC(extension_name='csc_native', source_module='CSparse3') cc.output_dir = 'CSParse3' def compile_code(): cc.compile() @cc.export('ialloc', 'i4[:](i8)') def ialloc(n): return np.zeros(n, dtype=nb.int32) @cc.export('xalloc', 'f8[:](i8)') def xalloc(n): return np.zeros(n, dtype=nb.float64)