hapc 2.3.0__tar.gz → 2.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. {hapc-2.3.0 → hapc-2.3.1}/CMakeLists.txt +8 -2
  2. {hapc-2.3.0/python/hapc.egg-info → hapc-2.3.1}/PKG-INFO +29 -4
  3. {hapc-2.3.0 → hapc-2.3.1}/README.md +28 -3
  4. hapc-2.3.1/pyproject.toml +70 -0
  5. {hapc-2.3.0 → hapc-2.3.1}/python/hapc/__init__.py +1 -1
  6. {hapc-2.3.0 → hapc-2.3.1/python/hapc.egg-info}/PKG-INFO +29 -4
  7. {hapc-2.3.0 → hapc-2.3.1}/setup.py +10 -0
  8. hapc-2.3.0/pyproject.toml +0 -36
  9. {hapc-2.3.0 → hapc-2.3.1}/LICENSE +0 -0
  10. {hapc-2.3.0 → hapc-2.3.1}/MANIFEST.in +0 -0
  11. {hapc-2.3.0 → hapc-2.3.1}/python/hapc/ate.py +0 -0
  12. {hapc-2.3.0 → hapc-2.3.1}/python/hapc/core.py +0 -0
  13. {hapc-2.3.0 → hapc-2.3.1}/python/hapc/cv.py +0 -0
  14. {hapc-2.3.0 → hapc-2.3.1}/python/hapc/single.py +0 -0
  15. {hapc-2.3.0 → hapc-2.3.1}/python/hapc.egg-info/SOURCES.txt +0 -0
  16. {hapc-2.3.0 → hapc-2.3.1}/python/hapc.egg-info/dependency_links.txt +0 -0
  17. {hapc-2.3.0 → hapc-2.3.1}/python/hapc.egg-info/not-zip-safe +0 -0
  18. {hapc-2.3.0 → hapc-2.3.1}/python/hapc.egg-info/requires.txt +0 -0
  19. {hapc-2.3.0 → hapc-2.3.1}/python/hapc.egg-info/top_level.txt +0 -0
  20. {hapc-2.3.0 → hapc-2.3.1}/setup.cfg +0 -0
  21. {hapc-2.3.0 → hapc-2.3.1}/src/bindings.cpp +0 -0
  22. {hapc-2.3.0 → hapc-2.3.1}/src/cross_kernel.cpp +0 -0
  23. {hapc-2.3.0 → hapc-2.3.1}/src/cv_classi.cpp +0 -0
  24. {hapc-2.3.0 → hapc-2.3.1}/src/cv_fast_pchal.cpp +0 -0
  25. {hapc-2.3.0 → hapc-2.3.1}/src/cv_fast_pchal_python.cpp +0 -0
  26. {hapc-2.3.0 → hapc-2.3.1}/src/fast_pchal.cpp +0 -0
  27. {hapc-2.3.0 → hapc-2.3.1}/src/hapc_core.hpp +0 -0
  28. {hapc-2.3.0 → hapc-2.3.1}/src/logistic_call.cpp +0 -0
  29. {hapc-2.3.0 → hapc-2.3.1}/src/mkernel.cpp +0 -0
  30. {hapc-2.3.0 → hapc-2.3.1}/src/pcghal_call.cpp +0 -0
  31. {hapc-2.3.0 → hapc-2.3.1}/src/pcghal_classi_call.cpp +0 -0
  32. {hapc-2.3.0 → hapc-2.3.1}/src/pcghal_cv.cpp +0 -0
  33. {hapc-2.3.0 → hapc-2.3.1}/src/pcghal_cv_classi_cpp.cpp +0 -0
  34. {hapc-2.3.0 → hapc-2.3.1}/src/pcghal_cv_cpp.cpp +0 -0
  35. {hapc-2.3.0 → hapc-2.3.1}/src/pchal_design.cpp +0 -0
  36. {hapc-2.3.0 → hapc-2.3.1}/src/r_bindings.cpp +0 -0
  37. {hapc-2.3.0 → hapc-2.3.1}/src/ridge_wrappers.cpp +0 -0
  38. {hapc-2.3.0 → hapc-2.3.1}/src/single_pcghal_cpp.cpp +0 -0
  39. {hapc-2.3.0 → hapc-2.3.1}/src/single_pchar.cpp +0 -0
  40. {hapc-2.3.0 → hapc-2.3.1}/tests/test_api.py +0 -0
  41. {hapc-2.3.0 → hapc-2.3.1}/tests/test_ate.py +0 -0
  42. {hapc-2.3.0 → hapc-2.3.1}/tests/test_ate_hapc_diagnostics_example.py +0 -0
  43. {hapc-2.3.0 → hapc-2.3.1}/tests/test_core.py +0 -0
  44. {hapc-2.3.0 → hapc-2.3.1}/tests/test_logistic_regression.py +0 -0
  45. {hapc-2.3.0 → hapc-2.3.1}/tests/test_r_vs_python_alpha.py +0 -0
@@ -1,4 +1,4 @@
1
- cmake_minimum_required(VERSION 3.15)
1
+ cmake_minimum_required(VERSION 3.18)
2
2
  project(hapc)
3
3
 
4
4
  set(CMAKE_CXX_STANDARD 17)
@@ -15,7 +15,13 @@ endif()
15
15
  # Python3_EXECUTABLE from setup.py so the build always targets the *same*
16
16
  # interpreter that pip is using. Without this CMake may discover a newer/
17
17
  # older system Python and produce a .so tagged for the wrong ABI.
18
- find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
18
+ #
19
+ # Use Development.Module (headers only), NOT the full Development component:
20
+ # the latter also requires Development.Embed -> libpython, which manylinux
21
+ # images deliberately do not ship (extension modules must not link libpython).
22
+ # Requiring full Development makes the manylinux build fail with
23
+ # "Could NOT find Python3 (missing: Python3_LIBRARIES Development.Embed)".
24
+ find_package(Python3 COMPONENTS Interpreter Development.Module REQUIRED)
19
25
  message(STATUS "Python3_EXECUTABLE: ${Python3_EXECUTABLE}")
20
26
  message(STATUS "Python3_VERSION: ${Python3_VERSION}")
21
27
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hapc
3
- Version: 2.3.0
3
+ Version: 2.3.1
4
4
  Summary: Highly Adaptive Principal Components
5
5
  Home-page: https://github.com/meixide/hapc
6
6
  Author: Carlos García Meixide
@@ -51,16 +51,41 @@ A fast and flexible machine learning library for nonparametric high-dimensional
51
51
  pip install hapc
52
52
  ```
53
53
 
54
+ Prebuilt wheels are published for Linux (manylinux2014, x86_64), macOS
55
+ (Intel + Apple Silicon) and Windows, for CPython 3.8–3.12. No compiler,
56
+ CMake or Eigen is needed when a wheel is available.
57
+
58
+ ### Linux / HPC clusters
59
+
60
+ The Linux wheels use the **manylinux2014** baseline (glibc 2.17), so
61
+ `pip install hapc` works out of the box on HPC login/compute nodes —
62
+ no `conda` toolchain, `devtoolset`, or sysroot setup required:
63
+
64
+ ```bash
65
+ pip install hapc
66
+ ```
67
+
68
+ If you must build from the source distribution (niche architecture, very
69
+ old Python, or an air-gapped node), provide a C++17 compiler and either
70
+ let CMake fetch Eigen automatically (needs network) or install Eigen and
71
+ let `find_package(Eigen3)` find it:
72
+
73
+ ```bash
74
+ # with conda compilers (recommended on HPC)
75
+ conda install -c conda-forge cxx-compiler cmake eigen
76
+ pip install hapc --no-binary hapc
77
+ ```
78
+
54
79
  ### Install from GitHub (latest development version)
55
80
 
56
81
  ```bash
57
- pip install git+https://github.com/yourusername/hapc.git
82
+ pip install git+https://github.com/meixide/hapc.git
58
83
  ```
59
84
 
60
85
  Or with editable install for development:
61
86
 
62
87
  ```bash
63
- git clone https://github.com/yourusername/hapc.git
88
+ git clone https://github.com/meixide/hapc.git
64
89
  cd hapc
65
90
  pip install -e .
66
91
  ```
@@ -201,7 +226,7 @@ Cross-validation to select lambda.
201
226
  Contributions welcome! The C++ core is shared between R and Python packages.
202
227
 
203
228
  ```bash
204
- git clone https://github.com/yourusername/hapc.git
229
+ git clone https://github.com/meixide/hapc.git
205
230
  cd hapc
206
231
  pip install -e .
207
232
  pytest
@@ -17,16 +17,41 @@ A fast and flexible machine learning library for nonparametric high-dimensional
17
17
  pip install hapc
18
18
  ```
19
19
 
20
+ Prebuilt wheels are published for Linux (manylinux2014, x86_64), macOS
21
+ (Intel + Apple Silicon) and Windows, for CPython 3.8–3.12. No compiler,
22
+ CMake or Eigen is needed when a wheel is available.
23
+
24
+ ### Linux / HPC clusters
25
+
26
+ The Linux wheels use the **manylinux2014** baseline (glibc 2.17), so
27
+ `pip install hapc` works out of the box on HPC login/compute nodes —
28
+ no `conda` toolchain, `devtoolset`, or sysroot setup required:
29
+
30
+ ```bash
31
+ pip install hapc
32
+ ```
33
+
34
+ If you must build from the source distribution (niche architecture, very
35
+ old Python, or an air-gapped node), provide a C++17 compiler and either
36
+ let CMake fetch Eigen automatically (needs network) or install Eigen and
37
+ let `find_package(Eigen3)` find it:
38
+
39
+ ```bash
40
+ # with conda compilers (recommended on HPC)
41
+ conda install -c conda-forge cxx-compiler cmake eigen
42
+ pip install hapc --no-binary hapc
43
+ ```
44
+
20
45
  ### Install from GitHub (latest development version)
21
46
 
22
47
  ```bash
23
- pip install git+https://github.com/yourusername/hapc.git
48
+ pip install git+https://github.com/meixide/hapc.git
24
49
  ```
25
50
 
26
51
  Or with editable install for development:
27
52
 
28
53
  ```bash
29
- git clone https://github.com/yourusername/hapc.git
54
+ git clone https://github.com/meixide/hapc.git
30
55
  cd hapc
31
56
  pip install -e .
32
57
  ```
@@ -167,7 +192,7 @@ Cross-validation to select lambda.
167
192
  Contributions welcome! The C++ core is shared between R and Python packages.
168
193
 
169
194
  ```bash
170
- git clone https://github.com/yourusername/hapc.git
195
+ git clone https://github.com/meixide/hapc.git
171
196
  cd hapc
172
197
  pip install -e .
173
198
  pytest
@@ -0,0 +1,70 @@
1
+ [build-system]
2
+ requires = ["setuptools>=65", "wheel", "cmake>=3.18", "pybind11>=2.6"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "hapc"
7
+ version = "2.3.1"
8
+ description = "Highly Adaptive Principal Components"
9
+ readme = "README.md"
10
+ requires-python = ">=3.8"
11
+ authors = [
12
+ {name = "Carlos García Meixide", email = "cgmeixide@gmail.com"}
13
+ ]
14
+ license = {text = "MIT"}
15
+ classifiers = [
16
+ "Programming Language :: Python :: 3",
17
+ "Programming Language :: Python :: 3.8",
18
+ "Programming Language :: Python :: 3.9",
19
+ "Programming Language :: Python :: 3.10",
20
+ "Programming Language :: Python :: 3.11",
21
+ "Programming Language :: Python :: 3.12",
22
+ "Operating System :: OS Independent",
23
+ ]
24
+ dependencies = [
25
+ "numpy>=1.24,<2.3",
26
+ "scikit-learn>=1.0",
27
+ ]
28
+
29
+ [project.optional-dependencies]
30
+ dev = ["pytest", "pytest-cov", "black", "flake8"]
31
+
32
+ [project.urls]
33
+ Homepage = "https://github.com/meixide/hapc"
34
+ Documentation = "https://github.com/meixide/hapc#readme"
35
+ Repository = "https://github.com/meixide/hapc.git"
36
+ Issues = "https://github.com/meixide/hapc/issues"
37
+
38
+ [tool.cibuildwheel]
39
+ # Build CPython 3.8–3.12 only; skip PyPy and musl (HPC/desktop targets are glibc).
40
+ build = "cp38-* cp39-* cp310-* cp311-* cp312-*"
41
+ skip = ["pp*", "*-musllinux*"]
42
+ build-verbosity = 1
43
+ # Smoke-test every wheel: install it (pulling numpy/scikit-learn) and import the
44
+ # compiled extension. Catches wrong-ABI / unresolved-symbol wheels before publish.
45
+ test-command = "python -c \"import hapc; print(hapc.__version__)\""
46
+ # NOTE: the latest scipy (transitive via scikit-learn) no longer ships a
47
+ # manylinux2014 wheel, so the in-container smoke test would try to compile it
48
+ # from source and fail. We force scipy to resolve from a binary wheel via
49
+ # PIP_ONLY_BINARY=scipy, set in the workflow and passed into the Linux container
50
+ # (see .github/workflows/build-and-publish.yml). It must apply to the wheel
51
+ # install itself, which is why it lives in the env rather than test-requires.
52
+
53
+ [tool.cibuildwheel.linux]
54
+ archs = ["x86_64"]
55
+ # manylinux2014 -> glibc 2.17 baseline + bundled libstdc++ via auditwheel, so the
56
+ # wheel installs and runs unmodified on any HPC cluster (glibc >= 2.17), no
57
+ # compiler / conda toolchain / sysroot required.
58
+ manylinux-x86_64-image = "manylinux2014"
59
+
60
+ [tool.cibuildwheel.macos]
61
+ # Build fat universal2 wheels (x86_64 + arm64) from a single runner. CMake does
62
+ # not honour the interpreter's arch flags, so the arch is forced explicitly via
63
+ # CMAKE_ARGS below (setup.py appends $CMAKE_ARGS to the cmake invocation).
64
+ # delocate then verifies both slices are present, which is what caught the old
65
+ # single-arch-but-universal2-tagged wheels.
66
+ archs = ["universal2"]
67
+ environment = { CMAKE_ARGS = "-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64" }
68
+
69
+ [tool.cibuildwheel.windows]
70
+ archs = ["AMD64"]
@@ -19,7 +19,7 @@ Lower-level building blocks:
19
19
  - :func:`ate_hapc` — ATE estimate + Wald CI via HAPC + outcome undersmoothing.
20
20
  """
21
21
 
22
- __version__ = "2.3.0"
22
+ __version__ = "2.3.1"
23
23
 
24
24
  from .core import (
25
25
  DesignOutput,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hapc
3
- Version: 2.3.0
3
+ Version: 2.3.1
4
4
  Summary: Highly Adaptive Principal Components
5
5
  Home-page: https://github.com/meixide/hapc
6
6
  Author: Carlos García Meixide
@@ -51,16 +51,41 @@ A fast and flexible machine learning library for nonparametric high-dimensional
51
51
  pip install hapc
52
52
  ```
53
53
 
54
+ Prebuilt wheels are published for Linux (manylinux2014, x86_64), macOS
55
+ (Intel + Apple Silicon) and Windows, for CPython 3.8–3.12. No compiler,
56
+ CMake or Eigen is needed when a wheel is available.
57
+
58
+ ### Linux / HPC clusters
59
+
60
+ The Linux wheels use the **manylinux2014** baseline (glibc 2.17), so
61
+ `pip install hapc` works out of the box on HPC login/compute nodes —
62
+ no `conda` toolchain, `devtoolset`, or sysroot setup required:
63
+
64
+ ```bash
65
+ pip install hapc
66
+ ```
67
+
68
+ If you must build from the source distribution (niche architecture, very
69
+ old Python, or an air-gapped node), provide a C++17 compiler and either
70
+ let CMake fetch Eigen automatically (needs network) or install Eigen and
71
+ let `find_package(Eigen3)` find it:
72
+
73
+ ```bash
74
+ # with conda compilers (recommended on HPC)
75
+ conda install -c conda-forge cxx-compiler cmake eigen
76
+ pip install hapc --no-binary hapc
77
+ ```
78
+
54
79
  ### Install from GitHub (latest development version)
55
80
 
56
81
  ```bash
57
- pip install git+https://github.com/yourusername/hapc.git
82
+ pip install git+https://github.com/meixide/hapc.git
58
83
  ```
59
84
 
60
85
  Or with editable install for development:
61
86
 
62
87
  ```bash
63
- git clone https://github.com/yourusername/hapc.git
88
+ git clone https://github.com/meixide/hapc.git
64
89
  cd hapc
65
90
  pip install -e .
66
91
  ```
@@ -201,7 +226,7 @@ Cross-validation to select lambda.
201
226
  Contributions welcome! The C++ core is shared between R and Python packages.
202
227
 
203
228
  ```bash
204
- git clone https://github.com/yourusername/hapc.git
229
+ git clone https://github.com/meixide/hapc.git
205
230
  cd hapc
206
231
  pip install -e .
207
232
  pytest
@@ -3,6 +3,7 @@
3
3
  from setuptools import setup, find_packages, Extension
4
4
  from setuptools.command.build_ext import build_ext
5
5
  import os
6
+ import shlex
6
7
  import subprocess
7
8
  import sys
8
9
  from pathlib import Path
@@ -44,6 +45,15 @@ class CMakeBuild(build_ext):
44
45
  build_args = ['--config', cfg]
45
46
 
46
47
  cmake_args += ['-DCMAKE_BUILD_TYPE=' + cfg]
48
+
49
+ # Honour the conventional CMAKE_ARGS env var (set by cibuildwheel/conda).
50
+ # Used to force universal2 macOS builds via
51
+ # CMAKE_ARGS="-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64", which CMake cannot
52
+ # infer from the (single-arch) build interpreter on its own.
53
+ extra_cmake_args = os.environ.get('CMAKE_ARGS')
54
+ if extra_cmake_args:
55
+ cmake_args += shlex.split(extra_cmake_args)
56
+
47
57
  # Add parallel build flag only on non-Windows platforms
48
58
  # On Windows, MSBuild doesn't support -j flag and handles parallelization automatically
49
59
  if sys.platform != 'win32':
hapc-2.3.0/pyproject.toml DELETED
@@ -1,36 +0,0 @@
1
- [build-system]
2
- requires = ["setuptools>=65", "wheel", "cmake>=3.15", "pybind11>=2.6"]
3
- build-backend = "setuptools.build_meta"
4
-
5
- [project]
6
- name = "hapc"
7
- version = "2.3.0"
8
- description = "Highly Adaptive Principal Components"
9
- readme = "README.md"
10
- requires-python = ">=3.8"
11
- authors = [
12
- {name = "Carlos García Meixide", email = "cgmeixide@gmail.com"}
13
- ]
14
- license = {text = "MIT"}
15
- classifiers = [
16
- "Programming Language :: Python :: 3",
17
- "Programming Language :: Python :: 3.8",
18
- "Programming Language :: Python :: 3.9",
19
- "Programming Language :: Python :: 3.10",
20
- "Programming Language :: Python :: 3.11",
21
- "Programming Language :: Python :: 3.12",
22
- "Operating System :: OS Independent",
23
- ]
24
- dependencies = [
25
- "numpy>=1.24,<2.3",
26
- "scikit-learn>=1.0",
27
- ]
28
-
29
- [project.optional-dependencies]
30
- dev = ["pytest", "pytest-cov", "black", "flake8"]
31
-
32
- [project.urls]
33
- Homepage = "https://github.com/meixide/hapc"
34
- Documentation = "https://github.com/meixide/hapc#readme"
35
- Repository = "https://github.com/meixide/hapc.git"
36
- Issues = "https://github.com/meixide/hapc/issues"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes