From 1593eb1a9160cf8440923bcc2a8462c42a5f075e Mon Sep 17 00:00:00 2001 From: Paul Nation Date: Fri, 20 Sep 2024 21:00:06 -0400 Subject: [PATCH] correct for sims --- mthree/_helpers.py | 31 ++++++++++--------------------- mthree/mitigation.py | 5 ++++- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/mthree/_helpers.py b/mthree/_helpers.py index 10d9b89e..9416a1f1 100644 --- a/mthree/_helpers.py +++ b/mthree/_helpers.py @@ -13,7 +13,8 @@ """ Helper functions """ -from qiskit.providers import BackendV1, BackendV2 +from qiskit.providers import BackendV2 +from qiskit_ibm_runtime import IBMBackend from mthree.exceptions import M3Error @@ -28,28 +29,16 @@ def system_info(backend): """ info_dict = {} info_dict["inoperable_qubits"] = [] - if isinstance(backend, BackendV1): - config = backend.configuration() - info_dict["name"] = backend.name() - info_dict["num_qubits"] = config.num_qubits - info_dict["max_shots"] = config.max_shots - info_dict["simulator"] = config.simulator - # A hack for Qiskit/Terra #9572 - if "fake" in info_dict["name"]: - info_dict["simulator"] = True + config = backend.target + info_dict["name"] = backend.name + info_dict["num_qubits"] = config.num_qubits + _max_shots = backend.options.validator.get("shots", (None, None))[1] + info_dict["max_shots"] = _max_shots if _max_shots else int(1e9) + + if isinstance(backend, IBMBackend): + info_dict["simulator"] = False elif isinstance(backend, BackendV2): - info_dict["name"] = backend.name - info_dict["num_qubits"] = backend.num_qubits - _max_shots = backend.options.validator.get("shots", (None, None))[1] - info_dict["max_shots"] = _max_shots if _max_shots else int(1e9) - # Default to simulator is True for safety info_dict["simulator"] = True - # This is a V2 coming from IBM provider - # No other way to tell outside of configuration - # E.g. how to tell that ibmq_qasm_simulator is sim, but real devices not - # outside of configuration? - if hasattr(backend, "configuration"): - info_dict["simulator"] = backend.configuration().simulator else: raise M3Error("Invalid backend passed.") # Look for faulty qubits. Renaming to 'inoperable' here diff --git a/mthree/mitigation.py b/mthree/mitigation.py index e5e55d82..e018c97d 100644 --- a/mthree/mitigation.py +++ b/mthree/mitigation.py @@ -893,7 +893,10 @@ def _job_thread(jobs, mit, qubits, num_cal_qubits, cal_strings): else: counts.append(_counts) # attach timestamp - timestamp = job.metrics()["timestamps"]["running"] + if hasattr(job, 'metrics'): + timestamp = job.metrics()["timestamps"]["running"] + else: + timestamp = None logger.info("All jobs are done.") # Timestamp can be None if timestamp is None: