https://github.com/python/cpython/commit/d475f4d3787de4772856eb4ac6881157bb49c1aa commit: d475f4d3787de4772856eb4ac6881157bb49c1aa branch: 3.13 author: lighting9999 <[email protected]> committer: hugovk <[email protected]> date: 2026-07-29T21:01:54+03:00 summary:
[3.13] gh-149221:Fix binomialvariate Function for random module (#149279) Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> Co-authored-by: Hugo van Kemenade <[email protected]> files: A Misc/NEWS.d/next/Library/2026-05-02-13-54-19.gh-issue-149221.__KOks.rst M Lib/random.py M Lib/test/test_random.py diff --git a/Lib/random.py b/Lib/random.py index 7bb3c9a6fa08c4..25cf9bb42d22c0 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -828,7 +828,11 @@ def binomialvariate(self, n=1, p=0.5): if not c: return x while True: - y += _floor(_log2(random()) / c) + 1 + try: + y += _floor(_log2(random()) / c) + 1 + except ValueError: + # Reject case where random() returned 0.0 + continue if y > n: return x x += 1 diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index 3c4aa91452443b..1e7be504bff24e 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -1101,6 +1101,13 @@ def test_avg_std(self): self.assertAlmostEqual(s2/(N-1), sigmasqrd, places=2, msg='%s%r' % (variate.__name__, args)) + def test_binomialvariate_log_zero(self): + # gh-149222: Variety random() return 0.0 no input Error + with unittest.mock.patch.object(random.Random, 'random', side_effect=[0.0] + [0.5] * 20): + result = random.binomialvariate(10, 0.5) + self.assertIsInstance(result, int) + self.assertIn(result, range(11)) + def test_binomialvariate_btrs_random_zero(self): for p, expected in ((0.25, 25), (0.75, 75)): with self.subTest(p=p): diff --git a/Misc/NEWS.d/next/Library/2026-05-02-13-54-19.gh-issue-149221.__KOks.rst b/Misc/NEWS.d/next/Library/2026-05-02-13-54-19.gh-issue-149221.__KOks.rst new file mode 100644 index 00000000000000..fab2b0f6a23489 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-05-02-13-54-19.gh-issue-149221.__KOks.rst @@ -0,0 +1 @@ +Catch rare math domain error for :func:`random.binomialvariate`. _______________________________________________ Python-checkins mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3//lists/python-checkins.python.org Member address: [email protected]
