From 1aa754f910475f6ef7a75966afd48c345db5bae9 Mon Sep 17 00:00:00 2001 From: Thomas Robitaille Date: Mon, 12 Feb 2018 16:50:34 +0000 Subject: [PATCH] Use NumpyRNGContext in test_2d_model for deterministic results --- astropy/modeling/tests/test_constraints.py | 65 ++++++++++++---------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/astropy/modeling/tests/test_constraints.py b/astropy/modeling/tests/test_constraints.py index c69f1619c58..8081736c6ce 100644 --- a/astropy/modeling/tests/test_constraints.py +++ b/astropy/modeling/tests/test_constraints.py @@ -482,38 +482,43 @@ def test_gaussian2d_positive_stddev(): @pytest.mark.skipif('not HAS_SCIPY') def test_2d_model(): # 2D model with LevMarLSQFitter - gauss2d = models.Gaussian2D(10.2, 4.3, 5,2, 1.2, 1.4) + gauss2d = models.Gaussian2D(10.2, 4.3, 5, 2, 1.2, 1.4) fitter = fitting.LevMarLSQFitter() - X = np.linspace(-1, 7) - Y = np.linspace(-1, 7) + X = np.linspace(-1, 7, 200) + Y = np.linspace(-1, 7, 200) x, y = np.meshgrid(X, Y) z = gauss2d(x, y) w = np.ones(x.size) w.shape = x.shape - rsn = RandomState(1234567890) - n = rsn.randn(x.size) - n = np.random.randn(x.size) - n.shape = x.shape - m = fitter(gauss2d, x, y, z+2*n, weights=w) - utils.assert_allclose(m.parameters, gauss2d.parameters, rtol=1e-1) - m = fitter(gauss2d, x, y, z+2*n, weights=None) - utils.assert_allclose(m.parameters, gauss2d.parameters, rtol=1e-1) - # 2D model with LevMarLSQFitter, fixed constraint - gauss2d.x_stddev.fixed = True - m = fitter(gauss2d, x, y, z+2*n, weights=w) - utils.assert_allclose(m.parameters, gauss2d.parameters, rtol=1e-1) - m = fitter(gauss2d, x, y, z+2*n, weights=None) - utils.assert_allclose(m.parameters, gauss2d.parameters, rtol=1e-1) - # Polynomial2D, col_fit_deriv=False - p2 = models.Polynomial2D(1, c0_0=1, c1_0=1.2, c0_1=3.2) - z = p2(x, y) - m = fitter(p2, x, y, z + 2 * n, weights=None) - utils.assert_allclose(m.parameters, p2.parameters, rtol=1.5e-1) - m = fitter(p2, x, y, z + 2 * n, weights=w) - utils.assert_allclose(m.parameters, p2.parameters, rtol=1.5e-1) - # Polynomial2D, col_fit_deriv=False, fixed constraint - p2.c1_0.fixed = True - m = fitter(p2, x, y, z + 2 * n, weights=w) - utils.assert_allclose(m.parameters, p2.parameters, rtol=1.5e-1) - m = fitter(p2, x, y, z + 2 * n, weights=None) - utils.assert_allclose(m.parameters, p2.parameters, rtol=1.5e-1) + from ...utils import NumpyRNGContext + + with NumpyRNGContext(1234567890): + + n = np.random.randn(x.size) + n.shape = x.shape + m = fitter(gauss2d, x, y, z + 2 * n, weights=w) + utils.assert_allclose(m.parameters, gauss2d.parameters, rtol=0.05) + m = fitter(gauss2d, x, y, z + 2 * n, weights=None) + utils.assert_allclose(m.parameters, gauss2d.parameters, rtol=0.05) + + # 2D model with LevMarLSQFitter, fixed constraint + gauss2d.x_stddev.fixed = True + m = fitter(gauss2d, x, y, z + 2 * n, weights=w) + utils.assert_allclose(m.parameters, gauss2d.parameters, rtol=0.05) + m = fitter(gauss2d, x, y, z + 2 * n, weights=None) + utils.assert_allclose(m.parameters, gauss2d.parameters, rtol=0.05) + + # Polynomial2D, col_fit_deriv=False + p2 = models.Polynomial2D(1, c0_0=1, c1_0=1.2, c0_1=3.2) + z = p2(x, y) + m = fitter(p2, x, y, z + 2 * n, weights=None) + utils.assert_allclose(m.parameters, p2.parameters, rtol=0.05) + m = fitter(p2, x, y, z + 2 * n, weights=w) + utils.assert_allclose(m.parameters, p2.parameters, rtol=0.05) + + # Polynomial2D, col_fit_deriv=False, fixed constraint + p2.c1_0.fixed = True + m = fitter(p2, x, y, z + 2 * n, weights=w) + utils.assert_allclose(m.parameters, p2.parameters, rtol=0.05) + m = fitter(p2, x, y, z + 2 * n, weights=None) + utils.assert_allclose(m.parameters, p2.parameters, rtol=0.05)