Skip to content

Commit 3c52932

Browse files
committed
update
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
1 parent 415286d commit 3c52932

File tree

10 files changed

+185
-111
lines changed

10 files changed

+185
-111
lines changed

vortex-array/src/expr/exprs/get_item/transform.rs

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ use vortex_error::VortexResult;
55

66
use crate::expr::exprs::get_item::GetItem;
77
use crate::expr::exprs::pack::Pack;
8-
use crate::expr::transform::ReduceRule;
9-
use crate::expr::transform::rules::RewriteContext;
8+
use crate::expr::transform::rules::{ReduceRule, RuleContext};
109
use crate::expr::{Expression, ExpressionView};
1110

1211
/// Rewrite rule: `pack(l_1: e_1, ..., l_i: e_i, ..., l_n: e_n).get_item(l_i) = e_i`
@@ -15,11 +14,11 @@ use crate::expr::{Expression, ExpressionView};
1514
/// expression instead of materializing the pack.
1615
pub struct PackGetItemRule;
1716

18-
impl ReduceRule<GetItem, &dyn RewriteContext> for PackGetItemRule {
17+
impl ReduceRule<GetItem, RuleContext> for PackGetItemRule {
1918
fn reduce(
2019
&self,
2120
get_item: &ExpressionView<GetItem>,
22-
_ctx: &dyn RewriteContext,
21+
_ctx: &RuleContext,
2322
) -> VortexResult<Option<Expression>> {
2423
if let Some(pack) = get_item.child(0).as_opt::<Pack>() {
2524
let field_expr = pack.field(get_item.data())?;
@@ -41,8 +40,8 @@ mod tests {
4140
use crate::expr::exprs::literal::lit;
4241
use crate::expr::exprs::pack::pack;
4342
use crate::expr::session::ExprSession;
44-
use crate::expr::transform::rules::RootRewriteContext;
45-
use crate::expr::transform::{ReduceRule, simplify_typed};
43+
use crate::expr::transform::rules::{ReduceRule, RuleContext};
44+
use crate::expr::transform::simplify_typed;
4645

4746
#[test]
4847
fn test_pack_get_item_rule() {
@@ -52,12 +51,8 @@ mod tests {
5251
let pack_expr = pack([("a", lit(1)), ("b", lit(2))], NonNullable);
5352
let get_item_expr = get_item("b", pack_expr);
5453

55-
// Create a dummy context
56-
let dtype = DType::Primitive(PType::I32, NonNullable);
57-
let ctx = RootRewriteContext { dtype: &dtype };
58-
5954
let get_item_view = get_item_expr.as_::<GetItem>();
60-
let result = rule.reduce(&get_item_view, &ctx).unwrap();
55+
let result = rule.reduce(&get_item_view, &RuleContext).unwrap();
6156

6257
assert!(result.is_some());
6358
assert_eq!(&result.unwrap(), &lit(2));
@@ -71,11 +66,8 @@ mod tests {
7166
let lit_expr = lit(42);
7267
let get_item_expr = get_item("x", lit_expr);
7368

74-
let dtype = DType::Primitive(PType::I32, NonNullable);
75-
let ctx = RootRewriteContext { dtype: &dtype };
76-
7769
let get_item_view = get_item_expr.as_::<GetItem>();
78-
let result = rule.reduce(&get_item_view, &ctx).unwrap();
70+
let result = rule.reduce(&get_item_view, &RuleContext).unwrap();
7971

8072
assert!(result.is_none());
8173
}

vortex-array/src/expr/exprs/merge/transform.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,19 @@ use vortex_utils::aliases::hash_set::HashSet;
88
use crate::expr::exprs::get_item::get_item;
99
use crate::expr::exprs::merge::{DuplicateHandling, Merge};
1010
use crate::expr::exprs::pack::pack;
11-
use crate::expr::transform::TypedRewriteContext;
12-
use crate::expr::transform::rules::ReduceRule;
11+
use crate::expr::transform::rules::{ReduceRule, TypedRuleContext};
1312
use crate::expr::{Expression, ExpressionView};
1413

1514
/// Rule that removes Merge expressions by converting them to Pack + GetItem.
1615
///
1716
/// Transforms: `merge([struct1, struct2])` → `pack(field1: get_item("field1", struct1), field2: get_item("field2", struct2), ...)`
1817
pub struct RemoveMergeRule;
1918

20-
impl ReduceRule<Merge, &dyn TypedRewriteContext> for RemoveMergeRule {
19+
impl ReduceRule<Merge, TypedRuleContext> for RemoveMergeRule {
2120
fn reduce(
2221
&self,
2322
merge: &ExpressionView<Merge>,
24-
ctx: &dyn TypedRewriteContext,
23+
ctx: &TypedRuleContext,
2524
) -> VortexResult<Option<Expression>> {
2625
let merge_dtype = merge.return_dtype(ctx.dtype())?;
2726
let mut names = Vec::with_capacity(merge.children().len() * 2);
@@ -82,8 +81,7 @@ mod tests {
8281
use crate::expr::exprs::merge::{DuplicateHandling, Merge, merge_opts};
8382
use crate::expr::exprs::pack::Pack;
8483
use crate::expr::exprs::root::root;
85-
use crate::expr::transform::RootRewriteContext;
86-
use crate::expr::transform::rules::ReduceRule;
84+
use crate::expr::transform::rules::{ReduceRule, TypedRuleContext};
8785

8886
#[test]
8987
fn test_remove_merge() {
@@ -100,7 +98,7 @@ mod tests {
10098
DuplicateHandling::RightMost,
10199
);
102100

103-
let ctx = RootRewriteContext { dtype: &dtype };
101+
let ctx = TypedRuleContext::new(dtype.clone());
104102
let rule = RemoveMergeRule;
105103
let merge_view = e.as_::<Merge>();
106104
let result = rule.reduce(&merge_view, &ctx).unwrap();

vortex-array/src/expr/exprs/select/transform.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,19 @@ use vortex_error::{VortexResult, vortex_err};
66
use crate::expr::exprs::get_item::get_item;
77
use crate::expr::exprs::pack::pack;
88
use crate::expr::exprs::select::Select;
9-
use crate::expr::transform::TypedRewriteContext;
10-
use crate::expr::transform::rules::ReduceRule;
9+
use crate::expr::transform::rules::{ReduceRule, TypedRuleContext};
1110
use crate::expr::{Expression, ExpressionView};
1211

1312
/// Rule that removes Select expressions by converting them to Pack + GetItem.
1413
///
1514
/// Transforms: `select(["a", "b"], expr)` → `pack(a: get_item("a", expr), b: get_item("b", expr))`
1615
pub struct RemoveSelectRule;
1716

18-
impl ReduceRule<Select, &dyn TypedRewriteContext> for RemoveSelectRule {
17+
impl ReduceRule<Select, TypedRuleContext> for RemoveSelectRule {
1918
fn reduce(
2019
&self,
2120
select: &ExpressionView<Select>,
22-
ctx: &dyn TypedRewriteContext,
21+
ctx: &TypedRuleContext,
2322
) -> VortexResult<Option<Expression>> {
2423
let child = select.child();
2524
let child_dtype = child.return_dtype(ctx.dtype())?;
@@ -62,7 +61,7 @@ mod tests {
6261
use crate::expr::exprs::pack::Pack;
6362
use crate::expr::exprs::root::root;
6463
use crate::expr::exprs::select::{Select, select};
65-
use crate::expr::transform::rules::{ReduceRule, RootRewriteContext};
64+
use crate::expr::transform::rules::{ReduceRule, TypedRuleContext};
6665

6766
#[test]
6867
fn test_remove_select_rule() {
@@ -73,7 +72,7 @@ mod tests {
7372
let e = select(["a", "b"], root());
7473

7574
let rule = RemoveSelectRule;
76-
let ctx = RootRewriteContext { dtype: &dtype };
75+
let ctx = TypedRuleContext::new(dtype.clone());
7776
let select_view = e.as_::<Select>();
7877
let result = rule.reduce(&select_view, &ctx).unwrap();
7978

@@ -97,7 +96,7 @@ mod tests {
9796
let e = select_exclude(["c"], root());
9897

9998
let rule = RemoveSelectRule;
100-
let ctx = RootRewriteContext { dtype: &dtype };
99+
let ctx = TypedRuleContext::new(dtype.clone());
101100
let select_view = e.as_::<Select>();
102101
let result = rule.reduce(&select_view, &ctx).unwrap();
103102

vortex-array/src/expr/session/mod.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ use crate::expr::exprs::pack::Pack;
2323
use crate::expr::exprs::root::Root;
2424
use crate::expr::exprs::select::Select;
2525
use crate::expr::exprs::select::transform::RemoveSelectRule;
26-
use crate::expr::transform::TypedRewriteContext;
27-
use crate::expr::transform::rules::{ParentReduceRule, ReduceRule, RewriteContext};
26+
use crate::expr::transform::rules::{ParentReduceRule, ReduceRule, RuleContext, TypedRuleContext};
2827
use crate::expr::{ExprVTable, VTable};
2928

3029
/// Registry of expression vtables.
@@ -57,24 +56,24 @@ impl ExprSession {
5756
self.registry.register_many(exprs);
5857
}
5958

60-
/// Register a generic reduce rule that uses TypedRewriteContext.
59+
/// Register a generic reduce rule that uses Typed context.
6160
/// Use this for rules that need access to dtype information.
6261
pub fn register_typed_reduce_rule<V, R>(&mut self, vtable: &'static V, rule: R)
6362
where
6463
V: VTable,
6564
R: 'static,
66-
for<'a> R: ReduceRule<V, &'a dyn TypedRewriteContext>,
65+
R: ReduceRule<V, TypedRuleContext>,
6766
{
6867
self.rewrite_rules.register_typed_reduce_rule(vtable, rule);
6968
}
7069

71-
/// Register a reduce rule that doesn't use TypedRewriteContext.
70+
/// Register a reduce rule that uses Untyped context.
7271
/// Use this for rules that don't need access to dtype information.
7372
pub fn register_reduce_rule<V, R>(&mut self, vtable: &'static V, rule: R)
7473
where
7574
V: VTable,
7675
R: 'static,
77-
for<'a> R: ReduceRule<V, &'a dyn RewriteContext>,
76+
R: ReduceRule<V, RuleContext>,
7877
{
7978
self.rewrite_rules.register_reduce_rule(vtable, rule);
8079
}
@@ -84,7 +83,7 @@ impl ExprSession {
8483
where
8584
V: VTable,
8685
R: 'static,
87-
for<'a> R: ParentReduceRule<V, &'a dyn RewriteContext>,
86+
R: ParentReduceRule<V, RuleContext>,
8887
{
8988
self.rewrite_rules.register_parent_rule(vtable, rule);
9089
}
@@ -94,7 +93,7 @@ impl ExprSession {
9493
where
9594
V: VTable,
9695
R: 'static,
97-
for<'a> R: ParentReduceRule<V, &'a dyn TypedRewriteContext>,
96+
R: ParentReduceRule<V, TypedRuleContext>,
9897
{
9998
self.rewrite_rules.register_typed_parent_rule(vtable, rule);
10099
}

vortex-array/src/expr/session/rewrite.rs

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@ use std::sync::Arc;
88
use vortex_error::VortexResult;
99
use vortex_utils::aliases::hash_map::HashMap;
1010

11-
use crate::expr::transform::rules::{ParentReduceRule, ReduceRule, RewriteContext};
11+
use crate::expr::transform::rules::{ParentReduceRule, ReduceRule, RuleContext, TypedRuleContext};
1212
use crate::expr::transform::{
1313
DynParentReduceRule, DynReduceRule, DynTypedParentReduceRule, DynTypedReduceRule,
14-
TypedRewriteContext,
1514
};
1615
use crate::expr::{ExprId, Expression, VTable};
1716

@@ -33,13 +32,9 @@ impl<V: VTable, R> RuleAdapter<V, R> {
3332
impl<V, R> DynReduceRule for RuleAdapter<V, R>
3433
where
3534
V: VTable,
36-
for<'a> R: ReduceRule<V, &'a dyn RewriteContext>,
35+
R: ReduceRule<V, RuleContext>,
3736
{
38-
fn reduce(
39-
&self,
40-
expr: &Expression,
41-
ctx: &dyn RewriteContext,
42-
) -> VortexResult<Option<Expression>> {
37+
fn reduce(&self, expr: &Expression, ctx: &RuleContext) -> VortexResult<Option<Expression>> {
4338
let Some(view) = expr.as_opt::<V>() else {
4439
return Ok(None);
4540
};
@@ -50,12 +45,12 @@ where
5045
impl<V, R> DynTypedReduceRule for RuleAdapter<V, R>
5146
where
5247
V: VTable,
53-
for<'a> R: ReduceRule<V, &'a dyn TypedRewriteContext>,
48+
R: ReduceRule<V, TypedRuleContext>,
5449
{
5550
fn reduce(
5651
&self,
5752
expr: &Expression,
58-
ctx: &dyn TypedRewriteContext,
53+
ctx: &TypedRuleContext,
5954
) -> VortexResult<Option<Expression>> {
6055
let Some(view) = expr.as_opt::<V>() else {
6156
return Ok(None);
@@ -67,14 +62,14 @@ where
6762
impl<V, R> DynParentReduceRule for RuleAdapter<V, R>
6863
where
6964
V: VTable,
70-
for<'a> R: ParentReduceRule<V, &'a dyn RewriteContext>,
65+
R: ParentReduceRule<V, RuleContext>,
7166
{
7267
fn reduce_parent(
7368
&self,
7469
expr: &Expression,
7570
parent: &Expression,
7671
child_idx: usize,
77-
ctx: &dyn RewriteContext,
72+
ctx: &RuleContext,
7873
) -> VortexResult<Option<Expression>> {
7974
let Some(view) = expr.as_opt::<V>() else {
8075
return Ok(None);
@@ -86,14 +81,14 @@ where
8681
impl<V, R> DynTypedParentReduceRule for RuleAdapter<V, R>
8782
where
8883
V: VTable,
89-
for<'a> R: ParentReduceRule<V, &'a dyn TypedRewriteContext>,
84+
R: ParentReduceRule<V, TypedRuleContext>,
9085
{
9186
fn reduce_parent(
9287
&self,
9388
expr: &Expression,
9489
parent: &Expression,
9590
child_idx: usize,
96-
ctx: &dyn TypedRewriteContext,
91+
ctx: &TypedRuleContext,
9792
) -> VortexResult<Option<Expression>> {
9893
let Some(view) = expr.as_opt::<V>() else {
9994
return Ok(None);
@@ -137,13 +132,13 @@ impl RewriteRuleRegistry {
137132
Self::default()
138133
}
139134

140-
/// Register a generic reduce rule that uses TypedRewriteContext.
135+
/// Register a generic reduce rule that uses Typed context.
141136
/// Use this for rules that need access to dtype information.
142137
pub fn register_typed_reduce_rule<V, R>(&mut self, vtable: &'static V, rule: R)
143138
where
144139
V: VTable,
145140
R: 'static,
146-
for<'a> R: ReduceRule<V, &'a dyn TypedRewriteContext>,
141+
R: ReduceRule<V, TypedRuleContext>,
147142
{
148143
let adapter = RuleAdapter::new(rule);
149144
self.typed_reduce_rules
@@ -152,13 +147,13 @@ impl RewriteRuleRegistry {
152147
.push(Arc::new(adapter));
153148
}
154149

155-
/// Register a generic reduce rule that only uses RewriteContext (non-typed).
150+
/// Register a generic reduce rule that only uses Untyped context.
156151
/// Use this for rules that don't need access to dtype information.
157152
pub fn register_reduce_rule<V, R>(&mut self, vtable: &'static V, rule: R)
158153
where
159154
V: VTable,
160155
R: 'static,
161-
for<'a> R: ReduceRule<V, &'a dyn RewriteContext>,
156+
R: ReduceRule<V, RuleContext>,
162157
{
163158
let adapter = RuleAdapter::new(rule);
164159
self.reduce_rules
@@ -171,7 +166,7 @@ impl RewriteRuleRegistry {
171166
where
172167
V: VTable,
173168
R: 'static,
174-
for<'a> R: ParentReduceRule<V, &'a dyn RewriteContext>,
169+
R: ParentReduceRule<V, RuleContext>,
175170
{
176171
let adapter = RuleAdapter::new(rule);
177172
self.parent_rules
@@ -185,7 +180,7 @@ impl RewriteRuleRegistry {
185180
where
186181
V: VTable,
187182
R: 'static,
188-
for<'a> R: ParentReduceRule<V, &'a dyn TypedRewriteContext>,
183+
R: ParentReduceRule<V, TypedRuleContext>,
189184
{
190185
let adapter = RuleAdapter::new(rule);
191186
self.typed_parent_rules

vortex-array/src/expr/transform/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
pub mod annotations;
66
pub mod immediate_access;
77
pub(crate) mod match_between;
8+
mod optimizer;
89
mod partition;
910
mod replace;
1011
pub mod rules;
1112
mod simplify;
1213
mod simplify_typed;
1314

15+
pub use optimizer::*;
1416
pub use partition::*;
1517
pub use replace::*;
1618
pub use rules::*;

0 commit comments

Comments
 (0)