Skip to content

Update Python bindings: bulk-transport performance, embedded-only packaging, engine-sync fixes#5010

Merged
robfrank merged 1 commit into
ArcadeData:mainfrom
humemai:python-bindings
Jul 6, 2026
Merged

Update Python bindings: bulk-transport performance, embedded-only packaging, engine-sync fixes#5010
robfrank merged 1 commit into
ArcadeData:mainfrom
humemai:python-bindings

Conversation

@tae898

@tae898 tae898 commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Periodic update of bindings/python from humemai/arcadedb-embedded-python, where the Python bindings are developed. Scope is the minimum needed to reproduce the wheel build and run the tests and examples: src/, scripts/, tests/, examples/, pyproject.toml, README.md.

What's new

Java helper sources now live inside the Python bindings. The biggest difference from previous updates: bindings/python/src/java/com/arcadedb/python/ adds four small Java classes (RowBatcher, ColumnBatcher, EdgeBatcher, VertexBatcher, ~450 lines total) that the existing build scripts compile into an arcadedb-python-bridge.jar shipped inside the wheel. They batch result serialization and record creation on the Java side so bulk operations cost one JPype crossing per batch instead of several per row. They use only public engine APIs, and every Python code path falls back to pure JPype when the jar is absent.

New bulk APIs built on the bridge: ResultSet.to_json_list() / iter_json_batches() / to_columns() (typed numpy columns), a fast to_dataframe() path, and GraphBatch.new_edges() bulk edge ingest. Measured against a pure-Java baseline on identical JARs/JRE/flags: vector SQL search went from ~15x the Java time to ~1.1x, 100k-row scans from ~30x to ~1.6x, and bulk edge ingest to parity.

Embedded-only packaging. The wheel no longer bundles server mode (ArcadeDBServer/create_server, Studio); client-server users are pointed at the official server distribution. Together with JAR pruning and a fix to the jlink module detection in the build scripts, wheels went from ~74 MB to ~62 MB.

Suite: 352 passed, 4 skipped; full examples run green; 4-platform x 5-Python release matrix green on the fork.

@mergify

mergify Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Tick the box to add this pull request to the merge queue (same as @mergifyio queue).

  • Queue this pull request

@codacy-production

codacy-production Bot commented Jul 5, 2026

Copy link
Copy Markdown

Not up to standards ⛔

🔴 Issues 14 high · 2 medium · 45 minor

Alerts:
⚠ 61 issues (≤ 0 issues of at least minor severity)

Results:
61 new issues

Category Results
Documentation 44 minor
Security 14 high
CodeStyle 1 minor
Complexity 2 medium

View in Codacy

🟢 Metrics 175 complexity

Metric Results
Complexity 175

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a comprehensive benchmark suite and extensive API documentation for the ArcadeDB embedded Python bindings. The benchmark suite compares Python bindings performance and memory usage against a Java-native baseline, while the documentation covers key APIs such as AsyncExecutor, Database, Schema, and Vector. Feedback on these changes highlights platform-compatibility issues in the benchmark scripts due to Linux-specific /proc/self/status file access, as well as minor indentation syntax errors in the exceptions documentation examples.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread bindings/python/benchmarks/jpype_overhead/bench_memory.py Outdated
Comment thread bindings/python/benchmarks/jpype_overhead/bench_soak.py Outdated
Comment thread bindings/python/docs/api/exceptions.md Outdated
Comment thread bindings/python/docs/api/exceptions.md Outdated
@tae898 tae898 force-pushed the python-bindings branch from f1560d2 to 9304674 Compare July 5, 2026 20:46
@lvca lvca requested a review from robfrank July 5, 2026 20:51
@lvca lvca added this to the 26.7.2 milestone Jul 5, 2026
@tae898 tae898 force-pushed the python-bindings branch 4 times, most recently from 42b3f72 to f025217 Compare July 5, 2026 21:12
tae898 added a commit to humemai/arcadedb-embedded-python that referenced this pull request Jul 5, 2026
… upstream PR branch

Encodes the rule proven on ArcadeData#5010: the PR surface is
upstream's existing bindings/python tree with contents from our main;
fork-only tooling/docs/benchmarks are pruned. Branch is never edited
directly. Validated: reproduces the pushed PR head byte-identically.
Registered in sync-upstream.sh FORK_OWNED_PATHS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-06)

Regenerated by make-upstream-pr-branch.sh: bindings/python brought to the fork's main state. Scope: the minimum needed to reproduce the wheel build and run the tests and examples.
@tae898 tae898 force-pushed the python-bindings branch from f025217 to 92d595d Compare July 6, 2026 08:48

@robfrank robfrank left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM

@robfrank robfrank merged commit 5ec2aa6 into ArcadeData:main Jul 6, 2026
49 of 51 checks passed
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.

3 participants