def zip_apply(*functions: Callable, **kwargs):
    '\n    Returns a function that takes an iterable and zips ``functions`` over it.\n\n    ``kwargs`` are passed to each function as additional arguments.\n\n    Examples\n    --------\n    >>> zipper = zip_apply(np.square, np.sqrt)\n    >>> zipper([4, 9])\n    >>> (16, 3)\n    '

    def wrapped(xs: Sequence, *args, **kwargs_) -> tuple:
        return tuple((func(x, *args, **kwargs_, **kwargs) for (func, x) in zip(functions, xs)))
    return wrapped
Returns a function that takes an iterable and zips ``functions`` over it.

``kwargs`` are passed to each function as additional arguments.

Examples
--------
>>> zipper = zip_apply(np.square, np.sqrt)
>>> zipper([4, 9])
>>> (16, 3)
def zip_apply(*functions: Callable, **kwargs):
    '\n    Returns a function that takes an iterable and zips ``functions`` over it.\n\n    ``kwargs`` are passed to each function as additional arguments.\n\n    Examples\n    --------\n    >>> zipper = zip_apply(np.square, np.sqrt)\n    >>> zipper([4, 9])\n    >>> (16, 3)\n    '

    def wrapped(xs: Sequence, *args, **kwargs_) -> tuple:
        return tuple((func(x, *args, **kwargs_, **kwargs) for (func, x) in zip(functions, xs)))
    return wrapped