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.

    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. 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 = "RF" version: str = None class AsyncJobDetail(TaskBase): """ Provides a detailed view of an asynchronous job and its sub-tasks. 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()