Qiskit / qiskit

Qiskit is an open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.
https://www.ibm.com/quantum/qiskit
Apache License 2.0
4.84k stars 2.29k forks source link

measure_active returns register called "measure" which breaks round tripping in QASM #12345

Open nonhermitian opened 2 months ago

nonhermitian commented 2 months ago

Environment

What is happening?


qc = qiskit.QuantumCircuit(1)
qc.reset(0)
qc.measure_active()

qc.cregs

[ClassicalRegister(1, 'measure')]


from qiskit.qasm3 import dumps, loads
qstr = dumps(qc)
new_qc = loads(qstr)
new_qc.cregs

[ClassicalRegister(1, 'esc__measure')]

How can we reproduce the issue?

run above

What should happen?

should be able to round trip a circuit

Any suggestions?

Unify the register name of measure_active and measure_all perhaps?

1ucian0 commented 2 months ago

The suggestion seems related to https://github.com/Qiskit/qiskit/issues/12192

jakelishman commented 2 months ago

We can certainly change the default here, but just to be really clear: neither OpenQASM 2 nor OpenQASM 3 will ever be lossless serialisation formats for Qiskit, and to large part, cannot be without severely limiting the Qiskit data model, or requiring us to make huge amount of fragile guesses on re-import. We'll interoperate with them, but export to OpenQASM 3 is very much an export, and there's all sorts of things we have to do to map Qiskit's data model to OpenQASM's and back again. For example, the request in #12014, if it were implemented, could not be roundtripped through OQ because it's a naming conflict.

(The point being: "should be able to [losslessly] roundtrip a circuit" is not something the OQ import/export will ever be able to fully achieve.)

nonhermitian commented 2 months ago

But can we agree on register names not changing at least? Especially since retrieving results now requires knowing the names.

HarizZaman commented 1 month ago

What is the python version and the operating system?

HarizZaman commented 1 month ago

We can certainly change the default here, but just to be really clear: neither OpenQASM 2 nor OpenQASM 3 will ever be lossless serialisation formats for Qiskit, and to large part, cannot be without severely limiting the Qiskit data model, or requiring us to make huge amount of fragile guesses on re-import. We'll interoperate with them, but export to OpenQASM 3 is very much an export, and there's all sorts of things we have to do to map Qiskit's data model to OpenQASM's and back again. For example, the request in #12014, if it were implemented, could not be roundtripped through OQ because it's a naming conflict.

(The point being: "should be able to [losslessly] roundtrip a circuit" is not something the OQ import/export will ever be able to fully achieve.)

I am not sure about the reasons for Open QASM2 and OPEN QASM3 being lossless serialisation formats for qiskit It is difficult to losslessly roundtrip a circuit seems not necessarily plausible