[Python-checkins] cpython (2.7): Issue #17149: Fix random.vonmisesvariate to always return results in [0,

mark.dickinson python-checkins at python.org
Sun Feb 10 15:17:42 CET 2013


http://hg.python.org/cpython/rev/6a3d18cede49
changeset:   82129:6a3d18cede49
branch:      2.7
parent:      82122:010b455de0e0
user:        Mark Dickinson <dickinsm at gmail.com>
date:        Sun Feb 10 14:13:40 2013 +0000
summary:
  Issue #17149: Fix random.vonmisesvariate to always return results in [0, 2*math.pi].

files:
  Lib/random.py           |   4 ++--
  Lib/test/test_random.py |  14 ++++++++++++++
  Misc/NEWS               |   3 +++
  3 files changed, 19 insertions(+), 2 deletions(-)


diff --git a/Lib/random.py b/Lib/random.py
--- a/Lib/random.py
+++ b/Lib/random.py
@@ -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 --git a/Lib/test/test_random.py b/Lib/test/test_random.py
--- a/Lib/test/test_random.py
+++ b/Lib/test/test_random.py
@@ -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 --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list