Skip to content

Commit

Permalink
FIX Passes global configuration when spawning joblib jobs (#17634)
Browse files Browse the repository at this point in the history
* WIP

* BUG Passes context to joblib jobs

* BUG Fix

* BUG Fix

* CLN Moves delayed into fixes

* CLN Adds linter

* REV Revert diff

* DOC Adds comment for removal

* Use a simple implementation
  • Loading branch information
thomasjpfan committed Sep 21, 2020
1 parent d01014c commit 06d6f8a
Show file tree
Hide file tree
Showing 32 changed files with 120 additions and 32 deletions.
3 changes: 2 additions & 1 deletion benchmarks/bench_saga.py
Expand Up @@ -7,7 +7,8 @@
import time
import os

from joblib import delayed, Parallel
from joblib import Parallel
from sklearn.utils.fixes import delayed
import matplotlib.pyplot as plt
import numpy as np

Expand Down
8 changes: 8 additions & 0 deletions build_tools/circle/linting.sh
Expand Up @@ -172,3 +172,11 @@ then
echo "$doctest_directive"
exit 1
fi

joblib_import="$(git grep -l -A 10 -E "joblib import.+delayed" -- "*.py" ":!sklearn/utils/_joblib.py" ":!sklearn/utils/fixes.py")"

if [ ! -z "$joblib_import" ]; then
echo "Use from sklearn.utils.fixes import delayed instead of joblib delayed. The following files contains imports to joblib.delayed:"
echo "$joblib_import"
exit 1
fi
3 changes: 2 additions & 1 deletion sklearn/calibration.py
Expand Up @@ -13,7 +13,7 @@

from math import log
import numpy as np
from joblib import delayed, Parallel
from joblib import Parallel

from scipy.special import expit
from scipy.special import xlogy
Expand All @@ -24,6 +24,7 @@
MetaEstimatorMixin)
from .preprocessing import label_binarize, LabelBinarizer
from .utils import check_array, indexable, column_or_1d
from .utils.fixes import delayed
from .utils.validation import check_is_fitted, check_consistent_length
from .utils.validation import _check_sample_weight
from .pipeline import Pipeline
Expand Down
3 changes: 2 additions & 1 deletion sklearn/cluster/_mean_shift.py
Expand Up @@ -16,10 +16,11 @@

import numpy as np
import warnings
from joblib import Parallel, delayed
from joblib import Parallel

from collections import defaultdict
from ..utils.validation import check_is_fitted, _deprecate_positional_args
from ..utils.fixes import delayed
from ..utils import check_random_state, gen_batches, check_array
from ..base import BaseEstimator, ClusterMixin
from ..neighbors import NearestNeighbors
Expand Down
3 changes: 2 additions & 1 deletion sklearn/compose/_column_transformer.py
Expand Up @@ -12,7 +12,7 @@
import numbers
import numpy as np
from scipy import sparse
from joblib import Parallel, delayed
from joblib import Parallel

from ..base import clone, TransformerMixin
from ..utils._estimator_html_repr import _VisualBlock
Expand All @@ -25,6 +25,7 @@
from ..utils.metaestimators import _BaseComposition
from ..utils.validation import check_array, check_is_fitted
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed


__all__ = [
Expand Down
3 changes: 2 additions & 1 deletion sklearn/covariance/_graph_lasso.py
Expand Up @@ -13,13 +13,14 @@

import numpy as np
from scipy import linalg
from joblib import Parallel, delayed
from joblib import Parallel

from . import empirical_covariance, EmpiricalCovariance, log_likelihood

from ..exceptions import ConvergenceWarning
from ..utils.validation import check_random_state
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed
# mypy error: Module 'sklearn.linear_model' has no attribute '_cd_fast'
from ..linear_model import _cd_fast as cd_fast # type: ignore
from ..linear_model import lars_path_gram
Expand Down
3 changes: 2 additions & 1 deletion sklearn/decomposition/_dict_learning.py
Expand Up @@ -11,14 +11,15 @@

import numpy as np
from scipy import linalg
from joblib import Parallel, delayed, effective_n_jobs
from joblib import Parallel, effective_n_jobs

from ..base import BaseEstimator, TransformerMixin
from ..utils import deprecated
from ..utils import (check_array, check_random_state, gen_even_slices,
gen_batches)
from ..utils.extmath import randomized_svd, row_norms
from ..utils.validation import check_is_fitted, _deprecate_positional_args
from ..utils.fixes import delayed
from ..linear_model import Lasso, orthogonal_mp_gram, LassoLars, Lars


Expand Down
3 changes: 2 additions & 1 deletion sklearn/decomposition/_lda.py
Expand Up @@ -14,13 +14,14 @@
import numpy as np
import scipy.sparse as sp
from scipy.special import gammaln, logsumexp
from joblib import Parallel, delayed, effective_n_jobs
from joblib import Parallel, effective_n_jobs

from ..base import BaseEstimator, TransformerMixin
from ..utils import check_random_state, gen_batches, gen_even_slices
from ..utils.validation import check_non_negative
from ..utils.validation import check_is_fitted
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed

from ._online_lda_fast import (mean_change, _dirichlet_expectation_1d,
_dirichlet_expectation_2d)
Expand Down
3 changes: 2 additions & 1 deletion sklearn/ensemble/_bagging.py
Expand Up @@ -10,7 +10,7 @@
from abc import ABCMeta, abstractmethod
from warnings import warn

from joblib import Parallel, delayed
from joblib import Parallel

from ._base import BaseEnsemble, _partition_estimators
from ..base import ClassifierMixin, RegressorMixin
Expand All @@ -23,6 +23,7 @@
from ..utils.random import sample_without_replacement
from ..utils.validation import has_fit_parameter, check_is_fitted, \
_check_sample_weight, _deprecate_positional_args
from ..utils.fixes import delayed


__all__ = ["BaggingClassifier",
Expand Down
3 changes: 2 additions & 1 deletion sklearn/ensemble/_forest.py
Expand Up @@ -48,7 +48,7 @@ class calls the ``fit`` method of each sub-estimator on random samples
import numpy as np
from scipy.sparse import issparse
from scipy.sparse import hstack as sparse_hstack
from joblib import Parallel, delayed
from joblib import Parallel

from ..base import ClassifierMixin, RegressorMixin, MultiOutputMixin
from ..metrics import r2_score
Expand All @@ -59,6 +59,7 @@ class calls the ``fit`` method of each sub-estimator on random samples
from ..utils import check_random_state, check_array, compute_sample_weight
from ..exceptions import DataConversionWarning
from ._base import BaseEnsemble, _partition_estimators
from ..utils.fixes import delayed
from ..utils.fixes import _joblib_parallel_args
from ..utils.multiclass import check_classification_targets
from ..utils.validation import check_is_fitted, _check_sample_weight
Expand Down
3 changes: 2 additions & 1 deletion sklearn/ensemble/_stacking.py
Expand Up @@ -7,7 +7,7 @@
from copy import deepcopy

import numpy as np
from joblib import Parallel, delayed
from joblib import Parallel
import scipy.sparse as sparse

from ..base import clone
Expand All @@ -33,6 +33,7 @@
from ..utils.validation import check_is_fitted
from ..utils.validation import column_or_1d
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed


class _BaseStacking(TransformerMixin, _BaseHeterogeneousEnsemble,
Expand Down
3 changes: 2 additions & 1 deletion sklearn/ensemble/_voting.py
Expand Up @@ -17,7 +17,7 @@

import numpy as np

from joblib import Parallel, delayed
from joblib import Parallel

from ..base import ClassifierMixin
from ..base import RegressorMixin
Expand All @@ -33,6 +33,7 @@
from ..utils.validation import _deprecate_positional_args
from ..exceptions import NotFittedError
from ..utils._estimator_html_repr import _VisualBlock
from ..utils.fixes import delayed


class _BaseVoting(TransformerMixin, _BaseHeterogeneousEnsemble):
Expand Down
3 changes: 2 additions & 1 deletion sklearn/feature_selection/_rfe.py
Expand Up @@ -8,12 +8,13 @@

import numpy as np
import numbers
from joblib import Parallel, delayed, effective_n_jobs
from joblib import Parallel, effective_n_jobs

from ..utils.metaestimators import if_delegate_has_method
from ..utils.metaestimators import _safe_split
from ..utils.validation import check_is_fitted
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed
from ..base import BaseEstimator
from ..base import MetaEstimatorMixin
from ..base import clone
Expand Down
2 changes: 1 addition & 1 deletion sklearn/inspection/_permutation_importance.py
@@ -1,13 +1,13 @@
"""Permutation importance for estimators."""
import numpy as np
from joblib import Parallel
from joblib import delayed

from ..metrics import check_scoring
from ..utils import Bunch
from ..utils import check_random_state
from ..utils import check_array
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed


def _weights_scorer(scorer, estimator, X, y, sample_weight):
Expand Down
3 changes: 2 additions & 1 deletion sklearn/inspection/_plot/partial_dependence.py
Expand Up @@ -6,14 +6,15 @@
import numpy as np
from scipy import sparse
from scipy.stats.mstats import mquantiles
from joblib import Parallel, delayed
from joblib import Parallel

from .. import partial_dependence
from ...base import is_regressor
from ...utils import check_array
from ...utils import check_matplotlib_support # noqa
from ...utils import _safe_indexing
from ...utils.validation import _deprecate_positional_args
from ...utils.fixes import delayed


@_deprecate_positional_args
Expand Down
3 changes: 2 additions & 1 deletion sklearn/linear_model/_base.py
Expand Up @@ -23,7 +23,7 @@
from scipy import optimize
from scipy import sparse
from scipy.special import expit
from joblib import Parallel, delayed
from joblib import Parallel

from ..base import (BaseEstimator, ClassifierMixin, RegressorMixin,
MultiOutputMixin)
Expand All @@ -37,6 +37,7 @@
from ..utils._seq_dataset import ArrayDataset32, CSRDataset32
from ..utils._seq_dataset import ArrayDataset64, CSRDataset64
from ..utils.validation import check_is_fitted, _check_sample_weight
from ..utils.fixes import delayed
from ..preprocessing import normalize as f_normalize

# TODO: bayesian_ridge_regression and bayesian_regression_ard
Expand Down
3 changes: 2 additions & 1 deletion sklearn/linear_model/_coordinate_descent.py
Expand Up @@ -12,7 +12,7 @@

import numpy as np
from scipy import sparse
from joblib import Parallel, delayed, effective_n_jobs
from joblib import Parallel, effective_n_jobs

from ._base import LinearModel, _pre_fit
from ..base import RegressorMixin, MultiOutputMixin
Expand All @@ -25,6 +25,7 @@
from ..utils.validation import check_is_fitted, _check_sample_weight
from ..utils.validation import column_or_1d
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed

# mypy error: Module 'sklearn.linear_model' has no attribute '_cd_fast'
from . import _cd_fast as cd_fast # type: ignore
Expand Down
3 changes: 2 additions & 1 deletion sklearn/linear_model/_least_angle.py
Expand Up @@ -15,7 +15,7 @@
import numpy as np
from scipy import linalg, interpolate
from scipy.linalg.lapack import get_lapack_funcs
from joblib import Parallel, delayed
from joblib import Parallel

from ._base import LinearModel
from ..base import RegressorMixin, MultiOutputMixin
Expand All @@ -25,6 +25,7 @@
from ..model_selection import check_cv
from ..exceptions import ConvergenceWarning
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed

SOLVE_TRIANGULAR_ARGS = {'check_finite': False}

Expand Down
3 changes: 2 additions & 1 deletion sklearn/linear_model/_logistic.py
Expand Up @@ -16,7 +16,7 @@
import numpy as np
from scipy import optimize, sparse
from scipy.special import expit, logsumexp
from joblib import Parallel, delayed, effective_n_jobs
from joblib import Parallel, effective_n_jobs

from ._base import LinearClassifierMixin, SparseCoefMixin, BaseEstimator
from ._sag import sag_solver
Expand All @@ -32,6 +32,7 @@
from ..utils.validation import _deprecate_positional_args
from ..utils.multiclass import check_classification_targets
from ..utils.fixes import _joblib_parallel_args
from ..utils.fixes import delayed
from ..model_selection import check_cv
from ..metrics import get_scorer

Expand Down
3 changes: 2 additions & 1 deletion sklearn/linear_model/_omp.py
Expand Up @@ -11,12 +11,13 @@
import numpy as np
from scipy import linalg
from scipy.linalg.lapack import get_lapack_funcs
from joblib import Parallel, delayed
from joblib import Parallel

from ._base import LinearModel, _pre_fit
from ..base import RegressorMixin, MultiOutputMixin
from ..utils import as_float_array, check_array
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed
from ..model_selection import check_cv

premature = """ Orthogonal matching pursuit ended prematurely due to linear
Expand Down
3 changes: 2 additions & 1 deletion sklearn/linear_model/_stochastic_gradient.py
Expand Up @@ -9,7 +9,7 @@

from abc import ABCMeta, abstractmethod

from joblib import Parallel, delayed
from joblib import Parallel

from ..base import clone, is_classifier
from ._base import LinearClassifierMixin, SparseCoefMixin
Expand All @@ -20,6 +20,7 @@
from ..utils.multiclass import _check_partial_fit_first_call
from ..utils.validation import check_is_fitted, _check_sample_weight
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed
from ..exceptions import ConvergenceWarning
from ..model_selection import StratifiedShuffleSplit, ShuffleSplit

Expand Down
3 changes: 2 additions & 1 deletion sklearn/linear_model/_theil_sen.py
Expand Up @@ -15,12 +15,13 @@
from scipy import linalg
from scipy.special import binom
from scipy.linalg.lapack import get_lapack_funcs
from joblib import Parallel, delayed, effective_n_jobs
from joblib import Parallel, effective_n_jobs

from ._base import LinearModel
from ..base import RegressorMixin
from ..utils import check_random_state
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed
from ..exceptions import ConvergenceWarning

_EPSILON = np.finfo(np.double).eps
Expand Down
3 changes: 2 additions & 1 deletion sklearn/manifold/_mds.py
Expand Up @@ -6,7 +6,7 @@
# License: BSD

import numpy as np
from joblib import Parallel, delayed, effective_n_jobs
from joblib import Parallel, effective_n_jobs

import warnings

Expand All @@ -15,6 +15,7 @@
from ..utils import check_random_state, check_array, check_symmetric
from ..isotonic import IsotonicRegression
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed


def _smacof_single(dissimilarities, metric=True, n_components=2, init=None,
Expand Down
3 changes: 2 additions & 1 deletion sklearn/metrics/pairwise.py
Expand Up @@ -17,7 +17,7 @@
from scipy.spatial import distance
from scipy.sparse import csr_matrix
from scipy.sparse import issparse
from joblib import Parallel, delayed, effective_n_jobs
from joblib import Parallel, effective_n_jobs

from ..utils.validation import _num_samples
from ..utils.validation import check_non_negative
Expand All @@ -29,6 +29,7 @@
from ..preprocessing import normalize
from ..utils._mask import _get_mask
from ..utils.validation import _deprecate_positional_args
from ..utils.fixes import delayed
from ..utils.fixes import sp_version, parse_version

from ._pairwise_fast import _chi2_kernel_fast, _sparse_manhattan
Expand Down
3 changes: 2 additions & 1 deletion sklearn/model_selection/_search.py
Expand Up @@ -32,12 +32,13 @@
from ._validation import _insert_error_scores
from ._validation import _normalize_score_results
from ..exceptions import NotFittedError
from joblib import Parallel, delayed
from joblib import Parallel
from ..utils import check_random_state
from ..utils.random import sample_without_replacement
from ..utils.validation import indexable, check_is_fitted, _check_fit_params
from ..utils.validation import _deprecate_positional_args
from ..utils.metaestimators import if_delegate_has_method
from ..utils.fixes import delayed
from ..metrics._scorer import _check_multimetric_scoring
from ..metrics import check_scoring
from ..utils import deprecated
Expand Down

0 comments on commit 06d6f8a

Please sign in to comment.