"""Compatibility library."""
import inspect
from typing import TYPE_CHECKING, Any, List
"""sklearn"""
try:
from sklearn import __version__ as _sklearn_version
from sklearn.base import BaseEstimator, ClassifierMixin, RegressorMixin
from sklearn.exceptions import NotFittedError
from sklearn.model_selection import BaseCrossValidator, GroupKFold, StratifiedKFold
from sklearn.preprocessing import LabelEncoder
from sklearn.utils.class_weight import compute_sample_weight
from sklearn.utils.multiclass import check_classification_targets
from sklearn.utils.validation import _check_sample_weight, assert_all_finite, check_array, check_X_y
SKLEARN_CHECK_SAMPLE_WEIGHT_HAS_ALLOW_ZERO_WEIGHTS_ARG = (
"allow_all_zero_weights" in inspect.signature(_check_sample_weight).parameters
)
try:
from sklearn.utils.validation import validate_data
except ImportError:
def validate_data(
_estimator: Any,
X: Any,
y: Any = "no_validation",
accept_sparse: bool = True,
ensure_all_finite: bool = False,
ensure_min_samples: int = 1,
**ignored_kwargs: Any,
) -> Any:
from sklearn.utils.validation import _num_features
if hasattr(X, "shape") and len(X.shape) == 1:
n_features_in_ = 1
else:
n_features_in_ = _num_features(X)
no_val_y = isinstance(y, str) and y == "no_validation"
if no_val_y:
X = check_array(
X,
accept_sparse=accept_sparse,
force_all_finite=ensure_all_finite,
ensure_min_samples=ensure_min_samples,
)
else:
X, y = check_X_y(
X,
y,
accept_sparse=accept_sparse,
force_all_finite=ensure_all_finite,
ensure_min_samples=ensure_min_samples,
)
_estimator.n_features_in_ = n_features_in_
if _estimator.__sklearn_is_fitted__() and _estimator._n_features != n_features_in_:
raise ValueError(
f"X has {n_features_in_} features, but {_estimator.__class__.__name__} "
f"is expecting {_estimator._n_features} features as input."
)
if no_val_y:
return X
else:
return X, y
SKLEARN_INSTALLED = True
_LGBMBaseCrossValidator = BaseCrossValidator
_LGBMModelBase = BaseEstimator
_LGBMRegressorBase = RegressorMixin
_LGBMClassifierBase = ClassifierMixin
_LGBMLabelEncoder = LabelEncoder
LGBMNotFittedError = NotFittedError
_LGBMStratifiedKFold = StratifiedKFold
_LGBMGroupKFold = GroupKFold
_LGBMCheckSampleWeight = _check_sample_weight
_LGBMAssertAllFinite = assert_all_finite
_LGBMCheckClassificationTargets = check_classification_targets
_LGBMComputeSampleWeight = compute_sample_weight
_LGBMValidateData = validate_data
except ImportError:
SKLEARN_INSTALLED = False
SKLEARN_CHECK_SAMPLE_WEIGHT_HAS_ALLOW_ZERO_WEIGHTS_ARG = False
class _LGBMModelBase:
"""Dummy class for sklearn.base.BaseEstimator."""
pass
class _LGBMClassifierBase:
"""Dummy class for sklearn.base.ClassifierMixin."""
pass
class _LGBMRegressorBase:
"""Dummy class for sklearn.base.RegressorMixin."""
pass
_LGBMBaseCrossValidator = None
_LGBMLabelEncoder = None
LGBMNotFittedError = ValueError
_LGBMStratifiedKFold = None
_LGBMGroupKFold = None
_LGBMCheckSampleWeight = None
_LGBMAssertAllFinite = None
_LGBMCheckClassificationTargets = None
_LGBMComputeSampleWeight = None
_LGBMValidateData = None
_sklearn_version = None
if TYPE_CHECKING:
try:
from sklearn.utils import Tags as _sklearn_Tags
except ImportError:
_sklearn_Tags = None
"""pandas"""
try:
from pandas import CategoricalDtype as pd_CategoricalDtype
from pandas import DataFrame as pd_DataFrame
from pandas import Series as pd_Series
from pandas import concat
PANDAS_INSTALLED = True
except ImportError:
PANDAS_INSTALLED = False
class pd_Series:
"""Dummy class for pandas.Series."""
def __init__(self, *args: Any, **kwargs: Any):
pass
class pd_DataFrame:
"""Dummy class for pandas.DataFrame."""
def __init__(self, *args: Any, **kwargs: Any):
pass
class pd_CategoricalDtype:
"""Dummy class for pandas.CategoricalDtype."""
def __init__(self, *args: Any, **kwargs: Any):
pass
concat = None
"""cpu_count()"""
def _LGBMCpuCount(only_physical_cores: bool = True) -> int:
ret: int
try:
from joblib import cpu_count
ret = cpu_count(only_physical_cores=only_physical_cores)
except ImportError:
try:
from psutil import cpu_count
ret = cpu_count(logical=not only_physical_cores) or 1
except ImportError:
from multiprocessing import cpu_count
ret = cpu_count()
return ret
__all__: List[str] = []