Source code for tidy3d.web.core.task_info

"""Defines information about a task"""

from __future__ import annotations

from abc import ABC
from datetime import datetime
from enum import Enum
from typing import Optional

import pydantic.v1 as pydantic


class TaskBase(pydantic.BaseModel, ABC):
    """Base configuration for all task objects."""

    class Config:
        """Configuration for TaskBase"""

        arbitrary_types_allowed = True
        """Allow arbitrary types to be used within the model."""


class ChargeType(str, Enum):
    """The payment method of the task."""

    FREE = "free"
    """No payment required."""

    PAID = "paid"
    """Payment required."""


class TaskBlockInfo(TaskBase):
    """Information about the task's block status.

    Notes
    -----
        This includes details about how the task can be blocked by various features
        such as user limits and insufficient balance.
    """

    chargeType: ChargeType = None
    """The type of charge applicable to the task (free or paid)."""

    maxFreeCount: int = None
    """The maximum number of free tasks allowed."""

    maxGridPoints: int = None
    """The maximum number of grid points permitted."""

    maxTimeSteps: int = None
    """The maximum number of time steps allowed."""


[docs] class TaskInfo(TaskBase): """General information about a task.""" taskId: str """Unique identifier for the task.""" taskName: str = None """Name of the task.""" nodeSize: int = None """Size of the node allocated for the task.""" completedAt: Optional[datetime] = None """Timestamp when the task was completed.""" status: str = None """Current status of the task.""" realCost: float = None """Actual cost incurred by the task.""" timeSteps: int = None """Number of time steps involved in the task.""" solverVersion: str = None """Version of the solver used for the task.""" createAt: Optional[datetime] = None """Timestamp when the task was created.""" estCostMin: float = None """Estimated minimum cost for the task.""" estCostMax: float = None """Estimated maximum cost for the task.""" realFlexUnit: float = None """Actual flexible units used by the task.""" oriRealFlexUnit: float = None """Original real flexible units.""" estFlexUnit: float = None """Estimated flexible units for the task.""" estFlexCreditTimeStepping: float = None """Estimated flexible credits for time stepping.""" estFlexCreditPostProcess: float = None """Estimated flexible credits for post-processing.""" estFlexCreditMode: float = None """Estimated flexible credits based on the mode.""" s3Storage: float = None """Amount of S3 storage used by the task.""" startSolverTime: Optional[datetime] = None """Timestamp when the solver started.""" finishSolverTime: Optional[datetime] = None """Timestamp when the solver finished.""" totalSolverTime: int = None """Total time taken by the solver.""" callbackUrl: str = None """Callback URL for task notifications.""" taskType: str = None """Type of the task.""" metadataStatus: str = None """Status of the metadata for the task.""" taskBlockInfo: TaskBlockInfo = None """Blocking information for the task.""" version: str = None """Version of the task."""
class RunInfo(TaskBase): """Information about the run of a task.""" perc_done: pydantic.confloat(ge=0.0, le=100.0) """Percentage of the task that is completed (0 to 100).""" field_decay: pydantic.confloat(ge=0.0, le=1.0) """Field decay from the maximum value (0 to 1).""" def display(self) -> None: """Print some info about the task's progress.""" print(f" - {self.perc_done:.2f} (%) done") print(f" - {self.field_decay:.2e} field decay from max") # ---------------------- Batch (Modeler) detail schema ---------------------- # class BatchTaskBlockInfo(TaskBlockInfo): """ Extends `TaskBlockInfo` with specific details for batch task blocking. Attributes: accountLimit: A usage or cost limit imposed by the user's account. taskBlockMsg: A human-readable message describing the reason for the block. taskBlockType: The specific type of block (e.g., 'balance', 'limit'). blockStatus: The current blocking status for the batch. taskStatus: The status of the task when it was blocked. """ accountLimit: float = None taskBlockMsg: str = None taskBlockType: str = None blockStatus: str = None taskStatus: str = None class BatchMember(TaskBase): """ Represents a single task within a larger batch operation. Attributes: refId: A reference identifier for the member task. folderId: The identifier of the folder containing the task. sweepId: The identifier for the parameter sweep, if applicable. taskId: The unique identifier of the task. linkedTaskId: The identifier of a task linked to this one. groupId: The identifier of the group this task belongs to. taskName: The name of the individual task. status: The current status of this specific task. sweepData: Data associated with a parameter sweep. validateInfo: Information related to the task's validation. replaceData: Data used for replacements or modifications. protocolVersion: The version of the protocol used. variable: The variable parameter for this task in a sweep. createdAt: The timestamp when the member task was created. updatedAt: The timestamp when the member task was last updated. denormalizeStatus: The status of the data denormalization process. summary: A dictionary containing summary information for the task. """ refId: str = None folderId: str = None sweepId: str = None taskId: str = None linkedTaskId: str = None groupId: str = None taskName: str = None status: str = None sweepData: str = None validateInfo: str = None replaceData: str = None protocolVersion: str = None variable: str = None createdAt: Optional[datetime] = None updatedAt: Optional[datetime] = None denormalizeStatus: str = None summary: dict = None class BatchDetail(TaskBase): """Provides a detailed, top-level view of a batch of tasks. Notes ----- This model serves as the main payload for retrieving comprehensive information about a batch operation. Attributes ---------- refId A reference identifier for the entire batch. optimizationId Identifier for the optimization process, if any. groupId Identifier for the group the batch belongs to. name The user-defined name of the batch. status The current status of the batch. totalTask The total number of tasks in the batch. preprocessSuccess The count of tasks that completed preprocessing. postprocessStatus The status of the batch's postprocessing stage. validateSuccess The count of tasks that passed validation. runSuccess The count of tasks that ran successfully. postprocessSuccess The count of tasks that completed postprocessing. taskBlockInfo Information on what might be blocking the batch. estFlexUnit The estimated total flexible compute units for the batch. totalSeconds The total time in seconds the batch has taken. totalCheckMillis Total time in milliseconds spent on checks. message A general message providing information about the batch status. tasks A list of `BatchMember` objects, one for each task in the batch. taskType The type of tasks contained in the batch. """ refId: str = None optimizationId: str = None groupId: str = None name: str = None status: str = None totalTask: int = 0 preprocessSuccess: int = 0 postprocessStatus: str = None validateSuccess: int = 0 runSuccess: int = 0 postprocessSuccess: int = 0 taskBlockInfo: BatchTaskBlockInfo = None estFlexUnit: float = None realFlexUnit: float = None totalSeconds: int = None totalCheckMillis: int = None message: str = None tasks: list[BatchMember] = [] validateErrors: dict = None taskType: str = None version: str = None class AsyncJobDetail(TaskBase): """Provides a detailed view of an asynchronous job and its sub-tasks. Notes ----- This model represents a long-running operation. The 'result' attribute holds the output of a completed job, which for orchestration jobs, is often a JSON string mapping sub-task names to their unique IDs. Attributes ---------- asyncId The unique identifier for the asynchronous job. status The current overall status of the job (e.g., 'RUNNING', 'COMPLETED'). progress The completion percentage of the job (from 0.0 to 100.0). createdAt The timestamp when the job was created. completedAt The timestamp when the job finished (successfully or not). tasks A dictionary mapping logical task keys to their unique task IDs. This is often populated by parsing the 'result' of an orchestration task. result The raw string output of the completed job. If the job spawns other tasks, this is expected to be a JSON string detailing those tasks. taskBlockInfo Information on any dependencies blocking the job from running. message A human-readable message about the job's status. """ asyncId: str status: str progress: Optional[float] = None createdAt: Optional[datetime] = None completedAt: Optional[datetime] = None tasks: Optional[dict[str, str]] = None result: Optional[str] = None taskBlockInfo: Optional[TaskBlockInfo] = None message: Optional[str] = None AsyncJobDetail.update_forward_refs()