universal-physics-tensor 0.45.2 → 0.47.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 (548) hide show
  1. package/README.md +85 -66
  2. package/bin/upt.mjs +22 -22
  3. package/dist/atlas/applicability.d.ts +108 -0
  4. package/dist/atlas/applicability.d.ts.map +1 -0
  5. package/dist/atlas/applicability.js +301 -0
  6. package/dist/atlas/applicability.js.map +1 -0
  7. package/dist/atlas/association.d.ts +92 -0
  8. package/dist/atlas/association.d.ts.map +1 -0
  9. package/dist/atlas/association.js +112 -0
  10. package/dist/atlas/association.js.map +1 -0
  11. package/dist/atlas/benchmark/backend-shapes.d.ts +47 -0
  12. package/dist/atlas/benchmark/backend-shapes.d.ts.map +1 -0
  13. package/dist/atlas/benchmark/backend-shapes.js +58 -0
  14. package/dist/atlas/benchmark/backend-shapes.js.map +1 -0
  15. package/dist/atlas/benchmark/baselines.d.ts +64 -0
  16. package/dist/atlas/benchmark/baselines.d.ts.map +1 -0
  17. package/dist/atlas/benchmark/baselines.js +112 -0
  18. package/dist/atlas/benchmark/baselines.js.map +1 -0
  19. package/dist/atlas/benchmark/leakage.d.ts +56 -0
  20. package/dist/atlas/benchmark/leakage.d.ts.map +1 -0
  21. package/dist/atlas/benchmark/leakage.js +100 -0
  22. package/dist/atlas/benchmark/leakage.js.map +1 -0
  23. package/dist/atlas/benchmark/loader.d.ts +56 -0
  24. package/dist/atlas/benchmark/loader.d.ts.map +1 -0
  25. package/dist/atlas/benchmark/loader.js +104 -0
  26. package/dist/atlas/benchmark/loader.js.map +1 -0
  27. package/dist/atlas/benchmark/run-atlas.d.ts +72 -0
  28. package/dist/atlas/benchmark/run-atlas.d.ts.map +1 -0
  29. package/dist/atlas/benchmark/run-atlas.js +210 -0
  30. package/dist/atlas/benchmark/run-atlas.js.map +1 -0
  31. package/dist/atlas/benchmark/stats.d.ts +90 -0
  32. package/dist/atlas/benchmark/stats.d.ts.map +1 -0
  33. package/dist/atlas/benchmark/stats.js +159 -0
  34. package/dist/atlas/benchmark/stats.js.map +1 -0
  35. package/dist/atlas/benchmark/study.d.ts +120 -0
  36. package/dist/atlas/benchmark/study.d.ts.map +1 -0
  37. package/dist/atlas/benchmark/study.js +192 -0
  38. package/dist/atlas/benchmark/study.js.map +1 -0
  39. package/dist/atlas/benchmark/types.d.ts +79 -0
  40. package/dist/atlas/benchmark/types.d.ts.map +1 -0
  41. package/dist/atlas/benchmark/types.js +46 -0
  42. package/dist/atlas/benchmark/types.js.map +1 -0
  43. package/dist/atlas/composition-table.d.ts +55 -0
  44. package/dist/atlas/composition-table.d.ts.map +1 -0
  45. package/dist/atlas/composition-table.js +133 -0
  46. package/dist/atlas/composition-table.js.map +1 -0
  47. package/dist/atlas/conventions.d.ts +63 -0
  48. package/dist/atlas/conventions.d.ts.map +1 -0
  49. package/dist/atlas/conventions.js +93 -0
  50. package/dist/atlas/conventions.js.map +1 -0
  51. package/dist/atlas/coverage.d.ts +93 -0
  52. package/dist/atlas/coverage.d.ts.map +1 -0
  53. package/dist/atlas/coverage.js +69 -0
  54. package/dist/atlas/coverage.js.map +1 -0
  55. package/dist/atlas/derivation.d.ts +137 -0
  56. package/dist/atlas/derivation.d.ts.map +1 -0
  57. package/dist/atlas/derivation.js +190 -0
  58. package/dist/atlas/derivation.js.map +1 -0
  59. package/dist/atlas/derive-evidence.d.ts +218 -0
  60. package/dist/atlas/derive-evidence.d.ts.map +1 -0
  61. package/dist/atlas/derive-evidence.js +225 -0
  62. package/dist/atlas/derive-evidence.js.map +1 -0
  63. package/dist/atlas/diffusion/bridges-closure.d.ts +63 -0
  64. package/dist/atlas/diffusion/bridges-closure.d.ts.map +1 -0
  65. package/dist/atlas/diffusion/bridges-closure.js +350 -0
  66. package/dist/atlas/diffusion/bridges-closure.js.map +1 -0
  67. package/dist/atlas/diffusion/bridges.d.ts +36 -0
  68. package/dist/atlas/diffusion/bridges.d.ts.map +1 -0
  69. package/dist/atlas/diffusion/bridges.js +226 -0
  70. package/dist/atlas/diffusion/bridges.js.map +1 -0
  71. package/dist/atlas/diffusion/dimensions.d.ts +21 -0
  72. package/dist/atlas/diffusion/dimensions.d.ts.map +1 -0
  73. package/dist/atlas/diffusion/dimensions.js +21 -0
  74. package/dist/atlas/diffusion/dimensions.js.map +1 -0
  75. package/dist/atlas/diffusion/index.d.ts +16 -0
  76. package/dist/atlas/diffusion/index.d.ts.map +1 -0
  77. package/dist/atlas/diffusion/index.js +23 -0
  78. package/dist/atlas/diffusion/index.js.map +1 -0
  79. package/dist/atlas/diffusion/models.d.ts +24 -0
  80. package/dist/atlas/diffusion/models.d.ts.map +1 -0
  81. package/dist/atlas/diffusion/models.js +139 -0
  82. package/dist/atlas/diffusion/models.js.map +1 -0
  83. package/dist/atlas/diffusion/numerics.d.ts +181 -0
  84. package/dist/atlas/diffusion/numerics.d.ts.map +1 -0
  85. package/dist/atlas/diffusion/numerics.js +251 -0
  86. package/dist/atlas/diffusion/numerics.js.map +1 -0
  87. package/dist/atlas/error-algebra.d.ts +52 -0
  88. package/dist/atlas/error-algebra.d.ts.map +1 -0
  89. package/dist/atlas/error-algebra.js +55 -0
  90. package/dist/atlas/error-algebra.js.map +1 -0
  91. package/dist/atlas/export.d.ts +48 -0
  92. package/dist/atlas/export.d.ts.map +1 -0
  93. package/dist/atlas/export.js +106 -0
  94. package/dist/atlas/export.js.map +1 -0
  95. package/dist/atlas/families.d.ts +14 -0
  96. package/dist/atlas/families.d.ts.map +1 -0
  97. package/dist/atlas/families.js +20 -0
  98. package/dist/atlas/families.js.map +1 -0
  99. package/dist/atlas/index.d.ts +90 -0
  100. package/dist/atlas/index.d.ts.map +1 -0
  101. package/dist/atlas/index.js +69 -0
  102. package/dist/atlas/index.js.map +1 -0
  103. package/dist/atlas/link-prediction.d.ts +71 -0
  104. package/dist/atlas/link-prediction.d.ts.map +1 -0
  105. package/dist/atlas/link-prediction.js +128 -0
  106. package/dist/atlas/link-prediction.js.map +1 -0
  107. package/dist/atlas/model.d.ts +70 -0
  108. package/dist/atlas/model.d.ts.map +1 -0
  109. package/dist/atlas/model.js +26 -0
  110. package/dist/atlas/model.js.map +1 -0
  111. package/dist/atlas/oscillators/bridges-coarse.d.ts +71 -0
  112. package/dist/atlas/oscillators/bridges-coarse.d.ts.map +1 -0
  113. package/dist/atlas/oscillators/bridges-coarse.js +146 -0
  114. package/dist/atlas/oscillators/bridges-coarse.js.map +1 -0
  115. package/dist/atlas/oscillators/bridges-exact.d.ts +70 -0
  116. package/dist/atlas/oscillators/bridges-exact.d.ts.map +1 -0
  117. package/dist/atlas/oscillators/bridges-exact.js +230 -0
  118. package/dist/atlas/oscillators/bridges-exact.js.map +1 -0
  119. package/dist/atlas/oscillators/bridges-limits.d.ts +118 -0
  120. package/dist/atlas/oscillators/bridges-limits.d.ts.map +1 -0
  121. package/dist/atlas/oscillators/bridges-limits.js +345 -0
  122. package/dist/atlas/oscillators/bridges-limits.js.map +1 -0
  123. package/dist/atlas/oscillators/dimensions.d.ts +34 -0
  124. package/dist/atlas/oscillators/dimensions.d.ts.map +1 -0
  125. package/dist/atlas/oscillators/dimensions.js +34 -0
  126. package/dist/atlas/oscillators/dimensions.js.map +1 -0
  127. package/dist/atlas/oscillators/index.d.ts +38 -0
  128. package/dist/atlas/oscillators/index.d.ts.map +1 -0
  129. package/dist/atlas/oscillators/index.js +37 -0
  130. package/dist/atlas/oscillators/index.js.map +1 -0
  131. package/dist/atlas/oscillators/models.d.ts +25 -0
  132. package/dist/atlas/oscillators/models.d.ts.map +1 -0
  133. package/dist/atlas/oscillators/models.js +160 -0
  134. package/dist/atlas/oscillators/models.js.map +1 -0
  135. package/dist/atlas/oscillators/rejections.d.ts +21 -0
  136. package/dist/atlas/oscillators/rejections.d.ts.map +1 -0
  137. package/dist/atlas/oscillators/rejections.js +54 -0
  138. package/dist/atlas/oscillators/rejections.js.map +1 -0
  139. package/dist/atlas/path-bound.d.ts +143 -0
  140. package/dist/atlas/path-bound.d.ts.map +1 -0
  141. package/dist/atlas/path-bound.js +268 -0
  142. package/dist/atlas/path-bound.js.map +1 -0
  143. package/dist/atlas/poster/associations.d.ts +66 -0
  144. package/dist/atlas/poster/associations.d.ts.map +1 -0
  145. package/dist/atlas/poster/associations.js +90 -0
  146. package/dist/atlas/poster/associations.js.map +1 -0
  147. package/dist/atlas/poster/derivations.d.ts +156 -0
  148. package/dist/atlas/poster/derivations.d.ts.map +1 -0
  149. package/dist/atlas/poster/derivations.js +430 -0
  150. package/dist/atlas/poster/derivations.js.map +1 -0
  151. package/dist/atlas/poster/statements.d.ts +198 -0
  152. package/dist/atlas/poster/statements.d.ts.map +1 -0
  153. package/dist/atlas/poster/statements.js +365 -0
  154. package/dist/atlas/poster/statements.js.map +1 -0
  155. package/dist/atlas/public.d.ts +26 -0
  156. package/dist/atlas/public.d.ts.map +1 -0
  157. package/dist/atlas/public.js +21 -0
  158. package/dist/atlas/public.js.map +1 -0
  159. package/dist/atlas/regime.d.ts +171 -0
  160. package/dist/atlas/regime.d.ts.map +1 -0
  161. package/dist/atlas/regime.js +309 -0
  162. package/dist/atlas/regime.js.map +1 -0
  163. package/dist/atlas/serialize.d.ts +50 -0
  164. package/dist/atlas/serialize.d.ts.map +1 -0
  165. package/dist/atlas/serialize.js +180 -0
  166. package/dist/atlas/serialize.js.map +1 -0
  167. package/dist/atlas/statement.d.ts +165 -0
  168. package/dist/atlas/statement.d.ts.map +1 -0
  169. package/dist/atlas/statement.js +176 -0
  170. package/dist/atlas/statement.js.map +1 -0
  171. package/dist/atlas/types.d.ts +325 -0
  172. package/dist/atlas/types.d.ts.map +1 -0
  173. package/dist/atlas/types.js +61 -0
  174. package/dist/atlas/types.js.map +1 -0
  175. package/dist/atlas/waves/bridges-closure.d.ts +39 -0
  176. package/dist/atlas/waves/bridges-closure.d.ts.map +1 -0
  177. package/dist/atlas/waves/bridges-closure.js +226 -0
  178. package/dist/atlas/waves/bridges-closure.js.map +1 -0
  179. package/dist/atlas/waves/bridges.d.ts +49 -0
  180. package/dist/atlas/waves/bridges.d.ts.map +1 -0
  181. package/dist/atlas/waves/bridges.js +266 -0
  182. package/dist/atlas/waves/bridges.js.map +1 -0
  183. package/dist/atlas/waves/index.d.ts +16 -0
  184. package/dist/atlas/waves/index.d.ts.map +1 -0
  185. package/dist/atlas/waves/index.js +23 -0
  186. package/dist/atlas/waves/index.js.map +1 -0
  187. package/dist/atlas/waves/models.d.ts +29 -0
  188. package/dist/atlas/waves/models.d.ts.map +1 -0
  189. package/dist/atlas/waves/models.js +127 -0
  190. package/dist/atlas/waves/models.js.map +1 -0
  191. package/dist/atlas/waves/numerics.d.ts +149 -0
  192. package/dist/atlas/waves/numerics.d.ts.map +1 -0
  193. package/dist/atlas/waves/numerics.js +218 -0
  194. package/dist/atlas/waves/numerics.js.map +1 -0
  195. package/dist/atlas/witness-artifact.d.ts +65 -0
  196. package/dist/atlas/witness-artifact.d.ts.map +1 -0
  197. package/dist/atlas/witness-artifact.js +78 -0
  198. package/dist/atlas/witness-artifact.js.map +1 -0
  199. package/dist/atlas/witness-numeric.d.ts +81 -0
  200. package/dist/atlas/witness-numeric.d.ts.map +1 -0
  201. package/dist/atlas/witness-numeric.js +105 -0
  202. package/dist/atlas/witness-numeric.js.map +1 -0
  203. package/dist/atlas/witness-result.d.ts +77 -0
  204. package/dist/atlas/witness-result.d.ts.map +1 -0
  205. package/dist/atlas/witness-result.js +39 -0
  206. package/dist/atlas/witness-result.js.map +1 -0
  207. package/dist/atlas/witness-specs.d.ts +110 -0
  208. package/dist/atlas/witness-specs.d.ts.map +1 -0
  209. package/dist/atlas/witness-specs.js +372 -0
  210. package/dist/atlas/witness-specs.js.map +1 -0
  211. package/dist/atlas/witness-symbolic.d.ts +79 -0
  212. package/dist/atlas/witness-symbolic.d.ts.map +1 -0
  213. package/dist/atlas/witness-symbolic.js +140 -0
  214. package/dist/atlas/witness-symbolic.js.map +1 -0
  215. package/dist/atlas/witnesses/quantum-support.d.ts +50 -0
  216. package/dist/atlas/witnesses/quantum-support.d.ts.map +1 -0
  217. package/dist/atlas/witnesses/quantum-support.js +48 -0
  218. package/dist/atlas/witnesses/quantum-support.js.map +1 -0
  219. package/dist/bridges/be11-decoherence-confrontation.js.map +1 -1
  220. package/dist/bridges/be21-kss-confrontation.js.map +1 -1
  221. package/dist/bridges/be23-planckian-confrontation.js.map +1 -1
  222. package/dist/bridges/be35-bootstrap-confrontation.js.map +1 -1
  223. package/dist/bridges/be36-gw170817-confrontation.js.map +1 -1
  224. package/dist/bridges/be37-cassini-confrontation.js.map +1 -1
  225. package/dist/bridges/be48-collapse-confrontation.js.map +1 -1
  226. package/dist/bridges/be51-lensing-confrontation.d.ts.map +1 -1
  227. package/dist/bridges/be51-lensing-confrontation.js +5 -3
  228. package/dist/bridges/be51-lensing-confrontation.js.map +1 -1
  229. package/dist/bridges/be52-mercury-confrontation.d.ts.map +1 -1
  230. package/dist/bridges/be52-mercury-confrontation.js +4 -1
  231. package/dist/bridges/be52-mercury-confrontation.js.map +1 -1
  232. package/dist/bridges/be55-quantum-hall-confrontation.js.map +1 -1
  233. package/dist/bridges/be56-casimir-confrontation.js.map +1 -1
  234. package/dist/bridges/be58-johnson-nyquist-confrontation.js.map +1 -1
  235. package/dist/bridges/be59-ac-josephson-confrontation.js.map +1 -1
  236. package/dist/bridges/be60-fractional-qh-confrontation.js.map +1 -1
  237. package/dist/bridges/be61-wiedemann-franz-confrontation.js.map +1 -1
  238. package/dist/bridges/be62-bcs-gap-confrontation.js.map +1 -1
  239. package/dist/bridges/be63-chandrasekhar-mass-confrontation.js.map +1 -1
  240. package/dist/bridges/be64-eddington-luminosity-confrontation.js.map +1 -1
  241. package/dist/bridges/be65-jeans-mass-confrontation.js.map +1 -1
  242. package/dist/bridges/bridge-equations.d.ts +2 -2
  243. package/dist/bridges/bridge-equations.d.ts.map +1 -1
  244. package/dist/bridges/bridge-equations.js +2 -2
  245. package/dist/bridges/bridge-equations.js.map +1 -1
  246. package/dist/bridges/catalog-adapter.d.ts.map +1 -1
  247. package/dist/bridges/catalog-adapter.js.map +1 -1
  248. package/dist/bridges/confrontations.d.ts.map +1 -1
  249. package/dist/bridges/confrontations.js +7 -0
  250. package/dist/bridges/confrontations.js.map +1 -1
  251. package/dist/bridges/equations/_be-helpers.d.ts +2 -2
  252. package/dist/bridges/equations/_be-helpers.js +2 -2
  253. package/dist/bridges/equations/be-20-vacuum-energy.js.map +1 -1
  254. package/dist/bridges/equations/be-35-conformal-bootstrap.d.ts +59 -72
  255. package/dist/bridges/equations/be-35-conformal-bootstrap.d.ts.map +1 -1
  256. package/dist/bridges/equations/be-35-conformal-bootstrap.js +66 -98
  257. package/dist/bridges/equations/be-35-conformal-bootstrap.js.map +1 -1
  258. package/dist/bridges/equations/be-48-grw-localization.d.ts +9 -8
  259. package/dist/bridges/equations/be-48-grw-localization.d.ts.map +1 -1
  260. package/dist/bridges/equations/be-48-grw-localization.js +9 -8
  261. package/dist/bridges/equations/be-48-grw-localization.js.map +1 -1
  262. package/dist/bridges/gravitational-lensing.d.ts +10 -0
  263. package/dist/bridges/gravitational-lensing.d.ts.map +1 -1
  264. package/dist/bridges/gravitational-lensing.js.map +1 -1
  265. package/dist/bridges/index.d.ts +125 -7
  266. package/dist/bridges/index.d.ts.map +1 -1
  267. package/dist/bridges/index.js +483 -20
  268. package/dist/bridges/index.js.map +1 -1
  269. package/dist/bridges/observations/types.d.ts +14 -0
  270. package/dist/bridges/observations/types.d.ts.map +1 -1
  271. package/dist/bridges/observations/types.js.map +1 -1
  272. package/dist/bridges/perihelion-precession.d.ts +10 -0
  273. package/dist/bridges/perihelion-precession.d.ts.map +1 -1
  274. package/dist/bridges/perihelion-precession.js.map +1 -1
  275. package/dist/bridges/rhs-registry.js +2 -2
  276. package/dist/canonical/canonical-equation.d.ts +15 -0
  277. package/dist/canonical/canonical-equation.d.ts.map +1 -1
  278. package/dist/canonical/entries/_l1-build.d.ts +1 -1
  279. package/dist/canonical/entries/_l1-build.d.ts.map +1 -1
  280. package/dist/canonical/entries/atomic.d.ts.map +1 -1
  281. package/dist/canonical/entries/atomic.js +23 -0
  282. package/dist/canonical/entries/atomic.js.map +1 -1
  283. package/dist/canonical/entries/nonmonomial.d.ts.map +1 -1
  284. package/dist/canonical/entries/nonmonomial.js +93 -0
  285. package/dist/canonical/entries/nonmonomial.js.map +1 -1
  286. package/dist/canonical/normal-form.js.map +1 -1
  287. package/dist/canonical/residual.d.ts +28 -0
  288. package/dist/canonical/residual.d.ts.map +1 -0
  289. package/dist/canonical/residual.js +31 -0
  290. package/dist/canonical/residual.js.map +1 -0
  291. package/dist/cli/command.d.ts +8 -0
  292. package/dist/cli/command.d.ts.map +1 -1
  293. package/dist/cli/command.js +10 -0
  294. package/dist/cli/command.js.map +1 -1
  295. package/dist/cli/commands/atlas.d.ts +3 -0
  296. package/dist/cli/commands/atlas.d.ts.map +1 -0
  297. package/dist/cli/commands/atlas.js +158 -0
  298. package/dist/cli/commands/atlas.js.map +1 -0
  299. package/dist/cli/commands/audit.js +3 -3
  300. package/dist/cli/commands/candidates.js +3 -3
  301. package/dist/cli/commands/canonical.js +3 -3
  302. package/dist/cli/commands/confront.d.ts.map +1 -1
  303. package/dist/cli/commands/confront.js +8 -1
  304. package/dist/cli/commands/confront.js.map +1 -1
  305. package/dist/cli/commands/connectors.js +7 -7
  306. package/dist/cli/commands/coverage.js +3 -3
  307. package/dist/cli/commands/derive.d.ts.map +1 -1
  308. package/dist/cli/commands/derive.js +40 -9
  309. package/dist/cli/commands/derive.js.map +1 -1
  310. package/dist/cli/commands/discover.d.ts.map +1 -1
  311. package/dist/cli/commands/discover.js +46 -27
  312. package/dist/cli/commands/discover.js.map +1 -1
  313. package/dist/cli/commands/evaluate.d.ts.map +1 -1
  314. package/dist/cli/commands/evaluate.js +2 -1
  315. package/dist/cli/commands/evaluate.js.map +1 -1
  316. package/dist/cli/commands/explain.d.ts.map +1 -1
  317. package/dist/cli/commands/explain.js +19 -6
  318. package/dist/cli/commands/explain.js.map +1 -1
  319. package/dist/cli/commands/index.d.ts +3 -0
  320. package/dist/cli/commands/index.d.ts.map +1 -1
  321. package/dist/cli/commands/index.js +3 -0
  322. package/dist/cli/commands/index.js.map +1 -1
  323. package/dist/cli/commands/map.d.ts.map +1 -1
  324. package/dist/cli/commands/map.js +187 -36
  325. package/dist/cli/commands/map.js.map +1 -1
  326. package/dist/cli/commands/path.d.ts +3 -0
  327. package/dist/cli/commands/path.d.ts.map +1 -0
  328. package/dist/cli/commands/path.js +228 -0
  329. package/dist/cli/commands/path.js.map +1 -0
  330. package/dist/cli/commands/predict.js +4 -4
  331. package/dist/cli/commands/priority.js +2 -2
  332. package/dist/cli/commands/probe.d.ts.map +1 -1
  333. package/dist/cli/commands/probe.js +59 -2
  334. package/dist/cli/commands/probe.js.map +1 -1
  335. package/dist/cli/commands/recover.d.ts.map +1 -1
  336. package/dist/cli/commands/recover.js +25 -6
  337. package/dist/cli/commands/recover.js.map +1 -1
  338. package/dist/cli/commands/regime.d.ts +41 -0
  339. package/dist/cli/commands/regime.d.ts.map +1 -0
  340. package/dist/cli/commands/regime.js +243 -0
  341. package/dist/cli/commands/regime.js.map +1 -0
  342. package/dist/cli/commands/symbolic.js +5 -5
  343. package/dist/cli/errors.d.ts +13 -1
  344. package/dist/cli/errors.d.ts.map +1 -1
  345. package/dist/cli/errors.js +13 -1
  346. package/dist/cli/errors.js.map +1 -1
  347. package/dist/cli/graphs.d.ts.map +1 -1
  348. package/dist/cli/graphs.js +5 -1
  349. package/dist/cli/graphs.js.map +1 -1
  350. package/dist/cli/main.d.ts.map +1 -1
  351. package/dist/cli/main.js +29 -2
  352. package/dist/cli/main.js.map +1 -1
  353. package/dist/cli/output.d.ts +6 -1
  354. package/dist/cli/output.d.ts.map +1 -1
  355. package/dist/cli/output.js.map +1 -1
  356. package/dist/cli/version.js.map +1 -1
  357. package/dist/cli-api.d.ts +21 -1
  358. package/dist/cli-api.d.ts.map +1 -1
  359. package/dist/cli-api.js +23 -1
  360. package/dist/cli-api.js.map +1 -1
  361. package/dist/composition/axis-audit.js.map +1 -1
  362. package/dist/composition/bridge-prediction.d.ts.map +1 -1
  363. package/dist/composition/bridge-prediction.js +0 -0
  364. package/dist/composition/bridge-prediction.js.map +1 -1
  365. package/dist/composition/canonical-compare.d.ts +65 -0
  366. package/dist/composition/canonical-compare.d.ts.map +1 -0
  367. package/dist/composition/canonical-compare.js +237 -0
  368. package/dist/composition/canonical-compare.js.map +1 -0
  369. package/dist/composition/canonical-graph.d.ts +2 -2
  370. package/dist/composition/canonical-graph.js +2 -2
  371. package/dist/composition/canonical-graph.js.map +1 -1
  372. package/dist/composition/canonical-prefactors.d.ts +32 -0
  373. package/dist/composition/canonical-prefactors.d.ts.map +1 -0
  374. package/dist/composition/canonical-prefactors.js +80 -0
  375. package/dist/composition/canonical-prefactors.js.map +1 -0
  376. package/dist/composition/compose-symbolic.d.ts.map +1 -1
  377. package/dist/composition/compose-symbolic.js.map +1 -1
  378. package/dist/composition/compose.d.ts.map +1 -1
  379. package/dist/composition/compose.js +80 -1
  380. package/dist/composition/compose.js.map +1 -1
  381. package/dist/composition/consequence.js.map +1 -1
  382. package/dist/composition/discovery.d.ts +20 -3
  383. package/dist/composition/discovery.d.ts.map +1 -1
  384. package/dist/composition/discovery.js +30 -4
  385. package/dist/composition/discovery.js.map +1 -1
  386. package/dist/composition/edge.d.ts +64 -0
  387. package/dist/composition/edge.d.ts.map +1 -1
  388. package/dist/composition/edge.js +29 -0
  389. package/dist/composition/edge.js.map +1 -1
  390. package/dist/composition/edges/calibration.d.ts.map +1 -1
  391. package/dist/composition/edges/calibration.js +46 -0
  392. package/dist/composition/edges/calibration.js.map +1 -1
  393. package/dist/composition/edges/catalog-quantum.d.ts.map +1 -1
  394. package/dist/composition/edges/catalog-quantum.js +9 -0
  395. package/dist/composition/edges/catalog-quantum.js.map +1 -1
  396. package/dist/composition/edges/catalog-tranche.d.ts.map +1 -1
  397. package/dist/composition/edges/catalog-tranche.js +18 -0
  398. package/dist/composition/edges/catalog-tranche.js.map +1 -1
  399. package/dist/composition/enumerate.js.map +1 -1
  400. package/dist/composition/explain.d.ts +9 -1
  401. package/dist/composition/explain.d.ts.map +1 -1
  402. package/dist/composition/explain.js +34 -8
  403. package/dist/composition/explain.js.map +1 -1
  404. package/dist/composition/expr-eval.d.ts.map +1 -1
  405. package/dist/composition/expr-eval.js.map +1 -1
  406. package/dist/composition/expr-simplify.d.ts +13 -0
  407. package/dist/composition/expr-simplify.d.ts.map +1 -1
  408. package/dist/composition/expr-simplify.js +25 -0
  409. package/dist/composition/expr-simplify.js.map +1 -1
  410. package/dist/composition/expr-subst.js.map +1 -1
  411. package/dist/composition/graph-viz-svg.d.ts.map +1 -1
  412. package/dist/composition/graph-viz.d.ts +118 -1
  413. package/dist/composition/graph-viz.d.ts.map +1 -1
  414. package/dist/composition/graph-viz.js +189 -6
  415. package/dist/composition/graph-viz.js.map +1 -1
  416. package/dist/composition/grounding.d.ts.map +1 -1
  417. package/dist/composition/grounding.js +6 -1
  418. package/dist/composition/grounding.js.map +1 -1
  419. package/dist/composition/identifiability.js.map +1 -1
  420. package/dist/composition/index.d.ts +4 -2
  421. package/dist/composition/index.d.ts.map +1 -1
  422. package/dist/composition/index.js +2 -1
  423. package/dist/composition/index.js.map +1 -1
  424. package/dist/composition/poster-source.d.ts +153 -0
  425. package/dist/composition/poster-source.d.ts.map +1 -0
  426. package/dist/composition/poster-source.js +183 -0
  427. package/dist/composition/poster-source.js.map +1 -0
  428. package/dist/composition/probe/backend-protocol.d.ts +34 -1
  429. package/dist/composition/probe/backend-protocol.d.ts.map +1 -1
  430. package/dist/composition/probe/backend-protocol.js +9 -2
  431. package/dist/composition/probe/backend-protocol.js.map +1 -1
  432. package/dist/composition/probe/candidate-store.d.ts.map +1 -1
  433. package/dist/composition/probe/corpus.d.ts +12 -0
  434. package/dist/composition/probe/corpus.d.ts.map +1 -1
  435. package/dist/composition/probe/corpus.js +100 -0
  436. package/dist/composition/probe/corpus.js.map +1 -1
  437. package/dist/composition/probe/generator.d.ts +14 -0
  438. package/dist/composition/probe/generator.d.ts.map +1 -1
  439. package/dist/composition/probe/generator.js +24 -2
  440. package/dist/composition/probe/generator.js.map +1 -1
  441. package/dist/composition/probe/limits.js.map +1 -1
  442. package/dist/composition/probe/pipeline.d.ts +5 -0
  443. package/dist/composition/probe/pipeline.d.ts.map +1 -1
  444. package/dist/composition/probe/pipeline.js +20 -3
  445. package/dist/composition/probe/pipeline.js.map +1 -1
  446. package/dist/composition/probe/problem.js.map +1 -1
  447. package/dist/composition/probe/report.d.ts.map +1 -1
  448. package/dist/composition/probe/report.js +2 -0
  449. package/dist/composition/probe/report.js.map +1 -1
  450. package/dist/composition/probe/residual.d.ts.map +1 -1
  451. package/dist/composition/probe/residual.js.map +1 -1
  452. package/dist/composition/probe/search-budget.js.map +1 -1
  453. package/dist/composition/proposed-bridges.d.ts +2 -2
  454. package/dist/composition/proposed-bridges.d.ts.map +1 -1
  455. package/dist/composition/proposed-bridges.js +1 -1
  456. package/dist/composition/proposed-bridges.js.map +1 -1
  457. package/dist/composition/retrodiction.js.map +1 -1
  458. package/dist/composition/uncertainty.d.ts +52 -2
  459. package/dist/composition/uncertainty.d.ts.map +1 -1
  460. package/dist/composition/uncertainty.js +38 -2
  461. package/dist/composition/uncertainty.js.map +1 -1
  462. package/dist/composition/user-equation.d.ts.map +1 -1
  463. package/dist/core/constants.d.ts +13 -0
  464. package/dist/core/constants.d.ts.map +1 -1
  465. package/dist/core/constants.js +13 -0
  466. package/dist/core/constants.js.map +1 -1
  467. package/dist/core/flux-rules.d.ts.map +1 -1
  468. package/dist/core/flux-rules.js.map +1 -1
  469. package/dist/core/labeled-tensor.d.ts.map +1 -1
  470. package/dist/core/regime-registry.d.ts.map +1 -1
  471. package/dist/core/regime-rule-install.js.map +1 -1
  472. package/dist/core/tensor.d.ts.map +1 -1
  473. package/dist/core/tensor.js.map +1 -1
  474. package/dist/core/types.d.ts.map +1 -1
  475. package/dist/diff/bridge-ast-gradient.js.map +1 -1
  476. package/dist/diff/bridge-gradient.d.ts +1 -1
  477. package/dist/diff/bridge-gradient.js +1 -1
  478. package/dist/dimensional/ast-types.d.ts +31 -1
  479. package/dist/dimensional/ast-types.d.ts.map +1 -1
  480. package/dist/dimensional/bridge-check.d.ts +1 -1
  481. package/dist/dimensional/bridge-check.js +1 -1
  482. package/dist/dimensional/buckingham.d.ts.map +1 -1
  483. package/dist/dimensional/connection.d.ts +2 -0
  484. package/dist/dimensional/connection.d.ts.map +1 -1
  485. package/dist/dimensional/connection.js +2 -0
  486. package/dist/dimensional/connection.js.map +1 -1
  487. package/dist/dimensional/curvature-composite.d.ts +5 -3
  488. package/dist/dimensional/curvature-composite.d.ts.map +1 -1
  489. package/dist/dimensional/curvature-composite.js +1 -0
  490. package/dist/dimensional/curvature-composite.js.map +1 -1
  491. package/dist/dimensional/curvature-invariants.d.ts +2 -0
  492. package/dist/dimensional/curvature-invariants.d.ts.map +1 -1
  493. package/dist/dimensional/curvature-invariants.js +2 -0
  494. package/dist/dimensional/curvature-invariants.js.map +1 -1
  495. package/dist/dimensional/dimension-spec.d.ts.map +1 -1
  496. package/dist/dimensional/einstein-equation.d.ts +3 -3
  497. package/dist/dimensional/einstein-equation.js +3 -3
  498. package/dist/dimensional/errors.d.ts.map +1 -1
  499. package/dist/dimensional/metric.d.ts +5 -2
  500. package/dist/dimensional/metric.d.ts.map +1 -1
  501. package/dist/dimensional/metric.js +5 -2
  502. package/dist/dimensional/metric.js.map +1 -1
  503. package/dist/dimensional/tensor-trace.js.map +1 -1
  504. package/dist/dimensional/validator-registry.js.map +1 -1
  505. package/dist/dimensional/validator.d.ts +3 -2
  506. package/dist/dimensional/validator.d.ts.map +1 -1
  507. package/dist/dimensional/validator.js +23 -4
  508. package/dist/dimensional/validator.js.map +1 -1
  509. package/dist/index.d.ts +4 -3
  510. package/dist/index.d.ts.map +1 -1
  511. package/dist/index.js +4 -1
  512. package/dist/index.js.map +1 -1
  513. package/dist/numerical/curvature-lowering-helpers.d.ts.map +1 -1
  514. package/dist/numerical/curvature-lowering-helpers.js +104 -0
  515. package/dist/numerical/curvature-lowering-helpers.js.map +1 -1
  516. package/dist/numerical/errors.d.ts.map +1 -1
  517. package/dist/numerical/errors.js.map +1 -1
  518. package/dist/numerical/float64-engine.d.ts.map +1 -1
  519. package/dist/numerical/float64-engine.js +51 -24
  520. package/dist/numerical/float64-engine.js.map +1 -1
  521. package/dist/numerical/formula-dimension.d.ts.map +1 -1
  522. package/dist/numerical/formula-dimension.js.map +1 -1
  523. package/dist/numerical/formula.d.ts.map +1 -1
  524. package/dist/numerical/formula.js.map +1 -1
  525. package/dist/numerical/geometrized.d.ts.map +1 -1
  526. package/dist/numerical/gl4-integrator.d.ts +3 -3
  527. package/dist/numerical/gl4-integrator.js +3 -3
  528. package/dist/numerical/killing.d.ts +47 -5
  529. package/dist/numerical/killing.d.ts.map +1 -1
  530. package/dist/numerical/killing.js +41 -3
  531. package/dist/numerical/killing.js.map +1 -1
  532. package/dist/numerical/klein-gordon.d.ts +2 -2
  533. package/dist/numerical/klein-gordon.js +2 -2
  534. package/dist/numerical/lowering.d.ts +2 -2
  535. package/dist/numerical/lowering.d.ts.map +1 -1
  536. package/dist/numerical/lowering.js +5 -3
  537. package/dist/numerical/lowering.js.map +1 -1
  538. package/dist/numerical/mathts-engine.d.ts.map +1 -1
  539. package/dist/numerical/mathts-engine.js.map +1 -1
  540. package/dist/numerical/metric-inverse.js.map +1 -1
  541. package/dist/numerical/perihelion-finder.d.ts +15 -13
  542. package/dist/numerical/perihelion-finder.d.ts.map +1 -1
  543. package/dist/numerical/perihelion-finder.js +15 -13
  544. package/dist/numerical/perihelion-finder.js.map +1 -1
  545. package/dist/numerical/weyl-lowering.d.ts.map +1 -1
  546. package/dist/numerical/weyl-lowering.js +90 -40
  547. package/dist/numerical/weyl-lowering.js.map +1 -1
  548. package/package.json +163 -104
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Atlas Phase 5, S5.2 — the ATLAS condition of the invalid-bridge benchmark.
3
+ *
4
+ * Design note: `docs/planning/Atlas-Phase-5-Design.md` §6.
5
+ *
6
+ * For each item the runner applies three atlas instruments — the applicability
7
+ * checker (S4.1), the composition table (S3) and the regime check (S2) — and
8
+ * emits `accept`, `reject` or `abstain`.
9
+ *
10
+ * ## The decision rule, and why accept is the HARDEST outcome to reach
11
+ *
12
+ * - **reject** when an instrument DEMONSTRABLY fires: a blocking applicability
13
+ * finding, a chain OVERCLAIMED as an exact equivalence, a structural analogy
14
+ * promoted to an equivalence, or a regime inequality checked and violated.
15
+ * - **accept** only when EVERY ENABLED instrument RAN and CLEARED: side conditions were
16
+ * stated, the applicability checker found nothing, the regime was supplied and
17
+ * every inequality was checked and held, and any claimed chain agrees with the
18
+ * table. At least one instrument must have RUN: an item that no enabled
19
+ * instrument applies to abstains, because nothing cleared it. S4.1 already fixed the principle: an empty finding list means "no rule
20
+ * fired", which is weaker than "valid". An item that leaves a check unrun has
21
+ * not been cleared by it.
22
+ * - **abstain** otherwise. Abstention is a first-class outcome and is preferred
23
+ * to a wrong accept (ROADMAP Phase 5, pre-stated criteria).
24
+ *
25
+ * The failure kind a rejection names is a MAPPING from the rule that fired, and
26
+ * it is only as good as that mapping: a dimensional inconsistency is reported as
27
+ * `notation-collision` because that is its commonest cause, not because the rule
28
+ * can see notation. The scorer grades "rejected" and "named the right kind"
29
+ * separately, so an imperfect mapping costs the second score only.
30
+ *
31
+ * @module atlas/benchmark/run-atlas
32
+ * @internal
33
+ */
34
+ import { checkApplicability } from '../applicability.js';
35
+ import { composeRelation, NO_COMPOSITE_CLAIM } from '../composition-table.js';
36
+ import { regimeHolds } from '../regime.js';
37
+ /** Every instrument on: the atlas condition as scored. @internal */
38
+ export const FULL_CONFIG = {
39
+ types: true,
40
+ assumptions: true,
41
+ dimensionsAndConventions: true,
42
+ regimes: true,
43
+ };
44
+ /** The four cumulative ablation configurations, in the plan's order. @internal */
45
+ export const ABLATION_CONFIGS = [
46
+ ['types only', { types: true, assumptions: false, dimensionsAndConventions: false, regimes: false }],
47
+ ['+ assumptions', { types: true, assumptions: true, dimensionsAndConventions: false, regimes: false }],
48
+ ['+ dimensions & conventions', { types: true, assumptions: true, dimensionsAndConventions: true, regimes: false }],
49
+ ['+ regimes', FULL_CONFIG],
50
+ ];
51
+ /** The instrument each applicability finding belongs to. */
52
+ const FINDING_INSTRUMENT = {
53
+ 'dimensional-inconsistency': 'dimensionsAndConventions',
54
+ 'convention-mismatch': 'dimensionsAndConventions',
55
+ 'convention-undeclared': 'dimensionsAndConventions',
56
+ 'division-unguarded': 'assumptions',
57
+ 'division-by-zero': 'assumptions',
58
+ 'squaring-adds-solutions': 'assumptions',
59
+ 'model-incompatibility': 'models',
60
+ };
61
+ /** Which failure kind a BLOCKING applicability finding points to. */
62
+ const FINDING_TO_FAILURE = {
63
+ 'dimensional-inconsistency': 'notation-collision',
64
+ 'convention-mismatch': 'convention-mismatch',
65
+ 'division-by-zero': 'domain-violation',
66
+ };
67
+ /** Relations that assert more than an analogy can carry. */
68
+ const STRONG = new Set(['exact-equivalence', 'derivation']);
69
+ /**
70
+ * The failure kind an OVERCLAIMED chain points to: a chain claimed as an exact
71
+ * equivalence that the table composes to something weaker.
72
+ *
73
+ * - through a restriction ⇒ the restriction's condition was dropped:
74
+ * `omitted-premise`;
75
+ * - to a derivation or a coarse-graining ⇒ the claim asserts an inverse the
76
+ * one-way step does not have: `false-inverse`.
77
+ */
78
+ function overclaimFailure(chain) {
79
+ return chain.includes('restriction') ? 'omitted-premise' : 'false-inverse';
80
+ }
81
+ /**
82
+ * Whether `claimed` follows from `composed`. The table's own non-declined
83
+ * results are exact-equivalence, derivation, restriction and coarse-graining;
84
+ * of these only exact-equivalence ⇒ derivation is an implication this module
85
+ * asserts. Anything else unequal is "not shown", never "shown".
86
+ */
87
+ const implies = (composed, claimed) => composed === claimed || (composed === 'exact-equivalence' && claimed === 'derivation');
88
+ /**
89
+ * Run the atlas condition on one item. Pure and deterministic; never throws.
90
+ *
91
+ * @internal
92
+ */
93
+ export function runAtlasOnItem(item, config = FULL_CONFIG) {
94
+ const reasons = [];
95
+ let rejectKind;
96
+ let rejected = false;
97
+ const reject = (reason, kind) => {
98
+ reasons.push(`REJECT: ${reason}`);
99
+ if (!rejected)
100
+ rejectKind = kind;
101
+ rejected = true;
102
+ };
103
+ let allRanAndCleared = true;
104
+ // An accept needs at least one instrument that actually RAN. Without this,
105
+ // an item no enabled instrument applies to is accepted with nothing checked.
106
+ let ranAny = false;
107
+ const unrun = (reason) => {
108
+ reasons.push(`UNRUN: ${reason}`);
109
+ allRanAndCleared = false;
110
+ };
111
+ // 1. Applicability — split by instrument so the ablation can switch each off.
112
+ const applicabilityOn = config.assumptions || config.dimensionsAndConventions;
113
+ if (!applicabilityOn) {
114
+ // Instrument disabled: neither run nor required.
115
+ }
116
+ else if (item.sideConditions === undefined) {
117
+ unrun('no side conditions stated, so the applicability checker has nothing to check against');
118
+ }
119
+ else {
120
+ ranAny = true;
121
+ const findings = checkApplicability({
122
+ ast: item.expr,
123
+ sideConditions: item.sideConditions,
124
+ ...(item.conventions?.premise === undefined ? {} : { premiseConventions: item.conventions.premise }),
125
+ ...(item.conventions?.conclusion === undefined
126
+ ? {}
127
+ : { conclusionConventions: item.conventions.conclusion }),
128
+ });
129
+ for (const f of findings) {
130
+ const instrument = FINDING_INSTRUMENT[f.kind];
131
+ if (instrument === 'assumptions' && !config.assumptions)
132
+ continue;
133
+ if (instrument === 'dimensionsAndConventions' && !config.dimensionsAndConventions)
134
+ continue;
135
+ if (f.severity === 'blocking')
136
+ reject(`${f.kind}: ${f.detail}`, FINDING_TO_FAILURE[f.kind]);
137
+ else {
138
+ reasons.push(`QUESTION: ${f.kind}: ${f.detail}`);
139
+ allRanAndCleared = false;
140
+ }
141
+ }
142
+ }
143
+ // 2. Composition. Only for items that claim a chain.
144
+ if (config.types && item.composedFrom !== undefined) {
145
+ ranAny = true;
146
+ const [first, second] = item.composedFrom;
147
+ const composed = composeRelation(first, second);
148
+ if (item.composedFrom.includes('structural-analogy') && STRONG.has(item.claimedRelation)) {
149
+ reject(`a chain through structural-analogy is claimed as ${item.claimedRelation}`, 'analogy-promoted');
150
+ }
151
+ else if (composed === NO_COMPOSITE_CLAIM) {
152
+ reasons.push(`QUESTION: the table declines to compose ${first} ∘ ${second}`);
153
+ allRanAndCleared = false;
154
+ }
155
+ else if (implies(composed, item.claimedRelation)) {
156
+ reasons.push(`CLEARED: ${first} ∘ ${second} composes to ${composed}, which gives ${item.claimedRelation}`);
157
+ }
158
+ else if (item.claimedRelation === 'exact-equivalence') {
159
+ reject(`${first} ∘ ${second} composes only to ${composed}; the exact equivalence is overclaimed`, overclaimFailure(item.composedFrom));
160
+ }
161
+ else {
162
+ reasons.push(`QUESTION: ${first} ∘ ${second} composes to ${composed}; the table does not show ${item.claimedRelation}`);
163
+ allRanAndCleared = false;
164
+ }
165
+ }
166
+ // 3. Regime.
167
+ if (!config.regimes) {
168
+ // Instrument disabled: neither run nor required.
169
+ }
170
+ else if (item.regime === undefined) {
171
+ unrun('no regime supplied, so the use site was never checked against a domain');
172
+ }
173
+ else {
174
+ ranAny = true;
175
+ const check = regimeHolds({ family: item.family, inequalities: item.regime.inequalities, groupDefinitions: {} }, item.regime.values);
176
+ if (check.ok === false) {
177
+ reject(`regime violated: ${check.violated.map((i) => `${i.group} ${i.op} ${i.bound}`).join(', ')}`, 'domain-violation');
178
+ }
179
+ else if (check.ok === 'unknown') {
180
+ unrun(`regime unchecked for ${check.unchecked.map((i) => i.group).join(', ')}`);
181
+ }
182
+ else if (item.regime.inequalities.length === 0) {
183
+ // regimeHolds returns true for an empty list; that is "nothing to check",
184
+ // not "checked and held" — the silent pass RegimeCheck warns about.
185
+ unrun('the regime states no inequality, so nothing was checked');
186
+ }
187
+ }
188
+ if (rejected) {
189
+ return {
190
+ itemId: item.id,
191
+ outcome: 'reject',
192
+ ...(rejectKind === undefined ? {} : { detectedFailure: rejectKind }),
193
+ reasons,
194
+ };
195
+ }
196
+ if (allRanAndCleared && !ranAny) {
197
+ reasons.push('UNRUN: no enabled instrument applies to this item, so nothing was checked');
198
+ return { itemId: item.id, outcome: 'abstain', reasons };
199
+ }
200
+ if (allRanAndCleared) {
201
+ reasons.push('ACCEPT: every instrument ran and cleared');
202
+ return { itemId: item.id, outcome: 'accept', reasons };
203
+ }
204
+ return { itemId: item.id, outcome: 'abstain', reasons };
205
+ }
206
+ /** Run the atlas condition over a set of items, in order. @internal */
207
+ export function runAtlasCondition(items, config = FULL_CONFIG) {
208
+ return items.map((item) => runAtlasOnItem(item, config));
209
+ }
210
+ //# sourceMappingURL=run-atlas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-atlas.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/run-atlas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Atlas Phase 5, S5.4 — the benchmark's statistics and power report.
3
+ *
4
+ * Design note: `docs/planning/Atlas-Phase-5-Design.md` §8.
5
+ *
6
+ * Every function here is tested against a value computed independently, not
7
+ * against its own output: the Wilson intervals against the plan's textbook
8
+ * values, McNemar against a hand-computed 2×2 table, and κ against a hand-computed
9
+ * confusion matrix. The paired-difference interval (Newcombe's method 10) has no
10
+ * textbook value in the repository; it is tested by properties that pin it to
11
+ * Wilson and to the unpaired square-and-add interval where those must agree.
12
+ *
13
+ * @module atlas/benchmark/stats
14
+ * @internal
15
+ */
16
+ /** The two-sided 95% normal quantile. @internal */
17
+ export declare const Z95 = 1.959963984540054;
18
+ /** A closed interval. @internal */
19
+ export interface Interval {
20
+ readonly lower: number;
21
+ readonly upper: number;
22
+ }
23
+ /**
24
+ * Wilson score interval for a binomial proportion.
25
+ *
26
+ * @throws Error when `n` is not a positive integer or `successes` is outside `[0, n]`.
27
+ * @internal
28
+ */
29
+ export declare function wilsonInterval(successes: number, n: number, z?: number): Interval;
30
+ /** A paired 2×2 table: a = both right, b = only A right, c = only B right, d = both wrong. @internal */
31
+ export interface PairedTable {
32
+ readonly a: number;
33
+ readonly b: number;
34
+ readonly c: number;
35
+ readonly d: number;
36
+ }
37
+ /** McNemar's test on the discordant cells. @internal */
38
+ export interface McNemarResult {
39
+ /** Continuity-corrected χ² = (|b − c| − 1)² / (b + c); 0 when b + c = 0. */
40
+ readonly chiSquared: number;
41
+ /** Exact two-sided p-value from Binomial(b + c, ½); 1 when b + c = 0. */
42
+ readonly exactP: number;
43
+ }
44
+ /**
45
+ * McNemar's paired test. The EXACT binomial p-value is the one to report at
46
+ * these sample sizes; the χ² is given because readers expect it.
47
+ *
48
+ * @internal
49
+ */
50
+ export declare function mcnemar(table: PairedTable): McNemarResult;
51
+ /**
52
+ * Newcombe's method 10: a 95% interval for the PAIRED difference in proportions
53
+ * p_A − p_B = (b − c)/n, built from the two marginal Wilson intervals and a
54
+ * correlation correction φ. Pre-registered criterion: the interval for the
55
+ * atlas-minus-baseline difference must exclude zero.
56
+ *
57
+ * Newcombe, Statistics in Medicine 17 (1998) 2635.
58
+ *
59
+ * @internal
60
+ */
61
+ export declare function pairedDifferenceInterval(table: PairedTable, z?: number): Interval & {
62
+ readonly diff: number;
63
+ };
64
+ /**
65
+ * Cohen's κ for two raters over the same items, from a square confusion matrix
66
+ * (`matrix[i][j]` = items rater 1 put in category i and rater 2 in category j).
67
+ *
68
+ * @returns NaN when chance agreement is 1 (κ is undefined there), never 1.
69
+ * @internal
70
+ */
71
+ export declare function cohensKappa(matrix: readonly (readonly number[])[]): number;
72
+ /** What a frozen set of a given size can and cannot resolve. @internal */
73
+ export interface PowerReport {
74
+ readonly nPerClass: number;
75
+ /** The assumed per-class accuracy the interval is computed at. */
76
+ readonly assumedAccuracy: number;
77
+ readonly interval: Interval;
78
+ /** Half the interval width: differences smaller than about twice this are not resolvable. */
79
+ readonly halfWidth: number;
80
+ readonly statement: string;
81
+ }
82
+ /**
83
+ * The interval a frozen set of `nPerClass` items per class can afford at an
84
+ * assumed accuracy. This is the "report the interval it can afford rather than
85
+ * the claim it cannot" line of ROADMAP Phase 5.
86
+ *
87
+ * @internal
88
+ */
89
+ export declare function powerReport(nPerClass: number, assumedAccuracy?: number): PowerReport;
90
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/atlas/benchmark/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,mDAAmD;AACnD,eAAO,MAAM,GAAG,oBAAoB,CAAC;AAErC,mCAAmC;AACnC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAM,GAAG,QAAQ,CAgB9E;AAED,wGAAwG;AACxG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AASD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAQzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,SAAM,GAAG,QAAQ,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAuB1G;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,CAsB1E;AAED,0EAA0E;AAC1E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,SAAM,GAAG,WAAW,CAgBjF"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Atlas Phase 5, S5.4 — the benchmark's statistics and power report.
3
+ *
4
+ * Design note: `docs/planning/Atlas-Phase-5-Design.md` §8.
5
+ *
6
+ * Every function here is tested against a value computed independently, not
7
+ * against its own output: the Wilson intervals against the plan's textbook
8
+ * values, McNemar against a hand-computed 2×2 table, and κ against a hand-computed
9
+ * confusion matrix. The paired-difference interval (Newcombe's method 10) has no
10
+ * textbook value in the repository; it is tested by properties that pin it to
11
+ * Wilson and to the unpaired square-and-add interval where those must agree.
12
+ *
13
+ * @module atlas/benchmark/stats
14
+ * @internal
15
+ */
16
+ /** The two-sided 95% normal quantile. @internal */
17
+ export const Z95 = 1.959963984540054;
18
+ /**
19
+ * Wilson score interval for a binomial proportion.
20
+ *
21
+ * @throws Error when `n` is not a positive integer or `successes` is outside `[0, n]`.
22
+ * @internal
23
+ */
24
+ export function wilsonInterval(successes, n, z = Z95) {
25
+ if (!Number.isInteger(n) || n <= 0)
26
+ throw new Error(`wilsonInterval: n must be a positive integer, got ${n}`);
27
+ if (!Number.isInteger(successes) || successes < 0 || successes > n) {
28
+ throw new Error(`wilsonInterval: successes must be an integer in [0, n], got ${successes}`);
29
+ }
30
+ const p = successes / n;
31
+ const z2 = z * z;
32
+ const denom = 1 + z2 / n;
33
+ const centre = (p + z2 / (2 * n)) / denom;
34
+ const half = (z / denom) * Math.sqrt((p * (1 - p)) / n + z2 / (4 * n * n));
35
+ // At x = 0 the lower bound, and at x = n the upper bound, are EXACTLY 0 and 1
36
+ // analytically; the formula reaches them only to within float rounding.
37
+ return {
38
+ lower: successes === 0 ? 0 : Math.max(0, centre - half),
39
+ upper: successes === n ? 1 : Math.min(1, centre + half),
40
+ };
41
+ }
42
+ /** `ln C(n, k)`, summed; exact enough for the n here. */
43
+ function logChoose(n, k) {
44
+ let s = 0;
45
+ for (let i = 1; i <= k; i++)
46
+ s += Math.log(n - k + i) - Math.log(i);
47
+ return s;
48
+ }
49
+ /**
50
+ * McNemar's paired test. The EXACT binomial p-value is the one to report at
51
+ * these sample sizes; the χ² is given because readers expect it.
52
+ *
53
+ * @internal
54
+ */
55
+ export function mcnemar(table) {
56
+ const n = table.b + table.c;
57
+ if (n === 0)
58
+ return { chiSquared: 0, exactP: 1 };
59
+ const chiSquared = (Math.abs(table.b - table.c) - 1) ** 2 / n;
60
+ const k = Math.min(table.b, table.c);
61
+ let tail = 0;
62
+ for (let i = 0; i <= k; i++)
63
+ tail += Math.exp(logChoose(n, i) - n * Math.LN2);
64
+ return { chiSquared, exactP: Math.min(1, 2 * tail) };
65
+ }
66
+ /**
67
+ * Newcombe's method 10: a 95% interval for the PAIRED difference in proportions
68
+ * p_A − p_B = (b − c)/n, built from the two marginal Wilson intervals and a
69
+ * correlation correction φ. Pre-registered criterion: the interval for the
70
+ * atlas-minus-baseline difference must exclude zero.
71
+ *
72
+ * Newcombe, Statistics in Medicine 17 (1998) 2635.
73
+ *
74
+ * @internal
75
+ */
76
+ export function pairedDifferenceInterval(table, z = Z95) {
77
+ const { a, b, c, d } = table;
78
+ const n = a + b + c + d;
79
+ if (n === 0)
80
+ throw new Error('pairedDifferenceInterval: empty table');
81
+ const p1 = (a + b) / n;
82
+ const p2 = (a + c) / n;
83
+ const w1 = wilsonInterval(a + b, n, z);
84
+ const w2 = wilsonInterval(a + c, n, z);
85
+ const denom = Math.sqrt((a + b) * (c + d) * (a + c) * (b + d));
86
+ let phi = 0;
87
+ if (denom > 0) {
88
+ const cross = a * d - b * c;
89
+ // Newcombe's continuity adjustment of φ, applied only when ad > bc.
90
+ phi = (cross > 0 ? Math.max(cross - n / 2, 0) : cross) / denom;
91
+ }
92
+ const diff = p1 - p2;
93
+ const dl1 = p1 - w1.lower;
94
+ const du1 = w1.upper - p1;
95
+ const dl2 = p2 - w2.lower;
96
+ const du2 = w2.upper - p2;
97
+ const lower = diff - Math.sqrt(Math.max(0, dl1 * dl1 - 2 * phi * dl1 * du2 + du2 * du2));
98
+ const upper = diff + Math.sqrt(Math.max(0, du1 * du1 - 2 * phi * du1 * dl2 + dl2 * dl2));
99
+ return { diff, lower: Math.max(-1, lower), upper: Math.min(1, upper) };
100
+ }
101
+ /**
102
+ * Cohen's κ for two raters over the same items, from a square confusion matrix
103
+ * (`matrix[i][j]` = items rater 1 put in category i and rater 2 in category j).
104
+ *
105
+ * @returns NaN when chance agreement is 1 (κ is undefined there), never 1.
106
+ * @internal
107
+ */
108
+ export function cohensKappa(matrix) {
109
+ const k = matrix.length;
110
+ if (k === 0 || matrix.some((row) => row.length !== k))
111
+ throw new Error('cohensKappa: matrix must be square and non-empty');
112
+ let n = 0;
113
+ let agree = 0;
114
+ const rows = new Array(k).fill(0);
115
+ const cols = new Array(k).fill(0);
116
+ for (let i = 0; i < k; i++) {
117
+ for (let j = 0; j < k; j++) {
118
+ const v = matrix[i][j];
119
+ n += v;
120
+ rows[i] += v;
121
+ cols[j] += v;
122
+ if (i === j)
123
+ agree += v;
124
+ }
125
+ }
126
+ if (n === 0)
127
+ throw new Error('cohensKappa: no ratings');
128
+ const po = agree / n;
129
+ let pe = 0;
130
+ for (let i = 0; i < k; i++)
131
+ pe += (rows[i] / n) * (cols[i] / n);
132
+ if (pe === 1)
133
+ return Number.NaN;
134
+ return (po - pe) / (1 - pe);
135
+ }
136
+ /**
137
+ * The interval a frozen set of `nPerClass` items per class can afford at an
138
+ * assumed accuracy. This is the "report the interval it can afford rather than
139
+ * the claim it cannot" line of ROADMAP Phase 5.
140
+ *
141
+ * @internal
142
+ */
143
+ export function powerReport(nPerClass, assumedAccuracy = 0.8) {
144
+ const successes = Math.round(assumedAccuracy * nPerClass);
145
+ const interval = wilsonInterval(successes, nPerClass);
146
+ const halfWidth = (interval.upper - interval.lower) / 2;
147
+ const pct = (x) => `${(100 * x).toFixed(1)}%`;
148
+ return {
149
+ nPerClass,
150
+ assumedAccuracy,
151
+ interval,
152
+ halfWidth,
153
+ statement: `With ${nPerClass} items per class at ${pct(assumedAccuracy)} accuracy, the 95% Wilson interval ` +
154
+ `is [${pct(interval.lower)}, ${pct(interval.upper)}] (±${pct(halfWidth)}). Two methods whose ` +
155
+ `accuracies differ by less than about ${pct(2 * halfWidth)} cannot be separated on this set ` +
156
+ 'by unpaired intervals; the paired McNemar design is what narrows it.',
157
+ };
158
+ }
159
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/atlas/benchmark/stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Atlas Phase 6, S6.1 — scoring a benchmark condition against the answer key.
3
+ *
4
+ * Design note: `docs/planning/Atlas-Phase-5-Design.md` §9.
5
+ *
6
+ * This module receives the answer key as an ARGUMENT. It never reads the scorer
7
+ * half of the fixture tree itself: the import guard forbids any `src/` path into
8
+ * it. The orchestration script (`scripts/run-atlas-study.mjs`) loads the labels
9
+ * and passes them in.
10
+ *
11
+ * **An empty item set produces NO metrics, not zero metrics.** `scoreCondition`
12
+ * throws on it: a table of zeros and NaNs from an empty set is indistinguishable,
13
+ * at a glance, from a condition that failed everything.
14
+ *
15
+ * @module atlas/benchmark/study
16
+ * @internal
17
+ */
18
+ import type { FailureKind } from './types.js';
19
+ import type { Interval, McNemarResult } from './stats.js';
20
+ /** One condition's answer for one item. @internal */
21
+ export interface ConditionAnswer {
22
+ readonly itemId: string;
23
+ readonly outcome: 'accept' | 'reject' | 'abstain';
24
+ readonly detectedFailure?: FailureKind;
25
+ }
26
+ /** The answer key for one item — scorer-side, never in the public half. @internal */
27
+ export interface ItemLabel {
28
+ readonly itemId: string;
29
+ readonly kind: 'valid' | 'invalid';
30
+ /** For an invalid item: the failure kind a correct rejection names. */
31
+ readonly failureKind?: FailureKind;
32
+ }
33
+ /** One reason an answer key does not fit its item set. @internal */
34
+ export interface LabelProblem {
35
+ readonly id: string;
36
+ readonly problem: string;
37
+ }
38
+ /**
39
+ * Check an answer key against the item ids it must cover: exactly one label per
40
+ * item, no label for an unknown item, a known failure kind on every invalid
41
+ * label and none on a valid one. Takes the key as an ARGUMENT, like everything
42
+ * here, because no `src/` file may read the scorer half.
43
+ *
44
+ * @param itemIds - the ids of the frozen items.
45
+ * @param labels - the answer key.
46
+ * @returns every problem found, labels first in key order, then missing labels
47
+ * in item order; empty means the key fits.
48
+ * @internal
49
+ */
50
+ export declare function validateLabels(itemIds: readonly string[], labels: readonly ItemLabel[]): LabelProblem[];
51
+ /** A condition's metrics on the frozen set. @internal */
52
+ export interface ConditionMetrics {
53
+ readonly condition: string;
54
+ readonly nValid: number;
55
+ readonly nInvalid: number;
56
+ /** Invalid items rejected, with its Wilson interval. */
57
+ readonly invalidRejected: number;
58
+ readonly invalidRejectionInterval: Interval;
59
+ /** Of the rejected invalid items, how many named the right failure kind. */
60
+ readonly kindNamedCorrectly: number;
61
+ /** Invalid items ACCEPTED: the error the benchmark exists to count. */
62
+ readonly wrongAccepts: number;
63
+ /** Valid items accepted. */
64
+ readonly validAccepted: number;
65
+ /** Valid items rejected. */
66
+ readonly falseRejects: number;
67
+ /** All abstentions, reported and never folded into accuracy. */
68
+ readonly abstentions: number;
69
+ /** Items the condition did not answer at all: counted, never dropped. */
70
+ readonly unanswered: number;
71
+ }
72
+ /**
73
+ * Score one condition against the answer key.
74
+ *
75
+ * @throws Error when the key is empty (no measurement exists), or when an answer
76
+ * names an item the key does not contain.
77
+ * @internal
78
+ */
79
+ export declare function scoreCondition(condition: string, answers: readonly ConditionAnswer[], labels: readonly ItemLabel[]): ConditionMetrics;
80
+ /** The paired comparison of two conditions' rejection of invalid items. @internal */
81
+ export interface PairedRejection {
82
+ readonly conditionA: string;
83
+ readonly conditionB: string;
84
+ readonly table: {
85
+ readonly a: number;
86
+ readonly b: number;
87
+ readonly c: number;
88
+ readonly d: number;
89
+ };
90
+ readonly difference: Interval & {
91
+ readonly diff: number;
92
+ };
93
+ readonly mcnemar: McNemarResult;
94
+ /** The pre-registered criterion: the interval for A − B excludes zero, above it. */
95
+ readonly aBetterExcludingZero: boolean;
96
+ }
97
+ /**
98
+ * Compare two conditions on the SAME invalid items. An item counts as "right"
99
+ * for a condition when it was rejected; an unanswered item is "wrong", not dropped.
100
+ *
101
+ * @throws Error when there are no invalid items.
102
+ * @internal
103
+ */
104
+ export declare function pairedRejection(conditionA: string, answersA: readonly ConditionAnswer[], conditionB: string, answersB: readonly ConditionAnswer[], labels: readonly ItemLabel[]): PairedRejection;
105
+ /** One row of the ablation: a configuration's metrics and its step over the previous one. @internal */
106
+ export interface AblationRow {
107
+ readonly configuration: string;
108
+ readonly metrics: ConditionMetrics;
109
+ /** Paired rejection of THIS configuration vs the previous one; absent for the first. */
110
+ readonly stepOverPrevious?: PairedRejection;
111
+ }
112
+ /**
113
+ * Score a sequence of named condition runs as an ablation: each row is scored,
114
+ * and each row after the first is compared, paired on the same invalid items,
115
+ * against the row before it — so the table shows what each added layer bought.
116
+ *
117
+ * @internal
118
+ */
119
+ export declare function scoreAblation(runs: ReadonlyArray<readonly [string, readonly ConditionAnswer[]]>, labels: readonly ItemLabel[]): AblationRow[];
120
+ //# sourceMappingURL=study.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"study.d.ts","sourceRoot":"","sources":["../../../src/atlas/benchmark/study.ts"],"names":[],"mappings":"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"}