Skip to content

Commit 8e58cf5

Browse files
committed
Include inclusive too
1 parent c98e041 commit 8e58cf5

2 files changed

Lines changed: 12 additions & 8 deletions

File tree

Lib/statistics.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,7 +1206,10 @@ def quantiles(data, *, n=4, method='exclusive'):
12061206
result = []
12071207
for i in range(1, n):
12081208
j, delta = divmod(i * m, n)
1209-
interpolated = (data[j] * (n - delta) + data[j + 1] * delta) / n
1209+
if (data[j] == data[j + 1]) or not delta:
1210+
interpolated = data[j] / 1
1211+
else:
1212+
interpolated = (data[j] * (n - delta) + data[j + 1] * delta) / n
12101213
result.append(interpolated)
12111214
return result
12121215

@@ -1221,7 +1224,7 @@ def quantiles(data, *, n=4, method='exclusive'):
12211224
# the interpolation formula which can be off by 1 ULP
12221225
# due to floating-point rounding
12231226
if (data[j - 1] == data[j]) or not delta:
1224-
interpolated = float(data[j - 1])
1227+
interpolated = data[j - 1] / 1
12251228
else:
12261229
interpolated = (data[j - 1] * (n - delta) + data[j] * delta) / n
12271230
result.append(interpolated)

Lib/test/test_statistics.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2663,12 +2663,13 @@ def test_monotonic_with_duplicate_floats(self):
26632663
float.fromhex('0x1.fffffffffffffp+1023'), # near max float
26642664
sys.float_info.min, # smallest normal
26652665
):
2666-
for n in range(2, 20):
2667-
result = quantiles([x, x], n=n, method='exclusive')
2668-
self.assertEqual(result, sorted(result),
2669-
msg=f'x={x}, n={n}')
2670-
self.assertTrue(all(v == x for v in result),
2671-
msg=f'x={x}, n={n}')
2666+
for method in ('exclusive', 'inclusive'):
2667+
for n in range(2, 20):
2668+
result = quantiles([x, x], n=n, method=method)
2669+
self.assertEqual(result, sorted(result),
2670+
msg=f'x={x}, n={n}, method={method!r}')
2671+
self.assertTrue(all(v == x for v in result),
2672+
msg=f'x={x}, n={n}, method={method!r}')
26722673

26732674
def test_equal_sized_groups(self):
26742675
quantiles = statistics.quantiles

0 commit comments

Comments
 (0)