Source code for tidy3d.web.api.asynchronous

"""Interface to run several jobs in batch using simplified syntax."""

from typing import Dict, List

from ...log import log
from .container import DEFAULT_DATA_DIR, Batch, BatchData
from .tidy3d_stub import SimulationType


[docs] def run_async( simulations: Dict[str, SimulationType], folder_name: str = "default", path_dir: str = DEFAULT_DATA_DIR, callback_url: str = None, num_workers: int = None, verbose: bool = True, simulation_type: str = "tidy3d", parent_tasks: Dict[str, List[str]] = None, ) -> BatchData: """Submits a set of Union[:class:`.Simulation`, :class:`.HeatSimulation`, :class:`.EMESimulation`] objects to server, starts running, monitors progress, downloads, and loads results as a :class:`.BatchData` object. .. TODO add example and see also reference. Parameters ---------- simulations : Dict[str, Union[:class:`.Simulation`, :class:`.HeatSimulation`, :class:`.EMESimulation`]] Mapping of task name to simulation. folder_name : str = "default" Name of folder to store each task on web UI. path_dir : str Base directory where data will be downloaded, by default current working directory. callback_url : str = None Http PUT url to receive simulation finish event. The body content is a json file with fields ``{'id', 'status', 'name', 'workUnit', 'solverVersion'}``. num_workers: int = None Number of tasks to submit at once in a batch, if None, will run all at the same time. verbose : bool = True If ``True``, will print progressbars and status, otherwise, will run silently. Returns ------ :class:`BatchData` Contains the Union[:class:`.SimulationData`, :class:`.HeatSimulationData`, :class:`.EMESimulationData`] for each Union[:class:`.Simulation`, :class:`.HeatSimulation`, :class:`.EMESimulation`] in :class:`Batch`. See Also -------- :class:`Job`: Interface for managing the running of a Simulation on server. :class:`Batch` Interface for submitting several :class:`Simulation` objects to sever. """ if simulation_type is None: simulation_type = "tidy3d" # if number of workers not specified, just use the number of simulations if num_workers is not None: log.warning( "The 'num_workers' kwarg does not have an effect anymore as all " "simulations will now be uploaded in a single batch." ) batch = Batch( simulations=simulations, folder_name=folder_name, callback_url=callback_url, verbose=verbose, simulation_type=simulation_type, parent_tasks=parent_tasks, ) batch_data = batch.run(path_dir=path_dir) return batch_data