Skip to main content

vortex_sparse/
rules.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use 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}