Source code for qbraid.providers.result

# Copyright (C) 2023 qBraid
#
# This file is part of the qBraid-SDK
#
# The qBraid-SDK is free software released under the GNU General Public License v3
# or later. You can redistribute and/or modify it under the terms of the GPL v3.
# See the LICENSE file in the project root or <https://www.gnu.org/licenses/gpl-3.0.html>.
#
# THERE IS NO WARRANTY for the qBraid-SDK, as per Section 15 of the GPL v3.

"""
Module defining abstract QuantumJobResult Class

"""
from abc import ABC, abstractmethod


[docs] class QuantumJobResult(ABC): """Abstract interface for result-like classes. Args: _result: A result-like object """
[docs] def __init__(self, _result): self._result = _result
@abstractmethod def measurements(self): """Return measurements as list""" @abstractmethod def raw_counts(self): """Returns raw histogram data of the run""" @staticmethod def format_counts(counts: dict, include_zero_values: bool = False) -> dict: """Formats, sorts, and adds missing bit indices to counts dictionary Can pass in a 'include_zero_values' parameter to decide whether to include the states with zero counts. For example: .. code-block:: python >>> counts {'1 1': 13, '0 0': 46, '1 0': 79} >>> QuantumJobResult.format_counts(counts) {'00': 46, '10': 79, '11': 13} >>> QuantumJobResult.format_counts(counts, include_zero_values=True) {'00': 46, '01': 0, '10': 79, '11': 13} """ counts = {key.replace(" ", ""): value for key, value in counts.items()} num_bits = max(len(key) for key in counts) all_keys = [format(i, f"0{num_bits}b") for i in range(2**num_bits)] final_counts = {key: counts.get(key, 0) for key in sorted(all_keys)} if not include_zero_values: final_counts = {key: value for key, value in final_counts.items() if value != 0} return final_counts def measurement_counts(self, include_zero_values: bool = False) -> dict: """Returns the sorted histogram data of the run""" raw_counts = self.raw_counts() if isinstance(raw_counts, dict): return self.format_counts(raw_counts, include_zero_values=include_zero_values) return [ self.format_counts(counts, include_zero_values=include_zero_values) for counts in raw_counts ]