from typing import Any, Optional as _Optional

long = int
unicode = str
basestring = str
ifilter = filter

def iteritems(d: Any): ...

PREVENT_EXTRA: int
ALLOW_EXTRA: int
REMOVE_EXTRA: int
primitive_types: Any

class Undefined:
    def __nonzero__(self): ...

UNDEFINED: Any

def Self() -> None: ...
def default_factory(value: Any): ...
def raises(exc: Any, msg: _Optional[Any] = ..., regex: _Optional[Any] = ...) -> None: ...
def Extra(_: Any) -> None: ...
extra = Extra

class Schema:
    schema: Any = ...
    required: Any = ...
    extra: Any = ...
    def __init__(self, schema: Any, required: bool = ..., extra: Any = ...) -> None: ...
    @classmethod
    def infer(cls, data: Any, **kwargs: Any): ...
    def __eq__(self, other: Any) -> Any: ...
    def __ne__(self, other: Any) -> Any: ...
    def __call__(self, data: Any): ...
    def extend(self, schema: Any, required: _Optional[Any] = ..., extra: _Optional[Any] = ...): ...

class Msg:
    schema: Any = ...
    msg: Any = ...
    cls: Any = ...
    def __init__(self, schema: Any, msg: Any, cls: _Optional[Any] = ...) -> None: ...
    def __call__(self, v: Any): ...

class Object(dict):
    cls: Any = ...
    def __init__(self, schema: Any, cls: Any = ...) -> None: ...

class VirtualPathComponent(str): ...

class Marker:
    schema: Any = ...
    msg: Any = ...
    description: Any = ...
    def __init__(self, schema_: Any, msg: _Optional[Any] = ..., description: _Optional[Any] = ...) -> None: ...
    def __call__(self, v: Any): ...
    def __lt__(self, other: Any) -> Any: ...
    def __hash__(self) -> Any: ...
    def __eq__(self, other: Any) -> Any: ...
    def __ne__(self, other: Any) -> Any: ...

class Optional(Marker):
    default: Any = ...
    def __init__(self, schema: Any, msg: _Optional[Any] = ..., default: Any = ..., description: _Optional[Any] = ...) -> None: ...

class Exclusive(Optional):
    group_of_exclusion: Any = ...
    def __init__(self, schema: Any, group_of_exclusion: Any, msg: _Optional[Any] = ..., description: _Optional[Any] = ...) -> None: ...

class Inclusive(Optional):
    group_of_inclusion: Any = ...
    def __init__(self, schema: Any, group_of_inclusion: Any, msg: _Optional[Any] = ..., description: _Optional[Any] = ..., default: Any = ...) -> None: ...

class Required(Marker):
    default: Any = ...
    def __init__(self, schema: Any, msg: _Optional[Any] = ..., default: Any = ..., description: _Optional[Any] = ...) -> None: ...

class Remove(Marker):
    def __call__(self, v: Any): ...
    def __hash__(self) -> Any: ...

def message(default: _Optional[Any] = ..., cls: _Optional[Any] = ...): ...
def validate(*a: Any, **kw: Any): ...
