Source code for qiskit_experiments.database_service.db_analysis_result_data

# This code is part of Qiskit.
#
# (C) Copyright IBM 2022.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""Dataclass for analysis result data in the database"""
from __future__ import annotations

import copy
import uuid

from dataclasses import dataclass, field
from typing import Any, TYPE_CHECKING
from datetime import datetime

from .constants import ResultQuality
from .device_component import DeviceComponent

if TYPE_CHECKING:
    from typing import Self


[docs] @dataclass class DbAnalysisResultData: """Dataclass for experiment analysis results in the database. .. note:: The documentation does not currently render all the fields of this dataclass. .. note:: This class is named DbAnalysisResultData to avoid confusion with the :class:`~qiskit_experiments.framework.AnalysisResult` class. """ result_id: str | None = field(default_factory=lambda: str(uuid.uuid4())) experiment_id: str | None = None result_type: str | None = None result_data: dict[str, Any] | None = field(default_factory=dict) device_components: list[str | DeviceComponent] | str | DeviceComponent | None = field( default_factory=list ) quality: ResultQuality | None = ResultQuality.UNKNOWN verified: bool | None = False tags: list[str] | None = field(default_factory=list) backend_name: str | None = None creation_datetime: datetime | None = None updated_datetime: datetime | None = None chisq: float | None = None def __json_encode__(self) -> dict[str, Any]: return self.__dict__ @classmethod def __json_decode__(cls, value: dict[str, Any]) -> Self: return cls(**value) def __str__(self): ret = f"Result {self.result_type}" ret += f"\nResult ID: {self.result_id}" ret += f"\nExperiment ID: {self.experiment_id}" ret += f"\nBackend: {self.backend_name}" ret += f"\nQuality: {self.quality}" ret += f"\nVerified: {self.verified}" ret += f"\nDevice components: {self.device_components}" ret += f"\nData: {self.result_data}" if self.chisq: ret += f"\nChi Square: {self.chisq}" if self.tags: ret += f"\nTags: {self.tags}" if self.creation_datetime: ret += f"\nCreated at: {self.creation_datetime}" if self.updated_datetime: ret += f"\nUpdated at: {self.updated_datetime}" return ret
[docs] def copy(self): """Creates a deep copy of the data""" return DbAnalysisResultData( result_id=self.result_id, experiment_id=self.experiment_id, result_type=self.result_type, result_data=copy.deepcopy(self.result_data), device_components=copy.copy(self.device_components), quality=self.quality, verified=self.verified, tags=copy.copy(self.tags), backend_name=self.backend_name, creation_datetime=self.creation_datetime, updated_datetime=self.updated_datetime, chisq=self.chisq, )