From 0ab2751c6f3e6e98c98838db21f56803096ce347 Mon Sep 17 00:00:00 2001 From: Lars Buitinck Date: Sun, 1 Mar 2015 13:01:00 +0100 Subject: [PATCH] MAINT move NotFittedError to sklearn.base --- sklearn/base.py | 9 +++++++++ sklearn/cluster/birch.py | 5 +++-- sklearn/covariance/tests/test_robust_covariance.py | 2 +- sklearn/decomposition/kernel_pca.py | 4 ++-- sklearn/ensemble/gradient_boosting.py | 4 ++-- sklearn/ensemble/tests/test_gradient_boosting.py | 4 ++-- sklearn/feature_selection/from_model.py | 4 ++-- sklearn/linear_model/base.py | 5 +++-- sklearn/neighbors/base.py | 3 +-- sklearn/random_projection.py | 4 ++-- sklearn/tree/tree.py | 5 +++-- sklearn/utils/estimator_checks.py | 4 ++-- sklearn/utils/validation.py | 9 +-------- 13 files changed, 33 insertions(+), 29 deletions(-) diff --git a/sklearn/base.py b/sklearn/base.py index c77e5fb969506..d0580eff7da6b 100644 --- a/sklearn/base.py +++ b/sklearn/base.py @@ -442,6 +442,15 @@ class MetaEstimatorMixin(object): # this is just a tag for the moment +############################################################################### +class NotFittedError(ValueError, AttributeError): + """Exception class to raise if estimator is used before fitting. + + This class inherits from both ValueError and AttributeError to help with + exception handling and backward compatibility. + """ + + ############################################################################### # XXX: Temporary solution to figure out if an estimator is a classifier diff --git a/sklearn/cluster/birch.py b/sklearn/cluster/birch.py index bb4d0ffc2c753..3c5a43e4eddae 100644 --- a/sklearn/cluster/birch.py +++ b/sklearn/cluster/birch.py @@ -10,11 +10,12 @@ from math import sqrt from ..metrics.pairwise import euclidean_distances -from ..base import TransformerMixin, ClusterMixin, BaseEstimator +from ..base import (TransformerMixin, ClusterMixin, BaseEstimator, + NotFittedError) from ..externals.six.moves import xrange from ..utils import check_array from ..utils.extmath import row_norms, safe_sparse_dot -from ..utils.validation import NotFittedError, check_is_fitted +from ..utils.validation import check_is_fitted from .hierarchical import AgglomerativeClustering diff --git a/sklearn/covariance/tests/test_robust_covariance.py b/sklearn/covariance/tests/test_robust_covariance.py index d08c6291a9695..95b5e329cf2bd 100644 --- a/sklearn/covariance/tests/test_robust_covariance.py +++ b/sklearn/covariance/tests/test_robust_covariance.py @@ -9,9 +9,9 @@ from sklearn.utils.testing import assert_almost_equal from sklearn.utils.testing import assert_array_almost_equal from sklearn.utils.testing import assert_raises -from sklearn.utils.validation import NotFittedError from sklearn import datasets +from sklearn.base import NotFittedError from sklearn.covariance import empirical_covariance, MinCovDet, \ EllipticEnvelope diff --git a/sklearn/decomposition/kernel_pca.py b/sklearn/decomposition/kernel_pca.py index f447e47934e17..a7b482956c2f5 100644 --- a/sklearn/decomposition/kernel_pca.py +++ b/sklearn/decomposition/kernel_pca.py @@ -7,8 +7,8 @@ from scipy import linalg from ..utils.arpack import eigsh -from ..utils.validation import check_is_fitted, NotFittedError -from ..base import BaseEstimator, TransformerMixin +from ..utils.validation import check_is_fitted +from ..base import BaseEstimator, TransformerMixin, NotFittedError from ..preprocessing import KernelCenterer from ..metrics.pairwise import pairwise_kernels diff --git a/sklearn/ensemble/gradient_boosting.py b/sklearn/ensemble/gradient_boosting.py index 1e107190beff9..75b7d87abe05d 100644 --- a/sklearn/ensemble/gradient_boosting.py +++ b/sklearn/ensemble/gradient_boosting.py @@ -31,7 +31,7 @@ from scipy import stats from .base import BaseEnsemble -from ..base import BaseEstimator +from ..base import BaseEstimator, NotFittedError from ..base import ClassifierMixin from ..base import RegressorMixin from ..utils import check_random_state, check_array, check_X_y, column_or_1d @@ -39,7 +39,7 @@ from ..utils.extmath import logsumexp from ..utils.fixes import expit, bincount from ..utils.stats import _weighted_percentile -from ..utils.validation import check_is_fitted, NotFittedError +from ..utils.validation import check_is_fitted from ..externals import six from ..feature_selection.from_model import _LearntSelectorMixin diff --git a/sklearn/ensemble/tests/test_gradient_boosting.py b/sklearn/ensemble/tests/test_gradient_boosting.py index c1133dc4c0d54..1a3f36b90f078 100644 --- a/sklearn/ensemble/tests/test_gradient_boosting.py +++ b/sklearn/ensemble/tests/test_gradient_boosting.py @@ -5,11 +5,12 @@ import numpy as np from sklearn import datasets -from sklearn.base import clone +from sklearn.base import clone, NotFittedError from sklearn.ensemble import GradientBoostingClassifier from sklearn.ensemble import GradientBoostingRegressor from sklearn.ensemble.gradient_boosting import ZeroEstimator from sklearn.metrics import mean_squared_error + from sklearn.utils import check_random_state, tosequence from sklearn.utils.testing import assert_almost_equal from sklearn.utils.testing import assert_array_almost_equal @@ -21,7 +22,6 @@ from sklearn.utils.testing import assert_true from sklearn.utils.testing import assert_warns from sklearn.utils.validation import DataConversionWarning -from sklearn.utils.validation import NotFittedError # toy sample X = [[-2, -1], [-1, -1], [-1, -2], [1, 1], [1, 2], [2, 1]] diff --git a/sklearn/feature_selection/from_model.py b/sklearn/feature_selection/from_model.py index 9dc652d93e53b..b76682b2b151b 100644 --- a/sklearn/feature_selection/from_model.py +++ b/sklearn/feature_selection/from_model.py @@ -3,10 +3,10 @@ import numpy as np -from ..base import TransformerMixin +from ..base import TransformerMixin, NotFittedError from ..externals import six from ..utils import safe_mask, check_array -from ..utils.validation import NotFittedError, check_is_fitted +from ..utils.validation import check_is_fitted class _LearntSelectorMixin(TransformerMixin): diff --git a/sklearn/linear_model/base.py b/sklearn/linear_model/base.py index ca4c36e1098b1..ca2473d78c30c 100644 --- a/sklearn/linear_model/base.py +++ b/sklearn/linear_model/base.py @@ -24,12 +24,13 @@ from ..externals import six from ..externals.joblib import Parallel, delayed -from ..base import BaseEstimator, ClassifierMixin, RegressorMixin +from ..base import (BaseEstimator, ClassifierMixin, RegressorMixin, + NotFittedError) from ..utils import as_float_array, check_array, check_X_y from ..utils.extmath import safe_sparse_dot from ..utils.sparsefuncs import mean_variance_axis, inplace_column_scale from ..utils.fixes import sparse_lsqr -from ..utils.validation import NotFittedError, check_is_fitted +from ..utils.validation import check_is_fitted ### diff --git a/sklearn/neighbors/base.py b/sklearn/neighbors/base.py index ea9d6516f0b88..cf7a2a7684c84 100644 --- a/sklearn/neighbors/base.py +++ b/sklearn/neighbors/base.py @@ -14,13 +14,12 @@ from .ball_tree import BallTree from .kd_tree import KDTree -from ..base import BaseEstimator +from ..base import BaseEstimator, NotFittedError from ..metrics import pairwise_distances from ..metrics.pairwise import PAIRWISE_DISTANCE_FUNCTIONS from ..utils import check_X_y, check_array from ..utils.fixes import argpartition from ..utils.validation import DataConversionWarning -from ..utils.validation import NotFittedError from ..externals import six diff --git a/sklearn/random_projection.py b/sklearn/random_projection.py index 30cb5b78e3972..2ea6ab326e791 100644 --- a/sklearn/random_projection.py +++ b/sklearn/random_projection.py @@ -35,13 +35,13 @@ from numpy.testing import assert_equal import scipy.sparse as sp -from .base import BaseEstimator, TransformerMixin +from .base import BaseEstimator, TransformerMixin, NotFittedError from .externals import six from .externals.six.moves import xrange from .utils import check_random_state from .utils.extmath import safe_sparse_dot from .utils.random import sample_without_replacement -from .utils.validation import check_array, NotFittedError +from .utils.validation import check_array from .utils import DataDimensionalityWarning diff --git a/sklearn/tree/tree.py b/sklearn/tree/tree.py index 8ee0ae55f83dd..c7715e033fc40 100644 --- a/sklearn/tree/tree.py +++ b/sklearn/tree/tree.py @@ -22,11 +22,12 @@ import numpy as np from scipy.sparse import issparse -from ..base import BaseEstimator, ClassifierMixin, RegressorMixin +from ..base import (BaseEstimator, ClassifierMixin, RegressorMixin, + NotFittedError) from ..externals import six from ..feature_selection.from_model import _LearntSelectorMixin from ..utils import check_array, check_random_state, compute_sample_weight -from ..utils.validation import NotFittedError, check_is_fitted +from ..utils.validation import check_is_fitted from ._tree import Criterion diff --git a/sklearn/utils/estimator_checks.py b/sklearn/utils/estimator_checks.py index 388876a8fffe0..c797082c865c0 100644 --- a/sklearn/utils/estimator_checks.py +++ b/sklearn/utils/estimator_checks.py @@ -27,7 +27,7 @@ from sklearn.utils.testing import check_skip_travis from sklearn.utils.testing import ignore_warnings -from sklearn.base import clone, ClassifierMixin +from sklearn.base import clone, ClassifierMixin, NotFittedError from sklearn.metrics import accuracy_score, adjusted_rand_score, f1_score from sklearn.lda import LDA @@ -36,7 +36,7 @@ from sklearn.svm.base import BaseLibSVM from sklearn.pipeline import make_pipeline -from sklearn.utils.validation import DataConversionWarning, NotFittedError +from sklearn.utils.validation import DataConversionWarning from sklearn.cross_validation import train_test_split from sklearn.utils import shuffle diff --git a/sklearn/utils/validation.py b/sklearn/utils/validation.py index 8582572ce90e8..bea96e7dff359 100644 --- a/sklearn/utils/validation.py +++ b/sklearn/utils/validation.py @@ -12,6 +12,7 @@ import numpy as np import scipy.sparse as sp +from ..base import NotFittedError from ..externals import six from inspect import getargspec @@ -27,14 +28,6 @@ class NonBLASDotWarning(UserWarning): """A warning on implicit dispatch to numpy.dot""" -class NotFittedError(ValueError, AttributeError): - """Exception class to raise if estimator is used before fitting - - This class inherits from both ValueError and AttributeError to help with - exception handling and backward compatibility. - """ - - # Silenced by default to reduce verbosity. Turn on at runtime for # performance profiling. warnings.simplefilter('ignore', NonBLASDotWarning)