Skip to main content

fluence (Python)

Quantum-classical scheduling coordination library for the Fluence Kubernetes scheduler. Import name fluence; distributed on PyPI as fluence-hpc.

This package is built into the Fluence sidecar image and staged into user application containers at admission time — users never install it.

What it does

A hybrid quantum-classical workflow submits work to two queues: the Kubernetes scheduler (classical) and a QPU vendor API (quantum). Classical worker pods would idle while the QPU queue drains. Fluence gates the workers until the quantum task is about to run, then releases them. This library is the runtime half:

  • interceptor (fluence.interceptor) — runs inside the user container, monkey-patches the vendor SDK submit call to tag each task with the pod UID.
  • sidecar (fluence.sidecar) — runs in a sidecar container, discovers the tagged task, polls queue position, and ungates the classical workers when the task is ready (or, in observe-only mode, just records the queue position).
  • providers (fluence.providers) — per-vendor plug-ins implementing both halves. Providers self-register on import.

Delivery (Model C)

The interceptor must run in the user's container, which does not have this package installed. Rather than require a user install or concatenate a text snippet, the Fluence webhook:

  1. injects an init container (the sidecar image) running python -m fluence.stage <dir>, which copies the pure-Python fluence package plus a sitecustomize.py into a shared emptyDir;
  2. mounts that volume into the user container and prepends <dir> to PYTHONPATH.

Python imports sitecustomize automatically on every interpreter start (python app.py included — unlike PYTHONSTARTUP, which only fires for interactive sessions), so import fluence.interceptor runs before user code. The interceptor patches whichever vendor SDK is present and fail-soft skips the rest. No user code changes, no vendor SDKs added to the user image.

Adding a provider

Add one module under fluence/providers/ that subclasses Provider, implements install_interceptor (tag hook), matches, find_my_task, is_ready_to_ungate, queue_position (optional), and job_id, and calls register(PROVIDER). Import it from fluence/providers/__init__.py. Nothing else changes.

Tests

python3 python/tests/test_fluence.py

Building and releasing

The package is distributed on PyPI as fluence-hpc (the import name fluence is already taken on PyPI). It is also baked into the sidecar image, so a release moves the package version and the image tag together.

Build the distributions

From python/:

pip install --upgrade build twine
python -m build

This produces dist/fluence_hpc-<version>-py3-none-any.whl and dist/fluence_hpc-<version>.tar.gz. Upload both.

Test on TestPyPI first

twine upload --repository testpypi dist/*
pip install --index-url https://test.pypi.org/simple/ fluence-hpc
python -c "import fluence; print(fluence.__version__)"

Release to PyPI

twine upload dist/*

After this, pip install fluence-hpc works anywhere and imports as fluence.

Versioning

Bump version in pyproject.toml and __version__ in fluence/__init__.py together (PyPI refuses to overwrite an existing version). Because the package is version-locked into the sidecar image, tag the release so the image and the package share a version — e.g. a v0.1.1 git tag triggers both the sidecar-build-deploy workflow (image) and a PyPI publish.

Automated release (recommended)

Prefer GitHub Actions with PyPI Trusted Publishing (OIDC) over manual token uploads: register the repo + workflow once on PyPI, then a release workflow triggered by a version tag builds with python -m build and uploads with pypa/gh-action-pypi-publish — no stored secret. The Docker image is built by .github/workflows/sidecar-build-deploy.yaml on the same tag, keeping the package version and image tag in lockstep.

Metadata

Release files for fluence-hpc 0.0.14

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fluence-hpc 0.0.14
File Size Uploaded
fluence_hpc-0.0.14.tar.gz 27.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fluence-hpc 0.0.14
File Interpreter ABI Platform
fluence_hpc-0.0.14-py3-none-any.whl Python 3 none any Details

Total release size: 52.3 kB

Release files / fluence_hpc-0.0.14.tar.gz

Download URL fluence_hpc-0.0.14.tar.gz
Size 27.0 kB
Tags Source
SHA-256 checksum
How to use checksums
270846a1f3fcb4732c2a7fb9fc5fa10aa5e49b0838ad9057dbcea3b035d9edb4
BLAKE2b-256 checksum
How to use checksums
f29bb9a754681fef46c39ac8019d1901c1841ac7d197d025249c82926e8bbac6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / fluence_hpc-0.0.14-py3-none-any.whl

Download URL fluence_hpc-0.0.14-py3-none-any.whl
Size 25.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b886112a0fb268108902ff0e98c5ff87bf58f3db9bfdc2022229086d1451dfe2
BLAKE2b-256 checksum
How to use checksums
5b58c1bc4dee4a866cae4931bd498f167af258c6f3abcca1a960084010beb8d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release history Release notifications | RSS feed

This release

0.0.14 This release

2 release files

0.0.12

2 release files

0.0.11

2 release files

0.0.1

2 release files

0.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page