import enum from abc import ABC, abstractmethod from dataclasses import dataclass from typing import Iterator from ..common import DeviceKind, Circuit class ResultPriority(enum.Enum): """ The priority of the result. """ LESS_DEVICES = enum.auto() """Less devices is the first priority.""" MORE_ACCURACY = enum.auto() """More accuracy is the first priority.""" @dataclass class ResolverRequest: """ All request infomation for the resolver. """ device_kind: DeviceKind """The kind of device to resolve.""" target_value: float """The target value of the device.""" tolerance: float """The tolerance of the device in absolute value.""" result_priority: ResultPriority """The priority of the result.""" count_limit: int """The limited count of results.""" class Resolver(ABC): """ Abstract base class for all resolvers. """ @abstractmethod def resolve(self, request: ResolverRequest) -> Iterator[Circuit]: pass