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