]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-99155: Fix `NormalDist` pickle with `0` and `1` protocols (GH99156)
authorNikita Sobolev <mail@sobolevn.me>
Mon, 7 Nov 2022 02:56:41 +0000 (05:56 +0300)
committerGitHub <noreply@github.com>
Mon, 7 Nov 2022 02:56:41 +0000 (20:56 -0600)
Lib/statistics.py
Lib/test/test_statistics.py
Misc/NEWS.d/next/Library/2022-11-06-12-44-51.gh-issue-99155.vLZOzi.rst [new file with mode: 0644]

index b4adabd3f05ae817fff8aa6506284871a9d22d34..07d1fd5ba6e98e90bd54abe697e3738a5bef89a5 100644 (file)
@@ -1446,3 +1446,9 @@ class NormalDist:
 
     def __repr__(self):
         return f'{type(self).__name__}(mu={self._mu!r}, sigma={self._sigma!r})'
+
+    def __getstate__(self):
+        return self._mu, self._sigma
+
+    def __setstate__(self, state):
+        self._mu, self._sigma = state
index 05ce79f126590a79551d1e5f168f3c074986b077..31a3cb6b53a6f2ab4f56821df9bd936e7b8a57d5 100644 (file)
@@ -3003,14 +3003,19 @@ class TestNormalDist:
         nd = NormalDist(100, 15)
         self.assertNotEqual(nd, lnd)
 
-    def test_pickle_and_copy(self):
+    def test_copy(self):
         nd = self.module.NormalDist(37.5, 5.625)
         nd1 = copy.copy(nd)
         self.assertEqual(nd, nd1)
         nd2 = copy.deepcopy(nd)
         self.assertEqual(nd, nd2)
-        nd3 = pickle.loads(pickle.dumps(nd))
-        self.assertEqual(nd, nd3)
+
+    def test_pickle(self):
+        nd = self.module.NormalDist(37.5, 5.625)
+        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+            with self.subTest(proto=proto):
+                pickled = pickle.loads(pickle.dumps(nd, protocol=proto))
+                self.assertEqual(nd, pickled)
 
     def test_hashability(self):
         ND = self.module.NormalDist
diff --git a/Misc/NEWS.d/next/Library/2022-11-06-12-44-51.gh-issue-99155.vLZOzi.rst b/Misc/NEWS.d/next/Library/2022-11-06-12-44-51.gh-issue-99155.vLZOzi.rst
new file mode 100644 (file)
index 0000000..a84caa6
--- /dev/null
@@ -0,0 +1 @@
+Fix :class:`statistics.NormalDist` pickle with ``0`` and ``1`` protocols.