from dataclasses import dataclass from typing import Protocol from modules.task import QTask from modules.utils.types import A, C, Q, V from modules.variant_builder.task_pool import QTaskPool @dataclass class QTaskSelector(Protocol[C, V, Q, A]): task_pool: QTaskPool[C, V, Q, A] def select(self, filtered_task_pool_indexes: list[int]) -> QTask[C, V, Q, A]: ...