Modular PennyLane-based quantum machine learning suite for classification, regression, and quantum kernel methods.
Project description
Quantum Machine Learning
PyPI: https://pypi.org/project/qml-pennylane/
Web pages: https://SidRichardsQuantum.github.io/Quantum_Machine_Learning/
Modular PennyLane-based quantum machine learning library implementing reusable workflows for:
- Variational quantum classification (VQC)
- Variational quantum regression (VQR)
- Quantum convolutional neural networks (QCNN)
- Quantum autoencoders
- Quantum kernel methods
- Trainable quantum kernels (kernel-target alignment)
- Quantum metric learning (trainable embedding geometry)
- Classical baseline models
- Deterministic benchmark utilities
The repository follows a package-first design:
- algorithms implemented in
qml/ - notebooks act as thin clients
- experiments produce reproducible outputs
- consistent plotting and result structures
- deterministic execution via explicit seeds
Table of Contents
Installation
Clone and install in editable mode:
pip install -e .
Install development tools:
pip install -e ".[dev]"
Requirements:
- Python ≥ 3.10
- PennyLane ≥ 0.34
- NumPy ≥ 1.24
- scikit-learn ≥ 1.3
- matplotlib ≥ 3.7
Quick start
Variational quantum classifier
from qml.classifiers import run_vqc
result = run_vqc(
n_samples=200,
n_layers=2,
steps=50,
plot=True,
)
Variational quantum regression
from qml.regression import run_vqr
result = run_vqr(
n_samples=200,
n_layers=2,
steps=50,
plot=True,
)
Quantum convolutional neural network
from qml.qcnn import run_qcnn
result = run_qcnn(
n_samples=200,
steps=50,
plot=True,
)
Learns a small hierarchical quantum classifier using:
- trainable data embedding across four qubits
- shared convolution-style two-qubit blocks
- pooling-style entangling reductions before final readout
Quantum autoencoder
from qml.autoencoder import run_quantum_autoencoder
result = run_quantum_autoencoder(
n_samples=200,
family="correlated",
steps=50,
plot=True,
)
Learns a compression map for structured four-qubit state families using:
- a trainable encoder/decoder ansatz
- a latent subspace retained across selected qubits
- compression and reconstruction fidelity metrics
Quantum kernel classifier
from qml.kernel_methods import run_quantum_kernel_classifier
result = run_quantum_kernel_classifier(
n_samples=200,
plot=True,
)
Trainable quantum kernel (kernel-target alignment)
from qml.trainable_kernels import run_trainable_quantum_kernel_classifier
result = run_trainable_quantum_kernel_classifier(
n_samples=200,
steps=50,
plot=True,
)
Quantum metric learning
from qml.metric_learning import run_quantum_metric_learner
result = run_quantum_metric_learner(
samples=200,
layers=2,
steps=50,
plot=True,
)
Learns a trainable embedding circuit using contrastive supervision:
- same-class samples mapped closer together
- different-class samples separated in feature space
Classification is performed via nearest-centroid prediction in the learned embedding.
Workflows return structured result objects containing training metrics, predictions, learned parameters, and configuration metadata. Most APIs return dictionaries; the metric-learning workflow returns a typed dataclass.
Noise-aware execution (finite shots)
Quantum circuits can be evaluated either analytically or with finite sampling.
Finite-shot execution uses:
qml.set_shots(qnode, shots)
Example:
result = run_vqc(
n_samples=200,
n_layers=2,
steps=50,
shots=128,
)
Trainable kernel workflows support separate shot settings:
result = run_trainable_quantum_kernel_classifier(
n_samples=200,
shots_train=64,
shots_kernel=256,
)
All workflows remain deterministic when a fixed seed is provided.
Benchmark framework
Benchmark utilities compare quantum and classical models across multiple seeds.
Example:
from qml.benchmarks import compare_classification_models
result = compare_classification_models(
models=[
"vqc",
"qcnn",
"quantum_kernel",
"trainable_quantum_kernel",
"logistic_regression",
"svm_classifier",
],
seeds=[123, 456],
)
Model-specific configuration
Benchmarks accept per-model kwargs:
result = compare_classification_models(
models=[
"vqc",
"qcnn",
"quantum_kernel",
"trainable_quantum_kernel",
],
seeds=[123],
model_kwargs={
"vqc": {"shots": 128},
"quantum_kernel": {"shots": 256},
"trainable_quantum_kernel": {
"shots_train": 64,
"shots_kernel": 256,
},
},
)
Result structure remains consistent across models.
Classical baselines
Included reference models:
- logistic regression
- ridge regression
- support vector machine
- multilayer perceptron
These provide performance context for quantum models.
Command line interface
Run workflows directly:
python -m qml vqc --steps 50 --plot
python -m qml qcnn --steps 50 --plot
python -m qml autoencoder --steps 50 --plot
python -m qml regression --steps 50 --plot
python -m qml kernel --plot
python -m qml trainable-kernel --steps 50 --plot
python -m qml metric-learning --steps 50 --plot
Run benchmarks:
python -m qml benchmark classification \
--models vqc qcnn quantum_kernel svm_classifier logistic_regression \
--seeds 123 456
python -m qml benchmark regression \
--models vqr ridge_regression mlp_regressor \
--seeds 123 456
CLI outputs include:
- training metrics
- test metrics
- final loss
- saved plots (optional)
Results
Reference results are generated from the public APIs used by the notebooks:
python docs/pages/generate_results.py
The generated summary is written to RESULTS.md and included in the GitHub Pages site. These are smoke-scale deterministic outputs, not claims of quantum advantage.
Documentation
Published documentation:
Core documentation:
- THEORY.md — mathematical background
- USAGE.md — API examples
- RESULTS.md — generated deterministic reference outputs
Algorithm notes:
- docs/qml/variational_quantum_classifier.md
- docs/qml/variational_regression.md
- docs/qml/qcnn.md
- docs/qml/autoencoder.md
- docs/qml/quantum_kernels.md
- docs/qml/metric_learning.md
Example notebooks:
- quantum_variational_classifier.ipynb
- quantum_regressor.ipynb
- quantum_convolutional_neural_network.ipynb
- quantum_autoencoder.ipynb
- quantum_kernel_classifier.ipynb
- quantum_metric_learning.ipynb
- classical_vs_quantum_classifier.ipynb
Repository structure
qml/
ansatz.py
parameterised circuit templates
embeddings.py
feature encoding circuits
classifiers.py
variational quantum classification workflows
regression.py
variational quantum regression workflows
qcnn.py
quantum convolutional classifier workflows
autoencoder.py
quantum autoencoder workflows
kernel_methods.py
quantum kernel workflows
trainable_kernels.py
kernel-target alignment optimisation
metric_learning.py
contrastive quantum embedding optimisation
classical_baselines.py
logistic, ridge, svm, mlp
benchmarks.py
multi-seed benchmark utilities
training.py
hybrid optimisation loops
metrics.py
evaluation metrics
losses.py
objective functions
data.py
dataset generation utilities
visualize.py
plotting utilities
io_utils.py
reproducible saving utilities
notebooks/
examples implemented as thin package clients
tests/
smoke tests
deterministic benchmarks
docs/
theory notes and algorithm descriptions
results/
saved experiment outputs (gitignored)
images/
generated plots (gitignored)
Design principles
Package-first architecture
Core implementations live in:
qml.*
Notebooks import public APIs rather than defining circuits inline.
Deterministic workflows
Reproducibility is prioritised:
- explicit random seeds
- deterministic dataset generation
- reproducible optimisation
- consistent JSON outputs
- deterministic finite-shot execution
Minimal abstractions
Shared infrastructure intentionally remains lightweight:
- small set of embeddings
- hardware-efficient ansatz
- simple optimisation loops
- consistent plotting utilities
Current algorithms
Variational quantum classifier
Binary classification using:
- angle embedding
- hardware-efficient ansatz
- cross-entropy loss
Variational quantum regression
Continuous prediction using:
- angle embedding
- expectation-value outputs
- mean squared error
Quantum kernel classifier
Support vector machine using quantum feature maps:
$$ K(x_i, x_j)
|\langle \phi(x_i) | \phi(x_j) \rangle|^2 $$
Trainable quantum kernel
Kernel alignment objective:
$$ \max_\theta ; \frac{ \langle K_\theta, Y \rangle_F }{ |K_\theta|_F |Y|_F } $$
where:
- $K_\theta$ is the quantum kernel matrix
- $Y$ is the label similarity matrix
Quantum metric learning
Supervised embedding optimisation using contrastive loss:
$$ L = y d^2 + (1 - y)\max(0, m - d)^2 $$
where:
- $d$ is distance between learned embeddings
- $y \in {0,1}$ indicates whether samples share a class
- $m$ is a separation margin
The learned embedding is used for classification via nearest-centroid prediction in feature space.
Supports:
- trainable data re-uploading embeddings
- stochastic pair sampling
- deterministic optimisation via fixed seeds
- consistent evaluation pipeline with other models
Development workflow
Run tests:
pytest
Format code:
black .
ruff check .
Run module:
python -m qml
Support development
If this project is useful for research, learning, or experimentation, you can support continued development via GitHub Sponsors:
https://github.com/sponsors/SidRichardsQuantum
Sponsorship supports continued work on open-source implementations of quantum machine learning models, including improvements to documentation, reproducible experiments, benchmark utilities, and example workflows.
Support helps maintain accessible implementations of variational quantum models, quantum kernels, and hybrid quantum–classical learning tools.
Author
Sid Richards
LinkedIn: https://www.linkedin.com/in/sid-richards-21374b30b/
GitHub: https://github.com/SidRichardsQuantum
License
MIT License — see LICENSE
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qml_pennylane-0.1.12.tar.gz.
File metadata
- Download URL: qml_pennylane-0.1.12.tar.gz
- Upload date:
- Size: 44.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ce702d6ddb6c16318426ba5d87cad0e026fa973f78c49468140b11b41cfda78
|
|
| MD5 |
e33ff7cd401c9f326984bdcecb17fe4f
|
|
| BLAKE2b-256 |
07f571955a3856e64cd83dfb8777a5139d6211e1f24c2b3c49d8cfd16e52bd8c
|
Provenance
The following attestation bundles were made for qml_pennylane-0.1.12.tar.gz:
Publisher:
publish.yml on SidRichardsQuantum/Quantum_Machine_Learning
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qml_pennylane-0.1.12.tar.gz -
Subject digest:
7ce702d6ddb6c16318426ba5d87cad0e026fa973f78c49468140b11b41cfda78 - Sigstore transparency entry: 1449404528
- Sigstore integration time:
-
Permalink:
SidRichardsQuantum/Quantum_Machine_Learning@949656534f483285fd4b18220646768eac3d566f -
Branch / Tag:
refs/tags/v0.1.12 - Owner: https://github.com/SidRichardsQuantum
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@949656534f483285fd4b18220646768eac3d566f -
Trigger Event:
push
-
Statement type:
File details
Details for the file qml_pennylane-0.1.12-py3-none-any.whl.
File metadata
- Download URL: qml_pennylane-0.1.12-py3-none-any.whl
- Upload date:
- Size: 47.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e402b2097fcb2883e7d52f759fa788cd6dcbe4d828d76395db914cdfdd8f6b87
|
|
| MD5 |
bd76b4087a6699a862009e001b214311
|
|
| BLAKE2b-256 |
8edc879af7264aa7e3d475d01db57e4b9252c2d25174de69f65a02a7b0dae6eb
|
Provenance
The following attestation bundles were made for qml_pennylane-0.1.12-py3-none-any.whl:
Publisher:
publish.yml on SidRichardsQuantum/Quantum_Machine_Learning
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qml_pennylane-0.1.12-py3-none-any.whl -
Subject digest:
e402b2097fcb2883e7d52f759fa788cd6dcbe4d828d76395db914cdfdd8f6b87 - Sigstore transparency entry: 1449404858
- Sigstore integration time:
-
Permalink:
SidRichardsQuantum/Quantum_Machine_Learning@949656534f483285fd4b18220646768eac3d566f -
Branch / Tag:
refs/tags/v0.1.12 - Owner: https://github.com/SidRichardsQuantum
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@949656534f483285fd4b18220646768eac3d566f -
Trigger Event:
push
-
Statement type: