vortex_array/vtable/
statistics.rs

1use vortex_error::{VortexExpect, VortexResult};
2
3use crate::Array;
4use crate::encoding::Encoding;
5use crate::stats::{Stat, StatsSet};
6
7/// Encoding VTable for computing array statistics.
8pub trait StatisticsVTable<A> {
9    /// Compute the requested statistic. Can return additional stats.
10    fn compute_statistics(&self, _array: A, _stat: Stat) -> VortexResult<StatsSet> {
11        Ok(StatsSet::default())
12    }
13}
14
15impl<'a, E: Encoding> StatisticsVTable<&'a dyn Array> for E
16where
17    E: StatisticsVTable<&'a E::Array>,
18{
19    fn compute_statistics(&self, array: &'a dyn Array, stat: Stat) -> VortexResult<StatsSet> {
20        let array_ref = array
21            .as_any()
22            .downcast_ref::<E::Array>()
23            .vortex_expect("Failed to downcast array");
24        StatisticsVTable::compute_statistics(self, array_ref, stat)
25    }
26}