Source code for qiskit_experiments.framework.containers.artifact_data

# This code is part of Qiskit.
#
# (C) Copyright IBM 2023.
#
# 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.

"""
Entry for artifact data.
"""

from dataclasses import dataclass, field
from typing import Any, Optional, List
from datetime import datetime
import uuid

from dateutil import tz


[docs] @dataclass class ArtifactData: """A dataclass for non-analysis result payloads in :class:`.ExperimentData` objects. This class can convert results generated by the analysis class into a payload for saving and retrieving to and from the experiments service, which stores this as artifacts. Types of objects that may be converted to artifacts include fitted and raw data, fit status, and any other JSON-based data needed to serialize experiments and experiment data. Attributes: name: The name of the artifact. When saved to the cloud service, this will be the name of the zipfile this artifact object is stored in. data: The artifact payload. artifact_id: Artifact ID. Must be unique inside an :class:`ExperimentData` object. experiment_id: Experiment ID that the artifact is associated with. experiment: The name of the experiment. device_components: The device components of the experiment. created_time: Time when the artifact was created. """ name: str data: Any artifact_id: Optional[str] = field(default_factory=lambda: str(uuid.uuid4())) experiment_id: Optional[str] = None experiment: Optional[str] = None device_components: List = field(default_factory=list) created_time: Optional[datetime] = field(default_factory=lambda: datetime.now(tz.tzlocal())) @property def dtype(self): """Data type of the payload.""" return self.data.__class__.__name__ def __repr__(self): return ( f"ArtifactData(name={self.name}, dtype={self.dtype}, uid={self.artifact_id}, " f"experiment={self.experiment}, device_components={self.device_components})" )