36fbf492ee
Consumer scenario against the public surface only: selection-free process doc round-trip, the dissolved real-data sweep (doc dedupe + realization accumulation + C1 bit-identity), refusal edges, rank-later over the persisted family. 0 bugs; the cycle's own axes all came back working. 4 friction + 2 spec-gap findings on the verb entry ergonomics and pre-existing guide drift — transcribed in docs/specs/fieldtest-sweep-dissolution.md for triage. refs #210
77 lines
1.9 KiB
Rust
77 lines
1.9 KiB
Rust
//! lab — an aura research project: node logic + the exported vocabulary.
|
|
//!
|
|
//! Every node type this crate provides is registered in `vocabulary()` /
|
|
//! `type_ids()` under the `lab::` namespace prefix; the `aura` host loads
|
|
//! this cdylib per invocation and merges it with the std vocabulary.
|
|
|
|
use aura_core::{
|
|
Cell, Ctx, FieldSpec, Firing, Node, NodeSchema, PortSpec, PrimitiveBuilder,
|
|
ScalarKind,
|
|
};
|
|
|
|
/// One-input f64 pass-through. Emits `None` until its input has a value.
|
|
pub struct Identity {
|
|
out: [Cell; 1],
|
|
}
|
|
|
|
impl Identity {
|
|
pub fn new() -> Self {
|
|
Self { out: [Cell::from_f64(0.0)] }
|
|
}
|
|
pub fn builder() -> PrimitiveBuilder {
|
|
PrimitiveBuilder::new(
|
|
"lab::Identity",
|
|
NodeSchema {
|
|
inputs: vec![PortSpec {
|
|
kind: ScalarKind::F64,
|
|
firing: Firing::Any,
|
|
name: "value".into(),
|
|
}],
|
|
output: vec![FieldSpec { name: "value".into(), kind: ScalarKind::F64 }],
|
|
params: vec![],
|
|
},
|
|
|_| Box::new(Identity::new()),
|
|
)
|
|
}
|
|
}
|
|
|
|
impl Default for Identity {
|
|
fn default() -> Self {
|
|
Self::new()
|
|
}
|
|
}
|
|
|
|
impl Node for Identity {
|
|
fn lookbacks(&self) -> Vec<usize> {
|
|
vec![1]
|
|
}
|
|
fn eval(&mut self, ctx: Ctx<'_>) -> Option<&[Cell]> {
|
|
let w = ctx.f64_in(0);
|
|
if w.is_empty() {
|
|
return None;
|
|
}
|
|
self.out[0] = Cell::from_f64(w[0]);
|
|
Some(&self.out)
|
|
}
|
|
fn label(&self) -> String {
|
|
"lab::Identity".to_string()
|
|
}
|
|
}
|
|
|
|
fn vocabulary(type_id: &str) -> Option<PrimitiveBuilder> {
|
|
match type_id {
|
|
"lab::Identity" => Some(Identity::builder()),
|
|
_ => None,
|
|
}
|
|
}
|
|
|
|
fn type_ids() -> &'static [&'static str] {
|
|
&["lab::Identity"]
|
|
}
|
|
|
|
aura_core::aura_project! {
|
|
namespace: "lab",
|
|
vocabulary: vocabulary,
|
|
type_ids: type_ids,
|
|
}
|