1use vortex_array::ArrayRef;
5use vortex_array::ArrayView;
6use vortex_array::IntoArray;
7use vortex_array::builtins::ArrayBuiltins;
8use vortex_array::optimizer::rules::ParentRuleSet;
9use vortex_array::scalar_fn::fns::cast::CastReduceAdaptor;
10use vortex_array::scalar_fn::fns::not::NotReduce;
11use vortex_array::scalar_fn::fns::not::NotReduceAdaptor;
12use vortex_error::VortexResult;
13
14use crate::Sparse;
15use crate::SparseExt as _;
16
17pub(crate) static RULES: ParentRuleSet<Sparse> = ParentRuleSet::new(&[
18 ParentRuleSet::lift(&CastReduceAdaptor(Sparse)),
19 ParentRuleSet::lift(&NotReduceAdaptor(Sparse)),
20]);
21
22impl NotReduce for Sparse {
23 fn invert(array: ArrayView<'_, Self>) -> VortexResult<Option<ArrayRef>> {
24 let inverted_fill = array.fill_scalar().as_bool().invert().into_scalar();
25 let inverted_patches = array.patches().map_values(|values| values.not())?;
26 Ok(Some(
27 Sparse::try_new_from_patches(inverted_patches, inverted_fill)?.into_array(),
28 ))
29 }
30}