Skip to content

Commit

Permalink
Make primitives's key serializable (#8796)
Browse files Browse the repository at this point in the history
* serializable key

* refactor (Imamichi-san's suggestion)

* refactoring (Imamichi-san's suggestion)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
  • Loading branch information
ikkoham and mergify[bot] committed Oct 17, 2022
1 parent c950549 commit fca8db6
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions qiskit/primitives/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from __future__ import annotations

from qiskit.circuit import Instruction, ParameterExpression, QuantumCircuit
from qiskit.circuit.bit import Bit
from qiskit.extensions.quantum_initializer.initializer import Initialize
from qiskit.opflow import PauliSumOp
from qiskit.quantum_info import SparsePauliOp, Statevector
Expand Down Expand Up @@ -113,6 +114,16 @@ def final_measurement_mapping(circuit: QuantumCircuit) -> dict[int, int]:
return mapping


def _bits_key(bits: tuple[Bit, ...], circuit: QuantumCircuit) -> tuple:
return tuple(
(
circuit.find_bit(bit).index,
tuple((reg[0].size, reg[0].name, reg[1]) for reg in circuit.find_bit(bit).registers),
)
for bit in bits
)


def _circuit_key(circuit: QuantumCircuit, functional: bool = True) -> tuple:
"""Private key function for QuantumCircuit.
Expand All @@ -130,8 +141,14 @@ def _circuit_key(circuit: QuantumCircuit, functional: bool = True) -> tuple:
circuit.num_qubits,
circuit.num_clbits,
circuit.num_parameters,
tuple(
(d.qubits, d.clbits, d.operation.name, tuple(d.operation.params)) for d in circuit.data
tuple( # circuit.data
(
_bits_key(data.qubits, circuit), # qubits
_bits_key(data.clbits, circuit), # clbits
data.operation.name, # operation.name
tuple(data.operation.params), # operation.params
)
for data in circuit.data
),
None if circuit._op_start_times is None else tuple(circuit._op_start_times),
)
Expand Down

0 comments on commit fca8db6

Please sign in to comment.