unitaryfund / mitiq

Mitiq is an open source toolkit for implementing error mitigation techniques on most current intermediate-scale quantum computers.
https://mitiq.readthedocs.io
GNU General Public License v3.0
358 stars 157 forks source link

ddd.insert_ddd_sequences method causes mismapping of qubits in Qiskit circuit #1397

Closed epelofske-LANL closed 2 years ago

epelofske-LANL commented 2 years ago

Issue Description

ddd.insert_ddd_sequences causes qubit mismapping for specific Qiskit circuits.

Code Snippet

example.qasm.txt

from qiskit import QuantumCircuit
from mitiq import ddd
from mitiq.interface.mitiq_qiskit.conversions import from_qiskit
from mitiq.interface.mitiq_qiskit.conversions import to_qiskit
import matplotlib.pyplot as plt

xx_rule = ddd.rules.xx
qc = QuantumCircuit.from_qasm_file("example.qasm.txt")
qc.draw(output='mpl', filename="circuit1.pdf", fold=100)
plt.close()

qc = from_qiskit(qc)
circuit_with_ddd = ddd.insert_ddd_sequences(qc, rule=xx_rule)
circuit_with_ddd = to_qiskit(circuit_with_ddd)
circuit_with_ddd.draw(output='mpl', filename="circuit2.pdf", fold=100)
plt.close()

Error Output

The bug is that in the original circuit, qubit 7 is used (and measured), while qubit 6 is inactive. While in the resulting circuit having been passed through ddd.insert_ddd_sequences, qubit 7 becomes inactive and qubit 6 is used. This can be seen in the rendered circuit drawings circuit1.pdf and circuit2.pdf generated by executing the above python code.

Environment Context

Mitiq: A Python toolkit for implementing error mitigation on quantum computers
==============================================================================
Authored by: Mitiq team, 2020 & later (https://github.com/unitaryfund/mitiq)

Mitiq Version:  0.17.0

Core Dependencies
-----------------
Cirq Version:   0.14.1
NumPy Version:  1.20.3
SciPy Version:  1.7.3

Optional Dependencies
---------------------
PyQuil Version: 3.0.1
Qiskit Version: 0.36.2
Braket Version: 1.23.2

Python Version: 3.9.7
Platform Info:  Darwin (x86_64)

conda list:

mitiq                     0.17.0                   pypi_0    pypi
pennylane-qiskit          0.18.0                   pypi_0    pypi
qiskit                    0.36.2                   pypi_0    pypi
qiskit-aer                0.10.4                   pypi_0    pypi
qiskit-aqua               0.9.2                    pypi_0    pypi
qiskit-experiments        0.2.0                    pypi_0    pypi
qiskit-ibmq-provider      0.19.1                   pypi_0    pypi
qiskit-ignis              0.7.1                    pypi_0    pypi
qiskit-rigetti            0.4.5                    pypi_0    pypi
qiskit-terra              0.20.2                   pypi_0    pypi
qiskit-textbook           0.1.0                    pypi_0    pypi
cirq                      0.14.1                   pypi_0    pypi
cirq-aqt                  0.14.1                   pypi_0    pypi
cirq-core                 0.14.1                   pypi_0    pypi
cirq-google               0.14.1                   pypi_0    pypi
cirq-ionq                 0.14.1                   pypi_0    pypi
cirq-pasqal               0.14.1                   pypi_0    pypi
cirq-rigetti              0.14.1                   pypi_0    pypi
cirq-web                  0.14.1                   pypi_0    pypi
andreamari commented 2 years ago

Manually using from_qiskit to_qiskit is not the expected usage. The expected usage is directly applying insert_ddd_sequences to qiskit circuits as discussed in #1396 I am closing this issue in favor of the main bug discussed in https://github.com/unitaryfund/mitiq/issues/1396 .