| """Configure global settings and get information about the working environment.""" | |
| # Authors: The scikit-learn developers | |
| # SPDX-License-Identifier: BSD-3-Clause | |
| # Machine learning module for Python | |
| # ================================== | |
| # | |
| # sklearn is a Python module integrating classical machine | |
| # learning algorithms in the tightly-knit world of scientific Python | |
| # packages (numpy, scipy, matplotlib). | |
| # | |
| # It aims to provide simple and efficient solutions to learning problems | |
| # that are accessible to everybody and reusable in various contexts: | |
| # machine-learning as a versatile tool for science and engineering. | |
| # | |
| # See https://scikit-learn.org for complete documentation. | |
| import importlib as _importlib | |
| import logging | |
| import os | |
| import random | |
| from ._config import config_context, get_config, set_config | |
| logger = logging.getLogger(__name__) | |
| # PEP0440 compatible formatted version, see: | |
| # https://www.python.org/dev/peps/pep-0440/ | |
| # | |
| # Generic release markers: | |
| # X.Y.0 # For first release after an increment in Y | |
| # X.Y.Z # For bugfix releases | |
| # | |
| # Admissible pre-release markers: | |
| # X.Y.ZaN # Alpha release | |
| # X.Y.ZbN # Beta release | |
| # X.Y.ZrcN # Release Candidate | |
| # X.Y.Z # Final release | |
| # | |
| # Dev branch marker is: 'X.Y.dev' or 'X.Y.devN' where N is an integer. | |
| # 'X.Y.dev0' is the canonical version of 'X.Y.dev' | |
| # | |
| __version__ = "1.6.1" | |
| # On OSX, we can get a runtime error due to multiple OpenMP libraries loaded | |
| # simultaneously. This can happen for instance when calling BLAS inside a | |
| # prange. Setting the following environment variable allows multiple OpenMP | |
| # libraries to be loaded. It should not degrade performances since we manually | |
| # take care of potential over-subcription performance issues, in sections of | |
| # the code where nested OpenMP loops can happen, by dynamically reconfiguring | |
| # the inner OpenMP runtime to temporarily disable it while under the scope of | |
| # the outer OpenMP parallel section. | |
| os.environ.setdefault("KMP_DUPLICATE_LIB_OK", "True") | |
| # Workaround issue discovered in intel-openmp 2019.5: | |
| # https://github.com/ContinuumIO/anaconda-issues/issues/11294 | |
| os.environ.setdefault("KMP_INIT_AT_FORK", "FALSE") | |
| # `_distributor_init` allows distributors to run custom init code. | |
| # For instance, for the Windows wheel, this is used to pre-load the | |
| # vcomp shared library runtime for OpenMP embedded in the sklearn/.libs | |
| # sub-folder. | |
| # It is necessary to do this prior to importing show_versions as the | |
| # later is linked to the OpenMP runtime to make it possible to introspect | |
| # it and importing it first would fail if the OpenMP dll cannot be found. | |
| from . import ( # noqa: F401 E402 | |
| __check_build, | |
| _distributor_init, | |
| ) | |
| from .base import clone # noqa: E402 | |
| from .utils._show_versions import show_versions # noqa: E402 | |
| _submodules = [ | |
| "calibration", | |
| "cluster", | |
| "covariance", | |
| "cross_decomposition", | |
| "datasets", | |
| "decomposition", | |
| "dummy", | |
| "ensemble", | |
| "exceptions", | |
| "experimental", | |
| "externals", | |
| "feature_extraction", | |
| "feature_selection", | |
| "frozen", | |
| "gaussian_process", | |
| "inspection", | |
| "isotonic", | |
| "kernel_approximation", | |
| "kernel_ridge", | |
| "linear_model", | |
| "manifold", | |
| "metrics", | |
| "mixture", | |
| "model_selection", | |
| "multiclass", | |
| "multioutput", | |
| "naive_bayes", | |
| "neighbors", | |
| "neural_network", | |
| "pipeline", | |
| "preprocessing", | |
| "random_projection", | |
| "semi_supervised", | |
| "svm", | |
| "tree", | |
| "discriminant_analysis", | |
| "impute", | |
| "compose", | |
| ] | |
| __all__ = _submodules + [ | |
| # Non-modules: | |
| "clone", | |
| "get_config", | |
| "set_config", | |
| "config_context", | |
| "show_versions", | |
| ] | |
| def __dir__(): | |
| return __all__ | |
| def __getattr__(name): | |
| if name in _submodules: | |
| return _importlib.import_module(f"sklearn.{name}") | |
| else: | |
| try: | |
| return globals()[name] | |
| except KeyError: | |
| raise AttributeError(f"Module 'sklearn' has no attribute '{name}'") | |
| _BUILT_WITH_MESON = False | |
| try: | |
| import sklearn._built_with_meson # noqa: F401 | |
| _BUILT_WITH_MESON = True | |
| except ModuleNotFoundError: | |
| pass | |
| def setup_module(module): | |
| """Fixture for the tests to assure globally controllable seeding of RNGs""" | |
| import numpy as np | |
| # Check if a random seed exists in the environment, if not create one. | |
| _random_seed = os.environ.get("SKLEARN_SEED", None) | |
| if _random_seed is None: | |
| _random_seed = np.random.uniform() * np.iinfo(np.int32).max | |
| _random_seed = int(_random_seed) | |
| print("I: Seeding RNGs with %r" % _random_seed) | |
| np.random.seed(_random_seed) | |
| random.seed(_random_seed) | |