def staticmethod_renamed(new_name: str):
    """Issue a warning upon static method call that has been renamed or moved.

    Issues the warning only once.
    """

    warned = False

    def wrapper(func):
        old_name = python_utils.callable_name(func)

        message = f"Static method `{old_name}` has been renamed or moved to `{new_name}`.\n"

        @functools.wraps(func)
        def _renamedmethod(*args, **kwargs):
            nonlocal warned, old_name

            if not warned:
                warnings.warn(message, DeprecationWarning, stacklevel=2)
                warned = True

            return func(*args, **kwargs)

        _renamedmethod.__doc__ = message

        return _renamedmethod

    return wrapper
Issue a warning upon static method call that has been renamed or moved.

    Issues the warning only once.
    
src/core/trulens/core/utils/deprecation.py