Conversation
- Add pyproject.toml with scikit-build-core backend and cibuildwheel config - Add wheels.yml workflow building wheels for Linux (x86_64, aarch64), macOS (x86_64, arm64), and Windows (AMD64) on every push/PR - Includes PyPI publish job triggered on v* tags (trusted publishing) - Refactor CMakeLists.txt: add BUILD_CLI option to decouple CLI from Python extension build, replace pytapkee rename hack with set_target_properties, add install target with component filter - Remove superseded nanobind.yml workflow Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
| message(FATAL_ERROR \"Error renaming file from \${SOURCE_FILE} to \${DEST_FILE}\") | ||
| endif()") | ||
| message(STATUS "Detecting and configuring nanobind - done") | ||
| install(TARGETS pytapkee LIBRARY DESTINATION . COMPONENT python) |
There was a problem hiding this comment.
hey @iglesias, Claude suggested it might be replaced with the target_name thing.. I understand the renaming thing had been there for a reason but I am not sure
Linux: force manylinux_2_28 image (GCC 14 for C++23), install Eigen 3.4 from source since EPEL only has 3.3.x. macOS: set MACOSX_DEPLOYMENT_TARGET per runner to match Homebrew library targets (13.0 for macos-13, 15.0 for macos-latest). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
EPEL fmt 6.2.1 fmt::fmt-header-only target doesn't properly define FMT_HEADER_ONLY, causing undefined symbol at runtime. Install fmt 10.2.1 from source instead. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
macos-13 runners are no longer available on GitHub Actions. ARM64 wheels work on Intel Macs via Rosetta 2. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use native ARM runner (ubuntu-24.04-arm) instead of QEMU emulation - Drop Python 3.9/3.10 (EOL), bump requires-python to 3.11+ - Skip free-threaded Python builds (cp*t-*) - Cache vcpkg installed packages on Windows Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
| license = "BSD-3-Clause" | ||
| authors = [ | ||
| { name = "Sergey Lisitsyn", email = "lisitsyn@hey.com" }, | ||
| { name = "Fernando José", email = "fernando.iglesiasg@gmail.com" }, |
There was a problem hiding this comment.
@iglesias also, is that the correct email to be used here and would you like to be in the list?
There was a problem hiding this comment.
sure, it can be left as is, I don't mind it
MSVC linker can't resolve bare 'arpack' to 'libarpack.lib' (vcpkg
naming). Use ${ARPACK_LIB} (full path from FindArpack) everywhere.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
parpack is the MPI parallel wrapper and doesn't contain the core ARPACK symbols (dsaupd_, dseupd_). Search for arpack first. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
| SET(ARPACK_SEARCH_PATHS ${ARPACK_DIR}) | ||
|
|
||
| FIND_LIBRARY(ARPACK_LIB NAMES parpack arpack PATHS ${ARPACK_SEARCH_PATHS}) | ||
| FIND_LIBRARY(ARPACK_LIB NAMES arpack parpack PATHS ${ARPACK_SEARCH_PATHS}) |
There was a problem hiding this comment.
Nice one detected by Claude as the order makes parpack the main library to link which leads to linking errors in some cases
There was a problem hiding this comment.
Nice. Worth adding a test to avoid making the same mistake again?
There was a problem hiding this comment.
Ah I missed one part. It now links with ARPACK_LIB so it should be alright now. Before the fix it was finding 'parpack' but linking to 'arpack' in some cases.
The Windows wheel built successfully but failed at test time with "DLL load failed" because ARPACK/OpenBLAS/gfortran DLLs from vcpkg were not bundled into the wheel. Add delvewheel repair-wheel-command pointing at the vcpkg bin directory. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Prepares the repo for multiple packages by relocating pyproject.toml to packages/python/. Updates CI workflow and adds Makefile target. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds PYTHON variable (defaults to `python`, overridable via `make PYTHON=python3.12`) and replaces all bare `python` / `pip` calls with $(PYTHON) / $(PYTHON) -m pip. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a Makefile target that builds the wheel, installs it in a temporary venv, and runs a smoke test. The wheels CI now runs this as a gate before publishing. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Include LICENSE in wheels via license-files - Add Repository and Issues URLs for PyPI sidebar - Add BSD License classifier - Gitignore dist/ and .venv-test/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The SPDX license expression (PEP 639) is incompatible with both license-files globs outside the project dir and License:: classifiers. The SPDX field alone is sufficient for PyPI. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a README.md tailored for the PyPI page with install instructions, usage example, supported methods, and citation info. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
Seems it is ready to be merged. |
Summary
Adds
pip installsupport for tapkee with CI that builds wheels for all major platforms and architectures.Packaging lives in
packages/python/to prepare the repo for multiple packages.packages/python/pyproject.toml: scikit-build-core backend, cibuildwheel config, package metadata (Python 3.11+),cmake.source-dirpoints to repo rootwheels.yml: cibuildwheel CI building on every push/PR, auto-publish to PyPI onv*tagsCMakeLists.txt:BUILD_CLIoption to decouple CLI from Python extension build, replaced pytapkee rename hack withset_target_properties, properinstall()with component filterMakefile:pip-packagetarget to build a wheel locally viapip wheel packages/python -w distnanobind.yml: superseded by wheels.ymlWheel matrix
Build speed optimizations
Things to consider
FindArpack.cmakedoesn't pick up vcpkg pathsv*tag push0.1.0— worth switching to dynamic versioning (e.g., from git tags)?Test plan
pip install .works locally (verified on macOS arm64)BUILD_CLI=ON, default) still works🤖 Generated with Claude Code