universal-physics-tensor 9.0.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1109) hide show
  1. package/README.md +21 -17
  2. package/bin/upt.mjs +13 -1
  3. package/data/atlas/atlas.json +79 -68
  4. package/data/atlas/atlas.jsonld +1 -1
  5. package/data/atlas/diffusion.json +24 -23
  6. package/data/atlas/oscillators.json +21 -16
  7. package/data/atlas/waves.json +36 -31
  8. package/data/atlas/witness-results.json +11 -11
  9. package/data/bridge-catalog.json +1192 -1636
  10. package/data/bridge-catalog.schema.json +390 -135
  11. package/data/quantities.json +53 -19
  12. package/data/schemas/atlas-record.v0.json +184 -46
  13. package/data/units.json +33 -4
  14. package/dist/atlas/applicability.d.ts.map +1 -1
  15. package/dist/atlas/applicability.js +35 -18
  16. package/dist/atlas/applicability.js.map +1 -1
  17. package/dist/atlas/association.js.map +1 -1
  18. package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -1
  19. package/dist/atlas/benchmark/backend-shapes.js +5 -1
  20. package/dist/atlas/benchmark/backend-shapes.js.map +1 -1
  21. package/dist/atlas/benchmark/baselines.d.ts.map +1 -1
  22. package/dist/atlas/benchmark/baselines.js +8 -0
  23. package/dist/atlas/benchmark/baselines.js.map +1 -1
  24. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +12 -3
  25. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  26. package/dist/atlas/benchmark/hybrid-retrieval.js +30 -21
  27. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  28. package/dist/atlas/benchmark/leakage.js.map +1 -1
  29. package/dist/atlas/benchmark/loader.js +2 -2
  30. package/dist/atlas/benchmark/loader.js.map +1 -1
  31. package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -1
  32. package/dist/atlas/benchmark/run-atlas.js +14 -2
  33. package/dist/atlas/benchmark/run-atlas.js.map +1 -1
  34. package/dist/atlas/benchmark/stats.d.ts +3 -3
  35. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  36. package/dist/atlas/benchmark/stats.js +16 -8
  37. package/dist/atlas/benchmark/stats.js.map +1 -1
  38. package/dist/atlas/benchmark/study.js.map +1 -1
  39. package/dist/atlas/benchmark/types.js.map +1 -1
  40. package/dist/atlas/bridge-record.d.ts +4 -4
  41. package/dist/atlas/bridge-record.d.ts.map +1 -1
  42. package/dist/atlas/bridge-record.js +6 -6
  43. package/dist/atlas/bridge-record.js.map +1 -1
  44. package/dist/atlas/catalog-formal-ref.d.ts +26 -3
  45. package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
  46. package/dist/atlas/catalog-formal-ref.js +52 -5
  47. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  48. package/dist/atlas/chain-pipeline.d.ts +0 -11
  49. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  50. package/dist/atlas/chain-pipeline.js +12 -24
  51. package/dist/atlas/chain-pipeline.js.map +1 -1
  52. package/dist/atlas/composition-table.js.map +1 -1
  53. package/dist/atlas/conventions.js.map +1 -1
  54. package/dist/atlas/coverage.d.ts +2 -2
  55. package/dist/atlas/coverage.js.map +1 -1
  56. package/dist/atlas/derivation.js.map +1 -1
  57. package/dist/atlas/derive-evidence.d.ts +6 -4
  58. package/dist/atlas/derive-evidence.d.ts.map +1 -1
  59. package/dist/atlas/derive-evidence.js +7 -2
  60. package/dist/atlas/derive-evidence.js.map +1 -1
  61. package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
  62. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  63. package/dist/atlas/diffusion/bridges-closure.js +8 -17
  64. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  65. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  66. package/dist/atlas/diffusion/bridges.js +27 -42
  67. package/dist/atlas/diffusion/bridges.js.map +1 -1
  68. package/dist/atlas/diffusion/dimensions.d.ts +6 -14
  69. package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
  70. package/dist/atlas/diffusion/dimensions.js +8 -16
  71. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  72. package/dist/atlas/diffusion/index.d.ts +1 -1
  73. package/dist/atlas/diffusion/index.d.ts.map +1 -1
  74. package/dist/atlas/diffusion/index.js.map +1 -1
  75. package/dist/atlas/diffusion/models.d.ts +3 -3
  76. package/dist/atlas/diffusion/models.d.ts.map +1 -1
  77. package/dist/atlas/diffusion/models.js +5 -10
  78. package/dist/atlas/diffusion/models.js.map +1 -1
  79. package/dist/atlas/diffusion/numerics.d.ts +16 -4
  80. package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
  81. package/dist/atlas/diffusion/numerics.js +38 -24
  82. package/dist/atlas/diffusion/numerics.js.map +1 -1
  83. package/dist/atlas/error-algebra.d.ts +6 -0
  84. package/dist/atlas/error-algebra.d.ts.map +1 -1
  85. package/dist/atlas/error-algebra.js +26 -0
  86. package/dist/atlas/error-algebra.js.map +1 -1
  87. package/dist/atlas/export.d.ts +18 -2
  88. package/dist/atlas/export.d.ts.map +1 -1
  89. package/dist/atlas/export.js +9 -3
  90. package/dist/atlas/export.js.map +1 -1
  91. package/dist/atlas/families.d.ts +19 -2
  92. package/dist/atlas/families.d.ts.map +1 -1
  93. package/dist/atlas/families.js +26 -3
  94. package/dist/atlas/families.js.map +1 -1
  95. package/dist/atlas/family.d.ts +27 -0
  96. package/dist/atlas/family.d.ts.map +1 -0
  97. package/dist/atlas/family.js +12 -0
  98. package/dist/atlas/family.js.map +1 -0
  99. package/dist/atlas/index.d.ts +3 -2
  100. package/dist/atlas/index.d.ts.map +1 -1
  101. package/dist/atlas/index.js +2 -1
  102. package/dist/atlas/index.js.map +1 -1
  103. package/dist/atlas/link-prediction.d.ts +107 -4
  104. package/dist/atlas/link-prediction.d.ts.map +1 -1
  105. package/dist/atlas/link-prediction.js +212 -66
  106. package/dist/atlas/link-prediction.js.map +1 -1
  107. package/dist/atlas/model.js.map +1 -1
  108. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  109. package/dist/atlas/oscillators/bridges-coarse.js +7 -12
  110. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  111. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  112. package/dist/atlas/oscillators/bridges-exact.js +6 -10
  113. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  114. package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
  115. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  116. package/dist/atlas/oscillators/bridges-limits.js +23 -36
  117. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  118. package/dist/atlas/oscillators/dimensions.d.ts +9 -21
  119. package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
  120. package/dist/atlas/oscillators/dimensions.js +9 -21
  121. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  122. package/dist/atlas/oscillators/index.d.ts +1 -16
  123. package/dist/atlas/oscillators/index.d.ts.map +1 -1
  124. package/dist/atlas/oscillators/index.js.map +1 -1
  125. package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
  126. package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
  127. package/dist/atlas/oscillators/limit-witnesses.js +17 -15
  128. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  129. package/dist/atlas/oscillators/models.d.ts.map +1 -1
  130. package/dist/atlas/oscillators/models.js +2 -6
  131. package/dist/atlas/oscillators/models.js.map +1 -1
  132. package/dist/atlas/oscillators/norm-transport-witness.js.map +1 -1
  133. package/dist/atlas/oscillators/norm-transport.js.map +1 -1
  134. package/dist/atlas/oscillators/norms.js.map +1 -1
  135. package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
  136. package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
  137. package/dist/atlas/oscillators/pendulum-motion.js +60 -40
  138. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  139. package/dist/atlas/oscillators/phase-carriage.js.map +1 -1
  140. package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
  141. package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
  142. package/dist/atlas/oscillators/phase-translation.js +3 -4
  143. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  144. package/dist/atlas/oscillators/position-translation.d.ts +68 -7
  145. package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
  146. package/dist/atlas/oscillators/position-translation.js +123 -12
  147. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  148. package/dist/atlas/oscillators/rejections.d.ts +0 -2
  149. package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
  150. package/dist/atlas/oscillators/rejections.js +0 -7
  151. package/dist/atlas/oscillators/rejections.js.map +1 -1
  152. package/dist/atlas/path-bound.js.map +1 -1
  153. package/dist/atlas/physjs-entries.generated.d.ts +25 -24
  154. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  155. package/dist/atlas/physjs-entries.generated.js +25 -24
  156. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  157. package/dist/atlas/physjs-ref.d.ts +107 -70
  158. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  159. package/dist/atlas/physjs-ref.js +184 -101
  160. package/dist/atlas/physjs-ref.js.map +1 -1
  161. package/dist/atlas/physjs-reviewed.d.ts +31 -0
  162. package/dist/atlas/physjs-reviewed.d.ts.map +1 -0
  163. package/dist/atlas/physjs-reviewed.js +194 -0
  164. package/dist/atlas/physjs-reviewed.js.map +1 -0
  165. package/dist/atlas/poster/associations.js.map +1 -1
  166. package/dist/atlas/poster/derivations.js.map +1 -1
  167. package/dist/atlas/poster/statements.d.ts +0 -19
  168. package/dist/atlas/poster/statements.d.ts.map +1 -1
  169. package/dist/atlas/poster/statements.js +1 -1
  170. package/dist/atlas/poster/statements.js.map +1 -1
  171. package/dist/atlas/proof-target.d.ts +1 -1
  172. package/dist/atlas/proof-target.js +1 -1
  173. package/dist/atlas/proof-target.js.map +1 -1
  174. package/dist/atlas/public.d.ts +2 -1
  175. package/dist/atlas/public.d.ts.map +1 -1
  176. package/dist/atlas/public.js +2 -1
  177. package/dist/atlas/public.js.map +1 -1
  178. package/dist/atlas/regime.d.ts +1 -1
  179. package/dist/atlas/regime.d.ts.map +1 -1
  180. package/dist/atlas/regime.js +1 -1
  181. package/dist/atlas/regime.js.map +1 -1
  182. package/dist/atlas/serialize.d.ts +18 -12
  183. package/dist/atlas/serialize.d.ts.map +1 -1
  184. package/dist/atlas/serialize.js +28 -18
  185. package/dist/atlas/serialize.js.map +1 -1
  186. package/dist/atlas/statement.js.map +1 -1
  187. package/dist/atlas/text-overlap.d.ts +23 -0
  188. package/dist/atlas/text-overlap.d.ts.map +1 -0
  189. package/dist/atlas/text-overlap.js +41 -0
  190. package/dist/atlas/text-overlap.js.map +1 -0
  191. package/dist/atlas/translation-registry.js.map +1 -1
  192. package/dist/atlas/translation.js.map +1 -1
  193. package/dist/atlas/types.d.ts +9 -2
  194. package/dist/atlas/types.d.ts.map +1 -1
  195. package/dist/atlas/types.js +1 -1
  196. package/dist/atlas/types.js.map +1 -1
  197. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  198. package/dist/atlas/waves/bridges-closure.js +2 -9
  199. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  200. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  201. package/dist/atlas/waves/bridges.js +32 -52
  202. package/dist/atlas/waves/bridges.js.map +1 -1
  203. package/dist/atlas/waves/index.d.ts +1 -1
  204. package/dist/atlas/waves/index.d.ts.map +1 -1
  205. package/dist/atlas/waves/index.js.map +1 -1
  206. package/dist/atlas/waves/models.d.ts +5 -6
  207. package/dist/atlas/waves/models.d.ts.map +1 -1
  208. package/dist/atlas/waves/models.js +7 -13
  209. package/dist/atlas/waves/models.js.map +1 -1
  210. package/dist/atlas/waves/numerics.d.ts.map +1 -1
  211. package/dist/atlas/waves/numerics.js +10 -3
  212. package/dist/atlas/waves/numerics.js.map +1 -1
  213. package/dist/atlas/witness-artifact.js.map +1 -1
  214. package/dist/atlas/witness-dominance.d.ts +4 -3
  215. package/dist/atlas/witness-dominance.d.ts.map +1 -1
  216. package/dist/atlas/witness-dominance.js +15 -5
  217. package/dist/atlas/witness-dominance.js.map +1 -1
  218. package/dist/atlas/witness-numeric.d.ts +38 -4
  219. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  220. package/dist/atlas/witness-numeric.js +80 -2
  221. package/dist/atlas/witness-numeric.js.map +1 -1
  222. package/dist/atlas/witness-result.d.ts +7 -1
  223. package/dist/atlas/witness-result.d.ts.map +1 -1
  224. package/dist/atlas/witness-result.js.map +1 -1
  225. package/dist/atlas/witness-specs.d.ts.map +1 -1
  226. package/dist/atlas/witness-specs.js +19 -0
  227. package/dist/atlas/witness-specs.js.map +1 -1
  228. package/dist/atlas/witness-symbolic.d.ts +75 -3
  229. package/dist/atlas/witness-symbolic.d.ts.map +1 -1
  230. package/dist/atlas/witness-symbolic.js +116 -10
  231. package/dist/atlas/witness-symbolic.js.map +1 -1
  232. package/dist/atlas/witnesses/quantum-support.js.map +1 -1
  233. package/dist/bridges/caller-table.d.ts +1 -1
  234. package/dist/bridges/caller-table.d.ts.map +1 -1
  235. package/dist/bridges/caller-table.js.map +1 -1
  236. package/dist/bridges/carrier-sign.d.ts.map +1 -1
  237. package/dist/bridges/carrier-sign.js +8 -3
  238. package/dist/bridges/carrier-sign.js.map +1 -1
  239. package/dist/bridges/catalog-adapter.d.ts +12 -3
  240. package/dist/bridges/catalog-adapter.d.ts.map +1 -1
  241. package/dist/bridges/catalog-adapter.js +17 -9
  242. package/dist/bridges/catalog-adapter.js.map +1 -1
  243. package/dist/bridges/catalog-load.d.ts +12 -2
  244. package/dist/bridges/catalog-load.d.ts.map +1 -1
  245. package/dist/bridges/catalog-load.js +181 -13
  246. package/dist/bridges/catalog-load.js.map +1 -1
  247. package/dist/bridges/catalog-types.d.ts +74 -26
  248. package/dist/bridges/catalog-types.d.ts.map +1 -1
  249. package/dist/bridges/catalog-types.js +11 -1
  250. package/dist/bridges/catalog-types.js.map +1 -1
  251. package/dist/bridges/coefficient-statement.js +1 -5
  252. package/dist/bridges/coefficient-statement.js.map +1 -1
  253. package/dist/bridges/confrontation-coverage.js.map +1 -1
  254. package/dist/bridges/confrontations.d.ts +1 -1
  255. package/dist/bridges/confrontations.d.ts.map +1 -1
  256. package/dist/bridges/confrontations.js +1 -1
  257. package/dist/bridges/confrontations.js.map +1 -1
  258. package/dist/bridges/evaluation-errors.d.ts +46 -3
  259. package/dist/bridges/evaluation-errors.d.ts.map +1 -1
  260. package/dist/bridges/evaluation-errors.js +40 -4
  261. package/dist/bridges/evaluation-errors.js.map +1 -1
  262. package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
  263. package/dist/bridges/evaluator-inputs.js +7 -5
  264. package/dist/bridges/evaluator-inputs.js.map +1 -1
  265. package/dist/bridges/evaluators.d.ts +17 -2
  266. package/dist/bridges/evaluators.d.ts.map +1 -1
  267. package/dist/bridges/evaluators.js +76 -28
  268. package/dist/bridges/evaluators.js.map +1 -1
  269. package/dist/bridges/expr-parse.d.ts +38 -4
  270. package/dist/bridges/expr-parse.d.ts.map +1 -1
  271. package/dist/bridges/expr-parse.js +101 -12
  272. package/dist/bridges/expr-parse.js.map +1 -1
  273. package/dist/bridges/holds.d.ts +40 -4
  274. package/dist/bridges/holds.d.ts.map +1 -1
  275. package/dist/bridges/holds.js +128 -19
  276. package/dist/bridges/holds.js.map +1 -1
  277. package/dist/bridges/index.d.ts +15 -14
  278. package/dist/bridges/index.d.ts.map +1 -1
  279. package/dist/bridges/index.js +14 -15
  280. package/dist/bridges/index.js.map +1 -1
  281. package/dist/bridges/input-contract.js.map +1 -1
  282. package/dist/bridges/membership.d.ts +5 -3
  283. package/dist/bridges/membership.d.ts.map +1 -1
  284. package/dist/bridges/membership.js +5 -6
  285. package/dist/bridges/membership.js.map +1 -1
  286. package/dist/bridges/notices.d.ts.map +1 -1
  287. package/dist/bridges/notices.js +5 -5
  288. package/dist/bridges/notices.js.map +1 -1
  289. package/dist/bridges/observations/types.js.map +1 -1
  290. package/dist/bridges/rejected.d.ts +11 -17
  291. package/dist/bridges/rejected.d.ts.map +1 -1
  292. package/dist/bridges/rejected.js +13 -68
  293. package/dist/bridges/rejected.js.map +1 -1
  294. package/dist/bridges/relation-eval.d.ts +6 -7
  295. package/dist/bridges/relation-eval.d.ts.map +1 -1
  296. package/dist/bridges/relation-eval.js +20 -50
  297. package/dist/bridges/relation-eval.js.map +1 -1
  298. package/dist/bridges/rhs-registry.js.map +1 -1
  299. package/dist/bridges/sensitivity.d.ts +11 -3
  300. package/dist/bridges/sensitivity.d.ts.map +1 -1
  301. package/dist/bridges/sensitivity.js +27 -13
  302. package/dist/bridges/sensitivity.js.map +1 -1
  303. package/dist/bridges/tensor-index.js.map +1 -1
  304. package/dist/bridges/types.d.ts +1 -7
  305. package/dist/bridges/types.d.ts.map +1 -1
  306. package/dist/bridges/types.js +1 -4
  307. package/dist/bridges/types.js.map +1 -1
  308. package/dist/bridges/validity.d.ts +33 -0
  309. package/dist/bridges/validity.d.ts.map +1 -0
  310. package/dist/bridges/validity.js +67 -0
  311. package/dist/bridges/validity.js.map +1 -0
  312. package/dist/canonical/canonical-equation.js.map +1 -1
  313. package/dist/canonical/dimensional-fields.js.map +1 -1
  314. package/dist/canonical/entries/_l1-build.js.map +1 -1
  315. package/dist/canonical/entries/atomic.js +1 -3
  316. package/dist/canonical/entries/atomic.js.map +1 -1
  317. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  318. package/dist/canonical/entries/condensed-matter.js +8 -9
  319. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  320. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  321. package/dist/canonical/entries/dimensional-classics.js +5 -6
  322. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  323. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  324. package/dist/canonical/entries/electromagnetism.js +6 -12
  325. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  326. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  327. package/dist/canonical/entries/fluids-waves.js +3 -7
  328. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  329. package/dist/canonical/entries/mechanics.d.ts.map +1 -1
  330. package/dist/canonical/entries/mechanics.js +4 -6
  331. package/dist/canonical/entries/mechanics.js.map +1 -1
  332. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  333. package/dist/canonical/entries/nonmonomial.js +38 -39
  334. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  335. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  336. package/dist/canonical/entries/relativity.js +6 -6
  337. package/dist/canonical/entries/relativity.js.map +1 -1
  338. package/dist/canonical/entries/statistical-mechanics.js +5 -5
  339. package/dist/canonical/entries/statistical-mechanics.js.map +1 -1
  340. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  341. package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
  342. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  343. package/dist/canonical/fixed-points.d.ts +94 -0
  344. package/dist/canonical/fixed-points.d.ts.map +1 -0
  345. package/dist/canonical/fixed-points.js +81 -0
  346. package/dist/canonical/fixed-points.js.map +1 -0
  347. package/dist/canonical/linkage.d.ts +29 -4
  348. package/dist/canonical/linkage.d.ts.map +1 -1
  349. package/dist/canonical/linkage.js +47 -64
  350. package/dist/canonical/linkage.js.map +1 -1
  351. package/dist/canonical/normal-form.d.ts +0 -8
  352. package/dist/canonical/normal-form.d.ts.map +1 -1
  353. package/dist/canonical/normal-form.js +22 -23
  354. package/dist/canonical/normal-form.js.map +1 -1
  355. package/dist/canonical/registry.js.map +1 -1
  356. package/dist/canonical/residual.js.map +1 -1
  357. package/dist/canonical/seed-l-layer.d.ts +7 -1
  358. package/dist/canonical/seed-l-layer.d.ts.map +1 -1
  359. package/dist/canonical/seed-l-layer.js +7 -1
  360. package/dist/canonical/seed-l-layer.js.map +1 -1
  361. package/dist/canonical/structural.d.ts +42 -21
  362. package/dist/canonical/structural.d.ts.map +1 -1
  363. package/dist/canonical/structural.js +64 -23
  364. package/dist/canonical/structural.js.map +1 -1
  365. package/dist/cases/brownian-sphere.d.ts +3 -3
  366. package/dist/cases/brownian-sphere.d.ts.map +1 -1
  367. package/dist/cases/brownian-sphere.js +10 -9
  368. package/dist/cases/brownian-sphere.js.map +1 -1
  369. package/dist/cases/damped-resonator.d.ts.map +1 -1
  370. package/dist/cases/damped-resonator.js +8 -11
  371. package/dist/cases/damped-resonator.js.map +1 -1
  372. package/dist/cases/index.js.map +1 -1
  373. package/dist/cases/kepler-rv.d.ts +1 -1
  374. package/dist/cases/kepler-rv.d.ts.map +1 -1
  375. package/dist/cases/kepler-rv.js +3 -2
  376. package/dist/cases/kepler-rv.js.map +1 -1
  377. package/dist/cases/lumped-cooling.d.ts +8 -3
  378. package/dist/cases/lumped-cooling.d.ts.map +1 -1
  379. package/dist/cases/lumped-cooling.js +22 -24
  380. package/dist/cases/lumped-cooling.js.map +1 -1
  381. package/dist/cases/quadrature.d.ts +7 -9
  382. package/dist/cases/quadrature.d.ts.map +1 -1
  383. package/dist/cases/quadrature.js +28 -32
  384. package/dist/cases/quadrature.js.map +1 -1
  385. package/dist/cases/resistor-noise.js +7 -7
  386. package/dist/cases/resistor-noise.js.map +1 -1
  387. package/dist/cases/skin-depth.d.ts +0 -4
  388. package/dist/cases/skin-depth.d.ts.map +1 -1
  389. package/dist/cases/skin-depth.js +3 -7
  390. package/dist/cases/skin-depth.js.map +1 -1
  391. package/dist/cases/types.js.map +1 -1
  392. package/dist/cli/args.d.ts +30 -3
  393. package/dist/cli/args.d.ts.map +1 -1
  394. package/dist/cli/args.js +47 -9
  395. package/dist/cli/args.js.map +1 -1
  396. package/dist/cli/bindings.d.ts +13 -0
  397. package/dist/cli/bindings.d.ts.map +1 -0
  398. package/dist/cli/bindings.js +33 -0
  399. package/dist/cli/bindings.js.map +1 -0
  400. package/dist/cli/closed-form-range.js.map +1 -1
  401. package/dist/cli/command.d.ts +8 -1
  402. package/dist/cli/command.d.ts.map +1 -1
  403. package/dist/cli/command.js.map +1 -1
  404. package/dist/cli/commands/_atlas-map.d.ts +2 -11
  405. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  406. package/dist/cli/commands/_atlas-map.js +50 -35
  407. package/dist/cli/commands/_atlas-map.js.map +1 -1
  408. package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
  409. package/dist/cli/commands/_atlas-route.js +6 -2
  410. package/dist/cli/commands/_atlas-route.js.map +1 -1
  411. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  412. package/dist/cli/commands/_discovery-opts.js +48 -14
  413. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  414. package/dist/cli/commands/atlas.d.ts.map +1 -1
  415. package/dist/cli/commands/atlas.js +9 -8
  416. package/dist/cli/commands/atlas.js.map +1 -1
  417. package/dist/cli/commands/audit.d.ts.map +1 -1
  418. package/dist/cli/commands/audit.js +20 -20
  419. package/dist/cli/commands/audit.js.map +1 -1
  420. package/dist/cli/commands/axes.d.ts.map +1 -1
  421. package/dist/cli/commands/axes.js +20 -1
  422. package/dist/cli/commands/axes.js.map +1 -1
  423. package/dist/cli/commands/candidates.d.ts.map +1 -1
  424. package/dist/cli/commands/candidates.js +16 -8
  425. package/dist/cli/commands/candidates.js.map +1 -1
  426. package/dist/cli/commands/canonical.js.map +1 -1
  427. package/dist/cli/commands/chain.js +1 -1
  428. package/dist/cli/commands/chain.js.map +1 -1
  429. package/dist/cli/commands/confront.d.ts.map +1 -1
  430. package/dist/cli/commands/confront.js +22 -20
  431. package/dist/cli/commands/confront.js.map +1 -1
  432. package/dist/cli/commands/connectors.js.map +1 -1
  433. package/dist/cli/commands/coverage.js.map +1 -1
  434. package/dist/cli/commands/derive.d.ts.map +1 -1
  435. package/dist/cli/commands/derive.js +60 -35
  436. package/dist/cli/commands/derive.js.map +1 -1
  437. package/dist/cli/commands/discover.d.ts.map +1 -1
  438. package/dist/cli/commands/discover.js +20 -10
  439. package/dist/cli/commands/discover.js.map +1 -1
  440. package/dist/cli/commands/eval.d.ts.map +1 -1
  441. package/dist/cli/commands/eval.js +14 -10
  442. package/dist/cli/commands/eval.js.map +1 -1
  443. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  444. package/dist/cli/commands/evaluate.js +108 -58
  445. package/dist/cli/commands/evaluate.js.map +1 -1
  446. package/dist/cli/commands/explain.d.ts.map +1 -1
  447. package/dist/cli/commands/explain.js +16 -8
  448. package/dist/cli/commands/explain.js.map +1 -1
  449. package/dist/cli/commands/frontier.js.map +1 -1
  450. package/dist/cli/commands/ground.d.ts.map +1 -1
  451. package/dist/cli/commands/ground.js +41 -10
  452. package/dist/cli/commands/ground.js.map +1 -1
  453. package/dist/cli/commands/index.js.map +1 -1
  454. package/dist/cli/commands/map.d.ts.map +1 -1
  455. package/dist/cli/commands/map.js +155 -92
  456. package/dist/cli/commands/map.js.map +1 -1
  457. package/dist/cli/commands/metric.d.ts.map +1 -1
  458. package/dist/cli/commands/metric.js +58 -20
  459. package/dist/cli/commands/metric.js.map +1 -1
  460. package/dist/cli/commands/path.d.ts +10 -0
  461. package/dist/cli/commands/path.d.ts.map +1 -1
  462. package/dist/cli/commands/path.js +29 -7
  463. package/dist/cli/commands/path.js.map +1 -1
  464. package/dist/cli/commands/predict.js.map +1 -1
  465. package/dist/cli/commands/priority.js.map +1 -1
  466. package/dist/cli/commands/probe.d.ts.map +1 -1
  467. package/dist/cli/commands/probe.js +105 -38
  468. package/dist/cli/commands/probe.js.map +1 -1
  469. package/dist/cli/commands/recover.js +1 -1
  470. package/dist/cli/commands/recover.js.map +1 -1
  471. package/dist/cli/commands/regime.d.ts +5 -4
  472. package/dist/cli/commands/regime.d.ts.map +1 -1
  473. package/dist/cli/commands/regime.js +25 -26
  474. package/dist/cli/commands/regime.js.map +1 -1
  475. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  476. package/dist/cli/commands/retrieve.js +23 -14
  477. package/dist/cli/commands/retrieve.js.map +1 -1
  478. package/dist/cli/commands/search.d.ts.map +1 -1
  479. package/dist/cli/commands/search.js +9 -4
  480. package/dist/cli/commands/search.js.map +1 -1
  481. package/dist/cli/commands/symbolic.js +31 -36
  482. package/dist/cli/commands/symbolic.js.map +1 -1
  483. package/dist/cli/commands/testplan.d.ts.map +1 -1
  484. package/dist/cli/commands/testplan.js +5 -3
  485. package/dist/cli/commands/testplan.js.map +1 -1
  486. package/dist/cli/conventions.js.map +1 -1
  487. package/dist/cli/determination.js.map +1 -1
  488. package/dist/cli/errors.js.map +1 -1
  489. package/dist/cli/euler-guard.js.map +1 -1
  490. package/dist/cli/eval-numbers.js.map +1 -1
  491. package/dist/cli/expr-print.d.ts +28 -3
  492. package/dist/cli/expr-print.d.ts.map +1 -1
  493. package/dist/cli/expr-print.js +42 -22
  494. package/dist/cli/expr-print.js.map +1 -1
  495. package/dist/cli/flag-help.js.map +1 -1
  496. package/dist/cli/graphs.js.map +1 -1
  497. package/dist/cli/library-defaults.d.ts +19 -0
  498. package/dist/cli/library-defaults.d.ts.map +1 -0
  499. package/dist/cli/library-defaults.js +22 -0
  500. package/dist/cli/library-defaults.js.map +1 -0
  501. package/dist/cli/main.d.ts +7 -0
  502. package/dist/cli/main.d.ts.map +1 -1
  503. package/dist/cli/main.js +25 -6
  504. package/dist/cli/main.js.map +1 -1
  505. package/dist/cli/map-evidence.js.map +1 -1
  506. package/dist/cli/numeric-flag.d.ts +12 -0
  507. package/dist/cli/numeric-flag.d.ts.map +1 -0
  508. package/dist/cli/numeric-flag.js +44 -0
  509. package/dist/cli/numeric-flag.js.map +1 -0
  510. package/dist/cli/output.d.ts +23 -6
  511. package/dist/cli/output.d.ts.map +1 -1
  512. package/dist/cli/output.js +15 -0
  513. package/dist/cli/output.js.map +1 -1
  514. package/dist/cli/published-url.js.map +1 -1
  515. package/dist/cli/record-reach.d.ts +6 -0
  516. package/dist/cli/record-reach.d.ts.map +1 -1
  517. package/dist/cli/record-reach.js +17 -11
  518. package/dist/cli/record-reach.js.map +1 -1
  519. package/dist/cli/record-tables.d.ts.map +1 -1
  520. package/dist/cli/record-tables.js +7 -6
  521. package/dist/cli/record-tables.js.map +1 -1
  522. package/dist/cli/record.d.ts +1 -5
  523. package/dist/cli/record.d.ts.map +1 -1
  524. package/dist/cli/record.js +40 -20
  525. package/dist/cli/record.js.map +1 -1
  526. package/dist/cli/search-index.d.ts +5 -0
  527. package/dist/cli/search-index.d.ts.map +1 -1
  528. package/dist/cli/search-index.js +19 -7
  529. package/dist/cli/search-index.js.map +1 -1
  530. package/dist/cli/statuses.d.ts +0 -2
  531. package/dist/cli/statuses.d.ts.map +1 -1
  532. package/dist/cli/statuses.js +0 -7
  533. package/dist/cli/statuses.js.map +1 -1
  534. package/dist/cli/stored-results.d.ts +7 -0
  535. package/dist/cli/stored-results.d.ts.map +1 -0
  536. package/dist/cli/stored-results.js +23 -0
  537. package/dist/cli/stored-results.js.map +1 -0
  538. package/dist/cli/top-level-help.js.map +1 -1
  539. package/dist/cli/version.d.ts.map +1 -1
  540. package/dist/cli/version.js +7 -5
  541. package/dist/cli/version.js.map +1 -1
  542. package/dist/cli-api.d.ts +49 -14
  543. package/dist/cli-api.d.ts.map +1 -1
  544. package/dist/cli-api.js +42 -17
  545. package/dist/cli-api.js.map +1 -1
  546. package/dist/composition/adjudication.js.map +1 -1
  547. package/dist/composition/algebraic-equivalence.d.ts +43 -0
  548. package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
  549. package/dist/composition/algebraic-equivalence.js +115 -0
  550. package/dist/composition/algebraic-equivalence.js.map +1 -0
  551. package/dist/composition/aliases.js.map +1 -1
  552. package/dist/composition/audit-coverage.d.ts +2 -0
  553. package/dist/composition/audit-coverage.d.ts.map +1 -1
  554. package/dist/composition/audit-coverage.js.map +1 -1
  555. package/dist/composition/axes.d.ts +6 -0
  556. package/dist/composition/axes.d.ts.map +1 -1
  557. package/dist/composition/axes.js +18 -6
  558. package/dist/composition/axes.js.map +1 -1
  559. package/dist/composition/axis-audit.d.ts +47 -20
  560. package/dist/composition/axis-audit.d.ts.map +1 -1
  561. package/dist/composition/axis-audit.js +82 -9
  562. package/dist/composition/axis-audit.js.map +1 -1
  563. package/dist/composition/bridge-analysis.d.ts +14 -15
  564. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  565. package/dist/composition/bridge-analysis.js +148 -91
  566. package/dist/composition/bridge-analysis.js.map +1 -1
  567. package/dist/composition/bridge-prediction.d.ts +5 -1
  568. package/dist/composition/bridge-prediction.d.ts.map +1 -1
  569. package/dist/composition/bridge-prediction.js +12 -16
  570. package/dist/composition/bridge-prediction.js.map +1 -1
  571. package/dist/composition/buckingham-filter.js.map +1 -1
  572. package/dist/composition/canonical-compare.d.ts +40 -0
  573. package/dist/composition/canonical-compare.d.ts.map +1 -1
  574. package/dist/composition/canonical-compare.js +134 -26
  575. package/dist/composition/canonical-compare.js.map +1 -1
  576. package/dist/composition/canonical-graph.d.ts +9 -10
  577. package/dist/composition/canonical-graph.d.ts.map +1 -1
  578. package/dist/composition/canonical-graph.js +33 -102
  579. package/dist/composition/canonical-graph.js.map +1 -1
  580. package/dist/composition/canonical-json.js +2 -2
  581. package/dist/composition/canonical-json.js.map +1 -1
  582. package/dist/composition/canonical-prefactors.js.map +1 -1
  583. package/dist/composition/catalog-graph.d.ts.map +1 -1
  584. package/dist/composition/catalog-graph.js +8 -25
  585. package/dist/composition/catalog-graph.js.map +1 -1
  586. package/dist/composition/chain-candidate.d.ts +10 -0
  587. package/dist/composition/chain-candidate.d.ts.map +1 -1
  588. package/dist/composition/chain-candidate.js +11 -2
  589. package/dist/composition/chain-candidate.js.map +1 -1
  590. package/dist/composition/chain-match.d.ts +6 -3
  591. package/dist/composition/chain-match.d.ts.map +1 -1
  592. package/dist/composition/chain-match.js +4 -1
  593. package/dist/composition/chain-match.js.map +1 -1
  594. package/dist/composition/chain-regime.js.map +1 -1
  595. package/dist/composition/chain-result.d.ts.map +1 -1
  596. package/dist/composition/chain-result.js +2 -14
  597. package/dist/composition/chain-result.js.map +1 -1
  598. package/dist/composition/compose-surface.js.map +1 -1
  599. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  600. package/dist/composition/compose-symbolic.js +3 -2
  601. package/dist/composition/compose-symbolic.js.map +1 -1
  602. package/dist/composition/compose.d.ts.map +1 -1
  603. package/dist/composition/compose.js +166 -41
  604. package/dist/composition/compose.js.map +1 -1
  605. package/dist/composition/composition-recovery.d.ts.map +1 -1
  606. package/dist/composition/composition-recovery.js +4 -7
  607. package/dist/composition/composition-recovery.js.map +1 -1
  608. package/dist/composition/consequence.d.ts.map +1 -1
  609. package/dist/composition/consequence.js +15 -6
  610. package/dist/composition/consequence.js.map +1 -1
  611. package/dist/composition/consistency.js.map +1 -1
  612. package/dist/composition/descriptor.d.ts +1 -1
  613. package/dist/composition/descriptor.d.ts.map +1 -1
  614. package/dist/composition/descriptor.js.map +1 -1
  615. package/dist/composition/dimension-adjacency.js.map +1 -1
  616. package/dist/composition/discovery.d.ts +77 -11
  617. package/dist/composition/discovery.d.ts.map +1 -1
  618. package/dist/composition/discovery.js +194 -80
  619. package/dist/composition/discovery.js.map +1 -1
  620. package/dist/composition/edge.d.ts +40 -10
  621. package/dist/composition/edge.d.ts.map +1 -1
  622. package/dist/composition/edge.js +47 -12
  623. package/dist/composition/edge.js.map +1 -1
  624. package/dist/composition/enumerate.d.ts +2 -2
  625. package/dist/composition/enumerate.d.ts.map +1 -1
  626. package/dist/composition/enumerate.js +18 -3
  627. package/dist/composition/enumerate.js.map +1 -1
  628. package/dist/composition/evaluate-relation.d.ts +35 -11
  629. package/dist/composition/evaluate-relation.d.ts.map +1 -1
  630. package/dist/composition/evaluate-relation.js +60 -39
  631. package/dist/composition/evaluate-relation.js.map +1 -1
  632. package/dist/composition/explain.d.ts +5 -9
  633. package/dist/composition/explain.d.ts.map +1 -1
  634. package/dist/composition/explain.js +38 -18
  635. package/dist/composition/explain.js.map +1 -1
  636. package/dist/composition/expr-eval.d.ts.map +1 -1
  637. package/dist/composition/expr-eval.js +2 -11
  638. package/dist/composition/expr-eval.js.map +1 -1
  639. package/dist/composition/expr-simplify.d.ts +16 -0
  640. package/dist/composition/expr-simplify.d.ts.map +1 -1
  641. package/dist/composition/expr-simplify.js +24 -59
  642. package/dist/composition/expr-simplify.js.map +1 -1
  643. package/dist/composition/expr-subst.js.map +1 -1
  644. package/dist/composition/formula-shape.d.ts +28 -0
  645. package/dist/composition/formula-shape.d.ts.map +1 -1
  646. package/dist/composition/formula-shape.js +96 -2
  647. package/dist/composition/formula-shape.js.map +1 -1
  648. package/dist/composition/frontier-account.d.ts +3 -2
  649. package/dist/composition/frontier-account.d.ts.map +1 -1
  650. package/dist/composition/frontier-account.js +7 -3
  651. package/dist/composition/frontier-account.js.map +1 -1
  652. package/dist/composition/graph-structure.d.ts +98 -0
  653. package/dist/composition/graph-structure.d.ts.map +1 -0
  654. package/dist/composition/graph-structure.js +167 -0
  655. package/dist/composition/graph-structure.js.map +1 -0
  656. package/dist/composition/graph-viz-svg.d.ts.map +1 -1
  657. package/dist/composition/graph-viz-svg.js +1 -1
  658. package/dist/composition/graph-viz-svg.js.map +1 -1
  659. package/dist/composition/graph-viz.d.ts.map +1 -1
  660. package/dist/composition/graph-viz.js +8 -37
  661. package/dist/composition/graph-viz.js.map +1 -1
  662. package/dist/composition/grounding.js.map +1 -1
  663. package/dist/composition/identifiability.d.ts +91 -4
  664. package/dist/composition/identifiability.d.ts.map +1 -1
  665. package/dist/composition/identifiability.js +363 -6
  666. package/dist/composition/identifiability.js.map +1 -1
  667. package/dist/composition/index.d.ts +14 -8
  668. package/dist/composition/index.d.ts.map +1 -1
  669. package/dist/composition/index.js +7 -5
  670. package/dist/composition/index.js.map +1 -1
  671. package/dist/composition/mathts-quiet.d.ts +29 -0
  672. package/dist/composition/mathts-quiet.d.ts.map +1 -0
  673. package/dist/composition/mathts-quiet.js +57 -0
  674. package/dist/composition/mathts-quiet.js.map +1 -0
  675. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  676. package/dist/composition/mathts-scalar-symbols.js +20 -35
  677. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  678. package/dist/composition/not-composable-seeds.d.ts +3 -1
  679. package/dist/composition/not-composable-seeds.d.ts.map +1 -1
  680. package/dist/composition/not-composable-seeds.js +2 -0
  681. package/dist/composition/not-composable-seeds.js.map +1 -1
  682. package/dist/composition/probe/backend-protocol.js.map +1 -1
  683. package/dist/composition/probe/candidate-store.js.map +1 -1
  684. package/dist/composition/probe/corpus.d.ts +4 -2
  685. package/dist/composition/probe/corpus.d.ts.map +1 -1
  686. package/dist/composition/probe/corpus.js +20 -9
  687. package/dist/composition/probe/corpus.js.map +1 -1
  688. package/dist/composition/probe/dataset.d.ts +17 -0
  689. package/dist/composition/probe/dataset.d.ts.map +1 -1
  690. package/dist/composition/probe/dataset.js +95 -50
  691. package/dist/composition/probe/dataset.js.map +1 -1
  692. package/dist/composition/probe/experiment-design.d.ts +5 -1
  693. package/dist/composition/probe/experiment-design.d.ts.map +1 -1
  694. package/dist/composition/probe/experiment-design.js +44 -24
  695. package/dist/composition/probe/experiment-design.js.map +1 -1
  696. package/dist/composition/probe/expression-gaps.js.map +1 -1
  697. package/dist/composition/probe/falsify.d.ts +14 -3
  698. package/dist/composition/probe/falsify.d.ts.map +1 -1
  699. package/dist/composition/probe/falsify.js +16 -27
  700. package/dist/composition/probe/falsify.js.map +1 -1
  701. package/dist/composition/probe/fingerprint.js.map +1 -1
  702. package/dist/composition/probe/fit.d.ts +7 -1
  703. package/dist/composition/probe/fit.d.ts.map +1 -1
  704. package/dist/composition/probe/fit.js +48 -23
  705. package/dist/composition/probe/fit.js.map +1 -1
  706. package/dist/composition/probe/frontier.d.ts.map +1 -1
  707. package/dist/composition/probe/frontier.js +33 -15
  708. package/dist/composition/probe/frontier.js.map +1 -1
  709. package/dist/composition/probe/generator.d.ts +27 -1
  710. package/dist/composition/probe/generator.d.ts.map +1 -1
  711. package/dist/composition/probe/generator.js +53 -30
  712. package/dist/composition/probe/generator.js.map +1 -1
  713. package/dist/composition/probe/index.d.ts +18 -2
  714. package/dist/composition/probe/index.d.ts.map +1 -1
  715. package/dist/composition/probe/index.js +10 -2
  716. package/dist/composition/probe/index.js.map +1 -1
  717. package/dist/composition/probe/limits.d.ts +24 -1
  718. package/dist/composition/probe/limits.d.ts.map +1 -1
  719. package/dist/composition/probe/limits.js +53 -11
  720. package/dist/composition/probe/limits.js.map +1 -1
  721. package/dist/composition/probe/metadata.js.map +1 -1
  722. package/dist/composition/probe/pipeline.d.ts +5 -0
  723. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  724. package/dist/composition/probe/pipeline.js +22 -9
  725. package/dist/composition/probe/pipeline.js.map +1 -1
  726. package/dist/composition/probe/power-law.d.ts +121 -0
  727. package/dist/composition/probe/power-law.d.ts.map +1 -0
  728. package/dist/composition/probe/power-law.js +255 -0
  729. package/dist/composition/probe/power-law.js.map +1 -0
  730. package/dist/composition/probe/problem.d.ts +12 -1
  731. package/dist/composition/probe/problem.d.ts.map +1 -1
  732. package/dist/composition/probe/problem.js +242 -48
  733. package/dist/composition/probe/problem.js.map +1 -1
  734. package/dist/composition/probe/report.js +1 -1
  735. package/dist/composition/probe/report.js.map +1 -1
  736. package/dist/composition/probe/residual.d.ts +6 -1
  737. package/dist/composition/probe/residual.d.ts.map +1 -1
  738. package/dist/composition/probe/residual.js +9 -7
  739. package/dist/composition/probe/residual.js.map +1 -1
  740. package/dist/composition/probe/run-manifest.js +2 -2
  741. package/dist/composition/probe/run-manifest.js.map +1 -1
  742. package/dist/composition/probe/scoring.d.ts +2 -1
  743. package/dist/composition/probe/scoring.d.ts.map +1 -1
  744. package/dist/composition/probe/scoring.js +21 -7
  745. package/dist/composition/probe/scoring.js.map +1 -1
  746. package/dist/composition/probe/search-budget.js.map +1 -1
  747. package/dist/composition/probe/serialize.js.map +1 -1
  748. package/dist/composition/probe/structure.d.ts +82 -17
  749. package/dist/composition/probe/structure.d.ts.map +1 -1
  750. package/dist/composition/probe/structure.js +129 -55
  751. package/dist/composition/probe/structure.js.map +1 -1
  752. package/dist/composition/probe/study.d.ts +35 -12
  753. package/dist/composition/probe/study.d.ts.map +1 -1
  754. package/dist/composition/probe/study.js +241 -184
  755. package/dist/composition/probe/study.js.map +1 -1
  756. package/dist/composition/probe/t-tail.d.ts +17 -0
  757. package/dist/composition/probe/t-tail.d.ts.map +1 -0
  758. package/dist/composition/probe/t-tail.js +32 -0
  759. package/dist/composition/probe/t-tail.js.map +1 -0
  760. package/dist/composition/probe/types.d.ts +6 -1
  761. package/dist/composition/probe/types.d.ts.map +1 -1
  762. package/dist/composition/probe/types.js +2 -0
  763. package/dist/composition/probe/types.js.map +1 -1
  764. package/dist/composition/proposed-bridges.d.ts +51 -13
  765. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  766. package/dist/composition/proposed-bridges.js +110 -58
  767. package/dist/composition/proposed-bridges.js.map +1 -1
  768. package/dist/composition/quantities.d.ts +0 -4
  769. package/dist/composition/quantities.d.ts.map +1 -1
  770. package/dist/composition/quantities.js +5 -5
  771. package/dist/composition/quantities.js.map +1 -1
  772. package/dist/composition/quantity-clusters.d.ts +48 -0
  773. package/dist/composition/quantity-clusters.d.ts.map +1 -0
  774. package/dist/composition/quantity-clusters.js +98 -0
  775. package/dist/composition/quantity-clusters.js.map +1 -0
  776. package/dist/composition/quantity.d.ts +18 -2
  777. package/dist/composition/quantity.d.ts.map +1 -1
  778. package/dist/composition/quantity.js +35 -6
  779. package/dist/composition/quantity.js.map +1 -1
  780. package/dist/composition/rational-exponent.d.ts +40 -0
  781. package/dist/composition/rational-exponent.d.ts.map +1 -0
  782. package/dist/composition/rational-exponent.js +65 -0
  783. package/dist/composition/rational-exponent.js.map +1 -0
  784. package/dist/composition/representative-values.d.ts +22 -0
  785. package/dist/composition/representative-values.d.ts.map +1 -1
  786. package/dist/composition/representative-values.js +23 -0
  787. package/dist/composition/representative-values.js.map +1 -1
  788. package/dist/composition/retrodiction.d.ts +16 -6
  789. package/dist/composition/retrodiction.d.ts.map +1 -1
  790. package/dist/composition/retrodiction.js +36 -10
  791. package/dist/composition/retrodiction.js.map +1 -1
  792. package/dist/composition/uncertainty.js.map +1 -1
  793. package/dist/composition/user-equation.d.ts.map +1 -1
  794. package/dist/composition/user-equation.js +2 -2
  795. package/dist/composition/user-equation.js.map +1 -1
  796. package/dist/core/assignment.d.ts +19 -0
  797. package/dist/core/assignment.d.ts.map +1 -0
  798. package/dist/core/assignment.js +19 -0
  799. package/dist/core/assignment.js.map +1 -0
  800. package/dist/core/axes-registry.d.ts +8 -5
  801. package/dist/core/axes-registry.d.ts.map +1 -1
  802. package/dist/core/axes-registry.js.map +1 -1
  803. package/dist/core/cell.js.map +1 -1
  804. package/dist/core/compare.d.ts +32 -0
  805. package/dist/core/compare.d.ts.map +1 -0
  806. package/dist/core/compare.js +46 -0
  807. package/dist/core/compare.js.map +1 -0
  808. package/dist/core/constants.d.ts +35 -35
  809. package/dist/core/constants.d.ts.map +1 -1
  810. package/dist/core/constants.js +52 -37
  811. package/dist/core/constants.js.map +1 -1
  812. package/dist/core/data-file.d.ts +7 -0
  813. package/dist/core/data-file.d.ts.map +1 -1
  814. package/dist/core/data-file.js +17 -0
  815. package/dist/core/data-file.js.map +1 -1
  816. package/dist/core/flux-rules.js +1 -1
  817. package/dist/core/flux-rules.js.map +1 -1
  818. package/dist/core/format.d.ts +36 -0
  819. package/dist/core/format.d.ts.map +1 -0
  820. package/dist/core/format.js +39 -0
  821. package/dist/core/format.js.map +1 -0
  822. package/dist/core/hash.d.ts +14 -0
  823. package/dist/core/hash.d.ts.map +1 -0
  824. package/dist/core/hash.js +17 -0
  825. package/dist/core/hash.js.map +1 -0
  826. package/dist/core/json-schema.d.ts +3 -1
  827. package/dist/core/json-schema.d.ts.map +1 -1
  828. package/dist/core/json-schema.js +41 -16
  829. package/dist/core/json-schema.js.map +1 -1
  830. package/dist/core/labeled-tensor.d.ts +6 -1
  831. package/dist/core/labeled-tensor.d.ts.map +1 -1
  832. package/dist/core/labeled-tensor.js +18 -16
  833. package/dist/core/labeled-tensor.js.map +1 -1
  834. package/dist/core/mathts-read.d.ts +25 -0
  835. package/dist/core/mathts-read.d.ts.map +1 -0
  836. package/dist/core/mathts-read.js +51 -0
  837. package/dist/core/mathts-read.js.map +1 -0
  838. package/dist/core/regime-registry.d.ts +6 -2
  839. package/dist/core/regime-registry.d.ts.map +1 -1
  840. package/dist/core/regime-registry.js.map +1 -1
  841. package/dist/core/regime-rule-install.js.map +1 -1
  842. package/dist/core/regimes-builtins.js.map +1 -1
  843. package/dist/core/tensor.d.ts +7 -4
  844. package/dist/core/tensor.d.ts.map +1 -1
  845. package/dist/core/tensor.js +64 -8
  846. package/dist/core/tensor.js.map +1 -1
  847. package/dist/core/types.d.ts +5 -5
  848. package/dist/core/types.js.map +1 -1
  849. package/dist/core/universal-index.js.map +1 -1
  850. package/dist/diff/bridge-ast-gradient.d.ts +4 -5
  851. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  852. package/dist/diff/bridge-ast-gradient.js +10 -6
  853. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  854. package/dist/diff/bridge-gradient.d.ts +43 -86
  855. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  856. package/dist/diff/bridge-gradient.js +40 -109
  857. package/dist/diff/bridge-gradient.js.map +1 -1
  858. package/dist/diff/bridge-specs.d.ts +16 -5
  859. package/dist/diff/bridge-specs.d.ts.map +1 -1
  860. package/dist/diff/bridge-specs.js +19 -4
  861. package/dist/diff/bridge-specs.js.map +1 -1
  862. package/dist/dimensional/algebra.d.ts +18 -0
  863. package/dist/dimensional/algebra.d.ts.map +1 -1
  864. package/dist/dimensional/algebra.js +41 -1
  865. package/dist/dimensional/algebra.js.map +1 -1
  866. package/dist/dimensional/ast-builders.d.ts +12 -4
  867. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  868. package/dist/dimensional/ast-builders.js +17 -5
  869. package/dist/dimensional/ast-builders.js.map +1 -1
  870. package/dist/dimensional/ast-leaves.d.ts +81 -0
  871. package/dist/dimensional/ast-leaves.d.ts.map +1 -0
  872. package/dist/dimensional/ast-leaves.js +146 -0
  873. package/dist/dimensional/ast-leaves.js.map +1 -0
  874. package/dist/dimensional/ast-types.js.map +1 -1
  875. package/dist/dimensional/bridge-check.js.map +1 -1
  876. package/dist/dimensional/buckingham.d.ts.map +1 -1
  877. package/dist/dimensional/buckingham.js +15 -27
  878. package/dist/dimensional/buckingham.js.map +1 -1
  879. package/dist/dimensional/connection-validators.d.ts +2 -1
  880. package/dist/dimensional/connection-validators.d.ts.map +1 -1
  881. package/dist/dimensional/connection-validators.js.map +1 -1
  882. package/dist/dimensional/connection.js.map +1 -1
  883. package/dist/dimensional/constant-rows.d.ts.map +1 -1
  884. package/dist/dimensional/constant-rows.js +17 -13
  885. package/dist/dimensional/constant-rows.js.map +1 -1
  886. package/dist/dimensional/constants.d.ts +5 -6
  887. package/dist/dimensional/constants.d.ts.map +1 -1
  888. package/dist/dimensional/constants.js +5 -6
  889. package/dist/dimensional/constants.js.map +1 -1
  890. package/dist/dimensional/curvature-composite.js.map +1 -1
  891. package/dist/dimensional/curvature-invariants.js.map +1 -1
  892. package/dist/dimensional/curvature.js.map +1 -1
  893. package/dist/dimensional/dimension-inference.d.ts.map +1 -1
  894. package/dist/dimensional/dimension-inference.js +1 -2
  895. package/dist/dimensional/dimension-inference.js.map +1 -1
  896. package/dist/dimensional/dimension-spec.d.ts +13 -7
  897. package/dist/dimensional/dimension-spec.d.ts.map +1 -1
  898. package/dist/dimensional/dimension-spec.js +49 -23
  899. package/dist/dimensional/dimension-spec.js.map +1 -1
  900. package/dist/dimensional/einstein-equation.js.map +1 -1
  901. package/dist/dimensional/errors.d.ts +4 -2
  902. package/dist/dimensional/errors.d.ts.map +1 -1
  903. package/dist/dimensional/errors.js +3 -17
  904. package/dist/dimensional/errors.js.map +1 -1
  905. package/dist/dimensional/exact-scale.d.ts +0 -17
  906. package/dist/dimensional/exact-scale.d.ts.map +1 -1
  907. package/dist/dimensional/exact-scale.js +8 -8
  908. package/dist/dimensional/exact-scale.js.map +1 -1
  909. package/dist/dimensional/field-equation-helpers.js.map +1 -1
  910. package/dist/dimensional/formula-names.js.map +1 -1
  911. package/dist/dimensional/fresh-label.js.map +1 -1
  912. package/dist/dimensional/friedmann-equation.d.ts +3 -3
  913. package/dist/dimensional/friedmann-equation.js +3 -3
  914. package/dist/dimensional/friedmann-equation.js.map +1 -1
  915. package/dist/dimensional/gauge-field.d.ts +2 -3
  916. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  917. package/dist/dimensional/gauge-field.js +2 -3
  918. package/dist/dimensional/gauge-field.js.map +1 -1
  919. package/dist/dimensional/hyphen-names.d.ts +12 -2
  920. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  921. package/dist/dimensional/hyphen-names.js +45 -12
  922. package/dist/dimensional/hyphen-names.js.map +1 -1
  923. package/dist/dimensional/killing-validators.js.map +1 -1
  924. package/dist/dimensional/klein-gordon-equation.js.map +1 -1
  925. package/dist/dimensional/metric-validators.d.ts +2 -1
  926. package/dist/dimensional/metric-validators.d.ts.map +1 -1
  927. package/dist/dimensional/metric-validators.js.map +1 -1
  928. package/dist/dimensional/metric.d.ts.map +1 -1
  929. package/dist/dimensional/metric.js +0 -1
  930. package/dist/dimensional/metric.js.map +1 -1
  931. package/dist/dimensional/natural-units.js.map +1 -1
  932. package/dist/dimensional/quantity-registry.d.ts +13 -0
  933. package/dist/dimensional/quantity-registry.d.ts.map +1 -1
  934. package/dist/dimensional/quantity-registry.js +14 -6
  935. package/dist/dimensional/quantity-registry.js.map +1 -1
  936. package/dist/dimensional/rg-flow.js.map +1 -1
  937. package/dist/dimensional/stress-energy-validators.js.map +1 -1
  938. package/dist/dimensional/symbolic-constants.d.ts +9 -0
  939. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  940. package/dist/dimensional/symbolic-constants.js +20 -3
  941. package/dist/dimensional/symbolic-constants.js.map +1 -1
  942. package/dist/dimensional/tensor-trace.js.map +1 -1
  943. package/dist/dimensional/tensor.js.map +1 -1
  944. package/dist/dimensional/types.d.ts +36 -0
  945. package/dist/dimensional/types.d.ts.map +1 -1
  946. package/dist/dimensional/types.js +45 -7
  947. package/dist/dimensional/types.js.map +1 -1
  948. package/dist/dimensional/unit-convention.d.ts +0 -2
  949. package/dist/dimensional/unit-convention.d.ts.map +1 -1
  950. package/dist/dimensional/unit-convention.js +2 -2
  951. package/dist/dimensional/unit-convention.js.map +1 -1
  952. package/dist/dimensional/unit-data.d.ts.map +1 -1
  953. package/dist/dimensional/unit-data.js +11 -7
  954. package/dist/dimensional/unit-data.js.map +1 -1
  955. package/dist/dimensional/units.d.ts.map +1 -1
  956. package/dist/dimensional/units.js +38 -20
  957. package/dist/dimensional/units.js.map +1 -1
  958. package/dist/dimensional/validator-registry.js.map +1 -1
  959. package/dist/dimensional/validator.d.ts +0 -16
  960. package/dist/dimensional/validator.d.ts.map +1 -1
  961. package/dist/dimensional/validator.js +65 -29
  962. package/dist/dimensional/validator.js.map +1 -1
  963. package/dist/dimensional/weyl-validators.js.map +1 -1
  964. package/dist/index.d.ts +59 -8
  965. package/dist/index.d.ts.map +1 -1
  966. package/dist/index.js +22 -24
  967. package/dist/index.js.map +1 -1
  968. package/dist/numerical/bianchi-residual.js.map +1 -1
  969. package/dist/numerical/binding-value.d.ts +11 -6
  970. package/dist/numerical/binding-value.d.ts.map +1 -1
  971. package/dist/numerical/binding-value.js +126 -122
  972. package/dist/numerical/binding-value.js.map +1 -1
  973. package/dist/numerical/christoffel-flat.d.ts.map +1 -1
  974. package/dist/numerical/christoffel-flat.js +3 -2
  975. package/dist/numerical/christoffel-flat.js.map +1 -1
  976. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  977. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  978. package/dist/numerical/covariant-eikonal.js +36 -13
  979. package/dist/numerical/covariant-eikonal.js.map +1 -1
  980. package/dist/numerical/curvature-lowering-helpers.d.ts +20 -0
  981. package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
  982. package/dist/numerical/curvature-lowering-helpers.js +9 -5
  983. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  984. package/dist/numerical/derivative-lowering.js.map +1 -1
  985. package/dist/numerical/einstein-equation.js.map +1 -1
  986. package/dist/numerical/engine-registry.js.map +1 -1
  987. package/dist/numerical/errors.d.ts +7 -3
  988. package/dist/numerical/errors.d.ts.map +1 -1
  989. package/dist/numerical/errors.js +5 -8
  990. package/dist/numerical/errors.js.map +1 -1
  991. package/dist/numerical/evaluator-uncertainty.d.ts.map +1 -1
  992. package/dist/numerical/evaluator-uncertainty.js +19 -2
  993. package/dist/numerical/evaluator-uncertainty.js.map +1 -1
  994. package/dist/numerical/finite-difference.d.ts +22 -0
  995. package/dist/numerical/finite-difference.d.ts.map +1 -0
  996. package/dist/numerical/finite-difference.js +27 -0
  997. package/dist/numerical/finite-difference.js.map +1 -0
  998. package/dist/numerical/formula-contract.d.ts +63 -7
  999. package/dist/numerical/formula-contract.d.ts.map +1 -1
  1000. package/dist/numerical/formula-contract.js +61 -42
  1001. package/dist/numerical/formula-contract.js.map +1 -1
  1002. package/dist/numerical/formula-dimension.d.ts +8 -7
  1003. package/dist/numerical/formula-dimension.d.ts.map +1 -1
  1004. package/dist/numerical/formula-dimension.js +58 -36
  1005. package/dist/numerical/formula-dimension.js.map +1 -1
  1006. package/dist/numerical/formula-mathts.d.ts.map +1 -1
  1007. package/dist/numerical/formula-mathts.js +5 -2
  1008. package/dist/numerical/formula-mathts.js.map +1 -1
  1009. package/dist/numerical/formula-registry.d.ts +13 -3
  1010. package/dist/numerical/formula-registry.d.ts.map +1 -1
  1011. package/dist/numerical/formula-registry.js +7 -2
  1012. package/dist/numerical/formula-registry.js.map +1 -1
  1013. package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
  1014. package/dist/numerical/geodesic-integrator.js +22 -14
  1015. package/dist/numerical/geodesic-integrator.js.map +1 -1
  1016. package/dist/numerical/geometrized.d.ts.map +1 -1
  1017. package/dist/numerical/geometrized.js +0 -1
  1018. package/dist/numerical/geometrized.js.map +1 -1
  1019. package/dist/numerical/gl4-integrator.d.ts +28 -27
  1020. package/dist/numerical/gl4-integrator.d.ts.map +1 -1
  1021. package/dist/numerical/gl4-integrator.js +41 -42
  1022. package/dist/numerical/gl4-integrator.js.map +1 -1
  1023. package/dist/numerical/grid-field.js.map +1 -1
  1024. package/dist/numerical/index.js.map +1 -1
  1025. package/dist/numerical/input-validation.d.ts +3 -6
  1026. package/dist/numerical/input-validation.d.ts.map +1 -1
  1027. package/dist/numerical/input-validation.js +4 -8
  1028. package/dist/numerical/input-validation.js.map +1 -1
  1029. package/dist/numerical/killing.d.ts +8 -5
  1030. package/dist/numerical/killing.d.ts.map +1 -1
  1031. package/dist/numerical/killing.js.map +1 -1
  1032. package/dist/numerical/klein-gordon.js.map +1 -1
  1033. package/dist/numerical/kretschmann.js.map +1 -1
  1034. package/dist/numerical/lowering-utils.js.map +1 -1
  1035. package/dist/numerical/lowering.d.ts.map +1 -1
  1036. package/dist/numerical/lowering.js +7 -17
  1037. package/dist/numerical/lowering.js.map +1 -1
  1038. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  1039. package/dist/numerical/mathts-engine.js +16 -25
  1040. package/dist/numerical/mathts-engine.js.map +1 -1
  1041. package/dist/numerical/metric-inverse.d.ts.map +1 -1
  1042. package/dist/numerical/metric-inverse.js +83 -46
  1043. package/dist/numerical/metric-inverse.js.map +1 -1
  1044. package/dist/numerical/null-ic.js.map +1 -1
  1045. package/dist/numerical/null-ray-integrator.d.ts +2 -1
  1046. package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
  1047. package/dist/numerical/null-ray-integrator.js +12 -12
  1048. package/dist/numerical/null-ray-integrator.js.map +1 -1
  1049. package/dist/numerical/painleve-gullstrand-metric.js +2 -2
  1050. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  1051. package/dist/numerical/pderiv.d.ts.map +1 -1
  1052. package/dist/numerical/pderiv.js +9 -2
  1053. package/dist/numerical/pderiv.js.map +1 -1
  1054. package/dist/numerical/perihelion-finder.d.ts +0 -36
  1055. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  1056. package/dist/numerical/perihelion-finder.js +41 -87
  1057. package/dist/numerical/perihelion-finder.js.map +1 -1
  1058. package/dist/numerical/quadrature.d.ts +5 -2
  1059. package/dist/numerical/quadrature.d.ts.map +1 -1
  1060. package/dist/numerical/quadrature.js +19 -4
  1061. package/dist/numerical/quadrature.js.map +1 -1
  1062. package/dist/numerical/rk4-trajectory.d.ts +10 -0
  1063. package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
  1064. package/dist/numerical/rk4-trajectory.js +37 -0
  1065. package/dist/numerical/rk4-trajectory.js.map +1 -0
  1066. package/dist/numerical/schwarzschild.d.ts +14 -0
  1067. package/dist/numerical/schwarzschild.d.ts.map +1 -0
  1068. package/dist/numerical/schwarzschild.js +17 -0
  1069. package/dist/numerical/schwarzschild.js.map +1 -0
  1070. package/dist/numerical/spacetime-metrics.d.ts +25 -19
  1071. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  1072. package/dist/numerical/spacetime-metrics.js +180 -286
  1073. package/dist/numerical/spacetime-metrics.js.map +1 -1
  1074. package/dist/numerical/statistics.d.ts +24 -0
  1075. package/dist/numerical/statistics.d.ts.map +1 -0
  1076. package/dist/numerical/statistics.js +52 -0
  1077. package/dist/numerical/statistics.js.map +1 -0
  1078. package/dist/numerical/strides.js.map +1 -1
  1079. package/dist/numerical/tensor-engine.d.ts +30 -5
  1080. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  1081. package/dist/numerical/tensor-engine.js +12 -0
  1082. package/dist/numerical/tensor-engine.js.map +1 -1
  1083. package/dist/numerical/types.js.map +1 -1
  1084. package/dist/numerical/weyl-lowering.js.map +1 -1
  1085. package/dist/relations/category.js.map +1 -1
  1086. package/dist/relations/composition-table.d.ts +4 -4
  1087. package/dist/relations/composition-table.js +4 -4
  1088. package/dist/relations/composition-table.js.map +1 -1
  1089. package/dist/relations/conventions.js.map +1 -1
  1090. package/dist/relations/domain-regimes.js.map +1 -1
  1091. package/dist/relations/regime-registration.js.map +1 -1
  1092. package/dist/relations/regime-vocabularies.js.map +1 -1
  1093. package/dist/relations/regime.d.ts +28 -8
  1094. package/dist/relations/regime.d.ts.map +1 -1
  1095. package/dist/relations/regime.js +44 -15
  1096. package/dist/relations/regime.js.map +1 -1
  1097. package/dist/relations/types.d.ts +18 -5
  1098. package/dist/relations/types.d.ts.map +1 -1
  1099. package/dist/relations/types.js +5 -3
  1100. package/dist/relations/types.js.map +1 -1
  1101. package/package.json +16 -20
  1102. package/dist/bridges/registry.d.ts +0 -60
  1103. package/dist/bridges/registry.d.ts.map +0 -1
  1104. package/dist/bridges/registry.js +0 -87
  1105. package/dist/bridges/registry.js.map +0 -1
  1106. package/dist/cli/poster-source.d.ts +0 -154
  1107. package/dist/cli/poster-source.d.ts.map +0 -1
  1108. package/dist/cli/poster-source.js +0 -184
  1109. package/dist/cli/poster-source.js.map +0 -1
@@ -13,7 +13,17 @@
13
13
  * - **structural predictor** — common neighbours in the remaining graph, ties
14
14
  * broken by sharing the premise's family, then by id;
15
15
  * - **text baseline** — word-token overlap between the models' dynamics and
16
- * state-space descriptions, ties broken by id.
16
+ * state-space descriptions (`text-overlap.ts`), ties broken by id.
17
+ *
18
+ * **The recorded result stands.** The negative result (typed neighbourhood below text
19
+ * overlap on twenty trials; NOTES.md, "Link prediction is NEGATIVE") is reproduced by
20
+ * {@link runLinkPrediction} exactly as recorded and is not re-run for a better answer. What
21
+ * was added beside it, never inside it: a seeded percentile-bootstrap interval on every
22
+ * recall and MRR (MathTS `bootstrapCI`), a seeded permutation test on the two per-trial
23
+ * reciprocal-rank vectors (MathTS `permutationTest`, stated for what it is), and McNemar's
24
+ * exact p on the paired hits (`benchmark/stats.ts`). The Katz-index predictor
25
+ * ({@link runKatzLinkPrediction}) is a SEPARATE result: every record it returns carries
26
+ * `postHoc: true` and the label, and it is never a field of the recorded comparison.
17
27
  *
18
28
  * ⚠ **What this result cannot carry.** The graph is small (24 models, 22 pairs)
19
29
  * and was curated by the same agent that runs the test, in-distribution. It is a
@@ -21,50 +31,35 @@
21
31
  * discovery claim, not a hub or gap claim, and not evidence about physics the
22
32
  * atlas does not contain. ROADMAP Phase 6 asks for it as a hypothesis test, and
23
33
  * that is its whole scope. Product A (`src/composition/discovery.ts`) is not
24
- * touched: a test pins that nothing under `src/atlas/` imports it.
34
+ * touched: a test pins that nothing under `src/atlas/` imports it, and the Katz
35
+ * predictor is not wired into discovery, whose candidates are in different
36
+ * components by construction (every path score there is 0).
25
37
  *
26
38
  * @module atlas/link-prediction
27
39
  * @internal
28
40
  */
29
- const tokens = (text) => new Set(text.toLowerCase().split(/[^\p{L}\p{N}]+/u).filter((t) => t.length > 0));
30
- const jaccard = (a, b) => {
31
- if (a.size === 0 && b.size === 0)
32
- return 0;
33
- let inter = 0;
34
- for (const x of a)
35
- if (b.has(x))
36
- inter++;
37
- return inter / (a.size + b.size - inter);
38
- };
39
- /** Rank candidates by descending score list (lexicographic), then ascending id. */
40
- function rank(candidates, score) {
41
- return [...candidates].sort((x, y) => {
42
- const sx = score(x);
43
- const sy = score(y);
44
- for (let i = 0; i < sx.length; i++)
45
- if (sx[i] !== sy[i])
46
- return sy[i] - sx[i];
47
- return x < y ? -1 : x > y ? 1 : 0;
48
- });
49
- }
50
- /**
51
- * Run leave-one-bridge-out link prediction over the families' model graph.
52
- *
53
- * @param families - the atlas families (normally `ATLAS_FAMILIES`).
54
- * @param k - the depth a hit must fall within (10, as pre-registered for recall).
55
- * @internal
56
- */
57
- export function runLinkPrediction(families, k = 10) {
41
+ import { bootstrapCI, inv, permutationTest } from '@danielsimonjr/mathts-functions';
42
+ import { jaccard, rankBy, tokens } from './text-overlap.js';
43
+ import { mcnemar } from './benchmark/stats.js';
44
+ import { meanOf } from '../numerical/statistics.js';
45
+ /** The statement of the permutation test's kind, so no reader takes it for a paired test. @internal */
46
+ export const PERMUTATION_KIND = 'two-sample permutation of the reciprocal-rank vectors (pooled re-split; the pairing is not kept)';
47
+ /** The label every Katz record carries. @internal */
48
+ export const POST_HOC_LABEL = 'post hoc: added after the negative result was recorded';
49
+ /** The one seed every resample in this module uses, and the resample count. Stated, not hidden. */
50
+ const RESAMPLE_SEED = 20260924;
51
+ const RESAMPLES = 10000;
52
+ /** Every held-out query of the families, and the pairs excluded as still connected. */
53
+ function holdOuts(families) {
58
54
  const models = new Map();
59
55
  for (const f of families)
60
56
  for (const m of f.models)
61
57
  models.set(m.id, m);
62
58
  const bridges = families.flatMap((f) => f.bridges);
63
59
  const edgesOf = (b) => b.premises.map((p) => [p, b.conclusion]);
64
- const trials = [];
60
+ const queries = [];
65
61
  let stillConnected = 0;
66
62
  for (const held of bridges) {
67
- // The graph WITHOUT the held-out bridge.
68
63
  const adj = new Map();
69
64
  for (const id of models.keys())
70
65
  adj.set(id, new Set());
@@ -77,8 +72,8 @@ export function runLinkPrediction(families, k = 10) {
77
72
  }
78
73
  }
79
74
  for (const [premise, conclusion] of edgesOf(held)) {
80
- const pModel = models.get(premise);
81
- if (pModel === undefined)
75
+ const premiseModel = models.get(premise);
76
+ if (premiseModel === undefined)
82
77
  continue;
83
78
  const neighbours = adj.get(premise) ?? new Set();
84
79
  if (neighbours.has(conclusion)) {
@@ -86,43 +81,194 @@ export function runLinkPrediction(families, k = 10) {
86
81
  continue;
87
82
  }
88
83
  const candidates = [...models.keys()].filter((id) => id !== premise && !neighbours.has(id));
89
- const common = (id) => {
90
- let n = 0;
91
- for (const x of adj.get(id) ?? [])
92
- if (neighbours.has(x))
93
- n++;
94
- return n;
95
- };
96
- const structural = rank(candidates, (id) => [common(id), models.get(id).family === pModel.family ? 1 : 0]);
97
- const pText = tokens(`${pModel.dynamics} ${pModel.stateSpace}`);
98
- const text = rank(candidates, (id) => {
99
- const m = models.get(id);
100
- return [jaccard(pText, tokens(`${m.dynamics} ${m.stateSpace}`))];
101
- });
102
- const at = (list) => {
103
- const i = list.indexOf(conclusion);
104
- return i < 0 ? Number.POSITIVE_INFINITY : i + 1;
105
- };
106
- trials.push({
107
- bridgeId: held.id,
108
- premise,
109
- conclusion,
110
- structuralRank: at(structural),
111
- textRank: at(text),
112
- candidates: candidates.length,
113
- });
84
+ queries.push({ held, premise, conclusion, premiseModel, adj, candidates });
114
85
  }
115
86
  }
116
- const mean = (xs) => (xs.length === 0 ? Number.NaN : xs.reduce((a, b) => a + b, 0) / xs.length);
87
+ return { models, queries, stillConnected };
88
+ }
89
+ /** 1-based position of `id` in a ranking; Infinity when absent. */
90
+ const rankOf = (list, id) => {
91
+ const i = list.indexOf(id);
92
+ return i < 0 ? Number.POSITIVE_INFINITY : i + 1;
93
+ };
94
+ /** Seeded percentile bootstrap of the mean of per-trial values (a 0/1 hit, or a reciprocal rank). */
95
+ function bootstrapMean(values) {
96
+ const ci = bootstrapCI([...values], (sample) => meanOf(sample), {
97
+ confidence: 0.95,
98
+ resamples: RESAMPLES,
99
+ seed: RESAMPLE_SEED,
100
+ });
101
+ return { estimate: ci.estimate, lower: ci.lower, upper: ci.upper, confidence: ci.confidence };
102
+ }
103
+ /** The mean of a trial statistic; NaN with no trials, as the recorded result always read it. */
104
+ const meanOrNaN = (xs) => (xs.length === 0 ? Number.NaN : meanOf(xs));
105
+ /**
106
+ * Run leave-one-bridge-out link prediction over the families' model graph. The recorded
107
+ * comparison (structural against text), with its seeded intervals and paired statistics.
108
+ *
109
+ * @param families - the atlas families (normally `ATLAS_FAMILIES`).
110
+ * @param k - the depth a hit must fall within (10, as pre-registered for recall).
111
+ * @internal
112
+ */
113
+ export function runLinkPrediction(families, k = 10) {
114
+ const { models, queries, stillConnected } = holdOuts(families);
115
+ const trials = queries.map((q) => {
116
+ const neighbours = q.adj.get(q.premise) ?? new Set();
117
+ const common = (id) => {
118
+ let n = 0;
119
+ for (const x of q.adj.get(id) ?? [])
120
+ if (neighbours.has(x))
121
+ n++;
122
+ return n;
123
+ };
124
+ const structural = rankBy(q.candidates, (id) => [common(id), models.get(id).family === q.premiseModel.family ? 1 : 0]);
125
+ const pText = tokens(`${q.premiseModel.dynamics} ${q.premiseModel.stateSpace}`);
126
+ const text = rankBy(q.candidates, (id) => {
127
+ const m = models.get(id);
128
+ return [jaccard(pText, tokens(`${m.dynamics} ${m.stateSpace}`))];
129
+ });
130
+ return {
131
+ bridgeId: q.held.id,
132
+ premise: q.premise,
133
+ conclusion: q.conclusion,
134
+ structuralRank: rankOf(structural, q.conclusion),
135
+ textRank: rankOf(text, q.conclusion),
136
+ candidates: q.candidates.length,
137
+ };
138
+ });
139
+ const structuralHit = trials.map((t) => (t.structuralRank <= k ? 1 : 0));
140
+ const textHit = trials.map((t) => (t.textRank <= k ? 1 : 0));
141
+ const structuralRR = trials.map((t) => 1 / t.structuralRank);
142
+ const textRR = trials.map((t) => 1 / t.textRank);
143
+ // The paired hit table: both, structural only, text only, neither.
144
+ let a = 0;
145
+ let b = 0;
146
+ let c = 0;
147
+ let d = 0;
148
+ trials.forEach((_, i) => {
149
+ if (structuralHit[i] && textHit[i])
150
+ a++;
151
+ else if (structuralHit[i])
152
+ b++;
153
+ else if (textHit[i])
154
+ c++;
155
+ else
156
+ d++;
157
+ });
158
+ const permuted = permutationTest(structuralRR, textRR, (x, y) => meanOrNaN(x) - meanOrNaN(y), {
159
+ resamples: RESAMPLES,
160
+ seed: RESAMPLE_SEED,
161
+ });
162
+ return {
163
+ k,
164
+ trials,
165
+ stillConnected,
166
+ structuralHits: structuralHit.reduce((acc, x) => acc + x, 0),
167
+ textHits: textHit.reduce((acc, x) => acc + x, 0),
168
+ chanceRecall: meanOrNaN(trials.map((t) => Math.min(k, t.candidates) / t.candidates)),
169
+ structuralMrr: meanOrNaN(structuralRR),
170
+ textMrr: meanOrNaN(textRR),
171
+ intervals: {
172
+ seed: RESAMPLE_SEED,
173
+ resamples: RESAMPLES,
174
+ structuralRecall: bootstrapMean(structuralHit),
175
+ textRecall: bootstrapMean(textHit),
176
+ structuralMrr: bootstrapMean(structuralRR),
177
+ textMrr: bootstrapMean(textRR),
178
+ },
179
+ permutation: {
180
+ statistic: permuted.statistic,
181
+ pValue: permuted.pValue,
182
+ seed: RESAMPLE_SEED,
183
+ resamples: RESAMPLES,
184
+ kind: PERMUTATION_KIND,
185
+ },
186
+ mcnemarExactP: mcnemar({ a, b, c, d }).exactP,
187
+ };
188
+ }
189
+ /** A square number matrix of order n, read back from MathTS `inv`, which types its result `unknown`. */
190
+ function squareMatrix(value, n) {
191
+ if (!Array.isArray(value) || value.length !== n) {
192
+ throw new TypeError(`inv did not return a ${n}×${n} matrix`);
193
+ }
194
+ for (const row of value) {
195
+ if (!Array.isArray(row) || row.length !== n || !row.every((x) => typeof x === 'number' && Number.isFinite(x))) {
196
+ throw new TypeError(`inv did not return a ${n}×${n} matrix of finite numbers`);
197
+ }
198
+ }
199
+ return value;
200
+ }
201
+ /**
202
+ * The Katz index of the graph without the held-out bridge: K = (I − βA)⁻¹ − I through MathTS
203
+ * `inv`, with β = 1/(2·max degree). The largest eigenvalue of a 0/1 adjacency is at most the
204
+ * maximum degree, so β is below the spectral bound 1/λ_max and the series Σ βˡ Aˡ converges.
205
+ * A graph with no edge has K = 0 everywhere, and β is stated as 0.5 (there is nothing to attenuate).
206
+ */
207
+ function katzIndex(adj, ids) {
208
+ const n = ids.length;
209
+ const index = new Map(ids.map((id, i) => [id, i]));
210
+ const A = Array.from({ length: n }, () => new Array(n).fill(0));
211
+ let maxDegree = 0;
212
+ for (const [u, neighbours] of adj) {
213
+ const i = index.get(u);
214
+ if (i === undefined)
215
+ continue;
216
+ maxDegree = Math.max(maxDegree, neighbours.size);
217
+ for (const v of neighbours) {
218
+ const j = index.get(v);
219
+ if (j !== undefined)
220
+ A[i][j] = 1;
221
+ }
222
+ }
223
+ const beta = maxDegree === 0 ? 0.5 : 1 / (2 * maxDegree);
224
+ const M = A.map((row, i) => row.map((x, j) => (i === j ? 1 : 0) - beta * x));
225
+ const inverse = squareMatrix(inv(M), n);
226
+ const K = inverse.map((row, i) => row.map((x, j) => (i === j ? x - 1 : x)));
227
+ return { K, beta };
228
+ }
229
+ /**
230
+ * The Katz-index predictor, SEPARATE from the recorded comparison and labelled post hoc: it was
231
+ * added after the negative result was recorded, so its numbers are exploratory and are never
232
+ * merged into that result. Ranks each candidate by K[premise][candidate] (paths of every length,
233
+ * attenuated by β per step), ties by id. Not wired into discovery (`src/composition/`): Product A
234
+ * candidates are in different components by construction, so every path score there is 0.
235
+ *
236
+ * @internal
237
+ */
238
+ export function runKatzLinkPrediction(families, k = 10) {
239
+ const { models, queries, stillConnected } = holdOuts(families);
240
+ const ids = [...models.keys()];
241
+ const index = new Map(ids.map((id, i) => [id, i]));
242
+ const trials = queries.map((q) => {
243
+ const katz = katzIndex(q.adj, ids);
244
+ const p = index.get(q.premise);
245
+ const score = (id) => katz.K[p][index.get(id)];
246
+ const ranked = rankBy(q.candidates, (id) => [score(id)]);
247
+ return {
248
+ bridgeId: q.held.id,
249
+ premise: q.premise,
250
+ conclusion: q.conclusion,
251
+ katzRank: rankOf(ranked, q.conclusion),
252
+ katzScore: q.candidates.includes(q.conclusion) ? score(q.conclusion) : 0,
253
+ candidates: q.candidates.length,
254
+ beta: katz.beta,
255
+ postHoc: true,
256
+ };
257
+ });
258
+ const betas = trials.map((t) => t.beta);
259
+ const hit = trials.map((t) => (t.katzRank <= k ? 1 : 0));
260
+ const rr = trials.map((t) => 1 / t.katzRank);
117
261
  return {
262
+ postHoc: true,
263
+ label: POST_HOC_LABEL,
118
264
  k,
265
+ betaRange: betas.length === 0 ? [Number.NaN, Number.NaN] : [Math.min(...betas), Math.max(...betas)],
119
266
  trials,
120
267
  stillConnected,
121
- structuralHits: trials.filter((t) => t.structuralRank <= k).length,
122
- textHits: trials.filter((t) => t.textRank <= k).length,
123
- chanceRecall: mean(trials.map((t) => Math.min(k, t.candidates) / t.candidates)),
124
- structuralMrr: mean(trials.map((t) => 1 / t.structuralRank)),
125
- textMrr: mean(trials.map((t) => 1 / t.textRank)),
268
+ katzHits: hit.reduce((acc, x) => acc + x, 0),
269
+ katzMrr: meanOrNaN(rr),
270
+ chanceRecall: meanOrNaN(trials.map((t) => Math.min(k, t.candidates) / t.candidates)),
271
+ intervals: { seed: RESAMPLE_SEED, resamples: RESAMPLES, recall: bootstrapMean(hit), mrr: bootstrapMean(rr) },
126
272
  };
127
273
  }
128
274
  //# sourceMappingURL=link-prediction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"link-prediction.js","sourceRoot":"","sources":["../../src/atlas/link-prediction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"link-prediction.js","sourceRoot":"","sources":["../../src/atlas/link-prediction.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Atlas Phase 6, S6.3 — link prediction over the typed model graph: ONE result,\n * stated as a hypothesis about the representation.\n *\n * Design note: `docs/planning/Atlas-Phase-6-Design.md` §1.\n *\n * The graph: every model in every registered family is a node; every\n * premise→conclusion pair of every bridge is an undirected edge. The test is\n * leave-one-bridge-out: remove a bridge's edges, then ask each predictor to rank\n * the conclusion among every model not already adjacent to the premise. A hit is\n * the held-out conclusion inside the top k.\n *\n * - **structural predictor** — common neighbours in the remaining graph, ties\n * broken by sharing the premise's family, then by id;\n * - **text baseline** — word-token overlap between the models' dynamics and\n * state-space descriptions (`text-overlap.ts`), ties broken by id.\n *\n * **The recorded result stands.** The negative result (typed neighbourhood below text\n * overlap on twenty trials; NOTES.md, \"Link prediction is NEGATIVE\") is reproduced by\n * {@link runLinkPrediction} exactly as recorded and is not re-run for a better answer. What\n * was added beside it, never inside it: a seeded percentile-bootstrap interval on every\n * recall and MRR (MathTS `bootstrapCI`), a seeded permutation test on the two per-trial\n * reciprocal-rank vectors (MathTS `permutationTest`, stated for what it is), and McNemar's\n * exact p on the paired hits (`benchmark/stats.ts`). The Katz-index predictor\n * ({@link runKatzLinkPrediction}) is a SEPARATE result: every record it returns carries\n * `postHoc: true` and the label, and it is never a field of the recorded comparison.\n *\n * ⚠ **What this result cannot carry.** The graph is small (24 models, 22 pairs)\n * and was curated by the same agent that runs the test, in-distribution. It is a\n * statement about how this representation behaves on its own content — not a\n * discovery claim, not a hub or gap claim, and not evidence about physics the\n * atlas does not contain. ROADMAP Phase 6 asks for it as a hypothesis test, and\n * that is its whole scope. Product A (`src/composition/discovery.ts`) is not\n * touched: a test pins that nothing under `src/atlas/` imports it, and the Katz\n * predictor is not wired into discovery, whose candidates are in different\n * components by construction (every path score there is 0).\n *\n * @module atlas/link-prediction\n * @internal\n */\n\nimport { bootstrapCI, inv, permutationTest } from '@danielsimonjr/mathts-functions';\nimport type { AtlasFamily } from './family.js';\nimport type { AtlasModel } from './model.js';\nimport type { AtlasBridge } from './types.js';\nimport { jaccard, rankBy, tokens } from './text-overlap.js';\nimport { mcnemar } from './benchmark/stats.js';\nimport { meanOf } from '../numerical/statistics.js';\n\n/** One held-out pair and whether each predictor recovered it. @internal */\nexport interface LinkPredictionTrial {\n readonly bridgeId: string;\n readonly premise: string;\n readonly conclusion: string;\n /** 1-based rank of the held-out conclusion; Infinity when it was not a candidate. */\n readonly structuralRank: number;\n readonly textRank: number;\n /** How many candidates the conclusion competed against. */\n readonly candidates: number;\n}\n\n/** A percentile-bootstrap interval with the point estimate it brackets (MathTS `bootstrapCI`). @internal */\nexport interface BootstrapInterval {\n readonly estimate: number;\n readonly lower: number;\n readonly upper: number;\n /** The confidence level, 0.95. */\n readonly confidence: number;\n}\n\n/** The seeded intervals of the recorded comparison. @internal */\nexport interface LinkPredictionIntervals {\n /** The seed every resample used; stated so the interval is reproducible. */\n readonly seed: number;\n readonly resamples: number;\n readonly structuralRecall: BootstrapInterval;\n readonly textRecall: BootstrapInterval;\n readonly structuralMrr: BootstrapInterval;\n readonly textMrr: BootstrapInterval;\n}\n\n/** The seeded permutation test on the two per-trial reciprocal-rank vectors. @internal */\nexport interface ReciprocalRankPermutation {\n /** Mean structural reciprocal rank minus mean text reciprocal rank (the observed MRR difference). */\n readonly statistic: number;\n /** Two-tailed p from MathTS `permutationTest`. */\n readonly pValue: number;\n readonly seed: number;\n readonly resamples: number;\n /**\n * What the test is. MathTS has no paired permutation: `permutationTest` pools the two vectors\n * and re-splits them, so the trial pairing is not kept and the null is looser than a sign-flip\n * test's. The paired test on the hits is `mcnemarExactP`.\n */\n readonly kind: typeof PERMUTATION_KIND;\n}\n\n/** The statement of the permutation test's kind, so no reader takes it for a paired test. @internal */\nexport const PERMUTATION_KIND =\n 'two-sample permutation of the reciprocal-rank vectors (pooled re-split; the pairing is not kept)' as const;\n\n/** The whole leave-one-bridge-out run. @internal */\nexport interface LinkPredictionResult {\n readonly k: number;\n readonly trials: readonly LinkPredictionTrial[];\n /**\n * Held-out pairs whose endpoints stay adjacent through ANOTHER bridge. Such a\n * pair is not a missing link — the conclusion cannot even be a candidate — so\n * it is excluded from the trials and counted here instead of silently.\n */\n readonly stillConnected: number;\n readonly structuralHits: number;\n readonly textHits: number;\n /**\n * The hit rate a RANDOM ranking would get: the mean over trials of\n * min(k, candidates)/candidates. On a small graph this is high, and a\n * predictor's recall means nothing until it is read against it.\n */\n readonly chanceRecall: number;\n /** Mean reciprocal rank of the held-out conclusion. */\n readonly structuralMrr: number;\n readonly textMrr: number;\n /** Seeded bootstrap intervals on the four numbers above. */\n readonly intervals: LinkPredictionIntervals;\n /** The seeded permutation test on the per-trial reciprocal ranks. */\n readonly permutation: ReciprocalRankPermutation;\n /** McNemar's exact p on the paired hit table (both, structural only, text only, neither). */\n readonly mcnemarExactP: number;\n}\n\n/** The label every Katz record carries. @internal */\nexport const POST_HOC_LABEL = 'post hoc: added after the negative result was recorded' as const;\n\n/** One held-out pair under the Katz-index predictor. @internal */\nexport interface KatzTrial {\n readonly bridgeId: string;\n readonly premise: string;\n readonly conclusion: string;\n /** 1-based rank of the held-out conclusion by Katz index; Infinity when it was not a candidate. */\n readonly katzRank: number;\n /** The Katz index K[premise][conclusion] = ((I − βA)⁻¹ − I)[premise][conclusion]; 0 when no path. */\n readonly katzScore: number;\n readonly candidates: number;\n /** This trial's attenuation β = 1/(2·max degree) of its own held-out graph. */\n readonly beta: number;\n readonly postHoc: true;\n}\n\n/** The Katz-index run: a separate, post-hoc result, never merged into the recorded comparison. @internal */\nexport interface KatzLinkPredictionResult {\n readonly postHoc: true;\n readonly label: typeof POST_HOC_LABEL;\n readonly k: number;\n /**\n * `[min, max]` of the trials' attenuations. Each held-out graph has its own maximum degree, so\n * β = 1/(2·max degree) is per trial (`KatzTrial.beta`), each below its graph's spectral bound\n * 1/λ_max since λ_max ≤ max degree. The result once reported one β, the last trial's.\n */\n readonly betaRange: readonly [number, number];\n readonly trials: readonly KatzTrial[];\n readonly stillConnected: number;\n readonly katzHits: number;\n readonly katzMrr: number;\n readonly chanceRecall: number;\n readonly intervals: {\n readonly seed: number;\n readonly resamples: number;\n readonly recall: BootstrapInterval;\n readonly mrr: BootstrapInterval;\n };\n}\n\n/** The one seed every resample in this module uses, and the resample count. Stated, not hidden. */\nconst RESAMPLE_SEED = 20260924;\nconst RESAMPLES = 10000;\n\n/** One leave-one-bridge-out query: the graph without the bridge, and the candidates. */\ninterface HoldOut {\n readonly held: AtlasBridge;\n readonly premise: string;\n readonly conclusion: string;\n readonly premiseModel: AtlasModel;\n /** The undirected graph WITHOUT the held-out bridge. */\n readonly adj: ReadonlyMap<string, ReadonlySet<string>>;\n readonly candidates: readonly string[];\n}\n\n/** Every held-out query of the families, and the pairs excluded as still connected. */\nfunction holdOuts(families: readonly AtlasFamily[]): {\n readonly models: ReadonlyMap<string, AtlasModel>;\n readonly queries: readonly HoldOut[];\n readonly stillConnected: number;\n} {\n const models = new Map<string, AtlasModel>();\n for (const f of families) for (const m of f.models) models.set(m.id, m);\n const bridges = families.flatMap((f) => f.bridges);\n const edgesOf = (b: AtlasBridge): Array<readonly [string, string]> => b.premises.map((p) => [p, b.conclusion] as const);\n\n const queries: HoldOut[] = [];\n let stillConnected = 0;\n for (const held of bridges) {\n const adj = new Map<string, Set<string>>();\n for (const id of models.keys()) adj.set(id, new Set());\n for (const b of bridges) {\n if (b === held) continue;\n for (const [u, v] of edgesOf(b)) {\n adj.get(u)?.add(v);\n adj.get(v)?.add(u);\n }\n }\n for (const [premise, conclusion] of edgesOf(held)) {\n const premiseModel = models.get(premise);\n if (premiseModel === undefined) continue;\n const neighbours = adj.get(premise) ?? new Set<string>();\n if (neighbours.has(conclusion)) {\n stillConnected++;\n continue;\n }\n const candidates = [...models.keys()].filter((id) => id !== premise && !neighbours.has(id));\n queries.push({ held, premise, conclusion, premiseModel, adj, candidates });\n }\n }\n return { models, queries, stillConnected };\n}\n\n/** 1-based position of `id` in a ranking; Infinity when absent. */\nconst rankOf = (list: readonly string[], id: string): number => {\n const i = list.indexOf(id);\n return i < 0 ? Number.POSITIVE_INFINITY : i + 1;\n};\n\n/** Seeded percentile bootstrap of the mean of per-trial values (a 0/1 hit, or a reciprocal rank). */\nfunction bootstrapMean(values: readonly number[]): BootstrapInterval {\n const ci = bootstrapCI([...values], (sample) => meanOf(sample), {\n confidence: 0.95,\n resamples: RESAMPLES,\n seed: RESAMPLE_SEED,\n });\n return { estimate: ci.estimate, lower: ci.lower, upper: ci.upper, confidence: ci.confidence };\n}\n\n/** The mean of a trial statistic; NaN with no trials, as the recorded result always read it. */\nconst meanOrNaN = (xs: readonly number[]): number => (xs.length === 0 ? Number.NaN : meanOf(xs));\n\n/**\n * Run leave-one-bridge-out link prediction over the families' model graph. The recorded\n * comparison (structural against text), with its seeded intervals and paired statistics.\n *\n * @param families - the atlas families (normally `ATLAS_FAMILIES`).\n * @param k - the depth a hit must fall within (10, as pre-registered for recall).\n * @internal\n */\nexport function runLinkPrediction(families: readonly AtlasFamily[], k = 10): LinkPredictionResult {\n const { models, queries, stillConnected } = holdOuts(families);\n const trials: LinkPredictionTrial[] = queries.map((q) => {\n const neighbours = q.adj.get(q.premise) ?? new Set<string>();\n const common = (id: string): number => {\n let n = 0;\n for (const x of q.adj.get(id) ?? []) if (neighbours.has(x)) n++;\n return n;\n };\n const structural = rankBy(q.candidates, (id) => [common(id), models.get(id)!.family === q.premiseModel.family ? 1 : 0]);\n const pText = tokens(`${q.premiseModel.dynamics} ${q.premiseModel.stateSpace}`);\n const text = rankBy(q.candidates, (id) => {\n const m = models.get(id)!;\n return [jaccard(pText, tokens(`${m.dynamics} ${m.stateSpace}`))];\n });\n return {\n bridgeId: q.held.id,\n premise: q.premise,\n conclusion: q.conclusion,\n structuralRank: rankOf(structural, q.conclusion),\n textRank: rankOf(text, q.conclusion),\n candidates: q.candidates.length,\n };\n });\n\n const structuralHit: number[] = trials.map((t) => (t.structuralRank <= k ? 1 : 0));\n const textHit: number[] = trials.map((t) => (t.textRank <= k ? 1 : 0));\n const structuralRR = trials.map((t) => 1 / t.structuralRank);\n const textRR = trials.map((t) => 1 / t.textRank);\n\n // The paired hit table: both, structural only, text only, neither.\n let a = 0;\n let b = 0;\n let c = 0;\n let d = 0;\n trials.forEach((_, i) => {\n if (structuralHit[i] && textHit[i]) a++;\n else if (structuralHit[i]) b++;\n else if (textHit[i]) c++;\n else d++;\n });\n\n const permuted = permutationTest(structuralRR, textRR, (x, y) => meanOrNaN(x) - meanOrNaN(y), {\n resamples: RESAMPLES,\n seed: RESAMPLE_SEED,\n });\n\n return {\n k,\n trials,\n stillConnected,\n structuralHits: structuralHit.reduce((acc, x) => acc + x, 0),\n textHits: textHit.reduce((acc, x) => acc + x, 0),\n chanceRecall: meanOrNaN(trials.map((t) => Math.min(k, t.candidates) / t.candidates)),\n structuralMrr: meanOrNaN(structuralRR),\n textMrr: meanOrNaN(textRR),\n intervals: {\n seed: RESAMPLE_SEED,\n resamples: RESAMPLES,\n structuralRecall: bootstrapMean(structuralHit),\n textRecall: bootstrapMean(textHit),\n structuralMrr: bootstrapMean(structuralRR),\n textMrr: bootstrapMean(textRR),\n },\n permutation: {\n statistic: permuted.statistic,\n pValue: permuted.pValue,\n seed: RESAMPLE_SEED,\n resamples: RESAMPLES,\n kind: PERMUTATION_KIND,\n },\n mcnemarExactP: mcnemar({ a, b, c, d }).exactP,\n };\n}\n\n/** A square number matrix of order n, read back from MathTS `inv`, which types its result `unknown`. */\nfunction squareMatrix(value: unknown, n: number): number[][] {\n if (!Array.isArray(value) || value.length !== n) {\n throw new TypeError(`inv did not return a ${n}×${n} matrix`);\n }\n for (const row of value) {\n if (!Array.isArray(row) || row.length !== n || !row.every((x) => typeof x === 'number' && Number.isFinite(x))) {\n throw new TypeError(`inv did not return a ${n}×${n} matrix of finite numbers`);\n }\n }\n return value as number[][];\n}\n\n/**\n * The Katz index of the graph without the held-out bridge: K = (I − βA)⁻¹ − I through MathTS\n * `inv`, with β = 1/(2·max degree). The largest eigenvalue of a 0/1 adjacency is at most the\n * maximum degree, so β is below the spectral bound 1/λ_max and the series Σ βˡ Aˡ converges.\n * A graph with no edge has K = 0 everywhere, and β is stated as 0.5 (there is nothing to attenuate).\n */\nfunction katzIndex(adj: ReadonlyMap<string, ReadonlySet<string>>, ids: readonly string[]): { K: number[][]; beta: number } {\n const n = ids.length;\n const index = new Map(ids.map((id, i) => [id, i]));\n const A: number[][] = Array.from({ length: n }, () => new Array<number>(n).fill(0));\n let maxDegree = 0;\n for (const [u, neighbours] of adj) {\n const i = index.get(u);\n if (i === undefined) continue;\n maxDegree = Math.max(maxDegree, neighbours.size);\n for (const v of neighbours) {\n const j = index.get(v);\n if (j !== undefined) A[i][j] = 1;\n }\n }\n const beta = maxDegree === 0 ? 0.5 : 1 / (2 * maxDegree);\n const M = A.map((row, i) => row.map((x, j) => (i === j ? 1 : 0) - beta * x));\n const inverse = squareMatrix(inv(M), n);\n const K = inverse.map((row, i) => row.map((x, j) => (i === j ? x - 1 : x)));\n return { K, beta };\n}\n\n/**\n * The Katz-index predictor, SEPARATE from the recorded comparison and labelled post hoc: it was\n * added after the negative result was recorded, so its numbers are exploratory and are never\n * merged into that result. Ranks each candidate by K[premise][candidate] (paths of every length,\n * attenuated by β per step), ties by id. Not wired into discovery (`src/composition/`): Product A\n * candidates are in different components by construction, so every path score there is 0.\n *\n * @internal\n */\nexport function runKatzLinkPrediction(families: readonly AtlasFamily[], k = 10): KatzLinkPredictionResult {\n const { models, queries, stillConnected } = holdOuts(families);\n const ids = [...models.keys()];\n const index = new Map(ids.map((id, i) => [id, i]));\n const trials: KatzTrial[] = queries.map((q) => {\n const katz = katzIndex(q.adj, ids);\n const p = index.get(q.premise)!;\n const score = (id: string): number => katz.K[p][index.get(id)!];\n const ranked = rankBy(q.candidates, (id) => [score(id)]);\n return {\n bridgeId: q.held.id,\n premise: q.premise,\n conclusion: q.conclusion,\n katzRank: rankOf(ranked, q.conclusion),\n katzScore: q.candidates.includes(q.conclusion) ? score(q.conclusion) : 0,\n candidates: q.candidates.length,\n beta: katz.beta,\n postHoc: true,\n };\n });\n const betas = trials.map((t) => t.beta);\n const hit: number[] = trials.map((t) => (t.katzRank <= k ? 1 : 0));\n const rr = trials.map((t) => 1 / t.katzRank);\n return {\n postHoc: true,\n label: POST_HOC_LABEL,\n k,\n betaRange: betas.length === 0 ? [Number.NaN, Number.NaN] : [Math.min(...betas), Math.max(...betas)],\n trials,\n stillConnected,\n katzHits: hit.reduce((acc, x) => acc + x, 0),\n katzMrr: meanOrNaN(rr),\n chanceRecall: meanOrNaN(trials.map((t) => Math.min(k, t.candidates) / t.candidates)),\n intervals: { seed: RESAMPLE_SEED, resamples: RESAMPLES, recall: bootstrapMean(hit), mrr: bootstrapMean(rr) },\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/atlas/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/atlas/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG","sourcesContent":["/**\n * The `Model` record — Phase 3's promotion of the Phase 0 `AtlasModel`.\n *\n * ROADMAP Phase 3 makes the MODEL the unit rather than the equation: state\n * space, dynamics, observables, parameters, boundary/initial data, symmetry\n * group where known, regime. This module is the record's new home; the nine\n * Phase 0 fields are carried over unchanged and three are added.\n *\n * **`boundaryData`, `initialData` and `symmetryGroup` are all OPTIONAL**\n * (`docs/planning/Atlas-Phase-3-Design.md` §4, which supersedes the\n * implementation plan's wording on the first two). No boundary or initial\n * data is recorded for the nine oscillator models, so a required field would\n * force either fabricated values or empty ones asserting \"there are none\".\n * `oscillators/models.ts` refuses exactly that fabrication for `inequalities`.\n * **An absent field says \"not recorded\"; a present empty one says \"there are\n * none\", and only one of those is true here** — so the nine literals stay\n * byte-identical and record nothing they do not have a source for.\n *\n * `src/atlas/serialize.ts` enumerates model fields explicitly, so a model\n * carrying none of the three serializes byte-identically to Phase 0's\n * committed `data/atlas/oscillators.json`.\n *\n * @module atlas/model\n */\n\nimport type { DimensionalVariable } from '../dimensional/buckingham.js';\nimport type { Regime } from './types.js';\n\n/**\n * One model in the atlas.\n *\n * The first nine fields are Phase 0's `AtlasModel` verbatim. The last three\n * are the Phase 3 additions and are omitted, never emptied, when unrecorded.\n *\n * @public\n */\nexport interface AtlasModel {\n /** `'model-spring'`, `'model-lc'`, … */\n readonly id: string;\n readonly family: string;\n readonly stateSpace: string;\n /** Display form of the ODE. */\n readonly dynamics: string;\n readonly observables: readonly string[];\n /** Dimensioned parameters. */\n readonly parameters: readonly DimensionalVariable[];\n /** `'theta0'`, `'qa'` — declared with the zero dimension. */\n readonly dimensionlessInputs: readonly string[];\n /** `'CE-simple-harmonic-frequency'`, … — must resolve in `CANONICAL_EQUATIONS`. */\n readonly canonicalRefs: readonly string[];\n readonly regime: Regime;\n\n // ── Phase 3 additions (OPTIONAL; a model without them is unchanged) ─────\n /**\n * Boundary conditions the model is posed with, each as its stated display\n * form (`'u(0, t) = u(L, t) = 0'`). **Omit when none is recorded** — an\n * empty array would claim the model has no boundary conditions.\n */\n readonly boundaryData?: readonly string[];\n /**\n * Initial conditions the model is posed with (`'x(0) = x₀'`). Omit when\n * none is recorded; see `boundaryData`.\n */\n readonly initialData?: readonly string[];\n /**\n * The symmetry group where it is known, as stated (`'SO(2)'`,\n * `'time translation'`). Omit when unknown — Phase 3 records only\n * symmetries a source states.\n */\n readonly symmetryGroup?: string;\n}\n\n/** A `Model`'s id, as `CanonicalEquation.model` references it. @internal */\nexport type ModelId = string;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bridges-coarse.d.ts","sourceRoot":"","sources":["../../../src/atlas/oscillators/bridges-coarse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMjE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAExF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,EAAE,WAmE/B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBAAwD,CAAC"}
1
+ {"version":3,"file":"bridges-coarse.d.ts","sourceRoot":"","sources":["../../../src/atlas/oscillators/bridges-coarse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMjE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAExF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,EAAE,WA+D/B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBAAwD,CAAC"}
@@ -11,7 +11,7 @@
11
11
  * @module atlas/oscillators/bridges-coarse
12
12
  */
13
13
  import { LENGTH, MASS, VELOCITY } from '../../dimensional/types.js';
14
- import { deriveRegimeGroups } from '../regime.js';
14
+ import { makeRegime } from '../regime.js';
15
15
  import { relationContractOf } from './bridges-exact.js';
16
16
  import { SPRING_CONSTANT } from './dimensions.js';
17
17
  const FAMILY = 'oscillators';
@@ -82,16 +82,12 @@ export const BRIDGE_CHAIN_WAVE = {
82
82
  'the discrete lattice spacing a as an independent scale',
83
83
  ],
84
84
  sideConditions: ['long-wavelength, qa ≪ 1'],
85
- regime: {
86
- family: FAMILY,
87
- inequalities: [{ group: 'qa', op: '<', bound: 1, alias: 'qa ≪ 1' }],
88
- groupDefinitions: deriveRegimeGroups(FAMILY, [
89
- { name: 'm', dim: MASS },
90
- { name: 'kappa', dim: SPRING_CONSTANT },
91
- { name: 'a', dim: LENGTH },
92
- { name: 'c', dim: VELOCITY },
93
- ], ['qa']),
94
- },
85
+ regime: makeRegime(FAMILY, [
86
+ { name: 'm', dim: MASS },
87
+ { name: 'kappa', dim: SPRING_CONSTANT },
88
+ { name: 'a', dim: LENGTH },
89
+ { name: 'c', dim: VELOCITY },
90
+ ], ['qa'], [{ group: 'qa', op: '<', bound: 1, alias: 'qa ≪ 1' }]),
95
91
  counterexamples: [
96
92
  {
97
93
  description: 'A mode at the band edge qa = π has ω = 2√(κ/m) on the lattice, while the ' +
@@ -100,7 +96,6 @@ export const BRIDGE_CHAIN_WAVE = {
100
96
  witness: 'W9',
101
97
  },
102
98
  ],
103
- evidence: new Set(['proposed', 'dimension-checked', 'numerically-supported']),
104
99
  witnesses: [
105
100
  {
106
101
  id: 'W9',
@@ -1 +1 @@
1
- {"version":3,"file":"bridges-coarse.js","sourceRoot":"","sources":["../../../src/atlas/oscillators/bridges-coarse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridges-coarse.js","sourceRoot":"","sources":["../../../src/atlas/oscillators/bridges-coarse.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Bridge 5 of the oscillator pilot: the COARSE-GRAINING bridge from the\n * discrete mass–spring chain to the 1-D wave equation.\n *\n * This is the only Phase 0 bridge whose relation is `coarse-graining`: the\n * reduction map `u_n(t) ↦ u(x = na, t)` is not invertible, and the\n * short-wavelength half of the lattice Brillouin zone (`q > π/a`) has no image\n * in the continuum model. The information loss is therefore recorded in\n * `doesNotPreserve` and witnessed numerically by `W9`.\n *\n * @module atlas/oscillators/bridges-coarse\n */\n\nimport { LENGTH, MASS, VELOCITY } from '../../dimensional/types.js';\nimport { makeRegime } from '../regime.js';\nimport type { AtlasBridge, RelationContract } from '../types.js';\nimport { relationContractOf } from './bridges-exact.js';\nimport { SPRING_CONSTANT } from './dimensions.js';\n\nconst FAMILY = 'oscillators';\n\n/**\n * The lattice dispersion relation of `m u_n″ = κ(u_{n+1} − 2u_n + u_{n−1})`:\n * `ω(q) = 2 √(κ/m) |sin(qa/2)|`.\n *\n * @internal\n */\nexport function latticeDispersion(q: number, a: number, kappa: number, m: number): number {\n return 2 * Math.sqrt(kappa / m) * Math.abs(Math.sin((q * a) / 2));\n}\n\n/**\n * The continuum dispersion relation of `u_tt = c² u_xx` with `c² = κ a² / m`:\n * `ω = c q`.\n *\n * @internal\n */\nexport function continuumDispersion(q: number, a: number, kappa: number, m: number): number {\n return Math.sqrt((kappa * a * a) / m) * Math.abs(q);\n}\n\n/** The long-wavelength wave speed `c = a √(κ/m)`. @internal */\nexport function chainWaveSpeed(a: number, kappa: number, m: number): number {\n return a * Math.sqrt(kappa / m);\n}\n\n/**\n * The band edge of the lattice, at `qa = π`: `ω_max = 2 √(κ/m)`.\n * The continuum relation `ω = c q` is unbounded and has no counterpart —\n * that absence IS the information the coarse-graining discards.\n *\n * @internal\n */\nexport function latticeBandEdge(kappa: number, m: number): number {\n return 2 * Math.sqrt(kappa / m);\n}\n\n/**\n * Leading-order relative dispersion error `1 − ω_lattice/ω_continuum`,\n * approximated as `(qa)²/24`.\n *\n * Convention note (fixed for the whole sprint): with `x = qa/2`,\n * `1 − sin x / x = x²/6 − x⁴/120 + …`, so the true relative error is\n * `(qa)²/24 − (qa)⁴/1920`. The quartic term makes `(qa)²/24` an\n * OVERESTIMATE; the signed deviation `(true − approx)/approx` is therefore\n * NEGATIVE and equals `−(qa)²/80` to leading order. The W9 assertion is on\n * the MAGNITUDE, so the sign convention does not change the test — it is\n * stated here so the next reader does not rederive it.\n *\n * @internal\n */\nexport function dispersionErrorApproximation(qa: number): number {\n return (qa * qa) / 24;\n}\n\n/** Bridge 5: chain → wave equation by coarse-graining. @internal */\nexport const BRIDGE_CHAIN_WAVE: AtlasBridge = {\n id: 'ab-chain-wave',\n relation: 'coarse-graining',\n premises: ['model-chain'],\n conclusion: 'model-wave-1d',\n transformation: 'u_n(t) ↦ u(x = n a, t), with c² = κ a² / m',\n preserves: [\n 'long-wavelength dispersion ω ≈ c q',\n 'wave speed c = a √(κ/m)',\n 'linearity',\n ],\n doesNotPreserve: [\n 'modes with q > π/a',\n 'the band edge ω_max = 2 √(κ/m) at qa = π',\n 'the discrete lattice spacing a as an independent scale',\n ],\n sideConditions: ['long-wavelength, qa ≪ 1'],\n regime: makeRegime(\n FAMILY,\n [\n { name: 'm', dim: MASS },\n { name: 'kappa', dim: SPRING_CONSTANT },\n { name: 'a', dim: LENGTH },\n { name: 'c', dim: VELOCITY },\n ],\n ['qa'],\n [{ group: 'qa', op: '<', bound: 1, alias: 'qa ≪ 1' }],\n ),\n counterexamples: [\n {\n description:\n 'A mode at the band edge qa = π has ω = 2√(κ/m) on the lattice, while the ' +\n 'continuum relation ω = c q is unbounded: the coarse-grained model has no ' +\n 'band edge at all.',\n witness: 'W9',\n },\n ],\n witnesses: [\n {\n id: 'W9',\n kind: 'numeric',\n test: 'tests/atlas/oscillators-coarse.test.ts',\n tolerance: 'relative dispersion error matches (qa)²/24 within 0.5% of itself',\n },\n {\n id: 'W9b',\n kind: 'numeric',\n test: 'tests/atlas/oscillators-coarse.test.ts',\n tolerance:\n 'ring of 64 masses integrated: ω matches the lattice dispersion within 1e-9 and the coarse error ' +\n '(qa)²/24 within 1%; superposition within 1e-10 (linearity); a 10% wrong κ and a cubic on-site force each fail',\n },\n ],\n // The monatomic-chain dispersion omega(q) = 2 sqrt(kappa/m) |sin(qa/2)| and its\n // long-wavelength continuum limit are standard solid-state results. Work and topic are\n // cited rather than a precise section number, which would be fabrication in a more\n // confident costume. This array was EMPTY, which is honest but leaves a textbook result\n // looking unsourced.\n citations: [\n 'Kittel, Introduction to Solid State Physics - Phonons I: the monatomic linear chain, its dispersion relation and the qa << 1 continuum limit',\n 'Ashcroft & Mermin, Solid State Physics - the one-dimensional monatomic Bravais lattice and the first Brillouin zone band edge at qa = pi',\n ],\n reviewStatus: 'proposed',\n};\n\n/**\n * Bridge 5 re-registered through `RelationContract`.\n *\n * `coarse-graining` leaves `bound` OPTIONAL, and this record carries none: the\n * `qa²/24` dispersion residual is a per-mode series term, not a Lipschitz\n * constant with a uniform offset in a stated norm. The union permits the\n * absence rather than forcing an invented `K` and `delta`.\n *\n * No `deltaAt` either, for the same reason and by the same rule: `deltaAt` is\n * the machine form OF a `delta`, so a record with no `delta` has nothing for\n * it to be the machine form of. `admitApproximation` requires `deltaAt` only\n * of an `approximation`, so this record passes admission unchanged.\n *\n * @internal\n */\nexport const CONTRACT_CHAIN_WAVE: RelationContract = relationContractOf(BRIDGE_CHAIN_WAVE);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bridges-exact.d.ts","sourceRoot":"","sources":["../../../src/atlas/oscillators/bridges-exact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAuB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAgDtF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,EAAE,WA8D9B,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAqC/B,CAAC;AAMF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,CAwBxE;AAED,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,EAAE,gBAAuD,CAAC;AAEzF,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,gBAAwD,CAAC"}
1
+ {"version":3,"file":"bridges-exact.d.ts","sourceRoot":"","sources":["../../../src/atlas/oscillators/bridges-exact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAU,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA6CzE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,EAAE,WA6D9B,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAoC/B,CAAC;AAMF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,CAwBxE;AAED,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,EAAE,gBAAuD,CAAC;AAEzF,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,gBAAwD,CAAC"}
@@ -21,7 +21,7 @@
21
21
  * @module atlas/oscillators/bridges-exact
22
22
  */
23
23
  import { physjsFormalRef } from '../physjs-ref.js';
24
- import { deriveRegimeGroups } from '../regime.js';
24
+ import { makeRegime } from '../regime.js';
25
25
  import { getAtlasModel } from './models.js';
26
26
  import { SPRING_LC_RELATIVE_PERIOD_TRANSPORT } from './norm-transport.js';
27
27
  const FAMILY = 'oscillators';
@@ -40,7 +40,10 @@ const WITNESS_RESULTS_TEST = 'tests/atlas/witness-results.test.ts';
40
40
  *
41
41
  * Work and topic are cited rather than precise section numbers, because a section number
42
42
  * stated without checking the edition in hand is the same fabrication in a more confident
43
- * costume. `reviewStatus` stays 'proposed' until the independent physicist review lands.
43
+ * costume. `reviewStatus` is the record's declared review state and derives no evidence
44
+ * tag (`deriveEvidence` never reads it). It is 'proposed' here because no independent
45
+ * physicist review of these records exists; the atlas no longer gates on one (the ruling
46
+ * is recorded in `ACTIVE.md` and `NOTES.md`).
44
47
  */
45
48
  const CITATIONS = [
46
49
  'Olson, Dynamical Analogies - the force-voltage (impedance) analogy between a mass-spring–damper and a series RLC circuit',
@@ -57,13 +60,8 @@ function bridgeRegime(premiseId, conclusionId) {
57
60
  ...getAtlasModel(premiseId).parameters,
58
61
  ...getAtlasModel(conclusionId).parameters,
59
62
  ];
60
- return {
61
- family: FAMILY,
62
- inequalities: [],
63
- groupDefinitions: deriveRegimeGroups(FAMILY, parameters, []),
64
- };
63
+ return makeRegime(FAMILY, parameters, [], []);
65
64
  }
66
- const evidence = (...tags) => new Set(tags);
67
65
  /**
68
66
  * Bridge 1 — the lossless spring ↔ LC dictionary.
69
67
  *
@@ -104,7 +102,6 @@ export const BRIDGE_SPRING_LC = {
104
102
  // DERIVED from `data/atlas/witness-results.json`, where W1s records the CAS
105
103
  // check of this bridge's dictionary. A stored copy would be a second source
106
104
  // of truth that no run could falsify.
107
- evidence: evidence('proposed', 'numerically-supported'),
108
105
  witnesses: [
109
106
  {
110
107
  id: 'W1',
@@ -166,7 +163,6 @@ export const BRIDGE_DAMPED_RLC = {
166
163
  ],
167
164
  regime: bridgeRegime('model-damped-spring', 'model-rlc'),
168
165
  counterexamples: [],
169
- evidence: evidence('proposed', 'numerically-supported'),
170
166
  witnesses: [
171
167
  {
172
168
  id: 'W2',
@@ -1 +1 @@
1
- {"version":3,"file":"bridges-exact.js","sourceRoot":"","sources":["../../../src/atlas/oscillators/bridges-exact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridges-exact.js","sourceRoot":"","sources":["../../../src/atlas/oscillators/bridges-exact.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The two Phase 0 `exact-equivalence` bridges of design note §3.\n *\n * - `ab-spring-lc` — the lossless mechanical/electrical dictionary, exact with\n * no side condition beyond positivity and losslessness.\n * - `ab-damped-rlc` — exact only ON a side condition: the two damping ratios\n * must agree, `b/(2√(mk)) = (R/2)√(C/L)`.\n *\n * **Regimes carry no inequalities.** `RegimeInequality` expresses `<`, `<=`,\n * `>`, `>=` only, so the bridge-2 side condition — an EQUALITY between two\n * derived ratios — cannot be written as one. It is carried in\n * `sideConditions` as prose instead, and the equality is what witness W2\n * executes. Writing an inequality that merely resembles it would be a\n * fabricated constraint, so none is written. `groupDefinitions` is derived\n * from the premise and conclusion parameters by `deriveRegimeGroups`, exactly\n * as the models do; nothing there is hand-authored.\n *\n * **Evidence tags are witness-gated.** A tag appears only because a witness in\n * `tests/atlas/oscillators-exact.test.ts` passes and shows it.\n *\n * @module atlas/oscillators/bridges-exact\n */\n\nimport { physjsFormalRef } from '../physjs-ref.js';\nimport { makeRegime } from '../regime.js';\nimport { getAtlasModel } from './models.js';\nimport type { AtlasBridge, Regime, RelationContract } from '../types.js';\nimport { SPRING_LC_RELATIVE_PERIOD_TRANSPORT } from './norm-transport.js';\n\nconst FAMILY = 'oscillators';\n\n/** The witness test file every witness below runs in. */\nconst TEST = 'tests/atlas/oscillators-exact.test.ts';\n/** Where the CAS witnesses W1s and W2s are named; the artifact pin runs them. */\nconst WITNESS_RESULTS_TEST = 'tests/atlas/witness-results.test.ts';\n\n/**\n * Literature for the electromechanical analogy, NOT a pointer at our own plan.\n *\n * The previous value here was `docs/planning/Atlas-Phase-0-Design.md §3, §6` - a citation\n * naming the document that ASSERTED the claim. That is circular, and it is worse than an\n * empty array because it LOOKS sourced and would satisfy any check that only asks whether\n * `citations[]` is non-empty. Same failure class as the evidence-tag theatre that\n * `tests/atlas/evidence-rule.test.ts` exists to catch.\n *\n * Work and topic are cited rather than precise section numbers, because a section number\n * stated without checking the edition in hand is the same fabrication in a more confident\n * costume. `reviewStatus` is the record's declared review state and derives no evidence\n * tag (`deriveEvidence` never reads it). It is 'proposed' here because no independent\n * physicist review of these records exists; the atlas no longer gates on one (the ruling\n * is recorded in `ACTIVE.md` and `NOTES.md`).\n */\nconst CITATIONS: readonly string[] = [\n 'Olson, Dynamical Analogies - the force-voltage (impedance) analogy between a mass-spring–damper and a series RLC circuit',\n 'Feynman, Lectures on Physics Vol. II, chapter on resonance - the LC oscillator and its mechanical counterpart',\n];\n\n/**\n * Regime coordinates spanning a bridge's premise and conclusion parameters.\n *\n * The two models' parameter names are disjoint in both bridges, so the union\n * is a legal `deriveRegimeGroups` input.\n */\nfunction bridgeRegime(premiseId: string, conclusionId: string): Regime {\n const parameters = [\n ...getAtlasModel(premiseId).parameters,\n ...getAtlasModel(conclusionId).parameters,\n ];\n return makeRegime(FAMILY, parameters, [], []);\n}\n\n/**\n * Bridge 1 — the lossless spring ↔ LC dictionary.\n *\n * `m ↔ L`, `k ↔ 1/C`, `x ↔ q`. Under `u = x/x0` (or `q/q0`) and `τ = ω0 t`\n * both systems become `u'' + u = 0`, so the equivalence is exact and\n * invertible.\n *\n * Its counterexample is W2b, which lives on THIS bridge: it shows that adding\n * a resistor to the LC side breaks the equivalence, so bridge 1 is a statement\n * about the LOSSLESS pair only.\n *\n * @internal\n */\nexport const BRIDGE_SPRING_LC: AtlasBridge = {\n id: 'ab-spring-lc',\n relation: 'exact-equivalence',\n premises: ['model-spring'],\n conclusion: 'model-lc',\n // Two nondimensionalizations, each with its own ω0; composed, the spring→LC map is\n // q(t) = (q0/x0)·x(ω_LC t / ω_s). The dimensioned frequencies differ (W1a: ω_s = 2,\n // ω_LC = 2√2); what is preserved is the frequency in units of ω0.\n transformation:\n 'force–voltage analogy m ↔ L, k ↔ 1/C, x ↔ q (so ω0² = k/m ↔ 1/(LC)); ' +\n 'u = x/x0 or q/q0, τ = ω0 t; composed, q(t) = (q0/x0)·x(ω_LC t / ω_s)',\n inverse: 'x = x0 u, t = τ/ω0',\n preserves: ['the natural frequency in units of ω0 (ω = 1 in τ = ω0 t)', 'energy up to scale', 'phase portrait'],\n doesNotPreserve: ['physical interpretation', 'units'],\n sideConditions: ['m, k, L, C > 0', 'lossless', 'unforced', 'x0, q0 nonzero'],\n regime: bridgeRegime('model-spring', 'model-lc'),\n counterexamples: [\n {\n description:\n 'adding R to bridge 1 breaks it: the circuit L = 2, C = 0.125 of witness W2b with R = 4 has ' +\n 'ζ_RLC = (R/2)√(C/L) = 0.5, ' +\n 'which no lossless spring matches — the trajectories separate by more than 1e-2 at τ = π',\n witness: 'W2b',\n },\n ],\n // `symbolically-checked` is NOT stored here any more (Phase 4 S4.3): it is\n // DERIVED from `data/atlas/witness-results.json`, where W1s records the CAS\n // check of this bridge's dictionary. A stored copy would be a second source\n // of truth that no run could falsify.\n witnesses: [\n {\n id: 'W1',\n kind: 'symbolic',\n test: TEST,\n tolerance: 'exact — rational exponent arithmetic, no floating point',\n },\n {\n id: 'W1a',\n kind: 'numeric',\n test: TEST,\n tolerance: '|u_spring − u_lc| < 1e-8; each within 1e-8 of cos τ',\n },\n {\n id: 'W1b',\n kind: 'numeric',\n test: TEST,\n tolerance: 'inverse-mapped trajectory solves m x″ + k x = 0 within 1e-8; a 1% wrong ω0 fails',\n },\n { id: 'W2b', kind: 'numeric', test: TEST, tolerance: 'separation > 1e-2 at τ = π' },\n {\n id: 'W1s',\n kind: 'symbolic',\n test: WITNESS_RESULTS_TEST,\n tolerance: 'CAS: k/m under m ↔ L, k ↔ 1/C minus 1/(LC) simplifies to literal 0',\n },\n ],\n citations: CITATIONS,\n reviewStatus: 'proposed',\n // spring → LC in relative period error only; see ./norm-transport.ts for what is not declared.\n normTransports: [SPRING_LC_RELATIVE_PERIOD_TRANSPORT],\n formalRef: physjsFormalRef('ab-spring-lc'),\n};\n\n/**\n * Bridge 2 — damped spring ↔ RLC, exact ON a side condition.\n *\n * The undamped dictionary of bridge 1 does not extend for free: `b` and `R`\n * are independent parameters, and the nondimensional systems coincide only\n * when the damping ratios match. The side condition is that equality, and W2\n * DERIVES `R` from it rather than assuming a value.\n *\n * @internal\n */\nexport const BRIDGE_DAMPED_RLC: AtlasBridge = {\n id: 'ab-damped-rlc',\n relation: 'exact-equivalence',\n premises: ['model-damped-spring'],\n conclusion: 'model-rlc',\n transformation:\n 'force–voltage analogy m ↔ L, k ↔ 1/C, b ↔ R, x ↔ q; ' +\n 'u = x/x0 or q/q0, τ = ω0 t; composed, q(t) = (q0/x0)·x(ω_RLC t / ω_mech)',\n inverse: 'x = x0 u, t = τ/ω0',\n preserves: ['the natural frequency in units of ω0 (ω = 1 in τ = ω0 t)', 'damping ratio', 'phase portrait'],\n doesNotPreserve: ['physical interpretation', 'units'],\n sideConditions: [\n 'b/√(mk) = R√(C/L), equivalently ζ_mech = b/(2√(mk)) equals ζ_RLC = (R/2)√(C/L)',\n 'm, b, k, L, R, C > 0',\n 'unforced',\n 'x0, q0 nonzero',\n ],\n regime: bridgeRegime('model-damped-spring', 'model-rlc'),\n counterexamples: [],\n witnesses: [\n {\n id: 'W2',\n kind: 'numeric',\n test: TEST,\n tolerance: 'R derived exactly; |u_mech − u_rlc| < 1e-8 at four τ',\n },\n {\n id: 'W2s',\n kind: 'symbolic',\n test: WITNESS_RESULTS_TEST,\n tolerance: 'CAS: b²/(4mk) under m ↔ L, k ↔ 1/C, b ↔ R minus R²C/(4L) simplifies to literal 0',\n },\n ],\n citations: CITATIONS,\n reviewStatus: 'proposed',\n formalRef: physjsFormalRef('ab-damped-rlc'),\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Phase 1 re-registration: the Sprint 0 bridges through `RelationContract`\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Re-register an `AtlasBridge` through the Phase 1 `RelationContract` union.\n *\n * `AtlasBridge` states its two conditional requirements — `exact-equivalence`\n * needs `inverse`, `approximation` needs `bound` — only in doc comments, so a\n * record that breaks them type-checks. `RelationContract` states them in the\n * type system. This function is the one place the Sprint 0 records cross from\n * the weaker shape to the stronger one, and it THROWS on the two cases the\n * doc comments could only describe.\n *\n * It copies rather than restates: every field comes off the bridge, so a\n * contract cannot drift from the record it re-registers.\n *\n * @throws TypeError when the bridge omits the field its relation requires.\n * @internal\n */\nexport function relationContractOf(bridge: AtlasBridge): RelationContract {\n const { relation, transformation } = bridge;\n switch (relation) {\n case 'exact-equivalence': {\n if (bridge.inverse === undefined) {\n throw new TypeError(`${bridge.id}: exact-equivalence without an inverse`);\n }\n return { type: relation, transformation, inverse: bridge.inverse };\n }\n case 'approximation': {\n if (bridge.bound === undefined) {\n throw new TypeError(`${bridge.id}: approximation without a bound`);\n }\n return { type: relation, transformation, bound: bridge.bound };\n }\n case 'coarse-graining':\n // `bound` is OPTIONAL here: the chain/wave bridge carries none, and the\n // union allows that rather than forcing an invented one.\n return bridge.bound === undefined\n ? { type: relation, transformation }\n : { type: relation, transformation, bound: bridge.bound };\n default:\n return { type: relation, transformation };\n }\n}\n\n/** Bridge 1 re-registered through the Phase 1 contract. @internal */\nexport const CONTRACT_SPRING_LC: RelationContract = relationContractOf(BRIDGE_SPRING_LC);\n\n/** Bridge 2 re-registered through the Phase 1 contract. @internal */\nexport const CONTRACT_DAMPED_RLC: RelationContract = relationContractOf(BRIDGE_DAMPED_RLC);\n"]}