///|
/// Offline side-by-side diagrams and a filterable optimal matching table.
pub fn comparison_html(
  a : Analysis,
  b : Analysis,
) -> String raise TopologyError {
  let data = comparison_json(a, b)
    .stringify()
    .replace_all(old="<", new="\\u003c")
  let header =
    #|MoonTopoLens · 拓扑比较报告
    #|

MoonTopoLens · 拓扑比较

查看两份数据的区间差异、瓶颈距离与一种最优匹配。

#|

比较摘要

匹配可能不唯一。对角线表示数学上忽略该区间的配对代价,不能据此证明真实对象出现或消失。截止时仍存活的区间数量不同,完整距离为无有限匹配。

左侧持续图

let middle = #|

右侧持续图

let table = #|

区间匹配明细

维度左侧 #编号 [出生,死亡)右侧 #编号 [出生,死亡)类型代价
表格最多显示 200 行;完整匹配保留在 comparison.json 和 matches.csv。图上的顶行表示截止时仍存活的区间。左右图各自使用显示范围,距离由原始数值计算。
全部拓扑计算与匹配由 MoonBit 完成。该页面无需联网。
header + diagram_svg(a) + middle + diagram_svg(b) + table + data + script }