refactor(aura-engine): rename NodeHandle::in_/out to input/output
The trailing underscore on in_() was a keyword-escape scar (`in` is reserved).
Rename the NodeHandle port/field accessors to input()/output(), which also
aligns the authoring surface with the schema's own nomenclature
(NodeSchema.inputs/output, "input port"/"output field"): node.input("lhs")
now reads in the same vocabulary the schema uses, instead of a second one.
Mechanical, behaviour-preserving: the two method definitions plus every call
site in builder.rs and the aura-cli sample blueprints. Full workspace green;
clippy --all-targets -D warnings clean.
This commit is contained in:
+28
-28
@@ -156,10 +156,10 @@ fn sma_cross(name: &str) -> Composite {
|
||||
let slow = g.add(Sma::builder().named("slow")); // slow SMA leg
|
||||
let sub = g.add(Sub::builder());
|
||||
let price = g.input_role("price");
|
||||
g.feed(price, [fast.in_("series"), slow.in_("series")]);
|
||||
g.connect(fast.out("value"), sub.in_("lhs"));
|
||||
g.connect(slow.out("value"), sub.in_("rhs"));
|
||||
g.expose(sub.out("value"), "cross");
|
||||
g.feed(price, [fast.input("series"), slow.input("series")]);
|
||||
g.connect(fast.output("value"), sub.input("lhs"));
|
||||
g.connect(slow.output("value"), sub.input("rhs"));
|
||||
g.expose(sub.output("value"), "cross");
|
||||
g.build().expect("sample sma_cross wiring resolves")
|
||||
}
|
||||
|
||||
@@ -181,11 +181,11 @@ fn signals(name: &str) -> Composite {
|
||||
.bind("weights[2]", Scalar::F64(0.5)),
|
||||
);
|
||||
let price = g.input_role("price");
|
||||
g.feed(price, [trend.in_("price"), momentum.in_("price")]);
|
||||
g.connect(trend.out("cross"), blend.in_("term[0]")); // trend.cross → blend.term[0]
|
||||
g.connect(momentum.out("histogram"), blend.in_("term[1]")); // momentum.histogram → blend.term[1]
|
||||
g.connect(momentum.out("signal"), blend.in_("term[2]")); // momentum.signal → blend.term[2]
|
||||
g.expose(blend.out("value"), "signal");
|
||||
g.feed(price, [trend.input("price"), momentum.input("price")]);
|
||||
g.connect(trend.output("cross"), blend.input("term[0]")); // trend.cross → blend.term[0]
|
||||
g.connect(momentum.output("histogram"), blend.input("term[1]")); // momentum.histogram → blend.term[1]
|
||||
g.connect(momentum.output("signal"), blend.input("term[2]")); // momentum.signal → blend.term[2]
|
||||
g.expose(blend.output("value"), "signal");
|
||||
g.build().expect("sample signals wiring resolves")
|
||||
}
|
||||
|
||||
@@ -211,11 +211,11 @@ fn sample_blueprint_with_sinks() -> (
|
||||
let eq = g.add(Recorder::builder(vec![ScalarKind::F64], Firing::Any, tx_eq));
|
||||
let ex = g.add(Recorder::builder(vec![ScalarKind::F64], Firing::Any, tx_ex));
|
||||
let price = g.source_role("price", ScalarKind::F64);
|
||||
g.feed(price, [sig.in_("price"), broker.in_("price")]);
|
||||
g.connect(sig.out("signal"), exposure.in_("signal")); // blended signal -> Exposure
|
||||
g.connect(exposure.out("exposure"), broker.in_("exposure")); // exposure -> broker slot 0
|
||||
g.connect(broker.out("equity"), eq.in_("col[0]")); // equity -> sink
|
||||
g.connect(exposure.out("exposure"), ex.in_("col[0]")); // exposure -> sink
|
||||
g.feed(price, [sig.input("price"), broker.input("price")]);
|
||||
g.connect(sig.output("signal"), exposure.input("signal")); // blended signal -> Exposure
|
||||
g.connect(exposure.output("exposure"), broker.input("exposure")); // exposure -> broker slot 0
|
||||
g.connect(broker.output("equity"), eq.input("col[0]")); // equity -> sink
|
||||
g.connect(exposure.output("exposure"), ex.input("col[0]")); // exposure -> sink
|
||||
let bp = g.build().expect("sample blueprint wiring resolves");
|
||||
(bp, rx_eq, rx_ex)
|
||||
}
|
||||
@@ -371,15 +371,15 @@ fn macd(name: &str) -> Composite {
|
||||
let signal = g.add(Ema::builder().named("signal")); // signal EMA of the MACD line
|
||||
let hist = g.add(Sub::builder()); // histogram = MACD line − signal
|
||||
let price = g.input_role("price");
|
||||
g.feed(price, [fast.in_("series"), slow.in_("series")]);
|
||||
g.connect(fast.out("value"), line.in_("lhs")); // fast → line
|
||||
g.connect(slow.out("value"), line.in_("rhs")); // slow → line
|
||||
g.connect(line.out("value"), signal.in_("series")); // line → signal EMA
|
||||
g.connect(line.out("value"), hist.in_("lhs")); // line → histogram
|
||||
g.connect(signal.out("value"), hist.in_("rhs")); // signal → histogram
|
||||
g.expose(line.out("value"), "macd"); // the MACD line
|
||||
g.expose(signal.out("value"), "signal"); // the signal line
|
||||
g.expose(hist.out("value"), "histogram"); // the histogram
|
||||
g.feed(price, [fast.input("series"), slow.input("series")]);
|
||||
g.connect(fast.output("value"), line.input("lhs")); // fast → line
|
||||
g.connect(slow.output("value"), line.input("rhs")); // slow → line
|
||||
g.connect(line.output("value"), signal.input("series")); // line → signal EMA
|
||||
g.connect(line.output("value"), hist.input("lhs")); // line → histogram
|
||||
g.connect(signal.output("value"), hist.input("rhs")); // signal → histogram
|
||||
g.expose(line.output("value"), "macd"); // the MACD line
|
||||
g.expose(signal.output("value"), "signal"); // the signal line
|
||||
g.expose(hist.output("value"), "histogram"); // the histogram
|
||||
g.build().expect("sample macd wiring resolves")
|
||||
}
|
||||
|
||||
@@ -397,11 +397,11 @@ fn macd_strategy_blueprint(
|
||||
let eq = g.add(Recorder::builder(vec![ScalarKind::F64], Firing::Any, tx_eq));
|
||||
let ex = g.add(Recorder::builder(vec![ScalarKind::F64], Firing::Any, tx_ex));
|
||||
let price = g.source_role("price", ScalarKind::F64);
|
||||
g.feed(price, [macd_node.in_("price"), broker.in_("price")]);
|
||||
g.connect(macd_node.out("histogram"), exposure.in_("signal")); // histogram → Exposure
|
||||
g.connect(exposure.out("exposure"), broker.in_("exposure")); // exposure → broker slot 0
|
||||
g.connect(broker.out("equity"), eq.in_("col[0]")); // equity → sink
|
||||
g.connect(exposure.out("exposure"), ex.in_("col[0]")); // exposure → sink
|
||||
g.feed(price, [macd_node.input("price"), broker.input("price")]);
|
||||
g.connect(macd_node.output("histogram"), exposure.input("signal")); // histogram → Exposure
|
||||
g.connect(exposure.output("exposure"), broker.input("exposure")); // exposure → broker slot 0
|
||||
g.connect(broker.output("equity"), eq.input("col[0]")); // equity → sink
|
||||
g.connect(exposure.output("exposure"), ex.input("col[0]")); // exposure → sink
|
||||
g.build().expect("macd_strategy wiring resolves")
|
||||
}
|
||||
|
||||
|
||||
@@ -38,11 +38,11 @@ pub struct OutPort {
|
||||
|
||||
impl NodeHandle {
|
||||
/// Address an input port of this node by name (resolved at [`GraphBuilder::build`]).
|
||||
pub fn in_(self, name: &'static str) -> InPort {
|
||||
pub fn input(self, name: &'static str) -> InPort {
|
||||
InPort { node: self.0, name }
|
||||
}
|
||||
/// Address this node's output field by name (resolved at [`GraphBuilder::build`]).
|
||||
pub fn out(self, name: &'static str) -> OutPort {
|
||||
pub fn output(self, name: &'static str) -> OutPort {
|
||||
OutPort { node: self.0, name }
|
||||
}
|
||||
}
|
||||
@@ -214,10 +214,10 @@ mod tests {
|
||||
let slow = g.add(Sma::builder().named("slow"));
|
||||
let sub = g.add(Sub::builder());
|
||||
let price = g.input_role("price");
|
||||
g.feed(price, [fast.in_("series"), slow.in_("series")]);
|
||||
g.connect(fast.out("value"), sub.in_("lhs"));
|
||||
g.connect(slow.out("value"), sub.in_("rhs"));
|
||||
g.expose(sub.out("value"), "out");
|
||||
g.feed(price, [fast.input("series"), slow.input("series")]);
|
||||
g.connect(fast.output("value"), sub.input("lhs"));
|
||||
g.connect(slow.output("value"), sub.input("rhs"));
|
||||
g.expose(sub.output("value"), "out");
|
||||
g.build().expect("sma_cross resolves")
|
||||
}
|
||||
|
||||
@@ -256,11 +256,11 @@ mod tests {
|
||||
let eq = g.add(Recorder::builder(vec![ScalarKind::F64], Firing::Any, tx_eq));
|
||||
let ex = g.add(Recorder::builder(vec![ScalarKind::F64], Firing::Any, tx_ex));
|
||||
let src = g.source_role("src", ScalarKind::F64);
|
||||
g.feed(src, [xross.in_("price"), broker.in_("price")]);
|
||||
g.connect(xross.out("out"), expo.in_("signal"));
|
||||
g.connect(expo.out("exposure"), broker.in_("exposure"));
|
||||
g.connect(broker.out("equity"), eq.in_("col[0]"));
|
||||
g.connect(expo.out("exposure"), ex.in_("col[0]"));
|
||||
g.feed(src, [xross.input("price"), broker.input("price")]);
|
||||
g.connect(xross.output("out"), expo.input("signal"));
|
||||
g.connect(expo.output("exposure"), broker.input("exposure"));
|
||||
g.connect(broker.output("equity"), eq.input("col[0]"));
|
||||
g.connect(expo.output("exposure"), ex.input("col[0]"));
|
||||
let built_flat = g
|
||||
.build()
|
||||
.expect("root resolves")
|
||||
@@ -276,7 +276,7 @@ mod tests {
|
||||
let mut g = GraphBuilder::new("x");
|
||||
let a = g.add(Sma::builder());
|
||||
let b = g.add(Sub::builder());
|
||||
g.connect(a.out("value"), b.in_("nope"));
|
||||
g.connect(a.output("value"), b.input("nope"));
|
||||
// `.err()`, not `.unwrap_err()`: the latter would require `Composite: Debug`
|
||||
// (the Ok type), which it is not (it holds a `Box<dyn Fn>` builder closure).
|
||||
assert_eq!(
|
||||
@@ -290,7 +290,7 @@ mod tests {
|
||||
let mut g = GraphBuilder::new("x");
|
||||
let a = g.add(Sma::builder());
|
||||
let b = g.add(Sub::builder());
|
||||
g.connect(a.out("nope"), b.in_("lhs"));
|
||||
g.connect(a.output("nope"), b.input("lhs"));
|
||||
assert_eq!(
|
||||
g.build().err(),
|
||||
Some(BuildError::UnknownOutPort { node: 0, name: "nope".into() })
|
||||
@@ -306,7 +306,7 @@ mod tests {
|
||||
let third = g1.add(Sub::builder()); // NodeHandle(2)
|
||||
let mut g2 = GraphBuilder::new("g2");
|
||||
let only = g2.add(Sub::builder()); // NodeHandle(0)
|
||||
g2.connect(third.out("value"), only.in_("lhs"));
|
||||
g2.connect(third.output("value"), only.input("lhs"));
|
||||
assert_eq!(g2.build().err(), Some(BuildError::BadHandle { node: 2 }));
|
||||
}
|
||||
|
||||
@@ -326,7 +326,7 @@ mod tests {
|
||||
let mut g = GraphBuilder::new("outer");
|
||||
let c = g.add(inner);
|
||||
let src = g.source_role("s", ScalarKind::F64);
|
||||
g.feed(src, [c.in_("x")]);
|
||||
g.feed(src, [c.input("x")]);
|
||||
assert_eq!(
|
||||
g.build().err(),
|
||||
Some(BuildError::AmbiguousInPort { node: 0, name: "x".into() })
|
||||
@@ -349,7 +349,7 @@ mod tests {
|
||||
let mut g = GraphBuilder::new("outer");
|
||||
let c = g.add(inner);
|
||||
let snk = g.add(Sub::builder());
|
||||
g.connect(c.out("o"), snk.in_("lhs"));
|
||||
g.connect(c.output("o"), snk.input("lhs"));
|
||||
assert_eq!(
|
||||
g.build().err(),
|
||||
Some(BuildError::AmbiguousOutPort { node: 0, name: "o".into() })
|
||||
@@ -363,16 +363,16 @@ mod tests {
|
||||
let expo = ok.add(Exposure::builder());
|
||||
let broker = ok.add(SimBroker::builder(0.0001));
|
||||
let src = ok.source_role("p", ScalarKind::F64);
|
||||
ok.feed(src, [expo.in_("signal"), broker.in_("price")]);
|
||||
ok.connect(expo.out("exposure"), broker.in_("exposure"));
|
||||
ok.expose(broker.out("equity"), "eq");
|
||||
ok.feed(src, [expo.input("signal"), broker.input("price")]);
|
||||
ok.connect(expo.output("exposure"), broker.input("exposure"));
|
||||
ok.expose(broker.output("equity"), "eq");
|
||||
assert!(ok.build().is_ok());
|
||||
|
||||
// a transposed/typo'd port name is caught, where a bare slot index is not
|
||||
let mut typo = GraphBuilder::new("typo");
|
||||
let expo2 = typo.add(Exposure::builder());
|
||||
let broker2 = typo.add(SimBroker::builder(0.0001));
|
||||
typo.connect(expo2.out("exposure"), broker2.in_("pirce"));
|
||||
typo.connect(expo2.output("exposure"), broker2.input("pirce"));
|
||||
assert_eq!(
|
||||
typo.build().err(),
|
||||
Some(BuildError::UnknownInPort { node: 1, name: "pirce".into() })
|
||||
|
||||
Reference in New Issue
Block a user