(original) (raw)

changeset: 82129:6a3d18cede49 branch: 2.7 parent: 82122:010b455de0e0 user: Mark Dickinson dickinsm@gmail.com date: Sun Feb 10 14:13:40 2013 +0000 files: Lib/random.py Lib/test/test_random.py Misc/NEWS description: Issue #17149: Fix random.vonmisesvariate to always return results in [0, 2*math.pi]. diff -r 010b455de0e0 -r 6a3d18cede49 Lib/random.py --- a/Lib/random.py Sun Feb 10 14:26:08 2013 +0200 +++ b/Lib/random.py Sun Feb 10 14:13:40 2013 +0000 @@ -475,9 +475,9 @@ u3 = random() if u3 > 0.5: - theta = (mu % TWOPI) + _acos(f) + theta = (mu + _acos(f)) % TWOPI else: - theta = (mu % TWOPI) - _acos(f) + theta = (mu - _acos(f)) % TWOPI return theta diff -r 010b455de0e0 -r 6a3d18cede49 Lib/test/test_random.py --- a/Lib/test/test_random.py Sun Feb 10 14:26:08 2013 +0200 +++ b/Lib/test/test_random.py Sun Feb 10 14:13:40 2013 +0000 @@ -533,6 +533,20 @@ self.assertAlmostEqual(s1/N, mu, 2) self.assertAlmostEqual(s2/(N-1), sigmasqrd, 2) + def test_von_mises_range(self): + # Issue 17149: von mises variates were not consistently in the + # range [0, 2*PI]. + g = random.Random() + N = 100 + for mu in 0.0, 0.1, 3.1, 6.2: + for kappa in 0.0, 2.3, 500.0: + for _ in range(N): + sample = g.vonmisesvariate(mu, kappa) + self.assertTrue( + 0 <= sample <= random.TWOPI, + msg=("vonmisesvariate({}, {}) produced a result {} out" + " of range [0, 2*pi]").format(mu, kappa, sample)) + class TestModule(unittest.TestCase): def testMagicConstants(self): self.assertAlmostEqual(random.NV_MAGICCONST, 1.71552776992141) diff -r 010b455de0e0 -r 6a3d18cede49 Misc/NEWS --- a/Misc/NEWS Sun Feb 10 14:26:08 2013 +0200 +++ b/Misc/NEWS Sun Feb 10 14:13:40 2013 +0000 @@ -202,6 +202,9 @@ Library ------- +- Issue #17149: Fix random.vonmisesvariate to always return results in + the range [0, 2*math.pi]. + - Issue #1470548: XMLGenerator now works with UTF-16 and UTF-32 encodings. - Issue #6975: os.path.realpath() now correctly resolves multiple nested /dickinsm@gmail.com