Skip to main content

SU(2)-aware circuit compression for quantum workflows

Project description

rqm-optimize

rqm-optimize is the SU(2)-aware optimization layer for the RQM ecosystem. It compresses contiguous single-qubit gate runs into shorter equivalent forms, reducing unnecessary depth while preserving circuit behavior up to global phase.

Python 3.9+ License: MIT


Purpose

RQM is not only a representation layer — it is a performance layer.

rqm-optimize accepts a Qiskit QuantumCircuit, scans it for contiguous single-qubit gate runs, fuses those runs into minimal SU(2)-equivalent operations, and returns a simplified circuit that is unitary-equivalent to the original up to global phase.


Stack placement

rqm-core      → canonical quaternion / SU(2) / Bloch math
rqm-compiler  → circuit construction / normalization
rqm-qiskit    → Qiskit lowering / execution bridge
rqm-braket    → Braket lowering / execution bridge
rqm-optimize  → optimization / compression layer  ← this package

The intended end-to-end workflow is:

construct (rqm-compiler) → lower (rqm-qiskit) → optimize (rqm-optimize) → run

Installation

pip install rqm-optimize

Or from source:

git clone https://github.com/RQM-Technologies-dev/rqm-optimize.git
cd rqm-optimize
pip install -e ".[dev]"

Quickstart

from qiskit import QuantumCircuit
from rqm_optimize import optimize

qc = QuantumCircuit(1)
qc.rx(0.5, 0)
qc.ry(0.3, 0)
qc.rz(0.2, 0)
qc.h(0)
qc.s(0)
qc.t(0)

result = optimize(qc, return_metadata=True)

print("original gates:", result.original_gate_count)    # 6
print("optimized gates:", result.optimized_gate_count)  # 1
print("fused runs:", result.fused_runs)                 # 1
print("original depth:", result.original_depth)         # 6
print("optimized depth:", result.optimized_depth)       # 1
print(result.circuit)

Compiler-path integration

If you are using rqm-compiler to construct circuits and rqm-qiskit to lower them to Qiskit, pass the lowered circuit directly to optimize:

# construct → lower → optimize → run
from rqm_qiskit import to_qiskit       # rqm-qiskit lowering bridge
from rqm_optimize import optimize

qiskit_circuit = to_qiskit(compiled_circuit)   # your rqm-compiler output
optimized = optimize(qiskit_circuit)
# submit optimized to your backend of choice

Native-basis preference

Request IBM-native decomposition (rz + sx) to produce circuits that map directly to common superconducting hardware gate sets:

result = optimize(qc, native_basis="ibm", return_metadata=True)
# output gates are rz and sx — no transpilation step needed for IBM backends

Supported native_basis values:

Value Decomposition Gates
None (default) Compact U basis u
"ibm" IBM hardware native rz, sx
"zyz" Analytic Euler rz, ry

What v0.1 does

  • Detects contiguous single-qubit gate runs on each qubit.
  • Fuses each run into a single SU(2)-equivalent gate using matrix multiplication followed by Qiskit's OneQubitEulerDecomposer.
  • Supports native-basis preference so fused runs can be emitted directly as IBM-native (rz/sx) or analytic ZYZ gates.
  • Skips fusion when the decomposition would produce more gates than the original (i.e., only applies optimizations that reduce or maintain gate count).
  • Preserves barriers, measurements, resets, and multi-qubit gates exactly as hard boundaries.
  • Never mutates the input circuit.
  • Returns deterministic output.
  • Reports rich metadata: total gate count, circuit depth, single-qubit gate count, fused run count — both before and after.

Supported gates in v0.1

rx, ry, rz, u, u3, u2, u1, p, x, y, z, h, s, sdg, t, tdg, id, sx, sxdg, r, and any generic single-qubit UnitaryGate whose matrix can be extracted.


What v0.1 does not yet do

  • Backend-aware native-axis alignment using calibration data (planned for v0.2).
  • Quaternionic error metrics and drift-aware path selection (planned).
  • Braket circuit support (planned).
  • Two-qubit gate optimization.

OptimizationResult fields

Field Type Description
circuit QuantumCircuit The optimized circuit
original_gate_count int Total gate count before optimization
optimized_gate_count int Total gate count after optimization
original_depth int Circuit depth before optimization
optimized_depth int Circuit depth after optimization
original_1q_gate_count int Single-qubit gate count before
optimized_1q_gate_count int Single-qubit gate count after
fused_runs int Number of runs fused (≥ 2 gates → 1)
strategy str Optimization strategy used
native_basis str | None Decomposition basis preference
notes list[str] Human-readable optimization notes

Architecture

src/rqm_optimize/
├── __init__.py         # Public API: optimize, OptimizationResult
├── optimizer.py        # Type dispatch, strategy validation, result packaging
├── fusion.py           # Single-qubit run identification and matrix fusion
├── geometry.py         # SU(2) / global-phase normalization helpers
├── metrics.py          # Gate count, depth, 1q gate count, matrix error norms
├── qiskit_adapter.py   # Qiskit instruction inspection, matrix extraction, Euler emission
└── py.typed            # PEP 561 marker

The public surface area is intentionally minimal: optimize() and OptimizationResult. All internal helpers are private.


Development and testing

# Install with dev dependencies.
pip install -e ".[dev]"

# Run tests.
pytest

# Run the example.
python examples/basic_optimize.py

Tests cover:

  • Public API importability and __all__ contract.
  • Fusion correctness (runs compressed, boundaries respected, equivalence up to global phase).
  • Integration tests comparing unitaries using qiskit.quantum_info.Operator.
  • Measurement / barrier / multi-qubit structure preservation.
  • Metadata fields (original_depth, optimized_depth, original_1q_gate_count, optimized_1q_gate_count) and determinism.
  • native_basis parameter: IBM (rz/sx) and ZYZ decomposition paths.

Product ladder

rqm-optimize     → improves circuits today
rqm-calibration  → backend / drift / native-axis intelligence  (future)
rqm-noise        → quaternionic noise and error modeling        (future)

License

MIT © RQM Technologies

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rqm_optimize-0.1.0.tar.gz (20.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rqm_optimize-0.1.0-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

File details

Details for the file rqm_optimize-0.1.0.tar.gz.

File metadata

  • Download URL: rqm_optimize-0.1.0.tar.gz
  • Upload date:
  • Size: 20.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rqm_optimize-0.1.0.tar.gz
Algorithm Hash digest
SHA256 25a2cf21735ac6d67cd39b46d16f1c9b5df545ed36d149460efefe67bd512311
MD5 fbcee9745935aa7d82ec76a2f7d1277e
BLAKE2b-256 9ee132854c893788404fa506206ac704c5eae884f6d5cc045c7679e1ccee05b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for rqm_optimize-0.1.0.tar.gz:

Publisher: publish.yml on RQM-Technologies-dev/rqm-optimize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rqm_optimize-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: rqm_optimize-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rqm_optimize-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0b9fe94ba9b88f7f7a1e1354a246595546eb1958a58f261cf654a352060c0bc9
MD5 18f2346fa317cf1d6646aeb9bfd528f0
BLAKE2b-256 f0bc09a8f250121ec6df4280dd9ff9f56ceef23abc7352e29b8ae08c53ab1118

See more details on using hashes here.

Provenance

The following attestation bundles were made for rqm_optimize-0.1.0-py3-none-any.whl:

Publisher: publish.yml on RQM-Technologies-dev/rqm-optimize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page