A decorator meant for decorating functions that are decorated with the
    `animate` decorator. It prints a message to stdout before and/or after the
    function has finished.

    .. DANGER::

        This decorator can also be used standalone, but you should NOT decorate a
        function that is decorated with `annotate` with `animate`. That is to say,
        the decorator order must be like this:

        .. code-block:: python

            @annotate
            @animate
            def some_function()
                pass

def annotate(*,
             start_msg: Optional[str] = None,
             end_msg: Optional[str] = None,
             start_no_nl: bool = False) -> types.AnyFunction:
    """A decorator meant for decorating functions that are decorated with the
    `animate` decorator. It prints a message to stdout before and/or after the
    function has finished.

    .. DANGER::

        This decorator can also be used standalone, but you should NOT decorate a
        function that is decorated with `annotate` with `animate`. That is to say,
        the decorator order must be like this:

        .. code-block:: python

            @annotate
            @animate
            def some_function()
                pass
    """
    return core.Annotate(start_msg=start_msg, end_msg=end_msg, start_no_nl=start_no_nl)