@photivra/engine 1.5.0 → 2.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 (1078) hide show
  1. package/CHANGELOG.md +393 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +116 -9
  56. package/dist/capture/native-raw-development.js +221 -62
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +65 -12
  62. package/dist/capture/native-raw.js +81 -19
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/host-yield.d.ts +7 -0
  236. package/dist/facade/host-yield.js +23 -0
  237. package/dist/facade/host-yield.js.map +1 -0
  238. package/dist/facade/scene-radiance.d.ts +117 -0
  239. package/dist/facade/scene-radiance.js +205 -0
  240. package/dist/facade/scene-radiance.js.map +1 -0
  241. package/dist/facade/simulate-capture.d.ts +284 -0
  242. package/dist/facade/simulate-capture.js +1026 -0
  243. package/dist/facade/simulate-capture.js.map +1 -0
  244. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  245. package/dist/gpu/chart-radiance-gpu.js +176 -0
  246. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  247. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  248. package/dist/gpu/image-kernel-accelerator.js +720 -0
  249. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  250. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  251. package/dist/gpu/image-kernel-execution.js +84 -0
  252. package/dist/gpu/image-kernel-execution.js.map +1 -0
  253. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  254. package/dist/gpu/sensor-stage-gpu.js +317 -0
  255. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  256. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  257. package/dist/gpu/temporal-sum-gpu.js +150 -0
  258. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  259. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  260. package/dist/gpu/webgpu-runtime.js +215 -0
  261. package/dist/gpu/webgpu-runtime.js.map +1 -0
  262. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  263. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  264. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  265. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  266. package/dist/gpu/wgsl-kernels.js +365 -0
  267. package/dist/gpu/wgsl-kernels.js.map +1 -0
  268. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  269. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  270. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  271. package/dist/index.d.ts +89 -25
  272. package/dist/index.js +59 -15
  273. package/dist/index.js.map +1 -1
  274. package/dist/motion/camera-rotation.d.ts +92 -40
  275. package/dist/motion/camera-rotation.js +84 -47
  276. package/dist/motion/camera-rotation.js.map +1 -1
  277. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  278. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  279. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  280. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  281. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  282. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  283. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  284. package/dist/motion/capture-rotation-trajectory.js +36 -26
  285. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  286. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  287. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  288. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  289. package/dist/motion/extended-object-projection.d.ts +19 -16
  290. package/dist/motion/extended-object-projection.js +38 -18
  291. package/dist/motion/extended-object-projection.js.map +1 -1
  292. package/dist/motion/projected-motion.d.ts +18 -17
  293. package/dist/motion/projected-motion.js +25 -17
  294. package/dist/motion/projected-motion.js.map +1 -1
  295. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  296. package/dist/motion/temporal-exposure-sum.js +141 -0
  297. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  298. package/dist/motion/video-sequence.d.ts +111 -0
  299. package/dist/motion/video-sequence.js +179 -0
  300. package/dist/motion/video-sequence.js.map +1 -0
  301. package/dist/optics/aperture.d.ts +14 -15
  302. package/dist/optics/aperture.js +13 -11
  303. package/dist/optics/aperture.js.map +1 -1
  304. package/dist/optics/atmospheric-haze.d.ts +83 -0
  305. package/dist/optics/atmospheric-haze.js +113 -0
  306. package/dist/optics/atmospheric-haze.js.map +1 -0
  307. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  308. package/dist/optics/brown-conrady-distortion.js +291 -0
  309. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  310. package/dist/optics/circle-of-confusion.d.ts +10 -10
  311. package/dist/optics/circle-of-confusion.js +15 -11
  312. package/dist/optics/circle-of-confusion.js.map +1 -1
  313. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  314. package/dist/optics/complex-pupil-psf.js +190 -98
  315. package/dist/optics/complex-pupil-psf.js.map +1 -1
  316. package/dist/optics/depth-of-field.d.ts +25 -15
  317. package/dist/optics/depth-of-field.js +67 -27
  318. package/dist/optics/depth-of-field.js.map +1 -1
  319. package/dist/optics/diffraction.d.ts +14 -13
  320. package/dist/optics/diffraction.js +14 -10
  321. package/dist/optics/diffraction.js.map +1 -1
  322. package/dist/optics/focus-breathing.d.ts +88 -27
  323. package/dist/optics/focus-breathing.js +114 -23
  324. package/dist/optics/focus-breathing.js.map +1 -1
  325. package/dist/optics/focus-state.d.ts +18 -18
  326. package/dist/optics/focus-state.js +21 -15
  327. package/dist/optics/focus-state.js.map +1 -1
  328. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  329. package/dist/optics/front-of-lens-filter.js +259 -88
  330. package/dist/optics/front-of-lens-filter.js.map +1 -1
  331. package/dist/optics/illumination-vignetting.d.ts +16 -17
  332. package/dist/optics/illumination-vignetting.js +40 -17
  333. package/dist/optics/illumination-vignetting.js.map +1 -1
  334. package/dist/optics/irradiance-convolution.d.ts +59 -0
  335. package/dist/optics/irradiance-convolution.js +138 -0
  336. package/dist/optics/irradiance-convolution.js.map +1 -0
  337. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  338. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  339. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  340. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  341. package/dist/optics/lens-psf-kernels.js +175 -0
  342. package/dist/optics/lens-psf-kernels.js.map +1 -0
  343. package/dist/optics/lens-psf-profile.d.ts +78 -46
  344. package/dist/optics/lens-psf-profile.js +335 -124
  345. package/dist/optics/lens-psf-profile.js.map +1 -1
  346. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  347. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  348. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  349. package/dist/optics/polygon-diffraction.d.ts +80 -23
  350. package/dist/optics/polygon-diffraction.js +130 -25
  351. package/dist/optics/polygon-diffraction.js.map +1 -1
  352. package/dist/optics/profile-contract.d.ts +5 -6
  353. package/dist/optics/profile-contract.js +14 -11
  354. package/dist/optics/profile-contract.js.map +1 -1
  355. package/dist/optics/psf-foundation.d.ts +23 -23
  356. package/dist/optics/psf-foundation.js +24 -21
  357. package/dist/optics/psf-foundation.js.map +1 -1
  358. package/dist/optics/pupil-vignetting.d.ts +118 -0
  359. package/dist/optics/pupil-vignetting.js +264 -0
  360. package/dist/optics/pupil-vignetting.js.map +1 -0
  361. package/dist/optics/radial-distortion.d.ts +34 -33
  362. package/dist/optics/radial-distortion.js +37 -30
  363. package/dist/optics/radial-distortion.js.map +1 -1
  364. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  365. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  366. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  367. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  368. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  369. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  370. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  371. package/dist/optics/sensor-aperture-rays.js +32 -14
  372. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  373. package/dist/optics/sensor-environment-query.d.ts +81 -16
  374. package/dist/optics/sensor-environment-query.js +145 -12
  375. package/dist/optics/sensor-environment-query.js.map +1 -1
  376. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  377. package/dist/optics/sensor-psf-quadrature.js +18 -11
  378. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  379. package/dist/optics/sensor-psf-support.d.ts +8 -6
  380. package/dist/optics/sensor-psf-support.js +8 -5
  381. package/dist/optics/sensor-psf-support.js.map +1 -1
  382. package/dist/optics/stray-light.d.ts +22 -19
  383. package/dist/optics/stray-light.js +18 -12
  384. package/dist/optics/stray-light.js.map +1 -1
  385. package/dist/optics/thin-lens.d.ts +10 -9
  386. package/dist/optics/thin-lens.js +12 -8
  387. package/dist/optics/thin-lens.js.map +1 -1
  388. package/dist/optics/zernike-wavefront.d.ts +154 -0
  389. package/dist/optics/zernike-wavefront.js +352 -0
  390. package/dist/optics/zernike-wavefront.js.map +1 -0
  391. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  392. package/dist/output/capture-corrected-sdr.js +16 -8
  393. package/dist/output/capture-corrected-sdr.js.map +1 -1
  394. package/dist/output/capture-geometry.d.ts +34 -36
  395. package/dist/output/capture-geometry.js +52 -32
  396. package/dist/output/capture-geometry.js.map +1 -1
  397. package/dist/output/capture-sdr.d.ts +7 -6
  398. package/dist/output/capture-sdr.js +11 -8
  399. package/dist/output/capture-sdr.js.map +1 -1
  400. package/dist/output/crop.d.ts +22 -6
  401. package/dist/output/crop.js +40 -6
  402. package/dist/output/crop.js.map +1 -1
  403. package/dist/output/geometric-transforms.d.ts +60 -23
  404. package/dist/output/geometric-transforms.js +111 -24
  405. package/dist/output/geometric-transforms.js.map +1 -1
  406. package/dist/output/lens-corrections.d.ts +27 -19
  407. package/dist/output/lens-corrections.js +29 -13
  408. package/dist/output/lens-corrections.js.map +1 -1
  409. package/dist/output/native-capture-sdr.d.ts +71 -16
  410. package/dist/output/native-capture-sdr.js +190 -33
  411. package/dist/output/native-capture-sdr.js.map +1 -1
  412. package/dist/output/png-encoder.d.ts +65 -0
  413. package/dist/output/png-encoder.js +461 -0
  414. package/dist/output/png-encoder.js.map +1 -0
  415. package/dist/output/print-contrast-reference.d.ts +10 -9
  416. package/dist/output/print-contrast-reference.js +10 -8
  417. package/dist/output/print-contrast-reference.js.map +1 -1
  418. package/dist/output/print-detail.d.ts +18 -17
  419. package/dist/output/print-detail.js +12 -10
  420. package/dist/output/print-detail.js.map +1 -1
  421. package/dist/output/print-jpeg.d.ts +26 -5
  422. package/dist/output/print-jpeg.js +117 -50
  423. package/dist/output/print-jpeg.js.map +1 -1
  424. package/dist/output/print-plan.d.ts +19 -19
  425. package/dist/output/print-plan.js +11 -10
  426. package/dist/output/print-plan.js.map +1 -1
  427. package/dist/output/print-region-statistics.d.ts +14 -15
  428. package/dist/output/print-region-statistics.js +11 -11
  429. package/dist/output/print-region-statistics.js.map +1 -1
  430. package/dist/output/sdr-rendering.d.ts +48 -10
  431. package/dist/output/sdr-rendering.js +114 -25
  432. package/dist/output/sdr-rendering.js.map +1 -1
  433. package/dist/output/subject-framing-crop.d.ts +6 -10
  434. package/dist/output/subject-framing-crop.js +23 -13
  435. package/dist/output/subject-framing-crop.js.map +1 -1
  436. package/dist/processing/demosaic.d.ts +90 -0
  437. package/dist/processing/demosaic.js +275 -0
  438. package/dist/processing/demosaic.js.map +1 -0
  439. package/dist/processing/denoise.d.ts +68 -0
  440. package/dist/processing/denoise.js +214 -0
  441. package/dist/processing/denoise.js.map +1 -0
  442. package/dist/processing/focus-stacking.d.ts +17 -0
  443. package/dist/processing/focus-stacking.js +80 -0
  444. package/dist/processing/focus-stacking.js.map +1 -0
  445. package/dist/processing/hdr.d.ts +54 -0
  446. package/dist/processing/hdr.js +172 -0
  447. package/dist/processing/hdr.js.map +1 -0
  448. package/dist/processing/image-ops.d.ts +66 -0
  449. package/dist/processing/image-ops.js +192 -0
  450. package/dist/processing/image-ops.js.map +1 -0
  451. package/dist/processing/panorama.d.ts +51 -0
  452. package/dist/processing/panorama.js +305 -0
  453. package/dist/processing/panorama.js.map +1 -0
  454. package/dist/processing/processing-task.d.ts +85 -0
  455. package/dist/processing/processing-task.js +164 -0
  456. package/dist/processing/processing-task.js.map +1 -0
  457. package/dist/processing/tone-mapping.d.ts +69 -0
  458. package/dist/processing/tone-mapping.js +310 -0
  459. package/dist/processing/tone-mapping.js.map +1 -0
  460. package/dist/schema/camera.d.ts +5 -4
  461. package/dist/schema/illumination-spectral.d.ts +13 -19
  462. package/dist/schema/illumination-spectral.js +23 -19
  463. package/dist/schema/illumination-spectral.js.map +1 -1
  464. package/dist/schema/illumination-temporal.d.ts +12 -15
  465. package/dist/schema/illumination-temporal.js +43 -28
  466. package/dist/schema/illumination-temporal.js.map +1 -1
  467. package/dist/schema/illumination.d.ts +5 -4
  468. package/dist/schema/illumination.js +55 -20
  469. package/dist/schema/illumination.js.map +1 -1
  470. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  471. package/dist/schema/scene-radiance-temporal.js +26 -23
  472. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  473. package/dist/schema/scene-radiance.d.ts +17 -17
  474. package/dist/schema/scene-radiance.js +56 -34
  475. package/dist/schema/scene-radiance.js.map +1 -1
  476. package/dist/schema/scene.d.ts +14 -13
  477. package/dist/schema/validation.d.ts +0 -1
  478. package/dist/schema/validation.js +17 -15
  479. package/dist/schema/validation.js.map +1 -1
  480. package/dist/sensor/accumulated-charge.d.ts +45 -64
  481. package/dist/sensor/accumulated-charge.js +41 -47
  482. package/dist/sensor/accumulated-charge.js.map +1 -1
  483. package/dist/sensor/architecture.d.ts +22 -25
  484. package/dist/sensor/architecture.js +17 -16
  485. package/dist/sensor/architecture.js.map +1 -1
  486. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  487. package/dist/sensor/camera-saturation-capacity.js +36 -34
  488. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  489. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  490. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  491. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  492. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  493. package/dist/sensor/capture-mode-timing.js +24 -21
  494. package/dist/sensor/capture-mode-timing.js.map +1 -1
  495. package/dist/sensor/capture-mode.d.ts +28 -30
  496. package/dist/sensor/capture-mode.js +33 -31
  497. package/dist/sensor/capture-mode.js.map +1 -1
  498. package/dist/sensor/color-sampling.d.ts +30 -33
  499. package/dist/sensor/color-sampling.js +32 -37
  500. package/dist/sensor/color-sampling.js.map +1 -1
  501. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  502. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  503. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  504. package/dist/sensor/dark-current.d.ts +53 -49
  505. package/dist/sensor/dark-current.js +87 -46
  506. package/dist/sensor/dark-current.js.map +1 -1
  507. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  508. package/dist/sensor/environment-photo-signal.js +127 -46
  509. package/dist/sensor/environment-photo-signal.js.map +1 -1
  510. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  511. package/dist/sensor/eqe-electron-rate.js +34 -14
  512. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  513. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  514. package/dist/sensor/eqe-local-exposure.js +15 -11
  515. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  516. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  517. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  518. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  519. package/dist/sensor/exposure-window.d.ts +48 -34
  520. package/dist/sensor/exposure-window.js +77 -36
  521. package/dist/sensor/exposure-window.js.map +1 -1
  522. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  523. package/dist/sensor/fixed-pattern-noise.js +166 -0
  524. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  525. package/dist/sensor/iso-gain.d.ts +44 -0
  526. package/dist/sensor/iso-gain.js +119 -0
  527. package/dist/sensor/iso-gain.js.map +1 -0
  528. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  529. package/dist/sensor/iso-signal-chain.js +52 -66
  530. package/dist/sensor/iso-signal-chain.js.map +1 -1
  531. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  532. package/dist/sensor/local-exposure-binding.js +22 -18
  533. package/dist/sensor/local-exposure-binding.js.map +1 -1
  534. package/dist/sensor/optical-stack.d.ts +36 -40
  535. package/dist/sensor/optical-stack.js +34 -37
  536. package/dist/sensor/optical-stack.js.map +1 -1
  537. package/dist/sensor/photon-energy.d.ts +22 -28
  538. package/dist/sensor/photon-energy.js +42 -34
  539. package/dist/sensor/photon-energy.js.map +1 -1
  540. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  541. package/dist/sensor/physical-charge-capacity.js +35 -36
  542. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  543. package/dist/sensor/pixel-pitch.d.ts +2 -3
  544. package/dist/sensor/pixel-pitch.js +4 -2
  545. package/dist/sensor/pixel-pitch.js.map +1 -1
  546. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  547. package/dist/sensor/radiometry-readiness.js +20 -17
  548. package/dist/sensor/radiometry-readiness.js.map +1 -1
  549. package/dist/sensor/raw-readout.d.ts +173 -83
  550. package/dist/sensor/raw-readout.js +425 -160
  551. package/dist/sensor/raw-readout.js.map +1 -1
  552. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  553. package/dist/sensor/raw-reconstruction.js +200 -47
  554. package/dist/sensor/raw-reconstruction.js.map +1 -1
  555. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  556. package/dist/sensor/readout-exposure-linkage.js +125 -27
  557. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  558. package/dist/sensor/readout-timing.d.ts +43 -44
  559. package/dist/sensor/readout-timing.js +38 -30
  560. package/dist/sensor/readout-timing.js.map +1 -1
  561. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  562. package/dist/sensor/response-application-compatibility.js +35 -34
  563. package/dist/sensor/response-application-compatibility.js.map +1 -1
  564. package/dist/sensor/response-operating-range.d.ts +26 -35
  565. package/dist/sensor/response-operating-range.js +40 -39
  566. package/dist/sensor/response-operating-range.js.map +1 -1
  567. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  568. package/dist/sensor/responsivity-photocurrent.js +57 -40
  569. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  570. package/dist/sensor/sampling-aperture.d.ts +21 -25
  571. package/dist/sensor/sampling-aperture.js +29 -28
  572. package/dist/sensor/sampling-aperture.js.map +1 -1
  573. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  574. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  575. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  576. package/dist/sensor/sensor-geometry.d.ts +28 -32
  577. package/dist/sensor/sensor-geometry.js +35 -20
  578. package/dist/sensor/sensor-geometry.js.map +1 -1
  579. package/dist/sensor/signal-noise.d.ts +14 -16
  580. package/dist/sensor/signal-noise.js +15 -13
  581. package/dist/sensor/signal-noise.js.map +1 -1
  582. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  583. package/dist/sensor/spatial-sample-reduction.js +39 -48
  584. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  585. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  586. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  587. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  588. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  589. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  590. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  591. package/dist/sensor/spectral-coverage.d.ts +6 -9
  592. package/dist/sensor/spectral-coverage.js +9 -6
  593. package/dist/sensor/spectral-coverage.js.map +1 -1
  594. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  595. package/dist/sensor/spectral-quadrature.js +38 -48
  596. package/dist/sensor/spectral-quadrature.js.map +1 -1
  597. package/dist/sensor/spectral-response.d.ts +53 -41
  598. package/dist/sensor/spectral-response.js +80 -47
  599. package/dist/sensor/spectral-response.js.map +1 -1
  600. package/dist/sensor/stochastic-seed.d.ts +50 -0
  601. package/dist/sensor/stochastic-seed.js +123 -0
  602. package/dist/sensor/stochastic-seed.js.map +1 -0
  603. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  604. package/dist/sensor/temporal-eqe-sum.js +5 -6
  605. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  606. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  607. package/dist/sensor/temporal-photo-signal.js +11 -10
  608. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  609. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  610. package/dist/sensor/temporal-sample-binding.js +3 -3
  611. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  612. package/dist/simulation/poc-simulation.d.ts +16 -16
  613. package/dist/simulation/poc-simulation.js +20 -15
  614. package/dist/simulation/poc-simulation.js.map +1 -1
  615. package/dist/stabilization/camera-shake.d.ts +42 -18
  616. package/dist/stabilization/camera-shake.js +43 -20
  617. package/dist/stabilization/camera-shake.js.map +1 -1
  618. package/dist/stabilization/system.d.ts +44 -41
  619. package/dist/stabilization/system.js +196 -108
  620. package/dist/stabilization/system.js.map +1 -1
  621. package/docs/AGENT_GUIDE.md +183 -0
  622. package/docs/API_REFERENCE.md +761 -2
  623. package/docs/QUICK_START.md +495 -0
  624. package/docs/USAGE.md +1719 -714
  625. package/docs/api/camera-equivalent-focal-length.md +6 -7
  626. package/docs/api/camera-field-of-view.md +16 -8
  627. package/docs/api/camera-lens-projection.md +246 -0
  628. package/docs/api/camera-projected-object-size.md +6 -5
  629. package/docs/api/capture-capture-export-metadata.md +10 -10
  630. package/docs/api/capture-dng-import.md +134 -0
  631. package/docs/api/capture-environment-raw-producer.md +17 -11
  632. package/docs/api/capture-export-jpeg.md +16 -0
  633. package/docs/api/capture-focus-control.md +25 -47
  634. package/docs/api/capture-linear-encoding.md +21 -12
  635. package/docs/api/capture-lossless-jpeg.md +49 -0
  636. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  637. package/docs/api/capture-native-environment-raw.md +161 -4
  638. package/docs/api/capture-native-raw-development.md +69 -8
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +21 -10
  641. package/docs/api/capture-packed-sensor-raw.md +156 -0
  642. package/docs/api/capture-photographic-export.md +69 -31
  643. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  644. package/docs/api/capture-raw-white-level.md +37 -0
  645. package/docs/api/capture-release-sequence.md +6 -7
  646. package/docs/api/capture-sensor-raw-frame.md +6 -6
  647. package/docs/api/capture-sensor-raw-producer.md +17 -11
  648. package/docs/api/capture-simulated-capture.md +15 -15
  649. package/docs/api/color-camera-color-matrix.md +103 -0
  650. package/docs/api/color-capture-color.md +22 -11
  651. package/docs/api/color-chromatic-adaptation.md +82 -0
  652. package/docs/api/color-color-difference.md +134 -0
  653. package/docs/api/color-color-matching-functions.md +259 -0
  654. package/docs/api/color-colorimetry-math.md +54 -0
  655. package/docs/api/color-gamut-mapping.md +72 -0
  656. package/docs/api/color-illuminants.md +280 -0
  657. package/docs/api/color-rgb-color-spaces.md +151 -0
  658. package/docs/api/color-sensor-color-development.md +27 -0
  659. package/docs/api/color-srgb-icc.md +2 -4
  660. package/docs/api/color-white-balance.md +95 -19
  661. package/docs/api/composition-image-formation-plan.md +124 -95
  662. package/docs/api/composition-plan-consumer.md +7 -7
  663. package/docs/api/core-calculation-result.md +18 -14
  664. package/docs/api/core-configuration-error.md +1 -1
  665. package/docs/api/core-image-formation.md +7 -7
  666. package/docs/api/core-scientific-assurance.md +12 -10
  667. package/docs/api/core-spectral-composition.md +14 -14
  668. package/docs/api/core-spectral.md +6 -6
  669. package/docs/api/core-validation.md +3 -3
  670. package/docs/api/core-version.md +7 -6
  671. package/docs/api/equipment-exposure-capabilities.md +11 -10
  672. package/docs/api/equipment-generic-tier-assets.md +7 -2
  673. package/docs/api/equipment-generic-tier-presets.md +6 -6
  674. package/docs/api/equipment-iso-capabilities.md +18 -18
  675. package/docs/api/equipment-metering-capabilities.md +6 -6
  676. package/docs/api/equipment-release-capabilities.md +4 -4
  677. package/docs/api/exports.json +2213 -8
  678. package/docs/api/exposure-exposure-duration-control.md +9 -9
  679. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  680. package/docs/api/exposure-exposure.md +10 -10
  681. package/docs/api/exposure-flash-ttl.md +182 -0
  682. package/docs/api/exposure-flash.md +183 -28
  683. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  684. package/docs/api/exposure-metering-target.md +9 -8
  685. package/docs/api/exposure-metering-temporal.md +8 -8
  686. package/docs/api/exposure-metering.md +69 -9
  687. package/docs/api/exposure-program-line.md +6 -5
  688. package/docs/api/facade-chart-radiance-batch.md +96 -0
  689. package/docs/api/facade-chart-scenes.md +240 -0
  690. package/docs/api/facade-scene-radiance.md +122 -0
  691. package/docs/api/facade-simulate-capture.md +324 -0
  692. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  693. package/docs/api/gpu-image-kernel-execution.md +152 -0
  694. package/docs/api/motion-camera-rotation.md +43 -26
  695. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  696. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  697. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  698. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  699. package/docs/api/motion-extended-object-projection.md +10 -8
  700. package/docs/api/motion-projected-motion.md +8 -8
  701. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  702. package/docs/api/motion-video-sequence.md +159 -0
  703. package/docs/api/optics-aperture.md +8 -8
  704. package/docs/api/optics-atmospheric-haze.md +104 -0
  705. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  706. package/docs/api/optics-circle-of-confusion.md +5 -4
  707. package/docs/api/optics-complex-pupil-psf.md +57 -16
  708. package/docs/api/optics-depth-of-field.md +12 -6
  709. package/docs/api/optics-diffraction.md +8 -7
  710. package/docs/api/optics-focus-breathing.md +104 -16
  711. package/docs/api/optics-focus-state.md +9 -10
  712. package/docs/api/optics-front-of-lens-filter.md +72 -14
  713. package/docs/api/optics-illumination-vignetting.md +10 -10
  714. package/docs/api/optics-irradiance-convolution.md +95 -0
  715. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  716. package/docs/api/optics-lens-psf-kernels.md +72 -0
  717. package/docs/api/optics-lens-psf-profile.md +48 -26
  718. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  719. package/docs/api/optics-polygon-diffraction.md +78 -13
  720. package/docs/api/optics-profile-contract.md +4 -4
  721. package/docs/api/optics-psf-foundation.md +12 -12
  722. package/docs/api/optics-pupil-vignetting.md +132 -0
  723. package/docs/api/optics-radial-distortion.md +12 -12
  724. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  725. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  726. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  727. package/docs/api/optics-sensor-environment-query.md +52 -9
  728. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  729. package/docs/api/optics-stray-light.md +12 -11
  730. package/docs/api/optics-thin-lens.md +4 -3
  731. package/docs/api/optics-zernike-wavefront.md +229 -0
  732. package/docs/api/output-capture-corrected-sdr.md +10 -7
  733. package/docs/api/output-capture-geometry.md +35 -36
  734. package/docs/api/output-capture-sdr.md +4 -4
  735. package/docs/api/output-crop.md +7 -4
  736. package/docs/api/output-geometric-transforms.md +65 -19
  737. package/docs/api/output-lens-corrections.md +17 -15
  738. package/docs/api/output-native-capture-sdr.md +26 -13
  739. package/docs/api/output-png-encoder.md +105 -0
  740. package/docs/api/output-print-contrast-reference.md +8 -8
  741. package/docs/api/output-print-detail.md +14 -14
  742. package/docs/api/output-print-jpeg.md +22 -5
  743. package/docs/api/output-print-plan.md +18 -18
  744. package/docs/api/output-print-region-statistics.md +14 -14
  745. package/docs/api/output-sdr-rendering.md +52 -10
  746. package/docs/api/output-subject-framing-crop.md +5 -6
  747. package/docs/api/processing-demosaic.md +120 -0
  748. package/docs/api/processing-denoise.md +148 -0
  749. package/docs/api/processing-focus-stacking.md +41 -0
  750. package/docs/api/processing-hdr.md +113 -0
  751. package/docs/api/processing-panorama.md +82 -0
  752. package/docs/api/processing-processing-task.md +107 -0
  753. package/docs/api/processing-tone-mapping.md +142 -0
  754. package/docs/api/schema-camera.md +6 -4
  755. package/docs/api/schema-illumination-spectral.md +10 -11
  756. package/docs/api/schema-illumination-temporal.md +13 -15
  757. package/docs/api/schema-illumination.md +4 -4
  758. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  759. package/docs/api/schema-scene-radiance.md +18 -17
  760. package/docs/api/schema-scene.md +9 -9
  761. package/docs/api/schema-validation.md +1 -1
  762. package/docs/api/sensor-accumulated-charge.md +12 -20
  763. package/docs/api/sensor-architecture.md +15 -16
  764. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  765. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  766. package/docs/api/sensor-capture-mode-timing.md +9 -9
  767. package/docs/api/sensor-capture-mode.md +29 -30
  768. package/docs/api/sensor-color-sampling.md +31 -33
  769. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  770. package/docs/api/sensor-dark-current.md +30 -14
  771. package/docs/api/sensor-environment-photo-signal.md +13 -6
  772. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  773. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  774. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  775. package/docs/api/sensor-exposure-window.md +24 -24
  776. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  777. package/docs/api/sensor-iso-gain.md +63 -0
  778. package/docs/api/sensor-iso-signal-chain.md +13 -22
  779. package/docs/api/sensor-local-exposure-binding.md +12 -13
  780. package/docs/api/sensor-optical-stack.md +37 -40
  781. package/docs/api/sensor-photon-energy.md +10 -11
  782. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  783. package/docs/api/sensor-pixel-pitch.md +1 -1
  784. package/docs/api/sensor-radiometry-readiness.md +9 -9
  785. package/docs/api/sensor-raw-readout.md +118 -52
  786. package/docs/api/sensor-raw-reconstruction.md +97 -20
  787. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  788. package/docs/api/sensor-readout-timing.md +33 -35
  789. package/docs/api/sensor-response-application-compatibility.md +9 -11
  790. package/docs/api/sensor-response-operating-range.md +14 -18
  791. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  792. package/docs/api/sensor-sampling-aperture.md +22 -25
  793. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  794. package/docs/api/sensor-sensor-geometry.md +23 -24
  795. package/docs/api/sensor-signal-noise.md +10 -10
  796. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  797. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  798. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  799. package/docs/api/sensor-spectral-coverage.md +5 -5
  800. package/docs/api/sensor-spectral-quadrature.md +33 -35
  801. package/docs/api/sensor-spectral-response.md +28 -16
  802. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  803. package/docs/api/simulation-poc-simulation.md +17 -16
  804. package/docs/api/stabilization-camera-shake.md +29 -10
  805. package/docs/api/stabilization-system.md +25 -21
  806. package/docs/examples/production-request.json +3821 -2157
  807. package/docs/examples/simulate-capture.mjs +14 -0
  808. package/llms.txt +35 -0
  809. package/package.json +32 -12
  810. package/AGENTS.md +0 -674
  811. package/CONTRIBUTING.md +0 -76
  812. package/DCO +0 -33
  813. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  814. package/dist/camera/field-of-view.d.ts.map +0 -1
  815. package/dist/camera/projected-object-size.d.ts.map +0 -1
  816. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  817. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  818. package/dist/capture/export-jpeg.d.ts.map +0 -1
  819. package/dist/capture/export-tiff.d.ts.map +0 -1
  820. package/dist/capture/focus-control.d.ts.map +0 -1
  821. package/dist/capture/linear-encoding.d.ts.map +0 -1
  822. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  823. package/dist/capture/native-raw-development.d.ts.map +0 -1
  824. package/dist/capture/native-raw.d.ts.map +0 -1
  825. package/dist/capture/photographic-export.d.ts.map +0 -1
  826. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  827. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  828. package/dist/capture/release-sequence.d.ts.map +0 -1
  829. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  830. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  831. package/dist/capture/simulated-capture.d.ts.map +0 -1
  832. package/dist/color/capture-color.d.ts.map +0 -1
  833. package/dist/color/sensor-color-development.d.ts.map +0 -1
  834. package/dist/color/srgb-icc.d.ts.map +0 -1
  835. package/dist/color/srgb-transfer.d.ts.map +0 -1
  836. package/dist/color/white-balance.d.ts.map +0 -1
  837. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  838. package/dist/composition/plan-consumer.d.ts.map +0 -1
  839. package/dist/core/calculation-result.d.ts.map +0 -1
  840. package/dist/core/canonical-json.d.ts.map +0 -1
  841. package/dist/core/configuration-error.d.ts.map +0 -1
  842. package/dist/core/evidence-provenance.d.ts.map +0 -1
  843. package/dist/core/image-formation.d.ts.map +0 -1
  844. package/dist/core/owned-data.d.ts.map +0 -1
  845. package/dist/core/record-validation.d.ts.map +0 -1
  846. package/dist/core/scientific-assurance.d.ts.map +0 -1
  847. package/dist/core/spectral-composition.d.ts.map +0 -1
  848. package/dist/core/spectral.d.ts.map +0 -1
  849. package/dist/core/validation.d.ts.map +0 -1
  850. package/dist/core/version.d.ts.map +0 -1
  851. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  852. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  853. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  854. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  855. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  856. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  857. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  858. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  859. package/dist/exposure/exposure.d.ts.map +0 -1
  860. package/dist/exposure/flash.d.ts.map +0 -1
  861. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  862. package/dist/exposure/metering-target.d.ts.map +0 -1
  863. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  864. package/dist/exposure/metering.d.ts.map +0 -1
  865. package/dist/exposure/program-line.d.ts.map +0 -1
  866. package/dist/index.d.ts.map +0 -1
  867. package/dist/motion/camera-rotation.d.ts.map +0 -1
  868. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  869. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  870. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  871. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  872. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  873. package/dist/motion/projected-motion.d.ts.map +0 -1
  874. package/dist/optics/aperture.d.ts.map +0 -1
  875. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  876. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  877. package/dist/optics/depth-of-field.d.ts.map +0 -1
  878. package/dist/optics/diffraction.d.ts.map +0 -1
  879. package/dist/optics/focus-breathing.d.ts.map +0 -1
  880. package/dist/optics/focus-state.d.ts.map +0 -1
  881. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  882. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  883. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  884. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  885. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  886. package/dist/optics/profile-contract.d.ts.map +0 -1
  887. package/dist/optics/psf-foundation.d.ts.map +0 -1
  888. package/dist/optics/radial-distortion.d.ts.map +0 -1
  889. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  890. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  891. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  892. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  893. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  894. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  895. package/dist/optics/stray-light.d.ts.map +0 -1
  896. package/dist/optics/thin-lens.d.ts.map +0 -1
  897. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  898. package/dist/output/capture-geometry.d.ts.map +0 -1
  899. package/dist/output/capture-sdr.d.ts.map +0 -1
  900. package/dist/output/crop.d.ts.map +0 -1
  901. package/dist/output/geometric-transforms.d.ts.map +0 -1
  902. package/dist/output/lens-corrections.d.ts.map +0 -1
  903. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  904. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  905. package/dist/output/print-detail.d.ts.map +0 -1
  906. package/dist/output/print-jpeg.d.ts.map +0 -1
  907. package/dist/output/print-plan.d.ts.map +0 -1
  908. package/dist/output/print-region-statistics.d.ts.map +0 -1
  909. package/dist/output/sdr-rendering.d.ts.map +0 -1
  910. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  911. package/dist/schema/camera.d.ts.map +0 -1
  912. package/dist/schema/camera.js +0 -3
  913. package/dist/schema/camera.js.map +0 -1
  914. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  915. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  916. package/dist/schema/illumination.d.ts.map +0 -1
  917. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  918. package/dist/schema/scene-radiance.d.ts.map +0 -1
  919. package/dist/schema/scene.d.ts.map +0 -1
  920. package/dist/schema/scene.js +0 -3
  921. package/dist/schema/scene.js.map +0 -1
  922. package/dist/schema/validation.d.ts.map +0 -1
  923. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  924. package/dist/sensor/architecture.d.ts.map +0 -1
  925. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  926. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  927. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  928. package/dist/sensor/capture-mode.d.ts.map +0 -1
  929. package/dist/sensor/color-sampling.d.ts.map +0 -1
  930. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  931. package/dist/sensor/dark-current.d.ts.map +0 -1
  932. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  933. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  934. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  935. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  936. package/dist/sensor/exposure-window.d.ts.map +0 -1
  937. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  938. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  939. package/dist/sensor/optical-stack.d.ts.map +0 -1
  940. package/dist/sensor/photon-energy.d.ts.map +0 -1
  941. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  942. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  943. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  944. package/dist/sensor/raw-readout.d.ts.map +0 -1
  945. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  946. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  947. package/dist/sensor/readout-timing.d.ts.map +0 -1
  948. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  949. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  950. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  951. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  952. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  953. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  954. package/dist/sensor/signal-noise.d.ts.map +0 -1
  955. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  956. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  957. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  958. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  959. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  960. package/dist/sensor/spectral-response.d.ts.map +0 -1
  961. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  962. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  963. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  964. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  965. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  966. package/dist/stabilization/system.d.ts.map +0 -1
  967. package/docs/API_STYLE.md +0 -235
  968. package/docs/ARCHITECTURE.md +0 -356
  969. package/docs/AUTOMATION_COORDINATION.md +0 -190
  970. package/docs/CAPTURE_COLOR.md +0 -25
  971. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  972. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  973. package/docs/CAPTURE_SDR.md +0 -22
  974. package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
  975. package/docs/DEVELOPERS.md +0 -68
  976. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  977. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  978. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  979. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  980. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  981. package/docs/IMAGE_FORMATION.md +0 -247
  982. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  983. package/docs/MOTION_AND_SIGNAL.md +0 -250
  984. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  985. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  986. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  987. package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
  988. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  989. package/docs/PERFORMANCE_BASELINE.md +0 -56
  990. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  991. package/docs/PHYSICS_FOUNDATION.md +0 -426
  992. package/docs/POC_API.md +0 -278
  993. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  994. package/docs/POC_PROJECTION_REUSE.md +0 -124
  995. package/docs/PRINT_195_196_REVIEW.md +0 -93
  996. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  997. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  998. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  999. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  1000. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1001. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1002. package/docs/PRINT_PLANNING.md +0 -75
  1003. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1004. package/docs/PROCESSED_OUTPUT.md +0 -157
  1005. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1006. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1007. package/docs/PROVENANCE.md +0 -115
  1008. package/docs/PSF_FOUNDATION.md +0 -165
  1009. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1010. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1011. package/docs/RELEASE_1_0.md +0 -66
  1012. package/docs/RELEASE_1_0_1.md +0 -61
  1013. package/docs/RELEASE_1_1_0.md +0 -25
  1014. package/docs/RELEASE_1_2_0.md +0 -51
  1015. package/docs/RELEASE_1_3_0.md +0 -15
  1016. package/docs/RELEASE_1_4_0.md +0 -23
  1017. package/docs/RELEASE_1_5_0.md +0 -105
  1018. package/docs/RELEASE_AUDIT.md +0 -39
  1019. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1020. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1021. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1022. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1023. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1024. package/docs/SDR_RENDERING.md +0 -33
  1025. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1026. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1027. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1028. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1029. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1030. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1031. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1032. package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
  1033. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1034. package/docs/SIMULATED_CAPTURE.md +0 -65
  1035. package/docs/STABILIZATION.md +0 -234
  1036. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1037. package/docs/TIER_ACCEPTANCE.md +0 -129
  1038. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1039. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1040. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1041. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1042. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1043. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1044. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1045. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1046. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1047. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1048. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1049. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1050. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1051. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1052. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1053. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1054. package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
  1055. package/docs/validation/documentation-fragments.json +0 -212
  1056. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1057. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1058. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1061. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1062. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1065. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1066. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1067. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1068. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1069. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1070. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1071. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1072. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1073. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1074. package/docs/validation/print-detail-capabilities.json +0 -103
  1075. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1076. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1077. package/docs/validation/release-audit-inventory.json +0 -1306
  1078. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1,17 +1,56 @@
1
1
  /**
2
- * Validate the shared record/allowlist mechanics without choosing a domain's
3
- * schema or diagnostics. Returns the original record; does not clone, freeze,
4
- * strip fields, require missing fields, or validate child values. As with the
5
- * existing domain parsers, the allowlist covers own enumerable string keys.
2
+ * Checks that a value is a plain record whose keys are all on an allowlist. The caller
3
+ * supplies the domain's schema and error messages.
4
+ *
5
+ * Returns the original record. It does not copy, freeze or strip fields, require missing
6
+ * fields, or check child values. Like the domain parsers, it checks own enumerable string keys.
7
+ * From 2.0.0 an unknown key also names the field: `<message> Unknown field "<field>".`
6
8
  */
7
9
  export declare function requireAllowlistedRecord(value: unknown, allowedKeys: readonly string[], message: string): Record<string, unknown>;
8
10
  /**
9
- * Shared opaque public identity grammar: 1–128 ASCII characters, starting with
10
- * an alphanumeric character, followed by alphanumerics, dot, underscore, colon
11
- * or hyphen. No trimming, case conversion or path/URL interpretation occurs.
12
- * A domain retains the meaning of the identity and its exact error message.
11
+ * Shared grammar for public identifiers: 1–128 ASCII characters. The first is a letter or
12
+ * digit. The rest are letters, digits, dot, underscore, colon or hyphen.
13
+ *
14
+ * The identifier is opaque: no trimming, case conversion or path/URL interpretation. Each
15
+ * domain decides what the identifier means and keeps its exact error message.
13
16
  */
14
17
  export declare function requirePublicOpaqueId(value: unknown, message: string): string;
15
18
  /** Same grammar for domains that combine ID rejection with other field checks. */
16
19
  export declare function isPublicOpaqueId(value: unknown): value is string;
17
- //# sourceMappingURL=record-validation.d.ts.map
20
+ /**
21
+ * Guard for a public function's input object. If it receives null, a primitive or an array,
22
+ * it throws the domain's InvalidConfigurationError, never a raw TypeError from reading a
23
+ * property. It does not check fields.
24
+ */
25
+ export declare function requireInputObject(value: unknown, label: string): void;
26
+ /** Root-function input guard for a required array argument; see requireInputObject. */
27
+ export declare function requireInputArray(value: unknown, label: string): void;
28
+ /**
29
+ * Input object guard for simple scalar calculators that also rejects unknown keys. A misspelled
30
+ * or wrong-unit field (for example focusDistanceMm instead of focusDistanceM) is never silently ignored.
31
+ */
32
+ export declare function requireInputKeys(value: unknown, functionName: string, allowedKeys: readonly string[]): void;
33
+ /**
34
+ * Rejects any own enumerable key of a versioned or engine record that is not on its allowlist, with
35
+ * the message `<path> has unknown field "<field>".` The caller has already checked that `record` is
36
+ * a plain object. Used at every object level of the `parse*()` record parsers, so a misspelled or
37
+ * stale field in a stored profile fails instead of being silently dropped.
38
+ */
39
+ export declare function rejectUnknownFields(record: object, allowedKeys: readonly string[], path: string): void;
40
+ /**
41
+ * Checks the fixed-value flags that a parser writes into its own output (for example
42
+ * `sceneRadianceCalculated: false`). They may be passed back in, so a parsed record parses again,
43
+ * but only with exactly the fixed value; any other value is rejected rather than ignored.
44
+ */
45
+ export declare function requireFixedFieldsWhenPresent(record: Readonly<Record<string, unknown>>, fixed: Readonly<Record<string, boolean | string>>, path: string): void;
46
+ /**
47
+ * Fields of the shared relative / not-quantified uncertainty union used by many evidence-backed
48
+ * profiles: `{ kind: "relative", fraction, basis }` or `{ kind: "not-quantified", limitation }`.
49
+ */
50
+ export declare const UNCERTAINTY_VARIANT_FIELDS: Readonly<Record<string, readonly string[]>>;
51
+ /**
52
+ * For a record whose allowed fields depend on a discriminator (for example `kind` or
53
+ * `schemaVersion`), rejects fields that the selected variant does not define. An unrecognized
54
+ * discriminator is left to the caller, which reports it with its own message.
55
+ */
56
+ export declare function rejectUnknownVariantFields(record: Readonly<Record<string, unknown>>, discriminator: string, allowedByVariant: Readonly<Record<string, readonly string[]>>, path: string): void;
@@ -1,35 +1,36 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Validate the shared record/allowlist mechanics without choosing a domain's schema or diagnostics.
5
- * Returns the original record; does not clone, freeze, strip fields, require missing fields, or
6
- * validate child values. As with the existing domain parsers, the allowlist covers own enumerable
7
- * string keys.
8
- * Shared opaque public identity grammar: 1–128 ASCII characters, starting with an alphanumeric
9
- * character, followed by alphanumerics, dot, underscore, colon or hyphen. No trimming, case conversion
10
- * or path/URL interpretation occurs. A domain retains the meaning of the identity and its exact error
11
- * message.
3
+ * Shared input checks used by the domain parsers: plain-record and allowed-key checks, the
4
+ * public identifier grammar, and guards for the top-level argument of a public function.
5
+ * Each domain keeps its own schema and error messages.
12
6
  * @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
13
7
  */
14
8
  import { InvalidConfigurationError } from "./configuration-error.js";
15
9
  /**
16
- * Validate the shared record/allowlist mechanics without choosing a domain's
17
- * schema or diagnostics. Returns the original record; does not clone, freeze,
18
- * strip fields, require missing fields, or validate child values. As with the
19
- * existing domain parsers, the allowlist covers own enumerable string keys.
10
+ * Checks that a value is a plain record whose keys are all on an allowlist. The caller
11
+ * supplies the domain's schema and error messages.
12
+ *
13
+ * Returns the original record. It does not copy, freeze or strip fields, require missing
14
+ * fields, or check child values. Like the domain parsers, it checks own enumerable string keys.
15
+ * From 2.0.0 an unknown key also names the field: `<message> Unknown field "<field>".`
20
16
  */
21
17
  export function requireAllowlistedRecord(value, allowedKeys, message) {
22
- if (value === null || typeof value !== "object" || Array.isArray(value) ||
23
- Object.keys(value).some(key => !allowedKeys.includes(key))) {
18
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
24
19
  throw new InvalidConfigurationError(message);
25
20
  }
21
+ for (const key in value) {
22
+ if (Object.hasOwn(value, key) && !allowedKeys.includes(key)) {
23
+ throw new InvalidConfigurationError(`${message} Unknown field ${JSON.stringify(key)}.`);
24
+ }
25
+ }
26
26
  return value;
27
27
  }
28
28
  /**
29
- * Shared opaque public identity grammar: 1–128 ASCII characters, starting with
30
- * an alphanumeric character, followed by alphanumerics, dot, underscore, colon
31
- * or hyphen. No trimming, case conversion or path/URL interpretation occurs.
32
- * A domain retains the meaning of the identity and its exact error message.
29
+ * Shared grammar for public identifiers: 1–128 ASCII characters. The first is a letter or
30
+ * digit. The rest are letters, digits, dot, underscore, colon or hyphen.
31
+ *
32
+ * The identifier is opaque: no trimming, case conversion or path/URL interpretation. Each
33
+ * domain decides what the identifier means and keeps its exact error message.
33
34
  */
34
35
  export function requirePublicOpaqueId(value, message) {
35
36
  if (!isPublicOpaqueId(value)) {
@@ -41,4 +42,77 @@ export function requirePublicOpaqueId(value, message) {
41
42
  export function isPublicOpaqueId(value) {
42
43
  return typeof value === "string" && /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(value);
43
44
  }
45
+ /**
46
+ * Guard for a public function's input object. If it receives null, a primitive or an array,
47
+ * it throws the domain's InvalidConfigurationError, never a raw TypeError from reading a
48
+ * property. It does not check fields.
49
+ */
50
+ export function requireInputObject(value, label) {
51
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
52
+ throw new InvalidConfigurationError(`${label} must be an object.`);
53
+ }
54
+ }
55
+ /** Root-function input guard for a required array argument; see requireInputObject. */
56
+ export function requireInputArray(value, label) {
57
+ if (!Array.isArray(value)) {
58
+ throw new InvalidConfigurationError(`${label} must be an array.`);
59
+ }
60
+ }
61
+ /**
62
+ * Input object guard for simple scalar calculators that also rejects unknown keys. A misspelled
63
+ * or wrong-unit field (for example focusDistanceMm instead of focusDistanceM) is never silently ignored.
64
+ */
65
+ export function requireInputKeys(value, functionName, allowedKeys) {
66
+ requireInputObject(value, `${functionName} input`);
67
+ // for-in over own keys avoids allocating a key array on hot scalar paths.
68
+ for (const key in value) {
69
+ if (Object.hasOwn(value, key) && !allowedKeys.includes(key)) {
70
+ throw new InvalidConfigurationError(`${functionName} input has unknown field ${JSON.stringify(key)}.`);
71
+ }
72
+ }
73
+ }
74
+ /**
75
+ * Rejects any own enumerable key of a versioned or engine record that is not on its allowlist, with
76
+ * the message `<path> has unknown field "<field>".` The caller has already checked that `record` is
77
+ * a plain object. Used at every object level of the `parse*()` record parsers, so a misspelled or
78
+ * stale field in a stored profile fails instead of being silently dropped.
79
+ */
80
+ export function rejectUnknownFields(record, allowedKeys, path) {
81
+ for (const key in record) {
82
+ if (Object.hasOwn(record, key) && !allowedKeys.includes(key)) {
83
+ throw new InvalidConfigurationError(`${path} has unknown field ${JSON.stringify(key)}.`);
84
+ }
85
+ }
86
+ }
87
+ /**
88
+ * Checks the fixed-value flags that a parser writes into its own output (for example
89
+ * `sceneRadianceCalculated: false`). They may be passed back in, so a parsed record parses again,
90
+ * but only with exactly the fixed value; any other value is rejected rather than ignored.
91
+ */
92
+ export function requireFixedFieldsWhenPresent(record, fixed, path) {
93
+ for (const key of Object.keys(fixed)) {
94
+ if (record[key] !== undefined && record[key] !== fixed[key]) {
95
+ throw new InvalidConfigurationError(`${path}.${key} must be ${JSON.stringify(fixed[key])} when supplied.`);
96
+ }
97
+ }
98
+ }
99
+ /**
100
+ * Fields of the shared relative / not-quantified uncertainty union used by many evidence-backed
101
+ * profiles: `{ kind: "relative", fraction, basis }` or `{ kind: "not-quantified", limitation }`.
102
+ */
103
+ export const UNCERTAINTY_VARIANT_FIELDS = Object.freeze({
104
+ relative: Object.freeze(["kind", "fraction", "basis"]),
105
+ "not-quantified": Object.freeze(["kind", "limitation"])
106
+ });
107
+ /**
108
+ * For a record whose allowed fields depend on a discriminator (for example `kind` or
109
+ * `schemaVersion`), rejects fields that the selected variant does not define. An unrecognized
110
+ * discriminator is left to the caller, which reports it with its own message.
111
+ */
112
+ export function rejectUnknownVariantFields(record, discriminator, allowedByVariant, path) {
113
+ const variant = record[discriminator];
114
+ if (typeof variant === "string" && Object.hasOwn(allowedByVariant, variant)) {
115
+ rejectUnknownFields(record, allowedByVariant[variant], path);
116
+ }
117
+ }
44
118
  //# sourceMappingURL=record-validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"record-validation.js","sourceRoot":"","sources":["../../src/core/record-validation.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAc,EAAE,WAA8B,EAAE,OAAe;IAE/D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc,EAAE,OAAe;IACnE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC"}
1
+ {"version":3,"file":"record-validation.js","sourceRoot":"","sources":["../../src/core/record-validation.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Shared input checks used by the domain parsers: plain-record and allowed-key checks, the\n * public identifier grammar, and guards for the top-level argument of a public function.\n * Each domain keeps its own schema and error messages.\n * @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.\n */\n\nimport { InvalidConfigurationError } from \"./configuration-error.js\";\n\n/**\n * Checks that a value is a plain record whose keys are all on an allowlist. The caller\n * supplies the domain's schema and error messages.\n *\n * Returns the original record. It does not copy, freeze or strip fields, require missing\n * fields, or check child values. Like the domain parsers, it checks own enumerable string keys.\n * From 2.0.0 an unknown key also names the field: `<message> Unknown field \"<field>\".`\n */\nexport function requireAllowlistedRecord(\n value: unknown, allowedKeys: readonly string[], message: string\n): Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new InvalidConfigurationError(message);\n }\n for (const key in value) {\n if (Object.hasOwn(value, key) && !allowedKeys.includes(key)) {\n throw new InvalidConfigurationError(`${message} Unknown field ${JSON.stringify(key)}.`);\n }\n }\n return value as Record<string, unknown>;\n}\n\n/**\n * Shared grammar for public identifiers: 1–128 ASCII characters. The first is a letter or\n * digit. The rest are letters, digits, dot, underscore, colon or hyphen.\n *\n * The identifier is opaque: no trimming, case conversion or path/URL interpretation. Each\n * domain decides what the identifier means and keeps its exact error message.\n */\nexport function requirePublicOpaqueId(value: unknown, message: string): string {\n if (!isPublicOpaqueId(value)) {\n throw new InvalidConfigurationError(message);\n }\n return value;\n}\n\n/** Same grammar for domains that combine ID rejection with other field checks. */\nexport function isPublicOpaqueId(value: unknown): value is string {\n return typeof value === \"string\" && /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(value);\n}\n\n/**\n * Guard for a public function's input object. If it receives null, a primitive or an array,\n * it throws the domain's InvalidConfigurationError, never a raw TypeError from reading a\n * property. It does not check fields.\n */\nexport function requireInputObject(value: unknown, label: string): void {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new InvalidConfigurationError(`${label} must be an object.`);\n }\n}\n\n/** Root-function input guard for a required array argument; see requireInputObject. */\nexport function requireInputArray(value: unknown, label: string): void {\n if (!Array.isArray(value)) {\n throw new InvalidConfigurationError(`${label} must be an array.`);\n }\n}\n\n/**\n * Input object guard for simple scalar calculators that also rejects unknown keys. A misspelled\n * or wrong-unit field (for example focusDistanceMm instead of focusDistanceM) is never silently ignored.\n */\nexport function requireInputKeys(value: unknown, functionName: string, allowedKeys: readonly string[]): void {\n requireInputObject(value, `${functionName} input`);\n // for-in over own keys avoids allocating a key array on hot scalar paths.\n for (const key in value as object) {\n if (Object.hasOwn(value as object, key) && !allowedKeys.includes(key)) {\n throw new InvalidConfigurationError(`${functionName} input has unknown field ${JSON.stringify(key)}.`);\n }\n }\n}\n\n/**\n * Rejects any own enumerable key of a versioned or engine record that is not on its allowlist, with\n * the message `<path> has unknown field \"<field>\".` The caller has already checked that `record` is\n * a plain object. Used at every object level of the `parse*()` record parsers, so a misspelled or\n * stale field in a stored profile fails instead of being silently dropped.\n */\nexport function rejectUnknownFields(record: object, allowedKeys: readonly string[], path: string): void {\n for (const key in record) {\n if (Object.hasOwn(record, key) && !allowedKeys.includes(key)) {\n throw new InvalidConfigurationError(`${path} has unknown field ${JSON.stringify(key)}.`);\n }\n }\n}\n\n/**\n * Checks the fixed-value flags that a parser writes into its own output (for example\n * `sceneRadianceCalculated: false`). They may be passed back in, so a parsed record parses again,\n * but only with exactly the fixed value; any other value is rejected rather than ignored.\n */\nexport function requireFixedFieldsWhenPresent(\n record: Readonly<Record<string, unknown>>, fixed: Readonly<Record<string, boolean | string>>, path: string\n): void {\n for (const key of Object.keys(fixed)) {\n if (record[key] !== undefined && record[key] !== fixed[key]) {\n throw new InvalidConfigurationError(`${path}.${key} must be ${JSON.stringify(fixed[key])} when supplied.`);\n }\n }\n}\n\n/**\n * Fields of the shared relative / not-quantified uncertainty union used by many evidence-backed\n * profiles: `{ kind: \"relative\", fraction, basis }` or `{ kind: \"not-quantified\", limitation }`.\n */\nexport const UNCERTAINTY_VARIANT_FIELDS: Readonly<Record<string, readonly string[]>> = Object.freeze({\n relative: Object.freeze([\"kind\", \"fraction\", \"basis\"]),\n \"not-quantified\": Object.freeze([\"kind\", \"limitation\"])\n});\n\n/**\n * For a record whose allowed fields depend on a discriminator (for example `kind` or\n * `schemaVersion`), rejects fields that the selected variant does not define. An unrecognized\n * discriminator is left to the caller, which reports it with its own message.\n */\nexport function rejectUnknownVariantFields(\n record: Readonly<Record<string, unknown>>, discriminator: string,\n allowedByVariant: Readonly<Record<string, readonly string[]>>, path: string\n): void {\n const variant = record[discriminator];\n if (typeof variant === \"string\" && Object.hasOwn(allowedByVariant, variant)) {\n rejectUnknownFields(record, allowedByVariant[variant]!, path);\n }\n}\n"]}
@@ -1,8 +1,9 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Composes scientific-status, evidence and uncertainty semantics without inventing a numeric aggregate
4
- * uncertainty. Required downstream status is bounded by the weakest required input. Component
5
- * evidence/uncertainty is preserved verbatim after validation.
2
+ * Combines the scientific status, evidence and uncertainty of several pipeline stages into one
3
+ * record, without inventing a single numeric uncertainty.
4
+ *
5
+ * The combined status can be no better than the weakest required input. Each component's
6
+ * evidence and uncertainty is kept exactly as given, after validation.
6
7
  * @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
7
8
  */
8
9
  import { type CalculationQuality } from "./calculation-result.js";
@@ -68,11 +69,13 @@ export type ComposedScientificUncertaintyStatus = {
68
69
  limitation: string;
69
70
  };
70
71
  /**
71
- * Cross-stage status and retained evidence for one declared scientific result.
72
- * Required incomplete/approximate children constrain the aggregate; deterministic
73
- * processing cannot upgrade approximation to calibration. Uncertainty components
74
- * remain independently identified unless an explicit mathematical propagation model
75
- * justifies a combination. A count of successful stages is not an accuracy bound.
72
+ * Combined status and kept evidence for one declared scientific result across stages.
73
+ *
74
+ * - A required input that is incomplete or approximate limits the combined status.
75
+ * - Deterministic processing cannot turn an approximation into a calibration.
76
+ * - Uncertainty components stay separate unless an explicit mathematical propagation
77
+ * model justifies combining them.
78
+ * - A count of successful stages is not an accuracy bound.
76
79
  */
77
80
  export interface ComposedScientificAssurance {
78
81
  version: typeof SCIENTIFIC_ASSURANCE_CONTRACT_VERSION;
@@ -91,11 +94,10 @@ export interface ComposeScientificAssuranceInput {
91
94
  components: readonly ScientificAssuranceComponent[];
92
95
  }
93
96
  /**
94
- * Composes scientific-status, evidence and uncertainty semantics without
95
- * inventing a numeric aggregate uncertainty.
97
+ * Combines the scientific status, evidence and uncertainty of several inputs into one
98
+ * record, without inventing a single numeric uncertainty.
96
99
  *
97
- * Required downstream status is bounded by the weakest required input.
98
- * Component evidence/uncertainty is preserved verbatim after validation.
100
+ * The combined status can be no better than the weakest required input. Each component's
101
+ * evidence and uncertainty is kept exactly as given, after validation.
99
102
  */
100
103
  export declare function composeScientificAssurance(input: ComposeScientificAssuranceInput): ComposedScientificAssurance;
101
- //# sourceMappingURL=scientific-assurance.d.ts.map
@@ -1,14 +1,17 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Composes scientific-status, evidence and uncertainty semantics without inventing a numeric aggregate
5
- * uncertainty. Required downstream status is bounded by the weakest required input. Component
6
- * evidence/uncertainty is preserved verbatim after validation.
3
+ * Combines the scientific status, evidence and uncertainty of several pipeline stages into one
4
+ * record, without inventing a single numeric uncertainty.
5
+ *
6
+ * The combined status can be no better than the weakest required input. Each component's
7
+ * evidence and uncertainty is kept exactly as given, after validation.
7
8
  * @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
8
9
  */
9
10
  import { validateCalculationQuality } from "./calculation-result.js";
10
11
  import { InvalidScientificInputError } from "./validation.js";
11
12
  import { parseEvidenceProvenance } from "./evidence-provenance.js";
13
+ import { requireInputKeys } from "./record-validation.js";
14
+ import { InvalidConfigurationError } from "./configuration-error.js";
12
15
  export const SCIENTIFIC_ASSURANCE_CONTRACT_VERSION = "0.1.0";
13
16
  const SCIENTIFIC_STATUSES = new Set([
14
17
  "calibrated",
@@ -29,7 +32,7 @@ const SOURCE_KINDS = new Set([
29
32
  function requireNonEmptyString(value, path) {
30
33
  if (typeof value !== "string" ||
31
34
  value.trim().length === 0) {
32
- throw new InvalidScientificInputError(path +
35
+ throw new InvalidConfigurationError(path +
33
36
  " must be a non-empty string.");
34
37
  }
35
38
  return value.trim();
@@ -45,7 +48,7 @@ function requireNonNegativeFinite(value, path) {
45
48
  }
46
49
  function validateSourceIdentity(value, path) {
47
50
  if (!SOURCE_KINDS.has(value.kind)) {
48
- throw new InvalidScientificInputError(path + ".kind is invalid.");
51
+ throw new InvalidConfigurationError(path + ".kind is invalid.");
49
52
  }
50
53
  return {
51
54
  kind: value.kind,
@@ -119,11 +122,11 @@ function validateUncertainty(value, path) {
119
122
  reason: requireNonEmptyString(value.reason, path + ".reason")
120
123
  };
121
124
  }
122
- throw new InvalidScientificInputError(path + ".kind is invalid.");
125
+ throw new InvalidConfigurationError(path + ".kind is invalid.");
123
126
  }
124
127
  function validateLimitations(value, path) {
125
128
  if (!Array.isArray(value)) {
126
- throw new InvalidScientificInputError(path + " must be an array.");
129
+ throw new InvalidConfigurationError(path + " must be an array.");
127
130
  }
128
131
  const parsed = value.map((entry, index) => requireNonEmptyString(entry, path +
129
132
  "[" +
@@ -142,15 +145,15 @@ function validateComponent(value, index) {
142
145
  "]";
143
146
  if (typeof value.required !==
144
147
  "boolean") {
145
- throw new InvalidScientificInputError(path +
148
+ throw new InvalidConfigurationError(path +
146
149
  ".required must be boolean.");
147
150
  }
148
151
  if (!BASIS_KINDS.has(value.basisKind)) {
149
- throw new InvalidScientificInputError(path +
152
+ throw new InvalidConfigurationError(path +
150
153
  ".basisKind is invalid.");
151
154
  }
152
155
  if (!SCIENTIFIC_STATUSES.has(value.scientificStatus)) {
153
- throw new InvalidScientificInputError(path +
156
+ throw new InvalidConfigurationError(path +
154
157
  ".scientificStatus is invalid.");
155
158
  }
156
159
  if (value.basisKind ===
@@ -164,11 +167,11 @@ function validateComponent(value, index) {
164
167
  "required" &&
165
168
  value.evidenceRequirement !==
166
169
  "not-required") {
167
- throw new InvalidScientificInputError(path +
170
+ throw new InvalidConfigurationError(path +
168
171
  ".evidenceRequirement is invalid.");
169
172
  }
170
173
  if (!Array.isArray(value.evidence)) {
171
- throw new InvalidScientificInputError(path +
174
+ throw new InvalidConfigurationError(path +
172
175
  ".evidence must be an array.");
173
176
  }
174
177
  const evidence = value.evidence.map((entry, evidenceIndex) => parseEvidenceProvenance(entry, path +
@@ -237,16 +240,17 @@ function composedUncertainty(required) {
237
240
  };
238
241
  }
239
242
  /**
240
- * Composes scientific-status, evidence and uncertainty semantics without
241
- * inventing a numeric aggregate uncertainty.
243
+ * Combines the scientific status, evidence and uncertainty of several inputs into one
244
+ * record, without inventing a single numeric uncertainty.
242
245
  *
243
- * Required downstream status is bounded by the weakest required input.
244
- * Component evidence/uncertainty is preserved verbatim after validation.
246
+ * The combined status can be no better than the weakest required input. Each component's
247
+ * evidence and uncertainty is kept exactly as given, after validation.
245
248
  */
246
249
  export function composeScientificAssurance(input) {
250
+ requireInputKeys(input, "composeScientificAssurance", ["components"]);
247
251
  if (!Array.isArray(input.components) ||
248
252
  input.components.length === 0) {
249
- throw new InvalidScientificInputError("components must be a non-empty array.");
253
+ throw new InvalidConfigurationError("components must be a non-empty array.");
250
254
  }
251
255
  const components = input.components.map(validateComponent);
252
256
  const ids = components.map((component) => component.componentId);
@@ -1 +1 @@
1
- {"version":3,"file":"scientific-assurance.js","sourceRoot":"","sources":["../../src/core/scientific-assurance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scientific-assurance.js","sourceRoot":"","sources":["../../src/core/scientific-assurance.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Combines the scientific status, evidence and uncertainty of several pipeline stages into one\n * record, without inventing a single numeric uncertainty.\n *\n * The combined status can be no better than the weakest required input. Each component's\n * evidence and uncertainty is kept exactly as given, after validation.\n * @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.\n */\n\nimport {\n validateCalculationQuality,\n type CalculationQuality\n} from \"./calculation-result.js\";\nimport { InvalidScientificInputError } from \"./validation.js\";\nimport {\n parseEvidenceProvenance,\n type EvidenceProvenance\n} from \"./evidence-provenance.js\";\nimport { requireInputKeys } from \"./record-validation.js\";\nimport { InvalidConfigurationError } from \"./configuration-error.js\";\n\nexport const SCIENTIFIC_ASSURANCE_CONTRACT_VERSION =\n \"0.1.0\" as const;\n\nexport type ScientificAssuranceStatus =\n | \"calibrated\"\n | \"approximation\"\n | \"unknown\";\n\nexport type ScientificAssuranceBasisKind =\n | \"evidence-backed-fact\"\n | \"photivra-model-assumption\"\n | \"not-applicable\";\n\nexport type ScientificAssuranceSourceKind =\n | \"profile\"\n | \"result\"\n | \"model\"\n | \"fixture\";\n\nexport interface ScientificAssuranceSourceIdentity {\n kind: ScientificAssuranceSourceKind;\n id: string;\n version?: string;\n}\n\nexport type ScientificAssuranceComponentUncertainty =\n | {\n kind: \"relative\";\n fraction: number;\n basis: string;\n }\n | {\n kind: \"absolute\";\n plusMinus: number;\n unit: string;\n basis?: string;\n }\n | {\n kind: \"calculation-quality\";\n quality: CalculationQuality;\n }\n | {\n kind: \"not-quantified\";\n limitation: string;\n }\n | {\n kind: \"unknown\";\n limitation: string;\n }\n | {\n kind: \"not-applicable\";\n reason: string;\n };\n\nexport interface ScientificAssuranceComponent {\n componentId: string;\n role: string;\n required: boolean;\n sourceIdentity:\n ScientificAssuranceSourceIdentity;\n basisKind:\n ScientificAssuranceBasisKind;\n scientificStatus:\n ScientificAssuranceStatus;\n evidenceRequirement:\n | \"required\"\n | \"not-required\";\n evidence:\n readonly EvidenceProvenance[];\n uncertainty:\n ScientificAssuranceComponentUncertainty;\n limitations:\n readonly string[];\n}\n\nexport type ComposedScientificUncertaintyStatus =\n | {\n kind: \"unknown\";\n componentIds:\n readonly string[];\n limitation: string;\n }\n | {\n kind: \"not-quantified\";\n componentIds:\n readonly string[];\n limitation: string;\n }\n | {\n kind: \"not-propagated\";\n componentIds:\n readonly string[];\n limitation: string;\n }\n | {\n kind: \"not-applicable\";\n componentIds:\n readonly string[];\n limitation: string;\n };\n\n/**\n * Combined status and kept evidence for one declared scientific result across stages.\n *\n * - A required input that is incomplete or approximate limits the combined status.\n * - Deterministic processing cannot turn an approximation into a calibration.\n * - Uncertainty components stay separate unless an explicit mathematical propagation\n * model justifies combining them.\n * - A count of successful stages is not an accuracy bound.\n */\nexport interface ComposedScientificAssurance {\n version:\n typeof SCIENTIFIC_ASSURANCE_CONTRACT_VERSION;\n scientificStatus:\n ScientificAssuranceStatus;\n weakestRequiredComponentIds:\n readonly string[];\n evidenceStatus:\n | \"complete\"\n | \"missing-required-evidence\";\n missingRequiredEvidenceComponentIds:\n readonly string[];\n uncertainty:\n ComposedScientificUncertaintyStatus;\n components:\n readonly ScientificAssuranceComponent[];\n componentEvidencePreserved: true;\n componentUncertaintyPreserved: true;\n aggregateNumericUncertaintyFabricated:\n false;\n downstreamStatusPromotedAboveInputs:\n false;\n}\n\nexport interface ComposeScientificAssuranceInput {\n components:\n readonly ScientificAssuranceComponent[];\n}\n\nconst SCIENTIFIC_STATUSES =\n new Set<ScientificAssuranceStatus>([\n \"calibrated\",\n \"approximation\",\n \"unknown\"\n ]);\n\nconst BASIS_KINDS =\n new Set<ScientificAssuranceBasisKind>([\n \"evidence-backed-fact\",\n \"photivra-model-assumption\",\n \"not-applicable\"\n ]);\n\nconst SOURCE_KINDS =\n new Set<ScientificAssuranceSourceKind>([\n \"profile\",\n \"result\",\n \"model\",\n \"fixture\"\n ]);\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction requireNonNegativeFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value < 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must be finite and greater than or equal to zero.\"\n );\n }\n return value;\n}\n\nfunction validateSourceIdentity(\n value:\n ScientificAssuranceSourceIdentity,\n path: string\n): ScientificAssuranceSourceIdentity {\n if (\n !SOURCE_KINDS.has(\n value.kind as\n ScientificAssuranceSourceKind\n )\n ) {\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n }\n\n return {\n kind: value.kind,\n id:\n requireNonEmptyString(\n value.id,\n path + \".id\"\n ),\n ...(value.version === undefined\n ? {}\n : {\n version:\n requireNonEmptyString(\n value.version,\n path + \".version\"\n )\n })\n };\n}\n\nfunction validateUncertainty(\n value:\n ScientificAssuranceComponentUncertainty,\n path: string\n): ScientificAssuranceComponentUncertainty {\n if (value.kind === \"relative\") {\n const fraction =\n requireNonNegativeFinite(\n value.fraction,\n path + \".fraction\"\n );\n if (fraction > 1) {\n throw new InvalidScientificInputError(\n path +\n \".fraction must be less than or equal to one.\"\n );\n }\n return {\n kind: \"relative\",\n fraction,\n basis:\n requireNonEmptyString(\n value.basis,\n path + \".basis\"\n )\n };\n }\n\n if (value.kind === \"absolute\") {\n return {\n kind: \"absolute\",\n plusMinus:\n requireNonNegativeFinite(\n value.plusMinus,\n path + \".plusMinus\"\n ),\n unit:\n requireNonEmptyString(\n value.unit,\n path + \".unit\"\n ),\n ...(value.basis === undefined\n ? {}\n : {\n basis:\n requireNonEmptyString(\n value.basis,\n path + \".basis\"\n )\n })\n };\n }\n\n if (\n value.kind ===\n \"calculation-quality\"\n ) {\n validateCalculationQuality(\n value.quality\n );\n if (\n value.quality\n .uncertainty ===\n undefined ||\n value.quality\n .uncertainty.length ===\n 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \".quality must include quantified uncertainty components; use another semantic uncertainty state otherwise.\"\n );\n }\n return {\n kind:\n \"calculation-quality\",\n quality: value.quality\n };\n }\n\n if (\n value.kind ===\n \"not-quantified\"\n ) {\n return {\n kind: \"not-quantified\",\n limitation:\n requireNonEmptyString(\n value.limitation,\n path + \".limitation\"\n )\n };\n }\n\n if (value.kind === \"unknown\") {\n return {\n kind: \"unknown\",\n limitation:\n requireNonEmptyString(\n value.limitation,\n path + \".limitation\"\n )\n };\n }\n\n if (\n value.kind ===\n \"not-applicable\"\n ) {\n return {\n kind: \"not-applicable\",\n reason:\n requireNonEmptyString(\n value.reason,\n path + \".reason\"\n )\n };\n }\n\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n}\n\nfunction validateLimitations(\n value: readonly string[],\n path: string\n): readonly string[] {\n if (!Array.isArray(value)) {\n throw new InvalidConfigurationError(\n path + \" must be an array.\"\n );\n }\n\n const parsed =\n value.map((entry, index) =>\n requireNonEmptyString(\n entry,\n path +\n \"[\" +\n index +\n \"]\"\n )\n );\n\n if (\n new Set(parsed).size !==\n parsed.length\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must not contain duplicates.\"\n );\n }\n\n return parsed;\n}\n\nfunction validateComponent(\n value:\n ScientificAssuranceComponent,\n index: number\n): ScientificAssuranceComponent {\n const path =\n \"components[\" +\n index +\n \"]\";\n\n if (\n typeof value.required !==\n \"boolean\"\n ) {\n throw new InvalidConfigurationError(\n path +\n \".required must be boolean.\"\n );\n }\n\n if (\n !BASIS_KINDS.has(\n value.basisKind as\n ScientificAssuranceBasisKind\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n \".basisKind is invalid.\"\n );\n }\n\n if (\n !SCIENTIFIC_STATUSES.has(\n value.scientificStatus as\n ScientificAssuranceStatus\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n \".scientificStatus is invalid.\"\n );\n }\n\n if (\n value.basisKind ===\n \"evidence-backed-fact\" &&\n value.evidenceRequirement !==\n \"required\"\n ) {\n throw new InvalidScientificInputError(\n path +\n '.basisKind \"evidence-backed-fact\" requires evidenceRequirement \"required\".'\n );\n }\n\n if (\n value.evidenceRequirement !==\n \"required\" &&\n value.evidenceRequirement !==\n \"not-required\"\n ) {\n throw new InvalidConfigurationError(\n path +\n \".evidenceRequirement is invalid.\"\n );\n }\n\n if (!Array.isArray(value.evidence)) {\n throw new InvalidConfigurationError(\n path +\n \".evidence must be an array.\"\n );\n }\n\n const evidence =\n value.evidence.map(\n (entry, evidenceIndex) =>\n parseEvidenceProvenance(\n entry,\n path +\n \".evidence[\" +\n evidenceIndex +\n \"]\"\n )\n );\n\n return {\n componentId:\n requireNonEmptyString(\n value.componentId,\n path + \".componentId\"\n ),\n role:\n requireNonEmptyString(\n value.role,\n path + \".role\"\n ),\n required: value.required,\n sourceIdentity:\n validateSourceIdentity(\n value.sourceIdentity,\n path +\n \".sourceIdentity\"\n ),\n basisKind:\n value.basisKind,\n scientificStatus:\n value.scientificStatus,\n evidenceRequirement:\n value.evidenceRequirement,\n evidence,\n uncertainty:\n validateUncertainty(\n value.uncertainty,\n path + \".uncertainty\"\n ),\n limitations:\n validateLimitations(\n value.limitations,\n path + \".limitations\"\n )\n };\n}\n\nfunction statusRank(\n value:\n ScientificAssuranceStatus\n): number {\n if (value === \"unknown\") {\n return 0;\n }\n if (\n value === \"approximation\"\n ) {\n return 1;\n }\n return 2;\n}\n\nfunction composedUncertainty(\n required:\n readonly ScientificAssuranceComponent[]\n): ComposedScientificUncertaintyStatus {\n const unknown =\n required.filter(\n (component) =>\n component.uncertainty.kind ===\n \"unknown\"\n );\n\n if (unknown.length > 0) {\n return {\n kind: \"unknown\",\n componentIds:\n unknown.map(\n (component) =>\n component.componentId\n ),\n limitation:\n \"At least one required component has unknown uncertainty; no aggregate numeric uncertainty is claimed.\"\n };\n }\n\n const unquantified =\n required.filter(\n (component) =>\n component.uncertainty.kind ===\n \"not-quantified\"\n );\n\n if (\n unquantified.length > 0\n ) {\n return {\n kind: \"not-quantified\",\n componentIds:\n unquantified.map(\n (component) =>\n component.componentId\n ),\n limitation:\n \"At least one required component has unquantified uncertainty; absence of a numeric bound is not zero uncertainty.\"\n };\n }\n\n const quantified =\n required.filter(\n (component) =>\n component.uncertainty.kind ===\n \"relative\" ||\n component.uncertainty.kind ===\n \"absolute\" ||\n component.uncertainty.kind ===\n \"calculation-quality\"\n );\n\n if (quantified.length > 0) {\n return {\n kind: \"not-propagated\",\n componentIds:\n quantified.map(\n (component) =>\n component.componentId\n ),\n limitation:\n \"Quantified component uncertainties are preserved but are not numerically combined without an explicit propagation model and correlation assumptions.\"\n };\n }\n\n return {\n kind: \"not-applicable\",\n componentIds:\n required.map(\n (component) =>\n component.componentId\n ),\n limitation:\n \"No required component declares a quantitative uncertainty applicable to this composition.\"\n };\n}\n\n/**\n * Combines the scientific status, evidence and uncertainty of several inputs into one\n * record, without inventing a single numeric uncertainty.\n *\n * The combined status can be no better than the weakest required input. Each component's\n * evidence and uncertainty is kept exactly as given, after validation.\n */\nexport function composeScientificAssurance(\n input:\n ComposeScientificAssuranceInput\n): ComposedScientificAssurance {\n requireInputKeys(input, \"composeScientificAssurance\", [\"components\"]);\n if (\n !Array.isArray(\n input.components\n ) ||\n input.components.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"components must be a non-empty array.\"\n );\n }\n\n const components =\n input.components.map(\n validateComponent\n );\n\n const ids =\n components.map(\n (component) =>\n component.componentId\n );\n\n if (\n new Set(ids).size !==\n ids.length\n ) {\n throw new InvalidScientificInputError(\n \"components must not contain duplicate componentId values.\"\n );\n }\n\n const required =\n components.filter(\n (component) =>\n component.required\n );\n\n if (required.length === 0) {\n throw new InvalidScientificInputError(\n \"At least one scientific-assurance component must be required.\"\n );\n }\n\n let weakestRank =\n Number.POSITIVE_INFINITY;\n\n for (const component of required) {\n weakestRank =\n Math.min(\n weakestRank,\n statusRank(\n component.scientificStatus\n )\n );\n }\n\n const weakest =\n required.filter(\n (component) =>\n statusRank(\n component.scientificStatus\n ) === weakestRank\n );\n\n const statusFromInputs =\n weakestRank === 0\n ? \"unknown\"\n : weakestRank === 1\n ? \"approximation\"\n : \"calibrated\";\n\n const missingRequiredEvidence =\n required.filter(\n (component) =>\n component\n .evidenceRequirement ===\n \"required\" &&\n component.evidence.length === 0\n );\n\n const scientificStatus:\n ScientificAssuranceStatus =\n missingRequiredEvidence.length >\n 0\n ? \"unknown\"\n : statusFromInputs;\n\n const weakestRequiredComponentIds =\n missingRequiredEvidence.length >\n 0\n ? missingRequiredEvidence.map(\n (component) =>\n component.componentId\n )\n : weakest.map(\n (component) =>\n component.componentId\n );\n\n return {\n version:\n SCIENTIFIC_ASSURANCE_CONTRACT_VERSION,\n scientificStatus,\n weakestRequiredComponentIds,\n evidenceStatus:\n missingRequiredEvidence\n .length === 0\n ? \"complete\"\n : \"missing-required-evidence\",\n missingRequiredEvidenceComponentIds:\n missingRequiredEvidence.map(\n (component) =>\n component.componentId\n ),\n uncertainty:\n composedUncertainty(\n required\n ),\n components,\n componentEvidencePreserved:\n true,\n componentUncertaintyPreserved:\n true,\n aggregateNumericUncertaintyFabricated:\n false,\n downstreamStatusPromotedAboveInputs:\n false\n };\n}\n"]}
@@ -66,26 +66,26 @@ export interface IntegratedDiscreteSpectralLineMeasure {
66
66
  wavelengthMeasureMultiplicationApplied: false;
67
67
  }
68
68
  /**
69
- * Parses one continuous spectral-coverage participant.
69
+ * Parses the wavelength coverage of one continuous spectral input.
70
70
  *
71
- * This contract describes support and interpolation breakpoints only. It does
72
- * not carry spectral values, transmission, response, radiance, or uncertainty.
71
+ * It describes only the wavelength range (support) and interpolation breakpoints. It
72
+ * carries no spectral values, transmission, response, radiance or uncertainty.
73
73
  */
74
74
  export declare function parseSpectralCoverageParticipant(value: unknown, path?: string): SpectralCoverageParticipant;
75
75
  /**
76
- * Intersects continuous spectral support and unions all interpolation
77
- * breakpoints inside the common range.
76
+ * Finds the wavelength range that all continuous inputs share, and collects every
77
+ * interpolation breakpoint inside it.
78
78
  *
79
- * Air/vacuum conversion is never implicit. Discrete lines are deliberately
80
- * excluded because delta-like line measures require a different integration
81
- * path from continuous per-nanometre densities.
79
+ * Air and vacuum wavelengths are never converted implicitly. Discrete lines are not
80
+ * accepted here: a delta-like line is integrated differently from a continuous
81
+ * per-nanometre density.
82
82
  */
83
83
  export declare function composeSpectralCoverage(input: ComposeSpectralCoverageInput): SpectralCoverageComposition;
84
84
  /**
85
- * Parses a normalized set of delta-like discrete spectral lines.
85
+ * Parses a normalized set of discrete spectral lines (each treated as a delta function).
86
86
  *
87
- * Each weight is an integrated line fraction, not a per-nanometre spectral
88
- * density sample. The weights must sum to one.
87
+ * Each weight is the fraction of the total carried by that line. It is not a
88
+ * per-nanometre density sample. The weights must sum to one.
89
89
  */
90
90
  export declare function parseNormalizedDiscreteSpectralLineDistribution(value: unknown, path?: string): NormalizedDiscreteSpectralLineDistribution;
91
91
  export interface DistributeIntegratedQuantityAcrossDiscreteLinesInput {
@@ -99,8 +99,7 @@ export interface DistributeIntegratedQuantityAcrossDiscreteLinesInput {
99
99
  */
100
100
  export declare function distributeIntegratedQuantityAcrossDiscreteSpectralLines(input: DistributeIntegratedQuantityAcrossDiscreteLinesInput): DiscreteSpectralLineMeasure;
101
101
  /**
102
- * Integrates a discrete line measure by summing already wavelength-integrated
103
- * line contributions. No d-lambda factor is applied.
102
+ * Integrates over discrete lines by summing their contributions, which are already
103
+ * integrated over wavelength. No dλ (wavelength step) factor is applied.
104
104
  */
105
105
  export declare function integrateDiscreteSpectralLineMeasure(measure: DiscreteSpectralLineMeasure): IntegratedDiscreteSpectralLineMeasure;
106
- //# sourceMappingURL=spectral-composition.d.ts.map