diff --git a/.nanvix/.gitignore b/.nanvix/.gitignore index 9a40bad059d842..acf7f49e14bbb5 100644 --- a/.nanvix/.gitignore +++ b/.nanvix/.gitignore @@ -6,5 +6,4 @@ buildroot/ .yamllint.yml black.toml env.json -nanvix.lock pyrightconfig.json diff --git a/.nanvix/build.py b/.nanvix/build.py index b179d5412bc365..9ceee5d7ac7e09 100644 --- a/.nanvix/build.py +++ b/.nanvix/build.py @@ -23,6 +23,28 @@ config = load_sibling("config", __file__) docker_mod = load_sibling("docker", __file__) lxml_mod = load_sibling("lxml", __file__) +rapidfuzz_mod = load_sibling("rapidfuzz", __file__) +wordcloud_mod = load_sibling("wordcloud", __file__) +pillow_mod = load_sibling("pillow", __file__) +numpy_mod = load_sibling("numpy_mod", __file__) +pandas_mod = load_sibling("pandas_mod", __file__) + + +def _generate_setup_local(repo_root: Path, sysroot: Path) -> None: + """Generate Modules/Setup.local with all statically-linked extension modules.""" + setup_local = repo_root / "Modules" / "Setup.local" + parts = [ + "# Auto-generated by .nanvix/build.py -- do not edit manually.", + lxml_mod.generate_setup_local_lines(sysroot), + rapidfuzz_mod.generate_setup_local_lines(sysroot), + wordcloud_mod.generate_setup_local_lines(sysroot), + pillow_mod.generate_setup_local_lines(sysroot), + numpy_mod.generate_setup_local_lines(sysroot), + pandas_mod.generate_setup_local_lines(sysroot), + ] + content = "\n".join(parts) + "\n" + setup_local.write_text(content, encoding="utf-8") + print(f"[build] Generated {setup_local}") def make_args( @@ -115,7 +137,7 @@ def build( return effective_sysroot = config.DOCKER_SYSROOT_PATH if docker else sysroot effective_toolchain = config.DOCKER_TOOLCHAIN_PATH if docker else toolchain - lxml_mod.generate_setup_local(repo_root, Path(effective_sysroot)) + _generate_setup_local(repo_root, Path(effective_sysroot)) args = make_args( effective_sysroot, effective_toolchain, diff --git a/.nanvix/lxml.py b/.nanvix/lxml.py index 326b0436d2ae98..17ee8504436521 100644 --- a/.nanvix/lxml.py +++ b/.nanvix/lxml.py @@ -13,17 +13,21 @@ config = load_sibling("config", __file__) _SETUP_LOCAL_TEMPLATE = """\ -# Auto-generated by .nanvix/lxml.py -- do not edit manually. # lxml C extension modules (statically linked via pre-built archives). _lxml_etree lxml_etree_builtin.c -L{sysroot}/lib -llxml_etree -lxslt -lexslt -lxml2 -lz _lxml_elementpath lxml_elementpath_builtin.c -L{sysroot}/lib -llxml_elementpath -lxml2 -lz """ +def generate_setup_local_lines(sysroot: Path) -> str: + """Return Setup.local lines for lxml modules.""" + return _SETUP_LOCAL_TEMPLATE.format(sysroot=sysroot) + + def generate_setup_local(repo_root: Path, sysroot: Path) -> None: """Generate Modules/Setup.local with lxml module definitions.""" setup_local = repo_root / "Modules" / "Setup.local" - content = _SETUP_LOCAL_TEMPLATE.format(sysroot=sysroot) + content = generate_setup_local_lines(sysroot) setup_local.write_text(content, encoding="utf-8") print(f"[lxml] Generated {setup_local}") diff --git a/.nanvix/numpy_mod.py b/.nanvix/numpy_mod.py new file mode 100644 index 00000000000000..eab4fb35c42b3c --- /dev/null +++ b/.nanvix/numpy_mod.py @@ -0,0 +1,43 @@ +"""numpy build helpers and runtime staging for Nanvix CPython.""" + +from __future__ import annotations + +import shutil +from pathlib import Path + +import sys as _sys + +_sys.path.insert(0, str(Path(__file__).resolve().parent)) +from _loader import load_sibling + +config = load_sibling("config", __file__) + +_SETUP_LOCAL_LINES = """\ +# numpy _multiarray_umath (statically linked via pre-built archive). +_np_multiarray_umath _np_multiarray_umath_builtin.c -L{sysroot}/lib -lnumpy_core -lstdc++ -lm +""" + + +def generate_setup_local_lines(sysroot: Path) -> str: + """Return Setup.local lines for numpy modules.""" + return _SETUP_LOCAL_LINES.format(sysroot=sysroot) + + +def stage_numpy_runtime(repo_root: Path, sysroot: Path) -> None: + """Copy numpy Python files from buildroot into the sysroot.""" + np_src = repo_root / ".nanvix" / "buildroot" / "python-packages" / "numpy" + if not np_src.is_dir(): + print( + f"[numpy] Python package not found at {np_src}; " + "skipping runtime staging." + ) + return + + py_lib = sysroot / "lib" / config.PYTHON_LIB_DIR + np_dst = py_lib / "numpy" + + if np_dst.exists(): + shutil.rmtree(np_dst) + + shutil.copytree(np_src, np_dst) + print(f"[numpy] Staged Python files to {np_dst}") diff --git a/.nanvix/pandas_mod.py b/.nanvix/pandas_mod.py new file mode 100644 index 00000000000000..6cca6976f54ce8 --- /dev/null +++ b/.nanvix/pandas_mod.py @@ -0,0 +1,78 @@ +"""Pandas build helpers for Nanvix CPython static linking.""" + +from __future__ import annotations +from pathlib import Path +import sys as _sys + +_sys.path.insert(0, str(Path(__file__).resolve().parent)) +from _loader import load_sibling + +config = load_sibling("config", __file__) + +# All pandas extension modules with their flat builtin names +_PANDAS_MODULES = [ + # pandas/_libs/ Cython modules + "_pd_algos", + "_pd_arrays", + "_pd_byteswap", + "_pd_groupby", + "_pd_hashing", + "_pd_hashtable", + "_pd_index", + "_pd_indexing", + "_pd_internals", + "_pd_interval", + "_pd_join", + "_pd_lib", + "_pd_missing", + "_pd_ops", + "_pd_ops_dispatch", + "_pd_parsers", + "_pd_properties", + "_pd_reshape", + "_pd_sas", + "_pd_sparse", + "_pd_testing", + "_pd_tslib", + "_pd_writers", + # pandas/_libs/ pure-C modules + "_pd_pandas_datetime", + "_pd_pandas_parser", + "_pd_ujson", + # pandas/_libs/tslibs/ Cython modules + "_pd_tslibs_base", + "_pd_tslibs_ccalendar", + "_pd_tslibs_conversion", + "_pd_tslibs_dtypes", + "_pd_tslibs_fields", + "_pd_tslibs_nattype", + "_pd_tslibs_np_datetime", + "_pd_tslibs_offsets", + "_pd_tslibs_parsing", + "_pd_tslibs_period", + "_pd_tslibs_strptime", + "_pd_tslibs_timedeltas", + "_pd_tslibs_timestamps", + "_pd_tslibs_timezones", + "_pd_tslibs_tzconversion", + "_pd_tslibs_vectorized", + # pandas/_libs/window/ Cython modules + "_pd_window_aggregations", + "_pd_window_indexers", +] + +_SETUP_LOCAL_TEMPLATE = """\ +# Pandas C extension modules (statically linked via pre-built archive). +{entries} +""" + + +def generate_setup_local_lines(sysroot: Path) -> str: + """Return Setup.local lines for all pandas extension modules.""" + entries: list[str] = [] + for mod in _PANDAS_MODULES: + entries.append( + f"{mod} {mod}_builtin.c " + f"-L{sysroot}/lib -lpandas -lnumpy_core -lstdc++ -lm" + ) + return _SETUP_LOCAL_TEMPLATE.format(entries="\n".join(entries)) diff --git a/.nanvix/pillow.py b/.nanvix/pillow.py new file mode 100644 index 00000000000000..f4f9298ddfa706 --- /dev/null +++ b/.nanvix/pillow.py @@ -0,0 +1,24 @@ +"""Pillow build helpers and runtime staging for Nanvix CPython.""" + +from __future__ import annotations + +from pathlib import Path + +import sys as _sys + +_sys.path.insert(0, str(Path(__file__).resolve().parent)) +from _loader import load_sibling + +config = load_sibling("config", __file__) + +_SETUP_LOCAL_LINES = """\ +# Pillow C extension modules (statically linked via pre-built archive). +_pil_imaging _pil_imaging_builtin.c -L{sysroot}/lib -l_imaging -lz +_pil_imagingmath _pil_imagingmath_builtin.c -L{sysroot}/lib -l_imaging +_pil_imagingmorph _pil_imagingmorph_builtin.c -L{sysroot}/lib -l_imaging +""" + + +def generate_setup_local_lines(sysroot: Path) -> str: + """Return Setup.local lines for Pillow modules.""" + return _SETUP_LOCAL_LINES.format(sysroot=sysroot) diff --git a/.nanvix/rapidfuzz.py b/.nanvix/rapidfuzz.py new file mode 100644 index 00000000000000..1e5e1d91a94523 --- /dev/null +++ b/.nanvix/rapidfuzz.py @@ -0,0 +1,88 @@ +"""rapidfuzz build helpers and runtime staging for Nanvix CPython.""" + +from __future__ import annotations + +import shutil +from pathlib import Path + +import sys as _sys + +_sys.path.insert(0, str(Path(__file__).resolve().parent)) +from _loader import load_sibling + +config = load_sibling("config", __file__) + +# Each line: +# The flat name avoids dotted-module limitations in Setup.local. +# Python shims bridge flat names back to the expected import paths. +_SETUP_LOCAL_LINES = """\ +# rapidfuzz C++ extension modules (statically linked via pre-built archives). +_rf_utils_cpp _rf_utils_cpp_builtin.c -L{sysroot}/lib -lutils_cpp -lstdc++ +_rf_fuzz_cpp _rf_fuzz_cpp_builtin.c -L{sysroot}/lib -lfuzz_cpp -lstdc++ +_rf_fuzz_cpp_sse2 _rf_fuzz_cpp_sse2_builtin.c -L{sysroot}/lib -lfuzz_cpp_sse2 -lstdc++ +_rf_feature_detector_cpp _rf_feature_detector_cpp_builtin.c -L{sysroot}/lib -l_feature_detector_cpp -lstdc++ +_rf_dist_initialize_cpp _rf_dist_initialize_cpp_builtin.c -L{sysroot}/lib -ldist__initialize_cpp -lstdc++ +_rf_dist_metrics_cpp _rf_dist_metrics_cpp_builtin.c -L{sysroot}/lib -ldist_metrics_cpp -lstdc++ +_rf_dist_metrics_cpp_sse2 _rf_dist_metrics_cpp_sse2_builtin.c -L{sysroot}/lib -ldist_metrics_cpp_sse2 -lstdc++ +""" + + +def generate_setup_local_lines(sysroot: Path) -> str: + """Return Setup.local lines for rapidfuzz modules.""" + return _SETUP_LOCAL_LINES.format(sysroot=sysroot) + + +def stage_rapidfuzz_runtime(repo_root: Path, sysroot: Path) -> None: + """Copy rapidfuzz Python files from buildroot into the sysroot. + + Looks for rapidfuzz in ``.nanvix/buildroot/python-packages/rapidfuzz/``. + Then writes Python shim modules that bridge the flat builtin names + to the expected ``rapidfuzz.*`` / ``rapidfuzz.distance.*`` import paths. + """ + rf_src = repo_root / ".nanvix" / "buildroot" / "python-packages" / "rapidfuzz" + if not rf_src.is_dir(): + print( + f"[rapidfuzz] Python package not found at {rf_src}; " + "skipping runtime staging." + ) + return + + py_lib = sysroot / "lib" / config.PYTHON_LIB_DIR + if not py_lib.is_dir(): + raise RuntimeError(f"Python runtime library directory is missing: {py_lib}") + + dst = py_lib / "rapidfuzz" + if dst.exists(): + shutil.rmtree(dst) + shutil.copytree(rf_src, dst) + + # Write Python shims that bridge flat builtin names to package paths + _write_shims(dst) + + print(f"[rapidfuzz] Staged {rf_src} -> {dst}") + + +# Python shim content: each maps a rapidfuzz.X import to _rf_X builtin +_CORE_SHIMS = { + "utils_cpp.py": "from _rf_utils_cpp import *\n", + "fuzz_cpp.py": "from _rf_fuzz_cpp import *\n", + "fuzz_cpp_sse2.py": "from _rf_fuzz_cpp_sse2 import *\n", + "_feature_detector_cpp.py": "from _rf_feature_detector_cpp import *\n", +} + +_DISTANCE_SHIMS = { + "_initialize_cpp.py": "from _rf_dist_initialize_cpp import *\n", + "metrics_cpp.py": "from _rf_dist_metrics_cpp import *\n", + "metrics_cpp_sse2.py": "from _rf_dist_metrics_cpp_sse2 import *\n", +} + + +def _write_shims(pkg_dir: Path) -> None: + """Write Python shim modules that bridge flat builtins to package paths.""" + for name, content in _CORE_SHIMS.items(): + (pkg_dir / name).write_text(content, encoding="utf-8") + + dist_dir = pkg_dir / "distance" + dist_dir.mkdir(exist_ok=True) + for name, content in _DISTANCE_SHIMS.items(): + (dist_dir / name).write_text(content, encoding="utf-8") diff --git a/.nanvix/wordcloud.py b/.nanvix/wordcloud.py new file mode 100644 index 00000000000000..c864bf7eca2552 --- /dev/null +++ b/.nanvix/wordcloud.py @@ -0,0 +1,55 @@ +"""wordcloud build helpers and runtime staging for Nanvix CPython.""" + +from __future__ import annotations + +import shutil +from pathlib import Path + +import sys as _sys + +_sys.path.insert(0, str(Path(__file__).resolve().parent)) +from _loader import load_sibling + +config = load_sibling("config", __file__) + +_SETUP_LOCAL_LINES = """\ +# wordcloud Cython extension module (statically linked via pre-built archive). +_wc_query_integral_image _wc_query_integral_image_builtin.c -L{sysroot}/lib -lquery_integral_image +""" + + +def generate_setup_local_lines(sysroot: Path) -> str: + """Return Setup.local lines for wordcloud modules.""" + return _SETUP_LOCAL_LINES.format(sysroot=sysroot) + + +def stage_wordcloud_runtime(repo_root: Path, sysroot: Path) -> None: + """Copy wordcloud Python files from buildroot into the sysroot. + + Then writes the Python shim that bridges _wc_query_integral_image + to wordcloud.query_integral_image. + """ + wc_src = repo_root / ".nanvix" / "buildroot" / "python-packages" / "wordcloud" + if not wc_src.is_dir(): + print( + f"[wordcloud] Python package not found at {wc_src}; " + "skipping runtime staging." + ) + return + + py_lib = sysroot / "lib" / config.PYTHON_LIB_DIR + if not py_lib.is_dir(): + raise RuntimeError(f"Python runtime library directory is missing: {py_lib}") + + dst = py_lib / "wordcloud" + if dst.exists(): + shutil.rmtree(dst) + shutil.copytree(wc_src, dst) + + # Write Python shim bridging flat builtin to package path + (dst / "query_integral_image.py").write_text( + "from _wc_query_integral_image import *\n", + encoding="utf-8", + ) + + print(f"[wordcloud] Staged {wc_src} -> {dst}") diff --git a/Modules/_np_multiarray_umath_builtin.c b/Modules/_np_multiarray_umath_builtin.c new file mode 100644 index 00000000000000..418782829b699e --- /dev/null +++ b/Modules/_np_multiarray_umath_builtin.c @@ -0,0 +1,18 @@ +/* + * Builtin shim for numpy.core._multiarray_umath + * + * Registers the numpy _multiarray_umath C extension as a flat + * built-in module "_np_multiarray_umath". A Python bridge shim + * in numpy/core/ maps it back to the expected import path. + */ + +#include "Python.h" + +/* Forward-declare the real init function from numpy */ +PyMODINIT_FUNC PyInit__multiarray_umath(void); + +PyMODINIT_FUNC +PyInit__np_multiarray_umath(void) +{ + return PyInit__multiarray_umath(); +} diff --git a/Modules/_pd_algos_builtin.c b/Modules/_pd_algos_builtin.c new file mode 100644 index 00000000000000..2fc82ad1147db6 --- /dev/null +++ b/Modules/_pd_algos_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.algos → _pd_algos */ +#include "Python.h" +PyMODINIT_FUNC PyInit_algos(void); +PyMODINIT_FUNC PyInit__pd_algos(void) { return PyInit_algos(); } diff --git a/Modules/_pd_arrays_builtin.c b/Modules/_pd_arrays_builtin.c new file mode 100644 index 00000000000000..c3d0a2ecddabea --- /dev/null +++ b/Modules/_pd_arrays_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.arrays → _pd_arrays */ +#include "Python.h" +PyMODINIT_FUNC PyInit_arrays(void); +PyMODINIT_FUNC PyInit__pd_arrays(void) { return PyInit_arrays(); } diff --git a/Modules/_pd_byteswap_builtin.c b/Modules/_pd_byteswap_builtin.c new file mode 100644 index 00000000000000..21089ad34bac39 --- /dev/null +++ b/Modules/_pd_byteswap_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.byteswap → _pd_byteswap */ +#include "Python.h" +PyMODINIT_FUNC PyInit_byteswap(void); +PyMODINIT_FUNC PyInit__pd_byteswap(void) { return PyInit_byteswap(); } diff --git a/Modules/_pd_groupby_builtin.c b/Modules/_pd_groupby_builtin.c new file mode 100644 index 00000000000000..56a13a55fcfb2e --- /dev/null +++ b/Modules/_pd_groupby_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.groupby → _pd_groupby */ +#include "Python.h" +PyMODINIT_FUNC PyInit_groupby(void); +PyMODINIT_FUNC PyInit__pd_groupby(void) { return PyInit_groupby(); } diff --git a/Modules/_pd_hashing_builtin.c b/Modules/_pd_hashing_builtin.c new file mode 100644 index 00000000000000..6079b39c8b6a96 --- /dev/null +++ b/Modules/_pd_hashing_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.hashing → _pd_hashing */ +#include "Python.h" +PyMODINIT_FUNC PyInit_hashing(void); +PyMODINIT_FUNC PyInit__pd_hashing(void) { return PyInit_hashing(); } diff --git a/Modules/_pd_hashtable_builtin.c b/Modules/_pd_hashtable_builtin.c new file mode 100644 index 00000000000000..75386676b05276 --- /dev/null +++ b/Modules/_pd_hashtable_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.hashtable → _pd_hashtable */ +#include "Python.h" +PyMODINIT_FUNC PyInit_hashtable(void); +PyMODINIT_FUNC PyInit__pd_hashtable(void) { return PyInit_hashtable(); } diff --git a/Modules/_pd_index_builtin.c b/Modules/_pd_index_builtin.c new file mode 100644 index 00000000000000..2ccc977b4db0a6 --- /dev/null +++ b/Modules/_pd_index_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.index → _pd_index */ +#include "Python.h" +PyMODINIT_FUNC PyInit_index(void); +PyMODINIT_FUNC PyInit__pd_index(void) { return PyInit_index(); } diff --git a/Modules/_pd_indexing_builtin.c b/Modules/_pd_indexing_builtin.c new file mode 100644 index 00000000000000..c9de890873f0cd --- /dev/null +++ b/Modules/_pd_indexing_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.indexing → _pd_indexing */ +#include "Python.h" +PyMODINIT_FUNC PyInit_indexing(void); +PyMODINIT_FUNC PyInit__pd_indexing(void) { return PyInit_indexing(); } diff --git a/Modules/_pd_internals_builtin.c b/Modules/_pd_internals_builtin.c new file mode 100644 index 00000000000000..4c101c58d0c110 --- /dev/null +++ b/Modules/_pd_internals_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.internals → _pd_internals */ +#include "Python.h" +PyMODINIT_FUNC PyInit_internals(void); +PyMODINIT_FUNC PyInit__pd_internals(void) { return PyInit_internals(); } diff --git a/Modules/_pd_interval_builtin.c b/Modules/_pd_interval_builtin.c new file mode 100644 index 00000000000000..9eb1b1373d4e07 --- /dev/null +++ b/Modules/_pd_interval_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.interval → _pd_interval */ +#include "Python.h" +PyMODINIT_FUNC PyInit_interval(void); +PyMODINIT_FUNC PyInit__pd_interval(void) { return PyInit_interval(); } diff --git a/Modules/_pd_join_builtin.c b/Modules/_pd_join_builtin.c new file mode 100644 index 00000000000000..47106e90c74c18 --- /dev/null +++ b/Modules/_pd_join_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.join → _pd_join */ +#include "Python.h" +PyMODINIT_FUNC PyInit_join(void); +PyMODINIT_FUNC PyInit__pd_join(void) { return PyInit_join(); } diff --git a/Modules/_pd_lib_builtin.c b/Modules/_pd_lib_builtin.c new file mode 100644 index 00000000000000..9b63d8028b6aaf --- /dev/null +++ b/Modules/_pd_lib_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.lib → _pd_lib */ +#include "Python.h" +PyMODINIT_FUNC PyInit_lib(void); +PyMODINIT_FUNC PyInit__pd_lib(void) { return PyInit_lib(); } diff --git a/Modules/_pd_missing_builtin.c b/Modules/_pd_missing_builtin.c new file mode 100644 index 00000000000000..12e25ca7fc9fe8 --- /dev/null +++ b/Modules/_pd_missing_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.missing → _pd_missing */ +#include "Python.h" +PyMODINIT_FUNC PyInit_missing(void); +PyMODINIT_FUNC PyInit__pd_missing(void) { return PyInit_missing(); } diff --git a/Modules/_pd_ops_builtin.c b/Modules/_pd_ops_builtin.c new file mode 100644 index 00000000000000..d23fd12fbe828d --- /dev/null +++ b/Modules/_pd_ops_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.ops → _pd_ops */ +#include "Python.h" +PyMODINIT_FUNC PyInit_ops(void); +PyMODINIT_FUNC PyInit__pd_ops(void) { return PyInit_ops(); } diff --git a/Modules/_pd_ops_dispatch_builtin.c b/Modules/_pd_ops_dispatch_builtin.c new file mode 100644 index 00000000000000..37ea1ff90aa350 --- /dev/null +++ b/Modules/_pd_ops_dispatch_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.ops_dispatch → _pd_ops_dispatch */ +#include "Python.h" +PyMODINIT_FUNC PyInit_ops_dispatch(void); +PyMODINIT_FUNC PyInit__pd_ops_dispatch(void) { return PyInit_ops_dispatch(); } diff --git a/Modules/_pd_pandas_datetime_builtin.c b/Modules/_pd_pandas_datetime_builtin.c new file mode 100644 index 00000000000000..2b6b87e3f235a7 --- /dev/null +++ b/Modules/_pd_pandas_datetime_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.pandas_datetime → _pd_pandas_datetime */ +#include "Python.h" +PyMODINIT_FUNC PyInit_pandas_datetime(void); +PyMODINIT_FUNC PyInit__pd_pandas_datetime(void) { return PyInit_pandas_datetime(); } diff --git a/Modules/_pd_pandas_parser_builtin.c b/Modules/_pd_pandas_parser_builtin.c new file mode 100644 index 00000000000000..0ee94a961bc616 --- /dev/null +++ b/Modules/_pd_pandas_parser_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.pandas_parser → _pd_pandas_parser */ +#include "Python.h" +PyMODINIT_FUNC PyInit_pandas_parser(void); +PyMODINIT_FUNC PyInit__pd_pandas_parser(void) { return PyInit_pandas_parser(); } diff --git a/Modules/_pd_parsers_builtin.c b/Modules/_pd_parsers_builtin.c new file mode 100644 index 00000000000000..c32865aa7dfcca --- /dev/null +++ b/Modules/_pd_parsers_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.parsers → _pd_parsers */ +#include "Python.h" +PyMODINIT_FUNC PyInit_parsers(void); +PyMODINIT_FUNC PyInit__pd_parsers(void) { return PyInit_parsers(); } diff --git a/Modules/_pd_properties_builtin.c b/Modules/_pd_properties_builtin.c new file mode 100644 index 00000000000000..04bece5de86417 --- /dev/null +++ b/Modules/_pd_properties_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.properties → _pd_properties */ +#include "Python.h" +PyMODINIT_FUNC PyInit_properties(void); +PyMODINIT_FUNC PyInit__pd_properties(void) { return PyInit_properties(); } diff --git a/Modules/_pd_reshape_builtin.c b/Modules/_pd_reshape_builtin.c new file mode 100644 index 00000000000000..1528940c58f255 --- /dev/null +++ b/Modules/_pd_reshape_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.reshape → _pd_reshape */ +#include "Python.h" +PyMODINIT_FUNC PyInit_reshape(void); +PyMODINIT_FUNC PyInit__pd_reshape(void) { return PyInit_reshape(); } diff --git a/Modules/_pd_sas_builtin.c b/Modules/_pd_sas_builtin.c new file mode 100644 index 00000000000000..7fe9239a51573c --- /dev/null +++ b/Modules/_pd_sas_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.sas → _pd_sas */ +#include "Python.h" +PyMODINIT_FUNC PyInit_sas(void); +PyMODINIT_FUNC PyInit__pd_sas(void) { return PyInit_sas(); } diff --git a/Modules/_pd_sparse_builtin.c b/Modules/_pd_sparse_builtin.c new file mode 100644 index 00000000000000..38029dc14b4b13 --- /dev/null +++ b/Modules/_pd_sparse_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.sparse → _pd_sparse */ +#include "Python.h" +PyMODINIT_FUNC PyInit_sparse(void); +PyMODINIT_FUNC PyInit__pd_sparse(void) { return PyInit_sparse(); } diff --git a/Modules/_pd_testing_builtin.c b/Modules/_pd_testing_builtin.c new file mode 100644 index 00000000000000..1dd2831588ba59 --- /dev/null +++ b/Modules/_pd_testing_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.testing → _pd_testing */ +#include "Python.h" +PyMODINIT_FUNC PyInit_testing(void); +PyMODINIT_FUNC PyInit__pd_testing(void) { return PyInit_testing(); } diff --git a/Modules/_pd_tslib_builtin.c b/Modules/_pd_tslib_builtin.c new file mode 100644 index 00000000000000..c0a48181f1c348 --- /dev/null +++ b/Modules/_pd_tslib_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslib → _pd_tslib */ +#include "Python.h" +PyMODINIT_FUNC PyInit_tslib(void); +PyMODINIT_FUNC PyInit__pd_tslib(void) { return PyInit_tslib(); } diff --git a/Modules/_pd_tslibs_base_builtin.c b/Modules/_pd_tslibs_base_builtin.c new file mode 100644 index 00000000000000..aee2155f4f2bf8 --- /dev/null +++ b/Modules/_pd_tslibs_base_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.base → _pd_tslibs_base */ +#include "Python.h" +PyMODINIT_FUNC PyInit_base(void); +PyMODINIT_FUNC PyInit__pd_tslibs_base(void) { return PyInit_base(); } diff --git a/Modules/_pd_tslibs_ccalendar_builtin.c b/Modules/_pd_tslibs_ccalendar_builtin.c new file mode 100644 index 00000000000000..a222247c1dfed0 --- /dev/null +++ b/Modules/_pd_tslibs_ccalendar_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.ccalendar → _pd_tslibs_ccalendar */ +#include "Python.h" +PyMODINIT_FUNC PyInit_ccalendar(void); +PyMODINIT_FUNC PyInit__pd_tslibs_ccalendar(void) { return PyInit_ccalendar(); } diff --git a/Modules/_pd_tslibs_conversion_builtin.c b/Modules/_pd_tslibs_conversion_builtin.c new file mode 100644 index 00000000000000..7e7354ef0f6b0f --- /dev/null +++ b/Modules/_pd_tslibs_conversion_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.conversion → _pd_tslibs_conversion */ +#include "Python.h" +PyMODINIT_FUNC PyInit_conversion(void); +PyMODINIT_FUNC PyInit__pd_tslibs_conversion(void) { return PyInit_conversion(); } diff --git a/Modules/_pd_tslibs_dtypes_builtin.c b/Modules/_pd_tslibs_dtypes_builtin.c new file mode 100644 index 00000000000000..2154db473283be --- /dev/null +++ b/Modules/_pd_tslibs_dtypes_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.dtypes → _pd_tslibs_dtypes */ +#include "Python.h" +PyMODINIT_FUNC PyInit_dtypes(void); +PyMODINIT_FUNC PyInit__pd_tslibs_dtypes(void) { return PyInit_dtypes(); } diff --git a/Modules/_pd_tslibs_fields_builtin.c b/Modules/_pd_tslibs_fields_builtin.c new file mode 100644 index 00000000000000..7f22bd9fbc690a --- /dev/null +++ b/Modules/_pd_tslibs_fields_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.fields → _pd_tslibs_fields */ +#include "Python.h" +PyMODINIT_FUNC PyInit_fields(void); +PyMODINIT_FUNC PyInit__pd_tslibs_fields(void) { return PyInit_fields(); } diff --git a/Modules/_pd_tslibs_nattype_builtin.c b/Modules/_pd_tslibs_nattype_builtin.c new file mode 100644 index 00000000000000..e657d360c00ddc --- /dev/null +++ b/Modules/_pd_tslibs_nattype_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.nattype → _pd_tslibs_nattype */ +#include "Python.h" +PyMODINIT_FUNC PyInit_nattype(void); +PyMODINIT_FUNC PyInit__pd_tslibs_nattype(void) { return PyInit_nattype(); } diff --git a/Modules/_pd_tslibs_np_datetime_builtin.c b/Modules/_pd_tslibs_np_datetime_builtin.c new file mode 100644 index 00000000000000..7d84893e598eaa --- /dev/null +++ b/Modules/_pd_tslibs_np_datetime_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.np_datetime → _pd_tslibs_np_datetime */ +#include "Python.h" +PyMODINIT_FUNC PyInit_np_datetime(void); +PyMODINIT_FUNC PyInit__pd_tslibs_np_datetime(void) { return PyInit_np_datetime(); } diff --git a/Modules/_pd_tslibs_offsets_builtin.c b/Modules/_pd_tslibs_offsets_builtin.c new file mode 100644 index 00000000000000..4e3dea849d441a --- /dev/null +++ b/Modules/_pd_tslibs_offsets_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.offsets → _pd_tslibs_offsets */ +#include "Python.h" +PyMODINIT_FUNC PyInit_offsets(void); +PyMODINIT_FUNC PyInit__pd_tslibs_offsets(void) { return PyInit_offsets(); } diff --git a/Modules/_pd_tslibs_parsing_builtin.c b/Modules/_pd_tslibs_parsing_builtin.c new file mode 100644 index 00000000000000..1ffa7e84c9bbbb --- /dev/null +++ b/Modules/_pd_tslibs_parsing_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.parsing → _pd_tslibs_parsing */ +#include "Python.h" +PyMODINIT_FUNC PyInit_parsing(void); +PyMODINIT_FUNC PyInit__pd_tslibs_parsing(void) { return PyInit_parsing(); } diff --git a/Modules/_pd_tslibs_period_builtin.c b/Modules/_pd_tslibs_period_builtin.c new file mode 100644 index 00000000000000..d5322679bb1378 --- /dev/null +++ b/Modules/_pd_tslibs_period_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.period → _pd_tslibs_period */ +#include "Python.h" +PyMODINIT_FUNC PyInit_period(void); +PyMODINIT_FUNC PyInit__pd_tslibs_period(void) { return PyInit_period(); } diff --git a/Modules/_pd_tslibs_strptime_builtin.c b/Modules/_pd_tslibs_strptime_builtin.c new file mode 100644 index 00000000000000..fcb1b96bdd3f36 --- /dev/null +++ b/Modules/_pd_tslibs_strptime_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.strptime → _pd_tslibs_strptime */ +#include "Python.h" +PyMODINIT_FUNC PyInit_strptime(void); +PyMODINIT_FUNC PyInit__pd_tslibs_strptime(void) { return PyInit_strptime(); } diff --git a/Modules/_pd_tslibs_timedeltas_builtin.c b/Modules/_pd_tslibs_timedeltas_builtin.c new file mode 100644 index 00000000000000..4d0c37aae4c8d9 --- /dev/null +++ b/Modules/_pd_tslibs_timedeltas_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.timedeltas → _pd_tslibs_timedeltas */ +#include "Python.h" +PyMODINIT_FUNC PyInit_timedeltas(void); +PyMODINIT_FUNC PyInit__pd_tslibs_timedeltas(void) { return PyInit_timedeltas(); } diff --git a/Modules/_pd_tslibs_timestamps_builtin.c b/Modules/_pd_tslibs_timestamps_builtin.c new file mode 100644 index 00000000000000..978e2f2855a8fe --- /dev/null +++ b/Modules/_pd_tslibs_timestamps_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.timestamps → _pd_tslibs_timestamps */ +#include "Python.h" +PyMODINIT_FUNC PyInit_timestamps(void); +PyMODINIT_FUNC PyInit__pd_tslibs_timestamps(void) { return PyInit_timestamps(); } diff --git a/Modules/_pd_tslibs_timezones_builtin.c b/Modules/_pd_tslibs_timezones_builtin.c new file mode 100644 index 00000000000000..aa26de9b9cb59c --- /dev/null +++ b/Modules/_pd_tslibs_timezones_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.timezones → _pd_tslibs_timezones */ +#include "Python.h" +PyMODINIT_FUNC PyInit_timezones(void); +PyMODINIT_FUNC PyInit__pd_tslibs_timezones(void) { return PyInit_timezones(); } diff --git a/Modules/_pd_tslibs_tzconversion_builtin.c b/Modules/_pd_tslibs_tzconversion_builtin.c new file mode 100644 index 00000000000000..b04544286ed4a2 --- /dev/null +++ b/Modules/_pd_tslibs_tzconversion_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.tzconversion → _pd_tslibs_tzconversion */ +#include "Python.h" +PyMODINIT_FUNC PyInit_tzconversion(void); +PyMODINIT_FUNC PyInit__pd_tslibs_tzconversion(void) { return PyInit_tzconversion(); } diff --git a/Modules/_pd_tslibs_vectorized_builtin.c b/Modules/_pd_tslibs_vectorized_builtin.c new file mode 100644 index 00000000000000..92a5e15e8c8a56 --- /dev/null +++ b/Modules/_pd_tslibs_vectorized_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.tslibs.vectorized → _pd_tslibs_vectorized */ +#include "Python.h" +PyMODINIT_FUNC PyInit_vectorized(void); +PyMODINIT_FUNC PyInit__pd_tslibs_vectorized(void) { return PyInit_vectorized(); } diff --git a/Modules/_pd_ujson_builtin.c b/Modules/_pd_ujson_builtin.c new file mode 100644 index 00000000000000..2d0033110f08dc --- /dev/null +++ b/Modules/_pd_ujson_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs._ujson → _pd_ujson */ +#include "Python.h" +PyMODINIT_FUNC PyInit__ujson(void); +PyMODINIT_FUNC PyInit__pd_ujson(void) { return PyInit__ujson(); } diff --git a/Modules/_pd_window_aggregations_builtin.c b/Modules/_pd_window_aggregations_builtin.c new file mode 100644 index 00000000000000..3e5ced93984c2a --- /dev/null +++ b/Modules/_pd_window_aggregations_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.window.aggregations → _pd_window_aggregations */ +#include "Python.h" +PyMODINIT_FUNC PyInit_aggregations(void); +PyMODINIT_FUNC PyInit__pd_window_aggregations(void) { return PyInit_aggregations(); } diff --git a/Modules/_pd_window_indexers_builtin.c b/Modules/_pd_window_indexers_builtin.c new file mode 100644 index 00000000000000..d67a31b30bd653 --- /dev/null +++ b/Modules/_pd_window_indexers_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.window.indexers → _pd_window_indexers */ +#include "Python.h" +PyMODINIT_FUNC PyInit_indexers(void); +PyMODINIT_FUNC PyInit__pd_window_indexers(void) { return PyInit_indexers(); } diff --git a/Modules/_pd_writers_builtin.c b/Modules/_pd_writers_builtin.c new file mode 100644 index 00000000000000..68488058da16ab --- /dev/null +++ b/Modules/_pd_writers_builtin.c @@ -0,0 +1,4 @@ +/* Auto-generated builtin shim: pandas._libs.writers → _pd_writers */ +#include "Python.h" +PyMODINIT_FUNC PyInit_writers(void); +PyMODINIT_FUNC PyInit__pd_writers(void) { return PyInit_writers(); } diff --git a/Modules/_pil_imaging_builtin.c b/Modules/_pil_imaging_builtin.c new file mode 100644 index 00000000000000..9eeb3ac90746e0 --- /dev/null +++ b/Modules/_pil_imaging_builtin.c @@ -0,0 +1,13 @@ +/* Builtin shim: PIL._imaging + * + * The Pillow C extension defines PyInit__imaging. + * CPython's static-module table needs a flat name: _pil_imaging. + */ +#include "Python.h" + +extern PyObject *PyInit__imaging(void); + +PyMODINIT_FUNC PyInit__pil_imaging(void) +{ + return PyInit__imaging(); +} diff --git a/Modules/_pil_imagingmath_builtin.c b/Modules/_pil_imagingmath_builtin.c new file mode 100644 index 00000000000000..52d53cf98deff2 --- /dev/null +++ b/Modules/_pil_imagingmath_builtin.c @@ -0,0 +1,13 @@ +/* Builtin shim: PIL._imagingmath + * + * The Pillow C extension defines PyInit__imagingmath. + * CPython's static-module table needs a flat name: _pil_imagingmath. + */ +#include "Python.h" + +extern PyObject *PyInit__imagingmath(void); + +PyMODINIT_FUNC PyInit__pil_imagingmath(void) +{ + return PyInit__imagingmath(); +} diff --git a/Modules/_pil_imagingmorph_builtin.c b/Modules/_pil_imagingmorph_builtin.c new file mode 100644 index 00000000000000..8c628904ae1230 --- /dev/null +++ b/Modules/_pil_imagingmorph_builtin.c @@ -0,0 +1,13 @@ +/* Builtin shim: PIL._imagingmorph + * + * The Pillow C extension defines PyInit__imagingmorph. + * CPython's static-module table needs a flat name: _pil_imagingmorph. + */ +#include "Python.h" + +extern PyObject *PyInit__imagingmorph(void); + +PyMODINIT_FUNC PyInit__pil_imagingmorph(void) +{ + return PyInit__imagingmorph(); +} diff --git a/Modules/_rf_dist_initialize_cpp_builtin.c b/Modules/_rf_dist_initialize_cpp_builtin.c new file mode 100644 index 00000000000000..b9ed4f5ac240b0 --- /dev/null +++ b/Modules/_rf_dist_initialize_cpp_builtin.c @@ -0,0 +1,17 @@ +/* + * _rf_dist_initialize_cpp_builtin.c - Shim to register rapidfuzz.distance._initialize_cpp as a CPython built-in. + * + * The Cython-generated code exports PyInit__initialize_cpp. + * This wrapper provides PyInit__rf_dist_initialize_cpp so the flat name matches + * the entry in Modules/Setup.local. + */ + +#include "Python.h" + +extern PyObject* PyInit__initialize_cpp(void); + +PyMODINIT_FUNC +PyInit__rf_dist_initialize_cpp(void) +{ + return PyInit__initialize_cpp(); +} diff --git a/Modules/_rf_dist_metrics_cpp_builtin.c b/Modules/_rf_dist_metrics_cpp_builtin.c new file mode 100644 index 00000000000000..c4027d36be4917 --- /dev/null +++ b/Modules/_rf_dist_metrics_cpp_builtin.c @@ -0,0 +1,17 @@ +/* + * _rf_dist_metrics_cpp_builtin.c - Shim to register rapidfuzz.distance.metrics_cpp as a CPython built-in. + * + * The Cython-generated code exports PyInit_metrics_cpp. + * This wrapper provides PyInit__rf_dist_metrics_cpp so the flat name matches + * the entry in Modules/Setup.local. + */ + +#include "Python.h" + +extern PyObject* PyInit_metrics_cpp(void); + +PyMODINIT_FUNC +PyInit__rf_dist_metrics_cpp(void) +{ + return PyInit_metrics_cpp(); +} diff --git a/Modules/_rf_dist_metrics_cpp_sse2_builtin.c b/Modules/_rf_dist_metrics_cpp_sse2_builtin.c new file mode 100644 index 00000000000000..b7e22c4135a767 --- /dev/null +++ b/Modules/_rf_dist_metrics_cpp_sse2_builtin.c @@ -0,0 +1,17 @@ +/* + * _rf_dist_metrics_cpp_sse2_builtin.c - Shim to register rapidfuzz.distance.metrics_cpp_sse2 as a CPython built-in. + * + * The Cython-generated code exports PyInit_metrics_cpp_sse2. + * This wrapper provides PyInit__rf_dist_metrics_cpp_sse2 so the flat name matches + * the entry in Modules/Setup.local. + */ + +#include "Python.h" + +extern PyObject* PyInit_metrics_cpp_sse2(void); + +PyMODINIT_FUNC +PyInit__rf_dist_metrics_cpp_sse2(void) +{ + return PyInit_metrics_cpp_sse2(); +} diff --git a/Modules/_rf_feature_detector_cpp_builtin.c b/Modules/_rf_feature_detector_cpp_builtin.c new file mode 100644 index 00000000000000..33246707aaa578 --- /dev/null +++ b/Modules/_rf_feature_detector_cpp_builtin.c @@ -0,0 +1,17 @@ +/* + * _rf_feature_detector_cpp_builtin.c - Shim to register rapidfuzz._feature_detector_cpp as a CPython built-in. + * + * The Cython-generated code exports PyInit__feature_detector_cpp. + * This wrapper provides PyInit__rf_feature_detector_cpp so the flat name matches + * the entry in Modules/Setup.local. + */ + +#include "Python.h" + +extern PyObject* PyInit__feature_detector_cpp(void); + +PyMODINIT_FUNC +PyInit__rf_feature_detector_cpp(void) +{ + return PyInit__feature_detector_cpp(); +} diff --git a/Modules/_rf_fuzz_cpp_builtin.c b/Modules/_rf_fuzz_cpp_builtin.c new file mode 100644 index 00000000000000..f0af570a545c55 --- /dev/null +++ b/Modules/_rf_fuzz_cpp_builtin.c @@ -0,0 +1,17 @@ +/* + * _rf_fuzz_cpp_builtin.c - Shim to register rapidfuzz.fuzz_cpp as a CPython built-in. + * + * The Cython-generated code exports PyInit_fuzz_cpp. + * This wrapper provides PyInit__rf_fuzz_cpp so the flat name matches + * the entry in Modules/Setup.local. + */ + +#include "Python.h" + +extern PyObject* PyInit_fuzz_cpp(void); + +PyMODINIT_FUNC +PyInit__rf_fuzz_cpp(void) +{ + return PyInit_fuzz_cpp(); +} diff --git a/Modules/_rf_fuzz_cpp_sse2_builtin.c b/Modules/_rf_fuzz_cpp_sse2_builtin.c new file mode 100644 index 00000000000000..f49fe7898db58d --- /dev/null +++ b/Modules/_rf_fuzz_cpp_sse2_builtin.c @@ -0,0 +1,17 @@ +/* + * _rf_fuzz_cpp_sse2_builtin.c - Shim to register rapidfuzz.fuzz_cpp_sse2 as a CPython built-in. + * + * The Cython-generated code exports PyInit_fuzz_cpp_sse2. + * This wrapper provides PyInit__rf_fuzz_cpp_sse2 so the flat name matches + * the entry in Modules/Setup.local. + */ + +#include "Python.h" + +extern PyObject* PyInit_fuzz_cpp_sse2(void); + +PyMODINIT_FUNC +PyInit__rf_fuzz_cpp_sse2(void) +{ + return PyInit_fuzz_cpp_sse2(); +} diff --git a/Modules/_rf_utils_cpp_builtin.c b/Modules/_rf_utils_cpp_builtin.c new file mode 100644 index 00000000000000..923d00b50ba67b --- /dev/null +++ b/Modules/_rf_utils_cpp_builtin.c @@ -0,0 +1,17 @@ +/* + * _rf_utils_cpp_builtin.c - Shim to register rapidfuzz.utils_cpp as a CPython built-in. + * + * The Cython-generated code exports PyInit_utils_cpp. + * This wrapper provides PyInit__rf_utils_cpp so the flat name matches + * the entry in Modules/Setup.local. + */ + +#include "Python.h" + +extern PyObject* PyInit_utils_cpp(void); + +PyMODINIT_FUNC +PyInit__rf_utils_cpp(void) +{ + return PyInit_utils_cpp(); +} diff --git a/Modules/_wc_query_integral_image_builtin.c b/Modules/_wc_query_integral_image_builtin.c new file mode 100644 index 00000000000000..69d7a1ee68631a --- /dev/null +++ b/Modules/_wc_query_integral_image_builtin.c @@ -0,0 +1,14 @@ +/* Builtin shim: wordcloud.query_integral_image + * + * The Cython extension defines PyInit_query_integral_image. + * CPython's static-module table needs a flat name: _wc_query_integral_image. + * This wrapper simply forwards the call. + */ +#include "Python.h" + +extern PyObject *PyInit_query_integral_image(void); + +PyMODINIT_FUNC PyInit__wc_query_integral_image(void) +{ + return PyInit_query_integral_image(); +}