_TypedDict = type.__new__(_TypedDictMeta, 'TypedDict', (), {})
TypedDict.__mro_entries__ = lambda bases: (_TypedDict,)
@_SpecialForm
def Required(self, parameters):
    """Special typing construct to mark a TypedDict key as required.
    This is mainly useful for total=False TypedDicts.
    For example::
        class Movie(TypedDict, total=False):
            title: Required[str]
            year: int
        m = Movie(
            title='The Matrix',  # typechecker error if key is omitted
            year=1999,
        )
    There is no runtime checking that a required key is actually provided
    when instantiating a related TypedDict.
    """
    item = _type_check(parameters, f'{self._name} accepts only a single type.')
    return _GenericAlias(self, (item,))
@_SpecialForm
def NotRequired(self, parameters):
    """Special typing construct to mark a TypedDict key as potentially missing.
    For example::
        class Movie(TypedDict):
            title: str
            year: NotRequired[int]
        m = Movie(
            title='The Matrix',  # typechecker error if key is omitted
            year=1999,
        )
    """
    item = _type_check(parameters, f'{self._name} accepts only a single type.')
    return _GenericAlias(self, (item,))
class NewType:
    """NewType creates simple unique types with almost zero runtime overhead.
    NewType(name, tp) is considered a subtype of tp
    by static type checkers. At runtime, NewType(name, tp) returns
    a dummy callable that simply returns its argument.
    Usage::
        UserId = NewType('UserId', int)