diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2020-06-13 23:57:17 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-13 23:57:17 (GMT) |
commit | 811e040b6e0241339545c2f055db8259b408802f (patch) | |
tree | 6b9e934c794dbe4ed6f19a18e8badd64d7447801 | |
parent | f8c05bb3a6f25224d7767561ec6a36a737e17779 (diff) | |
download | cpython-811e040b6e0241339545c2f055db8259b408802f.zip cpython-811e040b6e0241339545c2f055db8259b408802f.tar.gz cpython-811e040b6e0241339545c2f055db8259b408802f.tar.bz2 |
bpo-40855: Fix ignored mu and xbar parameters (GH-20835) (GH-20863)
-rw-r--r-- | Lib/statistics.py | 6 | ||||
-rw-r--r-- | Lib/test/test_statistics.py | 12 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-06-12-10-44-15.bpo-40855.jSot83.rst | 2 |
3 files changed, 18 insertions, 2 deletions
diff --git a/Lib/statistics.py b/Lib/statistics.py index 1e95c0b..c5c6e47 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 a9a427b..5b8ad87 100644 --- a/Lib/test/test_statistics.py +++ b/Lib/test/test_statistics.py @@ -2029,6 +2029,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. @@ -2041,6 +2045,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. @@ -2058,6 +2067,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): diff --git a/Misc/NEWS.d/next/Library/2020-06-12-10-44-15.bpo-40855.jSot83.rst b/Misc/NEWS.d/next/Library/2020-06-12-10-44-15.bpo-40855.jSot83.rst new file mode 100644 index 0000000..201d510 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-06-12-10-44-15.bpo-40855.jSot83.rst @@ -0,0 +1,2 @@ +The standard deviation and variance functions in the statistics module were +ignoring their mu and xbar arguments. |