from abc import (
ABC,
abstractmethod,
)
from collections.abc import (
Sequence,
)
from typing import (
Dict,
List,
Tuple,
)
from .task import (
ExplorationTask,
)
[docs]
class BaseExplorationTaskGroup(Sequence):
"""A group of exploration tasks. Implemented as a `list` of `ExplorationTask`."""
def __init__(self):
super().__init__()
self.clear()
def __getitem__(self, ii: int) -> ExplorationTask:
"""Get the `ii`th task"""
return self.task_list[ii]
def __len__(self) -> int:
"""Get the number of tasks in the group"""
return len(self.task_list)
[docs]
def clear(self) -> None:
self._task_list = []
@property
def task_list(self) -> List[ExplorationTask]:
"""Get the `list` of `ExplorationTask`"""
return self._task_list
[docs]
def add_task(self, task: ExplorationTask):
"""Add one task to the group."""
self.task_list.append(task)
return self
[docs]
def add_group(
self,
group: "ExplorationTaskGroup",
):
"""Add another group to the group."""
# see https://www.python.org/dev/peps/pep-0484/#forward-references for forward references
self._task_list = self._task_list + group._task_list
return self
def __add__(
self,
group: "ExplorationTaskGroup",
):
"""Add another group to the group."""
return self.add_group(group)
[docs]
class ExplorationTaskGroup(ABC, BaseExplorationTaskGroup):
def __init__(self):
super().__init__()
[docs]
@abstractmethod
def make_task(self) -> "ExplorationTaskGroup":
"""Make the task group."""
pass
if __name__ == "__main__":
grp = FooTaskGroup(3)
for ii in grp:
fcs = ii.files()
print(fcs)