Source code for psipose.encoders._base
"""Base encoder class."""
import abc
import pennylane as qml
[docs]
class BaseEncoder(abc.ABC):
"""Abstract base class for quantum encoders.
Encoders map classical feature vectors onto quantum states.
Parameters
----------
n_qubits : int, optional
Number of qubits to encode into. If None, inferred from feature dimension.
Attributes
----------
n_qubits_ : int
The number of qubits used (determined during fit).
"""
def __init__(self, n_qubits=None):
self.n_qubits = n_qubits
self.n_qubits_ = None
[docs]
@abc.abstractmethod
def encode(self, x, wires):
"""Apply encoding circuit to the given wires.
Parameters
----------
x : array-like
Feature vector to encode.
wires : Iterable[int]
Qubit wires to apply the encoding to.
"""
pass
[docs]
def fit(self, X):
"""Determine the number of qubits needed based on data.
Parameters
----------
X : array-like, shape (n_samples, n_features)
Training data.
Returns
-------
self : BaseEncoder
Returns the fitted encoder.
"""
n_features = X.shape[1]
if self.n_qubits is None:
# Default: one qubit per feature, capped at reasonable size
self.n_qubits_ = min(n_features, 10)
else:
self.n_qubits_ = self.n_qubits
return self