def packages_dep_warn(
    module: Optional[str] = None, message: Optional[str] = None
):
    """Issue a deprecation warning for a backwards-compatibility modules.

    This is specifically for the trulens_eval -> trulens module renaming and
    reorganization. If `message` is given, that is included first in the
    deprecation warning.
    """

    if module is None:
        module = python_utils.caller_module_name(offset=1)  # skip our own frame

    full_message = (
        f"The `{module}` module is deprecated. "
        f"See {PACKAGES_MIGRATION_LINK} for instructions on migrating to `trulens.*` modules."
    )

    if message is not None:
        # Put the custom message first.
        full_message += message + "\n\n" + full_message

    warnings.warn(
        full_message,
        DeprecationWarning,
        stacklevel=3,
    )
Issue a deprecation warning for a backwards-compatibility modules.

    This is specifically for the trulens_eval -> trulens module renaming and
    reorganization. If `message` is given, that is included first in the
    deprecation warning.
    
src/core/trulens/core/utils/deprecation.py