Source code for tidy3d.web.core.task_info
"""Defines information about a task"""
from abc import ABC
from datetime import datetime
from enum import Enum
from typing import Optional
import pydantic.v1 as pydantic
[docs]
class TaskStatus(Enum):
"""The statuses that the task can be in."""
INIT = "initialized"
"""The task has been initialized."""
QUEUE = "queued"
"""The task is in the queue."""
PRE = "preprocessing"
"""The task is in the preprocessing stage."""
RUN = "running"
"""The task is running."""
POST = "postprocessing"
"""The task is in the postprocessing stage."""
SUCCESS = "success"
"""The task has completed successfully."""
ERROR = "error"
"""The task has completed with an error."""
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."""
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):
"""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")