From 19051765e577fa993154f4e23261c28402a260b5 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Fri, 15 May 2026 05:31:04 -0700 Subject: [PATCH 1/6] Include libtensor headers in dpnp package distribution --- setup.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/setup.py b/setup.py index 3f544966350..feb178154d1 100644 --- a/setup.py +++ b/setup.py @@ -52,6 +52,11 @@ "libdpnp_backend_c.so", "dpnp_backend_c.lib", "dpnp_backend_c.dll", + "tensor/libtensor/include/kernels/*.h*", + "tensor/libtensor/include/kernels/elementwise_functions/*.h*", + "tensor/libtensor/include/kernels/linalg_functions/*.h*", + "tensor/libtensor/include/kernels/sorting/*.h*", + "tensor/libtensor/include/utils/*.h*", "tests/*.*", "tests/tensor/*.py", "tests/tensor/*/*.py", From 0599239194fbe345d8cdd17715808e2b6079dba6 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Fri, 15 May 2026 05:45:19 -0700 Subject: [PATCH 2/6] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab377b2b69c..16aec93e827 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Fixed incorrect in-place advanced indexing for 4D arrays when using `range` or `list` as index keys [#2872](https://github.com/IntelPython/dpnp/pull/2872) * Fixed `conda build` command syntax in GitHub workflows and documentation to use `conda-build` [#2888](https://github.com/IntelPython/dpnp/pull/2888) +* Fixed missing `libtensor` headers in the installed `dpnp` package [#2915](https://github.com/IntelPython/dpnp/pull/2915) ### Security From 28aca249c7152aa6652b9e66196dccbd53563ffe Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Fri, 15 May 2026 10:33:03 -0700 Subject: [PATCH 3/6] Add --includes and --include-dir options to dpnp --- dpnp/__main__.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/dpnp/__main__.py b/dpnp/__main__.py index 1c9c652109e..349ffcd472f 100644 --- a/dpnp/__main__.py +++ b/dpnp/__main__.py @@ -39,10 +39,19 @@ def _dpnp_dir() -> str: return abs_dpnp_dir +def get_include_dir() -> str: + """Returns path to dpnp include directory containing dpnp4pybind11.hpp""" + return os.path.join(_dpnp_dir(), "backend", "include") + + +def print_include_flags() -> None: + """Prints include flags for dpnp headers""" + print("-I " + get_include_dir()) + + def get_tensor_include_dir() -> str: """Prints path to dpnp libtensor include directory""" - dpnp_dir = _dpnp_dir() - libtensor_dir = os.path.join(dpnp_dir, "tensor", "libtensor", "include") + libtensor_dir = os.path.join(_dpnp_dir(), "tensor", "libtensor", "include") return libtensor_dir @@ -55,6 +64,16 @@ def print_tensor_include_flags() -> None: def main() -> None: """Main entry-point.""" parser = argparse.ArgumentParser() + parser.add_argument( + "--includes", + action="store_true", + help="Include flags for dpnp headers.", + ) + parser.add_argument( + "--include-dir", + action="store_true", + help="Path to dpnp include directory.", + ) parser.add_argument( "--tensor-includes", action="store_true", @@ -68,6 +87,10 @@ def main() -> None: args = parser.parse_args() if not sys.argv[1:]: parser.print_help() + if args.includes: + print_include_flags() + if args.include_dir: + print(get_include_dir()) if args.tensor_includes: print_tensor_include_flags() if args.tensor_include_dir: From 4c8be1d236c4926e6c7f327343d7f414618de176 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Fri, 15 May 2026 10:45:43 -0700 Subject: [PATCH 4/6] Update test_cli_options.py --- dpnp/tests/test_cli_options.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/dpnp/tests/test_cli_options.py b/dpnp/tests/test_cli_options.py index 0caca95f397..1d353e9fddf 100644 --- a/dpnp/tests/test_cli_options.py +++ b/dpnp/tests/test_cli_options.py @@ -2,6 +2,24 @@ import sys +def test_includes(): + res = subprocess.run( + [sys.executable, "-m", "dpnp", "--includes"], + capture_output=True, + ) + assert res.returncode == 0 + assert res.stdout + flags = res.stdout.decode("utf-8") + res = subprocess.run( + [sys.executable, "-m", "dpnp", "--include-dir"], + capture_output=True, + ) + assert res.returncode == 0 + assert res.stdout + include_dir = res.stdout.decode("utf-8") + assert flags == "-I " + include_dir + + def test_tensor_includes(): res = subprocess.run( [sys.executable, "-m", "dpnp", "--tensor-includes"], From fc676b568b4cd8de6bd3e783fb29e2ac855a4804 Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Mon, 18 May 2026 02:54:31 -0700 Subject: [PATCH 5/6] Apply remark --- setup.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/setup.py b/setup.py index feb178154d1..6b4cea86b01 100644 --- a/setup.py +++ b/setup.py @@ -53,10 +53,7 @@ "dpnp_backend_c.lib", "dpnp_backend_c.dll", "tensor/libtensor/include/kernels/*.h*", - "tensor/libtensor/include/kernels/elementwise_functions/*.h*", - "tensor/libtensor/include/kernels/linalg_functions/*.h*", - "tensor/libtensor/include/kernels/sorting/*.h*", - "tensor/libtensor/include/utils/*.h*", + "tensor/libtensor/include/kernels/*/*.h*", "tests/*.*", "tests/tensor/*.py", "tests/tensor/*/*.py", From 3614f42eb8a28fbd285d32aef8a9cfab566b6cbc Mon Sep 17 00:00:00 2001 From: Vladislav Perevezentsev Date: Tue, 19 May 2026 06:15:27 -0700 Subject: [PATCH 6/6] Apply remark --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 6b4cea86b01..1193b61ac2a 100644 --- a/setup.py +++ b/setup.py @@ -54,6 +54,7 @@ "dpnp_backend_c.dll", "tensor/libtensor/include/kernels/*.h*", "tensor/libtensor/include/kernels/*/*.h*", + "tensor/libtensor/include/utils/*.h*", "tests/*.*", "tests/tensor/*.py", "tests/tensor/*/*.py",