vortex_array/array/
statistics.rs

1use vortex_scalar::Scalar;
2
3use crate::Array;
4use crate::compute::{Cost, IsConstantOpts, is_constant_opts};
5
6impl dyn Array {
7    pub fn is_constant(&self) -> bool {
8        let opts = IsConstantOpts {
9            cost: Cost::Specialized,
10        };
11        is_constant_opts(self, &opts)
12            .inspect_err(|e| log::warn!("Failed to compute IsConstant: {e}"))
13            .ok()
14            .flatten()
15            .unwrap_or_default()
16    }
17
18    pub fn is_constant_opts(&self, cost: Cost) -> bool {
19        let opts = IsConstantOpts { cost };
20        is_constant_opts(self, &opts)
21            .inspect_err(|e| log::warn!("Failed to compute IsConstant: {e}"))
22            .ok()
23            .flatten()
24            .unwrap_or_default()
25    }
26
27    pub fn as_constant(&self) -> Option<Scalar> {
28        self.is_constant().then(|| self.scalar_at(0).ok()).flatten()
29    }
30}