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")