Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,18 @@

import platform
import sys
from distutils.version import LooseVersion
import os

import pytest
from _pytest.doctest import DoctestItem

from sklearn.utils import _IS_32BIT
from sklearn.externals import _pilutil
from sklearn.utils.fixes import np_version, parse_version

PYTEST_MIN_VERSION = '3.3.0'

if LooseVersion(pytest.__version__) < PYTEST_MIN_VERSION:
if parse_version(pytest.__version__) < parse_version(PYTEST_MIN_VERSION):
raise ImportError('Your version of pytest is too old, you should have '
'at least pytest >= {} installed.'
.format(PYTEST_MIN_VERSION))
Expand Down Expand Up @@ -52,8 +52,7 @@ def pytest_collection_modifyitems(config, items):
# run doctests only for numpy >= 1.14.
skip_doctests = False
try:
import numpy as np
if LooseVersion(np.__version__) < LooseVersion('1.14'):
if np_version < parse_version('1.14'):
reason = 'doctests are only run for numpy >= 1.14'
skip_doctests = True
elif _IS_32BIT:
Expand Down
4 changes: 2 additions & 2 deletions examples/cluster/plot_coin_segmentation.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
import time

import numpy as np
from distutils.version import LooseVersion
from scipy.ndimage.filters import gaussian_filter
import matplotlib.pyplot as plt
import skimage
Expand All @@ -34,9 +33,10 @@

from sklearn.feature_extraction import image
from sklearn.cluster import spectral_clustering
from sklearn.utils.fixes import parse_version

# these were introduced in skimage-0.14
if LooseVersion(skimage.__version__) >= '0.14':
if parse_version(skimage.__version__) >= parse_version('0.14'):
rescale_params = {'anti_aliasing': False, 'multichannel': False}
else:
rescale_params = {}
Expand Down
4 changes: 2 additions & 2 deletions examples/cluster/plot_coin_ward_segmentation.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import time as time

import numpy as np
from distutils.version import LooseVersion
from scipy.ndimage.filters import gaussian_filter

import matplotlib.pyplot as plt
Expand All @@ -28,9 +27,10 @@

from sklearn.feature_extraction.image import grid_to_graph
from sklearn.cluster import AgglomerativeClustering
from sklearn.utils.fixes import parse_version

# these were introduced in skimage-0.14
if LooseVersion(skimage.__version__) >= '0.14':
if parse_version(skimage.__version__) >= parse_version('0.14'):
rescale_params = {'anti_aliasing': False, 'multichannel': False}
else:
rescale_params = {}
Expand Down
4 changes: 2 additions & 2 deletions examples/compose/plot_transformed_target.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,20 @@
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from distutils.version import LooseVersion

from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import RidgeCV
from sklearn.compose import TransformedTargetRegressor
from sklearn.metrics import median_absolute_error, r2_score
from sklearn.utils.fixes import parse_version

# %%
# Synthetic example
##############################################################################

# `normed` is being deprecated in favor of `density` in histograms
if LooseVersion(matplotlib.__version__) >= '2.1':
if parse_version(matplotlib.__version__) >= parse_version('2.1'):
density_param = {'density': True}
else:
density_param = {'normed': True}
Expand Down
5 changes: 2 additions & 3 deletions examples/decomposition/plot_sparse_coding.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,11 @@
"""
print(__doc__)

from distutils.version import LooseVersion

import numpy as np
import matplotlib.pyplot as plt

from sklearn.decomposition import SparseCoder
from sklearn.utils.fixes import np_version, parse_version


def ricker_function(resolution, center, width):
Expand Down Expand Up @@ -68,7 +67,7 @@ def ricker_matrix(width, resolution, n_components):
('Lasso', 'lasso_lars', 2, None, 'turquoise'), ]
lw = 2
# Avoid FutureWarning about default value change when numpy >= 1.14
lstsq_rcond = None if LooseVersion(np.__version__) >= '1.14' else -1
lstsq_rcond = None if np_version >= parse_version('1.14') else -1

plt.figure(figsize=(13, 6))
for subplot, (D, title) in enumerate(zip((D_fixed, D_multi),
Expand Down
4 changes: 2 additions & 2 deletions examples/miscellaneous/plot_johnson_lindenstrauss_bound.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from distutils.version import LooseVersion
from sklearn.random_projection import johnson_lindenstrauss_min_dim
from sklearn.random_projection import SparseRandomProjection
from sklearn.datasets import fetch_20newsgroups_vectorized
from sklearn.datasets import load_digits
from sklearn.metrics.pairwise import euclidean_distances
from sklearn.utils.fixes import parse_version

# `normed` is being deprecated in favor of `density` in histograms
if LooseVersion(matplotlib.__version__) >= '2.1':
if parse_version(matplotlib.__version__) >= parse_version('2.1'):
density_param = {'density': True}
else:
density_param = {'normed': True}
Expand Down
4 changes: 2 additions & 2 deletions examples/neighbors/plot_kde_1d.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,12 @@
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from distutils.version import LooseVersion
from scipy.stats import norm
from sklearn.neighbors import KernelDensity
from sklearn.utils.fixes import parse_version

# `normed` is being deprecated in favor of `density` in histograms
if LooseVersion(matplotlib.__version__) >= '2.1':
if parse_version(matplotlib.__version__) >= parse_version('2.1'):
density_param = {'density': True}
else:
density_param = {'normed': True}
Expand Down
6 changes: 3 additions & 3 deletions sklearn/datasets/_lfw.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
from os.path import dirname, join, exists, isdir

import logging
from distutils.version import LooseVersion

import numpy as np
import joblib
Expand All @@ -21,6 +20,7 @@
from ._base import get_data_home, _fetch_remote, RemoteFileMetadata
from ..utils import Bunch
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import parse_version

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -304,7 +304,7 @@ def fetch_lfw_people(*, data_home=None, funneled=True, resize=0.5,

# wrap the loader in a memoizing function that will return memmaped data
# arrays for optimal memory usage
if LooseVersion(joblib.__version__) < LooseVersion('0.12'):
if parse_version(joblib.__version__) < parse_version('0.12'):
# Deal with change of API in joblib
m = Memory(cachedir=lfw_home, compress=6, verbose=0)
else:
Expand Down Expand Up @@ -477,7 +477,7 @@ def fetch_lfw_pairs(*, subset='train', data_home=None, funneled=True,

# wrap the loader in a memoizing function that will return memmaped data
# arrays for optimal memory usage
if LooseVersion(joblib.__version__) < LooseVersion('0.12'):
if parse_version(joblib.__version__) < parse_version('0.12'):
# Deal with change of API in joblib
m = Memory(cachedir=lfw_home, compress=6, verbose=0)
else:
Expand Down
4 changes: 2 additions & 2 deletions sklearn/ensemble/_hist_gradient_boosting/tests/test_loss.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from scipy.optimize import newton
from scipy.special import logit
from sklearn.utils import assert_all_finite
from sklearn.utils.fixes import sp_version
from sklearn.utils.fixes import sp_version, parse_version
import pytest

from sklearn.ensemble._hist_gradient_boosting.loss import _LOSSES
Expand Down Expand Up @@ -60,7 +60,7 @@ def get_hessians(y_true, raw_predictions):
('poisson', 0., 2.),
('poisson', -22., 10.),
])
@pytest.mark.skipif(sp_version == (1, 2, 0),
@pytest.mark.skipif(sp_version == parse_version('1.2.0'),
reason='bug in scipy 1.2.0, see scipy issue #9608')
@skip_if_32bit
def test_derivatives(loss, x0, y_true):
Expand Down
4 changes: 2 additions & 2 deletions sklearn/ensemble/tests/test_forest.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import pickle
import math
from collections import defaultdict
from distutils.version import LooseVersion
import itertools
from itertools import combinations
from itertools import product
Expand All @@ -35,6 +34,7 @@
from sklearn.utils._testing import assert_warns_message
from sklearn.utils._testing import ignore_warnings
from sklearn.utils._testing import skip_if_no_parallel
from sklearn.utils.fixes import parse_version

from sklearn.exceptions import NotFittedError

Expand Down Expand Up @@ -1274,7 +1274,7 @@ def start_call(self):
joblib.register_parallel_backend('testing', MyBackend)


@pytest.mark.skipif(joblib.__version__ < LooseVersion('0.12'),
@pytest.mark.skipif(parse_version(joblib.__version__) < parse_version('0.12'),
reason='tests not yet supported in joblib <0.12')
@skip_if_no_parallel
def test_backend_respected():
Expand Down
5 changes: 2 additions & 3 deletions sklearn/linear_model/tests/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@

import pytest

from distutils.version import LooseVersion

import numpy as np
from scipy import sparse
from scipy import linalg
Expand All @@ -15,6 +13,7 @@
from sklearn.utils._testing import assert_array_equal
from sklearn.utils._testing import assert_almost_equal
from sklearn.utils._testing import assert_allclose
from sklearn.utils.fixes import parse_version

from sklearn.linear_model import LinearRegression
from sklearn.linear_model._base import _preprocess_data
Expand Down Expand Up @@ -210,7 +209,7 @@ def test_linear_regression_sparse_multiple_outcome(random_state=0):
def test_linear_regression_pd_sparse_dataframe_warning():
pd = pytest.importorskip('pandas')
# restrict the pd versions < '0.24.0' as they have a bug in is_sparse func
if LooseVersion(pd.__version__) < '0.24.0':
if parse_version(pd.__version__) < parse_version('0.24.0'):
pytest.skip("pandas 0.24+ required.")

# Warning is raised only when some of the columns is sparse
Expand Down
5 changes: 3 additions & 2 deletions sklearn/linear_model/tests/test_coordinate_descent.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
from scipy import interpolate, sparse
from copy import deepcopy
import joblib
from distutils.version import LooseVersion

from sklearn.datasets import load_diabetes
from sklearn.datasets import make_regression
Expand All @@ -23,6 +22,7 @@
from sklearn.utils._testing import ignore_warnings
from sklearn.utils._testing import assert_array_equal
from sklearn.utils._testing import TempMemmap
from sklearn.utils.fixes import parse_version

from sklearn.linear_model import Lasso, \
LassoCV, ElasticNet, ElasticNetCV, MultiTaskLasso, MultiTaskElasticNet, \
Expand Down Expand Up @@ -1034,7 +1034,8 @@ def test_linear_models_cv_fit_for_all_backends(backend, estimator):
# memmapped when using loky backend, causing an error due to unexpected
# behavior of fancy indexing of read-only memmaps (cf. numpy#14132).

if joblib.__version__ < LooseVersion('0.12') and backend == 'loky':
if (parse_version(joblib.__version__) < parse_version('0.12')
and backend == 'loky'):
pytest.skip('loky backend does not exist in joblib <0.12')

# Create a problem sufficiently large to cause memmapping (1MB).
Expand Down
5 changes: 2 additions & 3 deletions sklearn/linear_model/tests/test_least_angle.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import warnings

from distutils.version import LooseVersion

import numpy as np
import pytest
from scipy import linalg
Expand All @@ -14,6 +12,7 @@
from sklearn.utils._testing import ignore_warnings
from sklearn.utils._testing import assert_warns
from sklearn.utils._testing import TempMemmap
from sklearn.utils.fixes import np_version, parse_version
from sklearn.exceptions import ConvergenceWarning
from sklearn import linear_model, datasets
from sklearn.linear_model._least_angle import _lars_path_residues
Expand Down Expand Up @@ -123,7 +122,7 @@ def test_lars_lstsq():
clf = linear_model.LassoLars(alpha=0.)
clf.fit(X1, y)
# Avoid FutureWarning about default value change when numpy >= 1.14
rcond = None if LooseVersion(np.__version__) >= '1.14' else -1
rcond = None if np_version >= parse_version('1.14') else -1
coef_lstsq = np.linalg.lstsq(X1, y, rcond=rcond)[0]
assert_array_almost_equal(clf.coef_, coef_lstsq)

Expand Down
5 changes: 3 additions & 2 deletions sklearn/linear_model/tests/test_sgd.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from distutils.version import LooseVersion
import pickle
import pytest

Expand All @@ -13,6 +12,7 @@
from sklearn.utils._testing import assert_raises_regexp
from sklearn.utils._testing import assert_warns
from sklearn.utils._testing import ignore_warnings
from sklearn.utils.fixes import parse_version

from sklearn import linear_model, datasets, metrics
from sklearn.base import clone, is_classifier
Expand Down Expand Up @@ -1594,7 +1594,8 @@ def test_SGDClassifier_fit_for_all_backends(backend):
# a segmentation fault when trying to write in a readonly memory mapped
# buffer.

if joblib.__version__ < LooseVersion('0.12') and backend == 'loky':
if (parse_version(joblib.__version__) < parse_version('0.12')
and backend == 'loky'):
pytest.skip('loky backend does not exist in joblib <0.12')

random_state = np.random.RandomState(42)
Expand Down
6 changes: 3 additions & 3 deletions sklearn/neighbors/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
#
# License: BSD 3 clause (C) INRIA, University of Amsterdam
from functools import partial
from distutils.version import LooseVersion

import warnings
from abc import ABCMeta, abstractmethod
Expand All @@ -28,6 +27,7 @@
from ..utils.multiclass import check_classification_targets
from ..utils.validation import check_is_fitted
from ..utils.validation import check_non_negative
from ..utils.fixes import parse_version
from ..exceptions import DataConversionWarning, EfficiencyWarning

VALID_METRICS = dict(ball_tree=BallTree.valid_metrics,
Expand Down Expand Up @@ -650,7 +650,7 @@ class from an array representing our data set and ask who's
"%s does not work with sparse matrices. Densify the data, "
"or set algorithm='brute'" % self._fit_method)
old_joblib = (
LooseVersion(joblib.__version__) < LooseVersion('0.12'))
parse_version(joblib.__version__) < parse_version('0.12'))
if old_joblib:
# Deal with change of API in joblib
check_pickle = False if old_joblib else None
Expand Down Expand Up @@ -957,7 +957,7 @@ class from an array representing our data set and ask who's
"or set algorithm='brute'" % self._fit_method)

n_jobs = effective_n_jobs(self.n_jobs)
if LooseVersion(joblib.__version__) < LooseVersion('0.12'):
if parse_version(joblib.__version__) < parse_version('0.12'):
# Deal with change of API in joblib
delayed_query = delayed(_tree_query_radius_parallel_helper,
check_pickle=False)
Expand Down
5 changes: 2 additions & 3 deletions sklearn/neighbors/tests/test_dist_metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@

import pytest

from distutils.version import LooseVersion
from scipy import __version__ as scipy_version
from scipy.spatial.distance import cdist
from sklearn.neighbors import DistanceMetric
from sklearn.neighbors import BallTree
from sklearn.utils import check_random_state
from sklearn.utils._testing import assert_raises_regex
from sklearn.utils.fixes import sp_version, parse_version


def dist_func(x1, x2, p):
Expand Down Expand Up @@ -106,7 +105,7 @@ def check_pdist_bool(metric, D_true):
# Based on https://github.com/scipy/scipy/pull/7373
# When comparing two all-zero vectors, scipy>=1.2.0 jaccard metric
# was changed to return 0, instead of nan.
if metric == 'jaccard' and LooseVersion(scipy_version) < '1.2.0':
if metric == 'jaccard' and sp_version < parse_version('1.2.0'):
D_true[np.isnan(D_true)] = 0
assert_array_almost_equal(D12, D_true)

Expand Down
Loading