import warnings def _raise_warning(attr: str, submodule: str = None) -> None: new_module = "numpy._core" old_module = "numpy.core" if submodule is not None: new_module = f"{new_module}.{submodule}" old_module = f"{old_module}.{submodule}" warnings.warn( f"{old_module} is deprecated and has been renamed to {new_module}. " "The numpy._core namespace contains private NumPy internals and its " "use is discouraged, as NumPy internals can change without warning in " "any release. In practice, most real-world usage of numpy.core is to " "access functionality in the public NumPy API. If that is the case, " "use the public NumPy API. If not, you are using NumPy internals. " "If you would still like to access an internal attribute, " f"use {new_module}.{attr}.", DeprecationWarning, stacklevel=3 )