Source code for qailab.circuit.circuit_builder

 1"""Build parameterized QuantumCircuits from lists of blocks."""
 2from collections.abc import Sequence
 3
 4from qiskit import QuantumCircuit
 5from qiskit.circuit.quantumcircuit import QubitSpecifier
 6
 7from qailab.circuit.measurement import MeasurementBlock
 8from qailab.circuit.base import CircuitBlock
 9
10
[docs] 11def build_circuit( 12 circuit_width: int, 13 blocks: list[CircuitBlock] | None = None, 14 measure_qubits: Sequence[QubitSpecifier] | None = None, 15 # * **kwargs WIP 16) -> QuantumCircuit: 17 """ 18 Builds a parameterized QuantumCircuit. 19 20 Args: 21 circuit_width (int): Number of qubits used for the circuit (not including auxiliary qubits). 22 blocks (list[CircuitBlock] | None, optional): Blocks making up the circuit. Defaults to None. 23 measure_qubits (Sequence[QubitSpecifier] | None, optional): 24 Which qubits to measure. If None, measure all, except auxiliary. Defaults to None. 25 26 Returns: 27 QuantumCircuit: Built circuit 28 """ 29 circuit = QuantumCircuit(circuit_width) 30 31 if blocks is None: 32 blocks = [] 33 34 qargs = list(range(circuit_width)) 35 36 for block in blocks: 37 block.add_to_circuit(circuit, qargs) 38 39 measurement_block = MeasurementBlock() 40 measurement_block.add_to_circuit(circuit, measure_qubits if measure_qubits is not None else qargs) 41 42 return circuit