Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Edit Result to always contain date, status, header #8216

Merged
merged 11 commits into from
Jun 21, 2022
27 changes: 8 additions & 19 deletions qiskit/result/result.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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]
Expand All @@ -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

Expand All @@ -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)

Expand Down
9 changes: 9 additions & 0 deletions releasenotes/notes/result-fix-e4eaa021f49b5f99.yaml
Original file line number Diff line number Diff line change
@@ -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.
3 changes: 2 additions & 1 deletion test/python/result/test_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -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))

Expand Down