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 slow = g.add(Sma::builder().named("slow")); // slow SMA leg
|
||||||
let sub = g.add(Sub::builder());
|
let sub = g.add(Sub::builder());
|
||||||
let price = g.input_role("price");
|
let price = g.input_role("price");
|
||||||
g.feed(price, [fast.in_("series"), slow.in_("series")]);
|
g.feed(price, [fast.input("series"), slow.input("series")]);
|
||||||
g.connect(fast.out("value"), sub.in_("lhs"));
|
g.connect(fast.output("value"), sub.input("lhs"));
|
||||||
g.connect(slow.out("value"), sub.in_("rhs"));
|
g.connect(slow.output("value"), sub.input("rhs"));
|
||||||
g.expose(sub.out("value"), "cross");
|
g.expose(sub.output("value"), "cross");
|
||||||
g.build().expect("sample sma_cross wiring resolves")
|
g.build().expect("sample sma_cross wiring resolves")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,11 +181,11 @@ fn signals(name: &str) -> Composite {
|
|||||||
.bind("weights[2]", Scalar::F64(0.5)),
|
.bind("weights[2]", Scalar::F64(0.5)),
|
||||||
);
|
);
|
||||||
let price = g.input_role("price");
|
let price = g.input_role("price");
|
||||||
g.feed(price, [trend.in_("price"), momentum.in_("price")]);
|
g.feed(price, [trend.input("price"), momentum.input("price")]);
|
||||||
g.connect(trend.out("cross"), blend.in_("term[0]")); // trend.cross → blend.term[0]
|
g.connect(trend.output("cross"), blend.input("term[0]")); // trend.cross → blend.term[0]
|
||||||
g.connect(momentum.out("histogram"), blend.in_("term[1]")); // momentum.histogram → blend.term[1]
|
g.connect(momentum.output("histogram"), blend.input("term[1]")); // momentum.histogram → blend.term[1]
|
||||||
g.connect(momentum.out("signal"), blend.in_("term[2]")); // momentum.signal → blend.term[2]
|
g.connect(momentum.output("signal"), blend.input("term[2]")); // momentum.signal → blend.term[2]
|
||||||
g.expose(blend.out("value"), "signal");
|
g.expose(blend.output("value"), "signal");
|
||||||
g.build().expect("sample signals wiring resolves")
|
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 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 ex = g.add(Recorder::builder(vec![ScalarKind::F64], Firing::Any, tx_ex));
|
||||||
let price = g.source_role("price", ScalarKind::F64);
|
let price = g.source_role("price", ScalarKind::F64);
|
||||||
g.feed(price, [sig.in_("price"), broker.in_("price")]);
|
g.feed(price, [sig.input("price"), broker.input("price")]);
|
||||||
g.connect(sig.out("signal"), exposure.in_("signal")); // blended signal -> Exposure
|
g.connect(sig.output("signal"), exposure.input("signal")); // blended signal -> Exposure
|
||||||
g.connect(exposure.out("exposure"), broker.in_("exposure")); // exposure -> broker slot 0
|
g.connect(exposure.output("exposure"), broker.input("exposure")); // exposure -> broker slot 0
|
||||||
g.connect(broker.out("equity"), eq.in_("col[0]")); // equity -> sink
|
g.connect(broker.output("equity"), eq.input("col[0]")); // equity -> sink
|
||||||
g.connect(exposure.out("exposure"), ex.in_("col[0]")); // exposure -> sink
|
g.connect(exposure.output("exposure"), ex.input("col[0]")); // exposure -> sink
|
||||||
let bp = g.build().expect("sample blueprint wiring resolves");
|
let bp = g.build().expect("sample blueprint wiring resolves");
|
||||||
(bp, rx_eq, rx_ex)
|
(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 signal = g.add(Ema::builder().named("signal")); // signal EMA of the MACD line
|
||||||
let hist = g.add(Sub::builder()); // histogram = MACD line − signal
|
let hist = g.add(Sub::builder()); // histogram = MACD line − signal
|
||||||
let price = g.input_role("price");
|
let price = g.input_role("price");
|
||||||
g.feed(price, [fast.in_("series"), slow.in_("series")]);
|
g.feed(price, [fast.input("series"), slow.input("series")]);
|
||||||
g.connect(fast.out("value"), line.in_("lhs")); // fast → line
|
g.connect(fast.output("value"), line.input("lhs")); // fast → line
|
||||||
g.connect(slow.out("value"), line.in_("rhs")); // slow → line
|
g.connect(slow.output("value"), line.input("rhs")); // slow → line
|
||||||
g.connect(line.out("value"), signal.in_("series")); // line → signal EMA
|
g.connect(line.output("value"), signal.input("series")); // line → signal EMA
|
||||||
g.connect(line.out("value"), hist.in_("lhs")); // line → histogram
|
g.connect(line.output("value"), hist.input("lhs")); // line → histogram
|
||||||
g.connect(signal.out("value"), hist.in_("rhs")); // signal → histogram
|
g.connect(signal.output("value"), hist.input("rhs")); // signal → histogram
|
||||||
g.expose(line.out("value"), "macd"); // the MACD line
|
g.expose(line.output("value"), "macd"); // the MACD line
|
||||||
g.expose(signal.out("value"), "signal"); // the signal line
|
g.expose(signal.output("value"), "signal"); // the signal line
|
||||||
g.expose(hist.out("value"), "histogram"); // the histogram
|
g.expose(hist.output("value"), "histogram"); // the histogram
|
||||||
g.build().expect("sample macd wiring resolves")
|
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 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 ex = g.add(Recorder::builder(vec![ScalarKind::F64], Firing::Any, tx_ex));
|
||||||
let price = g.source_role("price", ScalarKind::F64);
|
let price = g.source_role("price", ScalarKind::F64);
|
||||||
g.feed(price, [macd_node.in_("price"), broker.in_("price")]);
|
g.feed(price, [macd_node.input("price"), broker.input("price")]);
|
||||||
g.connect(macd_node.out("histogram"), exposure.in_("signal")); // histogram → Exposure
|
g.connect(macd_node.output("histogram"), exposure.input("signal")); // histogram → Exposure
|
||||||
g.connect(exposure.out("exposure"), broker.in_("exposure")); // exposure → broker slot 0
|
g.connect(exposure.output("exposure"), broker.input("exposure")); // exposure → broker slot 0
|
||||||
g.connect(broker.out("equity"), eq.in_("col[0]")); // equity → sink
|
g.connect(broker.output("equity"), eq.input("col[0]")); // equity → sink
|
||||||
g.connect(exposure.out("exposure"), ex.in_("col[0]")); // exposure → sink
|
g.connect(exposure.output("exposure"), ex.input("col[0]")); // exposure → sink
|
||||||
g.build().expect("macd_strategy wiring resolves")
|
g.build().expect("macd_strategy wiring resolves")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ pub struct OutPort {
|
|||||||
|
|
||||||
impl NodeHandle {
|
impl NodeHandle {
|
||||||
/// Address an input port of this node by name (resolved at [`GraphBuilder::build`]).
|
/// 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 }
|
InPort { node: self.0, name }
|
||||||
}
|
}
|
||||||
/// Address this node's output field by name (resolved at [`GraphBuilder::build`]).
|
/// 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 }
|
OutPort { node: self.0, name }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -214,10 +214,10 @@ mod tests {
|
|||||||
let slow = g.add(Sma::builder().named("slow"));
|
let slow = g.add(Sma::builder().named("slow"));
|
||||||
let sub = g.add(Sub::builder());
|
let sub = g.add(Sub::builder());
|
||||||
let price = g.input_role("price");
|
let price = g.input_role("price");
|
||||||
g.feed(price, [fast.in_("series"), slow.in_("series")]);
|
g.feed(price, [fast.input("series"), slow.input("series")]);
|
||||||
g.connect(fast.out("value"), sub.in_("lhs"));
|
g.connect(fast.output("value"), sub.input("lhs"));
|
||||||
g.connect(slow.out("value"), sub.in_("rhs"));
|
g.connect(slow.output("value"), sub.input("rhs"));
|
||||||
g.expose(sub.out("value"), "out");
|
g.expose(sub.output("value"), "out");
|
||||||
g.build().expect("sma_cross resolves")
|
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 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 ex = g.add(Recorder::builder(vec![ScalarKind::F64], Firing::Any, tx_ex));
|
||||||
let src = g.source_role("src", ScalarKind::F64);
|
let src = g.source_role("src", ScalarKind::F64);
|
||||||
g.feed(src, [xross.in_("price"), broker.in_("price")]);
|
g.feed(src, [xross.input("price"), broker.input("price")]);
|
||||||
g.connect(xross.out("out"), expo.in_("signal"));
|
g.connect(xross.output("out"), expo.input("signal"));
|
||||||
g.connect(expo.out("exposure"), broker.in_("exposure"));
|
g.connect(expo.output("exposure"), broker.input("exposure"));
|
||||||
g.connect(broker.out("equity"), eq.in_("col[0]"));
|
g.connect(broker.output("equity"), eq.input("col[0]"));
|
||||||
g.connect(expo.out("exposure"), ex.in_("col[0]"));
|
g.connect(expo.output("exposure"), ex.input("col[0]"));
|
||||||
let built_flat = g
|
let built_flat = g
|
||||||
.build()
|
.build()
|
||||||
.expect("root resolves")
|
.expect("root resolves")
|
||||||
@@ -276,7 +276,7 @@ mod tests {
|
|||||||
let mut g = GraphBuilder::new("x");
|
let mut g = GraphBuilder::new("x");
|
||||||
let a = g.add(Sma::builder());
|
let a = g.add(Sma::builder());
|
||||||
let b = g.add(Sub::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`
|
// `.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).
|
// (the Ok type), which it is not (it holds a `Box<dyn Fn>` builder closure).
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
@@ -290,7 +290,7 @@ mod tests {
|
|||||||
let mut g = GraphBuilder::new("x");
|
let mut g = GraphBuilder::new("x");
|
||||||
let a = g.add(Sma::builder());
|
let a = g.add(Sma::builder());
|
||||||
let b = g.add(Sub::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!(
|
assert_eq!(
|
||||||
g.build().err(),
|
g.build().err(),
|
||||||
Some(BuildError::UnknownOutPort { node: 0, name: "nope".into() })
|
Some(BuildError::UnknownOutPort { node: 0, name: "nope".into() })
|
||||||
@@ -306,7 +306,7 @@ mod tests {
|
|||||||
let third = g1.add(Sub::builder()); // NodeHandle(2)
|
let third = g1.add(Sub::builder()); // NodeHandle(2)
|
||||||
let mut g2 = GraphBuilder::new("g2");
|
let mut g2 = GraphBuilder::new("g2");
|
||||||
let only = g2.add(Sub::builder()); // NodeHandle(0)
|
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 }));
|
assert_eq!(g2.build().err(), Some(BuildError::BadHandle { node: 2 }));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,7 +326,7 @@ mod tests {
|
|||||||
let mut g = GraphBuilder::new("outer");
|
let mut g = GraphBuilder::new("outer");
|
||||||
let c = g.add(inner);
|
let c = g.add(inner);
|
||||||
let src = g.source_role("s", ScalarKind::F64);
|
let src = g.source_role("s", ScalarKind::F64);
|
||||||
g.feed(src, [c.in_("x")]);
|
g.feed(src, [c.input("x")]);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
g.build().err(),
|
g.build().err(),
|
||||||
Some(BuildError::AmbiguousInPort { node: 0, name: "x".into() })
|
Some(BuildError::AmbiguousInPort { node: 0, name: "x".into() })
|
||||||
@@ -349,7 +349,7 @@ mod tests {
|
|||||||
let mut g = GraphBuilder::new("outer");
|
let mut g = GraphBuilder::new("outer");
|
||||||
let c = g.add(inner);
|
let c = g.add(inner);
|
||||||
let snk = g.add(Sub::builder());
|
let snk = g.add(Sub::builder());
|
||||||
g.connect(c.out("o"), snk.in_("lhs"));
|
g.connect(c.output("o"), snk.input("lhs"));
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
g.build().err(),
|
g.build().err(),
|
||||||
Some(BuildError::AmbiguousOutPort { node: 0, name: "o".into() })
|
Some(BuildError::AmbiguousOutPort { node: 0, name: "o".into() })
|
||||||
@@ -363,16 +363,16 @@ mod tests {
|
|||||||
let expo = ok.add(Exposure::builder());
|
let expo = ok.add(Exposure::builder());
|
||||||
let broker = ok.add(SimBroker::builder(0.0001));
|
let broker = ok.add(SimBroker::builder(0.0001));
|
||||||
let src = ok.source_role("p", ScalarKind::F64);
|
let src = ok.source_role("p", ScalarKind::F64);
|
||||||
ok.feed(src, [expo.in_("signal"), broker.in_("price")]);
|
ok.feed(src, [expo.input("signal"), broker.input("price")]);
|
||||||
ok.connect(expo.out("exposure"), broker.in_("exposure"));
|
ok.connect(expo.output("exposure"), broker.input("exposure"));
|
||||||
ok.expose(broker.out("equity"), "eq");
|
ok.expose(broker.output("equity"), "eq");
|
||||||
assert!(ok.build().is_ok());
|
assert!(ok.build().is_ok());
|
||||||
|
|
||||||
// a transposed/typo'd port name is caught, where a bare slot index is not
|
// a transposed/typo'd port name is caught, where a bare slot index is not
|
||||||
let mut typo = GraphBuilder::new("typo");
|
let mut typo = GraphBuilder::new("typo");
|
||||||
let expo2 = typo.add(Exposure::builder());
|
let expo2 = typo.add(Exposure::builder());
|
||||||
let broker2 = typo.add(SimBroker::builder(0.0001));
|
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!(
|
assert_eq!(
|
||||||
typo.build().err(),
|
typo.build().err(),
|
||||||
Some(BuildError::UnknownInPort { node: 1, name: "pirce".into() })
|
Some(BuildError::UnknownInPort { node: 1, name: "pirce".into() })
|
||||||
|
|||||||
Reference in New Issue
Block a user