Skip to content

Commit

Permalink
Edit Result to always contain date, status, header (Qiskit#8216)
Browse files Browse the repository at this point in the history
* date attribute

Date attribute is needed for some specific applications such as mitigation in mthree. It is not created by default when running a job in the basicAer backend.

* Update test_result.py

* Adding default attributes header and status

I have no clue why in the test_results the attribute status is repeated.

* fix Result repr

* add release note

* Qualify method name in release note

* Remove final conditional attribute lookup on Result

Co-authored-by: Alejandro Montanez <[email protected]>
Co-authored-by: Jake Lishman <[email protected]>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
  • Loading branch information
4 people authored Jun 21, 2022
1 parent 7149559 commit 992c261
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 20 deletions.
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

0 comments on commit 992c261

Please sign in to comment.