///|
/// Parse SPEF text into a source-positioned AST and normalized RC model.
pub fn parse(
  source : String,
  file? : String = "",
) -> @parser.ParseResult {
  @parser.parse(source, file~)
}

///|
/// Compute aggregate physical and topology metrics for a parsed design.
pub fn analyze(network : @model.RCNetwork) -> @analyzer.DesignMetrics {
  @analyzer.analyze(network)
}

///|
/// Run the default data-quality rule set.
pub fn audit(
  network : @model.RCNetwork,
  config? : @audit.AuditConfig = @audit.AuditConfig::default(),
) -> @audit.AuditReport {
  @audit.audit(network, config~)
}

///|
/// Compute Elmore delay when the selected net is a connected RC tree.
pub fn elmore_delay(net : @model.Net) -> @analyzer.ElmoreResult {
  @analyzer.elmore_delay(net)
}

///|
/// Find the minimum-resistance route between two expanded SPEF node names.
pub fn minimum_resistance_path(
  net : @model.Net,
  source : String,
  target : String,
) -> @path.PathResult {
  @path.minimum_resistance_path(net, source, target)
}

///|
/// Build an all-pairs resistance matrix and identify the electrical diameter.
pub fn resistance_matrix(net : @model.Net) -> @path.PathMatrix {
  @path.resistance_matrix(net)
}

///|
/// Resolve and aggregate coupling capacitance relationships across D_NETs.
pub fn analyze_coupling(network : @model.RCNetwork) -> @coupling.CouplingReport {
  @coupling.analyze(network)
}

///|
/// Produce first-moment-preserving reduced RC models for every network.
pub fn reduce(network : @model.RCNetwork) -> @reduction.DesignReduction {
  @reduction.reduce_design(network)
}