From eba3d75fa9e0afe51a619a6e6ae1ddb1b6e636d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Sch=C3=B6nberger?= Date: Sun, 28 Sep 2014 18:43:32 -0400 Subject: [PATCH] Add sanity checks for input parameters --- skimage/measure/fit.py | 9 +++++++++ skimage/measure/tests/test_fit.py | 13 +++++++++++++ 2 files changed, 22 insertions(+) diff --git a/skimage/measure/fit.py b/skimage/measure/fit.py index d9dd11a8..669b3df3 100644 --- a/skimage/measure/fit.py +++ b/skimage/measure/fit.py @@ -659,6 +659,15 @@ def ransac(data, model_class, min_samples, residual_threshold, best_inlier_residuals_sum = np.inf best_inliers = None + if min_samples < 0: + raise ValueError("`min_samples` must be greater than zero") + + if max_trials < 0: + raise ValueError("`max_trials` must be greater than zero") + + if stop_probability < 0 or stop_probability > 1: + raise ValueError("`stop_probability` must be in range [0, 1]") + if not isinstance(data, list) and not isinstance(data, tuple): data = [data] diff --git a/skimage/measure/tests/test_fit.py b/skimage/measure/tests/test_fit.py index af259777..32d9ef22 100644 --- a/skimage/measure/tests/test_fit.py +++ b/skimage/measure/tests/test_fit.py @@ -237,6 +237,19 @@ def test_ransac_dynamic_max_trials(): assert_equal(_dynamic_max_trials(1, 100, 10, 1), float('inf')) +def test_ransac_invalid_input(): + assert_raises(ValueError, ransac, np.zeros((10, 2)), None, min_samples=-1, + residual_threshold=0) + assert_raises(ValueError, ransac, np.zeros((10, 2)), None, min_samples=2, + residual_threshold=0, max_trials=-1) + assert_raises(ValueError, ransac, np.zeros((10, 2)), None, min_samples=2, + residual_threshold=0, + stop_probability=-1) + assert_raises(ValueError, ransac, np.zeros((10, 2)), None, min_samples=2, + residual_threshold=0, + stop_probability=1.01) + + def test_deprecated_params_attribute(): model = LineModel() model.params = (10, 1)