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