human
Hereever ``__enter__`` returns given the following:
Complete the below
@decorators.raise_if_nothing_inferred
def with_assigned_stmts(self, node=None, context=None, asspath=None):

    ''''Infer names and other nodes from a *with* statement.
    This enables only inference for name binding in a *with* statement.
    For instance, in the following code, inferring `func` will return
    the `ContextManager` class, not whatever ``__enter__`` returns.
    We are doing this intentionally, because we consider that the context
    manager result is whatever __enter__ returns and what it is binded
    using the ``as`` keyword.
    class ContextManager(object):
    def __enter__(self):
    return 42
    with ContextManager() as f:
    pass
    # ContextManager().infer() will return ContextManager
    # f.infer() will return 42.
    Arguments:
    self: nodes.With
    node: The target of the assignment, `as (a, b)` in `with foo as (a, b)`.
    context: TODO
    asspath: TODO'
    '''
assistant
#Hereever ``__enter__`` returns.
    mgr = next((mgr for (mgr, vars) in self.items if (vars == node)))
    if (asspath is None):
        for result in _infer_context_manager(self, mgr, context):
            (yield result)
    else:
        for result in _infer_context_manager(self, mgr, context):
            obj = result
            for index in asspath:
                if (not hasattr(obj, 'elts')):
                    raise exceptions.InferenceError('Wrong    type    ({targets!r})    for    {node!r}    assignment', node=self, targets=node, assign_path=asspath, context=context)
                try:
                    obj = obj.elts[index]
                except IndexError:
                    util.reraise(exceptions.InferenceError('Tried    to    infer    a    nonexistent    target    with    index    {index}    in    {node!r}.', node=self, targets=node, assign_path=asspath, context=context))
                except TypeError:
                    util.reraise(exceptions.InferenceError('Tried    to    unpack    an    non-iterable    value    in    {node!r}.', node=self, targets=node, assign_path=asspath, context=context))
            (yield obj)
    raise StopIteration(dict(node=self, unknown=node, assign_path=asspath, context=context))