from _typeshed import Incomplete
from collections.abc import Callable, ItemsView, Iterable, Iterator, KeysView, ValuesView
from dataclasses import dataclass
from types import TracebackType
from typing_extensions import Self

__all__ = ["Config"]

@dataclass(init=False, eq=False, slots=True, kw_only=True, match_args=False)
class Config:
    def __init_subclass__(cls, strict: bool = True) -> None: ...
    def __new__(cls, **kwargs) -> Self: ...
    def __dir__(self) -> Iterable[str]: ...
    def __setattr__(self, name: str, value) -> None: ...
    def __delattr__(self, name: str) -> None: ...
    def __contains__(self, key: object) -> bool: ...
    def __iter__(self) -> Iterator[str]: ...
    def __len__(self) -> int: ...
    def __reversed__(self) -> Iterator[str]: ...
    def __getitem__(self, key: str): ...
    def __setitem__(self, key: str, value) -> None: ...
    def __delitem__(self, key: str) -> None: ...
    def get(self, key: str, default=None): ...
    def items(self) -> ItemsView[str, Incomplete]: ...
    def keys(self) -> KeysView[str]: ...
    def values(self) -> ValuesView[Incomplete]: ...
    def __reduce__(self) -> tuple[Callable[..., Self], tuple[type[Self], dict[Incomplete, Incomplete]]]: ...
    def __call__(self, **kwargs) -> Self: ...
    def __enter__(self) -> Self: ...
    def __exit__(
        self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None
    ) -> None: ...

class NetworkXConfig(Config):
    backend_priority: list[str]
    backends: Config
    cache_converted_graphs: bool
    fallback_to_nx: bool
    warnings_to_ignore: set[str]
    def __init__(
        self,
        *,
        backend_priority: list[str],
        backends: Config,
        cache_converted_graphs: bool,
        fallback_to_nx: bool,
        warnings_to_ignore: set[str],
    ) -> None: ...
    def __new__(
        cls,
        *,
        backend_priority: list[str],
        backends: Config,
        cache_converted_graphs: bool,
        fallback_to_nx: bool,
        warnings_to_ignore: set[str],
    ) -> Self: ...

config: NetworkXConfig
