Skip to main content

Quantum data preparation — the missing preprocessing layer between classical datasets and quantum computing frameworks

Project description

QuPrep — Quantum Data Preparation

The missing preprocessing layer between classical datasets and quantum computing frameworks.

PyPI version Python 3.10+ License: Apache 2.0 DOI Documentation CI codecov CodeQL OpenSSF Scorecard OpenSSF Best Practices Hugging Face Demo Qiskit Ecosystem


QuPrep converts classical datasets into quantum-circuit-ready format. It is not a quantum computing framework, simulator, or training tool — it is the preprocessing step that feeds into Qiskit, PennyLane, Cirq, TKET, and any other quantum workflow.

CSV / DataFrame / NumPy / images / text / graphs  →  QuPrep  →  circuit-ready output

What QuPrep does

  • Ingest tabular data, time series, images, text, and graphs — all in the same pipeline API
  • Clean, normalize, and reduce dimensionality to fit your hardware qubit budget
  • Encode data into circuits using 13 encoding methods (Angle, Amplitude, IQP, ZZFeatureMap, GraphState, and more)
  • Recommend, compare, and auto-select the best encoding for your dataset and task
  • Export circuits to 8 frameworks: OpenQASM 3.0, Qiskit, PennyLane, Cirq, TKET, Braket, Q#, IQM
  • Formulate combinatorial optimization problems as QUBO / Ising models; export as QAOA circuit templates for your quantum framework

QuPrep does not train models, simulate circuits, run on quantum hardware, or optimize variational parameters.


Installation

pip install quprep

With optional extras:

# Framework exporters
pip install quprep[qiskit]     # Qiskit QuantumCircuit
pip install quprep[pennylane]  # PennyLane QNode
pip install quprep[cirq]       # Cirq Circuit
pip install quprep[tket]       # TKET/pytket Circuit
pip install quprep[braket]     # Amazon Braket Circuit
pip install quprep[qsharp]     # Q# / Azure Quantum
pip install quprep[iqm]        # IQM native format
pip install quprep[frameworks] # all framework exporters at once

# Data modalities
pip install quprep[image]      # image ingestion (Pillow)
pip install quprep[text]       # text embeddings (sentence-transformers, ~2 GB)
pip install quprep[modalities] # image + text at once

# Other
pip install quprep[umap]       # UMAP dimensionality reduction
pip install quprep[viz]        # matplotlib circuit diagrams
pip install quprep[all]        # everything

Requirements: Python ≥ 3.10. Core dependencies: numpy, scipy, pandas, scikit-learn.


Quickstart

One-liner

import quprep as qd

result = qd.prepare("data.csv", encoding="angle", framework="qasm")
print(result.circuit)

Full pipeline

import quprep as qd

pipeline = qd.Pipeline(
    cleaner=qd.Imputer(),
    reducer=qd.PCAReducer(n_components=8),
    encoder=qd.IQPEncoder(reps=2),
    exporter=qd.PennyLaneExporter(),   # pip install quprep[pennylane]
)
result = pipeline.fit_transform("data.csv")
qnode = result.circuit   # callable qml.QNode

Data modalities — time series, images, text, graphs

import quprep as qd

# Time series — sliding window then encode
from quprep.ingest.time_series_ingester import TimeSeriesIngester
from quprep.clean.window_transformer import WindowTransformer

result = qd.Pipeline(
    preprocessor=WindowTransformer(window_size=5, step=1),
    encoder=qd.AngleEncoder(),
).fit_transform(TimeSeriesIngester(time_column="date").load("sensor.csv"))

# Images — pip install quprep[image]
from quprep.ingest.image_ingester import ImageIngester
result = qd.prepare("images/", encoding="angle", ingester=ImageIngester(size=(8, 8), grayscale=True))

# Text — TF-IDF (no deps) or sentence-transformers (pip install quprep[text])
from quprep.ingest.text_ingester import TextIngester
texts = ["quantum computing is powerful", "machine learning meets QML", ...]
result = qd.prepare(texts, encoding="angle", ingester=TextIngester(method="tfidf", max_features=16))

# Graphs — lossless graph state encoding
from quprep.ingest.graph_ingester import GraphIngester
from quprep.encode.graph_state import GraphStateEncoder
import numpy as np
graph_list = [np.array([[0,1,1],[1,0,0],[1,0,0]], dtype=float), ...]  # adjacency matrices
result = qd.Pipeline(encoder=GraphStateEncoder()).fit_transform(
    GraphIngester(features="adjacency").load(graph_list)
)

More features

Feature Docs
Encoding recommendation — ranked by dataset profile and task guide
Qubit budget suggestion — NISQ-safe ceiling with reasoning API
Side-by-side encoder comparison — depth, gates, NISQ safety API
Data drift detection — warn when new data leaves training distribution API
Pipeline save / load — serialize fitted pipelines, no re-fitting API
Schema validation & cost estimation — gate count before encoding guide
QUBO / Ising formulation — Max-Cut, TSP, Knapsack, QAOA circuits, D-Wave export guide
Plugin system — register custom encoders and exporters guide
Circuit visualization — ASCII (no deps) or matplotlib API
Batch QASM export — save all samples to disk as individual files API

Supported encodings

Encoding Qubits Depth NISQ-safe Best for
Angle (Ry/Rx/Rz) n = d O(1) ✅ Excellent Most QML tasks
Amplitude ⌈log₂ d⌉ O(2ⁿ) ❌ Poor Qubit-limited scenarios
Basis n = d O(1) ✅ Excellent Binary features / QAOA
Entangled Angle n = d O(d · layers) ✅ Good Feature correlations
IQP n = d O(d² · reps) ⚠️ Medium Kernel methods
Re-uploading n = d O(d · layers) ✅ Good High-expressivity QNNs
Hamiltonian n = d O(d · steps) ⚠️ Medium Physics simulation / VQE
ZZ Feature Map n = d O(d² · reps) ⚠️ Medium Quantum kernel methods
Pauli Feature Map n = d O(d² · reps) ⚠️ Medium Configurable kernel methods
Random Fourier n_components O(1) ✅ Excellent RBF kernel approximation
Tensor Product ⌈d/2⌉ O(1) ✅ Excellent Qubit-efficient encoding
QAOA Problem n = d O(p) ✅ Good QAOA warm-start, problem-inspired maps
Graph State n = nodes O(edges) ✅ Good Graph-structured data (lossless)

Supported export frameworks

Framework Install Output
OpenQASM 3.0 (included) str
Qiskit pip install quprep[qiskit] QuantumCircuit
PennyLane pip install quprep[pennylane] qml.QNode
Cirq pip install quprep[cirq] cirq.Circuit
TKET pip install quprep[tket] pytket.Circuit
Amazon Braket pip install quprep[braket] braket.Circuit
Q# pip install quprep[qsharp] Q# operation string
IQM pip install quprep[iqm] IQM circuit JSON

Documentation

Full documentation at docs.quprep.org


Examples

Tutorials — beginner-friendly, end-to-end walkthroughs:

Topic Launch
Your first quantum-ready dataset Open In Colab Binder
Real-world messy data (NaN, outliers, imbalance) Open In Colab Binder
End-to-end with a framework (audit → suggest → verify → export) Open In Colab Binder

How-to guides — task-focused, one topic each:

Task Launch
Choose an encoder Open In Colab Binder
Export to Qiskit / PennyLane / Cirq / Braket Open In Colab Binder
Inspect a circuit (angles, gates, diagrams) Open In Colab Binder
Load external data (CSV, OpenML, HuggingFace, streaming) Open In Colab Binder
Non-tabular data (time series, sparse, multi-label) Open In Colab Binder
Fix class imbalance (SMOTE / oversample / undersample) Open In Colab Binder
Validate before encoding (report, compatibility, schema) Open In Colab Binder
Detect data drift in production Open In Colab Binder
Assess encoding quality (expressibility, barren plateau) Open In Colab Binder
Noise-aware preprocessing for NISQ hardware Open In Colab Binder
Solve a QUBO / Ising problem (Max-Cut, Knapsack, QAOA) Open In Colab Binder
Write a custom encoder and register it Open In Colab Binder

Contributing

Contributions are welcome. Please read CONTRIBUTING.md before opening a pull request.


License

Apache 2.0 — see LICENSE.


Citation

If you use QuPrep in your research, please cite:

@software{quprep2026,
  author    = {Perera, Hasarindu},
  title     = {QuPrep: Quantum Data Preparation},
  year      = {2026},
  publisher = {Zenodo},
  version   = {0.10.0},
  doi       = {10.5281/zenodo.19286258},
  url       = {https://doi.org/10.5281/zenodo.19286258},
  license   = {Apache-2.0},
}

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

quprep-0.10.0.tar.gz (710.5 kB view details)

Uploaded Source

Built Distribution

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

quprep-0.10.0-py3-none-any.whl (218.9 kB view details)

Uploaded Python 3

File details

Details for the file quprep-0.10.0.tar.gz.

File metadata

  • Download URL: quprep-0.10.0.tar.gz
  • Upload date:
  • Size: 710.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for quprep-0.10.0.tar.gz
Algorithm Hash digest
SHA256 3d543f84deb5b3affbbc9f793461c4d04af247d44d39b95721513478f7fae871
MD5 c9ec66214f5addabf41d019072a68122
BLAKE2b-256 2e5d31ce64df54151120e1e8d68e48c9f5b2796bdc4bc88b039bf846b71a1996

See more details on using hashes here.

Provenance

The following attestation bundles were made for quprep-0.10.0.tar.gz:

Publisher: release.yml on quprep/quprep

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

File details

Details for the file quprep-0.10.0-py3-none-any.whl.

File metadata

  • Download URL: quprep-0.10.0-py3-none-any.whl
  • Upload date:
  • Size: 218.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for quprep-0.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6315b402204d7775381b9d0fc240edb79dec7315792e957980d5348df0c8190e
MD5 f519a039bd4e45971750a825b3dae0eb
BLAKE2b-256 fcfc649bcfe7388f0efd035fb368ab7c1f80ae80dc8d518e5ec85bb95876da28

See more details on using hashes here.

Provenance

The following attestation bundles were made for quprep-0.10.0-py3-none-any.whl:

Publisher: release.yml on quprep/quprep

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