bpo-40855: Fix ignored mu and xbar parameters (GH-20835)

This commit is contained in:
Raymond Hettinger 2020-06-13 15:55:52 -07:00 committed by GitHub
parent dea3223740
commit d71ab4f738
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 2 deletions

View File

@ -682,8 +682,10 @@ def _ss(data, c=None):
calculated from ``c`` as given. Use the second case with care, as it can
lead to garbage results.
"""
if c is None:
c = mean(data)
if c is not None:
T, total, count = _sum((x-c)**2 for x in data)
return (T, total)
c = mean(data)
T, total, count = _sum((x-c)**2 for x in data)
# The following sum should mathematically equal zero, but due to rounding
# error may not.

View File

@ -2089,6 +2089,10 @@ class TestVariance(VarianceStdevMixin, NumericTestCase, UnivariateTypeMixin):
self.assertEqual(result, exact)
self.assertIsInstance(result, Decimal)
def test_center_not_at_mean(self):
data = (1.0, 2.0)
self.assertEqual(self.func(data), 0.5)
self.assertEqual(self.func(data, xbar=2.0), 1.0)
class TestPStdev(VarianceStdevMixin, NumericTestCase):
# Tests for population standard deviation.
@ -2101,6 +2105,11 @@ class TestPStdev(VarianceStdevMixin, NumericTestCase):
expected = math.sqrt(statistics.pvariance(data))
self.assertEqual(self.func(data), expected)
def test_center_not_at_mean(self):
# See issue: 40855
data = (3, 6, 7, 10)
self.assertEqual(self.func(data), 2.5)
self.assertEqual(self.func(data, mu=0.5), 6.5)
class TestStdev(VarianceStdevMixin, NumericTestCase):
# Tests for sample standard deviation.
@ -2118,6 +2127,9 @@ class TestStdev(VarianceStdevMixin, NumericTestCase):
expected = math.sqrt(statistics.variance(data))
self.assertEqual(self.func(data), expected)
def test_center_not_at_mean(self):
data = (1.0, 2.0)
self.assertEqual(self.func(data, xbar=2.0), 1.0)
class TestGeometricMean(unittest.TestCase):

View File

@ -0,0 +1,2 @@
The standard deviation and variance functions in the statistics module were
ignoring their mu and xbar arguments.