2021-03-08 22:20:23 +01:00
|
|
|
from typing import (
|
|
|
|
Any,
|
|
|
|
Generic,
|
|
|
|
Iterable,
|
2021-04-04 00:03:19 +02:00
|
|
|
Iterator,
|
2021-03-08 22:20:23 +01:00
|
|
|
Mapping,
|
|
|
|
Protocol,
|
2023-02-06 18:29:08 +01:00
|
|
|
Sequence,
|
2021-03-08 22:20:23 +01:00
|
|
|
Union,
|
|
|
|
)
|
|
|
|
|
|
|
|
from .reporters import BaseReporter
|
|
|
|
from .resolvers import RequirementInformation
|
2021-10-19 15:37:55 +02:00
|
|
|
from .structs import CT, KT, RT, Matches
|
2021-03-08 22:20:23 +01:00
|
|
|
|
|
|
|
class Preference(Protocol):
|
|
|
|
def __lt__(self, __other: Any) -> bool: ...
|
|
|
|
|
|
|
|
class AbstractProvider(Generic[RT, CT, KT]):
|
|
|
|
def identify(self, requirement_or_candidate: Union[RT, CT]) -> KT: ...
|
|
|
|
def get_preference(
|
|
|
|
self,
|
2021-04-12 22:13:17 +02:00
|
|
|
identifier: KT,
|
|
|
|
resolutions: Mapping[KT, CT],
|
|
|
|
candidates: Mapping[KT, Iterator[CT]],
|
|
|
|
information: Mapping[KT, Iterator[RequirementInformation[RT, CT]]],
|
2023-02-06 18:29:08 +01:00
|
|
|
backtrack_causes: Sequence[RequirementInformation[RT, CT]],
|
2021-03-08 22:20:23 +01:00
|
|
|
) -> Preference: ...
|
2021-04-04 00:03:19 +02:00
|
|
|
def find_matches(
|
|
|
|
self,
|
|
|
|
identifier: KT,
|
|
|
|
requirements: Mapping[KT, Iterator[RT]],
|
|
|
|
incompatibilities: Mapping[KT, Iterator[CT]],
|
|
|
|
) -> Matches: ...
|
2021-03-08 22:20:23 +01:00
|
|
|
def is_satisfied_by(self, requirement: RT, candidate: CT) -> bool: ...
|
|
|
|
def get_dependencies(self, candidate: CT) -> Iterable[RT]: ...
|
|
|
|
|
|
|
|
class AbstractResolver(Generic[RT, CT, KT]):
|
|
|
|
base_exception = Exception
|
|
|
|
provider: AbstractProvider[RT, CT, KT]
|
|
|
|
reporter: BaseReporter
|
|
|
|
def __init__(
|
|
|
|
self, provider: AbstractProvider[RT, CT, KT], reporter: BaseReporter
|
|
|
|
): ...
|