https://github.com/python/cpython/commit/4b89c5ebfc7d5d4f008eee0ae6da765dfc28e3a9
commit: 4b89c5ebfc7d5d4f008eee0ae6da765dfc28e3a9
branch: main
author: Raymond Hettinger <[email protected]>
committer: rhettinger <[email protected]>
date: 2024-09-27T09:56:37-07:00
summary:
Improve accuracy of kde() invcdf estimates (gh-124637)
files:
M Lib/statistics.py
diff --git a/Lib/statistics.py b/Lib/statistics.py
index d3dd0d530c31cf..f193fcdc241aa9 100644
--- a/Lib/statistics.py
+++ b/Lib/statistics.py
@@ -870,9 +870,12 @@ def f_inv(y):
return f_inv
def _quartic_invcdf_estimate(p):
+ # A handrolled piecewise approximation. There is no magic here.
sign, p = (1.0, p) if p <= 1/2 else (-1.0, 1.0 - p)
+ if p < 0.0106:
+ return ((2.0 * p) ** 0.3838 - 1.0) * sign
x = (2.0 * p) ** 0.4258865685331 - 1.0
- if p >= 0.004 < 0.499:
+ if p < 0.499:
x += 0.026818732 * sin(7.101753784 * p + 2.73230839482953)
return x * sign
@@ -886,8 +889,11 @@ def quartic_kernel():
return pdf, cdf, invcdf, support
def _triweight_invcdf_estimate(p):
+ # A handrolled piecewise approximation. There is no magic here.
sign, p = (1.0, p) if p <= 1/2 else (-1.0, 1.0 - p)
x = (2.0 * p) ** 0.3400218741872791 - 1.0
+ if 0.00001 < p < 0.499:
+ x -= 0.033 * sin(1.07 * tau * (p - 0.035))
return x * sign
@register('triweight')
_______________________________________________
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]