use vortex_error::VortexResult;
use crate::arrays::{ListViewArray, ListViewVTable};
use crate::compute::{IsConstantKernel, IsConstantKernelAdapter, IsConstantOpts};
use crate::register_kernel;
impl IsConstantKernel for ListViewVTable {
fn is_constant(
&self,
array: &ListViewArray,
opts: &IsConstantOpts,
) -> VortexResult<Option<bool>> {
if !array.sizes().is_constant_opts(opts.cost) {
return Ok(Some(false));
}
if opts.is_negligible_cost() {
return Ok(None);
}
debug_assert!(
array.len() > 1,
"precondition for `is_constant` is incorrect"
);
let first_scalar = array.scalar_at(0);
for i in 1..array.len() {
if array.scalar_at(i) != first_scalar {
return Ok(Some(false));
}
}
Ok(Some(true))
}
}
register_kernel!(IsConstantKernelAdapter(ListViewVTable).lift());