Scikit-learn compatible quantum machine learning library powered by PennyLane
Project description
psipose
A scikit-learn-compatible quantum machine learning library powered by PennyLane.
Drop in quantum estimators — classifiers, regressors, and kernels — that follow scikit-learn's API conventions. Use them seamlessly in existing sklearn workflows like Pipeline, GridSearchCV, and cross_val_score.
Note: This project is in early development (v0.1.x alpha). API may change.
Version 0.1.4 introduces a major architectural refactor with new layered structure,
FeatureMapnaming (renamed fromEncoder), and additional modules. See SHIFTING.md for details.
Quick Start
Installation
# With uv (recommended)
uv pip install psipose
# With pip
pip install psipose
Your First Quantum Classifier
from psipose import VQCClassifier
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
# Generate data
X, y = make_moons(n_samples=100, noise=0.1)
X_train, X_test, y_train, y_test = train_test_split(X, y)
# Train quantum classifier
clf = VQCClassifier(n_qubits=2, n_iter=100, random_state=42)
clf.fit(X_train, y_train)
# Evaluate
print(f"Accuracy: {clf.score(X_test, y_test):.2%}")
Quantum Kernel SVM
from psipose import QSVC
from sklearn.datasets import make_circles
X, y = make_circles(n_samples=100, noise=0.1, factor=0.3)
X_train, X_test, y_train, y_test = train_test_split(X, y)
svc = QSVC(n_qubits=2, random_state=42)
svc.fit(X_train, y_train)
print(f"QSVC Accuracy: {svc.score(X_test, y_test):.2%}")
Quantum Regression
from psipose import VQCRegressor
from sklearn.datasets import make_regression
X, y = make_regression(n_samples=100, n_features=2, noise=0.1)
X_train, X_test, y_train, y_test = train_test_split(X, y)
reg = VQCRegressor(n_qubits=2, n_iter=100, random_state=42)
reg.fit(X_train, y_train)
print(f"R^2 score: {reg.score(X_test, y_test):.2%}")
Available Estimators
| Estimator | Type | Description |
|---|---|---|
VQCClassifier |
Classifier | Variational Quantum Classifier with trainable ansatz |
QSVC |
Classifier | Quantum kernel SVM using fidelity-based kernels |
VQCRegressor |
Regressor | Variational Quantum Regressor for continuous outputs |
Architecture
psipose uses composition over inheritance — estimators combine independent, swappable components:
Feature Maps map classical data to quantum states:
AngleFeatureMap(rotation="Y")— one feature per qubit as a rotation angleAmplitudeFeatureMap()— encodes a2**n_qubits-dim vector as a quantum state
Ansatze provide parameterized quantum circuits:
HardwareEfficientAnsatz(n_qubits, layers)— alternating rotation + entanglement layersStronglyEntanglingAnsatz(n_qubits, layers)— PennyLane'sStronglyEntanglingLayers
Measurements define how to extract classical values:
PauliZExpectation()— expectation of Pauli-Z on first qubit (default)ProbabilityMeasurement()— full probability distribution
All components are composable — swap feature maps, ansatze, and measurements independently:
from psipose import VQCClassifier
from psipose.feature_maps import AmplitudeFeatureMap
from psipose.ansatze import StronglyEntanglingAnsatz
clf = VQCClassifier(
feature_map=AmplitudeFeatureMap(),
ansatz=StronglyEntanglingAnsatz(layers=3),
n_qubits=2,
n_iter=200,
)
Advanced: Pure Quantum Models
For research use cases, VariationalModel and QuantumKernel provide pure quantum models without sklearn dependencies:
from psipose import VariationalModel, AngleFeatureMap, StronglyEntanglingAnsatz, PauliZExpectation
model = VariationalModel(
feature_map=AngleFeatureMap(),
ansatz=StronglyEntanglingAnsatz(n_qubits=4, layers=2),
measurement=PauliZExpectation(),
n_iter=100,
)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
Development
Setup
# Install with dev dependencies
uv sync --dev
# Install pre-commit hooks
pre-commit install
Testing & Linting
# Run tests (handles ROS plugin conflicts)
./scripts/test.sh
# Run fast tests only (skip slow)
pytest tests/ -k "not slow"
# Lint and format
uv run ruff check psipose tests
uv run ruff format psipose tests
Project Structure
psipose/
├── psipose/ # Main package
│ ├── __init__.py # Public API exports
│ ├── core/ # Protocols and utilities
│ │ ├── protocols.py # FeatureMap, Ansatz, Measurement protocols
│ │ ├── circuit.py # Circuit composition helpers
│ │ └── device.py # Device management
│ ├── feature_maps/ # Data encoding
│ │ ├── base.py # FeatureMap ABC
│ │ ├── angle.py # AngleFeatureMap
│ │ ├── amplitude.py # AmplitudeFeatureMap
│ │ └── pauli.py # PauliFeatureMap (placeholder)
│ ├── ansatze/ # Parameterized circuits
│ │ ├── base.py # Ansatz ABC
│ │ ├── hardware_efficient.py
│ │ └── strongly_entangling.py
│ ├── measurements/ # Quantum measurements
│ │ ├── base.py # Measurement ABC
│ │ ├── expectation.py # PauliZExpectation, etc.
│ │ └── probability.py # ProbabilityMeasurement
│ ├── models/ # Pure quantum models
│ │ ├── variational.py # VariationalModel
│ │ └── kernel.py # QuantumKernel
│ ├── training/ # Training utilities
│ │ ├── loss.py # Loss functions
│ │ └── optimizer.py # Optimizer adapter
│ ├── estimators/ # Sklearn-facing estimators
│ │ ├── base.py # QuantumEstimator
│ │ ├── classification.py # VQCClassifier, QSVC
│ │ └── regression.py # VQCRegressor
│ ├── preprocessing/ # Sklearn transformers
│ │ ├── angle_scaler.py
│ │ └── amplitude_normalizer.py
│ └── datasets/ # QML datasets
│ ├── bars_and_stripes.py
│ ├── ad_hoc.py
│ └── quantum_moons.py
├── tests/ # Test suite
├── docs/ # Sphinx documentation
├── scripts/ # Development scripts
└── pyproject.toml # Project configuration
Dependencies
- Required:
pennylane>=0.40.0,numpy>=1.21.0,scikit-learn>=1.2.0 - Dev:
pytest,ruff,pre-commit,mypy
License
MIT - see LICENSE for details.
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
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 psipose-0.1.4.tar.gz.
File metadata
- Download URL: psipose-0.1.4.tar.gz
- Upload date:
- Size: 43.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6fe0dbd19d921cd11feb40e21bbbc64c6c0f14ec6d308a4afab4bedba14e970
|
|
| MD5 |
83fd948166f31bb70ad1c205b33ce034
|
|
| BLAKE2b-256 |
23f3f092a767d28b2b40c893ed2841917a27d35b6875a48c9c431b1afe54ab9b
|
Provenance
The following attestation bundles were made for psipose-0.1.4.tar.gz:
Publisher:
release.yml on dduyanhhoang/psipose
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
psipose-0.1.4.tar.gz -
Subject digest:
d6fe0dbd19d921cd11feb40e21bbbc64c6c0f14ec6d308a4afab4bedba14e970 - Sigstore transparency entry: 1436863217
- Sigstore integration time:
-
Permalink:
dduyanhhoang/psipose@b86ca06c192ae8022dd905e74b9d681d1840ba16 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/dduyanhhoang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b86ca06c192ae8022dd905e74b9d681d1840ba16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file psipose-0.1.4-py3-none-any.whl.
File metadata
- Download URL: psipose-0.1.4-py3-none-any.whl
- Upload date:
- Size: 44.9 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 |
4be7a5af49f3af2d561fc07e77183210d6ceb2ec091c0f333f9f0254c6411349
|
|
| MD5 |
4c707ca2365d3350d94751e2deb44cac
|
|
| BLAKE2b-256 |
fce91528c857b715506eba6e0d398319d6d85ea31af4e0d22ded30a0738068e7
|
Provenance
The following attestation bundles were made for psipose-0.1.4-py3-none-any.whl:
Publisher:
release.yml on dduyanhhoang/psipose
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
psipose-0.1.4-py3-none-any.whl -
Subject digest:
4be7a5af49f3af2d561fc07e77183210d6ceb2ec091c0f333f9f0254c6411349 - Sigstore transparency entry: 1436863229
- Sigstore integration time:
-
Permalink:
dduyanhhoang/psipose@b86ca06c192ae8022dd905e74b9d681d1840ba16 -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/dduyanhhoang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b86ca06c192ae8022dd905e74b9d681d1840ba16 -
Trigger Event:
push
-
Statement type: