ai-content-maker/.venv/Lib/site-packages/numba/core/entrypoints.py

59 lines
1.9 KiB
Python

import logging
import warnings
from numba.core.config import PYVERSION
if PYVERSION < (3, 9):
try:
import importlib_metadata
except ImportError as ex:
raise ImportError(
"importlib_metadata backport is required for Python version < 3.9, "
"try:\n"
"$ conda/pip install importlib_metadata"
) from ex
else:
from importlib import metadata as importlib_metadata
_already_initialized = False
logger = logging.getLogger(__name__)
def init_all():
"""Execute all `numba_extensions` entry points with the name `init`
If extensions have already been initialized, this function does nothing.
"""
global _already_initialized
if _already_initialized:
return
# Must put this here to avoid extensions re-triggering initialization
_already_initialized = True
def load_ep(entry_point):
"""Loads a given entry point. Warns and logs on failure.
"""
logger.debug('Loading extension: %s', entry_point)
try:
func = entry_point.load()
func()
except Exception as e:
msg = (f"Numba extension module '{entry_point.module}' "
f"failed to load due to '{type(e).__name__}({str(e)})'.")
warnings.warn(msg, stacklevel=3)
logger.debug('Extension loading failed for: %s', entry_point)
eps = importlib_metadata.entry_points()
# Split, Python 3.10+ and importlib_metadata 3.6+ have the "selectable"
# interface, versions prior to that do not. See "compatibility note" in:
# https://docs.python.org/3.10/library/importlib.metadata.html#entry-points
if hasattr(eps, 'select'):
for entry_point in eps.select(group="numba_extensions", name="init"):
load_ep(entry_point)
else:
for entry_point in eps.get("numba_extensions", ()):
if entry_point.name == "init":
load_ep(entry_point)