Skip to content

Sync fork main with upstream - #9

Merged
nelson2005 merged 6 commits into
mainfrom
sync/upstream-2026-07-31
Jul 31, 2026
Merged

Sync fork main with upstream#9
nelson2005 merged 6 commits into
mainfrom
sync/upstream-2026-07-31

Conversation

@nelson2005

@nelson2005 nelson2005 commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Brings fork main level with upstream/main, which was two commits ahead: c10525b (improved mapinarrow_factory) and 0f696a9 (updated authors, license).

Merged, not squashed, so upstream's commits keep their ancestry and do not reappear as unmerged at the next sync.

Conflict resolution

One conflict, in numbarrow_ci.yml, both hunks in the shared build job:

  • python-version — upstream pins "3.12", the fork drives it from matrix.python-version. Kept the fork's matrix.
  • dependency install — upstream bumped pandas 2.2.3 → 2.3.2 on a line the fork had also changed to add numba==${{ matrix.numba-version }}. Kept both: the fork's numba matrix line and upstream's pandas bump.

The fork-only build-macos job never conflicted, so it kept pandas==2.2.3 and would have tested a different pandas than Linux and Windows. Aligned to 2.3.2 in a follow-up commit on this branch.

requires-python raised to >=3.12

0f696a9 also raised requires-python from >=3.10 to >=3.12 (alongside numba<0.67.0, pyarrow<=24.0.0, and a setuptools test dep). That made every 3.10 and 3.11 matrix job fail at pip install -e .:

ERROR: Package 'numbarrow' requires a different Python: 3.11.15 not in '>=3.12'

The floor is metadata only — nothing in the code or the new dependency ceilings needs 3.12. Measured on this branch against pyarrow 24.0.0:

CPython numba result
3.10.20 0.60.0 34 passed
3.10.20 0.63.0 34 passed
3.11.15 0.60.0 34 passed
3.11.15 0.63.0 34 passed

python -m build --wheel also succeeds on 3.10.

So both jobs now install with --ignore-requires-python, keeping the existing three-interpreter coverage rather than dropping two. This deliberately tests below upstream's declared floor: a real user on 3.10 is refused by pip until upstream changes it, so these jobs are regression signal rather than a supported configuration.

Verified after the merge

  • numbarrow/, LICENSE, pyproject.toml byte-identical to upstream/main
  • README.md differs by the two pre-existing fork-only lines defining df_in / output_schema in the example, which the fork's own doc-codeblock check requires and upstream has no equivalent of
  • fork-only files all present: .github/scripts/extract_codeblocks.py, doc-codeblock-flake8.yml, link-check.yml, CLAUDE.md
  • no conflict markers; workflow YAML parses; matrix intact at 3 python × 2 numba × 3 arch, plus macOS

Mikhail Goykhman and others added 4 commits April 29, 2026 15:53
…07-31

# Conflicts:
#	.github/workflows/numbarrow_ci.yml
Upstream moved the shared build job to pandas 2.3.2. The fork-only build-macos
job never conflicted, so it kept 2.2.3 and would have tested a different pandas
than Linux and Windows.
Copilot AI review requested due to automatic review settings July 31, 2026 03:01
@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown

MiniMax Code Review

The user is asking me to review a pull request with multiple changes. Let me analyze each file change:
  1. .github/workflows/numbarrow_ci.yml - Modified

    • Updated pandas from 2.2.3 to 2.3.2
    • Added --ignore-requires-python flag to pip install -e .
    • These changes appear in two places (matrix jobs and a specific job)
  2. .github/workflows/numbarrow_release.yml - Modified

    • Changed Python version from 3.10 to 3.12
  3. CLAUDE.md - Modified

    • Updated Python requirement info
    • Added info about CI testing below declared floor
    • Removed specific dependency versions
  4. LICENSE - Modified

    • Changed copyright from 2025 Mikhail Goykhman to 2026 NumbArrow GitHub Repository Contributors
  5. numbarrow/core/mapinarrow_factory.py - Modified

    • Changed how arrow_array_adapter return value is unpacked
    • Previously: col_bitmap, col_data = arrow_array_adapter(col_pa)
    • Now: vals = arrow_array_adapter(col_pa) then *_, col_bitmap, col_data = vals
    • This suggests the function now returns more values than before
  6. pyproject.toml - Modified

    • numba: 0.60.0,<0.64.0 → 0.60.0,<0.67.0
    • pyarrow: <=15.0.0 → <=24.0.0
    • requires-python: >=3.10 → >=3.12
    • Author changed from Mikhail Goykhman to "NumbArrow GitHub Repository Contributors"
    • Added setuptools>=75.0.0 to test dependencies

Now let me review each change for issues:

pyproject.toml changes:

The shift to Python 3.12 as a minimum requirement represents a substantial compatibility leap. The dependency expansions for numba and pyarrow are reasonable, but the version bumps could introduce breaking changes. The --ignore-requires-python flag seems like a potential workaround that might mask underlying compatibility problems.

CLAUDE.md changes:
The documentation's current framing about CI testing below the declared floor creates confusion. The language around regression signals and supported configurations appears contradictory and potentially misleading for contributors.

mapinarrow_factory.py changes:
The unpacking modification reveals potential fragility. Using *_ to discard initial values risks silently ignoring critical return values, which could lead to unexpected runtime behavior or subtle bugs.

General concerns:
The workflow modifications suggest a gradual relaxation of version constraints, potentially compromising project stability. The explicit version tolerance might encourage less rigorous testing and dependency management.

Code Review: Pull Request

Summary

This PR makes several coordinated changes: updating Python version to 3.12, updating dependencies (numba, pyarrow, pandas), and modifying CI to test "below the floor" with --ignore-requires-python. There are some issues to address.


Issues Found

1. CLAUDE.md: Conflicting Documentation (Medium)

The CLAUDE.md says both:

  • "CI deliberately tests below the declared floor"
  • "Treat those jobs as regression signal, not as a supported configuration"

This is contradictory. If the package "still builds, imports and passes the full suite on 3.10 and 3.11", then 3.10/3.11 are effectively supported. The framing suggests this is a workaround to avoid updating requires-python, but the real fix is to set requires-python = ">=3.12" (as done in pyproject.toml) and have CI test exactly what users will actually install.

Recommendation: Remove the --ignore-requires-python workaround and have CI test exactly what requires-python declares. This is cleaner and avoids confusing users.


2. numbarrow/core/mapinarrow_factory.py: Fragile Unpacking (Medium)

vals = arrow_array_adapter(col_pa)
*_, col_bitmap, col_data = vals

This discards all but the last two return values using *_. This is fragile because:

  • If arrow_array_adapter returns additional values in the future, they'll be silently ignored
  • It hides what the actual return structure is

Recommendation: Either:

  • Explicitly unpack the known return values if the function returns a fixed number of items
  • Or add a comment documenting what values are being discarded and why

3. pyproject.toml: Unbounded Upper Version Limits (Low)

"pyarrow<=24.0.0"

This upper bound will continue to require updates as PyArrow releases new versions. Consider:

  • Testing against the latest PyArrow in CI
  • Using a more relaxed bound or no upper bound at all

4. LICENSE: Copyright Change (Info)

Changed from "Mikhail Goykhman" to "NumbArrow GitHub Repository Contributors". Ensure this change is intentional and that Mikhail Goykhman (the original author) has agreed to this re-licensing/copyright change.


5. CI Workflow: Duplicate Changes (Low)

The same two changes (pandas version, --ignore-requires-python) appear in two separate job sections in numbarrow_ci.yml. Consider using a workflow matrix or consolidated steps to avoid duplication.


Positive Changes

  • ✅ Updated pandas to 2.3.2 (recent stable version)
  • ✅ numba upper bound updated to 0.67.0 (accommodates newer numba)
  • ✅ pyarrow upper bound significantly expanded (up to 24.0.0)
  • ✅ Python 3.12 as minimum is reasonable for 2025/2026

Action Items

  1. Fix the *_ unpacking in mapinarrow_factory.py to be more explicit
  2. Reconsider the --ignore-requires-python strategy — CI should test what users will actually experience
  3. Verify copyright change is agreed upon by original author

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR syncs the fork’s main branch with upstream/main, bringing in upstream changes to packaging metadata, licensing/authorship, and PySpark mapInArrow integration, plus aligning CI dependency pins.

Changes:

  • Updated project metadata and dependency constraints in pyproject.toml (Python/Numba/PyArrow bounds; test extras).
  • Adjusted make_mapinarrow_func to accept the newer multi-value return shape from arrow_array_adapter.
  • Updated GitHub Actions workflows to run/build with Python 3.12 and align pandas pinning across jobs; updated LICENSE header.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
pyproject.toml Updates supported Python version and dependency bounds; adds a test extra requirement.
numbarrow/core/mapinarrow_factory.py Updates adapter unpacking logic used to build data_dict / bitmap_dict for mapInArrow.
LICENSE Updates copyright holder/year to reflect upstream changes.
.github/workflows/numbarrow_release.yml Moves release build environment to Python 3.12.
.github/workflows/numbarrow_ci.yml Aligns pandas pin across build jobs; retains python/numba matrices.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread pyproject.toml
]
dynamic = ["version"]
requires-python = ">=3.10"
requires-python = ">=3.12"
Comment on lines +45 to 48
vals = arrow_array_adapter(col_pa)
*_, col_bitmap, col_data = vals
col_bitmap = col_bitmap if isinstance(col_bitmap, dict) else {} if col_bitmap is None else {col: col_bitmap} # noqa: E501
col_data = col_data if isinstance(col_data, dict) else {col: col_data}
Upstream raised requires-python to >=3.12, which made every 3.10 and 3.11 matrix
job fail at 'pip install -e .' with 'Package numbarrow requires a different
Python'. The floor is metadata only: the package builds, imports and passes the
full suite on both, so the flag keeps the existing coverage rather than dropping
two interpreters.

Measured on this branch, 34 passed in each of 3.10/3.11 crossed with numba
0.60.0/0.63.0, against pyarrow 24.0.0.
The Build & Dev block restated requires-python and four dependency ranges. This
sync silently invalidated four of them at once: Python >=3.10 (now >=3.12),
pyarrow <=15.0.0 (now <=24.0.0), and the numba and pyspark ceilings were never
recorded. Nothing failed, because nothing checks prose.

Replaced with a pointer to the declarations that are actually enforced, plus the
one fact pyproject.toml cannot express -- that CI tests 3.10 and 3.11 below the
declared floor on purpose, and what that does and does not mean.
@nelson2005
nelson2005 merged commit ac83714 into main Jul 31, 2026
21 checks passed
@nelson2005
nelson2005 deleted the sync/upstream-2026-07-31 branch July 31, 2026 16:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants