mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	Issue #17149: Fix random.vonmisesvariate to always return results in [0, 2*math.pi].
This commit is contained in:
		
							parent
							
								
									497cee456c
								
							
						
					
					
						commit
						be5f91957f
					
				
					 3 changed files with 19 additions and 2 deletions
				
			
		| 
						 | 
					@ -449,9 +449,9 @@ def vonmisesvariate(self, mu, kappa):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        u3 = random()
 | 
					        u3 = random()
 | 
				
			||||||
        if u3 > 0.5:
 | 
					        if u3 > 0.5:
 | 
				
			||||||
            theta = (mu % TWOPI) + _acos(f)
 | 
					            theta = (mu + _acos(f)) % TWOPI
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            theta = (mu % TWOPI) - _acos(f)
 | 
					            theta = (mu - _acos(f)) % TWOPI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return theta
 | 
					        return theta
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -475,6 +475,20 @@ def test_avg_std(self):
 | 
				
			||||||
            self.assertAlmostEqual(s1/N, mu, places=2)
 | 
					            self.assertAlmostEqual(s1/N, mu, places=2)
 | 
				
			||||||
            self.assertAlmostEqual(s2/(N-1), sigmasqrd, places=2)
 | 
					            self.assertAlmostEqual(s2/(N-1), sigmasqrd, places=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):
 | 
					class TestModule(unittest.TestCase):
 | 
				
			||||||
    def testMagicConstants(self):
 | 
					    def testMagicConstants(self):
 | 
				
			||||||
        self.assertAlmostEqual(random.NV_MAGICCONST, 1.71552776992141)
 | 
					        self.assertAlmostEqual(random.NV_MAGICCONST, 1.71552776992141)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -218,6 +218,9 @@ Core and Builtins
 | 
				
			||||||
Library
 | 
					Library
 | 
				
			||||||
-------
 | 
					-------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Issue #17149: Fix random.vonmisesvariate to always return results in
 | 
				
			||||||
 | 
					  [0, 2*math.pi].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Issue #1470548: XMLGenerator now works with binary output streams.
 | 
					- Issue #1470548: XMLGenerator now works with binary output streams.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Issue #6975: os.path.realpath() now correctly resolves multiple nested
 | 
					- Issue #6975: os.path.realpath() now correctly resolves multiple nested
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue