Source code for qbraid.runtime.enums

# Copyright (C) 2024 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 all :mod:`~qbraid.runtime` enumerated types.

"""
from __future__ import annotations

from enum import Enum, IntEnum


[docs] class DeviceStatus(Enum): """Enumeration for representing various operational statuses of devices. Attributes: ONLINE (str): Device is online and accepting jobs. UNAVAILABLE (str): Device is online but not accepting jobs. OFFLINE (str): Device is offline. RETIRED (str): Device has been retired and is no longer operational. """ ONLINE = "online" UNAVAILABLE = "unavailable" OFFLINE = "offline" RETIRED = "retired"
[docs] class JobStatus(Enum): """Enum for the status of processes (i.e. quantum jobs / tasks) resulting from any :meth:`~qbraid.runtime.QuantumDevice.run` method. Displayed status text values may differ from those listed below to provide additional visibility into tracebacks, particularly for failed jobs. """ def __new__(cls, value: str): """Enumeration representing the status of a :py:class:`QuantumJob`.""" obj = object.__new__(cls) obj._value_ = value obj.default_message = cls._get_default_message(value) obj.status_message = None return obj @classmethod def _get_default_message(cls, status: str) -> str: """Get the default message for a given status value.""" default_messages = { "INITIALIZING": "job is being initialized", "QUEUED": "job is queued", "VALIDATING": "job is being validated", "RUNNING": "job is actively running", "CANCELLING": "job is being cancelled", "CANCELLED": "job has been cancelled", "COMPLETED": "job has successfully run", "FAILED": "job failed / incurred error", "UNKNOWN": "job status is unknown/undetermined", "HOLD": "job terminal but results withheld due to account status", } message = default_messages.get(status) if message is None: raise ValueError(f"Invalid status value: {status}") return message def set_status_message(self, message: str) -> None: """Set a custom message for the enum instance.""" self.status_message = message def __repr__(self): """Custom repr to show custom message or default.""" message = self.status_message if self.status_message else self.default_message return f"<{self.name}: '{message}'>" def __call__(self) -> JobStatus: """Create a new instance of the enum member, allowing unique attributes.""" obj = self.__class__(self._value_) obj.default_message = self.default_message return obj @classmethod def terminal_states(cls) -> set[JobStatus]: """Returns the final job statuses.""" return {cls.COMPLETED, cls.CANCELLED, cls.FAILED} INITIALIZING = "INITIALIZING" QUEUED = "QUEUED" VALIDATING = "VALIDATING" RUNNING = "RUNNING" CANCELLING = "CANCELLING" CANCELLED = "CANCELLED" COMPLETED = "COMPLETED" FAILED = "FAILED" UNKNOWN = "UNKNOWN" HOLD = "HOLD"
class ValidationLevel(IntEnum): """Enumeration for program validation levels in qBraid runtime. Attributes: NONE (int): No validation is performed. WARN (int): Validation is performed, and warnings are issued if validation fails. RAISE (int): Validation is performed, and exceptions are raised if validation fails. """ NONE = 0 WARN = 1 RAISE = 2