from typing import Any, ClassVar

def load_source(name: str, path: str) -> dict[str, Any]: ...

class DataProxy:
    @classmethod
    def from_data(cls, data, root=..., keypath=...): ...
    def __getattr__(self, key: str): ...
    def __setattr__(self, key: str, value) -> None: ...
    def __iter__(self): ...
    def __eq__(self, other): ...
    __hash__: ClassVar[None]  # type: ignore[assignment]
    def __len__(self) -> int: ...
    def __setitem__(self, key, value) -> None: ...
    def __getitem__(self, key): ...
    def __contains__(self, key): ...
    def __delitem__(self, key) -> None: ...
    def __delattr__(self, name: str) -> None: ...
    def clear(self) -> None: ...
    def pop(self, *args): ...
    def popitem(self): ...
    def setdefault(self, *args): ...
    def update(self, *args, **kwargs) -> None: ...

class Config(DataProxy):
    prefix: str
    file_prefix: Any
    env_prefix: Any
    @staticmethod
    def global_defaults(): ...
    def __init__(
        self,
        overrides=...,
        defaults=...,
        system_prefix=...,
        user_prefix=...,
        project_location=...,
        runtime_path=...,
        lazy: bool = ...,
    ) -> None: ...
    def load_base_conf_files(self) -> None: ...
    def load_defaults(self, data, merge: bool = ...) -> None: ...
    def load_overrides(self, data, merge: bool = ...) -> None: ...
    def load_system(self, merge: bool = ...) -> None: ...
    def load_user(self, merge: bool = ...) -> None: ...
    def load_project(self, merge: bool = ...) -> None: ...
    def set_runtime_path(self, path) -> None: ...
    def load_runtime(self, merge: bool = ...) -> None: ...
    def load_shell_env(self) -> None: ...
    def load_collection(self, data, merge: bool = ...) -> None: ...
    def set_project_location(self, path) -> None: ...
    def merge(self) -> None: ...
    def clone(self, into=...): ...

class AmbiguousMergeError(ValueError): ...

def merge_dicts(base, updates): ...
def copy_dict(source): ...
def excise(dict_, keypath) -> None: ...
def obliterate(base, deletions) -> None: ...
