Skip to content

Commit 14da50a

Browse files
committed
[fix] Bring back last sstats field
1 parent 71d3143 commit 14da50a

File tree

2 files changed

+26
-21
lines changed

2 files changed

+26
-21
lines changed

src/taoensso/tufte/stats.cljc

+20-15
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@
238238
^double xsum
239239
^double xmin
240240
^double xmax
241+
^double xlast
241242
^double p25
242243
^double p50
243244
^double p75
@@ -260,15 +261,16 @@
260261
(assert (pos? nx))
261262
(with-meta
262263
{:n nx
263-
:sum (fin (.-xsum ss))
264-
:min (fin (.-xmin ss))
265-
:max (fin (.-xmax ss))
266-
:p25 (fin (.-p25 ss))
267-
:p50 (fin (.-p50 ss))
268-
:p75 (fin (.-p75 ss))
269-
:p90 (fin (.-p90 ss))
270-
:p95 (fin (.-p95 ss))
271-
:p99 (fin (.-p99 ss))
264+
:sum (fin (.-xsum ss))
265+
:min (fin (.-xmin ss))
266+
:max (fin (.-xmax ss))
267+
:last (fin (.-xlast ss))
268+
:p25 (fin (.-p25 ss))
269+
:p50 (fin (.-p50 ss))
270+
:p75 (fin (.-p75 ss))
271+
:p90 (fin (.-p90 ss))
272+
:p95 (fin (.-p95 ss))
273+
:p99 (fin (.-p99 ss))
272274

273275
:mean (/ (.-xsum ss) nx)
274276
:var (/ (.-xvar-sum ss) nx) ; Currently w/o bessel-correction
@@ -296,7 +298,7 @@
296298
(enc/cond
297299
(summary-stats? x) x
298300
(map? x)
299-
(let [{:keys [n sum min max p25 p50 p75 p90 p95 p99
301+
(let [{:keys [n sum min max last p25 p50 p75 p90 p95 p99
300302
#_mean #_var #_mad var-sum mad-sum]} x
301303

302304
floats?
@@ -306,7 +308,7 @@
306308
:else (float-num? sum))]
307309

308310
(SummaryStats. floats?
309-
n sum min max p25 p50 p75 p90 p95 p99 var-sum mad-sum))
311+
n sum min max last p25 p50 p75 p90 p95 p99 var-sum mad-sum))
310312

311313
:else
312314
(let [snums
@@ -320,16 +322,18 @@
320322

321323
(when (pos? nx)
322324
(let [[xmin p25 p50 p75 p90 p95 p99 xmax] (percentiles snums)
323-
xsum (double (reduce rf-sum 0.0 snums))
324-
xbar (/ xsum nx)
325+
xsum (double (reduce rf-sum 0.0 snums))
326+
xbar (/ xsum nx)
327+
xlast (nth snums (dec nx))
325328
[^double xvar-sum ^double xmad-sum]
326329
(enc/reduce-multi
327330
(partial rf-sum-variance xbar) 0.0
328331
(partial rf-sum-abs-deviation xbar) 0.0
329332
snums)]
330333

331334
(SummaryStats. (sorted-doubles? snums)
332-
nx xsum xmin xmax p25 p50 p75 p90 p95 p99 xvar-sum xmad-sum))))))))
335+
nx xsum xmin xmax xlast p25 p50 p75 p90 p95 p99
336+
xvar-sum xmad-sum))))))))
333337

334338
(comment @(summary-stats [1 2 3]))
335339

@@ -373,6 +377,7 @@
373377
xsum2 (.-xsum ss2)
374378
xmin2 (.-xmin ss2)
375379
xmax2 (.-xmax ss2)
380+
xlast2 (.-xlast ss2)
376381
p25-2 (.-p25 ss2)
377382
p50-2 (.-p50 ss2)
378383
p75-2 (.-p75 ss2)
@@ -409,7 +414,7 @@
409414
p99-3 (+ (* nx1-ratio p99-1) (* nx2-ratio p99-2))]
410415

411416
(SummaryStats. xfloats3?
412-
nx3 xsum3 xmin3 xmax3 p25-3 p50-3 p75-3 p90-3 p95-3 p99-3
417+
nx3 xsum3 xmin3 xmax3 xlast2 p25-3 p50-3 p75-3 p90-3 p95-3 p99-3
413418
xvar-sum3 xmad-sum3))
414419
ss1)
415420
ss2)))

test/taoensso/stats_tests.cljc

+6-6
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
(let [key-idx
8181
(into {}
8282
(map-indexed (fn [n k] [k n])
83-
[:n :sum :min :max :p25 :p50 :p75 :p90 :p95 :p99
83+
[:n :sum :min :max :last :p25 :p50 :p75 :p90 :p95 :p99
8484
:mean :var :mad :var-sum :mad-sum :meta]))
8585

8686
comparator (fn [k1 k2] (< (long (get key-idx k1 -1)) (long (get key-idx k2 -1))))]
@@ -105,12 +105,12 @@
105105

106106
(is
107107
(= (sorted-sstats @(stats/summary-stats (range 1 1001)))
108-
{:n 1000, :sum 500500, :min 1, :max 1000, :p25 251, :p50 501, :p75 750, :p90 900, :p95 950, :p99 990,
108+
{:n 1000, :sum 500500, :min 1, :max 1000, :last 1000, :p25 251, :p50 501, :p75 750, :p90 900, :p95 950, :p99 990,
109109
:mean 500.5, :var 83333.25, :mad 250.0, :var-sum 8.333325E7, :mad-sum 250000.0, :meta {:floats? false}}))
110110

111111
(is
112112
(= (sorted-sstats @(stats/summary-stats (range 0.5 1000)))
113-
{:n 1000, :sum 500000.0, :min 0.5, :max 999.5, :p25 250.5, :p50 500.5, :p75 749.5, :p90 899.5, :p95 949.5, :p99 989.5,
113+
{:n 1000, :sum 500000.0, :min 0.5, :max 999.5, :last 999.5, :p25 250.5, :p50 500.5, :p75 749.5, :p90 899.5, :p95 949.5, :p99 989.5,
114114
:mean 500.0, :var 83333.25, :mad 250.0, :var-sum 8.333325E7, :mad-sum 250000.0, :meta {:floats? true}}))
115115

116116
(is
@@ -119,7 +119,7 @@
119119
(stats/summary-stats (range 0 900))
120120
(stats/summary-stats (range 200 500))))
121121

122-
{:n 1200, :sum 509400, :min 0, :max 899, :p25 238, :p50 425, :p75 612, :p90 724, :p95 762, :p99 792,
122+
{:n 1200, :sum 509400, :min 0, :max 899, :last 499, :p25 238, :p50 425, :p75 612, :p90 724, :p95 762, :p99 792,
123123
:mean 424.5, :var 52499.916666666664, :mad 187.5, :var-sum 6.29999E7, :mad-sum 225000.0, :meta {:floats? false}}))
124124

125125
(is
@@ -128,7 +128,7 @@
128128
(stats/summary-stats (range 0.5 900))
129129
(stats/summary-stats (range 200.5 500))))
130130

131-
{:n 1200, :sum 510000.0, :min 0.5, :max 899.5, :p25 238.0, :p50 425.5, :p75 612.0, :p90 724.5, :p95 762.0, :p99 792.0,
131+
{:n 1200, :sum 510000.0, :min 0.5, :max 899.5, :last 499.5, :p25 238.0, :p50 425.5, :p75 612.0, :p90 724.5, :p95 762.0, :p99 792.0,
132132
:mean 425.0, :var 52499.916666666664, :mad 187.5, :var-sum 6.29999E7, :mad-sum 225000.0, :meta {:floats? true}}))
133133

134134
(is
@@ -138,7 +138,7 @@
138138
(stats/summary-stats (range 0 900))
139139
(stats/summary-stats (range 200.5 500))))
140140

141-
{:n 1200, :sum 509550.0, :min 0.0, :max 899.0, :p25 237.625, :p50 425.125, :p75 611.625, :p90 724.125, :p95 761.625, :p99 791.625,
141+
{:n 1200, :sum 509550.0, :min 0.0, :max 899.0, :last 499.5, :p25 237.625, :p50 425.125, :p75 611.625, :p90 724.125, :p95 761.625, :p99 791.625,
142142
:mean 424.625, :var 52499.916666666664, :mad 187.5, :var-sum 6.29999E7, :mad-sum 225000.0, :meta {:floats? true}}))
143143

144144
(is (nil? (ss-merging-error 10 100 10)))

0 commit comments

Comments
 (0)