@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,18 +1,14 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
5
- * missing required fields and incompatible scientific data fail at this boundary. Photo, dark and
6
- * explicitly incremental stored-electron components must share the exact site/channel/local shutter
7
- * event. Completeness is an evidence-backed declaration, not the consequence of an empty component
8
- * array. Expected stored charge remains distinct from a stochastic realization or nonlinear full-well
9
- * clamp.
10
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
11
- * missing required fields and incompatible scientific data fail at this boundary. Photo, dark and
12
- * explicitly incremental stored-electron components must share the exact site/channel/local shutter
13
- * event. Completeness is an evidence-backed declaration, not the consequence of an empty component
14
- * array. Expected stored charge remains distinct from a stochastic realization or nonlinear full-well
15
- * clamp.
3
+ * Accumulated charge: adds up the expected electrons stored in one sensor site during one exposure.
4
+ *
5
+ * The parts are photo charge (from light), dark charge (from dark current) and any other stored
6
+ * charge declared explicitly as an addition. All parts must belong to the exact same site, colour
7
+ * channel and local shutter event. Whether the list of parts is complete is a declaration backed by
8
+ * evidence; an empty list does not mean "complete".
9
+ *
10
+ * The result is the expected (mean) charge. It is separate from a random (noise) realization and from
11
+ * the non-linear full-well clamp, which later steps apply.
16
12
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
17
13
  * limits.
18
14
  */
@@ -21,6 +17,7 @@ import { InvalidConfigurationError } from "../core/configuration-error.js";
21
17
  import { parseEvidenceList } from "../core/evidence-provenance.js";
22
18
  import { parseSensorEqeTemporalPhotoSignal } from "./temporal-photo-signal.js";
23
19
  import { InvalidScientificInputError } from "../core/validation.js";
20
+ import { requireInputObject, requireInputKeys, rejectUnknownFields, rejectUnknownVariantFields, UNCERTAINTY_VARIANT_FIELDS } from "../core/record-validation.js";
24
21
  function addCompensated(state, value) {
25
22
  const adjusted = value - state.correction;
26
23
  const next = state.sum + adjusted;
@@ -28,12 +25,14 @@ function addCompensated(state, value) {
28
25
  (next - state.sum) - adjusted;
29
26
  state.sum = next;
30
27
  }
31
- function requireRecord(value, path) {
28
+ function requireRecord(value, path, allowedKeys) {
32
29
  if (typeof value !== "object" ||
33
30
  value === null ||
34
31
  Array.isArray(value)) {
35
32
  throw new InvalidConfigurationError(path + " must be an object.");
36
33
  }
34
+ if (allowedKeys !== null)
35
+ rejectUnknownFields(value, allowedKeys, path);
37
36
  return value;
38
37
  }
39
38
  function requireNonEmptyString(value, path) {
@@ -68,7 +67,8 @@ function requireSiteIndex(value, path) {
68
67
  return value;
69
68
  }
70
69
  function parseUncertainty(value, path) {
71
- const record = requireRecord(value, path);
70
+ const record = requireRecord(value, path, null);
71
+ rejectUnknownVariantFields(record, "kind", UNCERTAINTY_VARIANT_FIELDS, path);
72
72
  if (record.kind === "relative") {
73
73
  const fraction = requireNonNegativeFinite(record.fraction, path + ".fraction");
74
74
  return {
@@ -114,20 +114,16 @@ function parseWindowIdentity(record, path) {
114
114
  };
115
115
  }
116
116
  /**
117
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
118
- * missing required fields and incompatible scientific data fail at this boundary.
119
- *
120
- * Photo, dark and explicitly incremental stored-electron components must share the exact
121
- * site/channel/local shutter event. Completeness is an evidence-backed declaration, not the
122
- * consequence of an empty component array. Expected stored charge remains distinct from a stochastic
123
- * realization or nonlinear full-well clamp.
124
- * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
125
- * @returns SensorAdditionalStoredChargeComponent. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
117
+ * Validates an untrusted additional stored-charge component (charge other than photo and dark
118
+ * charge, declared explicitly as an addition) and returns it normalized. Unknown enum values,
119
+ * missing required fields and inconsistent scientific data are rejected.
120
+ * @param value - Untrusted data. TypeScript types alone are not validation.
121
+ * @returns The result. Success does not imply calibration.
126
122
  *
127
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
123
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
128
124
  */
129
125
  export function parseSensorAdditionalStoredChargeComponent(value) {
130
- const record = requireRecord(value, "sensorAdditionalStoredCharge");
126
+ const record = requireRecord(value, "sensorAdditionalStoredCharge", ["kind", "accountingMeaning", "site", "timeReference", "startOffsetSecondsFromOpeningReference", "endOffsetSecondsFromOpeningReference", "bindingId", "scientificStatus", "uncertainty", "componentId", "colorSamplingProfileId", "channelId", "expectedElectronCount", "evidence"]);
131
127
  const kinds = new Set([
132
128
  "hot-pixel-defect-excess",
133
129
  "leakage",
@@ -143,7 +139,7 @@ export function parseSensorAdditionalStoredChargeComponent(value) {
143
139
  "incremental-stored-electrons-beyond-photo-and-modeled-dark-current") {
144
140
  throw new InvalidConfigurationError("sensorAdditionalStoredCharge.accountingMeaning is invalid.");
145
141
  }
146
- const site = requireRecord(record.site, "sensorAdditionalStoredCharge.site");
142
+ const site = requireRecord(record.site, "sensorAdditionalStoredCharge.site", ["x", "y"]);
147
143
  const window = parseWindowIdentity(record, "sensorAdditionalStoredCharge");
148
144
  const scientificStatus = parseStatus(record.scientificStatus, "sensorAdditionalStoredCharge.scientificStatus");
149
145
  const uncertainty = parseUncertainty(record.uncertainty, "sensorAdditionalStoredCharge.uncertainty");
@@ -173,20 +169,18 @@ export function parseSensorAdditionalStoredChargeComponent(value) {
173
169
  };
174
170
  }
175
171
  /**
176
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
177
- * missing required fields and incompatible scientific data fail at this boundary.
172
+ * Validates an untrusted completeness profile and returns it normalized. Unknown enum values,
173
+ * missing required fields and inconsistent scientific data are rejected.
178
174
  *
179
- * Photo, dark and explicitly incremental stored-electron components must share the exact
180
- * site/channel/local shutter event. Completeness is an evidence-backed declaration, not the
181
- * consequence of an empty component array. Expected stored charge remains distinct from a stochastic
182
- * realization or nonlinear full-well clamp.
183
- * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
184
- * @returns SensorAccumulatedChargeCompletenessProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
175
+ * Completeness is a declaration backed by evidence. An empty list of components does not
176
+ * mean the charge accounting is complete.
177
+ * @param value - Untrusted data. TypeScript types alone are not validation.
178
+ * @returns The result. Success does not imply calibration.
185
179
  *
186
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
180
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
187
181
  */
188
182
  export function parseSensorAccumulatedChargeCompletenessProfile(value) {
189
- const record = requireRecord(value, "sensorAccumulatedChargeCompleteness");
183
+ const record = requireRecord(value, "sensorAccumulatedChargeCompleteness", ["schemaVersion", "coverageMeaning", "site", "timeReference", "startOffsetSecondsFromOpeningReference", "endOffsetSecondsFromOpeningReference", "bindingId", "scientificStatus", "limitation", "includedAdditionalComponentIds", "profileId", "colorSamplingProfileId", "channelId", "darkCurrentProfileId", "evidence"]);
190
184
  if (record.schemaVersion !== "0.1.0") {
191
185
  throw new InvalidConfigurationError('sensorAccumulatedChargeCompleteness.schemaVersion must be "0.1.0".');
192
186
  }
@@ -194,7 +188,7 @@ export function parseSensorAccumulatedChargeCompletenessProfile(value) {
194
188
  "all-material-stored-electron-contributors-accounted-for") {
195
189
  throw new InvalidConfigurationError("sensorAccumulatedChargeCompleteness.coverageMeaning is invalid.");
196
190
  }
197
- const site = requireRecord(record.site, "sensorAccumulatedChargeCompleteness.site");
191
+ const site = requireRecord(record.site, "sensorAccumulatedChargeCompleteness.site", ["x", "y"]);
198
192
  const window = parseWindowIdentity(record, "sensorAccumulatedChargeCompleteness");
199
193
  const scientificStatus = parseStatus(record.scientificStatus, "sensorAccumulatedChargeCompleteness.scientificStatus");
200
194
  const limitation = record.limitation === undefined
@@ -244,6 +238,7 @@ function sameWindow(startA, endA, startB, endB) {
244
238
  endA === endB);
245
239
  }
246
240
  function validatePhoto(photo) {
241
+ requireInputObject(photo, "photo input");
247
242
  if (photo.kind === "eqe-temporal-photo-signal")
248
243
  parseSensorEqeTemporalPhotoSignal(photo);
249
244
  if ((photo.kind !== "eqe-expected-counts" && photo.kind !== "eqe-temporal-photo-signal") ||
@@ -308,19 +303,18 @@ function validateComponentBinding(component, photo) {
308
303
  }
309
304
  }
310
305
  /**
311
- * Compose photo, independently evaluated dark and explicitly incremental charge by exact local
312
- * exposure identity, retaining completeness assessment before capacity/noise.
306
+ * Adds photo charge, separately computed dark charge and any explicitly declared extra charge for
307
+ * one exact local exposure, and keeps the completeness assessment. Capacity and noise come later.
313
308
  *
314
- * Photo, dark and explicitly incremental stored-electron components must share the exact
315
- * site/channel/local shutter event. Completeness is an evidence-backed declaration, not the
316
- * consequence of an empty component array. Expected stored charge remains distinct from a stochastic
317
- * realization or nonlinear full-well clamp.
318
- * @param input - ComposeSensorPhotoAccumulatedChargeInput. See the linked contract for coordinate, unit and profile binding semantics.
319
- * @returns CalculationResult<SensorPhotoAccumulatedChargeComposition>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
309
+ * All parts must belong to the exact same site, colour channel and local shutter event. The
310
+ * result is the expected charge, separate from a random realization or the full-well clamp.
311
+ * @param input - The input; see `ComposeSensorPhotoAccumulatedChargeInput` for its fields, units and coordinates.
312
+ * @returns The result. Success does not imply calibration.
320
313
  *
321
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
314
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
322
315
  */
323
316
  export function composeSensorAccumulatedCharge(input) {
317
+ requireInputKeys(input, "composeSensorAccumulatedCharge", ["photoSignal", "darkCharge", "additionalChargeComponents", "completenessProfile"]);
324
318
  validatePhoto(input.photoSignal);
325
319
  validateDarkBinding(input.photoSignal, input.darkCharge);
326
320
  const profile = parseSensorAccumulatedChargeCompletenessProfile(input.completenessProfile);
@@ -1 +1 @@
1
- {"version":3,"file":"accumulated-charge.js","sourceRoot":"","sources":["../../src/sensor/accumulated-charge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accumulated-charge.js","sourceRoot":"","sources":["../../src/sensor/accumulated-charge.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Accumulated charge: adds up the expected electrons stored in one sensor site during one exposure.\n *\n * The parts are photo charge (from light), dark charge (from dark current) and any other stored\n * charge declared explicitly as an addition. All parts must belong to the exact same site, colour\n * channel and local shutter event. Whether the list of parts is complete is a declaration backed by\n * evidence; an empty list does not mean \"complete\".\n *\n * The result is the expected (mean) charge. It is separate from a random (noise) realization and from\n * the non-linear full-well clamp, which later steps apply.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport {\n approximationResult,\n calculatedResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport { parseSensorEqeTemporalPhotoSignal } from \"./temporal-photo-signal.js\";\nimport type { SensorEqeExposureIntegration } from \"./constant-rate-temporal-integration.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport type {\n SensorEqePhotoExposure, SensorEqeTemporalPhotoSignal\n} from \"./temporal-photo-signal.js\";\nimport type {\n SensorPhotoDarkCurrentCharge, SensorDarkCurrentCharge, SensorTemporalDarkCurrentCharge\n} from \"./dark-current.js\";\nimport type {\n SensorSpectralResponseScientificStatus,\n SensorSpectralResponseUncertainty\n} from \"./spectral-response.js\";\nimport { requireInputObject, requireInputKeys, rejectUnknownFields, rejectUnknownVariantFields, UNCERTAINTY_VARIANT_FIELDS } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport type SensorAdditionalStoredChargeKind =\n | \"hot-pixel-defect-excess\"\n | \"leakage\"\n | \"charge-injection\"\n | \"clock-induced-charge\"\n | \"other\";\n\nexport interface SensorAdditionalStoredChargeComponent {\n componentId: string;\n kind:\n SensorAdditionalStoredChargeKind;\n colorSamplingProfileId: string;\n channelId: string;\n site: {\n x: number;\n y: number;\n };\n bindingId: string;\n timeReference:\n \"first-opening-boundary-phase\";\n startOffsetSecondsFromOpeningReference:\n number;\n endOffsetSecondsFromOpeningReference:\n number;\n accountingMeaning:\n \"incremental-stored-electrons-beyond-photo-and-modeled-dark-current\";\n expectedElectronCount: number;\n scientificStatus:\n SensorSpectralResponseScientificStatus;\n uncertainty:\n SensorSpectralResponseUncertainty;\n evidence:\n readonly EvidenceProvenance[];\n}\n\nexport interface SensorAccumulatedChargeCompletenessProfile {\n schemaVersion: \"0.1.0\";\n profileId: string;\n colorSamplingProfileId: string;\n channelId: string;\n site: {\n x: number;\n y: number;\n };\n bindingId: string;\n timeReference:\n \"first-opening-boundary-phase\";\n startOffsetSecondsFromOpeningReference:\n number;\n endOffsetSecondsFromOpeningReference:\n number;\n darkCurrentProfileId: string;\n includedAdditionalComponentIds:\n readonly string[];\n coverageMeaning:\n \"all-material-stored-electron-contributors-accounted-for\";\n scientificStatus:\n SensorSpectralResponseScientificStatus;\n evidence:\n readonly EvidenceProvenance[];\n limitation?: string;\n}\n\nexport interface ComposeSensorAccumulatedChargeInput<\n Photo extends SensorEqePhotoExposure = SensorEqeExposureIntegration,\n Dark extends SensorPhotoDarkCurrentCharge = SensorDarkCurrentCharge\n> {\n photoSignal:\n Photo;\n darkCharge:\n Dark;\n additionalChargeComponents?:\n readonly SensorAdditionalStoredChargeComponent[];\n completenessProfile:\n SensorAccumulatedChargeCompletenessProfile;\n}\n\nexport type ComposeSensorPhotoAccumulatedChargeInput = ComposeSensorAccumulatedChargeInput<SensorEqePhotoExposure, SensorPhotoDarkCurrentCharge>;\n\nexport interface SensorAccumulatedChargeComposition<\n Photo extends SensorEqePhotoExposure = SensorEqeExposureIntegration,\n Dark extends SensorPhotoDarkCurrentCharge = SensorDarkCurrentCharge\n> {\n completenessProfileId: string;\n colorSamplingProfileId: string;\n channelId: string;\n site: {\n x: number;\n y: number;\n };\n bindingId: string;\n timeReference:\n \"first-opening-boundary-phase\";\n startOffsetSecondsFromOpeningReference:\n number;\n endOffsetSecondsFromOpeningReference:\n number;\n localExposureDurationSeconds:\n number;\n photoExpectedElectronCount:\n number;\n darkExpectedElectronCount:\n number;\n additionalExpectedElectronCount:\n number;\n totalExpectedStoredElectronCount:\n number;\n additionalComponents:\n readonly {\n componentId: string;\n kind:\n SensorAdditionalStoredChargeKind;\n expectedElectronCount: number;\n scientificStatus:\n SensorSpectralResponseScientificStatus;\n uncertainty:\n SensorSpectralResponseUncertainty;\n evidence:\n readonly EvidenceProvenance[];\n }[];\n accumulatedChargeCompleteness:\n \"complete-for-physical-storage-capacity-assessment\";\n completenessScientificStatus:\n SensorSpectralResponseScientificStatus;\n allCountsAreExpectationValues: true;\n integerChargeSampled: false;\n photoSignalIncluded: true;\n darkChargeIncluded: true;\n otherChargeIncluded: boolean;\n darkShotNoiseApplied: false;\n photoShotNoiseApplied: false;\n readNoiseApplied: false;\n physicalFullWellAssessmentAuthorized:\n true;\n cameraSaturationAssessmentAuthorized:\n false;\n saturationAssessed: false;\n bloomingModeled: false;\n adcQuantizationApplied: false;\n rawCodeValueProduced: false;\n componentEvidence: {\n completeness:\n readonly EvidenceProvenance[];\n photoSignal:\n Photo[\"componentEvidence\"];\n darkCurrent:\n Dark[\"componentEvidence\"];\n };\n}\n\nexport type SensorPhotoAccumulatedChargeComposition = SensorAccumulatedChargeComposition<SensorEqePhotoExposure, SensorPhotoDarkCurrentCharge>;\n\ninterface CompensatedSum {\n sum: number;\n correction: number;\n}\n\nfunction addCompensated(\n state: CompensatedSum,\n value: number\n): void {\n const adjusted =\n value - state.correction;\n const next =\n state.sum + adjusted;\n state.correction =\n (next - state.sum) - adjusted;\n state.sum = next;\n}\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\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 + \" must be a non-empty string.\"\n );\n }\n return value;\n}\n\nfunction requireFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be finite.\"\n );\n }\n return value;\n}\n\nfunction requireNonNegativeFinite(\n value: unknown,\n path: string\n): number {\n const parsed =\n requireFinite(value, path);\n if (parsed < 0) {\n throw new InvalidConfigurationError(\n path +\n \" must be greater than or equal to zero.\"\n );\n }\n return parsed;\n}\n\nfunction requireSiteIndex(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isSafeInteger(value) ||\n value < 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a non-negative safe integer.\"\n );\n }\n return value;\n}\n\nfunction parseUncertainty(\n value: unknown,\n path: string\n): SensorSpectralResponseUncertainty {\n const record =\n requireRecord(value, path, null);\n rejectUnknownVariantFields(record, \"kind\", UNCERTAINTY_VARIANT_FIELDS, path);\n\n if (record.kind === \"relative\") {\n const fraction =\n requireNonNegativeFinite(\n record.fraction,\n path + \".fraction\"\n );\n return {\n kind: \"relative\",\n fraction,\n basis: requireNonEmptyString(\n record.basis,\n path + \".basis\"\n )\n };\n }\n\n if (\n record.kind === \"not-quantified\"\n ) {\n return {\n kind: \"not-quantified\",\n limitation:\n requireNonEmptyString(\n record.limitation,\n path + \".limitation\"\n )\n };\n }\n\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n}\n\nfunction parseStatus(\n value: unknown,\n path: string\n): SensorSpectralResponseScientificStatus {\n if (\n value !== \"calibrated\" &&\n value !== \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n path + \" is invalid.\"\n );\n }\n return value;\n}\n\nfunction parseWindowIdentity(\n record: UnknownRecord,\n path: string\n): {\n bindingId: string;\n timeReference:\n \"first-opening-boundary-phase\";\n start:\n number;\n end:\n number;\n} {\n if (\n record.timeReference !==\n \"first-opening-boundary-phase\"\n ) {\n throw new InvalidConfigurationError(\n path +\n '.timeReference must be \"first-opening-boundary-phase\".'\n );\n }\n const start =\n requireFinite(\n record.startOffsetSecondsFromOpeningReference,\n path +\n \".startOffsetSecondsFromOpeningReference\"\n );\n const end =\n requireFinite(\n record.endOffsetSecondsFromOpeningReference,\n path +\n \".endOffsetSecondsFromOpeningReference\"\n );\n if (!(end > start)) {\n throw new InvalidConfigurationError(\n path +\n \" exposure window end must be greater than start.\"\n );\n }\n return {\n bindingId:\n requireNonEmptyString(\n record.bindingId,\n path + \".bindingId\"\n ),\n timeReference:\n \"first-opening-boundary-phase\",\n start,\n end\n };\n}\n\n/**\n * Validates an untrusted additional stored-charge component (charge other than photo and dark\n * charge, declared explicitly as an addition) and returns it normalized. Unknown enum values,\n * missing required fields and inconsistent scientific data are rejected.\n * @param value - Untrusted data. TypeScript types alone are not validation.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function parseSensorAdditionalStoredChargeComponent(\n value: unknown\n): SensorAdditionalStoredChargeComponent {\n const record = requireRecord(\n value,\n \"sensorAdditionalStoredCharge\", [\"kind\", \"accountingMeaning\", \"site\", \"timeReference\", \"startOffsetSecondsFromOpeningReference\", \"endOffsetSecondsFromOpeningReference\", \"bindingId\", \"scientificStatus\", \"uncertainty\", \"componentId\", \"colorSamplingProfileId\", \"channelId\", \"expectedElectronCount\", \"evidence\"]\n );\n\n const kinds =\n new Set<SensorAdditionalStoredChargeKind>([\n \"hot-pixel-defect-excess\",\n \"leakage\",\n \"charge-injection\",\n \"clock-induced-charge\",\n \"other\"\n ]);\n if (\n typeof record.kind !== \"string\" ||\n !kinds.has(\n record.kind as\n SensorAdditionalStoredChargeKind\n )\n ) {\n throw new InvalidConfigurationError(\n \"sensorAdditionalStoredCharge.kind is invalid.\"\n );\n }\n if (\n record.accountingMeaning !==\n \"incremental-stored-electrons-beyond-photo-and-modeled-dark-current\"\n ) {\n throw new InvalidConfigurationError(\n \"sensorAdditionalStoredCharge.accountingMeaning is invalid.\"\n );\n }\n\n const site = requireRecord(\n record.site,\n \"sensorAdditionalStoredCharge.site\", [\"x\", \"y\"]\n );\n const window =\n parseWindowIdentity(\n record,\n \"sensorAdditionalStoredCharge\"\n );\n const scientificStatus =\n parseStatus(\n record.scientificStatus,\n \"sensorAdditionalStoredCharge.scientificStatus\"\n );\n const uncertainty =\n parseUncertainty(\n record.uncertainty,\n \"sensorAdditionalStoredCharge.uncertainty\"\n );\n if (\n scientificStatus === \"calibrated\" &&\n uncertainty.kind ===\n \"not-quantified\"\n ) {\n throw new InvalidConfigurationError(\n \"A calibrated additional stored-charge component must declare quantified relative uncertainty.\"\n );\n }\n\n return {\n componentId:\n requireNonEmptyString(\n record.componentId,\n \"sensorAdditionalStoredCharge.componentId\"\n ),\n kind:\n record.kind as\n SensorAdditionalStoredChargeKind,\n colorSamplingProfileId:\n requireNonEmptyString(\n record.colorSamplingProfileId,\n \"sensorAdditionalStoredCharge.colorSamplingProfileId\"\n ),\n channelId:\n requireNonEmptyString(\n record.channelId,\n \"sensorAdditionalStoredCharge.channelId\"\n ),\n site: {\n x: requireSiteIndex(\n site.x,\n \"sensorAdditionalStoredCharge.site.x\"\n ),\n y: requireSiteIndex(\n site.y,\n \"sensorAdditionalStoredCharge.site.y\"\n )\n },\n bindingId: window.bindingId,\n timeReference:\n window.timeReference,\n startOffsetSecondsFromOpeningReference:\n window.start,\n endOffsetSecondsFromOpeningReference:\n window.end,\n accountingMeaning:\n \"incremental-stored-electrons-beyond-photo-and-modeled-dark-current\",\n expectedElectronCount:\n requireNonNegativeFinite(\n record.expectedElectronCount,\n \"sensorAdditionalStoredCharge.expectedElectronCount\"\n ),\n scientificStatus,\n uncertainty,\n evidence: parseEvidenceList(\n record.evidence,\n \"sensorAdditionalStoredCharge.evidence\"\n )\n };\n}\n\n/**\n * Validates an untrusted completeness profile and returns it normalized. Unknown enum values,\n * missing required fields and inconsistent scientific data are rejected.\n *\n * Completeness is a declaration backed by evidence. An empty list of components does not\n * mean the charge accounting is complete.\n * @param value - Untrusted data. TypeScript types alone are not validation.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function parseSensorAccumulatedChargeCompletenessProfile(\n value: unknown\n): SensorAccumulatedChargeCompletenessProfile {\n const record = requireRecord(\n value,\n \"sensorAccumulatedChargeCompleteness\", [\"schemaVersion\", \"coverageMeaning\", \"site\", \"timeReference\", \"startOffsetSecondsFromOpeningReference\", \"endOffsetSecondsFromOpeningReference\", \"bindingId\", \"scientificStatus\", \"limitation\", \"includedAdditionalComponentIds\", \"profileId\", \"colorSamplingProfileId\", \"channelId\", \"darkCurrentProfileId\", \"evidence\"]\n );\n if (\n record.schemaVersion !== \"0.1.0\"\n ) {\n throw new InvalidConfigurationError(\n 'sensorAccumulatedChargeCompleteness.schemaVersion must be \"0.1.0\".'\n );\n }\n if (\n record.coverageMeaning !==\n \"all-material-stored-electron-contributors-accounted-for\"\n ) {\n throw new InvalidConfigurationError(\n \"sensorAccumulatedChargeCompleteness.coverageMeaning is invalid.\"\n );\n }\n\n const site = requireRecord(\n record.site,\n \"sensorAccumulatedChargeCompleteness.site\", [\"x\", \"y\"]\n );\n const window =\n parseWindowIdentity(\n record,\n \"sensorAccumulatedChargeCompleteness\"\n );\n const scientificStatus =\n parseStatus(\n record.scientificStatus,\n \"sensorAccumulatedChargeCompleteness.scientificStatus\"\n );\n const limitation =\n record.limitation === undefined\n ? undefined\n : requireNonEmptyString(\n record.limitation,\n \"sensorAccumulatedChargeCompleteness.limitation\"\n );\n if (\n scientificStatus === \"approximation\" &&\n limitation === undefined\n ) {\n throw new InvalidConfigurationError(\n \"sensorAccumulatedChargeCompleteness.limitation is required for an approximation.\"\n );\n }\n if (\n !Array.isArray(\n record.includedAdditionalComponentIds\n )\n ) {\n throw new InvalidConfigurationError(\n \"sensorAccumulatedChargeCompleteness.includedAdditionalComponentIds must be an array.\"\n );\n }\n\n const ids =\n record.includedAdditionalComponentIds.map(\n (entry, index) =>\n requireNonEmptyString(\n entry,\n \"sensorAccumulatedChargeCompleteness.includedAdditionalComponentIds[\" +\n index +\n \"]\"\n )\n );\n if (\n new Set(ids).size !== ids.length\n ) {\n throw new InvalidConfigurationError(\n \"sensorAccumulatedChargeCompleteness.includedAdditionalComponentIds must not contain duplicates.\"\n );\n }\n\n return {\n schemaVersion: \"0.1.0\",\n profileId:\n requireNonEmptyString(\n record.profileId,\n \"sensorAccumulatedChargeCompleteness.profileId\"\n ),\n colorSamplingProfileId:\n requireNonEmptyString(\n record.colorSamplingProfileId,\n \"sensorAccumulatedChargeCompleteness.colorSamplingProfileId\"\n ),\n channelId:\n requireNonEmptyString(\n record.channelId,\n \"sensorAccumulatedChargeCompleteness.channelId\"\n ),\n site: {\n x: requireSiteIndex(\n site.x,\n \"sensorAccumulatedChargeCompleteness.site.x\"\n ),\n y: requireSiteIndex(\n site.y,\n \"sensorAccumulatedChargeCompleteness.site.y\"\n )\n },\n bindingId: window.bindingId,\n timeReference:\n window.timeReference,\n startOffsetSecondsFromOpeningReference:\n window.start,\n endOffsetSecondsFromOpeningReference:\n window.end,\n darkCurrentProfileId:\n requireNonEmptyString(\n record.darkCurrentProfileId,\n \"sensorAccumulatedChargeCompleteness.darkCurrentProfileId\"\n ),\n includedAdditionalComponentIds:\n [...ids].sort(),\n coverageMeaning:\n \"all-material-stored-electron-contributors-accounted-for\",\n scientificStatus,\n evidence: parseEvidenceList(\n record.evidence,\n \"sensorAccumulatedChargeCompleteness.evidence\"\n ),\n ...(limitation === undefined\n ? {}\n : { limitation })\n };\n}\n\nfunction sameSite(\n a: { x: number; y: number },\n b: { x: number; y: number }\n): boolean {\n return a.x === b.x && a.y === b.y;\n}\n\nfunction sameWindow(\n startA: number,\n endA: number,\n startB: number,\n endB: number\n): boolean {\n return (\n startA === startB &&\n endA === endB\n );\n}\n\nfunction validatePhoto(\n photo:\n SensorEqePhotoExposure\n): void {\n requireInputObject(photo, \"photo input\");\n if (photo.kind === \"eqe-temporal-photo-signal\") parseSensorEqeTemporalPhotoSignal(photo);\n if (\n (photo.kind !== \"eqe-expected-counts\" && photo.kind !== \"eqe-temporal-photo-signal\") ||\n photo.temporalIntegrationApplied !==\n true ||\n photo.accumulatedSignalCompleteness !==\n \"photo-signal-only\" ||\n photo.darkChargeIncluded !== false ||\n photo.otherChargeIncluded !== false ||\n photo\n .physicalFullWellAssessmentAuthorized !==\n false\n ) {\n throw new InvalidScientificInputError(\n \"Charge composition requires an unmodified photo-signal-only EQE exposure result.\"\n );\n }\n if (\n !Number.isFinite(\n photo\n .expectedGeneratedElectronCount\n ) ||\n photo\n .expectedGeneratedElectronCount < 0\n ) {\n throw new InvalidScientificInputError(\n \"Photo expected electron count must be finite and nonnegative.\"\n );\n }\n}\n\nfunction validateDarkBinding(\n photo:\n SensorEqePhotoExposure,\n dark:\n SensorPhotoDarkCurrentCharge\n): void {\n if (\n dark.colorSamplingProfileId !==\n photo.colorSamplingProfileId ||\n dark.channelId !==\n photo.channelId ||\n !sameSite(dark.site, photo.site) ||\n dark.bindingId !==\n photo.bindingId ||\n (photo.kind === \"eqe-temporal-photo-signal\"\n ? dark.stationarityProfileId !== undefined || dark.temporalIntegrationId !== photo.temporalIntegrationId\n : dark.temporalIntegrationId !== undefined || dark.stationarityProfileId !== photo.stationarityProfileId) ||\n dark.timeReference !==\n photo.timeReference ||\n !sameWindow(\n dark.startOffsetSecondsFromOpeningReference,\n dark.endOffsetSecondsFromOpeningReference,\n photo.startOffsetSecondsFromOpeningReference,\n photo.endOffsetSecondsFromOpeningReference\n ) ||\n dark.localExposureDurationSeconds !==\n photo.localExposureDurationSeconds ||\n dark.photoSignalIncluded !== false ||\n dark.otherChargeIncluded !== false ||\n dark\n .physicalFullWellAssessmentAuthorized !==\n false\n ) {\n throw new InvalidScientificInputError(\n \"Dark charge must bind to the exact same uncombined EQE local exposure event.\"\n );\n }\n if (\n !Number.isFinite(\n dark.expectedDarkElectronCount\n ) ||\n dark.expectedDarkElectronCount < 0\n ) {\n throw new InvalidScientificInputError(\n \"Dark expected electron count must be finite and nonnegative.\"\n );\n }\n}\n\nfunction validateComponentBinding(\n component:\n SensorAdditionalStoredChargeComponent,\n photo:\n SensorEqePhotoExposure\n): void {\n if (\n component.colorSamplingProfileId !==\n photo.colorSamplingProfileId ||\n component.channelId !==\n photo.channelId ||\n !sameSite(\n component.site,\n photo.site\n ) ||\n component.bindingId !==\n photo.bindingId ||\n component.timeReference !==\n photo.timeReference ||\n !sameWindow(\n component.startOffsetSecondsFromOpeningReference,\n component.endOffsetSecondsFromOpeningReference,\n photo.startOffsetSecondsFromOpeningReference,\n photo.endOffsetSecondsFromOpeningReference\n )\n ) {\n throw new InvalidScientificInputError(\n \"Additional stored-charge component must bind to the exact same local exposure event.\"\n );\n }\n}\n\n/**\n * Adds photo charge, separately computed dark charge and any explicitly declared extra charge for\n * one exact local exposure, and keeps the completeness assessment. Capacity and noise come later.\n *\n * All parts must belong to the exact same site, colour channel and local shutter event. The\n * result is the expected charge, separate from a random realization or the full-well clamp.\n * @param input - Charge input with a per-exposure photo signal (SensorEqeExposureIntegration) and\n * dark charge (SensorDarkCurrentCharge); see `ComposeSensorAccumulatedChargeInput`.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function composeSensorAccumulatedCharge(\n input: Omit<ComposeSensorAccumulatedChargeInput, \"photoSignal\" | \"darkCharge\"> & {\n photoSignal: SensorEqeExposureIntegration; darkCharge: SensorDarkCurrentCharge;\n }\n): CalculationResult<SensorAccumulatedChargeComposition>;\n/**\n * Adds photo charge, separately computed dark charge and any explicitly declared extra charge for\n * one exact local exposure, and keeps the completeness assessment. Capacity and noise come later.\n *\n * All parts must belong to the exact same site, colour channel and local shutter event. The\n * result is the expected charge, separate from a random realization or the full-well clamp.\n * @param input - Charge input with a time-resolved photo signal (SensorEqeTemporalPhotoSignal) and\n * dark charge (SensorTemporalDarkCurrentCharge); see `ComposeSensorAccumulatedChargeInput`.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function composeSensorAccumulatedCharge(\n input: Omit<ComposeSensorAccumulatedChargeInput, \"photoSignal\" | \"darkCharge\"> & {\n photoSignal: SensorEqeTemporalPhotoSignal; darkCharge: SensorTemporalDarkCurrentCharge;\n }\n): CalculationResult<SensorAccumulatedChargeComposition<SensorEqeTemporalPhotoSignal, SensorTemporalDarkCurrentCharge>>;\n/**\n * Adds photo charge, separately computed dark charge and any explicitly declared extra charge for\n * one exact local exposure, and keeps the completeness assessment. Capacity and noise come later.\n *\n * All parts must belong to the exact same site, colour channel and local shutter event. The\n * result is the expected charge, separate from a random realization or the full-well clamp.\n * @param input - The input; see `ComposeSensorPhotoAccumulatedChargeInput` for its fields, units and coordinates.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function composeSensorAccumulatedCharge(\n input: ComposeSensorPhotoAccumulatedChargeInput\n): CalculationResult<SensorPhotoAccumulatedChargeComposition>;\n/**\n * Adds photo charge, separately computed dark charge and any explicitly declared extra charge for\n * one exact local exposure, and keeps the completeness assessment. Capacity and noise come later.\n *\n * All parts must belong to the exact same site, colour channel and local shutter event. The\n * result is the expected charge, separate from a random realization or the full-well clamp.\n * @param input - The input; see `ComposeSensorPhotoAccumulatedChargeInput` for its fields, units and coordinates.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function composeSensorAccumulatedCharge(\n input: ComposeSensorPhotoAccumulatedChargeInput\n): CalculationResult<SensorPhotoAccumulatedChargeComposition> {\n requireInputKeys(input, \"composeSensorAccumulatedCharge\", [\"photoSignal\", \"darkCharge\", \"additionalChargeComponents\", \"completenessProfile\"]);\n validatePhoto(input.photoSignal);\n validateDarkBinding(\n input.photoSignal,\n input.darkCharge\n );\n const profile =\n parseSensorAccumulatedChargeCompletenessProfile(\n input.completenessProfile\n );\n const components =\n (\n input.additionalChargeComponents ??\n []\n ).map(\n parseSensorAdditionalStoredChargeComponent\n );\n\n if (\n profile.colorSamplingProfileId !==\n input.photoSignal\n .colorSamplingProfileId ||\n profile.channelId !==\n input.photoSignal.channelId ||\n !sameSite(\n profile.site,\n input.photoSignal.site\n ) ||\n profile.bindingId !==\n input.photoSignal.bindingId ||\n profile.timeReference !==\n input.photoSignal.timeReference ||\n !sameWindow(\n profile.startOffsetSecondsFromOpeningReference,\n profile.endOffsetSecondsFromOpeningReference,\n input.photoSignal.startOffsetSecondsFromOpeningReference,\n input.photoSignal.endOffsetSecondsFromOpeningReference\n ) ||\n profile.darkCurrentProfileId !==\n input.darkCharge\n .darkCurrentProfileId\n ) {\n throw new InvalidScientificInputError(\n \"Charge-completeness profile must bind to the exact photo/dark exposure pipeline.\"\n );\n }\n\n const seen =\n new Set<string>();\n for (const component of components) {\n validateComponentBinding(\n component,\n input.photoSignal\n );\n if (\n seen.has(component.componentId)\n ) {\n throw new InvalidScientificInputError(\n \"Additional stored-charge component IDs must be unique.\"\n );\n }\n seen.add(component.componentId);\n }\n\n const actualIds =\n [...seen].sort();\n if (\n JSON.stringify(actualIds) !==\n JSON.stringify(\n profile\n .includedAdditionalComponentIds\n )\n ) {\n throw new InvalidScientificInputError(\n \"Charge-completeness profile additional component IDs must exactly match the supplied components.\"\n );\n }\n\n const sum: CompensatedSum = {\n sum: 0,\n correction: 0\n };\n addCompensated(\n sum,\n input.photoSignal\n .expectedGeneratedElectronCount\n );\n addCompensated(\n sum,\n input.darkCharge\n .expectedDarkElectronCount\n );\n\n let additionalTotal = 0;\n for (const component of components) {\n additionalTotal +=\n component.expectedElectronCount;\n addCompensated(\n sum,\n component.expectedElectronCount\n );\n }\n\n if (\n !Number.isFinite(\n additionalTotal\n ) ||\n !Number.isFinite(sum.sum) ||\n sum.sum < 0\n ) {\n throw new InvalidScientificInputError(\n \"Accumulated stored-electron totals must remain finite and nonnegative.\"\n );\n }\n\n const result:\n SensorPhotoAccumulatedChargeComposition = {\n completenessProfileId:\n profile.profileId,\n colorSamplingProfileId:\n input.photoSignal\n .colorSamplingProfileId,\n channelId:\n input.photoSignal.channelId,\n site: {\n ...input.photoSignal.site\n },\n bindingId:\n input.photoSignal.bindingId,\n timeReference:\n input.photoSignal.timeReference,\n startOffsetSecondsFromOpeningReference:\n input.photoSignal\n .startOffsetSecondsFromOpeningReference,\n endOffsetSecondsFromOpeningReference:\n input.photoSignal\n .endOffsetSecondsFromOpeningReference,\n localExposureDurationSeconds:\n input.photoSignal\n .localExposureDurationSeconds,\n photoExpectedElectronCount:\n input.photoSignal\n .expectedGeneratedElectronCount,\n darkExpectedElectronCount:\n input.darkCharge\n .expectedDarkElectronCount,\n additionalExpectedElectronCount:\n additionalTotal,\n totalExpectedStoredElectronCount:\n sum.sum,\n additionalComponents:\n components.map(\n (component) => ({\n componentId:\n component.componentId,\n kind: component.kind,\n expectedElectronCount:\n component.expectedElectronCount,\n scientificStatus:\n component.scientificStatus,\n uncertainty:\n component.uncertainty,\n evidence:\n component.evidence\n })\n ),\n accumulatedChargeCompleteness:\n \"complete-for-physical-storage-capacity-assessment\",\n completenessScientificStatus:\n profile.scientificStatus,\n allCountsAreExpectationValues:\n true,\n integerChargeSampled: false,\n photoSignalIncluded: true,\n darkChargeIncluded: true,\n otherChargeIncluded:\n components.length > 0,\n darkShotNoiseApplied: false,\n photoShotNoiseApplied: false,\n readNoiseApplied: false,\n physicalFullWellAssessmentAuthorized:\n true,\n cameraSaturationAssessmentAuthorized:\n false,\n saturationAssessed: false,\n bloomingModeled: false,\n adcQuantizationApplied:\n false,\n rawCodeValueProduced: false,\n componentEvidence: {\n completeness:\n profile.evidence,\n photoSignal:\n input.photoSignal\n .componentEvidence,\n darkCurrent:\n input.darkCharge\n .componentEvidence\n }\n };\n\n const assumptions = [\n \"Stored-electron accounting is bound to one exact EQE local exposure event; equal duration alone is insufficient.\",\n \"Photo-signal expected electrons and thermally generated dark electrons are separate terms.\",\n \"Every additional component must declare itself incremental beyond both modeled photo signal and modeled dark current to avoid silent double counting.\",\n \"The completeness profile is an evidence-backed scientific assertion that all material stored-electron contributors for physical charge-capacity assessment are accounted for; it is not inferred from an empty additional-component list.\",\n \"All values remain expectation counts. Photo/dark shot noise, read noise and stochastic integer sampling are not applied.\",\n \"Physical full-well assessment becomes structurally authorized, but no saturation or blooming behavior is calculated by this composition.\",\n \"Camera/digital saturation remains a separate response-chain property and is not authorized by physical charge completeness.\",\n \"A/W current/charge results remain outside this stored-electron composition until a separate carrier/storage mapping exists.\"\n ];\n\n return profile.scientificStatus ===\n \"calibrated\"\n ? calculatedResult(\n result,\n \"sensor-accumulated-charge-composition\",\n input.photoSignal.kind === \"eqe-temporal-photo-signal\" ? \"1.1.0\" : \"1.0.0\",\n assumptions\n )\n : approximationResult(\n result,\n \"sensor-accumulated-charge-composition\",\n input.photoSignal.kind === \"eqe-temporal-photo-signal\" ? \"1.1.0\" : \"1.0.0\",\n [\n ...assumptions,\n profile.limitation!\n ]\n );\n}\n"]}
@@ -1,10 +1,9 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Parses untrusted descriptive sensor-architecture metadata. Schema 0.2.0 remains accepted and returns
4
- * a 0.2.0 profile unchanged in semantic identity. Schema 0.3.0 adds optional evidence-backed CMOS/CCD
5
- * technology-family metadata. Unknown facts should be omitted instead of inferred. The parser
6
- * validates structure, supported vocabulary, and field-level evidence only; it does not verify that a
7
- * cited real-world claim is factually true and technology family does not activate hidden physics.
2
+ * Sensor architecture: descriptive metadata about a sensor's hardware (such as CMOS or CCD, and its
3
+ * readout capabilities), each fact backed by evidence.
4
+ *
5
+ * This metadata describes; it does not switch on any physics. The parser checks structure, allowed
6
+ * values and per-field evidence. It does not check that a cited real-world claim is true.
8
7
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
9
8
  * limits.
10
9
  */
@@ -24,9 +23,9 @@ interface SensorArchitectureProfileBase {
24
23
  illumination?: SourcedSensorArchitectureFact<SensorIlluminationArchitecture>;
25
24
  integration?: SourcedSensorArchitectureFact<SensorIntegrationArchitecture>;
26
25
  /**
27
- * Hardware readout capabilities, not the readout mode selected for one
28
- * capture. Each capability carries its own evidence because different
29
- * readout modes may be documented by different sources.
26
+ * Readout modes the hardware supports, not the mode chosen for one capture.
27
+ * Each capability has its own evidence, because different readout modes may
28
+ * be documented by different sources.
30
29
  */
31
30
  readoutCapabilities?: readonly SourcedSensorArchitectureFact<SensorReadoutArchitecture>[];
32
31
  colorSamplingFamily?: SourcedSensorArchitectureFact<SensorColorSamplingFamily>;
@@ -34,42 +33,40 @@ interface SensorArchitectureProfileBase {
34
33
  /**
35
34
  * Legacy sensor-architecture schema.
36
35
  *
37
- * Schema 0.2.0 remains accepted and is preserved exactly when parsed. It does
38
- * not support technologyFamily; omission remains unknown/unasserted.
36
+ * Schema 0.2.0 is still accepted and kept exactly as parsed. It has no
37
+ * technologyFamily field; leaving it out means "unknown, not stated".
39
38
  */
40
39
  export interface SensorArchitectureProfileV0_2 extends SensorArchitectureProfileBase {
41
40
  schemaVersion: typeof LEGACY_SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION;
42
41
  technologyFamily?: never;
43
42
  }
44
43
  /**
45
- * Current descriptive sensor hardware/capability metadata.
44
+ * Current descriptive metadata about the sensor hardware and its capabilities.
46
45
  *
47
- * Omitted properties mean unknown/unasserted. These fields are not scientific
48
- * effect switches: no architecture value changes noise, dynamic range, FOV,
49
- * crop factor, exposure, readout timing, or sampling without a separate
50
- * downstream model that explicitly consumes that fact.
46
+ * An omitted property means "unknown, not stated". These fields do not switch
47
+ * on scientific effects. No architecture value changes noise, dynamic range,
48
+ * field of view, crop factor, exposure, readout timing or sampling unless a
49
+ * separate downstream model explicitly uses that fact.
51
50
  */
52
51
  export interface SensorArchitectureProfileV0_3 extends SensorArchitectureProfileBase {
53
52
  schemaVersion: typeof SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION;
54
- /** Coarse detector technology identity only; never a performance switch. */
53
+ /** Broad detector technology (for example CMOS or CCD) only. It never changes performance. */
55
54
  technologyFamily?: SourcedSensorArchitectureFact<SensorTechnologyFamily>;
56
55
  }
57
56
  export type SensorArchitectureProfile = SensorArchitectureProfileV0_2 | SensorArchitectureProfileV0_3;
58
57
  /**
59
58
  * Parses untrusted descriptive sensor-architecture metadata.
60
59
  *
61
- * Schema 0.2.0 remains accepted and returns a 0.2.0 profile unchanged in
62
- * semantic identity. Schema 0.3.0 adds optional evidence-backed CMOS/CCD
63
- * technology-family metadata. Unknown facts should be omitted instead of
64
- * inferred.
60
+ * Schema 0.2.0 is still accepted and returns a 0.2.0 profile with the same
61
+ * meaning. Schema 0.3.0 adds an optional, evidence-backed technology family
62
+ * (CMOS or CCD). Leave out facts you do not know rather than guessing them.
65
63
  *
66
- * The parser validates structure, supported vocabulary, and field-level
67
- * evidence only; it does not verify that a cited real-world claim is
68
- * factually true and technology family does not activate hidden physics.
64
+ * The parser checks structure, allowed values and per-field evidence only. It
65
+ * does not check that a cited real-world claim is true, and the technology
66
+ * family does not switch on any hidden physics.
69
67
  *
70
68
  * @param value Unknown external data.
71
69
  * @returns Validated sensor architecture profile preserving input schema identity.
72
70
  */
73
71
  export declare function parseSensorArchitectureProfile(value: unknown): SensorArchitectureProfile;
74
72
  export {};
75
- //# sourceMappingURL=architecture.d.ts.map
@@ -1,15 +1,15 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Parses untrusted descriptive sensor-architecture metadata. Schema 0.2.0 remains accepted and returns
5
- * a 0.2.0 profile unchanged in semantic identity. Schema 0.3.0 adds optional evidence-backed CMOS/CCD
6
- * technology-family metadata. Unknown facts should be omitted instead of inferred. The parser
7
- * validates structure, supported vocabulary, and field-level evidence only; it does not verify that a
8
- * cited real-world claim is factually true and technology family does not activate hidden physics.
3
+ * Sensor architecture: descriptive metadata about a sensor's hardware (such as CMOS or CCD, and its
4
+ * readout capabilities), each fact backed by evidence.
5
+ *
6
+ * This metadata describes; it does not switch on any physics. The parser checks structure, allowed
7
+ * values and per-field evidence. It does not check that a cited real-world claim is true.
9
8
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
10
9
  * limits.
11
10
  */
12
11
  import { parseEvidenceList } from "../core/evidence-provenance.js";
12
+ import { rejectUnknownFields } from "../core/record-validation.js";
13
13
  import { InvalidConfigurationError } from "../core/configuration-error.js";
14
14
  export const SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION = "0.3.0";
15
15
  const LEGACY_SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION = "0.2.0";
@@ -37,10 +37,12 @@ const COLOR_SAMPLING_VALUES = new Set([
37
37
  "custom-rgb-mosaic",
38
38
  "layered-color"
39
39
  ]);
40
- function requireRecord(value, path) {
40
+ function requireRecord(value, path, allowedKeys) {
41
41
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
42
42
  throw new InvalidConfigurationError(`${path} must be an object.`);
43
43
  }
44
+ if (allowedKeys !== null)
45
+ rejectUnknownFields(value, allowedKeys, path);
44
46
  return value;
45
47
  }
46
48
  function requireNonEmptyString(record, key, path) {
@@ -51,7 +53,7 @@ function requireNonEmptyString(record, key, path) {
51
53
  return value;
52
54
  }
53
55
  function parseScalarFact(value, path, allowed) {
54
- const record = requireRecord(value, path);
56
+ const record = requireRecord(value, path, ["value", "evidence"]);
55
57
  const factValue = requireNonEmptyString(record, "value", path);
56
58
  if (!allowed.has(factValue)) {
57
59
  throw new InvalidConfigurationError(`${path}.value is invalid.`);
@@ -99,20 +101,19 @@ function parseSharedArchitectureFields(profile) {
99
101
  /**
100
102
  * Parses untrusted descriptive sensor-architecture metadata.
101
103
  *
102
- * Schema 0.2.0 remains accepted and returns a 0.2.0 profile unchanged in
103
- * semantic identity. Schema 0.3.0 adds optional evidence-backed CMOS/CCD
104
- * technology-family metadata. Unknown facts should be omitted instead of
105
- * inferred.
104
+ * Schema 0.2.0 is still accepted and returns a 0.2.0 profile with the same
105
+ * meaning. Schema 0.3.0 adds an optional, evidence-backed technology family
106
+ * (CMOS or CCD). Leave out facts you do not know rather than guessing them.
106
107
  *
107
- * The parser validates structure, supported vocabulary, and field-level
108
- * evidence only; it does not verify that a cited real-world claim is
109
- * factually true and technology family does not activate hidden physics.
108
+ * The parser checks structure, allowed values and per-field evidence only. It
109
+ * does not check that a cited real-world claim is true, and the technology
110
+ * family does not switch on any hidden physics.
110
111
  *
111
112
  * @param value Unknown external data.
112
113
  * @returns Validated sensor architecture profile preserving input schema identity.
113
114
  */
114
115
  export function parseSensorArchitectureProfile(value) {
115
- const profile = requireRecord(value, "sensorArchitecture");
116
+ const profile = requireRecord(value, "sensorArchitecture", ["illumination", "integration", "readoutCapabilities", "colorSamplingFamily", "schemaVersion", "technologyFamily"]);
116
117
  const shared = parseSharedArchitectureFields(profile);
117
118
  if (profile.schemaVersion ===
118
119
  LEGACY_SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION) {
@@ -1 +1 @@
1
- {"version":3,"file":"architecture.js","sourceRoot":"","sources":["../../src/sensor/architecture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"architecture.js","sourceRoot":"","sources":["../../src/sensor/architecture.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Sensor architecture: descriptive metadata about a sensor's hardware (such as CMOS or CCD, and its\n * readout capabilities), each fact backed by evidence.\n *\n * This metadata describes; it does not switch on any physics. The parser checks structure, allowed\n * values and per-field evidence. It does not check that a cited real-world claim is true.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport {\n parseEvidenceList,\n type EvidenceBackedFact,\n type EvidenceProvenance,\n type EvidenceReuseStatus,\n type EvidenceSourceOrigin\n} from \"../core/evidence-provenance.js\";\nimport { rejectUnknownFields } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport const SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION = \"0.3.0\" as const;\nconst LEGACY_SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION = \"0.2.0\" as const;\n\nexport type SensorTechnologyFamily = \"cmos\" | \"ccd\";\n\nexport type SensorIlluminationArchitecture = \"fsi\" | \"bsi\";\n\nexport type SensorIntegrationArchitecture =\n | \"monolithic\"\n | \"partially-stacked\"\n | \"stacked\";\n\nexport type SensorReadoutArchitecture = \"rolling\" | \"global\";\n\nexport type SensorColorSamplingFamily =\n | \"bayer\"\n | \"quad-bayer\"\n | \"monochrome\"\n | \"custom-rgb-mosaic\"\n | \"layered-color\";\n\nexport type SensorArchitectureSourceKind = EvidenceSourceOrigin;\nexport type SensorArchitectureReuseStatus = EvidenceReuseStatus;\nexport type SensorArchitectureFactProvenance = EvidenceProvenance;\nexport type SourcedSensorArchitectureFact<T> = EvidenceBackedFact<T>;\n\ninterface SensorArchitectureProfileBase {\n illumination?: SourcedSensorArchitectureFact<SensorIlluminationArchitecture>;\n integration?: SourcedSensorArchitectureFact<SensorIntegrationArchitecture>;\n /**\n * Readout modes the hardware supports, not the mode chosen for one capture.\n * Each capability has its own evidence, because different readout modes may\n * be documented by different sources.\n */\n readoutCapabilities?: readonly SourcedSensorArchitectureFact<SensorReadoutArchitecture>[];\n colorSamplingFamily?: SourcedSensorArchitectureFact<SensorColorSamplingFamily>;\n}\n\n/**\n * Legacy sensor-architecture schema.\n *\n * Schema 0.2.0 is still accepted and kept exactly as parsed. It has no\n * technologyFamily field; leaving it out means \"unknown, not stated\".\n */\nexport interface SensorArchitectureProfileV0_2\n extends SensorArchitectureProfileBase {\n schemaVersion: typeof LEGACY_SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION;\n technologyFamily?: never;\n}\n\n/**\n * Current descriptive metadata about the sensor hardware and its capabilities.\n *\n * An omitted property means \"unknown, not stated\". These fields do not switch\n * on scientific effects. No architecture value changes noise, dynamic range,\n * field of view, crop factor, exposure, readout timing or sampling unless a\n * separate downstream model explicitly uses that fact.\n */\nexport interface SensorArchitectureProfileV0_3\n extends SensorArchitectureProfileBase {\n schemaVersion: typeof SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION;\n /** Broad detector technology (for example CMOS or CCD) only. It never changes performance. */\n technologyFamily?: SourcedSensorArchitectureFact<SensorTechnologyFamily>;\n}\n\nexport type SensorArchitectureProfile =\n | SensorArchitectureProfileV0_2\n | SensorArchitectureProfileV0_3;\n\nconst TECHNOLOGY_FAMILY_VALUES = new Set<SensorTechnologyFamily>([\n \"cmos\",\n \"ccd\"\n]);\n\nconst ILLUMINATION_VALUES = new Set<SensorIlluminationArchitecture>([\n \"fsi\",\n \"bsi\"\n]);\n\nconst INTEGRATION_VALUES = new Set<SensorIntegrationArchitecture>([\n \"monolithic\",\n \"partially-stacked\",\n \"stacked\"\n]);\n\nconst READOUT_VALUES = new Set<SensorReadoutArchitecture>([\n \"rolling\",\n \"global\"\n]);\n\nconst COLOR_SAMPLING_VALUES = new Set<SensorColorSamplingFamily>([\n \"bayer\",\n \"quad-bayer\",\n \"monochrome\",\n \"custom-rgb-mosaic\",\n \"layered-color\"\n]);\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new InvalidConfigurationError(`${path} must be an object.`);\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n record: UnknownRecord,\n key: string,\n path: string\n): string {\n const value = record[key];\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new InvalidConfigurationError(\n `${path}.${key} must be a non-empty string.`\n );\n }\n return value;\n}\n\nfunction parseScalarFact<T extends string>(\n value: unknown,\n path: string,\n allowed: ReadonlySet<T>\n): SourcedSensorArchitectureFact<T> {\n const record = requireRecord(value, path, [\"value\", \"evidence\"]);\n const factValue = requireNonEmptyString(record, \"value\", path);\n if (!allowed.has(factValue as T)) {\n throw new InvalidConfigurationError(`${path}.value is invalid.`);\n }\n\n return {\n value: factValue as T,\n evidence: parseEvidenceList(record.evidence, `${path}.evidence`)\n };\n}\n\nfunction parseReadoutCapabilities(\n value: unknown,\n path: string\n): readonly SourcedSensorArchitectureFact<SensorReadoutArchitecture>[] {\n if (!Array.isArray(value) || value.length === 0) {\n throw new InvalidConfigurationError(\n `${path} must be a non-empty array.`\n );\n }\n\n const parsed = value.map((entry, index) =>\n parseScalarFact(\n entry,\n `${path}[${index}]`,\n READOUT_VALUES\n )\n );\n\n const values = parsed.map((fact) => fact.value);\n if (new Set(values).size !== values.length) {\n throw new InvalidConfigurationError(\n `${path} must not contain duplicate capability values.`\n );\n }\n\n return parsed;\n}\n\nfunction parseSharedArchitectureFields(\n profile: UnknownRecord\n): SensorArchitectureProfileBase {\n return {\n ...(profile.illumination === undefined\n ? {}\n : {\n illumination: parseScalarFact(\n profile.illumination,\n \"sensorArchitecture.illumination\",\n ILLUMINATION_VALUES\n )\n }),\n ...(profile.integration === undefined\n ? {}\n : {\n integration: parseScalarFact(\n profile.integration,\n \"sensorArchitecture.integration\",\n INTEGRATION_VALUES\n )\n }),\n ...(profile.readoutCapabilities === undefined\n ? {}\n : {\n readoutCapabilities: parseReadoutCapabilities(\n profile.readoutCapabilities,\n \"sensorArchitecture.readoutCapabilities\"\n )\n }),\n ...(profile.colorSamplingFamily === undefined\n ? {}\n : {\n colorSamplingFamily: parseScalarFact(\n profile.colorSamplingFamily,\n \"sensorArchitecture.colorSamplingFamily\",\n COLOR_SAMPLING_VALUES\n )\n })\n };\n}\n\n/**\n * Parses untrusted descriptive sensor-architecture metadata.\n *\n * Schema 0.2.0 is still accepted and returns a 0.2.0 profile with the same\n * meaning. Schema 0.3.0 adds an optional, evidence-backed technology family\n * (CMOS or CCD). Leave out facts you do not know rather than guessing them.\n *\n * The parser checks structure, allowed values and per-field evidence only. It\n * does not check that a cited real-world claim is true, and the technology\n * family does not switch on any hidden physics.\n *\n * @param value Unknown external data.\n * @returns Validated sensor architecture profile preserving input schema identity.\n */\nexport function parseSensorArchitectureProfile(\n value: unknown\n): SensorArchitectureProfile {\n const profile = requireRecord(value, \"sensorArchitecture\", [\"illumination\", \"integration\", \"readoutCapabilities\", \"colorSamplingFamily\", \"schemaVersion\", \"technologyFamily\"]);\n const shared = parseSharedArchitectureFields(profile);\n\n if (\n profile.schemaVersion ===\n LEGACY_SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION\n ) {\n if (profile.technologyFamily !== undefined) {\n throw new InvalidConfigurationError(\n \"sensorArchitecture schema 0.2.0 does not support technologyFamily; use schema 0.3.0.\"\n );\n }\n\n return {\n schemaVersion: LEGACY_SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION,\n ...shared\n };\n }\n\n if (profile.schemaVersion === SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION) {\n return {\n schemaVersion: SENSOR_ARCHITECTURE_PROFILE_SCHEMA_VERSION,\n ...shared,\n ...(profile.technologyFamily === undefined\n ? {}\n : {\n technologyFamily: parseScalarFact(\n profile.technologyFamily,\n \"sensorArchitecture.technologyFamily\",\n TECHNOLOGY_FAMILY_VALUES\n )\n })\n };\n }\n\n throw new InvalidConfigurationError(\n 'sensorArchitecture.schemaVersion must be \"0.2.0\" or \"0.3.0\".'\n );\n}\n"]}
@@ -1,15 +1,11 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
4
- * missing required fields and incompatible scientific data fail at this boundary. Camera saturation
5
- * capacity is a dark-corrected photo-signal electron-equivalent limit. It is not physical total-charge
6
- * storage capacity, ADC maximum or evidence of the limiting hardware stage. This assessment compares
7
- * expectations and does not synthesize post-saturation codes.
8
- * Compare dark-corrected expected photo signal with the declared camera response-chain capacity
9
- * without adding dark charge or identifying a hardware clamp. Camera saturation capacity is a
10
- * dark-corrected photo-signal electron-equivalent limit. It is not physical total-charge storage
11
- * capacity, ADC maximum or evidence of the limiting hardware stage. This assessment compares
12
- * expectations and does not synthesize post-saturation codes.
2
+ * Camera saturation capacity: checks whether the expected photo signal would exceed the camera's
3
+ * declared saturation limit.
4
+ *
5
+ * Camera saturation capacity is the largest photo signal, in electron equivalents and after dark
6
+ * correction, that the whole camera response chain records before saturating. It is not the
7
+ * physical charge a pixel can store, not the ADC maximum, and does not say which hardware stage
8
+ * limits it. The check compares expected values only; it does not make up codes beyond saturation.
13
9
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
14
10
  * limits.
15
11
  */
@@ -110,29 +106,26 @@ export interface SensorCameraSaturationCapacityAssessment {
110
106
  };
111
107
  }
112
108
  /**
113
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
114
- * missing required fields and incompatible scientific data fail at this boundary.
109
+ * Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,
110
+ * missing required fields and inconsistent scientific data are rejected.
115
111
  *
116
- * Camera saturation capacity is a dark-corrected photo-signal electron-equivalent limit. It is not
117
- * physical total-charge storage capacity, ADC maximum or evidence of the limiting hardware stage. This
118
- * assessment compares expectations and does not synthesize post-saturation codes.
119
- * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
120
- * @returns SensorCameraSaturationCapacityProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
112
+ * Camera saturation capacity is a limit on the dark-corrected photo signal, in electron
113
+ * equivalents. It is not the physical charge storage capacity or the ADC maximum, and does not
114
+ * identify which hardware stage limits it.
115
+ * @param value - Untrusted data. TypeScript types alone are not validation.
116
+ * @returns The result. Success does not imply calibration.
121
117
  *
122
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
118
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
123
119
  */
124
120
  export declare function parseSensorCameraSaturationCapacityProfile(value: unknown): SensorCameraSaturationCapacityProfile;
125
121
  /**
126
- * Compare dark-corrected expected photo signal with the declared camera response-chain capacity
127
- * without adding dark charge or identifying a hardware clamp.
122
+ * Compares the expected photo signal (dark-corrected) with the camera's declared saturation
123
+ * capacity. Dark charge is not added, and no hardware clamp is identified.
128
124
  *
129
- * Camera saturation capacity is a dark-corrected photo-signal electron-equivalent limit. It is not
130
- * physical total-charge storage capacity, ADC maximum or evidence of the limiting hardware stage. This
131
- * assessment compares expectations and does not synthesize post-saturation codes.
132
- * @param input - AssessSensorCameraSaturationCapacityInput. See the linked contract for coordinate, unit and profile binding semantics.
133
- * @returns CalculationResult<SensorCameraSaturationCapacityAssessment>. Read structured blockers before consuming an authorization.
125
+ * This compares expected values only. It does not make up codes beyond saturation.
126
+ * @param input - The input; see `AssessSensorCameraSaturationCapacityInput` for its fields, units and coordinates.
127
+ * @returns The assessment. Read its structured blockers before acting on an authorization.
134
128
  *
135
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
129
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
136
130
  */
137
131
  export declare function assessSensorCameraSaturationCapacity(input: AssessSensorCameraSaturationCapacityInput): CalculationResult<SensorCameraSaturationCapacityAssessment>;
138
- //# sourceMappingURL=camera-saturation-capacity.d.ts.map