import dataclasses
from typing import TypeVar

T = TypeVar('T')

AnnotationType = dict[str, type[T]]
AnnotationReplType = dict[str, str]

def get_resolved_annotations(obj) -> AnnotationType: ...
# noinspection PyPep8Naming
class property_wizard(type): ...
def process_public_property(
    cls: type, public_f: str, val: property, annotations: AnnotationType,
    annotation_repls: AnnotationReplType): ...
def process_underscored_property(
    cls: type, under_f: str, val: property,
    annotations: AnnotationType, annotation_repls: AnnotationReplType): ...
def process_field(
    cls: type, cls_annotations: AnnotationType, field: str,
    field_val: dataclasses.Field) -> tuple[dataclasses.Field, bool]: ...
def default_from_annotation(
    cls: type, cls_annotations: AnnotationType,
    field: str) -> dataclasses.Field: ...
def default_from_type(default_type: type[T] | None) -> dataclasses.Field: ...
def default_from_generic_type(
    cls: type, default_type: type[T] | None,
    field: str = ...) -> dataclasses.Field: ...
def default_from_typing_args(args: tuple[type[T], ...] | None): ...
def wrapper(fset, fval: dataclasses.Field): ...
