From ada56a3b6c185ce3cab383e47b89759eb2347080 Mon Sep 17 00:00:00 2001 From: Toshinari Itoko <15028342+itoko@users.noreply.github.com> Date: Fri, 25 Aug 2023 13:58:39 +0900 Subject: [PATCH] Fix noise model construction for a backend with no T2 value for a qubit (#1912) * Fix a bug failing to create device gate errors when t2==None while t1!=None for a qubit. * Add reno --------- Co-authored-by: Jun Doi --- qiskit_aer/noise/device/models.py | 4 +++- ...-none-t2-handling-in-noise-model-5b712adf3569eccd.yaml | 8 ++++++++ test/terra/noise/test_device_models.py | 7 +++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/fix-none-t2-handling-in-noise-model-5b712adf3569eccd.yaml diff --git a/qiskit_aer/noise/device/models.py b/qiskit_aer/noise/device/models.py index 528a9ffa1c..4be3bf7283 100644 --- a/qiskit_aer/noise/device/models.py +++ b/qiskit_aer/noise/device/models.py @@ -360,8 +360,10 @@ def _device_thermal_relaxation_error( def _truncate_t2_value(t1, t2): """Return t2 value truncated to 2 * t1 (for t2 > 2 * t1)""" - if t1 is None or t2 is None: + if t1 is None: return t2 + elif t2 is None: + return 2 * t1 return min(t2, 2 * t1) diff --git a/releasenotes/notes/fix-none-t2-handling-in-noise-model-5b712adf3569eccd.yaml b/releasenotes/notes/fix-none-t2-handling-in-noise-model-5b712adf3569eccd.yaml new file mode 100644 index 0000000000..52fc63e2ec --- /dev/null +++ b/releasenotes/notes/fix-none-t2-handling-in-noise-model-5b712adf3569eccd.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + Fixed a bug where :meth:`~.NoiseModel.from_backend` raises an error when + a backend reports no T2 value (while it reports T1 value) for a qubit, + which was an oversight in the previous fix on None handling: + `#1818 `__. + Fixed `#1896 `__. diff --git a/test/terra/noise/test_device_models.py b/test/terra/noise/test_device_models.py index 5098ab2794..c31b6090e7 100644 --- a/test/terra/noise/test_device_models.py +++ b/test/terra/noise/test_device_models.py @@ -63,3 +63,10 @@ def test_basic_device_gate_errors_from_target_and_properties(self): self.assertEqual(name1, name2) self.assertEqual(tuple(qargs1), qargs2) self.assertEqual(err1, err2) + + def test_basic_device_gate_errors_from_target_with_no_t2_value(self): + """Test if gate errors are successfully created from a target with qubits not reporting T2. + See https://github.com/Qiskit/qiskit-aer/issues/1896 for the details.""" + target = FakeNairobiV2().target + target.qubit_properties[0].t2 = None + basic_device_gate_errors(target=target)