dataframely: Add version 3.0.0 - #2423
Conversation
dataframely is not a pure-Python Polars wrapper: it ships its own PyO3 extension (dataframely._native) built with maturin, and its Cargo.toml patches polars/polars-core/polars-arrow/pyo3-polars onto a pinned pola-rs fork commit, so building it compiles a full Polars-scale crate graph from source -- comparable in size to build-polars-runtime.yml's own build. Mirrors upstream's own build.yml (maturin-action, --release -i python3.10, abi3-py310), narrowed to riscv64gc-unknown-linux-gnu on manylinux_2_39, with the same fat-LTO override build-polars-runtime.yml and build-deltalake.yml already carry for a crate graph of this size.
|
…le tests pypi.riseproject.dev's pyarrow only has riscv64 wheels for cp312+, so uv cannot resolve it for the cp310 test venv. dataframely's own test suite only hard-imports pyarrow in tests/columns/test_arrow_pycapsule.py, so ignore that one module instead of pulling pyarrow in for this abi3 build.
The Test wheel step installs the just-built wheel then runs `python -c 'import dataframely; ...'` and `python -m pytest tests ...` from the checkout root. dataframely's pure-Python wrapper package lives directly at that root, and both invocation forms unconditionally prepend cwd to sys.path[0], so they resolved the checkout's own dataframely/__init__.py (no compiled _native) instead of the wheel's copy in site-packages (gotcha 25/218). Fix: cd /tmp first, and pass the tests dir plus pytest's config file and --ignore path as GITHUB_WORKSPACE-absolute so pytest can still find them. Reproduced and verified the fix locally with a stand-in package tree mimicking the checkout/site-packages split, for both the `python -c` and `python -m pytest` invocations.
tests/benches/conftest.py imports pandas at module load, which pytest collection needs even though the benchmark suite itself is not gated by -m "not with_optionals". pypi.riseproject.dev already publishes a cp310 riscv64 wheel for pandas (up through 2.3.2, before 3.0's requires-python bump to >=3.11), so this resolves to a prebuilt wheel rather than a from-source build.
… no cp310 riscv64 wheel scikit-learn only has cp312+ riscv64 wheels on the registry, so it can't be installed for this cp310-abi3 leg's test dependencies; skip the one directory that needs it, mirroring the existing pyarrow skip.
|
The Generated by Claude Code |
|
Run 36691176068's All 9 failures cluster around the native dataframely v3.0.0's own Not fixing this now: pinning a polars version to test the hypothesis costs another ~4-4.5 hour Generated by Claude Code |
39fb7ba to
a75cf68
Compare
…match The test install picked pytest 6.2.5: the registry hosts tomli for cp312+ only, so under uv's default first-index strategy no tomli was available for cp310 and the resolver backtracked to the last pytest that used toml instead. pytest 6's --import-mode=importlib (from upstream's addopts) names test modules by basename, which produced all 9 failures in the last run. The same 9 failures reproduce on x86_64 with upstream's own PyPI wheel under pytest 6.2.5, and the full suite passes under pytest 9.1.1. The bare dist/*.whl install also never consulted the registry, so it built numpy 2.2.6 and polars-runtime-32 1.44.2 from source (~4h); the registry now carries polars-runtime-32 1.44.2. pandas is dropped since only the already-skipped tests/benches import it.
|
Follow-up on run 36691176068: the 9 failures are not polars drift, and not riscv64-specific. The test venv resolved pytest 6.2.5:
Pushed 3341c1b: the Test wheel step now installs the wheel and test deps in one This also removes ~4h from the Test step. The old bare Generated by Claude Code |
dataframely3.0.0Compiles dataframely's own PyO3 extension (
dataframely._native), which patches Polars core/arrow onto a pinned pola-rs fork commit and links pyo3-polars. Upstream publishes no riscv64 wheel.Mirrors upstream's
build.yml.Differs from upstream
CARGO_BUILD_JOBS=2- riscv64 runner cannot afford upstream's release profile on this crate graphMatrix: cp310-abi3 only, single leg - matches upstream's own single-interpreter maturin build (
abi3-py310covers cp310-cp314)Testing
pytest tests -m "not with_optionals"License: OK