Source code for qailab.circuit.encoding_blocks.amplitude

 1"""Blocks encoding values as initial state for a quantum circuit"""
 2from typing import Literal
 3from qiskit.circuit import QuantumCircuit, ParameterVector
 4from qiskit_machine_learning.circuit.library import RawFeatureVector
 5
 6from qailab.circuit.base import EncodingBlock, NonGateBlock
 7
 8
[docs] 9class TypedRawFeatureVector(RawFeatureVector): 10 """Extension of RawFeatureVector that renames the parameters.""" 11 12 def __init__(self, feature_dimension: int | None, block_type: Literal['input'] | Literal['weight'] = 'input') -> None: 13 super().__init__(feature_dimension) 14 self._ordered_parameters = ParameterVector(f"{block_type}_Amp_Encoder_Params_{hex(id(super()))}")
15 16
[docs] 17class AmplitudeEncoder(NonGateBlock, EncodingBlock): 18 """ 19 Encode input as initial state of the circuit. 20 """ 21 22 def __init__(self, block_type: Literal['input'] | Literal['weight'] = 'input') -> None: 23 super().__init__("AmplitudeEncoder", block_type) 24 25 def _build_circuit(self, num_qubits: int) -> QuantumCircuit: 26 circuit = TypedRawFeatureVector(2**num_qubits, self.block_type) 27 self._parameters = list(circuit.parameters) 28 return circuit