from typing import Any, Dict, TypeVar
from vldt._vldt import DataModel as _DataModel
from vldt.config import Config

T = TypeVar("T", bound="DataModel")

class DataModelMeta(type):
    def __new__(mcls, name: str, bases: tuple, namespace: dict) -> type: ...
    def __init__(cls, name: str, bases: tuple, namespace: dict) -> None: ...

class DataModel(_DataModel, metaclass=DataModelMeta):
    __vldt_config__: Config
    __vldt_class_annotations__: dict
    __vldt_instance_annotations__: dict
    __vldt_validators__: dict

    def __init_subclass__(cls, **kwargs: Any) -> None: ...
    def __eq__(self, other: Any) -> bool: ...

class AsyncDataModelMeta(DataModelMeta):
    def __init__(cls, name: str, bases: tuple, namespace: dict) -> None: ...

class AsyncDataModel(DataModel, metaclass=AsyncDataModelMeta):
    def __new__(cls, *args: Any, **kwargs: Any) -> "AsyncDataModel": ...
    def __init__(self, *args: Any, **kwargs: Any) -> None: ...
    async def _run_async_before(self, kwargs: Dict[str, Any]) -> Dict[str, Any]: ...
    async def _run_async_after(self) -> None: ...
    async def _async_init(self) -> "AsyncDataModel": ...
    def __await__(self) -> Any: ...
