--- /dev/null
+import sys
+from _typeshed import Self
+from typing import Any, Iterator, Sequence, Text, Type
+
+if sys.version_info >= (3, 0):
+ from configparser import ConfigParser
+else:
+ from ConfigParser import ConfigParser
+
+if sys.version_info >= (3, 8):
+ from re import Pattern
+else:
+ from typing import Pattern
+
+entry_point_pattern: Pattern[Text]
+file_in_zip_pattern: Pattern[Text]
+
+class BadEntryPoint(Exception):
+ epstr: Text
+ def __init__(self, epstr: Text) -> None: ...
+ @staticmethod
+ def err_to_warnings() -> Iterator[None]: ...
+
+class NoSuchEntryPoint(Exception):
+ group: Text
+ name: Text
+ def __init__(self, group: Text, name: Text) -> None: ...
+
+class EntryPoint:
+ name: Text
+ module_name: Text
+ object_name: Text
+ extras: Sequence[Text] | None
+ distro: Distribution | None
+ def __init__(
+ self,
+ name: Text,
+ module_name: Text,
+ object_name: Text,
+ extras: Sequence[Text] | None = ...,
+ distro: Distribution | None = ...,
+ ) -> None: ...
+ def load(self) -> Any: ...
+ @classmethod
+ def from_string(cls: Type[Self], epstr: Text, name: Text, distro: Distribution | None = ...) -> Self: ...
+
+class Distribution:
+ name: Text
+ version: Text
+ def __init__(self, name: Text, version: Text) -> None: ...
+
+def iter_files_distros(
+ path: Sequence[Text] | None = ..., repeated_distro: Text = ...
+) -> Iterator[tuple[ConfigParser, Distribution | None]]: ...
+def get_single(group: Text, name: Text, path: Sequence[Text] | None = ...) -> EntryPoint: ...
+def get_group_named(group: Text, path: Sequence[Text] | None = ...) -> dict[str, EntryPoint]: ...
+def get_group_all(group: Text, path: Sequence[Text] | None = ...) -> list[EntryPoint]: ...