kernel_density_estimation/kernel/
uniform.rs

1//! Uniform kernel function.
2
3use crate::float::{float, KDEFloat};
4use crate::kernel::Kernel;
5
6/// Uniform kernel function.
7#[derive(Clone, Copy, Debug)]
8pub struct Uniform;
9
10impl<F: KDEFloat> Kernel<F> for Uniform {
11    fn pdf(&self, x: F) -> F {
12        if x.abs() > F::one() {
13            F::zero()
14        } else {
15            float!(0.5)
16        }
17    }
18}
19
20#[cfg(test)]
21mod tests {
22    use super::Uniform;
23    use crate::kernel::Kernel;
24    use approx::*;
25
26    #[test]
27    fn uniform() {
28        let kernel = Uniform;
29
30        let x = 0.0;
31        let res = kernel.pdf(x);
32        assert_relative_eq!(res, 0.5);
33
34        let x = 2.0;
35        let res = kernel.pdf(x);
36        assert_relative_eq!(res, 0.0);
37
38        let x = -2.0;
39        let res = kernel.pdf(x);
40        assert_relative_eq!(res, 0.0);
41    }
42}