Skip to content

QAOA circuit dumped to QPY 13 raises an error when loading #14089

@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 QAOA circuit of generated by qaoa_ansatz and dumped to QPY 13 raises an error when loading as follows.
It seems to cause Qiskit/qiskit-ibm-runtime#2193

How can we reproduce the issue?

from io import BytesIO

from qiskit import QuantumCircuit, qpy
from qiskit import __version__ as qiskit_version
from qiskit.circuit import ParameterVector
from qiskit.circuit.library import QAOAAnsatz, qaoa_ansatz
from qiskit.quantum_info import SparsePauliOp


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=}")

op = SparsePauliOp(["ZIZI", "IZIZ", "ZIIZ"])
qaoa = {"QAOAAnsatz": QAOAAnsatz(op, reps=1), "qaoa_ansatz": qaoa_ansatz(op, reps=1)}

for qpy_version in [11, 13]:
    print(f"{qpy_version=}")
    for name, ansatz in qaoa.items():
        print(name)
        x = ParameterVector("γ", 1)
        ansatz = ansatz.assign_parameters({ansatz.parameters[1]: x[0]})
        qc = QuantumCircuit(4)
        qc.append(ansatz, range(4))
        qc2 = qpy_dump_load(qc, qpy_version)
        params = [0] * qc2.num_parameters
        qc2.assign_parameters(params, inplace=True)
        print("OK")
qiskit_version='1.4.2'
qpy_version=11
QAOAAnsatz
OK
qaoa_ansatz
OK
qpy_version=13
QAOAAnsatz
OK
qaoa_ansatz
Traceback (most recent call last):
  File "/Users/ima/tasks/5_2025/scripts/2025/terra/qaoa2.py", line 31, in <module>
    qc2 = qpy_dump_load(qc, qpy_version)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ima/tasks/5_2025/scripts/2025/terra/qaoa2.py", line 14, 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 559, in _read_parameter_expression_v13
    return _read_parameter_expr_v13(buf, symbol_map, version, vectors)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/qpy/binary_io/value.py", line 642, in _read_parameter_expr_v13
    stack.append(getattr(lhs, method_str)(rhs))
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/circuit/parameterexpression.py", line 264, in subs
    self._raise_if_passed_unknown_parameters(parameter_map.keys())
  File "/Users/ima/envs/qiskit/lib/python3.12/site-packages/qiskit/circuit/parameterexpression.py", line 300, in _raise_if_passed_unknown_parameters
    raise CircuitError(
qiskit.circuit.exceptions.CircuitError: "Cannot bind Parameters (['γ[0]']) not present in expression."

What should happen?

No error as same as QPY 11

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