def pretty_call_alt(ctx, fn, args=(), kwargs=()):
fndoc = general_identifier(fn)<EOL>if ctx.depth_left <= <NUM_LIT:0>:<EOL><INDENT>return concat([fndoc, LPAREN, ELLIPSIS, RPAREN])<EOL><DEDENT>if not kwargs and len(args) == <NUM_LIT:1>:<EOL><INDENT>sole_arg = args[<NUM_LIT:0>]<EOL>unwrapped_sole_arg, _comment, _trailing_comment = unwrap_comments(args[<NUM_LIT:0>])<EOL>if type(unwrapped_sole_arg) in (list, dict, tuple):<EOL><INDENT>return build_fncall(<EOL>ctx,<EOL>fndoc,<EOL>argdocs=[pretty_python_value(sole_arg, ctx)],<EOL>hug_sole_arg=True,<EOL>)<EOL><DEDENT><DEDENT>nested_ctx = (<EOL>ctx<EOL>.nested_call()<EOL>.use_multiline_strategy(MULTILINE_STRATEGY_HANG)<EOL>)<EOL>if not DICT_KEY_ORDER_SUPPORTED and isinstance(kwargs, dict):<EOL><INDENT>warnings.warn(<EOL>"<STR_LIT>"<EOL>"<STR_LIT>"<EOL>"<STR_LIT>"<EOL>"<STR_LIT>"<EOL>"<STR_LIT>",<EOL>UserWarning<EOL>)<EOL><DEDENT>kwargitems = (<EOL>kwargs.items()<EOL>if isinstance(kwargs, (OrderedDict, dict))<EOL>else kwargs<EOL>)<EOL>return build_fncall(<EOL>ctx,<EOL>fndoc,<EOL>argdocs=(<EOL>pretty_python_value(arg, nested_ctx)<EOL>for arg in args<EOL>),<EOL>kwargdocs=(<EOL>(kwarg, pretty_python_value(v, nested_ctx))<EOL>for kwarg, v in kwargitems<EOL>),<EOL>)<EOL>
Returns a Doc that represents a function call to :keyword:`fn` with
    the ``args`` and ``kwargs``.

    Given an arbitrary context ``ctx``,::

        pretty_call_alt(ctx, sorted, args=([7, 4, 5], ), kwargs=[('reverse', True)])

    Will result in output::

        sorted([7, 4, 5], reverse=True)

    The layout algorithm will automatically break the call to multiple
    lines if needed::

        sorted(
            [7, 4, 5],
            reverse=True
        )

    ``pretty_call_alt`` automatically handles syntax highlighting.

    :param ctx: a context value
    :type ctx: prettyprinter.prettyprinter.PrettyContext
    :param fn: a callable
    :param args: a ``tuple`` of positional arguments to render to the call
    :param kwargs: keyword arguments to render to the call. Either an instance
                   of ``OrderedDict``, or an iterable of two-tuples, where the
                   first element is a `str` (key), and the second is the Python
                   value for that keyword argument.
    :returns: :class:`~prettyprinter.doc.Doc`