From dd92a1e48b1a9c187ab3c848c05c04bb3dc19ba6 Mon Sep 17 00:00:00 2001 From: paugier Date: Tue, 16 Jan 2024 16:45:57 +0100 Subject: [PATCH] Quick fix for Numba --- data_tests/package_for_test_meson/pyproject.toml | 2 +- src/transonic/backends/base.py | 12 +++++++----- src/transonic/backends/numba.py | 10 ++++++++-- src/transonic/run.py | 7 +++++-- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/data_tests/package_for_test_meson/pyproject.toml b/data_tests/package_for_test_meson/pyproject.toml index 1da8173..0c9e081 100644 --- a/data_tests/package_for_test_meson/pyproject.toml +++ b/data_tests/package_for_test_meson/pyproject.toml @@ -13,4 +13,4 @@ license = {text = "BSD License"} [build-system] build-backend = "mesonpy" # We cannot add the local transonic as build dependency here -requires = ["meson-python", "transonic"] +requires = ["meson-python", "transonic", "pythran"] diff --git a/src/transonic/backends/base.py b/src/transonic/backends/base.py index 1e73fe0..0544ab0 100644 --- a/src/transonic/backends/base.py +++ b/src/transonic/backends/base.py @@ -64,7 +64,7 @@ def _make_code_from_fdef_node(self, fdef): return format_str(code) def make_backend_files( - self, paths_py, force=False, log_level=None, analyses=None + self, paths_py, force=False, log_level=None, analyses=None, **kwargs ): """Create backend files from a list of Python files""" @@ -78,7 +78,9 @@ def make_backend_files( paths_out = [] for path in paths_py: analysis = analyses[path] - path_out = self.make_backend_file(path, analysis, force=force) + path_out = self.make_backend_file( + path, analysis, force=force, **kwargs + ) if path_out: paths_out.append(path_out) @@ -98,7 +100,7 @@ def make_backend_files( return paths_out def make_backend_file( - self, path_py: Path, analysis=None, force=False, log_level=None + self, path_py: Path, analysis=None, force=False, log_level=None, **kwargs ): """Create a Python file from a Python file (if necessary)""" @@ -134,7 +136,7 @@ def make_backend_file( analysis = analyse_aot(code, path_py) code_backend, codes_ext, code_header = self._make_backend_code( - path_py, analysis + path_py, analysis, **kwargs ) if not code_backend: return @@ -178,7 +180,7 @@ def _make_first_lines_header(self): def _make_beginning_code(self): return "" - def _make_backend_code(self, path_py, analysis): + def _make_backend_code(self, path_py, analysis, **kwargs): """Create a backend code from a Python file""" boosted_dicts, code_dependance, annotations, blocks, codes_ext = analysis diff --git a/src/transonic/backends/numba.py b/src/transonic/backends/numba.py index 19f5d6e..7e2c307 100644 --- a/src/transonic/backends/numba.py +++ b/src/transonic/backends/numba.py @@ -82,11 +82,17 @@ def compile_extension( process = None return compiling, process - def _make_backend_code(self, path_py, analysis): + def _make_backend_code(self, path_py, analysis, **kwargs): """Create a backend code from a Python file""" code, codes_ext, header = super()._make_backend_code(path_py, analysis) if not code: return code, codes_ext, header - return add_numba_comments(code), codes_ext, header + code = add_numba_comments(code) + + for_meson = kwargs.get("for_meson", False) + if for_meson: + code = format_str(code.replace("# __protected__ ", "")) + + return code, codes_ext, header diff --git a/src/transonic/run.py b/src/transonic/run.py index 382d156..73ffb7e 100644 --- a/src/transonic/run.py +++ b/src/transonic/run.py @@ -95,7 +95,9 @@ def run(): def run_1_backend(paths, backend, args, analyses): - backend.make_backend_files(paths, force=args.force, analyses=analyses) + backend.make_backend_files( + paths, force=args.force, analyses=analyses, for_meson=args.meson + ) if args.meson: path_meson_build = Path("meson.build") @@ -144,10 +146,11 @@ def run_1_backend(paths, backend, args, analyses): if has_to_write: meson_path.write_text(meson_code) + # special case for numba which always needs the "compilation" step if args.no_compile: return - if not can_import_accelerator(backend.name): + if backend.name != "numba" and not can_import_accelerator(backend.name): logger.warning( f"Since {backend.name_capitalized} is not importable, " "Transonic cannot properly compile a file."