def __calc_result(index:int, agg_info:Dict[Any, Any], result:Result) -> Result: """Get one result of the aggregated result Args: index (int): the index of the result agg_info (Dict[Any, Any]): aggregation information as Dict result (Result): Result of the aggregated QuantumCircuit Raises: Exception: Multiple results are stored in one Result objext Returns: Result: the inital result for the given index """ result_dict = result.to_dict() result_dict_copy = copy.deepcopy(result_dict) qubits_start = agg_info["circuits"][index]["qubits"]["start"] qubits_stop = agg_info["circuits"][index]["qubits"]["stop"] n_qubits = qubits_stop - qubits_start circ_size = agg_info["total_qubits"] reg_mapping = agg_info["circuits"][index]["reg_mapping"] data = result.data()["counts"] counts = {} bit_mask = sum([2**i for i in range(n_qubits)]) for state in data: state_int = int(state, 16) state_int = state_int >> qubits_start state_int = state_int & bit_mask state_hex = hex(state_int) count = data[state] if state_hex in counts: counts[state_hex] += count else: counts[state_hex] = count if len(result_dict["results"]) == 1: result_dict_copy["results"][0]["data"]["counts"] = counts header = result_dict["results"][0]["header"] else: raise Exception("Result length not 1") clbit_labels = __relabel(reg_mapping, header, "clbit_labels") qubit_labels = __relabel(reg_mapping, header, "qubit_labels") creg_sizes = __relabel(reg_mapping, header, "creg_sizes") qreg_sizes = __relabel(reg_mapping, header, "qreg_sizes") result_dict_copy["results"][0]["header"]["clbit_labels"] = clbit_labels result_dict_copy["results"][0]["header"]["creg_sizes"] = creg_sizes result_dict_copy["results"][0]["header"]["memory_slots"] = n_qubits result_dict_copy["results"][0]["header"]["name"] = agg_info["circuits"][index]["name"] if len(qubit_labels) > 0: result_dict_copy["results"][0]["header"]["qubit_labels"] = qubit_labels if len(qreg_sizes) > 0: result_dict_copy["results"][0]["header"]["qreg_sizes"] = qreg_sizes result_dict_copy["results"][0]["header"]["n_qubits"] = n_qubits return Result.from_dict(result_dict_copy)
def test_additional_result_data(self): """Test construction of ExperimentResult with additional data""" target_probs = {"0x0": 0.5, "0x1": 0.5} data = models.ExperimentResultData(probabilities=target_probs) exp_result = models.ExperimentResult(shots=1, success=True, data=data) result = Result(results=[exp_result], **self.base_result_args) result_probs = result.data(0)["probabilities"] self.assertEqual(result_probs, target_probs)
def _add_result_data(self, result: Result): """Add data from qiskit Result object""" num_data = len(result.results) for i in range(num_data): metadata = result.results[i].header.metadata if metadata.get("experiment_type") == self._experiment._type: data = result.data(i) data["metadata"] = metadata if "counts" in data: # Format to Counts object rather than hex dict data["counts"] = result.get_counts(i) self._add_single_data(data)