use vortex_error::VortexResult;
use crate::arrays::ListViewArray;
use crate::arrays::ListViewVTable;
use crate::compute::IsConstantKernel;
use crate::compute::IsConstantKernelAdapter;
use crate::compute::IsConstantOpts;
use crate::compute::is_constant_opts;
use crate::register_kernel;
impl IsConstantKernel for ListViewVTable {
fn is_constant(
&self,
array: &ListViewArray,
opts: &IsConstantOpts,
) -> VortexResult<Option<bool>> {
if !is_constant_opts(array.sizes(), opts)?.unwrap_or_default() {
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());