diff --git a/sklearn/decomposition/online_lda.py b/sklearn/decomposition/online_lda.py index 68900a3ea07646736a163346a54e0e8834da3690..7cfcb0ae4396c99b449c1f7c75858d86394c59a4 100644 --- a/sklearn/decomposition/online_lda.py +++ b/sklearn/decomposition/online_lda.py @@ -13,13 +13,13 @@ Link: http://matthewdhoffman.com/code/onlineldavb.tar import numpy as np import scipy.sparse as sp -from scipy.misc import logsumexp from scipy.special import gammaln import warnings from ..base import BaseEstimator, TransformerMixin from ..utils import (check_random_state, check_array, gen_batches, gen_even_slices, _get_n_jobs) +from ..utils.fixes import logsumexp from ..utils.validation import check_non_negative from ..externals.joblib import Parallel, delayed from ..externals.six.moves import xrange diff --git a/sklearn/ensemble/gradient_boosting.py b/sklearn/ensemble/gradient_boosting.py index 779cf2d3b543cd72c5cdde6a730bfb8e402543e3..baa0d7b0aebbdb894d78b8a33b2223bb0afcface 100644 --- a/sklearn/ensemble/gradient_boosting.py +++ b/sklearn/ensemble/gradient_boosting.py @@ -27,7 +27,6 @@ from abc import ABCMeta from abc import abstractmethod from .base import BaseEnsemble -from ..base import BaseEstimator from ..base import ClassifierMixin from ..base import RegressorMixin from ..externals import six @@ -40,7 +39,6 @@ import numbers import numpy as np from scipy import stats -from scipy.misc import logsumexp from scipy.sparse import csc_matrix from scipy.sparse import csr_matrix from scipy.sparse import issparse @@ -57,6 +55,7 @@ from ..utils import check_X_y from ..utils import column_or_1d from ..utils import check_consistent_length from ..utils import deprecated +from ..utils.fixes import logsumexp from ..utils.stats import _weighted_percentile from ..utils.validation import check_is_fitted from ..utils.multiclass import check_classification_targets diff --git a/sklearn/ensemble/tests/test_forest.py b/sklearn/ensemble/tests/test_forest.py index b964ed768d85e2e1570e39c44f9e415d6b859457..8f09d26df02e26cda93896d279af1ac3acfea35a 100644 --- a/sklearn/ensemble/tests/test_forest.py +++ b/sklearn/ensemble/tests/test_forest.py @@ -14,7 +14,6 @@ from itertools import combinations from itertools import product import numpy as np -from scipy.misc import comb from scipy.sparse import csr_matrix from scipy.sparse import csc_matrix from scipy.sparse import coo_matrix @@ -42,6 +41,7 @@ from sklearn.ensemble import RandomTreesEmbedding from sklearn.model_selection import GridSearchCV from sklearn.svm import LinearSVC from sklearn.utils.validation import check_random_state +from sklearn.utils.fixes import comb from sklearn.tree.tree import SPARSE_SPLITTERS diff --git a/sklearn/linear_model/logistic.py b/sklearn/linear_model/logistic.py index c12b4943807b118272d25072c610d4fcdb31302a..281a4606155a9b4c54bb185c2a8e87c10ca3f0e8 100644 --- a/sklearn/linear_model/logistic.py +++ b/sklearn/linear_model/logistic.py @@ -15,7 +15,6 @@ import warnings import numpy as np from scipy import optimize, sparse -from scipy.misc import logsumexp from scipy.special import expit from .base import LinearClassifierMixin, SparseCoefMixin, BaseEstimator @@ -27,6 +26,7 @@ from ..utils import check_random_state from ..utils.extmath import (log_logistic, safe_sparse_dot, softmax, squared_norm) from ..utils.extmath import row_norms +from ..utils.fixes import logsumexp from ..utils.optimize import newton_cg from ..utils.validation import check_X_y from ..exceptions import NotFittedError diff --git a/sklearn/linear_model/tests/test_sag.py b/sklearn/linear_model/tests/test_sag.py index 3d1df5116ba10c840db65676f81c32216b1387c8..02a557d56ef7f6b316a87d390d47e66e21748d3f 100644 --- a/sklearn/linear_model/tests/test_sag.py +++ b/sklearn/linear_model/tests/test_sag.py @@ -6,7 +6,6 @@ import math import numpy as np import scipy.sparse as sp -from scipy.misc import logsumexp from sklearn.linear_model.sag import get_auto_step_size from sklearn.linear_model.sag_fast import _multinomial_grad_loss_all_samples @@ -14,6 +13,7 @@ from sklearn.linear_model import LogisticRegression, Ridge from sklearn.linear_model.base import make_dataset from sklearn.linear_model.logistic import _multinomial_loss_grad +from sklearn.utils.fixes import logsumexp from sklearn.utils.extmath import row_norms from sklearn.utils.testing import assert_almost_equal from sklearn.utils.testing import assert_array_almost_equal diff --git a/sklearn/metrics/cluster/supervised.py b/sklearn/metrics/cluster/supervised.py index 9115b93abefbab8b58879a9e749482b9d18ab778..f1f033bf6fe0b16a171917f71ea04bf596c09d6e 100644 --- a/sklearn/metrics/cluster/supervised.py +++ b/sklearn/metrics/cluster/supervised.py @@ -18,11 +18,11 @@ from __future__ import division from math import log import numpy as np -from scipy.misc import comb from scipy import sparse as sp from .expected_mutual_info_fast import expected_mutual_information from ...utils.validation import check_array +from ...utils.fixes import comb def comb2(n): diff --git a/sklearn/mixture/base.py b/sklearn/mixture/base.py index 3c8c701e62e30103a90a39569e573518d587b235..478131a945ef18a2d8801f9240c94d3c14fa2de9 100644 --- a/sklearn/mixture/base.py +++ b/sklearn/mixture/base.py @@ -11,7 +11,6 @@ from abc import ABCMeta, abstractmethod from time import time import numpy as np -from scipy.misc import logsumexp from .. import cluster from ..base import BaseEstimator @@ -19,6 +18,7 @@ from ..base import DensityMixin from ..externals import six from ..exceptions import ConvergenceWarning from ..utils import check_array, check_random_state +from ..utils.fixes import logsumexp def _check_shape(param, param_shape, name): diff --git a/sklearn/mixture/dpgmm.py b/sklearn/mixture/dpgmm.py index 8e2137b44f58066aacf253b494e99386d35c78cf..3d1858c513b2a645b8c2127b328195ad13ffcb4f 100644 --- a/sklearn/mixture/dpgmm.py +++ b/sklearn/mixture/dpgmm.py @@ -21,11 +21,11 @@ import numpy as np from scipy.special import digamma as _digamma, gammaln as _gammaln from scipy import linalg from scipy.linalg import pinvh -from scipy.misc import logsumexp from scipy.spatial.distance import cdist from ..externals.six.moves import xrange from ..utils import check_random_state, check_array, deprecated +from ..utils.fixes import logsumexp from ..utils.extmath import squared_norm, stable_cumsum from ..utils.validation import check_is_fitted from .. import cluster diff --git a/sklearn/mixture/gmm.py b/sklearn/mixture/gmm.py index 3fd659ece818447b007d64c61a4409641c0134ab..79ff8d169dcd83af4e1e9a4490415ae9ace08e4b 100644 --- a/sklearn/mixture/gmm.py +++ b/sklearn/mixture/gmm.py @@ -19,10 +19,10 @@ from time import time import numpy as np from scipy import linalg -from scipy.misc import logsumexp from ..base import BaseEstimator from ..utils import check_random_state, check_array, deprecated +from ..utils.fixes import logsumexp from ..utils.validation import check_is_fitted from .. import cluster diff --git a/sklearn/model_selection/_split.py b/sklearn/model_selection/_split.py index 7d9c8f9aad9547d261ac25b127e3e75d0231861c..d4cd2537e524035343f011990e35e0ecc648a232 100644 --- a/sklearn/model_selection/_split.py +++ b/sklearn/model_selection/_split.py @@ -22,14 +22,13 @@ from abc import ABCMeta, abstractmethod import numpy as np -from scipy.misc import comb from ..utils import indexable, check_random_state, safe_indexing from ..utils.validation import _num_samples, column_or_1d from ..utils.validation import check_array from ..utils.multiclass import type_of_target from ..externals.six import with_metaclass from ..externals.six.moves import zip -from ..utils.fixes import signature +from ..utils.fixes import signature, comb from ..base import _pprint __all__ = ['BaseCrossValidator', diff --git a/sklearn/model_selection/tests/test_split.py b/sklearn/model_selection/tests/test_split.py index ad77ecd7b8242c5c3342b9227c4a97a13b52bff9..93f0dff1891d1c5098335ccbc4125dcf265b25c7 100644 --- a/sklearn/model_selection/tests/test_split.py +++ b/sklearn/model_selection/tests/test_split.py @@ -5,7 +5,6 @@ import warnings import numpy as np from scipy.sparse import coo_matrix, csc_matrix, csr_matrix from scipy import stats -from scipy.misc import comb from itertools import combinations from itertools import combinations_with_replacement @@ -57,6 +56,8 @@ from sklearn.datasets import make_classification from sklearn.externals import six from sklearn.externals.six.moves import zip +from sklearn.utils.fixes import comb + from sklearn.svm import SVC X = np.ones(10) diff --git a/sklearn/naive_bayes.py b/sklearn/naive_bayes.py index 5c81dc7041124a92eb427559f383852669b7dedb..fbff00fb672f781d41058ef29ae1645991e3f3ed 100644 --- a/sklearn/naive_bayes.py +++ b/sklearn/naive_bayes.py @@ -19,7 +19,6 @@ are supervised learning methods based on applying Bayes' theorem with strong from abc import ABCMeta, abstractmethod import numpy as np -from scipy.misc import logsumexp from scipy.sparse import issparse from .base import BaseEstimator, ClassifierMixin @@ -28,6 +27,7 @@ from .preprocessing import LabelBinarizer from .preprocessing import label_binarize from .utils import check_X_y, check_array, check_consistent_length from .utils.extmath import safe_sparse_dot +from .utils.fixes import logsumexp from .utils.multiclass import _check_partial_fit_first_call from .utils.validation import check_is_fitted from .externals import six diff --git a/sklearn/utils/extmath.py b/sklearn/utils/extmath.py index 0e0a211882efed98bc9220bba68b8f62f7cf46ee..687ddd4e4a06c2c8ed74b64c17fa15128281c872 100644 --- a/sklearn/utils/extmath.py +++ b/sklearn/utils/extmath.py @@ -17,10 +17,10 @@ import warnings import numpy as np from scipy import linalg from scipy.sparse import issparse, csr_matrix -from scipy.misc import logsumexp as scipy_logsumexp from . import check_random_state, deprecated from .fixes import np_version +from .fixes import logsumexp as scipy_logsumexp from ._logistic_sigmoid import _log_logistic_sigmoid from ..externals.six.moves import xrange from .sparsefuncs_fast import csr_row_norms diff --git a/sklearn/utils/fixes.py b/sklearn/utils/fixes.py index bfa5c917b0030fce591ce392ac374055bdc4a54a..0e96057f929ffa90501e7efabf4a54ff3135f41c 100644 --- a/sklearn/utils/fixes.py +++ b/sklearn/utils/fixes.py @@ -11,8 +11,6 @@ at which the fixe is no longer needed. # License: BSD 3 clause import warnings -import sys -import functools import os import errno @@ -36,6 +34,7 @@ def _parse_version(version_string): version.append(x) return tuple(version) + euler_gamma = getattr(np, 'euler_gamma', 0.577215664901532860606512090082402431) @@ -142,11 +141,17 @@ if sp_version < (0, 15): # Backport fix for scikit-learn/scikit-learn#2986 / scipy/scipy#4142 from ._scipy_sparse_lsqr_backport import lsqr as sparse_lsqr else: - from scipy.sparse.linalg import lsqr as sparse_lsqr + from scipy.sparse.linalg import lsqr as sparse_lsqr # noqa + + +try: # SciPy >= 0.19 + from scipy.special import comb, logsumexp +except ImportError: + from scipy.misc import comb, logsumexp # noqa def parallel_helper(obj, methodname, *args, **kwargs): - """Helper to workaround Python 2 limitations of pickling instance methods""" + """Workaround for Python 2 limitations of pickling instance methods""" return getattr(obj, methodname)(*args, **kwargs) diff --git a/sklearn/utils/tests/test_random.py b/sklearn/utils/tests/test_random.py index 199c2310fbb7ab24966589a9632e3b681e0d27b6..159635c569d53314c923f2d48e2289f77604a2a8 100644 --- a/sklearn/utils/tests/test_random.py +++ b/sklearn/utils/tests/test_random.py @@ -2,10 +2,10 @@ from __future__ import division import numpy as np import scipy.sparse as sp -from scipy.misc import comb as combinations from numpy.testing import assert_array_almost_equal from sklearn.utils.random import sample_without_replacement from sklearn.utils.random import random_choice_csc +from sklearn.utils.fixes import comb from sklearn.utils.testing import ( assert_raises, @@ -88,7 +88,7 @@ def check_sample_int_distribution(sample_without_replacement): # Counting the number of combinations is not as good as counting the # the number of permutations. However, it works with sampling algorithm # that does not provide a random permutation of the subset of integer. - n_expected = combinations(n_population, n_samples, exact=True) + n_expected = comb(n_population, n_samples, exact=True) output = {} for i in range(n_trials):