diff --git a/qiskit/result/result.py b/qiskit/result/result.py index c6c3d67aee58..b9c820f584b5 100644 --- a/qiskit/result/result.py +++ b/qiskit/result/result.py @@ -62,12 +62,9 @@ def __init__( self.job_id = job_id self.success = success self.results = results - if date is not None: - self.date = date - if status is not None: - self.status = status - if header is not None: - self.header = header + self.date = date + self.status = status + self.header = header self._metadata.update(kwargs) def __repr__(self): @@ -83,12 +80,7 @@ def __repr__(self): self.results, ) ) - if hasattr(self, "date"): - out += ", date=%s" % self.date - if hasattr(self, "status"): - out += ", status=%s" % self.status - if hasattr(self, "header"): - out += ", status=%s" % self.header + out += f", date={self.date}, status={self.status}, header={self.header}" for key in self._metadata: if isinstance(self._metadata[key], str): value_str = "'%s'" % self._metadata[key] @@ -107,17 +99,14 @@ def to_dict(self): out_dict = { "backend_name": self.backend_name, "backend_version": self.backend_version, + "date": self.date, + "header": None if self.header is None else self.header.to_dict(), "qobj_id": self.qobj_id, "job_id": self.job_id, + "status": self.status, "success": self.success, "results": [x.to_dict() for x in self.results], } - if hasattr(self, "date"): - out_dict["date"] = self.date - if hasattr(self, "status"): - out_dict["status"] = self.status - if hasattr(self, "header"): - out_dict["header"] = self.header.to_dict() out_dict.update(self._metadata) return out_dict @@ -142,7 +131,7 @@ def from_dict(cls, data): in_data = copy.copy(data) in_data["results"] = [ExperimentResult.from_dict(x) for x in in_data.pop("results")] - if "header" in in_data: + if in_data.get("header") is not None: in_data["header"] = QobjHeader.from_dict(in_data.pop("header")) return cls(**in_data) diff --git a/releasenotes/notes/result-fix-e4eaa021f49b5f99.yaml b/releasenotes/notes/result-fix-e4eaa021f49b5f99.yaml new file mode 100644 index 000000000000..123275116f49 --- /dev/null +++ b/releasenotes/notes/result-fix-e4eaa021f49b5f99.yaml @@ -0,0 +1,9 @@ +--- +upgrade: + - | + :class:`.Result` was modified so that it always contains ``date``, ``status``, + and ``header`` attributes (set to ``None`` if not specified). +fixes: + - | + Fixed a bug in :meth:`.Result.__repr__` that caused the attributes to be + specified incorrectly. diff --git a/test/python/result/test_result.py b/test/python/result/test_result.py index 9749ad252aa6..17d2f8e3dc93 100644 --- a/test/python/result/test_result.py +++ b/test/python/result/test_result.py @@ -121,7 +121,8 @@ def test_result_repr(self): "results=[ExperimentResult(shots=14, success=True, " "meas_level=2, data=ExperimentResultData(counts={'0x0': 4," " '0x2': 10}), header=QobjExperimentHeader(creg_sizes=" - "[['c0', 2], ['c0', 1], ['c1', 1]], memory_slots=4))])" + "[['c0', 2], ['c0', 1], ['c1', 1]], memory_slots=4))], date=None, " + "status=None, header=None)" ) self.assertEqual(expected, repr(result))