Skip to content

Commit 8ad6f0f

Browse files
committed
CrossValidation & co.: handle internal cross-validation
1 parent 3c4264b commit 8ad6f0f

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

Orange/evaluation/testing.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,12 @@ def _is_picklable(obj):
331331
warnings.warn("Not all arguments (learners) are picklable. "
332332
"Setting n_jobs=1", OrangeWarning)
333333

334+
if n_jobs > 1 and mp.current_process().daemon:
335+
n_jobs = 1
336+
warnings.warn("Worker subprocesses cannot spawn new worker "
337+
"subprocesses (e.g. parameter tuning with internal "
338+
"cross-validation). Setting n_jobs=1", OrangeWarning)
339+
334340
# Workaround for NumPy locking on Macintosh.
335341
# https://pythonhosted.org/joblib/parallel.html#bad-interaction-of-multiprocessing-and-third-party-libraries
336342
mp_ctx = mp.get_context(

Orange/tests/test_evaluation_testing.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ def test_no_data(self):
2929
learners=[NaiveBayesLearner()])
3030

3131

32+
class _ParameterTuningLearner(MajorityLearner):
33+
def __call__(self, data):
34+
learner = MajorityLearner()
35+
CrossValidation(data, [learner], k=2)
36+
return learner(data)
37+
38+
3239
# noinspection PyUnresolvedReferences
3340
class CommonSamplingTests(unittest.TestCase):
3441
@classmethod
@@ -210,6 +217,9 @@ class NonPicklableLearner(MajorityLearner):
210217
self.assertWarns(OrangeWarning,
211218
CrossValidation, self.iris, [NonPicklableLearner()], k=3)
212219

220+
def test_internal_cv(self):
221+
# This test just covers; can't catch warnings from subprocesses
222+
CrossValidation(self.iris, [_ParameterTuningLearner()], k=2)
213223

214224
class LeaveOneOutTestCase(CommonSamplingTests):
215225
def test_results(self):

0 commit comments

Comments
 (0)