Skip to content

Commit b8f3f4f

Browse files
committed
feat!: simple and minimal operator syntax
1 parent e51cabb commit b8f3f4f

24 files changed

Lines changed: 507 additions & 532 deletions

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ fn main() {
6464

6565
let dataset = Dataset::new(x, y);
6666

67-
let operators = Operators::<D>::from_names_by_arity::<BuiltinOpsF32>(&["cos", "exp", "sin"], &["+", "-", "*", "/"], &[])
68-
.unwrap();
67+
let operators = BuiltinOpsF32::from_names(["cos", "exp", "sin", "+", "sub", "*", "/"]).unwrap();
6968

7069
let options = Options::<f32, D> {
7170
operators,
@@ -103,7 +102,6 @@ Define custom operators with `op!`, then build an operator set with `opset!`:
103102

104103
```rust
105104
use symbolic_regression::prelude::*;
106-
use symbolic_regression::{op, opset};
107105

108106
op!(Square for f64 {
109107
eval: |[x]| { x * x },
@@ -131,13 +129,15 @@ op!(Sub for f64 {
131129
});
132130

133131
opset! {
134-
pub struct CustomOps<f64> {
135-
1 => { Square, Exp }
136-
2 => { Add, Sub }
132+
pub CustomOps for f64 {
133+
Square,
134+
Exp,
135+
Add,
136+
Sub,
137137
}
138138
}
139139

140-
let operators = CustomOps::from_names_by_arity([&["square", "exp"], &["add", "sub"]]).unwrap();
140+
let operators = CustomOps::from_names(["square", "exp", "add", "sub"]).unwrap();
141141
let options = Options::<f64, _> { operators, ..Default::default() };
142142
```
143143

dynamic_expressions/benches/eval.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,11 @@ const N_TREES: usize = 100;
1515
const N_ROWS: usize = 1_000;
1616

1717
opset! {
18-
pub struct BenchOpsF32<f32> {
19-
1 => { Cos, Exp }
20-
2 => { Add, Sub, Mul, Div }
21-
}
18+
pub BenchOpsF32 for f32 { Cos, Exp, Add, Sub, Mul, Div }
2219
}
2320

2421
opset! {
25-
pub struct BenchOpsF64<f64> {
26-
1 => { Cos, Exp }
27-
2 => { Add, Sub, Mul, Div }
28-
}
22+
pub BenchOpsF64 for f64 { Cos, Exp, Add, Sub, Mul, Div }
2923
}
3024

3125
fn random_leaf<T: Float, R: Rng>(rng: &mut R, n_features: usize, consts: &mut Vec<T>) -> PNode {

dynamic_expressions/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub mod operator_enum;
1212
pub mod operators;
1313
#[cfg(feature = "proptest-utils")]
1414
pub mod proptest_utils;
15+
pub mod select;
1516
pub mod simplify;
1617
pub mod strings;
1718
pub mod traits;
@@ -31,6 +32,7 @@ pub use crate::node_utils::{
3132
count_constant_nodes, count_depth, count_nodes, has_constants, has_operators, subtree_range, subtree_sizes,
3233
tree_mapreduce,
3334
};
35+
pub use crate::select::{OperatorSelectError, Operators};
3436
pub use crate::simplify::{combine_operators_in_place, simplify_in_place, simplify_tree_in_place};
3537
pub use crate::strings::{StringTreeOptions, print_tree, string_tree};
3638
pub use crate::traits::{HasOp, LookupError, OpId, OpMeta, OpTag, Operator, OperatorSet};

0 commit comments

Comments
 (0)