Source code for kosmos.ml.models.vqc.encoding.pennylane_encoding

from collections.abc import Sequence

import pennylane
from qiskit import QuantumCircuit
from torch import Tensor

from kosmos.circuit_runner.typing import QuantumCircuitFramework
from kosmos.ml.models.vqc.encoding.encoding import AmplitudeEmbedding, AngleEmbedding


[docs] class PennyLaneAngleEmbedding(AngleEmbedding): """Angle embedding for the VQC using PennyLane.""" @property def framework(self) -> QuantumCircuitFramework: """The framework used for the quantum circuit.""" return "pennylane"
[docs] def apply_operation( self, features: Tensor, wires: Sequence[int], qc: QuantumCircuit | None = None ) -> None: """Apply the PennyLane angle embedding operation for encoding. Args: features (Tensor): Input features. wires (Sequence[int]): Target wires. qc (QuantumCircuit | None): The quantum circuit to use for the encoding (only for 'qiskit' framework). """ super().apply_operation(features, wires, qc) pennylane.AngleEmbedding(features, wires, rotation=self.rotation)
[docs] class PennyLaneAmplitudeEmbedding(AmplitudeEmbedding): """Amplitude embedding for the VQC using PennyLane.""" @property def framework(self) -> QuantumCircuitFramework: """The framework used for the quantum circuit.""" return "pennylane"
[docs] def apply_operation( self, features: Tensor, wires: Sequence[int], qc: QuantumCircuit | None = None ) -> None: """Apply the PennyLane amplitude embedding operation for encoding. Args: features (Tensor): Input features. wires (Sequence[int]): Target wires. qc (QuantumCircuit | None): The quantum circuit to use for the encoding (only for 'qiskit' framework). """ super().apply_operation(features, wires, qc) pennylane.AmplitudeEmbedding( features, wires, pad_with=self.pad_with, normalize=self.normalize )