summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorRaymond Hettinger <rhettinger@users.noreply.github.com>2020-06-13 22:55:52 (GMT)
committerGitHub <noreply@github.com>2020-06-13 22:55:52 (GMT)
commitd71ab4f73887a6e2b380ddbbfe35b600d236fd4a (patch)
treedb2209b54126a1f9e476c176105153733ae933c1 /Lib
parentdea3223740127ac13f984c1d38f127ab6701af44 (diff)
downloadcpython-d71ab4f73887a6e2b380ddbbfe35b600d236fd4a.zip
cpython-d71ab4f73887a6e2b380ddbbfe35b600d236fd4a.tar.gz
cpython-d71ab4f73887a6e2b380ddbbfe35b600d236fd4a.tar.bz2
bpo-40855: Fix ignored mu and xbar parameters (GH-20835)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/statistics.py6
-rw-r--r--Lib/test/test_statistics.py12
2 files changed, 16 insertions, 2 deletions
diff --git a/Lib/statistics.py b/Lib/statistics.py
index c76a6ca..93a4633 100644
--- a/Lib/statistics.py
+++ b/Lib/statistics.py
@@ -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.
diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py
index 5c3b1fd..bf415dd 100644
--- a/Lib/test/test_statistics.py
+++ b/Lib/test/test_statistics.py
@@ -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):