Skip to main content

sim_lib_topology/
lib.rs

1#![forbid(unsafe_code)]
2#![deny(missing_docs)]
3//! Data-driven topology engine.
4//!
5//! Topologies are authored as graph data, text wiring, diagrams, or `.simtopo`
6//! packages, then validated and compiled into deterministic runtime plans.
7//!
8//! ```rust
9//! use std::sync::Arc;
10//!
11//! use sim_kernel::{Cx, DefaultFactory, Expr, NoopEvalPolicy, Symbol};
12//! use sim_lib_topology::{compile_graph, parse_package, topology_card_expr};
13//!
14//! let package = parse_package(
15//!     r#"
16//! graph:
17//! topology doc-flow
18//! node in verb=in
19//! node step verb=wire
20//! node out verb=out
21//! wire in -> step
22//! wire step -> out
23//!
24//! tests:
25//! smoke input="ping" expect="ping"
26//! capabilities:
27//! topology/run
28//! "#,
29//! )
30//! .unwrap();
31//!
32//! assert_eq!(package.name(), &Symbol::new("doc-flow"));
33//! assert_eq!(package.tests.len(), 1);
34//!
35//! let mut cx = Cx::new(Arc::new(NoopEvalPolicy), Arc::new(DefaultFactory));
36//! let plan = compile_graph(&mut cx, &package.graph).unwrap();
37//! assert_eq!(plan.nodes.len(), 3);
38//!
39//! let card = topology_card_expr(&Symbol::qualified("topology", "package-format"));
40//! assert!(matches!(card, Expr::Map(_)));
41//! ```
42
43pub mod adapter;
44pub mod browse;
45pub mod capability;
46mod citizen;
47pub mod compile;
48pub mod cookbook;
49pub mod diagram;
50pub mod error;
51pub mod instrument;
52pub mod model;
53pub mod package;
54pub mod parse;
55pub mod patch;
56pub mod place;
57mod place_latency;
58mod record;
59pub mod reflect;
60pub mod registry;
61pub mod replay;
62pub mod run;
63mod run_cells;
64mod run_contract;
65mod run_nonlinear;
66mod run_predicate;
67pub mod site;
68pub mod text;
69pub mod validate;
70pub mod verb;
71
72pub use adapter::{TopologyAdapter, TopologyAdapterRegistry};
73pub use browse::{
74    TopologyExampleSpec, TopologyFunctionSpec, TopologyVerbSpec, topology_browse_symbols,
75    topology_card_expr, topology_example_specs, topology_function_specs, topology_verb_specs,
76};
77pub use capability::{
78    topology_file_capability, topology_reflect_capability, topology_run_capability,
79    topology_write_capability,
80};
81pub use citizen::{
82    TopologyEdgeDescriptor, TopologyNodeDescriptor, TopologyPackageDescriptor,
83    topology_edge_class_symbol, topology_node_class_symbol, topology_package_class_symbol,
84};
85pub use compile::{CompiledGraph, compile_graph};
86pub use cookbook::{embodied_intelligence_trace_demo, tiny_graph_demo};
87pub use instrument::{
88    InstrumentTopologyAdapter, InstrumentTopologyCord, InstrumentTopologyJack,
89    InstrumentTopologyModule, InstrumentTopologySpec,
90};
91pub use model::{
92    Budget, BudgetExhausted, Cell, Edge, EdgeId, Graph, GraphTest, Node, NodeId, Port, PortMode,
93    PortRef, Scheduler, SchedulerMode,
94};
95pub use package::{TopologyPackage, TopologyPackageSource, load_package_file, parse_package};
96pub use parse::{graph_from_value, parse_graph};
97pub use patch::{
98    PatchOp, TopologyPatch, apply_topology_patch, apply_topology_patch_ops, patched_connection,
99};
100pub use place::{
101    DomainBridge, PlacedNode, PlacementNodeProfile, PlacementRefusal, PlacementRefusalReason,
102    PlacementReport, PortLatency, SiteId, SiteMap, SiteProfile, place, place_graph,
103};
104pub use reflect::{
105    ReflectedCell, ReflectedNode, TopologyEdgeVisit, TopologyHistory, TopologyRecordedReply,
106    TopologyRunReport, TopologyVisit, topology_explain, topology_reflect, topology_reflect_graph,
107    topology_reflect_run,
108};
109pub use registry::{
110    SharedTopologyRegistry, TopologyEntry, TopologyLib, TopologyRegistry, install_topology_lib,
111    manifest_name as topology_manifest_name, topology_def, topology_exports, topology_get,
112    topology_list, topology_load_file, topology_load_source, topology_reload, topology_remove,
113    topology_site_symbol,
114};
115pub use replay::{TopologyCounterfactual, counterfactual_replay, replay_report};
116pub use site::{TopologyConnection, connection_from_graph};
117
118/// Cookbook recipes for this lib, embedded at build time.
119pub static RECIPES: sim_cookbook::EmbeddedDir =
120    include!(concat!(env!("OUT_DIR"), "/cookbook_recipes.rs"));
121
122#[cfg(test)]
123mod tests;