circuit_knitting.cutting.expand_observables

expand_observables(observables, original_circuit, final_circuit, /)[source]

Expand observable(s) according to the qubit mapping between original_circuit and final_circuit.

The Qubits on final_circuit must be a superset of those on original_circuit.

Given a PauliList of observables, this function returns new observables with identity operators placed on the qubits that did not exist in original_circuit. This way, observables on original_circuit can be mapped to appropriate observables on final_circuit.

This function is designed to be used after calling final_circuit = transform_cuts_to_moves(original_circuit) (see transform_cuts_to_moves()).

This function requires observables.num_qubits == original_circuit.num_qubits and returns new observables such that retval.num_qubits == final_circuit.num_qubits.

Parameters:
  • observables (PauliList) – Observables corresponding to original_circuit

  • original_circuit (QuantumCircuit) – Original circuit

  • final_circuit (QuantumCircuit) – Final circuit, whose qubits the original observables should be expanded to

Return type:

PauliList

Returns:

New \(N\)-qubit observables which are compatible with the \(N\)-qubit final_circuit

Raises:
  • ValueErrorobservables and original_circuit have different number of qubits.

  • ValueError – Qubit from original_circuit cannot be found in final_circuit.