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

* 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 <alejomonbar@gmail.com>
Co-authored-by: Jake Lishman <jake.lishman@ibm.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
This commit is contained in:
Kevin J. Sung 2022-06-21 16:53:29 -04:00 committed by GitHub
parent 71495591d7
commit 992c2619d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 20 deletions

View File

@ -62,12 +62,9 @@ class Result:
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 @@ class Result:
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 @@ class Result:
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 @@ class Result:
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)

View File

@ -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.

View File

@ -121,7 +121,8 @@ class TestResultOperations(QiskitTestCase):
"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))