]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Micro-optimizations for the statistics module (#152618)
authorRaymond Hettinger <rhettinger@users.noreply.github.com>
Mon, 29 Jun 2026 19:12:09 +0000 (14:12 -0500)
committerGitHub <noreply@github.com>
Mon, 29 Jun 2026 19:12:09 +0000 (14:12 -0500)
Lib/statistics.py

index 01ca6c51dafcafe7aa69567270619e6c4559956a..758b5b58848fb98bcd75b82e21d1540c251a6d2c 100644 (file)
@@ -894,7 +894,7 @@ def _quartic_invcdf_estimate(p):
 
 @register('quartic', 'biweight')
 def quartic_kernel():
-    pdf = lambda t: 15/16 * (1.0 - t * t) ** 2
+    pdf = lambda t: 15/16 * (u := 1.0 - t * t) * u
     cdf = lambda t: sumprod((3/16, -5/8, 15/16, 1/2),
                             (t**5, t**3, t, 1.0))
     invcdf = _newton_raphson(_quartic_invcdf_estimate, f=cdf, f_prime=pdf)
@@ -1486,15 +1486,13 @@ def _sum(data):
     """
     count = 0
     types = set()
-    types_add = types.add
     partials = {}
-    partials_get = partials.get
 
     for typ, values in groupby(data, type):
-        types_add(typ)
+        types.add(typ)
         for n, d in map(_exact_ratio, values):
             count += 1
-            partials[d] = partials_get(d, 0) + n
+            partials[d] = partials.get(d, 0) + n
 
     if None in partials:
         # The sum will be a NAN or INF. We can ignore all the finite
@@ -1524,12 +1522,11 @@ def _ss(data, c=None):
 
     count = 0
     types = set()
-    types_add = types.add
     sx_partials = defaultdict(int)
     sxx_partials = defaultdict(int)
 
     for typ, values in groupby(data, type):
-        types_add(typ)
+        types.add(typ)
         for n, d in map(_exact_ratio, values):
             count += 1
             sx_partials[d] += n