addKdeToArquero = aq => aq.addWindowFunction(
'kde',
{
create: (scale = 1, distributionGenerator = normalDistributionGenerator) => ({
init: state => state,
value: (w, f) => {
const normal = distributionGenerator(w.index, scale)
const windowSize = w.i1 - w.i0
return d3.range(w.i0 - windowSize, w.i1 + windowSize).reduce((acc, i) => {
if (i < w.i0) return acc + (w.value(w.i0, f) || 0) * normal(i)
if (i > w.i1) return acc + (w.value(w.i1, f) || 0) * normal(i)
return acc + (w.value(i, f) || 0) * normal(i)
}, 0)
},
}),
param: [1, 1],
},
{ override: true }
)