Skip to content

Commit 2fc3a85

Browse files
rththomasjpfan
authored andcommitted
MAINT Use isinstance(x, numbers.Integral) to check for integer dtype (scikit-learn#14004)
1 parent 05b12cf commit 2fc3a85

File tree

15 files changed

+29
-31
lines changed

15 files changed

+29
-31
lines changed

benchmarks/bench_plot_nmf.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from sklearn.decomposition.nmf import NMF
2222
from sklearn.decomposition.nmf import _initialize_nmf
2323
from sklearn.decomposition.nmf import _beta_divergence
24-
from sklearn.decomposition.nmf import INTEGER_TYPES, _check_init
24+
from sklearn.decomposition.nmf import _check_init
2525
from sklearn.exceptions import ConvergenceWarning
2626
from sklearn.utils.extmath import safe_sparse_dot, squared_norm
2727
from sklearn.utils import check_array
@@ -236,11 +236,12 @@ def _fit_transform(self, X, y=None, W=None, H=None, update_H=True):
236236
if n_components is None:
237237
n_components = n_features
238238

239-
if (not isinstance(n_components, INTEGER_TYPES) or
239+
if (not isinstance(n_components, numbers.Integral) or
240240
n_components <= 0):
241241
raise ValueError("Number of components must be a positive integer;"
242242
" got (n_components=%r)" % n_components)
243-
if not isinstance(self.max_iter, INTEGER_TYPES) or self.max_iter < 0:
243+
if (not isinstance(self.max_iter, numbers.Integral) or
244+
self.max_iter < 0):
244245
raise ValueError("Maximum number of iterations must be a positive "
245246
"integer; got (max_iter=%r)" % self.max_iter)
246247
if not isinstance(self.tol, numbers.Number) or self.tol < 0:

sklearn/decomposition/nmf.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424

2525
EPSILON = np.finfo(np.float32).eps
2626

27-
INTEGER_TYPES = (numbers.Integral, np.integer)
28-
2927

3028
def norm(x):
3129
"""Dot product-based Euclidean norm implementation
@@ -1011,10 +1009,10 @@ def non_negative_factorization(X, W=None, H=None, n_components=None,
10111009
if n_components is None:
10121010
n_components = n_features
10131011

1014-
if not isinstance(n_components, INTEGER_TYPES) or n_components <= 0:
1012+
if not isinstance(n_components, numbers.Integral) or n_components <= 0:
10151013
raise ValueError("Number of components must be a positive integer;"
10161014
" got (n_components=%r)" % n_components)
1017-
if not isinstance(max_iter, INTEGER_TYPES) or max_iter < 0:
1015+
if not isinstance(max_iter, numbers.Integral) or max_iter < 0:
10181016
raise ValueError("Maximum number of iterations must be a positive "
10191017
"integer; got (max_iter=%r)" % max_iter)
10201018
if not isinstance(tol, numbers.Number) or tol < 0:

sklearn/decomposition/pca.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ def _fit_full(self, X, n_components):
422422
"svd_solver='full'"
423423
% (n_components, min(n_samples, n_features)))
424424
elif n_components >= 1:
425-
if not isinstance(n_components, (numbers.Integral, np.integer)):
425+
if not isinstance(n_components, numbers.Integral):
426426
raise ValueError("n_components=%r must be of type int "
427427
"when greater than or equal to 1, "
428428
"was of type=%r"
@@ -487,7 +487,7 @@ def _fit_truncated(self, X, n_components, svd_solver):
487487
"svd_solver='%s'"
488488
% (n_components, min(n_samples, n_features),
489489
svd_solver))
490-
elif not isinstance(n_components, (numbers.Integral, np.integer)):
490+
elif not isinstance(n_components, numbers.Integral):
491491
raise ValueError("n_components=%r must be of type int "
492492
"when greater than or equal to 1, was of type=%r"
493493
% (n_components, type(n_components)))

sklearn/ensemble/bagging.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ def _fit(self, X, y, max_samples=None, max_depth=None, sample_weight=None):
298298
# Validate max_samples
299299
if max_samples is None:
300300
max_samples = self.max_samples
301-
elif not isinstance(max_samples, (numbers.Integral, np.integer)):
301+
elif not isinstance(max_samples, numbers.Integral):
302302
max_samples = int(max_samples * X.shape[0])
303303

304304
if not (0 < max_samples <= X.shape[0]):
@@ -308,7 +308,7 @@ def _fit(self, X, y, max_samples=None, max_depth=None, sample_weight=None):
308308
self._max_samples = max_samples
309309

310310
# Validate max_features
311-
if isinstance(self.max_features, (numbers.Integral, np.integer)):
311+
if isinstance(self.max_features, numbers.Integral):
312312
max_features = self.max_features
313313
elif isinstance(self.max_features, np.float):
314314
max_features = self.max_features * self.n_features_

sklearn/ensemble/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def __init__(self, base_estimator, n_estimators=10,
101101
def _validate_estimator(self, default=None):
102102
"""Check the estimator and the n_estimator attribute, set the
103103
`base_estimator_` attribute."""
104-
if not isinstance(self.n_estimators, (numbers.Integral, np.integer)):
104+
if not isinstance(self.n_estimators, numbers.Integral):
105105
raise ValueError("n_estimators must be an integer, "
106106
"got {0}.".format(type(self.n_estimators)))
107107

sklearn/ensemble/gradient_boosting.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,7 +1314,7 @@ def _check_params(self):
13141314
"or 'log2'." % self.max_features)
13151315
elif self.max_features is None:
13161316
max_features = self.n_features_
1317-
elif isinstance(self.max_features, (numbers.Integral, np.integer)):
1317+
elif isinstance(self.max_features, numbers.Integral):
13181318
max_features = self.max_features
13191319
else: # float
13201320
if 0. < self.max_features <= 1.:
@@ -1326,7 +1326,7 @@ def _check_params(self):
13261326
self.max_features_ = max_features
13271327

13281328
if not isinstance(self.n_iter_no_change,
1329-
(numbers.Integral, np.integer, type(None))):
1329+
(numbers.Integral, type(None))):
13301330
raise ValueError("n_iter_no_change should either be None or an "
13311331
"integer. %r was passed"
13321332
% self.n_iter_no_change)

sklearn/ensemble/iforest.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323

2424
__all__ = ["IsolationForest"]
2525

26-
INTEGER_TYPES = (numbers.Integral, np.integer)
27-
2826

2927
class IsolationForest(BaseBagging, OutlierMixin):
3028
"""Isolation Forest Algorithm
@@ -256,7 +254,7 @@ def fit(self, X, y=None, sample_weight=None):
256254
'Valid choices are: "auto", int or'
257255
'float' % self.max_samples)
258256

259-
elif isinstance(self.max_samples, INTEGER_TYPES):
257+
elif isinstance(self.max_samples, numbers.Integral):
260258
if self.max_samples > n_samples:
261259
warn("max_samples (%s) is greater than the "
262260
"total number of samples (%s). max_samples "

sklearn/feature_extraction/hashing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def __init__(self, n_features=(2 ** 20), input_type="dict",
9696
def _validate_params(n_features, input_type):
9797
# strangely, np.int16 instances are not instances of Integral,
9898
# while np.int64 instances are...
99-
if not isinstance(n_features, (numbers.Integral, np.integer)):
99+
if not isinstance(n_features, numbers.Integral):
100100
raise TypeError("n_features must be integral, got %r (%s)."
101101
% (n_features, type(n_features)))
102102
elif n_features < 1 or n_features >= 2 ** 31:

sklearn/model_selection/_search.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from collections.abc import Mapping, Sequence, Iterable
1616
from functools import partial, reduce
1717
from itertools import product
18+
import numbers
1819
import operator
1920
import time
2021
import warnings
@@ -693,7 +694,7 @@ def evaluate_candidates(candidate_params):
693694
# parameter set.
694695
if callable(self.refit):
695696
self.best_index_ = self.refit(results)
696-
if not isinstance(self.best_index_, (int, np.integer)):
697+
if not isinstance(self.best_index_, numbers.Integral):
697698
raise TypeError('best_index_ returned is not an integer')
698699
if (self.best_index_ < 0 or
699700
self.best_index_ >= len(results["params"])):

sklearn/model_selection/_split.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1075,7 +1075,7 @@ class _RepeatedSplits(metaclass=ABCMeta):
10751075
and shuffle.
10761076
"""
10771077
def __init__(self, cv, n_repeats=10, random_state=None, **cvargs):
1078-
if not isinstance(n_repeats, (np.integer, numbers.Integral)):
1078+
if not isinstance(n_repeats, numbers.Integral):
10791079
raise ValueError("Number of repetitions must be of Integral type.")
10801080

10811081
if n_repeats <= 0:

0 commit comments

Comments
 (0)