def type_from_value(value: Value, visitor: Optional['NameCheckVisitor']=None, node: Optional[ast.AST]=None, ctx: Optional[Context]=None, is_typeddict: bool=False) -> Value:
    'Given a :class:`Value <pyanalyze.value.Value` representing an annotation,\n    return a :class:`Value <pyanalyze.value.Value>` representing the type.\n\n    The input value represents an expression, the output value represents\n    a type. For example, the :term:`impl` of ``typing.cast(typ, val)``\n    calls :func:`type_from_value` on the value it receives for its\n    `typ` argument and returns the result.\n\n    :param value: :class:`Value <pyanalyze.value.Value` to evaluate.\n\n    :param visitor: Visitor class to use. This is used in the default\n                    :class:`Context` to resolve names and show errors.\n                    This is ignored if `ctx` is given.\n\n    :param node: AST node that the annotation derives from. This is\n                 used for showing errors. Ignored if `ctx` is given.\n\n    :param ctx: :class:`Context` to use for evaluation.\n\n    :param is_typeddict: Whether we are at the top level of a `TypedDict`\n                         definition.\n\n    '
    if (ctx is None):
        ctx = _DefaultContext(visitor, node)
    return _type_from_value(value, ctx, is_typeddict=is_typeddict)
Given a :class:`Value <pyanalyze.value.Value` representing an annotation,
return a :class:`Value <pyanalyze.value.Value>` representing the type.

The input value represents an expression, the output value represents
a type. For example, the :term:`impl` of ``typing.cast(typ, val)``
calls :func:`type_from_value` on the value it receives for its
`typ` argument and returns the result.

:param value: :class:`Value <pyanalyze.value.Value` to evaluate.

:param visitor: Visitor class to use. This is used in the default
                :class:`Context` to resolve names and show errors.
                This is ignored if `ctx` is given.

:param node: AST node that the annotation derives from. This is
             used for showing errors. Ignored if `ctx` is given.

:param ctx: :class:`Context` to use for evaluation.

:param is_typeddict: Whether we are at the top level of a `TypedDict`
                     definition.
def type_from_value(value: Value, visitor: Optional['NameCheckVisitor']=None, node: Optional[ast.AST]=None, ctx: Optional[Context]=None, is_typeddict: bool=False) -> Value:
    'Given a :class:`Value <pyanalyze.value.Value` representing an annotation,\n    return a :class:`Value <pyanalyze.value.Value>` representing the type.\n\n    The input value represents an expression, the output value represents\n    a type. For example, the :term:`impl` of ``typing.cast(typ, val)``\n    calls :func:`type_from_value` on the value it receives for its\n    `typ` argument and returns the result.\n\n    :param value: :class:`Value <pyanalyze.value.Value` to evaluate.\n\n    :param visitor: Visitor class to use. This is used in the default\n                    :class:`Context` to resolve names and show errors.\n                    This is ignored if `ctx` is given.\n\n    :param node: AST node that the annotation derives from. This is\n                 used for showing errors. Ignored if `ctx` is given.\n\n    :param ctx: :class:`Context` to use for evaluation.\n\n    :param is_typeddict: Whether we are at the top level of a `TypedDict`\n                         definition.\n\n    '
    if (ctx is None):
        ctx = _DefaultContext(visitor, node)
    return _type_from_value(value, ctx, is_typeddict=is_typeddict)