quapp-pennylane
Quapp PennyLane library supporting the Quapp Platform for Quantum Computing with providers, devices, circuit export, invocation, and job fetching utilities.
Overview
quapp-pennylane is a Python library that integrates the Quapp Platform with
PennyLane-based quantum backends and simulators. It provides common abstractions
for providers and devices, helpers for circuit construction and export, robust job
submission and result fetching flows, and consistent job-scoped logging across
all components.
Features
- Provider & device factories — PennyLane-compatible factories for local
simulators (e.g.,
default.qubit) and vendor-backed hardware (Rigetti QVM, AWS Braket, IBM Quantum). - Circuit export —
PennylaneCircuitExportTaskwith a_PennylaneDrawableCircuitadapter that satisfies theCircuitExportTask.draw()contract usingqml.draw_mpl. - Job execution —
QAppPennylaneDevicedrives the full execution pipeline: tape construction, device selection, QNode creation, probability histogram generation, and timing metrics. - Rigetti QVM support — dynamic device-name derivation for N-qubit QVM
topologies (
Nq-qvm,Nq-pyqvm) alongside fixed 9-qubit variants. - Structured logging — job-scoped, instance-bound loggers emit structured key=value fields at every major step for traceability and debugging.
- Compatibility shims —
quapp_pennylane/__init__.pypatches API breaks betweenpennylane-rigetti==0.36.0and PennyLane 0.37–0.42+ at import time (see Compatibility below).
Installation
pip install quapp-pennylane
Requirements
| Dependency | Version |
|---|---|
| Python | ≥ 3.10 |
| quapp-common | 0.0.11.dev7 |
| pennylane | 0.37.0 |
| PennyLane-Rigetti | 0.36.0 |
| PennyLane-Lightning | 0.37.0 |
| pydantic | ≥ 1.7.2, < 2.0.0 |
| autoray | 0.6.11 |
Project Structure
quapp_pennylane/
├── __init__.py # Compatibility shims (loaded at import)
├── async_tasks/
│ └── pennylane_circuit_export_task.py # PennylaneCircuitExportTask + adapter
├── component/
│ └── backend/
│ └── pennylane_invocation.py
├── factory/
│ ├── pennylane_device_factory.py
│ ├── pennylane_handler_factory.py
│ └── pennylane_provider_factory.py
├── handler/
│ └── invocation_handler.py
└── model/
├── device/
│ ├── qapp_pennylane_device.py # Core execution device
│ ├── aws_braket_device.py
│ └── ibm_quantum_device.py
└── provider/
├── qapp_pennylane_provider.py
├── aws_braket_provider.py
├── ibm_cloud_provider.py
└── ibm_quantum_provider.py
Compatibility
quapp_pennylane/__init__.py applies the following shims at import time so that
pennylane-rigetti==0.36.0 works against PennyLane 0.37–0.42+:
| Symbol | Change | Shim |
|---|---|---|
measurements.Expectation |
Renamed to ExpectationMP in PennyLane 0.37+ |
Alias Expectation → ExpectationMP |
operation.Tensor |
Removed in PennyLane 0.40+; replaced by ops.Prod |
Alias Tensor → Prod for isinstance checks |
pennylane.QubitDevice |
Moved to pennylane.devices in PennyLane ~0.40+ |
Re-export at top-level namespace |
pydantic.BaseModel.__config__ |
Removed in Pydantic v2; qcs-api-client<0.22.0 reads self.__config__.env_prefix |
Inject a stub __config__ with env_prefix='' onto BaseModel |
pydantic is pinned to >=1.7.2,<2.0.0 in pyproject.toml to make the v1
requirement of qcs-api-client<0.22.0 explicit and prevent pip from resolving v2.
Recent Changes
0.0.5.dev2
- fix(export): Fix
_PennylaneDrawableCircuit.draw()—qml.draw_mplrequires aQNode, not a bare callable; now captures the circuit into aQuantumTape, derives wires, creates adefault.qubitdevice, and wraps in aQNodebefore rendering withqml.draw_mpl. - build: Bump version to
0.0.5.dev2.
0.0.5.dev1
- feat(device): Add structured key=value log fields to
QAppPennylaneDeviceat every execution stage — initialization, tape diagnostics, device resolution, QNode setup, execution timing, histogram generation, and finalization. - feat(device): Default shots fallback —
shots=Noneorshots=0inCircuitRunningOptionfalls back to 1024 with a warning instead of raising. - feat(export): Introduce
_PennylaneDrawableCircuitadapter inPennylaneCircuitExportTaskto wrap PennyLane circuits for theCircuitExportTask.draw()contract usingqml.draw_mpl. - feat(export): Emit Python runtime information and duration timing in
_transpile_circuit. - fix(compat): Patch
pydantic.BaseModel.__config__at import time for Pydantic v2 environments —qcs-api-client<0.22.0accessesself.__config__.env_prefix(a Pydantic v1 inner Config class removed in v2). - fix(deps): Pin
pydantic>=1.7.2,<2.0.0inpyproject.tomlto prevent pip from resolving Pydantic v2. - fix(compat): Extend compatibility shims for
pennylane-rigetti==0.36.0against PennyLane 0.37–0.42+:measurements.Expectation,operation.Tensor, andpennylane.QubitDevice. - build: Bump version to
0.0.5.dev1.
For detailed API references, refer to the in-code documentation or contact the maintainers at corp@citynow.vn.
Metadata
Release files for quapp-pennylane 0.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| quapp_pennylane-0.0.4.tar.gz | 17.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| quapp_pennylane-0.0.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.2 kB
Release files / quapp_pennylane-0.0.4.tar.gz
| Download URL | quapp_pennylane-0.0.4.tar.gz |
|---|---|
| Size | 17.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e25c229d6729c56623f6ee94885d0401c8e4e274965d12b17fc48c13c953b786
|
|
BLAKE2b-256 checksum How to use checksums |
67f1d41e02cfd17d3e16776e7b2d862090965e7fbd97e4f0a0b39651ee271dc9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.12
|
Release files / quapp_pennylane-0.0.4-py3-none-any.whl
| Download URL | quapp_pennylane-0.0.4-py3-none-any.whl |
|---|---|
| Size | 23.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
77b750793d640c0121813f76906a652a49996c750da03fbaf2559f8468a16391
|
|
BLAKE2b-256 checksum How to use checksums |
0d2eb6567b2098a035ed563c6a4970ffe384ec0b1c257e5430a1a99cfd7d9ebd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.12
|