• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

vortex-data / vortex / 16991469020

15 Aug 2025 01:54PM UTC coverage: 86.018% (-1.8%) from 87.855%
16991469020

Pull #4215

github

web-flow
Merge 58201b202 into 62e231a41
Pull Request #4215: Ji/vectors

90 of 1746 new or added lines in 40 files covered. (5.15%)

117 existing lines in 25 files now uncovered.

56661 of 65871 relevant lines covered (86.02%)

614266.74 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/vortex-expr/src/operator/reduce.rs
1
// SPDX-License-Identifier: Apache-2.0
2
// SPDX-FileCopyrightText: Copyright the Vortex contributors
3

4
use std::sync::Arc;
5

6
use vortex_array::pipeline::operators::Operator;
7
use vortex_error::VortexResult;
8

9
use crate::traversal::{FoldUp, Node, NodeExt, NodeFolder, NodeRewriter, Transformed};
10

NEW
11
pub fn reduce_operator(operator: Arc<dyn Operator>) -> VortexResult<Arc<dyn Operator>> {
×
NEW
12
    let operator = reduce_up(operator.clone())?;
×
NEW
13
    reduce_down(operator)
×
NEW
14
}
×
15

NEW
16
pub fn reduce_up(operator: Arc<dyn Operator>) -> VortexResult<Arc<dyn Operator>> {
×
NEW
17
    let mut folder = UpReducer;
×
NEW
18
    operator.fold(&mut folder).map(|t| t.value())
×
NEW
19
}
×
20

NEW
21
pub fn reduce_down(operator: Arc<dyn Operator>) -> VortexResult<Arc<dyn Operator>> {
×
NEW
22
    let mut rewriter = DownReducer;
×
NEW
23
    operator.rewrite(&mut rewriter).map(|t| t.value)
×
NEW
24
}
×
25

26
struct UpReducer;
27

28
impl NodeFolder for UpReducer {
29
    type NodeTy = Arc<dyn Operator>;
30
    type Result = Arc<dyn Operator>;
31

NEW
32
    fn visit_up(
×
NEW
33
        &mut self,
×
NEW
34
        node: Self::NodeTy,
×
NEW
35
        children: Vec<Self::Result>,
×
NEW
36
    ) -> VortexResult<FoldUp<Self::Result>> {
×
37
        Ok(FoldUp::Continue(
NEW
38
            match node.reduce_children(children.as_slice()) {
×
NEW
39
                None => node.with_children(children),
×
NEW
40
                Some(r) => r,
×
41
            },
42
        ))
NEW
43
    }
×
44
}
45

46
struct DownReducer;
47

48
impl NodeRewriter for DownReducer {
49
    type NodeTy = Arc<dyn Operator>;
50

NEW
51
    fn visit_down(&mut self, node: Self::NodeTy) -> VortexResult<Transformed<Self::NodeTy>> {
×
NEW
52
        if node.children_count() != 1 {
×
NEW
53
            return Ok(Transformed::no(node));
×
NEW
54
        }
×
NEW
55
        match node.children()[0].reduce_parent(node.clone()) {
×
NEW
56
            None => Ok(Transformed::no(node)),
×
NEW
57
            Some(r) => Ok(Transformed::yes(r)),
×
58
        }
NEW
59
    }
×
60
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc