circuit_knitting.cutting.cutqc.generate_summation_terms

generate_summation_terms(subcircuits, complete_path_map, num_cuts)[source]

Generate all summation terms for the final reconstructions.

Final CutQC reconstruction result = Sum(summation_terms).

summation_terms (list): [summation_term_0, summation_term_1, …] –> 4^#cuts elements.

summation_term[subcircuit_idx] = subcircuit_entry_idx.
E.g. summation_term = {0:0,1:13,2:7} = Kron(subcircuit_0_entry_0, subcircuit_1_entry_13, subcircuit_2_entry_7).
subcircuit_entries[subcircuit_idx][init_label,meas_label] = subcircuit_entry_idx, kronecker_term.
kronecker_term (list): (coefficient, subcircuit_instance_idx).
Add coefficient*subcircuit_instance to subcircuit_entry.

subcircuit_instances[subcircuit_idx][init,meas] = subcircuit_instance_idx.

Deprecated since version 0.7.0: The function circuit_knitting.cutting.cutqc.wire_cutting_post_processing.generate_summation_terms() is deprecated as of circuit-knitting-toolbox 0.7.0. It will be removed no sooner than CKT v0.8.0. Use the wire cutting or automated cut-finding functionality in the circuit_knitting.cutting package.

Parameters:
  • subcircuits (Sequence[QuantumCircuit]) – The list of subcircuits

  • complete_path_map (dict[Qubit, Sequence[dict[str, int | Qubit]]]) – The paths of all the qubits through the circuit DAGs

  • num_cuts (int) – The number of cuts

Return type:

tuple[list[dict[int, int]], dict[int, dict[tuple[str, str], tuple[int, Sequence[tuple[int, int]]]]], dict[int, dict[tuple[tuple[str, …], tuple[Any, …]], int]]]

Returns:

A tuple containing a summation term dict, a subcircuit entry dict, and a subcircuit instances dict