universal-physics-tensor 10.0.0 → 12.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 (835) hide show
  1. package/README.md +39 -36
  2. package/bin/upt.mjs +13 -1
  3. package/data/applied-cases.json +1892 -0
  4. package/data/applied-cases.schema.json +194 -0
  5. package/data/atlas/atlas.json +25 -25
  6. package/data/atlas/atlas.jsonld +1 -1
  7. package/data/atlas/diffusion.json +6 -6
  8. package/data/atlas/oscillators.json +7 -7
  9. package/data/atlas/waves.json +14 -14
  10. package/data/atlas/witness-results.json +11 -11
  11. package/data/bridge-catalog.json +389 -230
  12. package/data/bridge-catalog.schema.json +45 -7
  13. package/data/units.json +6 -25
  14. package/dist/atlas/applicability.d.ts.map +1 -1
  15. package/dist/atlas/applicability.js +21 -15
  16. package/dist/atlas/applicability.js.map +1 -1
  17. package/dist/atlas/benchmark/hybrid-retrieval.d.ts +9 -1
  18. package/dist/atlas/benchmark/hybrid-retrieval.d.ts.map +1 -1
  19. package/dist/atlas/benchmark/hybrid-retrieval.js +15 -13
  20. package/dist/atlas/benchmark/hybrid-retrieval.js.map +1 -1
  21. package/dist/atlas/benchmark/loader.js +2 -2
  22. package/dist/atlas/benchmark/loader.js.map +1 -1
  23. package/dist/atlas/benchmark/stats.d.ts +2 -2
  24. package/dist/atlas/benchmark/stats.d.ts.map +1 -1
  25. package/dist/atlas/benchmark/stats.js +9 -15
  26. package/dist/atlas/benchmark/stats.js.map +1 -1
  27. package/dist/atlas/catalog-formal-ref.d.ts +26 -3
  28. package/dist/atlas/catalog-formal-ref.d.ts.map +1 -1
  29. package/dist/atlas/catalog-formal-ref.js +52 -5
  30. package/dist/atlas/catalog-formal-ref.js.map +1 -1
  31. package/dist/atlas/chain-pipeline.d.ts.map +1 -1
  32. package/dist/atlas/chain-pipeline.js +7 -8
  33. package/dist/atlas/chain-pipeline.js.map +1 -1
  34. package/dist/atlas/diffusion/bridges-closure.d.ts +0 -4
  35. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -1
  36. package/dist/atlas/diffusion/bridges-closure.js +8 -12
  37. package/dist/atlas/diffusion/bridges-closure.js.map +1 -1
  38. package/dist/atlas/diffusion/bridges.d.ts.map +1 -1
  39. package/dist/atlas/diffusion/bridges.js +27 -39
  40. package/dist/atlas/diffusion/bridges.js.map +1 -1
  41. package/dist/atlas/diffusion/dimensions.d.ts +6 -14
  42. package/dist/atlas/diffusion/dimensions.d.ts.map +1 -1
  43. package/dist/atlas/diffusion/dimensions.js +8 -16
  44. package/dist/atlas/diffusion/dimensions.js.map +1 -1
  45. package/dist/atlas/diffusion/models.d.ts +3 -3
  46. package/dist/atlas/diffusion/models.d.ts.map +1 -1
  47. package/dist/atlas/diffusion/models.js +5 -10
  48. package/dist/atlas/diffusion/models.js.map +1 -1
  49. package/dist/atlas/diffusion/numerics.d.ts +16 -4
  50. package/dist/atlas/diffusion/numerics.d.ts.map +1 -1
  51. package/dist/atlas/diffusion/numerics.js +38 -24
  52. package/dist/atlas/diffusion/numerics.js.map +1 -1
  53. package/dist/atlas/link-prediction.d.ts +106 -3
  54. package/dist/atlas/link-prediction.d.ts.map +1 -1
  55. package/dist/atlas/link-prediction.js +212 -66
  56. package/dist/atlas/link-prediction.js.map +1 -1
  57. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -1
  58. package/dist/atlas/oscillators/bridges-coarse.js +7 -11
  59. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -1
  60. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -1
  61. package/dist/atlas/oscillators/bridges-exact.js +6 -7
  62. package/dist/atlas/oscillators/bridges-exact.js.map +1 -1
  63. package/dist/atlas/oscillators/bridges-limits.d.ts +3 -16
  64. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -1
  65. package/dist/atlas/oscillators/bridges-limits.js +23 -34
  66. package/dist/atlas/oscillators/bridges-limits.js.map +1 -1
  67. package/dist/atlas/oscillators/dimensions.d.ts +9 -21
  68. package/dist/atlas/oscillators/dimensions.d.ts.map +1 -1
  69. package/dist/atlas/oscillators/dimensions.js +9 -21
  70. package/dist/atlas/oscillators/dimensions.js.map +1 -1
  71. package/dist/atlas/oscillators/limit-witnesses.d.ts +2 -2
  72. package/dist/atlas/oscillators/limit-witnesses.d.ts.map +1 -1
  73. package/dist/atlas/oscillators/limit-witnesses.js +17 -15
  74. package/dist/atlas/oscillators/limit-witnesses.js.map +1 -1
  75. package/dist/atlas/oscillators/models.d.ts.map +1 -1
  76. package/dist/atlas/oscillators/models.js +2 -6
  77. package/dist/atlas/oscillators/models.js.map +1 -1
  78. package/dist/atlas/oscillators/pendulum-motion.d.ts +29 -6
  79. package/dist/atlas/oscillators/pendulum-motion.d.ts.map +1 -1
  80. package/dist/atlas/oscillators/pendulum-motion.js +60 -40
  81. package/dist/atlas/oscillators/pendulum-motion.js.map +1 -1
  82. package/dist/atlas/oscillators/phase-translation.d.ts +0 -11
  83. package/dist/atlas/oscillators/phase-translation.d.ts.map +1 -1
  84. package/dist/atlas/oscillators/phase-translation.js +3 -4
  85. package/dist/atlas/oscillators/phase-translation.js.map +1 -1
  86. package/dist/atlas/oscillators/position-translation.d.ts +68 -7
  87. package/dist/atlas/oscillators/position-translation.d.ts.map +1 -1
  88. package/dist/atlas/oscillators/position-translation.js +123 -12
  89. package/dist/atlas/oscillators/position-translation.js.map +1 -1
  90. package/dist/atlas/oscillators/rejections.d.ts +0 -2
  91. package/dist/atlas/oscillators/rejections.d.ts.map +1 -1
  92. package/dist/atlas/oscillators/rejections.js +0 -7
  93. package/dist/atlas/oscillators/rejections.js.map +1 -1
  94. package/dist/atlas/physjs-entries.generated.d.ts +35 -25
  95. package/dist/atlas/physjs-entries.generated.d.ts.map +1 -1
  96. package/dist/atlas/physjs-entries.generated.js +37 -25
  97. package/dist/atlas/physjs-entries.generated.js.map +1 -1
  98. package/dist/atlas/physjs-ref.d.ts +34 -31
  99. package/dist/atlas/physjs-ref.d.ts.map +1 -1
  100. package/dist/atlas/physjs-ref.js +55 -53
  101. package/dist/atlas/physjs-ref.js.map +1 -1
  102. package/dist/atlas/physjs-reviewed.d.ts +1 -1
  103. package/dist/atlas/physjs-reviewed.js +15 -15
  104. package/dist/atlas/physjs-reviewed.js.map +1 -1
  105. package/dist/atlas/poster/statements.d.ts +0 -19
  106. package/dist/atlas/poster/statements.d.ts.map +1 -1
  107. package/dist/atlas/poster/statements.js +1 -1
  108. package/dist/atlas/poster/statements.js.map +1 -1
  109. package/dist/atlas/proof-target.d.ts +1 -1
  110. package/dist/atlas/proof-target.js +1 -1
  111. package/dist/atlas/proof-target.js.map +1 -1
  112. package/dist/atlas/regime.d.ts +1 -1
  113. package/dist/atlas/regime.d.ts.map +1 -1
  114. package/dist/atlas/regime.js +1 -1
  115. package/dist/atlas/regime.js.map +1 -1
  116. package/dist/atlas/text-overlap.d.ts +23 -0
  117. package/dist/atlas/text-overlap.d.ts.map +1 -0
  118. package/dist/atlas/text-overlap.js +41 -0
  119. package/dist/atlas/text-overlap.js.map +1 -0
  120. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -1
  121. package/dist/atlas/waves/bridges-closure.js +2 -6
  122. package/dist/atlas/waves/bridges-closure.js.map +1 -1
  123. package/dist/atlas/waves/bridges.d.ts.map +1 -1
  124. package/dist/atlas/waves/bridges.js +32 -48
  125. package/dist/atlas/waves/bridges.js.map +1 -1
  126. package/dist/atlas/waves/models.d.ts +5 -6
  127. package/dist/atlas/waves/models.d.ts.map +1 -1
  128. package/dist/atlas/waves/models.js +7 -13
  129. package/dist/atlas/waves/models.js.map +1 -1
  130. package/dist/atlas/waves/numerics.d.ts.map +1 -1
  131. package/dist/atlas/waves/numerics.js +10 -3
  132. package/dist/atlas/waves/numerics.js.map +1 -1
  133. package/dist/atlas/witness-numeric.d.ts +30 -0
  134. package/dist/atlas/witness-numeric.d.ts.map +1 -1
  135. package/dist/atlas/witness-numeric.js +53 -0
  136. package/dist/atlas/witness-numeric.js.map +1 -1
  137. package/dist/atlas/witness-specs.d.ts.map +1 -1
  138. package/dist/atlas/witness-specs.js +19 -0
  139. package/dist/atlas/witness-specs.js.map +1 -1
  140. package/dist/atlas/witness-symbolic.d.ts +75 -3
  141. package/dist/atlas/witness-symbolic.d.ts.map +1 -1
  142. package/dist/atlas/witness-symbolic.js +116 -10
  143. package/dist/atlas/witness-symbolic.js.map +1 -1
  144. package/dist/bridges/catalog-load.d.ts.map +1 -1
  145. package/dist/bridges/catalog-load.js +13 -8
  146. package/dist/bridges/catalog-load.js.map +1 -1
  147. package/dist/bridges/catalog-types.d.ts +26 -2
  148. package/dist/bridges/catalog-types.d.ts.map +1 -1
  149. package/dist/bridges/catalog-types.js +11 -1
  150. package/dist/bridges/catalog-types.js.map +1 -1
  151. package/dist/bridges/evaluation-errors.d.ts +31 -1
  152. package/dist/bridges/evaluation-errors.d.ts.map +1 -1
  153. package/dist/bridges/evaluation-errors.js +20 -2
  154. package/dist/bridges/evaluation-errors.js.map +1 -1
  155. package/dist/bridges/evaluator-inputs.d.ts.map +1 -1
  156. package/dist/bridges/evaluator-inputs.js +7 -5
  157. package/dist/bridges/evaluator-inputs.js.map +1 -1
  158. package/dist/bridges/evaluators.d.ts.map +1 -1
  159. package/dist/bridges/evaluators.js +27 -12
  160. package/dist/bridges/evaluators.js.map +1 -1
  161. package/dist/bridges/expr-parse.d.ts +11 -0
  162. package/dist/bridges/expr-parse.d.ts.map +1 -1
  163. package/dist/bridges/expr-parse.js +14 -5
  164. package/dist/bridges/expr-parse.js.map +1 -1
  165. package/dist/bridges/holds.d.ts +35 -3
  166. package/dist/bridges/holds.d.ts.map +1 -1
  167. package/dist/bridges/holds.js +117 -23
  168. package/dist/bridges/holds.js.map +1 -1
  169. package/dist/bridges/notices.d.ts.map +1 -1
  170. package/dist/bridges/notices.js +5 -5
  171. package/dist/bridges/notices.js.map +1 -1
  172. package/dist/bridges/relation-eval.d.ts +4 -4
  173. package/dist/bridges/relation-eval.d.ts.map +1 -1
  174. package/dist/bridges/relation-eval.js +15 -16
  175. package/dist/bridges/relation-eval.js.map +1 -1
  176. package/dist/bridges/sensitivity.d.ts.map +1 -1
  177. package/dist/bridges/sensitivity.js +3 -3
  178. package/dist/bridges/sensitivity.js.map +1 -1
  179. package/dist/bridges/validity.d.ts +33 -0
  180. package/dist/bridges/validity.d.ts.map +1 -0
  181. package/dist/bridges/validity.js +67 -0
  182. package/dist/bridges/validity.js.map +1 -0
  183. package/dist/canonical/entries/atomic.js +1 -3
  184. package/dist/canonical/entries/atomic.js.map +1 -1
  185. package/dist/canonical/entries/condensed-matter.d.ts.map +1 -1
  186. package/dist/canonical/entries/condensed-matter.js +4 -5
  187. package/dist/canonical/entries/condensed-matter.js.map +1 -1
  188. package/dist/canonical/entries/dimensional-classics.d.ts.map +1 -1
  189. package/dist/canonical/entries/dimensional-classics.js +3 -4
  190. package/dist/canonical/entries/dimensional-classics.js.map +1 -1
  191. package/dist/canonical/entries/electromagnetism.d.ts.map +1 -1
  192. package/dist/canonical/entries/electromagnetism.js +4 -10
  193. package/dist/canonical/entries/electromagnetism.js.map +1 -1
  194. package/dist/canonical/entries/fluids-waves.d.ts.map +1 -1
  195. package/dist/canonical/entries/fluids-waves.js +3 -7
  196. package/dist/canonical/entries/fluids-waves.js.map +1 -1
  197. package/dist/canonical/entries/mechanics.d.ts.map +1 -1
  198. package/dist/canonical/entries/mechanics.js +4 -6
  199. package/dist/canonical/entries/mechanics.js.map +1 -1
  200. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  201. package/dist/canonical/entries/nonmonomial.js +9 -17
  202. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  203. package/dist/canonical/entries/relativity.d.ts.map +1 -1
  204. package/dist/canonical/entries/relativity.js +6 -6
  205. package/dist/canonical/entries/relativity.js.map +1 -1
  206. package/dist/canonical/entries/thermo-nuclear-cosmo.d.ts.map +1 -1
  207. package/dist/canonical/entries/thermo-nuclear-cosmo.js +6 -10
  208. package/dist/canonical/entries/thermo-nuclear-cosmo.js.map +1 -1
  209. package/dist/canonical/fixed-points.d.ts +94 -0
  210. package/dist/canonical/fixed-points.d.ts.map +1 -0
  211. package/dist/canonical/fixed-points.js +81 -0
  212. package/dist/canonical/fixed-points.js.map +1 -0
  213. package/dist/canonical/linkage.d.ts.map +1 -1
  214. package/dist/canonical/linkage.js +25 -44
  215. package/dist/canonical/linkage.js.map +1 -1
  216. package/dist/canonical/normal-form.d.ts.map +1 -1
  217. package/dist/canonical/normal-form.js +5 -11
  218. package/dist/canonical/normal-form.js.map +1 -1
  219. package/dist/canonical/structural.d.ts +21 -21
  220. package/dist/canonical/structural.d.ts.map +1 -1
  221. package/dist/canonical/structural.js +40 -19
  222. package/dist/canonical/structural.js.map +1 -1
  223. package/dist/cases/catalog-checks.d.ts +10 -0
  224. package/dist/cases/catalog-checks.d.ts.map +1 -0
  225. package/dist/cases/catalog-checks.js +241 -0
  226. package/dist/cases/catalog-checks.js.map +1 -0
  227. package/dist/cases/catalog.d.ts +83 -0
  228. package/dist/cases/catalog.d.ts.map +1 -0
  229. package/dist/cases/catalog.js +118 -0
  230. package/dist/cases/catalog.js.map +1 -0
  231. package/dist/cases/engine.d.ts +13 -0
  232. package/dist/cases/engine.d.ts.map +1 -0
  233. package/dist/cases/engine.js +179 -0
  234. package/dist/cases/engine.js.map +1 -0
  235. package/dist/cases/index.d.ts.map +1 -1
  236. package/dist/cases/index.js +5 -7
  237. package/dist/cases/index.js.map +1 -1
  238. package/dist/cases/methods.d.ts +215 -0
  239. package/dist/cases/methods.d.ts.map +1 -0
  240. package/dist/cases/methods.js +743 -0
  241. package/dist/cases/methods.js.map +1 -0
  242. package/dist/cases/quadrature.d.ts +7 -9
  243. package/dist/cases/quadrature.d.ts.map +1 -1
  244. package/dist/cases/quadrature.js +28 -32
  245. package/dist/cases/quadrature.js.map +1 -1
  246. package/dist/cases/types.d.ts +12 -0
  247. package/dist/cases/types.d.ts.map +1 -1
  248. package/dist/cases/types.js.map +1 -1
  249. package/dist/cli/args.d.ts +25 -1
  250. package/dist/cli/args.d.ts.map +1 -1
  251. package/dist/cli/args.js +30 -8
  252. package/dist/cli/args.js.map +1 -1
  253. package/dist/cli/bindings.d.ts.map +1 -1
  254. package/dist/cli/bindings.js +5 -4
  255. package/dist/cli/bindings.js.map +1 -1
  256. package/dist/cli/command.d.ts +11 -1
  257. package/dist/cli/command.d.ts.map +1 -1
  258. package/dist/cli/command.js.map +1 -1
  259. package/dist/cli/commands/_atlas-map.d.ts +0 -9
  260. package/dist/cli/commands/_atlas-map.d.ts.map +1 -1
  261. package/dist/cli/commands/_atlas-map.js +8 -18
  262. package/dist/cli/commands/_atlas-map.js.map +1 -1
  263. package/dist/cli/commands/_atlas-route.d.ts.map +1 -1
  264. package/dist/cli/commands/_atlas-route.js +6 -2
  265. package/dist/cli/commands/_atlas-route.js.map +1 -1
  266. package/dist/cli/commands/_discovery-opts.d.ts +1 -0
  267. package/dist/cli/commands/_discovery-opts.d.ts.map +1 -1
  268. package/dist/cli/commands/_discovery-opts.js +9 -9
  269. package/dist/cli/commands/_discovery-opts.js.map +1 -1
  270. package/dist/cli/commands/atlas.d.ts.map +1 -1
  271. package/dist/cli/commands/atlas.js +8 -5
  272. package/dist/cli/commands/atlas.js.map +1 -1
  273. package/dist/cli/commands/audit.d.ts.map +1 -1
  274. package/dist/cli/commands/audit.js +8 -1
  275. package/dist/cli/commands/audit.js.map +1 -1
  276. package/dist/cli/commands/axes.d.ts.map +1 -1
  277. package/dist/cli/commands/axes.js +20 -1
  278. package/dist/cli/commands/axes.js.map +1 -1
  279. package/dist/cli/commands/confront.d.ts.map +1 -1
  280. package/dist/cli/commands/confront.js +8 -14
  281. package/dist/cli/commands/confront.js.map +1 -1
  282. package/dist/cli/commands/derive.d.ts.map +1 -1
  283. package/dist/cli/commands/derive.js +22 -22
  284. package/dist/cli/commands/derive.js.map +1 -1
  285. package/dist/cli/commands/discover.d.ts.map +1 -1
  286. package/dist/cli/commands/discover.js +122 -73
  287. package/dist/cli/commands/discover.js.map +1 -1
  288. package/dist/cli/commands/eval.d.ts.map +1 -1
  289. package/dist/cli/commands/eval.js +1 -0
  290. package/dist/cli/commands/eval.js.map +1 -1
  291. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  292. package/dist/cli/commands/evaluate.js +67 -39
  293. package/dist/cli/commands/evaluate.js.map +1 -1
  294. package/dist/cli/commands/explain.d.ts.map +1 -1
  295. package/dist/cli/commands/explain.js +24 -3
  296. package/dist/cli/commands/explain.js.map +1 -1
  297. package/dist/cli/commands/ground.d.ts.map +1 -1
  298. package/dist/cli/commands/ground.js +7 -1
  299. package/dist/cli/commands/ground.js.map +1 -1
  300. package/dist/cli/commands/map.d.ts.map +1 -1
  301. package/dist/cli/commands/map.js +84 -11
  302. package/dist/cli/commands/map.js.map +1 -1
  303. package/dist/cli/commands/metric.d.ts.map +1 -1
  304. package/dist/cli/commands/metric.js +12 -9
  305. package/dist/cli/commands/metric.js.map +1 -1
  306. package/dist/cli/commands/path.d.ts +10 -0
  307. package/dist/cli/commands/path.d.ts.map +1 -1
  308. package/dist/cli/commands/path.js +25 -3
  309. package/dist/cli/commands/path.js.map +1 -1
  310. package/dist/cli/commands/probe.d.ts.map +1 -1
  311. package/dist/cli/commands/probe.js +59 -16
  312. package/dist/cli/commands/probe.js.map +1 -1
  313. package/dist/cli/commands/regime.d.ts.map +1 -1
  314. package/dist/cli/commands/regime.js +1 -0
  315. package/dist/cli/commands/regime.js.map +1 -1
  316. package/dist/cli/commands/retrieve.d.ts.map +1 -1
  317. package/dist/cli/commands/retrieve.js +1 -0
  318. package/dist/cli/commands/retrieve.js.map +1 -1
  319. package/dist/cli/commands/search.d.ts.map +1 -1
  320. package/dist/cli/commands/search.js +1 -0
  321. package/dist/cli/commands/search.js.map +1 -1
  322. package/dist/cli/commands/symbolic.d.ts.map +1 -1
  323. package/dist/cli/commands/symbolic.js +19 -28
  324. package/dist/cli/commands/symbolic.js.map +1 -1
  325. package/dist/cli/commands/testplan.d.ts.map +1 -1
  326. package/dist/cli/commands/testplan.js +4 -2
  327. package/dist/cli/commands/testplan.js.map +1 -1
  328. package/dist/cli/determination.d.ts +1 -0
  329. package/dist/cli/determination.d.ts.map +1 -1
  330. package/dist/cli/determination.js.map +1 -1
  331. package/dist/cli/expr-print.d.ts +0 -2
  332. package/dist/cli/expr-print.d.ts.map +1 -1
  333. package/dist/cli/expr-print.js +7 -31
  334. package/dist/cli/expr-print.js.map +1 -1
  335. package/dist/cli/flag-help.d.ts +1 -0
  336. package/dist/cli/flag-help.d.ts.map +1 -1
  337. package/dist/cli/flag-help.js +1 -0
  338. package/dist/cli/flag-help.js.map +1 -1
  339. package/dist/cli/graphs.d.ts +2 -0
  340. package/dist/cli/graphs.d.ts.map +1 -1
  341. package/dist/cli/graphs.js +1 -0
  342. package/dist/cli/graphs.js.map +1 -1
  343. package/dist/cli/main.d.ts +8 -0
  344. package/dist/cli/main.d.ts.map +1 -1
  345. package/dist/cli/main.js +19 -3
  346. package/dist/cli/main.js.map +1 -1
  347. package/dist/cli/numeric-flag.d.ts +12 -0
  348. package/dist/cli/numeric-flag.d.ts.map +1 -0
  349. package/dist/cli/numeric-flag.js +44 -0
  350. package/dist/cli/numeric-flag.js.map +1 -0
  351. package/dist/cli/output.d.ts +28 -0
  352. package/dist/cli/output.d.ts.map +1 -1
  353. package/dist/cli/output.js +23 -0
  354. package/dist/cli/output.js.map +1 -1
  355. package/dist/cli/record-reach.js +2 -2
  356. package/dist/cli/record-reach.js.map +1 -1
  357. package/dist/cli/record-tables.d.ts.map +1 -1
  358. package/dist/cli/record-tables.js +6 -5
  359. package/dist/cli/record-tables.js.map +1 -1
  360. package/dist/cli/record.d.ts +1 -5
  361. package/dist/cli/record.d.ts.map +1 -1
  362. package/dist/cli/record.js +9 -8
  363. package/dist/cli/record.js.map +1 -1
  364. package/dist/cli/search-index.d.ts.map +1 -1
  365. package/dist/cli/search-index.js +7 -6
  366. package/dist/cli/search-index.js.map +1 -1
  367. package/dist/cli/statuses.d.ts +0 -2
  368. package/dist/cli/statuses.d.ts.map +1 -1
  369. package/dist/cli/statuses.js +12 -9
  370. package/dist/cli/statuses.js.map +1 -1
  371. package/dist/cli/stored-results.d.ts +7 -0
  372. package/dist/cli/stored-results.d.ts.map +1 -0
  373. package/dist/cli/stored-results.js +23 -0
  374. package/dist/cli/stored-results.js.map +1 -0
  375. package/dist/cli/version.d.ts +1 -0
  376. package/dist/cli/version.d.ts.map +1 -1
  377. package/dist/cli/version.js +8 -5
  378. package/dist/cli/version.js.map +1 -1
  379. package/dist/cli-api.d.ts +36 -5
  380. package/dist/cli-api.d.ts.map +1 -1
  381. package/dist/cli-api.js +30 -4
  382. package/dist/cli-api.js.map +1 -1
  383. package/dist/composition/algebraic-equivalence.d.ts +43 -0
  384. package/dist/composition/algebraic-equivalence.d.ts.map +1 -0
  385. package/dist/composition/algebraic-equivalence.js +115 -0
  386. package/dist/composition/algebraic-equivalence.js.map +1 -0
  387. package/dist/composition/axes.d.ts +0 -6
  388. package/dist/composition/axes.d.ts.map +1 -1
  389. package/dist/composition/axes.js +6 -6
  390. package/dist/composition/axes.js.map +1 -1
  391. package/dist/composition/axis-audit.d.ts +47 -20
  392. package/dist/composition/axis-audit.d.ts.map +1 -1
  393. package/dist/composition/axis-audit.js +82 -9
  394. package/dist/composition/axis-audit.js.map +1 -1
  395. package/dist/composition/bridge-analysis.d.ts +17 -0
  396. package/dist/composition/bridge-analysis.d.ts.map +1 -1
  397. package/dist/composition/bridge-analysis.js +102 -55
  398. package/dist/composition/bridge-analysis.js.map +1 -1
  399. package/dist/composition/canonical-compare.d.ts +40 -0
  400. package/dist/composition/canonical-compare.d.ts.map +1 -1
  401. package/dist/composition/canonical-compare.js +122 -24
  402. package/dist/composition/canonical-compare.js.map +1 -1
  403. package/dist/composition/canonical-graph.d.ts +3 -3
  404. package/dist/composition/canonical-graph.d.ts.map +1 -1
  405. package/dist/composition/canonical-graph.js +11 -38
  406. package/dist/composition/canonical-graph.js.map +1 -1
  407. package/dist/composition/canonical-json.js +2 -2
  408. package/dist/composition/canonical-json.js.map +1 -1
  409. package/dist/composition/catalog-graph.d.ts.map +1 -1
  410. package/dist/composition/catalog-graph.js +2 -5
  411. package/dist/composition/catalog-graph.js.map +1 -1
  412. package/dist/composition/chain-candidate.d.ts +8 -0
  413. package/dist/composition/chain-candidate.d.ts.map +1 -1
  414. package/dist/composition/chain-candidate.js +9 -2
  415. package/dist/composition/chain-candidate.js.map +1 -1
  416. package/dist/composition/chain-match.d.ts +6 -3
  417. package/dist/composition/chain-match.d.ts.map +1 -1
  418. package/dist/composition/chain-match.js +4 -1
  419. package/dist/composition/chain-match.js.map +1 -1
  420. package/dist/composition/chain-result.d.ts.map +1 -1
  421. package/dist/composition/chain-result.js +2 -14
  422. package/dist/composition/chain-result.js.map +1 -1
  423. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  424. package/dist/composition/compose-symbolic.js +3 -2
  425. package/dist/composition/compose-symbolic.js.map +1 -1
  426. package/dist/composition/compose.d.ts.map +1 -1
  427. package/dist/composition/compose.js +13 -5
  428. package/dist/composition/compose.js.map +1 -1
  429. package/dist/composition/composition-recovery.d.ts.map +1 -1
  430. package/dist/composition/composition-recovery.js +4 -7
  431. package/dist/composition/composition-recovery.js.map +1 -1
  432. package/dist/composition/consequence.d.ts +15 -5
  433. package/dist/composition/consequence.d.ts.map +1 -1
  434. package/dist/composition/consequence.js +6 -4
  435. package/dist/composition/consequence.js.map +1 -1
  436. package/dist/composition/discovery.d.ts +129 -9
  437. package/dist/composition/discovery.d.ts.map +1 -1
  438. package/dist/composition/discovery.js +171 -67
  439. package/dist/composition/discovery.js.map +1 -1
  440. package/dist/composition/edge.d.ts +21 -2
  441. package/dist/composition/edge.d.ts.map +1 -1
  442. package/dist/composition/edge.js +23 -1
  443. package/dist/composition/edge.js.map +1 -1
  444. package/dist/composition/enumerate.d.ts.map +1 -1
  445. package/dist/composition/enumerate.js +18 -3
  446. package/dist/composition/enumerate.js.map +1 -1
  447. package/dist/composition/evaluate-relation.d.ts +35 -11
  448. package/dist/composition/evaluate-relation.d.ts.map +1 -1
  449. package/dist/composition/evaluate-relation.js +60 -39
  450. package/dist/composition/evaluate-relation.js.map +1 -1
  451. package/dist/composition/explain.d.ts +3 -12
  452. package/dist/composition/explain.d.ts.map +1 -1
  453. package/dist/composition/explain.js +7 -20
  454. package/dist/composition/explain.js.map +1 -1
  455. package/dist/composition/expr-eval.d.ts +1 -1
  456. package/dist/composition/expr-eval.d.ts.map +1 -1
  457. package/dist/composition/expr-eval.js +6 -15
  458. package/dist/composition/expr-eval.js.map +1 -1
  459. package/dist/composition/expr-simplify.d.ts +26 -14
  460. package/dist/composition/expr-simplify.d.ts.map +1 -1
  461. package/dist/composition/expr-simplify.js +64 -72
  462. package/dist/composition/expr-simplify.js.map +1 -1
  463. package/dist/composition/formula-shape.d.ts +23 -4
  464. package/dist/composition/formula-shape.d.ts.map +1 -1
  465. package/dist/composition/formula-shape.js +57 -17
  466. package/dist/composition/formula-shape.js.map +1 -1
  467. package/dist/composition/graph-structure.d.ts +98 -0
  468. package/dist/composition/graph-structure.d.ts.map +1 -0
  469. package/dist/composition/graph-structure.js +167 -0
  470. package/dist/composition/graph-structure.js.map +1 -0
  471. package/dist/composition/graph-viz-svg.d.ts.map +1 -1
  472. package/dist/composition/graph-viz-svg.js +1 -1
  473. package/dist/composition/graph-viz-svg.js.map +1 -1
  474. package/dist/composition/graph-viz.d.ts.map +1 -1
  475. package/dist/composition/graph-viz.js +8 -37
  476. package/dist/composition/graph-viz.js.map +1 -1
  477. package/dist/composition/grounding.d.ts.map +1 -1
  478. package/dist/composition/grounding.js +19 -7
  479. package/dist/composition/grounding.js.map +1 -1
  480. package/dist/composition/identifiability.d.ts +91 -4
  481. package/dist/composition/identifiability.d.ts.map +1 -1
  482. package/dist/composition/identifiability.js +363 -6
  483. package/dist/composition/identifiability.js.map +1 -1
  484. package/dist/composition/index.d.ts +8 -4
  485. package/dist/composition/index.d.ts.map +1 -1
  486. package/dist/composition/index.js +3 -2
  487. package/dist/composition/index.js.map +1 -1
  488. package/dist/composition/mathts-quiet.d.ts +7 -8
  489. package/dist/composition/mathts-quiet.d.ts.map +1 -1
  490. package/dist/composition/mathts-quiet.js +7 -16
  491. package/dist/composition/mathts-quiet.js.map +1 -1
  492. package/dist/composition/mathts-scalar-symbols.d.ts.map +1 -1
  493. package/dist/composition/mathts-scalar-symbols.js +2 -1
  494. package/dist/composition/mathts-scalar-symbols.js.map +1 -1
  495. package/dist/composition/own-equation-magnitude.d.ts +95 -0
  496. package/dist/composition/own-equation-magnitude.d.ts.map +1 -0
  497. package/dist/composition/own-equation-magnitude.js +270 -0
  498. package/dist/composition/own-equation-magnitude.js.map +1 -0
  499. package/dist/composition/probe/backend-protocol.d.ts +3 -0
  500. package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
  501. package/dist/composition/probe/backend-protocol.js.map +1 -1
  502. package/dist/composition/probe/candidate-store.d.ts +1 -0
  503. package/dist/composition/probe/candidate-store.d.ts.map +1 -1
  504. package/dist/composition/probe/candidate-store.js +1 -0
  505. package/dist/composition/probe/candidate-store.js.map +1 -1
  506. package/dist/composition/probe/corpus.d.ts +8 -4
  507. package/dist/composition/probe/corpus.d.ts.map +1 -1
  508. package/dist/composition/probe/corpus.js +23 -12
  509. package/dist/composition/probe/corpus.js.map +1 -1
  510. package/dist/composition/probe/dataset.d.ts +18 -0
  511. package/dist/composition/probe/dataset.d.ts.map +1 -1
  512. package/dist/composition/probe/dataset.js +95 -50
  513. package/dist/composition/probe/dataset.js.map +1 -1
  514. package/dist/composition/probe/experiment-design.d.ts +7 -1
  515. package/dist/composition/probe/experiment-design.d.ts.map +1 -1
  516. package/dist/composition/probe/experiment-design.js +44 -24
  517. package/dist/composition/probe/experiment-design.js.map +1 -1
  518. package/dist/composition/probe/falsify.d.ts +2 -0
  519. package/dist/composition/probe/falsify.d.ts.map +1 -1
  520. package/dist/composition/probe/falsify.js +2 -0
  521. package/dist/composition/probe/falsify.js.map +1 -1
  522. package/dist/composition/probe/fit.d.ts +7 -0
  523. package/dist/composition/probe/fit.d.ts.map +1 -1
  524. package/dist/composition/probe/fit.js +46 -22
  525. package/dist/composition/probe/fit.js.map +1 -1
  526. package/dist/composition/probe/frontier.d.ts.map +1 -1
  527. package/dist/composition/probe/frontier.js +33 -15
  528. package/dist/composition/probe/frontier.js.map +1 -1
  529. package/dist/composition/probe/generator.d.ts +30 -1
  530. package/dist/composition/probe/generator.d.ts.map +1 -1
  531. package/dist/composition/probe/generator.js +58 -36
  532. package/dist/composition/probe/generator.js.map +1 -1
  533. package/dist/composition/probe/index.d.ts +14 -0
  534. package/dist/composition/probe/index.d.ts.map +1 -1
  535. package/dist/composition/probe/index.js +6 -0
  536. package/dist/composition/probe/index.js.map +1 -1
  537. package/dist/composition/probe/limits.d.ts +25 -1
  538. package/dist/composition/probe/limits.d.ts.map +1 -1
  539. package/dist/composition/probe/limits.js +53 -11
  540. package/dist/composition/probe/limits.js.map +1 -1
  541. package/dist/composition/probe/pipeline.d.ts +5 -0
  542. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  543. package/dist/composition/probe/pipeline.js +73 -24
  544. package/dist/composition/probe/pipeline.js.map +1 -1
  545. package/dist/composition/probe/power-law.d.ts +121 -0
  546. package/dist/composition/probe/power-law.d.ts.map +1 -0
  547. package/dist/composition/probe/power-law.js +251 -0
  548. package/dist/composition/probe/power-law.js.map +1 -0
  549. package/dist/composition/probe/problem.d.ts +8 -4
  550. package/dist/composition/probe/problem.d.ts.map +1 -1
  551. package/dist/composition/probe/problem.js +177 -49
  552. package/dist/composition/probe/problem.js.map +1 -1
  553. package/dist/composition/probe/report.js +1 -1
  554. package/dist/composition/probe/report.js.map +1 -1
  555. package/dist/composition/probe/residual.d.ts +7 -1
  556. package/dist/composition/probe/residual.d.ts.map +1 -1
  557. package/dist/composition/probe/residual.js +10 -7
  558. package/dist/composition/probe/residual.js.map +1 -1
  559. package/dist/composition/probe/run-manifest.d.ts +1 -0
  560. package/dist/composition/probe/run-manifest.d.ts.map +1 -1
  561. package/dist/composition/probe/run-manifest.js.map +1 -1
  562. package/dist/composition/probe/scalar-search.d.ts +50 -0
  563. package/dist/composition/probe/scalar-search.d.ts.map +1 -0
  564. package/dist/composition/probe/scalar-search.js +169 -0
  565. package/dist/composition/probe/scalar-search.js.map +1 -0
  566. package/dist/composition/probe/scoring.d.ts +1 -0
  567. package/dist/composition/probe/scoring.d.ts.map +1 -1
  568. package/dist/composition/probe/scoring.js.map +1 -1
  569. package/dist/composition/probe/structure.d.ts +82 -17
  570. package/dist/composition/probe/structure.d.ts.map +1 -1
  571. package/dist/composition/probe/structure.js +129 -55
  572. package/dist/composition/probe/structure.js.map +1 -1
  573. package/dist/composition/probe/study.d.ts +31 -9
  574. package/dist/composition/probe/study.d.ts.map +1 -1
  575. package/dist/composition/probe/study.js +235 -184
  576. package/dist/composition/probe/study.js.map +1 -1
  577. package/dist/composition/probe/t-tail.d.ts +16 -0
  578. package/dist/composition/probe/t-tail.d.ts.map +1 -0
  579. package/dist/composition/probe/t-tail.js +29 -0
  580. package/dist/composition/probe/t-tail.js.map +1 -0
  581. package/dist/composition/probe/types.d.ts +3 -0
  582. package/dist/composition/probe/types.d.ts.map +1 -1
  583. package/dist/composition/probe/types.js.map +1 -1
  584. package/dist/composition/proposed-bridges.d.ts +52 -12
  585. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  586. package/dist/composition/proposed-bridges.js +107 -60
  587. package/dist/composition/proposed-bridges.js.map +1 -1
  588. package/dist/composition/quantity-clusters.d.ts +48 -0
  589. package/dist/composition/quantity-clusters.d.ts.map +1 -0
  590. package/dist/composition/quantity-clusters.js +98 -0
  591. package/dist/composition/quantity-clusters.js.map +1 -0
  592. package/dist/composition/rational-exponent.d.ts +40 -0
  593. package/dist/composition/rational-exponent.d.ts.map +1 -0
  594. package/dist/composition/rational-exponent.js +65 -0
  595. package/dist/composition/rational-exponent.js.map +1 -0
  596. package/dist/composition/representative-values.d.ts +22 -0
  597. package/dist/composition/representative-values.d.ts.map +1 -1
  598. package/dist/composition/representative-values.js +29 -0
  599. package/dist/composition/representative-values.js.map +1 -1
  600. package/dist/composition/retrodiction.d.ts +15 -0
  601. package/dist/composition/retrodiction.d.ts.map +1 -1
  602. package/dist/composition/retrodiction.js +12 -4
  603. package/dist/composition/retrodiction.js.map +1 -1
  604. package/dist/composition/user-equation.d.ts +1 -0
  605. package/dist/composition/user-equation.d.ts.map +1 -1
  606. package/dist/composition/user-equation.js +3 -2
  607. package/dist/composition/user-equation.js.map +1 -1
  608. package/dist/core/assignment.d.ts +19 -0
  609. package/dist/core/assignment.d.ts.map +1 -0
  610. package/dist/core/assignment.js +19 -0
  611. package/dist/core/assignment.js.map +1 -0
  612. package/dist/core/compare.d.ts +32 -0
  613. package/dist/core/compare.d.ts.map +1 -0
  614. package/dist/core/compare.js +46 -0
  615. package/dist/core/compare.js.map +1 -0
  616. package/dist/core/constants.d.ts +42 -41
  617. package/dist/core/constants.d.ts.map +1 -1
  618. package/dist/core/constants.js +71 -51
  619. package/dist/core/constants.js.map +1 -1
  620. package/dist/core/data-file.d.ts +7 -0
  621. package/dist/core/data-file.d.ts.map +1 -1
  622. package/dist/core/data-file.js +17 -0
  623. package/dist/core/data-file.js.map +1 -1
  624. package/dist/core/format.d.ts +36 -0
  625. package/dist/core/format.d.ts.map +1 -0
  626. package/dist/core/format.js +39 -0
  627. package/dist/core/format.js.map +1 -0
  628. package/dist/core/hash.d.ts +14 -0
  629. package/dist/core/hash.d.ts.map +1 -0
  630. package/dist/core/hash.js +17 -0
  631. package/dist/core/hash.js.map +1 -0
  632. package/dist/core/json-schema.d.ts +2 -0
  633. package/dist/core/json-schema.d.ts.map +1 -1
  634. package/dist/core/json-schema.js +14 -13
  635. package/dist/core/json-schema.js.map +1 -1
  636. package/dist/core/labeled-tensor.d.ts.map +1 -1
  637. package/dist/core/labeled-tensor.js +0 -8
  638. package/dist/core/labeled-tensor.js.map +1 -1
  639. package/dist/core/mathts-read.d.ts +25 -0
  640. package/dist/core/mathts-read.d.ts.map +1 -0
  641. package/dist/core/mathts-read.js +51 -0
  642. package/dist/core/mathts-read.js.map +1 -0
  643. package/dist/core/tensor.d.ts.map +1 -1
  644. package/dist/core/tensor.js +24 -0
  645. package/dist/core/tensor.js.map +1 -1
  646. package/dist/core/types.d.ts +5 -5
  647. package/dist/diff/bridge-ast-gradient.d.ts +27 -23
  648. package/dist/diff/bridge-ast-gradient.d.ts.map +1 -1
  649. package/dist/diff/bridge-ast-gradient.js +75 -173
  650. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  651. package/dist/diff/bridge-gradient.d.ts +19 -6
  652. package/dist/diff/bridge-gradient.d.ts.map +1 -1
  653. package/dist/diff/bridge-gradient.js +19 -11
  654. package/dist/diff/bridge-gradient.js.map +1 -1
  655. package/dist/diff/bridge-specs.d.ts.map +1 -1
  656. package/dist/diff/bridge-specs.js +3 -0
  657. package/dist/diff/bridge-specs.js.map +1 -1
  658. package/dist/dimensional/algebra.d.ts +18 -0
  659. package/dist/dimensional/algebra.d.ts.map +1 -1
  660. package/dist/dimensional/algebra.js +41 -1
  661. package/dist/dimensional/algebra.js.map +1 -1
  662. package/dist/dimensional/ast-builders.d.ts +7 -0
  663. package/dist/dimensional/ast-builders.d.ts.map +1 -1
  664. package/dist/dimensional/ast-builders.js +11 -0
  665. package/dist/dimensional/ast-builders.js.map +1 -1
  666. package/dist/dimensional/ast-leaves.d.ts +81 -0
  667. package/dist/dimensional/ast-leaves.d.ts.map +1 -0
  668. package/dist/dimensional/ast-leaves.js +146 -0
  669. package/dist/dimensional/ast-leaves.js.map +1 -0
  670. package/dist/dimensional/ast-types.d.ts +15 -0
  671. package/dist/dimensional/ast-types.d.ts.map +1 -1
  672. package/dist/dimensional/ast-types.js.map +1 -1
  673. package/dist/dimensional/buckingham.d.ts.map +1 -1
  674. package/dist/dimensional/buckingham.js +15 -27
  675. package/dist/dimensional/buckingham.js.map +1 -1
  676. package/dist/dimensional/constant-rows.js +9 -9
  677. package/dist/dimensional/constant-rows.js.map +1 -1
  678. package/dist/dimensional/curvature-composite.d.ts +1 -1
  679. package/dist/dimensional/curvature-composite.js.map +1 -1
  680. package/dist/dimensional/dimension-inference.d.ts.map +1 -1
  681. package/dist/dimensional/dimension-inference.js +1 -2
  682. package/dist/dimensional/dimension-inference.js.map +1 -1
  683. package/dist/dimensional/errors.d.ts +1 -1
  684. package/dist/dimensional/errors.d.ts.map +1 -1
  685. package/dist/dimensional/errors.js +1 -15
  686. package/dist/dimensional/errors.js.map +1 -1
  687. package/dist/dimensional/exact-scale.d.ts +24 -11
  688. package/dist/dimensional/exact-scale.d.ts.map +1 -1
  689. package/dist/dimensional/exact-scale.js +122 -130
  690. package/dist/dimensional/exact-scale.js.map +1 -1
  691. package/dist/dimensional/gauge-field.d.ts.map +1 -1
  692. package/dist/dimensional/gauge-field.js +2 -2
  693. package/dist/dimensional/gauge-field.js.map +1 -1
  694. package/dist/dimensional/hyphen-names.d.ts +12 -2
  695. package/dist/dimensional/hyphen-names.d.ts.map +1 -1
  696. package/dist/dimensional/hyphen-names.js +44 -19
  697. package/dist/dimensional/hyphen-names.js.map +1 -1
  698. package/dist/dimensional/mathts-unit-delegation.d.ts +29 -0
  699. package/dist/dimensional/mathts-unit-delegation.d.ts.map +1 -0
  700. package/dist/dimensional/mathts-unit-delegation.js +187 -0
  701. package/dist/dimensional/mathts-unit-delegation.js.map +1 -0
  702. package/dist/dimensional/mathts-unit-wrapper.d.ts +33 -0
  703. package/dist/dimensional/mathts-unit-wrapper.d.ts.map +1 -0
  704. package/dist/dimensional/mathts-unit-wrapper.js +190 -0
  705. package/dist/dimensional/mathts-unit-wrapper.js.map +1 -0
  706. package/dist/dimensional/metric.d.ts.map +1 -1
  707. package/dist/dimensional/metric.js +0 -1
  708. package/dist/dimensional/metric.js.map +1 -1
  709. package/dist/dimensional/scalar-lowering.d.ts +21 -0
  710. package/dist/dimensional/scalar-lowering.d.ts.map +1 -0
  711. package/dist/dimensional/scalar-lowering.js +45 -0
  712. package/dist/dimensional/scalar-lowering.js.map +1 -0
  713. package/dist/dimensional/symbolic-constants.d.ts +9 -0
  714. package/dist/dimensional/symbolic-constants.d.ts.map +1 -1
  715. package/dist/dimensional/symbolic-constants.js +13 -1
  716. package/dist/dimensional/symbolic-constants.js.map +1 -1
  717. package/dist/dimensional/types.d.ts +36 -0
  718. package/dist/dimensional/types.d.ts.map +1 -1
  719. package/dist/dimensional/types.js +45 -7
  720. package/dist/dimensional/types.js.map +1 -1
  721. package/dist/dimensional/unit-data.d.ts +5 -1
  722. package/dist/dimensional/unit-data.d.ts.map +1 -1
  723. package/dist/dimensional/unit-data.js +30 -6
  724. package/dist/dimensional/unit-data.js.map +1 -1
  725. package/dist/dimensional/units.d.ts +2 -0
  726. package/dist/dimensional/units.d.ts.map +1 -1
  727. package/dist/dimensional/units.js +59 -3
  728. package/dist/dimensional/units.js.map +1 -1
  729. package/dist/dimensional/validator.d.ts +2 -0
  730. package/dist/dimensional/validator.d.ts.map +1 -1
  731. package/dist/dimensional/validator.js.map +1 -1
  732. package/dist/index.d.ts +9 -3
  733. package/dist/index.d.ts.map +1 -1
  734. package/dist/index.js +10 -4
  735. package/dist/index.js.map +1 -1
  736. package/dist/numerical/christoffel-flat.d.ts.map +1 -1
  737. package/dist/numerical/christoffel-flat.js +3 -2
  738. package/dist/numerical/christoffel-flat.js.map +1 -1
  739. package/dist/numerical/connection-lowering-helpers.d.ts +3 -1
  740. package/dist/numerical/connection-lowering-helpers.d.ts.map +1 -1
  741. package/dist/numerical/connection-lowering-helpers.js +11 -15
  742. package/dist/numerical/connection-lowering-helpers.js.map +1 -1
  743. package/dist/numerical/covariant-eikonal.d.ts.map +1 -1
  744. package/dist/numerical/covariant-eikonal.js +34 -11
  745. package/dist/numerical/covariant-eikonal.js.map +1 -1
  746. package/dist/numerical/curvature-lowering-helpers.js +3 -2
  747. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  748. package/dist/numerical/errors.d.ts.map +1 -1
  749. package/dist/numerical/errors.js +0 -3
  750. package/dist/numerical/errors.js.map +1 -1
  751. package/dist/numerical/finite-difference.d.ts +22 -0
  752. package/dist/numerical/finite-difference.d.ts.map +1 -0
  753. package/dist/numerical/finite-difference.js +27 -0
  754. package/dist/numerical/finite-difference.js.map +1 -0
  755. package/dist/numerical/geodesic-integrator.d.ts.map +1 -1
  756. package/dist/numerical/geodesic-integrator.js +22 -14
  757. package/dist/numerical/geodesic-integrator.js.map +1 -1
  758. package/dist/numerical/geometrized.d.ts.map +1 -1
  759. package/dist/numerical/geometrized.js +0 -1
  760. package/dist/numerical/geometrized.js.map +1 -1
  761. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  762. package/dist/numerical/mathts-engine.js +10 -24
  763. package/dist/numerical/mathts-engine.js.map +1 -1
  764. package/dist/numerical/metric-inverse.d.ts.map +1 -1
  765. package/dist/numerical/metric-inverse.js +83 -46
  766. package/dist/numerical/metric-inverse.js.map +1 -1
  767. package/dist/numerical/null-ray-integrator.d.ts +2 -1
  768. package/dist/numerical/null-ray-integrator.d.ts.map +1 -1
  769. package/dist/numerical/null-ray-integrator.js +12 -12
  770. package/dist/numerical/null-ray-integrator.js.map +1 -1
  771. package/dist/numerical/painleve-gullstrand-metric.js +2 -2
  772. package/dist/numerical/painleve-gullstrand-metric.js.map +1 -1
  773. package/dist/numerical/pderiv.d.ts.map +1 -1
  774. package/dist/numerical/pderiv.js +2 -6
  775. package/dist/numerical/pderiv.js.map +1 -1
  776. package/dist/numerical/perihelion-finder.d.ts +0 -36
  777. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  778. package/dist/numerical/perihelion-finder.js +41 -87
  779. package/dist/numerical/perihelion-finder.js.map +1 -1
  780. package/dist/numerical/quadrature.d.ts.map +1 -1
  781. package/dist/numerical/quadrature.js +11 -13
  782. package/dist/numerical/quadrature.js.map +1 -1
  783. package/dist/numerical/rk4-trajectory.d.ts +10 -0
  784. package/dist/numerical/rk4-trajectory.d.ts.map +1 -0
  785. package/dist/numerical/rk4-trajectory.js +37 -0
  786. package/dist/numerical/rk4-trajectory.js.map +1 -0
  787. package/dist/numerical/schwarzschild.d.ts +14 -0
  788. package/dist/numerical/schwarzschild.d.ts.map +1 -0
  789. package/dist/numerical/schwarzschild.js +17 -0
  790. package/dist/numerical/schwarzschild.js.map +1 -0
  791. package/dist/numerical/spacetime-metrics.d.ts +12 -0
  792. package/dist/numerical/spacetime-metrics.d.ts.map +1 -1
  793. package/dist/numerical/spacetime-metrics.js +72 -56
  794. package/dist/numerical/spacetime-metrics.js.map +1 -1
  795. package/dist/numerical/statistics.d.ts +24 -0
  796. package/dist/numerical/statistics.d.ts.map +1 -0
  797. package/dist/numerical/statistics.js +52 -0
  798. package/dist/numerical/statistics.js.map +1 -0
  799. package/dist/numerical/strides.d.ts +3 -2
  800. package/dist/numerical/strides.d.ts.map +1 -1
  801. package/dist/numerical/strides.js +3 -10
  802. package/dist/numerical/strides.js.map +1 -1
  803. package/dist/numerical/tensor-engine.d.ts +21 -0
  804. package/dist/numerical/tensor-engine.d.ts.map +1 -1
  805. package/dist/numerical/tensor-engine.js +12 -0
  806. package/dist/numerical/tensor-engine.js.map +1 -1
  807. package/dist/relations/regime.d.ts +10 -0
  808. package/dist/relations/regime.d.ts.map +1 -1
  809. package/dist/relations/regime.js +18 -1
  810. package/dist/relations/regime.js.map +1 -1
  811. package/package.json +9 -12
  812. package/dist/cases/brownian-sphere.d.ts +0 -68
  813. package/dist/cases/brownian-sphere.d.ts.map +0 -1
  814. package/dist/cases/brownian-sphere.js +0 -354
  815. package/dist/cases/brownian-sphere.js.map +0 -1
  816. package/dist/cases/damped-resonator.d.ts +0 -23
  817. package/dist/cases/damped-resonator.d.ts.map +0 -1
  818. package/dist/cases/damped-resonator.js +0 -224
  819. package/dist/cases/damped-resonator.js.map +0 -1
  820. package/dist/cases/kepler-rv.d.ts +0 -13
  821. package/dist/cases/kepler-rv.d.ts.map +0 -1
  822. package/dist/cases/kepler-rv.js +0 -172
  823. package/dist/cases/kepler-rv.js.map +0 -1
  824. package/dist/cases/lumped-cooling.d.ts +0 -46
  825. package/dist/cases/lumped-cooling.d.ts.map +0 -1
  826. package/dist/cases/lumped-cooling.js +0 -261
  827. package/dist/cases/lumped-cooling.js.map +0 -1
  828. package/dist/cases/resistor-noise.d.ts +0 -14
  829. package/dist/cases/resistor-noise.d.ts.map +0 -1
  830. package/dist/cases/resistor-noise.js +0 -215
  831. package/dist/cases/resistor-noise.js.map +0 -1
  832. package/dist/cases/skin-depth.d.ts +0 -21
  833. package/dist/cases/skin-depth.d.ts.map +0 -1
  834. package/dist/cases/skin-depth.js +0 -174
  835. package/dist/cases/skin-depth.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"own-equation-magnitude.js","sourceRoot":"","sources":["../../src/composition/own-equation-magnitude.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * A magnitude for a quantity from its own equation, for the discovery magnitude gate.\n *\n * The gate (`discovery.ts`, `magnitudeGate`) reads a quantity's magnitude from the sourced\n * representative-value table, else from the value the graph fixes with no anchor input (the\n * target of a source-less equation), else from the anchor. A quantity none of those reach (the\n * Hubble distance, c/H0, whose input the table states but the anchor does not reach) made the gate\n * abstain. This module evaluates such a quantity from an edge into it whose every source is\n * valued: a table value, a registered constant, a no-anchor constant, or a value this module\n * already derived, iterated to a fixed point. It is seeded from the table and the constants only,\n * never from the anchor, so a derived magnitude is not anchor-derived.\n *\n * Three guards, each a refusal the caller sees (`DerivedMagnitudes.refusals`):\n * - precision: a derived value carries σ in decades of log10|value|, propagated from its inputs\n * through the edge's log-elasticities, σ = √(Σ (∂log f/∂log xᵢ)² σᵢ²) (σᵢ is the table row's\n * σ, 0 for a constant, the derived σ for a derived input). The gate uses a value only when σ is\n * at most {@link DEFAULT_SIGMA_DECADES}, the table's own \"good to about one order\". The FRET\n * efficiency from two 5 nm order-of-magnitude scales is exactly 0.5 and carries 3√2 decades: a\n * number with no magnitude information, which this guard refuses.\n * - agreement: two edges that derive one quantity and differ by more than a relative\n * {@link DERIVED_AGREEMENT} give it no value; no edge wins by its place in the list.\n * - the edge's own evaluation (`evaluateEdge`): a domain refusal, an unset coefficient or a\n * non-finite or zero result gives no value.\n *\n * Seeds are SI (the table's unit) and are converted into each quantity's evaluator convention\n * (`conventionScaleToSI`; `planck-mass-energy` and `vacuum-expectation-value` speak GeV), and every\n * result is converted back to SI.\n *\n * INTERNAL — read by `discovery.ts`; surfaced through `upt discover` and `upt ground`.\n *\n * @module composition/own-equation-magnitude\n */\n\nimport type { BridgeEdge } from './edge.js';\nimport { evaluateEdge } from './edge.js';\nimport type { QuantityIdentification } from './compose.js';\nimport { evaluationInputs, refusesThePoint } from './retrodiction.js';\nimport { DEFAULT_SIGMA_DECADES, sigmaDecadesOf } from './representative-values.js';\nimport type { RepresentativeValue } from './representative-values.js';\nimport { conventionFactor, conventionScaleToSI } from '../dimensional/unit-convention.js';\nimport { CONSTANT_REGISTRY } from '../dimensional/symbolic-constants.js';\nimport { centralPartial } from '../numerical/finite-difference.js';\nimport { byKey, compareCodepoint } from '../core/compare.js';\nimport { formatQuantity } from '../core/format.js';\n\n/**\n * Relative difference above which two edges deriving one quantity disagree. Two encodings of one\n * equation agree to rounding; a factor that differs (2 against 1) is far above it.\n * @internal\n */\nexport const DERIVED_AGREEMENT = 1e-9;\n\n/**\n * The half-step, in decades of an input, of the central difference that measures a\n * log-elasticity. A power law's elasticity is exact at any step; for another form the truncation\n * error is of order the step squared.\n */\nconst ELASTICITY_STEP_DECADES = 1e-3;\n\n/**\n * Decades by which a propagated σ may exceed the guard and still pass: room for the central\n * difference's rounding, so a power law of elasticity 1 on a one-decade input is not refused for a\n * last-bit excess (the Hubble distance's σ measures exactly 1). Far below any σ the guard refuses.\n */\nconst SIGMA_GUARD_SLACK = 1e-9;\n\n/** A magnitude derived from a quantity's own equation. @internal */\nexport interface DerivedMagnitude {\n /** The value in SI (the table's unit), converted back from the evaluator's convention. */\n readonly value: number;\n /** σ in decades of log10|value|, propagated through the edge's log-elasticities. */\n readonly sigmaDecades: number;\n /** The edge that produced it (`identification:<from>` for a registered identification's copy). */\n readonly edge: string;\n /** The names the edge read, sorted. */\n readonly inputs: readonly string[];\n}\n\n/** Why a quantity reached by an equation has no derived magnitude. @internal */\nexport interface DerivedMagnitudeRefusal {\n readonly name: string;\n /**\n * `imprecise`: the propagated σ is above the guard. `disagreeing-edges`: two edges that derive it\n * differ by more than {@link DERIVED_AGREEMENT}. `precision-unknown`: the edge fired at the point\n * but not at the points the elasticity reads, so σ could not be measured.\n */\n readonly reason: 'imprecise' | 'disagreeing-edges' | 'precision-unknown';\n /** The edges involved, sorted. */\n readonly edges: readonly string[];\n /** The propagated σ, for `imprecise`. */\n readonly sigmaDecades?: number;\n /** One sentence for a reader. */\n readonly detail: string;\n}\n\n/** The magnitudes the graph derives from the table and the constants, and the refusals. @internal */\nexport interface DerivedMagnitudes {\n /** Derived magnitudes the gate may use (σ within the guard), by quantity name. */\n readonly values: ReadonlyMap<string, DerivedMagnitude>;\n /** Every quantity an equation reached that has no usable derived magnitude, sorted by name. */\n readonly refusals: readonly DerivedMagnitudeRefusal[];\n}\n\n/** A known value in the evaluator's convention, with its σ in decades. */\ninterface Known {\n readonly value: number;\n readonly sigmaDecades: number;\n}\n\n/** One edge (or identification) that fired for a target. */\ninterface Firing {\n readonly edge: string;\n readonly value: number;\n /** Undefined when the elasticity could not be measured. */\n readonly sigmaDecades: number | undefined;\n readonly inputs: readonly string[];\n}\n\n/** What the caller supplies: the sourced table and the no-anchor constants. @internal */\nexport interface OwnEquationSeeds {\n /** The sourced representative values, in SI. */\n readonly representativeValues: Readonly<Record<string, RepresentativeValue>>;\n /** The values the graph fixes with no anchor input, in the evaluator's convention (`forwardEvaluate(edges, {}, …)`). */\n readonly constantValues: ReadonlyMap<string, number>;\n /** Identifications honoured as copies, as `forwardEvaluate` honours them. */\n readonly identifications: readonly QuantityIdentification[];\n}\n\n/** The seeds: the table (SI → evaluator unit), then a registered constant that is a graph quantity, then a no-anchor constant. */\nfunction seedsOf(edges: readonly BridgeEdge[], seeds: OwnEquationSeeds): Map<string, Known> {\n const known = new Map<string, Known>();\n for (const [name, rv] of Object.entries(seeds.representativeValues)) {\n if (!(Number.isFinite(rv.value) && rv.value !== 0)) continue;\n known.set(name, { value: rv.value / conventionScaleToSI(name), sigmaDecades: sigmaDecadesOf(rv) });\n }\n const names = new Set(edges.flatMap((e) => [e.target.name, ...e.sources.map((s) => s.name)]));\n for (const record of CONSTANT_REGISTRY) {\n const name = record.quantity;\n if (name === undefined || !names.has(name) || known.has(name)) continue;\n known.set(name, { value: record.value / conventionScaleToSI(name), sigmaDecades: 0 });\n }\n for (const [name, value] of seeds.constantValues) {\n if (known.has(name) || !(Number.isFinite(value) && value !== 0)) continue;\n known.set(name, { value, sigmaDecades: 0 });\n }\n return known;\n}\n\n/** log10|f| as a function of log10|x_key|, the other inputs held. NaN when the edge refuses. */\nfunction logResponse(edge: BridgeEdge, inputs: Readonly<Record<string, number>>, key: string): (point: Record<string, number>) => number {\n const sign = Math.sign(inputs[key]!);\n return (point) => {\n try {\n return Math.log10(Math.abs(evaluateEdge(edge, { ...inputs, [key]: sign * 10 ** point['u']! })));\n } catch (err) {\n if (!refusesThePoint(err)) throw err;\n return Number.NaN;\n }\n };\n}\n\n/** σ of an edge's value from its inputs' σ, through the log-elasticities; undefined when one is not finite. */\nfunction propagatedSigma(edge: BridgeEdge, inputs: Readonly<Record<string, number>>, known: ReadonlyMap<string, Known>): number | undefined {\n let sum = 0;\n for (const key of Object.keys(inputs).sort(compareCodepoint)) {\n const sigma = known.get(key)?.sigmaDecades ?? 0;\n if (sigma === 0) continue;\n const x = inputs[key]!;\n if (!(Number.isFinite(x) && x !== 0)) return undefined;\n const elasticity = centralPartial(logResponse(edge, inputs, key), { u: Math.log10(Math.abs(x)) }, 'u', ELASTICITY_STEP_DECADES);\n if (!Number.isFinite(elasticity)) return undefined;\n sum += elasticity * elasticity * sigma * sigma;\n }\n return Math.sqrt(sum);\n}\n\n/** Every edge and identification that fires for an unvalued, unblocked target, from `known` as it stands. */\nfunction firings(\n edges: readonly BridgeEdge[],\n idents: readonly QuantityIdentification[],\n known: ReadonlyMap<string, Known>,\n skip: (name: string) => boolean,\n): Map<string, Firing[]> {\n const out = new Map<string, Firing[]>();\n const push = (target: string, f: Firing): void => {\n const list = out.get(target);\n if (list === undefined) out.set(target, [f]);\n else list.push(f);\n };\n for (const id of idents) {\n const from = known.get(id.from);\n if (from === undefined || skip(id.to)) continue;\n const value = from.value * conventionFactor(id.from, id.to);\n if (Number.isFinite(value) && value !== 0) {\n push(id.to, { edge: `identification:${id.from}`, value, sigmaDecades: from.sigmaDecades, inputs: [id.from] });\n }\n }\n const values = new Map([...known].map(([name, k]) => [name, k.value]));\n for (const e of edges) {\n if (skip(e.target.name)) continue;\n if (!e.sources.every((s) => known.has(s.name))) continue;\n const inputs = evaluationInputs(e, values);\n let value: number;\n try {\n value = evaluateEdge(e, inputs);\n } catch (err) {\n if (!refusesThePoint(err)) throw err;\n continue;\n }\n if (!(Number.isFinite(value) && value !== 0)) continue;\n push(e.target.name, { edge: e.id, value, sigmaDecades: propagatedSigma(e, inputs, known), inputs: Object.keys(inputs).sort(compareCodepoint) });\n }\n return out;\n}\n\n/** The firings sorted by edge id; and whether any two differ by more than {@link DERIVED_AGREEMENT}. */\nfunction agreement(list: readonly Firing[]): { sorted: Firing[]; agree: boolean } {\n const sorted = [...list].sort(byKey((f) => f.edge));\n const agree = sorted.every(\n (f) => Math.abs(f.value - sorted[0]!.value) <= DERIVED_AGREEMENT * Math.max(Math.abs(f.value), Math.abs(sorted[0]!.value)),\n );\n return { sorted, agree };\n}\n\n/**\n * The magnitudes `edges` derive from the sourced table and the constants, with the refusals. A\n * quantity the table or a constant states is a seed and is never derived. Each round fires every\n * edge from the values of the round before, so the edge list's order decides nothing; a quantity\n * that two edges value differently is withdrawn with everything derived from it, and the fixed\n * point is recomputed without it. A value is assigned from the first of its agreeing edges by id.\n *\n * @internal\n */\nexport function deriveOwnEquationMagnitudes(\n edges: readonly BridgeEdge[],\n seeds: OwnEquationSeeds,\n maxSigmaDecades: number = DEFAULT_SIGMA_DECADES,\n): DerivedMagnitudes {\n const seeded = seedsOf(edges, seeds);\n const disagreeing = new Map<string, DerivedMagnitudeRefusal>();\n for (;;) {\n const unmeasured = new Map<string, DerivedMagnitudeRefusal>();\n const known = new Map(seeded);\n const derived = new Map<string, Firing>();\n const skip = (name: string): boolean => known.has(name) || disagreeing.has(name) || unmeasured.has(name);\n for (;;) {\n const round = firings(edges, seeds.identifications, known, skip);\n if (round.size === 0) break;\n for (const target of [...round.keys()].sort(compareCodepoint)) {\n const { sorted, agree } = agreement(round.get(target)!);\n const edgeIds = sorted.map((f) => f.edge);\n if (!agree) {\n disagreeing.set(target, disagreement(target, sorted));\n continue;\n }\n const chosen = sorted[0]!;\n if (chosen.sigmaDecades === undefined) {\n unmeasured.set(target, {\n name: target,\n reason: 'precision-unknown',\n edges: edgeIds,\n detail: `${chosen.edge} fires at the point but not at the points its log-elasticity reads, so σ was not measured`,\n });\n continue;\n }\n derived.set(target, chosen);\n known.set(target, { value: chosen.value, sigmaDecades: chosen.sigmaDecades });\n }\n }\n // An edge whose sources were valued only after its target was: it must agree with that value.\n const late: string[] = [];\n const values = new Map([...known].map(([name, k]) => [name, k.value]));\n for (const [target, chosen] of derived) {\n const all: Firing[] = [chosen];\n for (const e of edges) {\n if (e.target.name !== target || e.id === chosen.edge) continue;\n if (!e.sources.every((s) => known.has(s.name))) continue;\n try {\n const value = evaluateEdge(e, evaluationInputs(e, values));\n if (Number.isFinite(value) && value !== 0) all.push({ edge: e.id, value, sigmaDecades: undefined, inputs: [] });\n } catch (err) {\n if (!refusesThePoint(err)) throw err;\n }\n }\n for (const id of seeds.identifications) {\n if (id.to !== target || `identification:${id.from}` === chosen.edge) continue;\n const from = known.get(id.from);\n if (from === undefined) continue;\n const value = from.value * conventionFactor(id.from, id.to);\n if (Number.isFinite(value) && value !== 0) all.push({ edge: `identification:${id.from}`, value, sigmaDecades: undefined, inputs: [] });\n }\n const { sorted, agree } = agreement(all);\n if (!agree) {\n disagreeing.set(target, disagreement(target, sorted));\n late.push(target);\n }\n }\n if (late.length > 0) continue;\n const usable = new Map<string, DerivedMagnitude>();\n const refusals: DerivedMagnitudeRefusal[] = [...disagreeing.values(), ...unmeasured.values()];\n for (const [name, f] of derived) {\n const sigma = f.sigmaDecades!;\n if (sigma > maxSigmaDecades + SIGMA_GUARD_SLACK) {\n refusals.push({\n name,\n reason: 'imprecise',\n edges: [f.edge],\n sigmaDecades: sigma,\n detail:\n `${f.edge} gives ${name} from ${f.inputs.join(', ')} at σ = ${formatQuantity(sigma, 3)} decades, ` +\n `above the ${maxSigmaDecades}-decade precision the gate requires`,\n });\n continue;\n }\n usable.set(name, { value: f.value * conventionScaleToSI(name), sigmaDecades: sigma, edge: f.edge, inputs: f.inputs });\n }\n refusals.sort(byKey((r) => r.name));\n return { values: usable, refusals };\n }\n}\n\n/** The refusal record of two or more edges that value one quantity differently. */\nfunction disagreement(name: string, sorted: readonly Firing[]): DerivedMagnitudeRefusal {\n return {\n name,\n reason: 'disagreeing-edges',\n edges: sorted.map((f) => f.edge),\n detail:\n `${sorted.map((f) => `${f.edge} gives ${formatQuantity(f.value, 4)}`).join(', ')}: ` +\n `they differ by more than a relative ${DERIVED_AGREEMENT}, so no edge is taken`,\n };\n}\n"]}
@@ -7,17 +7,20 @@
7
7
  * @internal
8
8
  */
9
9
  import type { ExprNode } from '../../dimensional/ast-types.js';
10
+ /** One request line that the search sends to an expression-search backend worker. */
10
11
  export interface BackendRequest {
11
12
  readonly problemId: string;
12
13
  readonly budgetMs: number;
13
14
  readonly variables: readonly string[];
14
15
  readonly target: string;
15
16
  }
17
+ /** One candidate expression that an expression-search backend worker returns. */
16
18
  export interface BackendCandidate {
17
19
  readonly expression: ExprNode;
18
20
  readonly prefactor?: number;
19
21
  readonly note?: string;
20
22
  }
23
+ /** The parsed reply of a backend worker: its candidates, or an error. */
21
24
  export interface BackendResponse {
22
25
  readonly ok: boolean;
23
26
  readonly candidates: readonly BackendCandidate[];
@@ -1 +1 @@
1
- {"version":3,"file":"backend-protocol.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/backend-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAwBD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,GAAG,IAAI,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACzE,QAAQ,CAAC,MAAM,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9F,QAAQ,CAAC,MAAM,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9F,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC;IAC5D,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC;IAC5F,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;CAClC;AAED,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,KAC7E,aAAa,CAAC;AAEnB;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,cAAc,CAAA;CAAO,GACtE,OAAO,CAAC,eAAe,CAAC,CAsD1B"}
1
+ {"version":3,"file":"backend-protocol.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/backend-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAwBD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,GAAG,IAAI,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACzE,QAAQ,CAAC,MAAM,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9F,QAAQ,CAAC,MAAM,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9F,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC;IAC5D,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC;IAC5F,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;CAClC;AAED,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,KAC7E,aAAa,CAAC;AAEnB;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,cAAc,CAAA;CAAO,GACtE,OAAO,CAAC,eAAe,CAAC,CAsD1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"backend-protocol.js","sourceRoot":"","sources":["../../../src/composition/probe/backend-protocol.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Optional NDJSON worker protocol for expression-search backends.\n *\n * Spawn with an **argv array** (no shell). Timeout + kill. Schema-validate\n * output. **No vendored Python** — CI uses `tests/fixtures/discovery-workers/echo-worker.mjs`.\n *\n * @internal\n */\n\nimport { spawn } from 'node:child_process';\nimport type { ExprNode } from '../../dimensional/ast-types.js';\n\nexport interface BackendRequest {\n readonly problemId: string;\n readonly budgetMs: number;\n readonly variables: readonly string[];\n readonly target: string;\n}\n\nexport interface BackendCandidate {\n readonly expression: ExprNode;\n readonly prefactor?: number;\n readonly note?: string;\n}\n\nexport interface BackendResponse {\n readonly ok: boolean;\n readonly candidates: readonly BackendCandidate[];\n readonly error?: string;\n}\n\nfunction isExprNode(value: unknown): value is ExprNode {\n if (!value || typeof value !== 'object') return false;\n const kind = (value as { kind?: unknown }).kind;\n return typeof kind === 'string' && kind.length > 0;\n}\n\nfunction parseLine(line: string): BackendCandidate | null {\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n return null;\n }\n if (!parsed || typeof parsed !== 'object') return null;\n const obj = parsed as { expression?: unknown; prefactor?: unknown; note?: unknown };\n if (!isExprNode(obj.expression)) return null;\n const prefactor =\n typeof obj.prefactor === 'number' && Number.isFinite(obj.prefactor) ? obj.prefactor : undefined;\n const note = typeof obj.note === 'string' ? obj.note : undefined;\n return { expression: obj.expression, prefactor, note };\n}\n\n/**\n * The part of a launched worker process that {@link runBackendWorker} uses. A `node:child_process`\n * `ChildProcess` satisfies it; the interface keeps Node types out of this module's declarations.\n * @internal\n */\nexport interface WorkerProcess {\n readonly stdin: { write(chunk: string): unknown; end(): unknown } | null;\n readonly stdout: { on(event: 'data', listener: (chunk: Uint8Array) => void): unknown } | null;\n readonly stderr: { on(event: 'data', listener: (chunk: Uint8Array) => void): unknown } | null;\n on(event: 'error', listener: (err: Error) => void): unknown;\n on(event: 'close', listener: (code: number | null, signal: string | null) => void): unknown;\n kill(signal: 'SIGKILL'): unknown;\n}\n\n/** Launches a worker process. The default is `node:child_process` `spawn`. @internal */\nexport type WorkerLauncher = (\n command: string,\n args: readonly string[],\n options: { cwd?: string; stdio: ['pipe', 'pipe', 'pipe']; windowsHide: boolean },\n) => WorkerProcess;\n\n/**\n * Run an untrusted NDJSON worker. Never uses a shell.\n *\n * The timeout starts when the launcher returns, so it includes the worker's own start-up time.\n * `opts.spawn` replaces the process launcher; tests use it to drive the exit paths without a real\n * process. @internal\n */\nexport async function runBackendWorker(\n argv: readonly string[],\n request: BackendRequest,\n opts: { timeoutMs?: number; cwd?: string; spawn?: WorkerLauncher } = {},\n): Promise<BackendResponse> {\n if (argv.length === 0) {\n return { ok: false, candidates: [], error: 'empty argv' };\n }\n const timeoutMs = opts.timeoutMs ?? request.budgetMs;\n const launch: WorkerLauncher = opts.spawn ?? spawn;\n const child = launch(argv[0]!, argv.slice(1), {\n cwd: opts.cwd,\n stdio: ['pipe', 'pipe', 'pipe'],\n windowsHide: true,\n });\n\n const chunks: Uint8Array[] = [];\n const errChunks: Uint8Array[] = [];\n child.stdout?.on('data', (d) => chunks.push(d));\n child.stderr?.on('data', (d) => errChunks.push(d));\n\n const killer = setTimeout(() => {\n child.kill('SIGKILL');\n }, timeoutMs);\n\n const stdinPayload = `${JSON.stringify(request)}\\n`;\n child.stdin?.write(stdinPayload);\n child.stdin?.end();\n\n const exit = await new Promise<{ code: number | null; signal: string | null; spawnError?: string }>((resolve) => {\n child.on('error', (err) => resolve({ code: 1, signal: null, spawnError: err.message }));\n child.on('close', (code, signal) => resolve({ code, signal }));\n });\n clearTimeout(killer);\n\n if (exit.signal === 'SIGKILL') {\n return { ok: false, candidates: [], error: `worker timed out after ${timeoutMs}ms` };\n }\n if (exit.code !== 0) {\n const err = exit.spawnError ?? Buffer.concat(errChunks).toString('utf8').trim();\n return {\n ok: false,\n candidates: [],\n error: err || `worker exited ${exit.code}`,\n };\n }\n\n const text = Buffer.concat(chunks).toString('utf8');\n const candidates: BackendCandidate[] = [];\n for (const line of text.split(/\\r?\\n/)) {\n if (line.trim().length === 0) continue;\n const c = parseLine(line);\n if (!c) {\n return { ok: false, candidates: [], error: `malformed NDJSON line: ${line.slice(0, 200)}` };\n }\n candidates.push(c);\n }\n return { ok: true, candidates };\n}\n"]}
1
+ {"version":3,"file":"backend-protocol.js","sourceRoot":"","sources":["../../../src/composition/probe/backend-protocol.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Optional NDJSON worker protocol for expression-search backends.\n *\n * Spawn with an **argv array** (no shell). Timeout + kill. Schema-validate\n * output. **No vendored Python** — CI uses `tests/fixtures/discovery-workers/echo-worker.mjs`.\n *\n * @internal\n */\n\nimport { spawn } from 'node:child_process';\nimport type { ExprNode } from '../../dimensional/ast-types.js';\n\n/** One request line that the search sends to an expression-search backend worker. */\nexport interface BackendRequest {\n readonly problemId: string;\n readonly budgetMs: number;\n readonly variables: readonly string[];\n readonly target: string;\n}\n\n/** One candidate expression that an expression-search backend worker returns. */\nexport interface BackendCandidate {\n readonly expression: ExprNode;\n readonly prefactor?: number;\n readonly note?: string;\n}\n\n/** The parsed reply of a backend worker: its candidates, or an error. */\nexport interface BackendResponse {\n readonly ok: boolean;\n readonly candidates: readonly BackendCandidate[];\n readonly error?: string;\n}\n\nfunction isExprNode(value: unknown): value is ExprNode {\n if (!value || typeof value !== 'object') return false;\n const kind = (value as { kind?: unknown }).kind;\n return typeof kind === 'string' && kind.length > 0;\n}\n\nfunction parseLine(line: string): BackendCandidate | null {\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n return null;\n }\n if (!parsed || typeof parsed !== 'object') return null;\n const obj = parsed as { expression?: unknown; prefactor?: unknown; note?: unknown };\n if (!isExprNode(obj.expression)) return null;\n const prefactor =\n typeof obj.prefactor === 'number' && Number.isFinite(obj.prefactor) ? obj.prefactor : undefined;\n const note = typeof obj.note === 'string' ? obj.note : undefined;\n return { expression: obj.expression, prefactor, note };\n}\n\n/**\n * The part of a launched worker process that {@link runBackendWorker} uses. A `node:child_process`\n * `ChildProcess` satisfies it; the interface keeps Node types out of this module's declarations.\n * @internal\n */\nexport interface WorkerProcess {\n readonly stdin: { write(chunk: string): unknown; end(): unknown } | null;\n readonly stdout: { on(event: 'data', listener: (chunk: Uint8Array) => void): unknown } | null;\n readonly stderr: { on(event: 'data', listener: (chunk: Uint8Array) => void): unknown } | null;\n on(event: 'error', listener: (err: Error) => void): unknown;\n on(event: 'close', listener: (code: number | null, signal: string | null) => void): unknown;\n kill(signal: 'SIGKILL'): unknown;\n}\n\n/** Launches a worker process. The default is `node:child_process` `spawn`. @internal */\nexport type WorkerLauncher = (\n command: string,\n args: readonly string[],\n options: { cwd?: string; stdio: ['pipe', 'pipe', 'pipe']; windowsHide: boolean },\n) => WorkerProcess;\n\n/**\n * Run an untrusted NDJSON worker. Never uses a shell.\n *\n * The timeout starts when the launcher returns, so it includes the worker's own start-up time.\n * `opts.spawn` replaces the process launcher; tests use it to drive the exit paths without a real\n * process. @internal\n */\nexport async function runBackendWorker(\n argv: readonly string[],\n request: BackendRequest,\n opts: { timeoutMs?: number; cwd?: string; spawn?: WorkerLauncher } = {},\n): Promise<BackendResponse> {\n if (argv.length === 0) {\n return { ok: false, candidates: [], error: 'empty argv' };\n }\n const timeoutMs = opts.timeoutMs ?? request.budgetMs;\n const launch: WorkerLauncher = opts.spawn ?? spawn;\n const child = launch(argv[0]!, argv.slice(1), {\n cwd: opts.cwd,\n stdio: ['pipe', 'pipe', 'pipe'],\n windowsHide: true,\n });\n\n const chunks: Uint8Array[] = [];\n const errChunks: Uint8Array[] = [];\n child.stdout?.on('data', (d) => chunks.push(d));\n child.stderr?.on('data', (d) => errChunks.push(d));\n\n const killer = setTimeout(() => {\n child.kill('SIGKILL');\n }, timeoutMs);\n\n const stdinPayload = `${JSON.stringify(request)}\\n`;\n child.stdin?.write(stdinPayload);\n child.stdin?.end();\n\n const exit = await new Promise<{ code: number | null; signal: string | null; spawnError?: string }>((resolve) => {\n child.on('error', (err) => resolve({ code: 1, signal: null, spawnError: err.message }));\n child.on('close', (code, signal) => resolve({ code, signal }));\n });\n clearTimeout(killer);\n\n if (exit.signal === 'SIGKILL') {\n return { ok: false, candidates: [], error: `worker timed out after ${timeoutMs}ms` };\n }\n if (exit.code !== 0) {\n const err = exit.spawnError ?? Buffer.concat(errChunks).toString('utf8').trim();\n return {\n ok: false,\n candidates: [],\n error: err || `worker exited ${exit.code}`,\n };\n }\n\n const text = Buffer.concat(chunks).toString('utf8');\n const candidates: BackendCandidate[] = [];\n for (const line of text.split(/\\r?\\n/)) {\n if (line.trim().length === 0) continue;\n const c = parseLine(line);\n if (!c) {\n return { ok: false, candidates: [], error: `malformed NDJSON line: ${line.slice(0, 200)}` };\n }\n candidates.push(c);\n }\n return { ok: true, candidates };\n}\n"]}
@@ -16,6 +16,7 @@ export declare function canTransition(from: ProbeCandidateStatus | 'none', to: P
16
16
  export declare function applyStatus(record: ProbeCandidateRecord, to: ProbeCandidateStatus, reason: string, runId: string, at?: string): ProbeCandidateRecord;
17
17
  /** Pipeline order index; terminals sort last. @internal */
18
18
  export declare function statusRank(s: ProbeCandidateStatus): number;
19
+ /** The in-memory store of probe candidate records and their rejections. */
19
20
  export declare class ProbeCandidateStore {
20
21
  private readonly byId;
21
22
  private readonly rejections;
@@ -1 +1 @@
1
- {"version":3,"file":"candidate-store.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/candidate-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EAErB,MAAM,YAAY,CAAC;AAgDpB,+DAA+D;AAC/D,wBAAgB,aAAa,CAC3B,IAAI,EAAE,oBAAoB,GAAG,MAAM,EACnC,EAAE,EAAE,oBAAoB,GACvB,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,oBAAoB,EAC5B,EAAE,EAAE,oBAAoB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,EAAE,SAA2B,GAC5B,oBAAoB,CAgBtB;AAED,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAG1D;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2C;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IAEzD,yEAAyE;IACzE,GAAG,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAKtC;IAED,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEhD;IAED,6CAA6C;IAC7C,OAAO,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAE1C;IAED,GAAG,IAAI,SAAS,oBAAoB,EAAE,CAErC;IAED,iBAAiB,CAAC,GAAG,EAAE,oBAAoB,GAAG,IAAI,CAEjD;IAED,sFAAsF;IACtF,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAI7D;IAED,aAAa,IAAI,SAAS,oBAAoB,EAAE,CAE/C;CACF"}
1
+ {"version":3,"file":"candidate-store.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/candidate-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EAErB,MAAM,YAAY,CAAC;AAgDpB,+DAA+D;AAC/D,wBAAgB,aAAa,CAC3B,IAAI,EAAE,oBAAoB,GAAG,MAAM,EACnC,EAAE,EAAE,oBAAoB,GACvB,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,oBAAoB,EAC5B,EAAE,EAAE,oBAAoB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,EAAE,SAA2B,GAC5B,oBAAoB,CAgBtB;AAED,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,CAAC,EAAE,oBAAoB,GAAG,MAAM,CAG1D;AAED,2EAA2E;AAC3E,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2C;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IAEzD,yEAAyE;IACzE,GAAG,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAKtC;IAED,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEhD;IAED,6CAA6C;IAC7C,OAAO,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAE1C;IAED,GAAG,IAAI,SAAS,oBAAoB,EAAE,CAErC;IAED,iBAAiB,CAAC,GAAG,EAAE,oBAAoB,GAAG,IAAI,CAEjD;IAED,sFAAsF;IACtF,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAI7D;IAED,aAAa,IAAI,SAAS,oBAAoB,EAAE,CAE/C;CACF"}
@@ -76,6 +76,7 @@ export function statusRank(s) {
76
76
  const i = ORDER.indexOf(s);
77
77
  return i >= 0 ? i : -1;
78
78
  }
79
+ /** The in-memory store of probe candidate records and their rejections. */
79
80
  export class ProbeCandidateStore {
80
81
  byId = new Map();
81
82
  rejections = [];
@@ -1 +1 @@
1
- {"version":3,"file":"candidate-store.js","sourceRoot":"","sources":["../../../src/composition/probe/candidate-store.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Append-only Product B candidate store + rejection registry.\n * Product A adjudications stay in `adjudication.ts`.\n *\n * @module composition/probe/candidate-store\n */\n\nimport type {\n ProbeCandidateRecord,\n ProbeCandidateStatus,\n ProbeRejectionRecord,\n StatusEvent,\n} from './types.js';\n\nconst ORDER: readonly ProbeCandidateStatus[] = [\n 'generated',\n 'structurally-valid',\n 'empirically-fit',\n 'heldout-supported',\n 'falsification-survivor',\n 'expert-review-required',\n];\n\nconst TERMINAL: ReadonlySet<ProbeCandidateStatus> = new Set([\n 'rejected',\n 'falsified',\n 'equivalent-known',\n 'insufficient-evidence',\n 'expert-review-required',\n]);\n\nconst ALLOWED: ReadonlyMap<ProbeCandidateStatus | 'none', ReadonlySet<ProbeCandidateStatus>> =\n new Map([\n ['none', new Set<ProbeCandidateStatus>(['generated'])],\n ['generated', new Set<ProbeCandidateStatus>(['structurally-valid', 'rejected'])],\n [\n 'structurally-valid',\n new Set<ProbeCandidateStatus>([\n 'empirically-fit',\n 'equivalent-known',\n 'insufficient-evidence',\n 'rejected',\n ]),\n ],\n [\n 'empirically-fit',\n new Set<ProbeCandidateStatus>(['heldout-supported', 'insufficient-evidence', 'rejected']),\n ],\n [\n 'heldout-supported',\n new Set<ProbeCandidateStatus>([\n 'falsification-survivor',\n 'falsified',\n 'rejected',\n 'equivalent-known',\n ]),\n ],\n ['falsification-survivor', new Set<ProbeCandidateStatus>(['expert-review-required'])],\n ]);\n\n/** True when `to` is a legal successor of `from`. @internal */\nexport function canTransition(\n from: ProbeCandidateStatus | 'none',\n to: ProbeCandidateStatus,\n): boolean {\n return ALLOWED.get(from)?.has(to) === true;\n}\n\n/**\n * Append a status event. Throws if the transition skips a required gate.\n * Current `status` is always the last event's `to`.\n *\n * @internal\n */\nexport function applyStatus(\n record: ProbeCandidateRecord,\n to: ProbeCandidateStatus,\n reason: string,\n runId: string,\n at = new Date().toISOString(),\n): ProbeCandidateRecord {\n const from = record.statusHistory.length === 0 ? 'none' : record.status;\n if (TERMINAL.has(record.status) && record.status !== 'falsification-survivor') {\n throw new RangeError(\n `applyStatus: terminal status '${record.status}' cannot transition to '${to}'`,\n );\n }\n if (!canTransition(from, to)) {\n throw new RangeError(`applyStatus: illegal transition ${String(from)} → ${to}`);\n }\n const event: StatusEvent = { at, from, to, reason, runId };\n return {\n ...record,\n status: to,\n statusHistory: [...record.statusHistory, event],\n };\n}\n\n/** Pipeline order index; terminals sort last. @internal */\nexport function statusRank(s: ProbeCandidateStatus): number {\n const i = ORDER.indexOf(s);\n return i >= 0 ? i : -1;\n}\n\nexport class ProbeCandidateStore {\n private readonly byId = new Map<string, ProbeCandidateRecord>();\n private readonly rejections: ProbeRejectionRecord[] = [];\n\n /** Insert a freshly generated record (must be `generated`). @internal */\n put(record: ProbeCandidateRecord): void {\n if (this.byId.has(record.id)) {\n throw new RangeError(`ProbeCandidateStore: duplicate id '${record.id}'`);\n }\n this.byId.set(record.id, record);\n }\n\n get(id: string): ProbeCandidateRecord | undefined {\n return this.byId.get(id);\n }\n\n /** Replace after `applyStatus`. @internal */\n replace(record: ProbeCandidateRecord): void {\n this.byId.set(record.id, record);\n }\n\n all(): readonly ProbeCandidateRecord[] {\n return [...this.byId.values()];\n }\n\n rememberRejection(rec: ProbeRejectionRecord): void {\n this.rejections.push(rec);\n }\n\n /** True when an equivalent fingerprint was rejected in the same context. @internal */\n isRejected(canonicalAstHash: string, context: string): boolean {\n return this.rejections.some(\n (r) => r.fingerprint.canonicalAstHash === canonicalAstHash && r.context === context,\n );\n }\n\n rejectionList(): readonly ProbeRejectionRecord[] {\n return this.rejections;\n }\n}\n"]}
1
+ {"version":3,"file":"candidate-store.js","sourceRoot":"","sources":["../../../src/composition/probe/candidate-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,KAAK,GAAoC;IAC7C,WAAW;IACX,oBAAoB;IACpB,iBAAiB;IACjB,mBAAmB;IACnB,wBAAwB;IACxB,wBAAwB;CACzB,CAAC;AAEF,MAAM,QAAQ,GAAsC,IAAI,GAAG,CAAC;IAC1D,UAAU;IACV,WAAW;IACX,kBAAkB;IAClB,uBAAuB;IACvB,wBAAwB;CACzB,CAAC,CAAC;AAEH,MAAM,OAAO,GACX,IAAI,GAAG,CAAC;IACN,CAAC,MAAM,EAAE,IAAI,GAAG,CAAuB,CAAC,WAAW,CAAC,CAAC,CAAC;IACtD,CAAC,WAAW,EAAE,IAAI,GAAG,CAAuB,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC,CAAC;IAChF;QACE,oBAAoB;QACpB,IAAI,GAAG,CAAuB;YAC5B,iBAAiB;YACjB,kBAAkB;YAClB,uBAAuB;YACvB,UAAU;SACX,CAAC;KACH;IACD;QACE,iBAAiB;QACjB,IAAI,GAAG,CAAuB,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,UAAU,CAAC,CAAC;KAC1F;IACD;QACE,mBAAmB;QACnB,IAAI,GAAG,CAAuB;YAC5B,wBAAwB;YACxB,WAAW;YACX,UAAU;YACV,kBAAkB;SACnB,CAAC;KACH;IACD,CAAC,wBAAwB,EAAE,IAAI,GAAG,CAAuB,CAAC,wBAAwB,CAAC,CAAC,CAAC;CACtF,CAAC,CAAC;AAEL,+DAA+D;AAC/D,MAAM,UAAU,aAAa,CAC3B,IAAmC,EACnC,EAAwB;IAExB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,MAA4B,EAC5B,EAAwB,EACxB,MAAc,EACd,KAAa,EACb,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAE7B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IACxE,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,wBAAwB,EAAE,CAAC;QAC9E,MAAM,IAAI,UAAU,CAClB,iCAAiC,MAAM,CAAC,MAAM,2BAA2B,EAAE,GAAG,CAC/E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,mCAAmC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,KAAK,GAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3D,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,CAAC,GAAG,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,UAAU,CAAC,CAAuB;IAChD,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,2EAA2E;AAC3E,MAAM,OAAO,mBAAmB;IACb,IAAI,GAAG,IAAI,GAAG,EAAgC,CAAC;IAC/C,UAAU,GAA2B,EAAE,CAAC;IAEzD,yEAAyE;IACzE,GAAG,CAAC,MAA4B;QAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,UAAU,CAAC,sCAAsC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,6CAA6C;IAC7C,OAAO,CAAC,MAA4B;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,GAAG;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,iBAAiB,CAAC,GAAyB;QACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,sFAAsF;IACtF,UAAU,CAAC,gBAAwB,EAAE,OAAe;QAClD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,gBAAgB,KAAK,gBAAgB,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CACpF,CAAC;IACJ,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF","sourcesContent":["/**\n * Append-only Product B candidate store + rejection registry.\n * Product A adjudications stay in `adjudication.ts`.\n *\n * @module composition/probe/candidate-store\n */\n\nimport type {\n ProbeCandidateRecord,\n ProbeCandidateStatus,\n ProbeRejectionRecord,\n StatusEvent,\n} from './types.js';\n\nconst ORDER: readonly ProbeCandidateStatus[] = [\n 'generated',\n 'structurally-valid',\n 'empirically-fit',\n 'heldout-supported',\n 'falsification-survivor',\n 'expert-review-required',\n];\n\nconst TERMINAL: ReadonlySet<ProbeCandidateStatus> = new Set([\n 'rejected',\n 'falsified',\n 'equivalent-known',\n 'insufficient-evidence',\n 'expert-review-required',\n]);\n\nconst ALLOWED: ReadonlyMap<ProbeCandidateStatus | 'none', ReadonlySet<ProbeCandidateStatus>> =\n new Map([\n ['none', new Set<ProbeCandidateStatus>(['generated'])],\n ['generated', new Set<ProbeCandidateStatus>(['structurally-valid', 'rejected'])],\n [\n 'structurally-valid',\n new Set<ProbeCandidateStatus>([\n 'empirically-fit',\n 'equivalent-known',\n 'insufficient-evidence',\n 'rejected',\n ]),\n ],\n [\n 'empirically-fit',\n new Set<ProbeCandidateStatus>(['heldout-supported', 'insufficient-evidence', 'rejected']),\n ],\n [\n 'heldout-supported',\n new Set<ProbeCandidateStatus>([\n 'falsification-survivor',\n 'falsified',\n 'rejected',\n 'equivalent-known',\n ]),\n ],\n ['falsification-survivor', new Set<ProbeCandidateStatus>(['expert-review-required'])],\n ]);\n\n/** True when `to` is a legal successor of `from`. @internal */\nexport function canTransition(\n from: ProbeCandidateStatus | 'none',\n to: ProbeCandidateStatus,\n): boolean {\n return ALLOWED.get(from)?.has(to) === true;\n}\n\n/**\n * Append a status event. Throws if the transition skips a required gate.\n * Current `status` is always the last event's `to`.\n *\n * @internal\n */\nexport function applyStatus(\n record: ProbeCandidateRecord,\n to: ProbeCandidateStatus,\n reason: string,\n runId: string,\n at = new Date().toISOString(),\n): ProbeCandidateRecord {\n const from = record.statusHistory.length === 0 ? 'none' : record.status;\n if (TERMINAL.has(record.status) && record.status !== 'falsification-survivor') {\n throw new RangeError(\n `applyStatus: terminal status '${record.status}' cannot transition to '${to}'`,\n );\n }\n if (!canTransition(from, to)) {\n throw new RangeError(`applyStatus: illegal transition ${String(from)} → ${to}`);\n }\n const event: StatusEvent = { at, from, to, reason, runId };\n return {\n ...record,\n status: to,\n statusHistory: [...record.statusHistory, event],\n };\n}\n\n/** Pipeline order index; terminals sort last. @internal */\nexport function statusRank(s: ProbeCandidateStatus): number {\n const i = ORDER.indexOf(s);\n return i >= 0 ? i : -1;\n}\n\n/** The in-memory store of probe candidate records and their rejections. */\nexport class ProbeCandidateStore {\n private readonly byId = new Map<string, ProbeCandidateRecord>();\n private readonly rejections: ProbeRejectionRecord[] = [];\n\n /** Insert a freshly generated record (must be `generated`). @internal */\n put(record: ProbeCandidateRecord): void {\n if (this.byId.has(record.id)) {\n throw new RangeError(`ProbeCandidateStore: duplicate id '${record.id}'`);\n }\n this.byId.set(record.id, record);\n }\n\n get(id: string): ProbeCandidateRecord | undefined {\n return this.byId.get(id);\n }\n\n /** Replace after `applyStatus`. @internal */\n replace(record: ProbeCandidateRecord): void {\n this.byId.set(record.id, record);\n }\n\n all(): readonly ProbeCandidateRecord[] {\n return [...this.byId.values()];\n }\n\n rememberRejection(rec: ProbeRejectionRecord): void {\n this.rejections.push(rec);\n }\n\n /** True when an equivalent fingerprint was rejected in the same context. @internal */\n isRejected(canonicalAstHash: string, context: string): boolean {\n return this.rejections.some(\n (r) => r.fingerprint.canonicalAstHash === canonicalAstHash && r.context === context,\n );\n }\n\n rejectionList(): readonly ProbeRejectionRecord[] {\n return this.rejections;\n }\n}\n"]}
@@ -5,10 +5,12 @@
5
5
  * @module composition/probe/corpus
6
6
  */
7
7
  import type { ExprNode } from '../../dimensional/ast-types.js';
8
+ /** One corpus entry that matches an expression, with the layer that holds it. */
8
9
  export interface CorpusMatch {
9
10
  readonly id: string;
10
11
  readonly layer: 'canonical' | 'bridge';
11
12
  }
13
+ /** The result of comparing one expression with the in-repo corpus. */
12
14
  export interface CorpusComparisonResult {
13
15
  readonly corpusId: string;
14
16
  readonly corpusVersion: string;
@@ -16,8 +18,8 @@ export interface CorpusComparisonResult {
16
18
  readonly algebraicMatches: readonly CorpusMatch[];
17
19
  readonly searchedAt: string;
18
20
  }
19
- /** Compare an expression to the in-repo L- and B-layers. @internal */
20
- export declare function compareToCorpus(expr: ExprNode, corpusVersion: string): CorpusComparisonResult;
21
+ /** Compare an expression to the in-repo L- and B-layers. `searchedAt` is the run's pinned time; default now. @internal */
22
+ export declare function compareToCorpus(expr: ExprNode, corpusVersion: string, searchedAt?: string): CorpusComparisonResult;
21
23
  /**
22
24
  * Compare a FITTED prefactor with the prefactor of each corpus relation the
23
25
  * candidate is algebraically equivalent to. `normalForm` matches up to a
@@ -25,11 +27,13 @@ export declare function compareToCorpus(expr: ExprNode, corpusVersion: string):
25
27
  * pendulum fitted on finite-amplitude data gives ĉ = 7.39, not 2π. Only a fully
26
28
  * quantitative canonical entry records a prefactor; for any other match the
27
29
  * note says the fitted value is not compared. `tolerance` is relative (the
28
- * holdout tolerance of the run).
30
+ * holdout tolerance of the run) and is what decides agreement; when the fit
31
+ * carries a standard error `stderr`, the note also states the difference in
32
+ * σ beside that verdict, and decides nothing by it.
29
33
  *
30
34
  * @internal
31
35
  */
32
- export declare function corpusPrefactorNotes(result: CorpusComparisonResult, candidate: ExprNode, fitted: number, tolerance: number): string[];
36
+ export declare function corpusPrefactorNotes(result: CorpusComparisonResult, candidate: ExprNode, fitted: number, tolerance: number, stderr?: number | null): string[];
33
37
  /** Allowed automated novelty sentence. @internal */
34
38
  export declare function corpusRelativeWording(result: CorpusComparisonResult): string;
35
39
  //# sourceMappingURL=corpus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"corpus.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/corpus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAU/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,CAAC;CACxC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,SAAS,WAAW,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAID,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,GAAG,sBAAsB,CA4B7F;AA+CD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,sBAAsB,EAC9B,SAAS,EAAE,QAAQ,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,MAAM,EAAE,CAoCV;AAED,oDAAoD;AACpD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAM5E"}
1
+ {"version":3,"file":"corpus.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/corpus.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAW/D,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,CAAC;CACxC;AAED,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,SAAS,WAAW,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAID,0HAA0H;AAC1H,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,MAAM,EACrB,UAAU,GAAE,MAAiC,GAC5C,sBAAsB,CA4BxB;AAgDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,sBAAsB,EAC9B,SAAS,EAAE,QAAQ,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GACrB,MAAM,EAAE,CA0CV;AAED,oDAAoD;AACpD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAM5E"}
@@ -11,9 +11,10 @@ import { monomialToExpr } from './generator.js';
11
11
  import { evalExpr } from '../expr-eval.js';
12
12
  import { equals } from '../../dimensional/algebra.js';
13
13
  import { canonicalPrefactor } from '../canonical-prefactors.js';
14
+ import { constantRatio, fixedPoint } from '../../canonical/fixed-points.js';
14
15
  const CORPUS_ID = 'upt-l-layer+b-layer';
15
- /** Compare an expression to the in-repo L- and B-layers. @internal */
16
- export function compareToCorpus(expr, corpusVersion) {
16
+ /** Compare an expression to the in-repo L- and B-layers. `searchedAt` is the run's pinned time; default now. @internal */
17
+ export function compareToCorpus(expr, corpusVersion, searchedAt = new Date().toISOString()) {
17
18
  const form = normalForm(expr);
18
19
  const algebraic = [];
19
20
  for (const ce of CANONICAL_EQUATIONS) {
@@ -40,7 +41,7 @@ export function compareToCorpus(expr, corpusVersion) {
40
41
  corpusVersion,
41
42
  exactMatches: [],
42
43
  algebraicMatches: algebraic,
43
- searchedAt: new Date().toISOString(),
44
+ searchedAt,
44
45
  };
45
46
  }
46
47
  /**
@@ -62,8 +63,9 @@ function dimensionedSymbols(node, out) {
62
63
  * The corpus prefactor k of a fully quantitative canonical entry against a
63
64
  * candidate body: `scalarAst / candidate`, which must be constant. Symbols align
64
65
  * by name, then by a dimension exactly one candidate symbol carries. Evaluated at
65
- * three points where variable i takes (1.7 + i)^p, p = 1, 1.3, 1.6. `null` when
66
- * the symbols do not align or the ratio is not constant.
66
+ * three points where variable i takes (1.7 + i)^p, p = 1, 1.3, 1.6 (`fixedPoint`, base 1.7,
67
+ * step 1), and the ratio is constant when its largest relative departure is at most 1e-9
68
+ * (`constantRatio`). `null` when the symbols do not align or the ratio is not constant.
67
69
  */
68
70
  function corpusPrefactor(ast, candidate) {
69
71
  const astSyms = dimensionedSymbols(ast, new Map());
@@ -86,12 +88,12 @@ function corpusPrefactor(ast, candidate) {
86
88
  }
87
89
  const names = [...candSyms.keys()].sort();
88
90
  const ratios = [1, 1.3, 1.6].map((p) => {
89
- const vals = Object.fromEntries(names.map((n, i) => [n, Math.pow(1.7 + i, p)]));
91
+ const vals = fixedPoint(names, p, { base: 1.7, step: 1 });
90
92
  const astVals = Object.fromEntries([...toCand].map(([s, c]) => [s, vals[c]]));
91
93
  return evalExpr(ast, astVals) / evalExpr(candidate, vals);
92
94
  });
93
- const k = ratios[0];
94
- return Number.isFinite(k) && ratios.every((r) => Math.abs(r / k - 1) <= 1e-9) ? k : null;
95
+ const decided = constantRatio(ratios, 1e-9);
96
+ return decided.constant ? decided.value : null;
95
97
  }
96
98
  /**
97
99
  * Compare a FITTED prefactor with the prefactor of each corpus relation the
@@ -100,12 +102,20 @@ function corpusPrefactor(ast, candidate) {
100
102
  * pendulum fitted on finite-amplitude data gives ĉ = 7.39, not 2π. Only a fully
101
103
  * quantitative canonical entry records a prefactor; for any other match the
102
104
  * note says the fitted value is not compared. `tolerance` is relative (the
103
- * holdout tolerance of the run).
105
+ * holdout tolerance of the run) and is what decides agreement; when the fit
106
+ * carries a standard error `stderr`, the note also states the difference in
107
+ * σ beside that verdict, and decides nothing by it.
104
108
  *
105
109
  * @internal
106
110
  */
107
- export function corpusPrefactorNotes(result, candidate, fitted, tolerance) {
111
+ export function corpusPrefactorNotes(result, candidate, fitted, tolerance, stderr) {
108
112
  const c = fitted.toPrecision(4);
113
+ const inSigma = (k) => {
114
+ if (stderr === undefined || stderr === null || !(stderr > 0))
115
+ return '';
116
+ const z = (fitted - k) / stderr;
117
+ return `; ${z >= 0 ? '+' : ''}${z.toFixed(1)}σ (σ_ĉ = ${Number(stderr.toPrecision(2))})`;
118
+ };
109
119
  return result.algebraicMatches.map((m) => {
110
120
  const entry = m.layer === 'canonical' ? CANONICAL_EQUATIONS.find((e) => e.id === m.id) : undefined;
111
121
  let k = null;
@@ -133,11 +143,12 @@ export function corpusPrefactorNotes(result, candidate, fitted, tolerance) {
133
143
  return `${m.id} records no prefactor, so the fitted ĉ=${c} is not compared with it`;
134
144
  const rel = fitted / k - 1;
135
145
  if (Math.abs(rel) <= tolerance) {
136
- return `fitted ĉ=${c} agrees with ${m.id}'s prefactor ${k.toPrecision(4)} (within the holdout tolerance ${tolerance})`;
146
+ return `fitted ĉ=${c} agrees with ${m.id}'s prefactor ${k.toPrecision(4)} (within the holdout tolerance ${tolerance}${inSigma(k)})`;
137
147
  }
138
148
  const pct = `${rel > 0 ? '+' : ''}${Math.round(rel * 100)}%`;
149
+ const sigma = inSigma(k);
139
150
  return (`fitted ĉ=${c} contradicts ${m.id}'s prefactor ${k.toPrecision(4)} (${pct}): ` +
140
- "the data may lie outside that relation's regime");
151
+ `the data may lie outside that relation's regime${sigma === '' ? '' : `; the difference is ${sigma.slice(2)}`}`);
141
152
  });
142
153
  }
143
154
  /** Allowed automated novelty sentence. @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"corpus.js","sourceRoot":"","sources":["../../../src/composition/probe/corpus.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * In-repo corpus comparison: canonical scalarAst + normalForm.\n * Novelty wording is always corpus-relative.\n *\n * @module composition/probe/corpus\n */\n\nimport type { ExprNode } from '../../dimensional/ast-types.js';\nimport { CANONICAL_EQUATIONS } from '../../canonical/registry.js';\nimport { normalForm } from '../../canonical/normal-form.js';\nimport { BRIDGE_RHS_BY_ID } from '../../bridges/rhs-registry.js';\nimport { monomialToExpr } from './generator.js';\nimport { evalExpr } from '../expr-eval.js';\nimport { equals } from '../../dimensional/algebra.js';\nimport type { Dimension } from '../../dimensional/types.js';\nimport { canonicalPrefactor } from '../canonical-prefactors.js';\n\nexport interface CorpusMatch {\n readonly id: string;\n readonly layer: 'canonical' | 'bridge';\n}\n\nexport interface CorpusComparisonResult {\n readonly corpusId: string;\n readonly corpusVersion: string;\n readonly exactMatches: readonly CorpusMatch[];\n readonly algebraicMatches: readonly CorpusMatch[];\n readonly searchedAt: string;\n}\n\nconst CORPUS_ID = 'upt-l-layer+b-layer';\n\n/** Compare an expression to the in-repo L- and B-layers. @internal */\nexport function compareToCorpus(expr: ExprNode, corpusVersion: string): CorpusComparisonResult {\n const form = normalForm(expr);\n const algebraic: CorpusMatch[] = [];\n for (const ce of CANONICAL_EQUATIONS) {\n if (ce.scalarAst && normalForm(ce.scalarAst) === form) {\n algebraic.push({ id: ce.id, layer: 'canonical' });\n } else if (ce.dimensional?.monomial) {\n const mono = monomialToExpr(ce.dimensional.monomial, [\n ce.dimensional.target,\n ...ce.dimensional.governing,\n ]);\n if (normalForm(mono) === form) {\n algebraic.push({ id: ce.id, layer: 'canonical' });\n }\n }\n }\n for (const [id, rhs] of BRIDGE_RHS_BY_ID.entries()) {\n if (rhs && normalForm(rhs) === form) {\n algebraic.push({ id: `be-${id}`, layer: 'bridge' });\n }\n }\n return {\n corpusId: CORPUS_ID,\n corpusVersion,\n exactMatches: [],\n algebraicMatches: algebraic,\n searchedAt: new Date().toISOString(),\n };\n}\n\n/**\n * The symbols of an AST that carry a dimension, with that dimension. Numeric\n * literals and named numbers (`8pi`) are dimensionless and left out; so is a\n * dimensionless variable, which then makes the ratio vary and returns no prefactor.\n */\nfunction dimensionedSymbols(node: ExprNode, out: Map<string, Dimension>): Map<string, Dimension> {\n if (node.kind === 'symbol') {\n if (Object.values(node.dim).some((e) => e !== 0)) out.set(node.name, node.dim);\n return out;\n }\n for (const a of (node as { args?: readonly ExprNode[] }).args ?? []) dimensionedSymbols(a, out);\n return out;\n}\n\n/**\n * The corpus prefactor k of a fully quantitative canonical entry against a\n * candidate body: `scalarAst / candidate`, which must be constant. Symbols align\n * by name, then by a dimension exactly one candidate symbol carries. Evaluated at\n * three points where variable i takes (1.7 + i)^p, p = 1, 1.3, 1.6. `null` when\n * the symbols do not align or the ratio is not constant.\n */\nfunction corpusPrefactor(ast: ExprNode, candidate: ExprNode): number | null {\n const astSyms = dimensionedSymbols(ast, new Map());\n const candSyms = dimensionedSymbols(candidate, new Map());\n if (astSyms.size !== candSyms.size) return null;\n const toCand = new Map<string, string>();\n const free = new Set(candSyms.keys());\n for (const s of astSyms.keys()) if (free.has(s)) (toCand.set(s, s), free.delete(s));\n for (const [s, d] of astSyms) {\n if (toCand.has(s)) continue;\n const hits = [...free].filter((c) => equals(candSyms.get(c)!, d));\n if (hits.length !== 1) return null;\n toCand.set(s, hits[0]!);\n free.delete(hits[0]!);\n }\n const names = [...candSyms.keys()].sort();\n const ratios = [1, 1.3, 1.6].map((p) => {\n const vals = Object.fromEntries(names.map((n, i) => [n, Math.pow(1.7 + i, p)]));\n const astVals = Object.fromEntries([...toCand].map(([s, c]) => [s, vals[c]!]));\n return evalExpr(ast, astVals) / evalExpr(candidate, vals);\n });\n const k = ratios[0]!;\n return Number.isFinite(k) && ratios.every((r) => Math.abs(r / k - 1) <= 1e-9) ? k : null;\n}\n\n/**\n * Compare a FITTED prefactor with the prefactor of each corpus relation the\n * candidate is algebraically equivalent to. `normalForm` matches up to a\n * constant, so an equivalent candidate can still carry the wrong constant: a\n * pendulum fitted on finite-amplitude data gives ĉ = 7.39, not 2π. Only a fully\n * quantitative canonical entry records a prefactor; for any other match the\n * note says the fitted value is not compared. `tolerance` is relative (the\n * holdout tolerance of the run).\n *\n * @internal\n */\nexport function corpusPrefactorNotes(\n result: CorpusComparisonResult,\n candidate: ExprNode,\n fitted: number,\n tolerance: number,\n): string[] {\n const c = fitted.toPrecision(4);\n return result.algebraicMatches.map((m) => {\n const entry = m.layer === 'canonical' ? CANONICAL_EQUATIONS.find((e) => e.id === m.id) : undefined;\n let k: number | null = null;\n // Fully quantitative entries carry their prefactor; others may take it from\n // the sourced table, applied to the entry's AST or, lacking one, its monomial.\n const tabled = entry && entry.epistemicStatus !== 'fully-quantitative' ? canonicalPrefactor(entry.id) : undefined;\n const body =\n entry?.epistemicStatus === 'fully-quantitative'\n ? entry.scalarAst\n : tabled === undefined\n ? undefined\n : (entry?.scalarAst ??\n (entry?.dimensional.monomial\n ? monomialToExpr(entry.dimensional.monomial, [entry.dimensional.target, ...entry.dimensional.governing])\n : undefined));\n if (body !== undefined) {\n try {\n const base = corpusPrefactor(body, candidate);\n k = base === null ? null : (tabled ?? 1) * base;\n } catch {\n k = null;\n }\n }\n if (k === null) return `${m.id} records no prefactor, so the fitted ĉ=${c} is not compared with it`;\n const rel = fitted / k - 1;\n if (Math.abs(rel) <= tolerance) {\n return `fitted ĉ=${c} agrees with ${m.id}'s prefactor ${k.toPrecision(4)} (within the holdout tolerance ${tolerance})`;\n }\n const pct = `${rel > 0 ? '+' : ''}${Math.round(rel * 100)}%`;\n return (\n `fitted ĉ=${c} contradicts ${m.id}'s prefactor ${k.toPrecision(4)} (${pct}): ` +\n \"the data may lie outside that relation's regime\"\n );\n });\n}\n\n/** Allowed automated novelty sentence. @internal */\nexport function corpusRelativeWording(result: CorpusComparisonResult): string {\n if (result.algebraicMatches.length > 0) {\n const ids = result.algebraicMatches.map((m) => m.id).join(', ');\n return `Algebraic equivalent found in corpus ${result.corpusId}@${result.corpusVersion}: ${ids}`;\n }\n return `No equivalent was found in corpus ${result.corpusId} version ${result.corpusVersion} under equivalence procedures E=normalForm. SCIENTIFIC NOVELTY NOT ESTABLISHED.`;\n}\n"]}
1
+ {"version":3,"file":"corpus.js","sourceRoot":"","sources":["../../../src/composition/probe/corpus.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * In-repo corpus comparison: canonical scalarAst + normalForm.\n * Novelty wording is always corpus-relative.\n *\n * @module composition/probe/corpus\n */\n\nimport type { ExprNode } from '../../dimensional/ast-types.js';\nimport { CANONICAL_EQUATIONS } from '../../canonical/registry.js';\nimport { normalForm } from '../../canonical/normal-form.js';\nimport { BRIDGE_RHS_BY_ID } from '../../bridges/rhs-registry.js';\nimport { monomialToExpr } from './generator.js';\nimport { evalExpr } from '../expr-eval.js';\nimport { equals } from '../../dimensional/algebra.js';\nimport type { Dimension } from '../../dimensional/types.js';\nimport { canonicalPrefactor } from '../canonical-prefactors.js';\nimport { constantRatio, fixedPoint } from '../../canonical/fixed-points.js';\n\n/** One corpus entry that matches an expression, with the layer that holds it. */\nexport interface CorpusMatch {\n readonly id: string;\n readonly layer: 'canonical' | 'bridge';\n}\n\n/** The result of comparing one expression with the in-repo corpus. */\nexport interface CorpusComparisonResult {\n readonly corpusId: string;\n readonly corpusVersion: string;\n readonly exactMatches: readonly CorpusMatch[];\n readonly algebraicMatches: readonly CorpusMatch[];\n readonly searchedAt: string;\n}\n\nconst CORPUS_ID = 'upt-l-layer+b-layer';\n\n/** Compare an expression to the in-repo L- and B-layers. `searchedAt` is the run's pinned time; default now. @internal */\nexport function compareToCorpus(\n expr: ExprNode,\n corpusVersion: string,\n searchedAt: string = new Date().toISOString(),\n): CorpusComparisonResult {\n const form = normalForm(expr);\n const algebraic: CorpusMatch[] = [];\n for (const ce of CANONICAL_EQUATIONS) {\n if (ce.scalarAst && normalForm(ce.scalarAst) === form) {\n algebraic.push({ id: ce.id, layer: 'canonical' });\n } else if (ce.dimensional?.monomial) {\n const mono = monomialToExpr(ce.dimensional.monomial, [\n ce.dimensional.target,\n ...ce.dimensional.governing,\n ]);\n if (normalForm(mono) === form) {\n algebraic.push({ id: ce.id, layer: 'canonical' });\n }\n }\n }\n for (const [id, rhs] of BRIDGE_RHS_BY_ID.entries()) {\n if (rhs && normalForm(rhs) === form) {\n algebraic.push({ id: `be-${id}`, layer: 'bridge' });\n }\n }\n return {\n corpusId: CORPUS_ID,\n corpusVersion,\n exactMatches: [],\n algebraicMatches: algebraic,\n searchedAt,\n };\n}\n\n/**\n * The symbols of an AST that carry a dimension, with that dimension. Numeric\n * literals and named numbers (`8pi`) are dimensionless and left out; so is a\n * dimensionless variable, which then makes the ratio vary and returns no prefactor.\n */\nfunction dimensionedSymbols(node: ExprNode, out: Map<string, Dimension>): Map<string, Dimension> {\n if (node.kind === 'symbol') {\n if (Object.values(node.dim).some((e) => e !== 0)) out.set(node.name, node.dim);\n return out;\n }\n for (const a of (node as { args?: readonly ExprNode[] }).args ?? []) dimensionedSymbols(a, out);\n return out;\n}\n\n/**\n * The corpus prefactor k of a fully quantitative canonical entry against a\n * candidate body: `scalarAst / candidate`, which must be constant. Symbols align\n * by name, then by a dimension exactly one candidate symbol carries. Evaluated at\n * three points where variable i takes (1.7 + i)^p, p = 1, 1.3, 1.6 (`fixedPoint`, base 1.7,\n * step 1), and the ratio is constant when its largest relative departure is at most 1e-9\n * (`constantRatio`). `null` when the symbols do not align or the ratio is not constant.\n */\nfunction corpusPrefactor(ast: ExprNode, candidate: ExprNode): number | null {\n const astSyms = dimensionedSymbols(ast, new Map());\n const candSyms = dimensionedSymbols(candidate, new Map());\n if (astSyms.size !== candSyms.size) return null;\n const toCand = new Map<string, string>();\n const free = new Set(candSyms.keys());\n for (const s of astSyms.keys()) if (free.has(s)) (toCand.set(s, s), free.delete(s));\n for (const [s, d] of astSyms) {\n if (toCand.has(s)) continue;\n const hits = [...free].filter((c) => equals(candSyms.get(c)!, d));\n if (hits.length !== 1) return null;\n toCand.set(s, hits[0]!);\n free.delete(hits[0]!);\n }\n const names = [...candSyms.keys()].sort();\n const ratios = [1, 1.3, 1.6].map((p) => {\n const vals = fixedPoint(names, p, { base: 1.7, step: 1 });\n const astVals = Object.fromEntries([...toCand].map(([s, c]) => [s, vals[c]!]));\n return evalExpr(ast, astVals) / evalExpr(candidate, vals);\n });\n const decided = constantRatio(ratios, 1e-9);\n return decided.constant ? decided.value : null;\n}\n\n/**\n * Compare a FITTED prefactor with the prefactor of each corpus relation the\n * candidate is algebraically equivalent to. `normalForm` matches up to a\n * constant, so an equivalent candidate can still carry the wrong constant: a\n * pendulum fitted on finite-amplitude data gives ĉ = 7.39, not 2π. Only a fully\n * quantitative canonical entry records a prefactor; for any other match the\n * note says the fitted value is not compared. `tolerance` is relative (the\n * holdout tolerance of the run) and is what decides agreement; when the fit\n * carries a standard error `stderr`, the note also states the difference in\n * σ beside that verdict, and decides nothing by it.\n *\n * @internal\n */\nexport function corpusPrefactorNotes(\n result: CorpusComparisonResult,\n candidate: ExprNode,\n fitted: number,\n tolerance: number,\n stderr?: number | null,\n): string[] {\n const c = fitted.toPrecision(4);\n const inSigma = (k: number): string => {\n if (stderr === undefined || stderr === null || !(stderr > 0)) return '';\n const z = (fitted - k) / stderr;\n return `; ${z >= 0 ? '+' : ''}${z.toFixed(1)}σ (σ_ĉ = ${Number(stderr.toPrecision(2))})`;\n };\n return result.algebraicMatches.map((m) => {\n const entry = m.layer === 'canonical' ? CANONICAL_EQUATIONS.find((e) => e.id === m.id) : undefined;\n let k: number | null = null;\n // Fully quantitative entries carry their prefactor; others may take it from\n // the sourced table, applied to the entry's AST or, lacking one, its monomial.\n const tabled = entry && entry.epistemicStatus !== 'fully-quantitative' ? canonicalPrefactor(entry.id) : undefined;\n const body =\n entry?.epistemicStatus === 'fully-quantitative'\n ? entry.scalarAst\n : tabled === undefined\n ? undefined\n : (entry?.scalarAst ??\n (entry?.dimensional.monomial\n ? monomialToExpr(entry.dimensional.monomial, [entry.dimensional.target, ...entry.dimensional.governing])\n : undefined));\n if (body !== undefined) {\n try {\n const base = corpusPrefactor(body, candidate);\n k = base === null ? null : (tabled ?? 1) * base;\n } catch {\n k = null;\n }\n }\n if (k === null) return `${m.id} records no prefactor, so the fitted ĉ=${c} is not compared with it`;\n const rel = fitted / k - 1;\n if (Math.abs(rel) <= tolerance) {\n return `fitted ĉ=${c} agrees with ${m.id}'s prefactor ${k.toPrecision(4)} (within the holdout tolerance ${tolerance}${inSigma(k)})`;\n }\n const pct = `${rel > 0 ? '+' : ''}${Math.round(rel * 100)}%`;\n const sigma = inSigma(k);\n return (\n `fitted ĉ=${c} contradicts ${m.id}'s prefactor ${k.toPrecision(4)} (${pct}): ` +\n `the data may lie outside that relation's regime${sigma === '' ? '' : `; the difference is ${sigma.slice(2)}`}`\n );\n });\n}\n\n/** Allowed automated novelty sentence. @internal */\nexport function corpusRelativeWording(result: CorpusComparisonResult): string {\n if (result.algebraicMatches.length > 0) {\n const ids = result.algebraicMatches.map((m) => m.id).join(', ');\n return `Algebraic equivalent found in corpus ${result.corpusId}@${result.corpusVersion}: ${ids}`;\n }\n return `No equivalent was found in corpus ${result.corpusId} version ${result.corpusVersion} under equivalence procedures E=normalForm. SCIENTIFIC NOVELTY NOT ESTABLISHED.`;\n}\n"]}
@@ -5,15 +5,33 @@
5
5
  * that tree is Product A's confrontation ledger and must stay cycle-free
6
6
  * from probe.
7
7
  *
8
+ * A cell is a finite number or a non-empty string in the strict decimal
9
+ * grammar (`1`, `-0.5`, `.5`, `2.`, `1e-3`). Nothing is coerced: an empty
10
+ * cell, `null`, `true`, `false`, a list and `"0x10"` are refused by column
11
+ * and row, with {@link DatasetError}. `Number(v)` once read all of those as
12
+ * 0, 1 or 16, which also defeated the missing-observation guard of the
13
+ * declared-limit check (a missing observation scored as 0).
14
+ *
8
15
  * @internal
9
16
  */
10
17
  import type { DatasetRole, ObservationRow, ProbeDataset } from './types.js';
18
+ /** A dataset file or object that is not a dataset: the message names the row and the column. @internal */
19
+ export declare class DatasetError extends Error {
20
+ constructor(message: string);
21
+ }
22
+ /**
23
+ * A cell as a number: a finite number, or a non-empty string in the strict
24
+ * decimal grammar. Anything else is refused at `where` (the dataset, row and
25
+ * column). @internal
26
+ */
27
+ export declare function readDatasetNumber(v: unknown, where: string): number;
11
28
  /** Build an in-memory dataset. @internal */
12
29
  export declare function datasetFromRows(rows: readonly ObservationRow[], observable: string, role: DatasetRole, id?: string, sigma?: number): ProbeDataset;
13
30
  /** Coerce unknown JSON into a ProbeDataset. @internal */
14
31
  export declare function asDatasetSafe(raw: unknown, fallbackId: string, fallbackRole?: DatasetRole): ProbeDataset;
15
32
  /** Load a single ProbeDataset JSON object. @internal */
16
33
  export declare function loadDatasetFromJson(path: string, fallbackRole?: DatasetRole): ProbeDataset;
34
+ /** The exploratory and holdout datasets that one split JSON file holds. */
17
35
  export interface SplitFileDatasets {
18
36
  readonly exploratory?: ProbeDataset;
19
37
  readonly holdout?: ProbeDataset;
@@ -1 +1 @@
1
- {"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/dataset.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG5E,4CAA4C;AAC5C,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,cAAc,EAAE,EAC/B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,WAAW,EACjB,EAAE,SAAW,EACb,KAAK,CAAC,EAAE,MAAM,GACb,YAAY,CAEd;AAED,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,WAAW,GAAG,YAAY,CAiDxG;AAED,wDAAwD;AACxD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,WAAW,GAAG,YAAY,CAG1F;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;CACjC;AAED,sDAAsD;AACtD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CA0BzE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,WAAW,EACjB,EAAE,SAAO,GACR,YAAY,CA0Bd;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB;IAAE,WAAW,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAiCtD"}
1
+ {"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../../src/composition/probe/dataset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG5E,0GAA0G;AAC1G,qBAAa,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAcD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYnE;AAED,4CAA4C;AAC5C,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,cAAc,EAAE,EAC/B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,WAAW,EACjB,EAAE,SAAW,EACb,KAAK,CAAC,EAAE,MAAM,GACb,YAAY,CAEd;AAED,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,WAAW,GAAG,YAAY,CA6CxG;AAED,wDAAwD;AACxD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,WAAW,GAAG,YAAY,CAG1F;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;CACjC;AAED,sDAAsD;AACtD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CA0BzE;AAiCD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,WAAW,EACjB,EAAE,SAAO,GACR,YAAY,CAYd;AAED,qEAAqE;AACrE,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB;IAAE,WAAW,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAoBtD"}