Skip to content

ZZFeatureMap dumped to QPY 13 raises an error when loading #14088

@t-imamichi

Description

@t-imamichi

Environment

  • Qiskit version: 1.4.2, 2.0.0rc2
  • Python version: 3.12.9
  • Operating system: macOS 15.3.2

What is happening?

A circuit of ZZFeatureMap dumped to QPY 13 raises an error when loading as follows.

This issue seems to cause Qiskit/qiskit-ibm-runtime#2183

How can we reproduce the issue?

from io import BytesIO

from qiskit import __version__ as qiskit_version
from qiskit import qpy
from qiskit.circuit.library import ZZFeatureMap, zz_feature_map


def qpy_dump_load(qc, version):
    with BytesIO() as obj:
        qpy.dump(qc, obj, version=version)
        obj.seek(0)
        qc = qpy.load(obj)[0]
    return qc


print(f"{qiskit_version=}")
num_qubits = 2

for qpy_version in [11, 13]:
    print(f"{qpy_version=}")
    print("zz_feature_map")
    qc = zz_feature_map(num_qubits, reps=1)
    qc = qpy_dump_load(qc, qpy_version)
    params = [0] * qc.num_parameters
    qc.assign_parameters(params, inplace=True)
    print("OK")

    print("ZZFeatureMap")
    qc = ZZFeatureMap(num_qubits, reps=1)
    qc = qpy_dump_load(qc, qpy_version)
    params = [0] * qc.num_parameters
    qc.assign_parameters(params, inplace=True)
    print("OK")
qiskit_version='1.4.2'
qpy_version=11
zz_feature_map
OK
ZZFeatureMap
OK
qpy_version=13
zz_feature_map
OK
ZZFeatureMap
Traceback (most recent call last):
  File "/Users/ima/tasks/5_2025/scripts/2025/terra/zzfeat2.py", line 30, in <module>
    qc = qpy_dump_load(qc, qpy_version)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ima/tasks/5_2025/scripts/2025/terra/zzfeat2.py", line 12, in qpy_dump_load
    qc = qpy.load(obj)[0]
         ^^^^^^^^^^^^^
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/qpy/interface.py", line 383, in load
    loader(
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/qpy/binary_io/circuits.py", line 1449, in read_circuit
    custom_operations = _read_custom_operations(file_obj, version, vectors)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/qpy/binary_io/circuits.py", line 617, in _read_custom_operations
    definition_circuit = common.data_from_binary(
                         ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/qpy/common.py", line 267, in data_from_binary
    obj = deserializer(container, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/qpy/binary_io/circuits.py", line 1451, in read_circuit
    _read_instruction(
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/qpy/binary_io/circuits.py", line 297, in _read_instruction
    param = _loads_instruction_parameter(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/qpy/binary_io/circuits.py", line 201, in _loads_instruction_parameter
    param = value.loads_value(
            ^^^^^^^^^^^^^^^^^^
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/qpy/binary_io/value.py", line 988, in loads_value
    return common.data_from_binary(
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/qpy/common.py", line 267, in data_from_binary
    obj = deserializer(container, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/qpy/binary_io/value.py", line 531, in _read_parameter_expression_v13
    symbol = _read_parameter_vec(file_obj, vectors)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/qpy/binary_io/value.py", line 416, in _read_parameter_vec
    if vector[data.index].uuid != param_uuid:
       ~~~~~~^^^^^^^^^^^^
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/circuit/parametervector.py", line 98, in __getitem__
    return self.params[key]
           ~~~~~~~~~~~^^^^^
IndexError: list index out of range

What should happen?

No error with QPY 13

Any suggestions?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingmod: qpyRelated to QPY serialization

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions