Qiskit / qiskit-addon-cutting

Reduce width and depth of quantum circuits by cutting gates and wires.
https://qiskit.github.io/qiskit-addon-cutting/
Apache License 2.0
79 stars 28 forks source link

Workflow fails on empty circuit #218

Closed garrison closed 1 year ago

garrison commented 1 year ago

I'd expect this to work, and it does if I make qc prepare a Bell state, but it doesn't if I leave qc empty.

from qiskit import QuantumCircuit
from qiskit.quantum_info import PauliList
from qiskit_aer.primitives import Sampler
from circuit_knitting_toolbox.circuit_cutting import partition_problem, execute_experiments

qc = QuantumCircuit(2)
subcircuits, _, subobservables = partition_problem(
    circuit=qc, partition_labels="AB", observables=PauliList(["XX"])
)
execute_experiments(
    subcircuits,
    subobservables,
    num_samples=10,
    samplers=Sampler(),
)
ValueError: The keys for the circuits and observables dicts should be equivalent.
garrison commented 1 year ago

The problem (as can be reasonably expected) is that subcircuits.keys() is empty after it is returned from partition_problem.

garrison commented 1 year ago

The "bug" is really in separate_circuit. It returns something with a qubit_map that contains both A and B, but the subcircuits contain only the subcircuits that actually contain any gates. (You can experiment with this by adding a single CNOT to the above circuit, on either the first or second qubit.)