def apply_unary(f: Callable, A: LinearOperator, alg: Algorithm = Auto()):
    """ Generic apply a unary function :math:`f` to a linear operator :math:`A`.
    That is, :math:`f(A)`, defined through the taylor expansion:
        :math:`f(A) = \\sum_{k=0}^\\infty \\frac{f^{(k)}(0)}{k!}A^k`.

    Args:
        f (Callable): The function to apply.
        A (LinearOperator): The linear operator to compute f(A) with.
        alg (Algorithm): The algorithm to use (Auto, Eig, Eigh, Lanczos, Arnoldi).

    Returns:
        LinearOperator: a lazy instantiation of :math:`f(A)`
    """
 Generic apply a unary function :math:`f` to a linear operator :math:`A`.
    That is, :math:`f(A)`, defined through the taylor expansion:
        :math:`f(A) = \sum_{k=0}^\infty \frac{f^{(k)}(0)}{k!}A^k`.

    Args:
        f (Callable): The function to apply.
        A (LinearOperator): The linear operator to compute f(A) with.
        alg (Algorithm): The algorithm to use (Auto, Eig, Eigh, Lanczos, Arnoldi).

    Returns:
        LinearOperator: a lazy instantiation of :math:`f(A)`
    
cola/linalg/unary/unary.py