1 ! Copyright (C) 2012 Doug Coleman.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel math math.order math.statistics
4 sequences sequences.private ;
7 TUPLE: windowed-sequence
8 { sequence sequence read-only }
11 INSTANCE: windowed-sequence sequence
13 C: <windowed-sequence> windowed-sequence
15 M: windowed-sequence nth-unsafe
16 [ 1 + ] dip [ n>> dupd [-] swap ] [ sequence>> ] bi <slice> ; inline
18 M: windowed-sequence length
19 sequence>> length ; inline
21 : in-bound ( n sequence -- n' )
22 [ drop 0 ] [ length ] bi clamp ; inline
24 : in-bounds ( a b sequence -- a' b' sequence )
25 [ nip in-bound ] [ nipd in-bound ] [ 2nip ] 3tri ;
27 :: rolling-map ( ... seq n quot: ( ... slice -- ... elt ) -- ... newseq )
29 1 + [ n [-] ] [ seq <slice-unsafe> ] bi quot call
30 ] map-integers ; inline
32 : rolling-sum ( seq n -- newseq )
35 : rolling-mean ( seq n -- newseq )
36 [ mean ] rolling-map ;
38 : rolling-median ( seq n -- newseq )
39 [ median ] rolling-map ;
41 : rolling-supremum ( seq n -- newseq )
42 [ supremum ] rolling-map ;
44 : rolling-infimum ( seq n -- newseq )
45 [ infimum ] rolling-map ;
47 : rolling-count ( ... u n quot: ( ... elt -- ... ? ) -- ... v )
48 '[ _ count ] rolling-map ; inline