@photivra/engine 0.6.0 → 1.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 (749) hide show
  1. package/AGENTS.md +674 -0
  2. package/CHANGELOG.md +186 -0
  3. package/CITATION.cff +1 -1
  4. package/CONTRIBUTING.md +76 -0
  5. package/DCO +33 -0
  6. package/NODE_SUPPORT.md +37 -0
  7. package/NOTICE +2 -0
  8. package/README.md +138 -71
  9. package/SECURITY.md +55 -0
  10. package/THIRD_PARTY.md +63 -0
  11. package/dist/camera/equivalent-focal-length.d.ts +9 -0
  12. package/dist/camera/equivalent-focal-length.d.ts.map +1 -1
  13. package/dist/camera/equivalent-focal-length.js +9 -0
  14. package/dist/camera/equivalent-focal-length.js.map +1 -1
  15. package/dist/camera/field-of-view.d.ts +13 -0
  16. package/dist/camera/field-of-view.d.ts.map +1 -1
  17. package/dist/camera/field-of-view.js +13 -0
  18. package/dist/camera/field-of-view.js.map +1 -1
  19. package/dist/camera/projected-object-size.d.ts +8 -0
  20. package/dist/camera/projected-object-size.d.ts.map +1 -1
  21. package/dist/camera/projected-object-size.js +8 -0
  22. package/dist/camera/projected-object-size.js.map +1 -1
  23. package/dist/capture/capture-export-metadata.d.ts +60 -0
  24. package/dist/capture/capture-export-metadata.d.ts.map +1 -0
  25. package/dist/capture/capture-export-metadata.js +62 -0
  26. package/dist/capture/capture-export-metadata.js.map +1 -0
  27. package/dist/capture/environment-raw-producer.d.ts +55 -0
  28. package/dist/capture/environment-raw-producer.d.ts.map +1 -0
  29. package/dist/capture/environment-raw-producer.js +88 -0
  30. package/dist/capture/environment-raw-producer.js.map +1 -0
  31. package/dist/capture/export-jpeg.d.ts +12 -0
  32. package/dist/capture/export-jpeg.d.ts.map +1 -0
  33. package/dist/capture/export-jpeg.js +126 -0
  34. package/dist/capture/export-jpeg.js.map +1 -0
  35. package/dist/capture/export-tiff.d.ts +45 -0
  36. package/dist/capture/export-tiff.d.ts.map +1 -0
  37. package/dist/capture/export-tiff.js +129 -0
  38. package/dist/capture/export-tiff.js.map +1 -0
  39. package/dist/capture/focus-control.d.ts +210 -0
  40. package/dist/capture/focus-control.d.ts.map +1 -0
  41. package/dist/capture/focus-control.js +664 -0
  42. package/dist/capture/focus-control.js.map +1 -0
  43. package/dist/capture/linear-encoding.d.ts +59 -0
  44. package/dist/capture/linear-encoding.d.ts.map +1 -0
  45. package/dist/capture/linear-encoding.js +98 -0
  46. package/dist/capture/linear-encoding.js.map +1 -0
  47. package/dist/capture/photographic-export.d.ts +135 -0
  48. package/dist/capture/photographic-export.d.ts.map +1 -0
  49. package/dist/capture/photographic-export.js +273 -0
  50. package/dist/capture/photographic-export.js.map +1 -0
  51. package/dist/capture/raw-frame-limits.d.ts +12 -0
  52. package/dist/capture/raw-frame-limits.d.ts.map +1 -0
  53. package/dist/capture/raw-frame-limits.js +13 -0
  54. package/dist/capture/raw-frame-limits.js.map +1 -0
  55. package/dist/capture/raw-frame-reconstruction.d.ts +48 -0
  56. package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -0
  57. package/dist/capture/raw-frame-reconstruction.js +146 -0
  58. package/dist/capture/raw-frame-reconstruction.js.map +1 -0
  59. package/dist/capture/release-sequence.d.ts +120 -0
  60. package/dist/capture/release-sequence.d.ts.map +1 -0
  61. package/dist/capture/release-sequence.js +446 -0
  62. package/dist/capture/release-sequence.js.map +1 -0
  63. package/dist/capture/sensor-raw-frame.d.ts +34 -0
  64. package/dist/capture/sensor-raw-frame.d.ts.map +1 -0
  65. package/dist/capture/sensor-raw-frame.js +106 -0
  66. package/dist/capture/sensor-raw-frame.js.map +1 -0
  67. package/dist/capture/sensor-raw-producer.d.ts +51 -0
  68. package/dist/capture/sensor-raw-producer.d.ts.map +1 -0
  69. package/dist/capture/sensor-raw-producer.js +235 -0
  70. package/dist/capture/sensor-raw-producer.js.map +1 -0
  71. package/dist/capture/simulated-capture.d.ts +125 -0
  72. package/dist/capture/simulated-capture.d.ts.map +1 -0
  73. package/dist/capture/simulated-capture.js +248 -0
  74. package/dist/capture/simulated-capture.js.map +1 -0
  75. package/dist/color/capture-color.d.ts +73 -0
  76. package/dist/color/capture-color.d.ts.map +1 -0
  77. package/dist/color/capture-color.js +145 -0
  78. package/dist/color/capture-color.js.map +1 -0
  79. package/dist/color/sensor-color-development.d.ts +23 -0
  80. package/dist/color/sensor-color-development.d.ts.map +1 -0
  81. package/dist/color/sensor-color-development.js +56 -0
  82. package/dist/color/sensor-color-development.js.map +1 -0
  83. package/dist/color/white-balance.d.ts +175 -0
  84. package/dist/color/white-balance.d.ts.map +1 -0
  85. package/dist/color/white-balance.js +606 -0
  86. package/dist/color/white-balance.js.map +1 -0
  87. package/dist/composition/image-formation-plan.d.ts +481 -0
  88. package/dist/composition/image-formation-plan.d.ts.map +1 -0
  89. package/dist/composition/image-formation-plan.js +2499 -0
  90. package/dist/composition/image-formation-plan.js.map +1 -0
  91. package/dist/composition/plan-consumer.d.ts +53 -0
  92. package/dist/composition/plan-consumer.d.ts.map +1 -0
  93. package/dist/composition/plan-consumer.js +119 -0
  94. package/dist/composition/plan-consumer.js.map +1 -0
  95. package/dist/core/calculation-result.d.ts.map +1 -1
  96. package/dist/core/calculation-result.js +6 -0
  97. package/dist/core/calculation-result.js.map +1 -1
  98. package/dist/core/canonical-json.d.ts +18 -0
  99. package/dist/core/canonical-json.d.ts.map +1 -0
  100. package/dist/core/canonical-json.js +44 -0
  101. package/dist/core/canonical-json.js.map +1 -0
  102. package/dist/core/configuration-error.d.ts +6 -0
  103. package/dist/core/configuration-error.d.ts.map +1 -1
  104. package/dist/core/configuration-error.js +6 -0
  105. package/dist/core/configuration-error.js.map +1 -1
  106. package/dist/core/evidence-provenance.d.ts +6 -0
  107. package/dist/core/evidence-provenance.d.ts.map +1 -1
  108. package/dist/core/evidence-provenance.js +7 -0
  109. package/dist/core/evidence-provenance.js.map +1 -1
  110. package/dist/core/image-formation.d.ts +9 -3
  111. package/dist/core/image-formation.d.ts.map +1 -1
  112. package/dist/core/image-formation.js +29 -5
  113. package/dist/core/image-formation.js.map +1 -1
  114. package/dist/core/owned-data.d.ts +25 -0
  115. package/dist/core/owned-data.d.ts.map +1 -0
  116. package/dist/core/owned-data.js +34 -0
  117. package/dist/core/owned-data.js.map +1 -0
  118. package/dist/core/record-validation.d.ts +17 -0
  119. package/dist/core/record-validation.d.ts.map +1 -0
  120. package/dist/core/record-validation.js +44 -0
  121. package/dist/core/record-validation.js.map +1 -0
  122. package/dist/core/scientific-assurance.d.ts +101 -0
  123. package/dist/core/scientific-assurance.d.ts.map +1 -0
  124. package/dist/core/scientific-assurance.js +301 -0
  125. package/dist/core/scientific-assurance.js.map +1 -0
  126. package/dist/core/spectral-composition.d.ts +106 -0
  127. package/dist/core/spectral-composition.d.ts.map +1 -0
  128. package/dist/core/spectral-composition.js +334 -0
  129. package/dist/core/spectral-composition.js.map +1 -0
  130. package/dist/core/spectral.d.ts +34 -0
  131. package/dist/core/spectral.d.ts.map +1 -0
  132. package/dist/core/spectral.js +57 -0
  133. package/dist/core/spectral.js.map +1 -0
  134. package/dist/core/validation.d.ts +6 -0
  135. package/dist/core/validation.d.ts.map +1 -1
  136. package/dist/core/validation.js +6 -0
  137. package/dist/core/validation.js.map +1 -1
  138. package/dist/core/version.d.ts +14 -0
  139. package/dist/core/version.d.ts.map +1 -0
  140. package/dist/core/version.js +15 -0
  141. package/dist/core/version.js.map +1 -0
  142. package/dist/equipment/exposure-capabilities.d.ts +125 -0
  143. package/dist/equipment/exposure-capabilities.d.ts.map +1 -0
  144. package/dist/equipment/exposure-capabilities.js +391 -0
  145. package/dist/equipment/exposure-capabilities.js.map +1 -0
  146. package/dist/equipment/generic-tier-assets.d.ts +82 -0
  147. package/dist/equipment/generic-tier-assets.d.ts.map +1 -0
  148. package/dist/equipment/generic-tier-assets.js +119 -0
  149. package/dist/equipment/generic-tier-assets.js.map +1 -0
  150. package/dist/equipment/generic-tier-presets.d.ts +57 -0
  151. package/dist/equipment/generic-tier-presets.d.ts.map +1 -0
  152. package/dist/equipment/generic-tier-presets.js +122 -0
  153. package/dist/equipment/generic-tier-presets.js.map +1 -0
  154. package/dist/equipment/iso-capabilities.d.ts +143 -0
  155. package/dist/equipment/iso-capabilities.d.ts.map +1 -0
  156. package/dist/equipment/iso-capabilities.js +578 -0
  157. package/dist/equipment/iso-capabilities.js.map +1 -0
  158. package/dist/equipment/metering-capabilities.d.ts +58 -0
  159. package/dist/equipment/metering-capabilities.d.ts.map +1 -0
  160. package/dist/equipment/metering-capabilities.js +151 -0
  161. package/dist/equipment/metering-capabilities.js.map +1 -0
  162. package/dist/equipment/release-capabilities.d.ts +33 -0
  163. package/dist/equipment/release-capabilities.d.ts.map +1 -0
  164. package/dist/equipment/release-capabilities.js +176 -0
  165. package/dist/equipment/release-capabilities.js.map +1 -0
  166. package/dist/exposure/exposure-duration-control.d.ts +72 -0
  167. package/dist/exposure/exposure-duration-control.d.ts.map +1 -0
  168. package/dist/exposure/exposure-duration-control.js +161 -0
  169. package/dist/exposure/exposure-duration-control.js.map +1 -0
  170. package/dist/exposure/exposure-mode-resolver.d.ts +637 -0
  171. package/dist/exposure/exposure-mode-resolver.d.ts.map +1 -0
  172. package/dist/exposure/exposure-mode-resolver.js +1905 -0
  173. package/dist/exposure/exposure-mode-resolver.js.map +1 -0
  174. package/dist/exposure/exposure.d.ts +8 -0
  175. package/dist/exposure/exposure.d.ts.map +1 -1
  176. package/dist/exposure/exposure.js +8 -0
  177. package/dist/exposure/exposure.js.map +1 -1
  178. package/dist/exposure/flash.d.ts +179 -0
  179. package/dist/exposure/flash.d.ts.map +1 -0
  180. package/dist/exposure/flash.js +644 -0
  181. package/dist/exposure/flash.js.map +1 -0
  182. package/dist/exposure/metering-scene-radiance.d.ts +72 -0
  183. package/dist/exposure/metering-scene-radiance.d.ts.map +1 -0
  184. package/dist/exposure/metering-scene-radiance.js +222 -0
  185. package/dist/exposure/metering-scene-radiance.js.map +1 -0
  186. package/dist/exposure/metering-target.d.ts +67 -0
  187. package/dist/exposure/metering-target.d.ts.map +1 -0
  188. package/dist/exposure/metering-target.js +265 -0
  189. package/dist/exposure/metering-target.js.map +1 -0
  190. package/dist/exposure/metering-temporal.d.ts +76 -0
  191. package/dist/exposure/metering-temporal.d.ts.map +1 -0
  192. package/dist/exposure/metering-temporal.js +210 -0
  193. package/dist/exposure/metering-temporal.js.map +1 -0
  194. package/dist/exposure/metering.d.ts +124 -0
  195. package/dist/exposure/metering.d.ts.map +1 -0
  196. package/dist/exposure/metering.js +422 -0
  197. package/dist/exposure/metering.js.map +1 -0
  198. package/dist/exposure/program-line.d.ts +29 -0
  199. package/dist/exposure/program-line.d.ts.map +1 -0
  200. package/dist/exposure/program-line.js +126 -0
  201. package/dist/exposure/program-line.js.map +1 -0
  202. package/dist/index.d.ts +87 -6
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +85 -6
  205. package/dist/index.js.map +1 -1
  206. package/dist/motion/camera-rotation.d.ts +16 -0
  207. package/dist/motion/camera-rotation.d.ts.map +1 -1
  208. package/dist/motion/camera-rotation.js +16 -0
  209. package/dist/motion/camera-rotation.js.map +1 -1
  210. package/dist/motion/capture-rotation-inverse-mapping.d.ts +13 -0
  211. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -1
  212. package/dist/motion/capture-rotation-inverse-mapping.js +13 -0
  213. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  214. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +15 -0
  215. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -1
  216. package/dist/motion/capture-rotation-temporal-quadrature.js +15 -0
  217. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  218. package/dist/motion/capture-rotation-trajectory.d.ts +15 -0
  219. package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -1
  220. package/dist/motion/capture-rotation-trajectory.js +15 -0
  221. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  222. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +119 -0
  223. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +1 -0
  224. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +263 -0
  225. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -0
  226. package/dist/motion/extended-object-projection.d.ts +175 -0
  227. package/dist/motion/extended-object-projection.d.ts.map +1 -0
  228. package/dist/motion/extended-object-projection.js +402 -0
  229. package/dist/motion/extended-object-projection.js.map +1 -0
  230. package/dist/motion/projected-motion.d.ts +11 -0
  231. package/dist/motion/projected-motion.d.ts.map +1 -1
  232. package/dist/motion/projected-motion.js +11 -0
  233. package/dist/motion/projected-motion.js.map +1 -1
  234. package/dist/optics/aperture.d.ts +9 -0
  235. package/dist/optics/aperture.d.ts.map +1 -1
  236. package/dist/optics/aperture.js +9 -0
  237. package/dist/optics/aperture.js.map +1 -1
  238. package/dist/optics/circle-of-confusion.d.ts +8 -0
  239. package/dist/optics/circle-of-confusion.d.ts.map +1 -1
  240. package/dist/optics/circle-of-confusion.js +8 -0
  241. package/dist/optics/circle-of-confusion.js.map +1 -1
  242. package/dist/optics/complex-pupil-psf.d.ts +128 -0
  243. package/dist/optics/complex-pupil-psf.d.ts.map +1 -0
  244. package/dist/optics/complex-pupil-psf.js +462 -0
  245. package/dist/optics/complex-pupil-psf.js.map +1 -0
  246. package/dist/optics/depth-of-field.d.ts +18 -0
  247. package/dist/optics/depth-of-field.d.ts.map +1 -1
  248. package/dist/optics/depth-of-field.js +29 -4
  249. package/dist/optics/depth-of-field.js.map +1 -1
  250. package/dist/optics/diffraction.d.ts +8 -0
  251. package/dist/optics/diffraction.d.ts.map +1 -1
  252. package/dist/optics/diffraction.js +8 -0
  253. package/dist/optics/diffraction.js.map +1 -1
  254. package/dist/optics/focus-breathing.d.ts +13 -0
  255. package/dist/optics/focus-breathing.d.ts.map +1 -1
  256. package/dist/optics/focus-breathing.js +13 -0
  257. package/dist/optics/focus-breathing.js.map +1 -1
  258. package/dist/optics/focus-state.d.ts +47 -0
  259. package/dist/optics/focus-state.d.ts.map +1 -0
  260. package/dist/optics/focus-state.js +78 -0
  261. package/dist/optics/focus-state.js.map +1 -0
  262. package/dist/optics/front-of-lens-filter.d.ts +114 -0
  263. package/dist/optics/front-of-lens-filter.d.ts.map +1 -0
  264. package/dist/optics/front-of-lens-filter.js +468 -0
  265. package/dist/optics/front-of-lens-filter.js.map +1 -0
  266. package/dist/optics/illumination-vignetting.d.ts +9 -0
  267. package/dist/optics/illumination-vignetting.d.ts.map +1 -1
  268. package/dist/optics/illumination-vignetting.js +9 -0
  269. package/dist/optics/illumination-vignetting.js.map +1 -1
  270. package/dist/optics/lateral-chromatic-aberration.d.ts +11 -0
  271. package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
  272. package/dist/optics/lateral-chromatic-aberration.js +11 -0
  273. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  274. package/dist/optics/lens-psf-profile.d.ts +217 -0
  275. package/dist/optics/lens-psf-profile.d.ts.map +1 -0
  276. package/dist/optics/lens-psf-profile.js +823 -0
  277. package/dist/optics/lens-psf-profile.js.map +1 -0
  278. package/dist/optics/polygon-diffraction.d.ts +67 -0
  279. package/dist/optics/polygon-diffraction.d.ts.map +1 -0
  280. package/dist/optics/polygon-diffraction.js +145 -0
  281. package/dist/optics/polygon-diffraction.js.map +1 -0
  282. package/dist/optics/profile-contract.d.ts +42 -0
  283. package/dist/optics/profile-contract.d.ts.map +1 -0
  284. package/dist/optics/profile-contract.js +92 -0
  285. package/dist/optics/profile-contract.js.map +1 -0
  286. package/dist/optics/psf-foundation.d.ts +16 -3
  287. package/dist/optics/psf-foundation.d.ts.map +1 -1
  288. package/dist/optics/psf-foundation.js +28 -15
  289. package/dist/optics/psf-foundation.js.map +1 -1
  290. package/dist/optics/radial-distortion.d.ts +18 -0
  291. package/dist/optics/radial-distortion.d.ts.map +1 -1
  292. package/dist/optics/radial-distortion.js +18 -0
  293. package/dist/optics/radial-distortion.js.map +1 -1
  294. package/dist/optics/scene-to-sensor-irradiance.d.ts +213 -0
  295. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +1 -0
  296. package/dist/optics/scene-to-sensor-irradiance.js +662 -0
  297. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -0
  298. package/dist/optics/scene-to-sensor-quadrature.d.ts +63 -0
  299. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +1 -0
  300. package/dist/optics/scene-to-sensor-quadrature.js +82 -0
  301. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -0
  302. package/dist/optics/sensor-environment-query.d.ts +60 -0
  303. package/dist/optics/sensor-environment-query.d.ts.map +1 -0
  304. package/dist/optics/sensor-environment-query.js +50 -0
  305. package/dist/optics/sensor-environment-query.js.map +1 -0
  306. package/dist/optics/sensor-psf-quadrature.d.ts +70 -0
  307. package/dist/optics/sensor-psf-quadrature.d.ts.map +1 -0
  308. package/dist/optics/sensor-psf-quadrature.js +101 -0
  309. package/dist/optics/sensor-psf-quadrature.js.map +1 -0
  310. package/dist/optics/sensor-psf-support.d.ts +20 -0
  311. package/dist/optics/sensor-psf-support.d.ts.map +1 -0
  312. package/dist/optics/sensor-psf-support.js +13 -0
  313. package/dist/optics/sensor-psf-support.js.map +1 -0
  314. package/dist/optics/stray-light.d.ts +91 -0
  315. package/dist/optics/stray-light.d.ts.map +1 -0
  316. package/dist/optics/stray-light.js +110 -0
  317. package/dist/optics/stray-light.js.map +1 -0
  318. package/dist/optics/thin-lens.d.ts +8 -0
  319. package/dist/optics/thin-lens.d.ts.map +1 -1
  320. package/dist/optics/thin-lens.js +8 -0
  321. package/dist/optics/thin-lens.js.map +1 -1
  322. package/dist/output/capture-corrected-sdr.d.ts +49 -0
  323. package/dist/output/capture-corrected-sdr.d.ts.map +1 -0
  324. package/dist/output/capture-corrected-sdr.js +149 -0
  325. package/dist/output/capture-corrected-sdr.js.map +1 -0
  326. package/dist/output/capture-geometry.d.ts.map +1 -1
  327. package/dist/output/capture-geometry.js +8 -0
  328. package/dist/output/capture-geometry.js.map +1 -1
  329. package/dist/output/capture-sdr.d.ts +49 -0
  330. package/dist/output/capture-sdr.d.ts.map +1 -0
  331. package/dist/output/capture-sdr.js +90 -0
  332. package/dist/output/capture-sdr.js.map +1 -0
  333. package/dist/output/crop.d.ts +6 -0
  334. package/dist/output/crop.d.ts.map +1 -1
  335. package/dist/output/crop.js +6 -0
  336. package/dist/output/crop.js.map +1 -1
  337. package/dist/output/geometric-transforms.d.ts +137 -0
  338. package/dist/output/geometric-transforms.d.ts.map +1 -0
  339. package/dist/output/geometric-transforms.js +225 -0
  340. package/dist/output/geometric-transforms.js.map +1 -0
  341. package/dist/output/lens-corrections.d.ts +121 -0
  342. package/dist/output/lens-corrections.d.ts.map +1 -0
  343. package/dist/output/lens-corrections.js +210 -0
  344. package/dist/output/lens-corrections.js.map +1 -0
  345. package/dist/output/sdr-rendering.d.ts +81 -0
  346. package/dist/output/sdr-rendering.d.ts.map +1 -0
  347. package/dist/output/sdr-rendering.js +106 -0
  348. package/dist/output/sdr-rendering.js.map +1 -0
  349. package/dist/output/subject-framing-crop.d.ts +8 -0
  350. package/dist/output/subject-framing-crop.d.ts.map +1 -1
  351. package/dist/output/subject-framing-crop.js +8 -0
  352. package/dist/output/subject-framing-crop.js.map +1 -1
  353. package/dist/schema/camera.d.ts +6 -0
  354. package/dist/schema/camera.d.ts.map +1 -1
  355. package/dist/schema/illumination-spectral.d.ts +51 -0
  356. package/dist/schema/illumination-spectral.d.ts.map +1 -0
  357. package/dist/schema/illumination-spectral.js +132 -0
  358. package/dist/schema/illumination-spectral.js.map +1 -0
  359. package/dist/schema/illumination-temporal.d.ts +156 -0
  360. package/dist/schema/illumination-temporal.d.ts.map +1 -0
  361. package/dist/schema/illumination-temporal.js +554 -0
  362. package/dist/schema/illumination-temporal.js.map +1 -0
  363. package/dist/schema/illumination.d.ts +138 -0
  364. package/dist/schema/illumination.d.ts.map +1 -0
  365. package/dist/schema/illumination.js +483 -0
  366. package/dist/schema/illumination.js.map +1 -0
  367. package/dist/schema/scene-radiance-temporal.d.ts +107 -0
  368. package/dist/schema/scene-radiance-temporal.d.ts.map +1 -0
  369. package/dist/schema/scene-radiance-temporal.js +259 -0
  370. package/dist/schema/scene-radiance-temporal.js.map +1 -0
  371. package/dist/schema/scene-radiance.d.ts +185 -0
  372. package/dist/schema/scene-radiance.d.ts.map +1 -0
  373. package/dist/schema/scene-radiance.js +535 -0
  374. package/dist/schema/scene-radiance.js.map +1 -0
  375. package/dist/schema/scene.d.ts +7 -0
  376. package/dist/schema/scene.d.ts.map +1 -1
  377. package/dist/schema/validation.d.ts.map +1 -1
  378. package/dist/schema/validation.js +7 -0
  379. package/dist/schema/validation.js.map +1 -1
  380. package/dist/sensor/accumulated-charge.d.ts +199 -0
  381. package/dist/sensor/accumulated-charge.d.ts.map +1 -0
  382. package/dist/sensor/accumulated-charge.js +450 -0
  383. package/dist/sensor/accumulated-charge.js.map +1 -0
  384. package/dist/sensor/architecture.d.ts +48 -13
  385. package/dist/sensor/architecture.d.ts.map +1 -1
  386. package/dist/sensor/architecture.js +58 -16
  387. package/dist/sensor/architecture.js.map +1 -1
  388. package/dist/sensor/camera-saturation-capacity.d.ts +138 -0
  389. package/dist/sensor/camera-saturation-capacity.d.ts.map +1 -0
  390. package/dist/sensor/camera-saturation-capacity.js +356 -0
  391. package/dist/sensor/camera-saturation-capacity.js.map +1 -0
  392. package/dist/sensor/capture-color-sampling-binding.d.ts +1 -0
  393. package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -1
  394. package/dist/sensor/capture-color-sampling-binding.js +14 -0
  395. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  396. package/dist/sensor/capture-mode-timing.d.ts +63 -0
  397. package/dist/sensor/capture-mode-timing.d.ts.map +1 -0
  398. package/dist/sensor/capture-mode-timing.js +270 -0
  399. package/dist/sensor/capture-mode-timing.js.map +1 -0
  400. package/dist/sensor/capture-mode.d.ts.map +1 -1
  401. package/dist/sensor/capture-mode.js +13 -0
  402. package/dist/sensor/capture-mode.js.map +1 -1
  403. package/dist/sensor/color-sampling.d.ts.map +1 -1
  404. package/dist/sensor/color-sampling.js +19 -0
  405. package/dist/sensor/color-sampling.js.map +1 -1
  406. package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
  407. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
  408. package/dist/sensor/constant-rate-temporal-integration.js +382 -0
  409. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
  410. package/dist/sensor/dark-current.d.ts +169 -0
  411. package/dist/sensor/dark-current.d.ts.map +1 -0
  412. package/dist/sensor/dark-current.js +427 -0
  413. package/dist/sensor/dark-current.js.map +1 -0
  414. package/dist/sensor/environment-photo-signal.d.ts +123 -0
  415. package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
  416. package/dist/sensor/environment-photo-signal.js +186 -0
  417. package/dist/sensor/environment-photo-signal.js.map +1 -0
  418. package/dist/sensor/eqe-electron-rate.d.ts +107 -0
  419. package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
  420. package/dist/sensor/eqe-electron-rate.js +561 -0
  421. package/dist/sensor/eqe-electron-rate.js.map +1 -0
  422. package/dist/sensor/eqe-local-exposure.d.ts +65 -0
  423. package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
  424. package/dist/sensor/eqe-local-exposure.js +84 -0
  425. package/dist/sensor/eqe-local-exposure.js.map +1 -0
  426. package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
  427. package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
  428. package/dist/sensor/eqe-temporal-exposure.js +62 -0
  429. package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
  430. package/dist/sensor/exposure-window.d.ts +14 -0
  431. package/dist/sensor/exposure-window.d.ts.map +1 -1
  432. package/dist/sensor/exposure-window.js +14 -0
  433. package/dist/sensor/exposure-window.js.map +1 -1
  434. package/dist/sensor/iso-signal-chain.d.ts +148 -0
  435. package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
  436. package/dist/sensor/iso-signal-chain.js +411 -0
  437. package/dist/sensor/iso-signal-chain.js.map +1 -0
  438. package/dist/sensor/local-exposure-binding.d.ts +87 -0
  439. package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
  440. package/dist/sensor/local-exposure-binding.js +214 -0
  441. package/dist/sensor/local-exposure-binding.js.map +1 -0
  442. package/dist/sensor/optical-stack.d.ts.map +1 -1
  443. package/dist/sensor/optical-stack.js +17 -0
  444. package/dist/sensor/optical-stack.js.map +1 -1
  445. package/dist/sensor/photon-energy.d.ts +97 -0
  446. package/dist/sensor/photon-energy.d.ts.map +1 -0
  447. package/dist/sensor/photon-energy.js +390 -0
  448. package/dist/sensor/photon-energy.js.map +1 -0
  449. package/dist/sensor/physical-charge-capacity.d.ts +130 -0
  450. package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
  451. package/dist/sensor/physical-charge-capacity.js +345 -0
  452. package/dist/sensor/physical-charge-capacity.js.map +1 -0
  453. package/dist/sensor/pixel-pitch.d.ts +6 -0
  454. package/dist/sensor/pixel-pitch.d.ts.map +1 -1
  455. package/dist/sensor/pixel-pitch.js +6 -0
  456. package/dist/sensor/pixel-pitch.js.map +1 -1
  457. package/dist/sensor/radiometry-readiness.d.ts +10 -0
  458. package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
  459. package/dist/sensor/radiometry-readiness.js +10 -0
  460. package/dist/sensor/radiometry-readiness.js.map +1 -1
  461. package/dist/sensor/raw-readout.d.ts +314 -0
  462. package/dist/sensor/raw-readout.d.ts.map +1 -0
  463. package/dist/sensor/raw-readout.js +914 -0
  464. package/dist/sensor/raw-readout.js.map +1 -0
  465. package/dist/sensor/raw-reconstruction.d.ts +170 -0
  466. package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
  467. package/dist/sensor/raw-reconstruction.js +424 -0
  468. package/dist/sensor/raw-reconstruction.js.map +1 -0
  469. package/dist/sensor/readout-exposure-linkage.d.ts +12 -0
  470. package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -1
  471. package/dist/sensor/readout-exposure-linkage.js +12 -0
  472. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  473. package/dist/sensor/readout-timing.d.ts +13 -0
  474. package/dist/sensor/readout-timing.d.ts.map +1 -1
  475. package/dist/sensor/readout-timing.js +13 -0
  476. package/dist/sensor/readout-timing.js.map +1 -1
  477. package/dist/sensor/response-application-compatibility.d.ts +136 -0
  478. package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
  479. package/dist/sensor/response-application-compatibility.js +408 -0
  480. package/dist/sensor/response-application-compatibility.js.map +1 -0
  481. package/dist/sensor/response-operating-range.d.ts +173 -0
  482. package/dist/sensor/response-operating-range.d.ts.map +1 -0
  483. package/dist/sensor/response-operating-range.js +672 -0
  484. package/dist/sensor/response-operating-range.js.map +1 -0
  485. package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
  486. package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
  487. package/dist/sensor/responsivity-photocurrent.js +644 -0
  488. package/dist/sensor/responsivity-photocurrent.js.map +1 -0
  489. package/dist/sensor/sampling-aperture.d.ts.map +1 -1
  490. package/dist/sensor/sampling-aperture.js +14 -0
  491. package/dist/sensor/sampling-aperture.js.map +1 -1
  492. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
  493. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
  494. package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
  495. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
  496. package/dist/sensor/sensor-geometry.d.ts +12 -0
  497. package/dist/sensor/sensor-geometry.d.ts.map +1 -1
  498. package/dist/sensor/sensor-geometry.js +12 -0
  499. package/dist/sensor/sensor-geometry.js.map +1 -1
  500. package/dist/sensor/signal-noise.d.ts +10 -0
  501. package/dist/sensor/signal-noise.d.ts.map +1 -1
  502. package/dist/sensor/signal-noise.js +10 -0
  503. package/dist/sensor/signal-noise.js.map +1 -1
  504. package/dist/sensor/spatial-sample-reduction.d.ts +44 -1
  505. package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -1
  506. package/dist/sensor/spatial-sample-reduction.js +51 -5
  507. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  508. package/dist/sensor/spatial-sampling-quadrature.d.ts +24 -0
  509. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -1
  510. package/dist/sensor/spatial-sampling-quadrature.js +27 -0
  511. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  512. package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
  513. package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
  514. package/dist/sensor/spatio-spectral-reduction.js +373 -0
  515. package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
  516. package/dist/sensor/spectral-coverage.d.ts +24 -0
  517. package/dist/sensor/spectral-coverage.d.ts.map +1 -0
  518. package/dist/sensor/spectral-coverage.js +86 -0
  519. package/dist/sensor/spectral-coverage.js.map +1 -0
  520. package/dist/sensor/spectral-quadrature.d.ts +169 -0
  521. package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
  522. package/dist/sensor/spectral-quadrature.js +542 -0
  523. package/dist/sensor/spectral-quadrature.js.map +1 -0
  524. package/dist/sensor/spectral-response.d.ts +192 -0
  525. package/dist/sensor/spectral-response.d.ts.map +1 -0
  526. package/dist/sensor/spectral-response.js +664 -0
  527. package/dist/sensor/spectral-response.js.map +1 -0
  528. package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
  529. package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
  530. package/dist/sensor/temporal-eqe-sum.js +30 -0
  531. package/dist/sensor/temporal-eqe-sum.js.map +1 -0
  532. package/dist/sensor/temporal-photo-signal.d.ts +38 -0
  533. package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
  534. package/dist/sensor/temporal-photo-signal.js +110 -0
  535. package/dist/sensor/temporal-photo-signal.js.map +1 -0
  536. package/dist/sensor/temporal-sample-binding.d.ts +6 -0
  537. package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
  538. package/dist/sensor/temporal-sample-binding.js +32 -0
  539. package/dist/sensor/temporal-sample-binding.js.map +1 -0
  540. package/dist/simulation/poc-simulation.d.ts.map +1 -1
  541. package/dist/simulation/poc-simulation.js +34 -11
  542. package/dist/simulation/poc-simulation.js.map +1 -1
  543. package/dist/stabilization/camera-shake.d.ts +11 -0
  544. package/dist/stabilization/camera-shake.d.ts.map +1 -1
  545. package/dist/stabilization/camera-shake.js +11 -0
  546. package/dist/stabilization/camera-shake.js.map +1 -1
  547. package/dist/stabilization/system.d.ts +218 -0
  548. package/dist/stabilization/system.d.ts.map +1 -0
  549. package/dist/stabilization/system.js +695 -0
  550. package/dist/stabilization/system.js.map +1 -0
  551. package/docs/API_REFERENCE.md +2017 -0
  552. package/docs/API_STYLE.md +132 -0
  553. package/docs/ARCHITECTURE.md +134 -24
  554. package/docs/AUTOMATION_COORDINATION.md +2 -0
  555. package/docs/CAPTURE_COLOR.md +25 -0
  556. package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
  557. package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
  558. package/docs/CAPTURE_SDR.md +20 -0
  559. package/docs/DEVELOPERS.md +60 -0
  560. package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
  561. package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
  562. package/docs/EXPORT_ACCEPTANCE.md +133 -0
  563. package/docs/GENERIC_TIER_PRESETS.md +269 -0
  564. package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
  565. package/docs/IMAGE_FORMATION.md +80 -10
  566. package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
  567. package/docs/MOTION_AND_SIGNAL.md +5 -3
  568. package/docs/NUMERICAL_CORRECTNESS.md +191 -0
  569. package/docs/PERFORMANCE_BASELINE.md +56 -0
  570. package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
  571. package/docs/PHYSICS_FOUNDATION.md +152 -5
  572. package/docs/POC_API.md +2 -0
  573. package/docs/POC_PROJECTION_REUSE.md +124 -0
  574. package/docs/PROCESSED_OUTPUT.md +157 -0
  575. package/docs/PRODUCTION_COMPOSITION.md +373 -0
  576. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
  577. package/docs/PROVENANCE.md +4 -0
  578. package/docs/PSF_FOUNDATION.md +110 -88
  579. package/docs/RAW_FRAME_ENVELOPE.md +56 -0
  580. package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
  581. package/docs/RELEASE_1_0.md +65 -0
  582. package/docs/RELEASE_AUDIT.md +38 -0
  583. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
  584. package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
  585. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
  586. package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
  587. package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
  588. package/docs/SDR_RENDERING.md +33 -0
  589. package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
  590. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
  591. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
  592. package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
  593. package/docs/SENSOR_RAW_FRAME.md +20 -0
  594. package/docs/SENSOR_RAW_PRODUCER.md +77 -0
  595. package/docs/SIGNAL_CONFORMANCE.md +23 -0
  596. package/docs/SIMULATED_CAPTURE.md +65 -0
  597. package/docs/STABILIZATION.md +160 -17
  598. package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
  599. package/docs/TIER_ACCEPTANCE.md +129 -0
  600. package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
  601. package/docs/USAGE.md +5050 -1047
  602. package/docs/V1_COMPOSITION_MAP.md +123 -0
  603. package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
  604. package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
  605. package/docs/api/camera-equivalent-focal-length.md +53 -0
  606. package/docs/api/camera-field-of-view.md +119 -0
  607. package/docs/api/camera-projected-object-size.md +54 -0
  608. package/docs/api/capture-capture-export-metadata.md +107 -0
  609. package/docs/api/capture-environment-raw-producer.md +56 -0
  610. package/docs/api/capture-focus-control.md +419 -0
  611. package/docs/api/capture-linear-encoding.md +99 -0
  612. package/docs/api/capture-photographic-export.md +172 -0
  613. package/docs/api/capture-raw-frame-reconstruction.md +87 -0
  614. package/docs/api/capture-release-sequence.md +252 -0
  615. package/docs/api/capture-sensor-raw-frame.md +66 -0
  616. package/docs/api/capture-sensor-raw-producer.md +98 -0
  617. package/docs/api/capture-simulated-capture.md +179 -0
  618. package/docs/api/color-capture-color.md +122 -0
  619. package/docs/api/color-white-balance.md +386 -0
  620. package/docs/api/composition-image-formation-plan.md +825 -0
  621. package/docs/api/composition-plan-consumer.md +98 -0
  622. package/docs/api/core-calculation-result.md +220 -0
  623. package/docs/api/core-configuration-error.md +19 -0
  624. package/docs/api/core-image-formation.md +204 -0
  625. package/docs/api/core-scientific-assurance.md +214 -0
  626. package/docs/api/core-spectral-composition.md +268 -0
  627. package/docs/api/core-spectral.md +78 -0
  628. package/docs/api/core-validation.md +34 -0
  629. package/docs/api/core-version.md +14 -0
  630. package/docs/api/equipment-exposure-capabilities.md +270 -0
  631. package/docs/api/equipment-generic-tier-assets.md +82 -0
  632. package/docs/api/equipment-generic-tier-presets.md +103 -0
  633. package/docs/api/equipment-iso-capabilities.md +295 -0
  634. package/docs/api/equipment-metering-capabilities.md +126 -0
  635. package/docs/api/equipment-release-capabilities.md +91 -0
  636. package/docs/api/exports.json +5656 -0
  637. package/docs/api/exposure-exposure-duration-control.md +115 -0
  638. package/docs/api/exposure-exposure-mode-resolver.md +966 -0
  639. package/docs/api/exposure-exposure.md +150 -0
  640. package/docs/api/exposure-flash.md +327 -0
  641. package/docs/api/exposure-metering-scene-radiance.md +154 -0
  642. package/docs/api/exposure-metering-target.md +134 -0
  643. package/docs/api/exposure-metering-temporal.md +77 -0
  644. package/docs/api/exposure-metering.md +172 -0
  645. package/docs/api/exposure-program-line.md +64 -0
  646. package/docs/api/motion-camera-rotation.md +215 -0
  647. package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
  648. package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
  649. package/docs/api/motion-capture-rotation-trajectory.md +132 -0
  650. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
  651. package/docs/api/motion-extended-object-projection.md +312 -0
  652. package/docs/api/motion-projected-motion.md +60 -0
  653. package/docs/api/optics-aperture.md +69 -0
  654. package/docs/api/optics-circle-of-confusion.md +46 -0
  655. package/docs/api/optics-complex-pupil-psf.md +193 -0
  656. package/docs/api/optics-depth-of-field.md +92 -0
  657. package/docs/api/optics-diffraction.md +46 -0
  658. package/docs/api/optics-focus-breathing.md +119 -0
  659. package/docs/api/optics-focus-state.md +64 -0
  660. package/docs/api/optics-front-of-lens-filter.md +263 -0
  661. package/docs/api/optics-illumination-vignetting.md +95 -0
  662. package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
  663. package/docs/api/optics-lens-psf-profile.md +380 -0
  664. package/docs/api/optics-polygon-diffraction.md +68 -0
  665. package/docs/api/optics-profile-contract.md +47 -0
  666. package/docs/api/optics-psf-foundation.md +181 -0
  667. package/docs/api/optics-radial-distortion.md +194 -0
  668. package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
  669. package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
  670. package/docs/api/optics-sensor-environment-query.md +58 -0
  671. package/docs/api/optics-sensor-psf-quadrature.md +81 -0
  672. package/docs/api/optics-stray-light.md +109 -0
  673. package/docs/api/optics-thin-lens.md +53 -0
  674. package/docs/api/output-capture-corrected-sdr.md +71 -0
  675. package/docs/api/output-capture-geometry.md +500 -0
  676. package/docs/api/output-capture-sdr.md +69 -0
  677. package/docs/api/output-crop.md +47 -0
  678. package/docs/api/output-geometric-transforms.md +199 -0
  679. package/docs/api/output-lens-corrections.md +162 -0
  680. package/docs/api/output-sdr-rendering.md +122 -0
  681. package/docs/api/output-subject-framing-crop.md +59 -0
  682. package/docs/api/schema-camera.md +84 -0
  683. package/docs/api/schema-illumination-spectral.md +77 -0
  684. package/docs/api/schema-illumination-temporal.md +289 -0
  685. package/docs/api/schema-illumination.md +246 -0
  686. package/docs/api/schema-scene-radiance-temporal.md +215 -0
  687. package/docs/api/schema-scene-radiance.md +415 -0
  688. package/docs/api/schema-scene.md +105 -0
  689. package/docs/api/schema-validation.md +25 -0
  690. package/docs/api/sensor-accumulated-charge.md +273 -0
  691. package/docs/api/sensor-architecture.md +155 -0
  692. package/docs/api/sensor-camera-saturation-capacity.md +215 -0
  693. package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
  694. package/docs/api/sensor-capture-mode-timing.md +123 -0
  695. package/docs/api/sensor-capture-mode.md +321 -0
  696. package/docs/api/sensor-color-sampling.md +228 -0
  697. package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
  698. package/docs/api/sensor-dark-current.md +227 -0
  699. package/docs/api/sensor-environment-photo-signal.md +77 -0
  700. package/docs/api/sensor-eqe-electron-rate.md +166 -0
  701. package/docs/api/sensor-eqe-local-exposure.md +68 -0
  702. package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
  703. package/docs/api/sensor-exposure-window.md +183 -0
  704. package/docs/api/sensor-iso-signal-chain.md +264 -0
  705. package/docs/api/sensor-local-exposure-binding.md +126 -0
  706. package/docs/api/sensor-optical-stack.md +211 -0
  707. package/docs/api/sensor-photon-energy.md +149 -0
  708. package/docs/api/sensor-physical-charge-capacity.md +196 -0
  709. package/docs/api/sensor-pixel-pitch.md +41 -0
  710. package/docs/api/sensor-radiometry-readiness.md +240 -0
  711. package/docs/api/sensor-raw-readout.md +499 -0
  712. package/docs/api/sensor-raw-reconstruction.md +260 -0
  713. package/docs/api/sensor-readout-exposure-linkage.md +172 -0
  714. package/docs/api/sensor-readout-timing.md +209 -0
  715. package/docs/api/sensor-response-application-compatibility.md +256 -0
  716. package/docs/api/sensor-response-operating-range.md +293 -0
  717. package/docs/api/sensor-responsivity-photocurrent.md +245 -0
  718. package/docs/api/sensor-sampling-aperture.md +221 -0
  719. package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
  720. package/docs/api/sensor-sensor-geometry.md +143 -0
  721. package/docs/api/sensor-signal-noise.md +75 -0
  722. package/docs/api/sensor-spatial-sample-reduction.md +186 -0
  723. package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
  724. package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
  725. package/docs/api/sensor-spectral-coverage.md +33 -0
  726. package/docs/api/sensor-spectral-quadrature.md +183 -0
  727. package/docs/api/sensor-spectral-response.md +291 -0
  728. package/docs/api/sensor-temporal-photo-signal.md +62 -0
  729. package/docs/api/simulation-poc-simulation.md +364 -0
  730. package/docs/api/stabilization-camera-shake.md +71 -0
  731. package/docs/api/stabilization-system.md +442 -0
  732. package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
  733. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
  734. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
  735. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
  736. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
  737. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
  738. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
  739. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
  740. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
  741. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
  742. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
  743. package/docs/examples/production-capture.mjs +34 -0
  744. package/docs/examples/production-request.json +4613 -0
  745. package/docs/examples/quick-start.mjs +12 -0
  746. package/docs/validation/documentation-fragments.json +212 -0
  747. package/docs/validation/release-audit-inventory.json +1306 -0
  748. package/docs/validation/tier-acceptance-report-v1.json +2538 -0
  749. package/package.json +15 -3
@@ -0,0 +1,199 @@
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. Photo, dark and
5
+ * explicitly incremental stored-electron components must share the exact site/channel/local shutter
6
+ * event. Completeness is an evidence-backed declaration, not the consequence of an empty component
7
+ * array. Expected stored charge remains distinct from a stochastic realization or nonlinear full-well
8
+ * clamp.
9
+ * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
10
+ * missing required fields and incompatible scientific data fail at this boundary. Photo, dark and
11
+ * explicitly incremental stored-electron components must share the exact site/channel/local shutter
12
+ * event. Completeness is an evidence-backed declaration, not the consequence of an empty component
13
+ * array. Expected stored charge remains distinct from a stochastic realization or nonlinear full-well
14
+ * clamp.
15
+ * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
16
+ * limits.
17
+ */
18
+ import { type CalculationResult } from "../core/calculation-result.js";
19
+ import { type EvidenceProvenance } from "../core/evidence-provenance.js";
20
+ import type { SensorEqeExposureIntegration } from "./constant-rate-temporal-integration.js";
21
+ import type { SensorEqePhotoExposure, SensorEqeTemporalPhotoSignal } from "./temporal-photo-signal.js";
22
+ import type { SensorPhotoDarkCurrentCharge, SensorDarkCurrentCharge, SensorTemporalDarkCurrentCharge } from "./dark-current.js";
23
+ import type { SensorSpectralResponseScientificStatus, SensorSpectralResponseUncertainty } from "./spectral-response.js";
24
+ export type SensorAdditionalStoredChargeKind = "hot-pixel-defect-excess" | "leakage" | "charge-injection" | "clock-induced-charge" | "other";
25
+ export interface SensorAdditionalStoredChargeComponent {
26
+ componentId: string;
27
+ kind: SensorAdditionalStoredChargeKind;
28
+ colorSamplingProfileId: string;
29
+ channelId: string;
30
+ site: {
31
+ x: number;
32
+ y: number;
33
+ };
34
+ bindingId: string;
35
+ timeReference: "first-opening-boundary-phase";
36
+ startOffsetSecondsFromOpeningReference: number;
37
+ endOffsetSecondsFromOpeningReference: number;
38
+ accountingMeaning: "incremental-stored-electrons-beyond-photo-and-modeled-dark-current";
39
+ expectedElectronCount: number;
40
+ scientificStatus: SensorSpectralResponseScientificStatus;
41
+ uncertainty: SensorSpectralResponseUncertainty;
42
+ evidence: readonly EvidenceProvenance[];
43
+ }
44
+ export interface SensorAccumulatedChargeCompletenessProfile {
45
+ schemaVersion: "0.1.0";
46
+ profileId: string;
47
+ colorSamplingProfileId: string;
48
+ channelId: string;
49
+ site: {
50
+ x: number;
51
+ y: number;
52
+ };
53
+ bindingId: string;
54
+ timeReference: "first-opening-boundary-phase";
55
+ startOffsetSecondsFromOpeningReference: number;
56
+ endOffsetSecondsFromOpeningReference: number;
57
+ darkCurrentProfileId: string;
58
+ includedAdditionalComponentIds: readonly string[];
59
+ coverageMeaning: "all-material-stored-electron-contributors-accounted-for";
60
+ scientificStatus: SensorSpectralResponseScientificStatus;
61
+ evidence: readonly EvidenceProvenance[];
62
+ limitation?: string;
63
+ }
64
+ export interface ComposeSensorAccumulatedChargeInput<Photo extends SensorEqePhotoExposure = SensorEqeExposureIntegration, Dark extends SensorPhotoDarkCurrentCharge = SensorDarkCurrentCharge> {
65
+ photoSignal: Photo;
66
+ darkCharge: Dark;
67
+ additionalChargeComponents?: readonly SensorAdditionalStoredChargeComponent[];
68
+ completenessProfile: SensorAccumulatedChargeCompletenessProfile;
69
+ }
70
+ export type ComposeSensorPhotoAccumulatedChargeInput = ComposeSensorAccumulatedChargeInput<SensorEqePhotoExposure, SensorPhotoDarkCurrentCharge>;
71
+ export interface SensorAccumulatedChargeComposition<Photo extends SensorEqePhotoExposure = SensorEqeExposureIntegration, Dark extends SensorPhotoDarkCurrentCharge = SensorDarkCurrentCharge> {
72
+ completenessProfileId: string;
73
+ colorSamplingProfileId: string;
74
+ channelId: string;
75
+ site: {
76
+ x: number;
77
+ y: number;
78
+ };
79
+ bindingId: string;
80
+ timeReference: "first-opening-boundary-phase";
81
+ startOffsetSecondsFromOpeningReference: number;
82
+ endOffsetSecondsFromOpeningReference: number;
83
+ localExposureDurationSeconds: number;
84
+ photoExpectedElectronCount: number;
85
+ darkExpectedElectronCount: number;
86
+ additionalExpectedElectronCount: number;
87
+ totalExpectedStoredElectronCount: number;
88
+ additionalComponents: readonly {
89
+ componentId: string;
90
+ kind: SensorAdditionalStoredChargeKind;
91
+ expectedElectronCount: number;
92
+ scientificStatus: SensorSpectralResponseScientificStatus;
93
+ uncertainty: SensorSpectralResponseUncertainty;
94
+ evidence: readonly EvidenceProvenance[];
95
+ }[];
96
+ accumulatedChargeCompleteness: "complete-for-physical-storage-capacity-assessment";
97
+ completenessScientificStatus: SensorSpectralResponseScientificStatus;
98
+ allCountsAreExpectationValues: true;
99
+ integerChargeSampled: false;
100
+ photoSignalIncluded: true;
101
+ darkChargeIncluded: true;
102
+ otherChargeIncluded: boolean;
103
+ darkShotNoiseApplied: false;
104
+ photoShotNoiseApplied: false;
105
+ readNoiseApplied: false;
106
+ physicalFullWellAssessmentAuthorized: true;
107
+ cameraSaturationAssessmentAuthorized: false;
108
+ saturationAssessed: false;
109
+ bloomingModeled: false;
110
+ adcQuantizationApplied: false;
111
+ rawCodeValueProduced: false;
112
+ componentEvidence: {
113
+ completeness: readonly EvidenceProvenance[];
114
+ photoSignal: Photo["componentEvidence"];
115
+ darkCurrent: Dark["componentEvidence"];
116
+ };
117
+ }
118
+ export type SensorPhotoAccumulatedChargeComposition = SensorAccumulatedChargeComposition<SensorEqePhotoExposure, SensorPhotoDarkCurrentCharge>;
119
+ /**
120
+ * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
121
+ * missing required fields and incompatible scientific data fail at this boundary.
122
+ *
123
+ * Photo, dark and explicitly incremental stored-electron components must share the exact
124
+ * site/channel/local shutter event. Completeness is an evidence-backed declaration, not the
125
+ * consequence of an empty component array. Expected stored charge remains distinct from a stochastic
126
+ * realization or nonlinear full-well clamp.
127
+ * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
128
+ * @returns SensorAdditionalStoredChargeComponent. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
129
+ *
130
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
131
+ */
132
+ export declare function parseSensorAdditionalStoredChargeComponent(value: unknown): SensorAdditionalStoredChargeComponent;
133
+ /**
134
+ * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
135
+ * missing required fields and incompatible scientific data fail at this boundary.
136
+ *
137
+ * Photo, dark and explicitly incremental stored-electron components must share the exact
138
+ * site/channel/local shutter event. Completeness is an evidence-backed declaration, not the
139
+ * consequence of an empty component array. Expected stored charge remains distinct from a stochastic
140
+ * realization or nonlinear full-well clamp.
141
+ * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
142
+ * @returns SensorAccumulatedChargeCompletenessProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
143
+ *
144
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
145
+ */
146
+ export declare function parseSensorAccumulatedChargeCompletenessProfile(value: unknown): SensorAccumulatedChargeCompletenessProfile;
147
+ /**
148
+ * Compose photo, independently evaluated dark and explicitly incremental charge by exact local
149
+ * exposure identity, retaining completeness assessment before capacity/noise.
150
+ *
151
+ * Photo, dark and explicitly incremental stored-electron components must share the exact
152
+ * site/channel/local shutter event. Completeness is an evidence-backed declaration, not the
153
+ * consequence of an empty component array. Expected stored charge remains distinct from a stochastic
154
+ * realization or nonlinear full-well clamp.
155
+ * @param input - Omit<ComposeSensorAccumulatedChargeInput, "photoSignal" | "darkCharge"> & {
156
+ photoSignal: SensorEqeExposureIntegration; darkCharge: SensorDarkCurrentCharge;
157
+ }. See the linked contract for coordinate, unit and profile binding semantics.
158
+ * @returns CalculationResult<SensorAccumulatedChargeComposition>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
159
+ *
160
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
161
+ */
162
+ export declare function composeSensorAccumulatedCharge(input: Omit<ComposeSensorAccumulatedChargeInput, "photoSignal" | "darkCharge"> & {
163
+ photoSignal: SensorEqeExposureIntegration;
164
+ darkCharge: SensorDarkCurrentCharge;
165
+ }): CalculationResult<SensorAccumulatedChargeComposition>;
166
+ /**
167
+ * Compose photo, independently evaluated dark and explicitly incremental charge by exact local
168
+ * exposure identity, retaining completeness assessment before capacity/noise.
169
+ *
170
+ * Photo, dark and explicitly incremental stored-electron components must share the exact
171
+ * site/channel/local shutter event. Completeness is an evidence-backed declaration, not the
172
+ * consequence of an empty component array. Expected stored charge remains distinct from a stochastic
173
+ * realization or nonlinear full-well clamp.
174
+ * @param input - Omit<ComposeSensorAccumulatedChargeInput, "photoSignal" | "darkCharge"> & {
175
+ photoSignal: SensorEqeTemporalPhotoSignal; darkCharge: SensorTemporalDarkCurrentCharge;
176
+ }. See the linked contract for coordinate, unit and profile binding semantics.
177
+ * @returns CalculationResult<SensorAccumulatedChargeComposition<SensorEqeTemporalPhotoSignal, SensorTemporalDarkCurrentCharge>>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
178
+ *
179
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
180
+ */
181
+ export declare function composeSensorAccumulatedCharge(input: Omit<ComposeSensorAccumulatedChargeInput, "photoSignal" | "darkCharge"> & {
182
+ photoSignal: SensorEqeTemporalPhotoSignal;
183
+ darkCharge: SensorTemporalDarkCurrentCharge;
184
+ }): CalculationResult<SensorAccumulatedChargeComposition<SensorEqeTemporalPhotoSignal, SensorTemporalDarkCurrentCharge>>;
185
+ /**
186
+ * Compose photo, independently evaluated dark and explicitly incremental charge by exact local
187
+ * exposure identity, retaining completeness assessment before capacity/noise.
188
+ *
189
+ * Photo, dark and explicitly incremental stored-electron components must share the exact
190
+ * site/channel/local shutter event. Completeness is an evidence-backed declaration, not the
191
+ * consequence of an empty component array. Expected stored charge remains distinct from a stochastic
192
+ * realization or nonlinear full-well clamp.
193
+ * @param input - ComposeSensorPhotoAccumulatedChargeInput. See the linked contract for coordinate, unit and profile binding semantics.
194
+ * @returns CalculationResult<SensorPhotoAccumulatedChargeComposition>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
195
+ *
196
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
197
+ */
198
+ export declare function composeSensorAccumulatedCharge(input: ComposeSensorPhotoAccumulatedChargeInput): CalculationResult<SensorPhotoAccumulatedChargeComposition>;
199
+ //# sourceMappingURL=accumulated-charge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accumulated-charge.d.ts","sourceRoot":"","sources":["../../src/sensor/accumulated-charge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,450 @@
1
+ // SPDX-License-Identifier: Apache-2.0
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.
16
+ * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
17
+ * limits.
18
+ */
19
+ import { approximationResult, calculatedResult } from "../core/calculation-result.js";
20
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
21
+ import { parseEvidenceList } from "../core/evidence-provenance.js";
22
+ import { parseSensorEqeTemporalPhotoSignal } from "./temporal-photo-signal.js";
23
+ import { InvalidScientificInputError } from "../core/validation.js";
24
+ function addCompensated(state, value) {
25
+ const adjusted = value - state.correction;
26
+ const next = state.sum + adjusted;
27
+ state.correction =
28
+ (next - state.sum) - adjusted;
29
+ state.sum = next;
30
+ }
31
+ function requireRecord(value, path) {
32
+ if (typeof value !== "object" ||
33
+ value === null ||
34
+ Array.isArray(value)) {
35
+ throw new InvalidConfigurationError(path + " must be an object.");
36
+ }
37
+ return value;
38
+ }
39
+ function requireNonEmptyString(value, path) {
40
+ if (typeof value !== "string" ||
41
+ value.trim().length === 0) {
42
+ throw new InvalidConfigurationError(path + " must be a non-empty string.");
43
+ }
44
+ return value;
45
+ }
46
+ function requireFinite(value, path) {
47
+ if (typeof value !== "number" ||
48
+ !Number.isFinite(value)) {
49
+ throw new InvalidConfigurationError(path + " must be finite.");
50
+ }
51
+ return value;
52
+ }
53
+ function requireNonNegativeFinite(value, path) {
54
+ const parsed = requireFinite(value, path);
55
+ if (parsed < 0) {
56
+ throw new InvalidConfigurationError(path +
57
+ " must be greater than or equal to zero.");
58
+ }
59
+ return parsed;
60
+ }
61
+ function requireSiteIndex(value, path) {
62
+ if (typeof value !== "number" ||
63
+ !Number.isSafeInteger(value) ||
64
+ value < 0) {
65
+ throw new InvalidConfigurationError(path +
66
+ " must be a non-negative safe integer.");
67
+ }
68
+ return value;
69
+ }
70
+ function parseUncertainty(value, path) {
71
+ const record = requireRecord(value, path);
72
+ if (record.kind === "relative") {
73
+ const fraction = requireNonNegativeFinite(record.fraction, path + ".fraction");
74
+ return {
75
+ kind: "relative",
76
+ fraction,
77
+ basis: requireNonEmptyString(record.basis, path + ".basis")
78
+ };
79
+ }
80
+ if (record.kind === "not-quantified") {
81
+ return {
82
+ kind: "not-quantified",
83
+ limitation: requireNonEmptyString(record.limitation, path + ".limitation")
84
+ };
85
+ }
86
+ throw new InvalidConfigurationError(path + ".kind is invalid.");
87
+ }
88
+ function parseStatus(value, path) {
89
+ if (value !== "calibrated" &&
90
+ value !== "approximation") {
91
+ throw new InvalidConfigurationError(path + " is invalid.");
92
+ }
93
+ return value;
94
+ }
95
+ function parseWindowIdentity(record, path) {
96
+ if (record.timeReference !==
97
+ "first-opening-boundary-phase") {
98
+ throw new InvalidConfigurationError(path +
99
+ '.timeReference must be "first-opening-boundary-phase".');
100
+ }
101
+ const start = requireFinite(record.startOffsetSecondsFromOpeningReference, path +
102
+ ".startOffsetSecondsFromOpeningReference");
103
+ const end = requireFinite(record.endOffsetSecondsFromOpeningReference, path +
104
+ ".endOffsetSecondsFromOpeningReference");
105
+ if (!(end > start)) {
106
+ throw new InvalidConfigurationError(path +
107
+ " exposure window end must be greater than start.");
108
+ }
109
+ return {
110
+ bindingId: requireNonEmptyString(record.bindingId, path + ".bindingId"),
111
+ timeReference: "first-opening-boundary-phase",
112
+ start,
113
+ end
114
+ };
115
+ }
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.
126
+ *
127
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
128
+ */
129
+ export function parseSensorAdditionalStoredChargeComponent(value) {
130
+ const record = requireRecord(value, "sensorAdditionalStoredCharge");
131
+ const kinds = new Set([
132
+ "hot-pixel-defect-excess",
133
+ "leakage",
134
+ "charge-injection",
135
+ "clock-induced-charge",
136
+ "other"
137
+ ]);
138
+ if (typeof record.kind !== "string" ||
139
+ !kinds.has(record.kind)) {
140
+ throw new InvalidConfigurationError("sensorAdditionalStoredCharge.kind is invalid.");
141
+ }
142
+ if (record.accountingMeaning !==
143
+ "incremental-stored-electrons-beyond-photo-and-modeled-dark-current") {
144
+ throw new InvalidConfigurationError("sensorAdditionalStoredCharge.accountingMeaning is invalid.");
145
+ }
146
+ const site = requireRecord(record.site, "sensorAdditionalStoredCharge.site");
147
+ const window = parseWindowIdentity(record, "sensorAdditionalStoredCharge");
148
+ const scientificStatus = parseStatus(record.scientificStatus, "sensorAdditionalStoredCharge.scientificStatus");
149
+ const uncertainty = parseUncertainty(record.uncertainty, "sensorAdditionalStoredCharge.uncertainty");
150
+ if (scientificStatus === "calibrated" &&
151
+ uncertainty.kind ===
152
+ "not-quantified") {
153
+ throw new InvalidConfigurationError("A calibrated additional stored-charge component must declare quantified relative uncertainty.");
154
+ }
155
+ return {
156
+ componentId: requireNonEmptyString(record.componentId, "sensorAdditionalStoredCharge.componentId"),
157
+ kind: record.kind,
158
+ colorSamplingProfileId: requireNonEmptyString(record.colorSamplingProfileId, "sensorAdditionalStoredCharge.colorSamplingProfileId"),
159
+ channelId: requireNonEmptyString(record.channelId, "sensorAdditionalStoredCharge.channelId"),
160
+ site: {
161
+ x: requireSiteIndex(site.x, "sensorAdditionalStoredCharge.site.x"),
162
+ y: requireSiteIndex(site.y, "sensorAdditionalStoredCharge.site.y")
163
+ },
164
+ bindingId: window.bindingId,
165
+ timeReference: window.timeReference,
166
+ startOffsetSecondsFromOpeningReference: window.start,
167
+ endOffsetSecondsFromOpeningReference: window.end,
168
+ accountingMeaning: "incremental-stored-electrons-beyond-photo-and-modeled-dark-current",
169
+ expectedElectronCount: requireNonNegativeFinite(record.expectedElectronCount, "sensorAdditionalStoredCharge.expectedElectronCount"),
170
+ scientificStatus,
171
+ uncertainty,
172
+ evidence: parseEvidenceList(record.evidence, "sensorAdditionalStoredCharge.evidence")
173
+ };
174
+ }
175
+ /**
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.
178
+ *
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.
185
+ *
186
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
187
+ */
188
+ export function parseSensorAccumulatedChargeCompletenessProfile(value) {
189
+ const record = requireRecord(value, "sensorAccumulatedChargeCompleteness");
190
+ if (record.schemaVersion !== "0.1.0") {
191
+ throw new InvalidConfigurationError('sensorAccumulatedChargeCompleteness.schemaVersion must be "0.1.0".');
192
+ }
193
+ if (record.coverageMeaning !==
194
+ "all-material-stored-electron-contributors-accounted-for") {
195
+ throw new InvalidConfigurationError("sensorAccumulatedChargeCompleteness.coverageMeaning is invalid.");
196
+ }
197
+ const site = requireRecord(record.site, "sensorAccumulatedChargeCompleteness.site");
198
+ const window = parseWindowIdentity(record, "sensorAccumulatedChargeCompleteness");
199
+ const scientificStatus = parseStatus(record.scientificStatus, "sensorAccumulatedChargeCompleteness.scientificStatus");
200
+ const limitation = record.limitation === undefined
201
+ ? undefined
202
+ : requireNonEmptyString(record.limitation, "sensorAccumulatedChargeCompleteness.limitation");
203
+ if (scientificStatus === "approximation" &&
204
+ limitation === undefined) {
205
+ throw new InvalidConfigurationError("sensorAccumulatedChargeCompleteness.limitation is required for an approximation.");
206
+ }
207
+ if (!Array.isArray(record.includedAdditionalComponentIds)) {
208
+ throw new InvalidConfigurationError("sensorAccumulatedChargeCompleteness.includedAdditionalComponentIds must be an array.");
209
+ }
210
+ const ids = record.includedAdditionalComponentIds.map((entry, index) => requireNonEmptyString(entry, "sensorAccumulatedChargeCompleteness.includedAdditionalComponentIds[" +
211
+ index +
212
+ "]"));
213
+ if (new Set(ids).size !== ids.length) {
214
+ throw new InvalidConfigurationError("sensorAccumulatedChargeCompleteness.includedAdditionalComponentIds must not contain duplicates.");
215
+ }
216
+ return {
217
+ schemaVersion: "0.1.0",
218
+ profileId: requireNonEmptyString(record.profileId, "sensorAccumulatedChargeCompleteness.profileId"),
219
+ colorSamplingProfileId: requireNonEmptyString(record.colorSamplingProfileId, "sensorAccumulatedChargeCompleteness.colorSamplingProfileId"),
220
+ channelId: requireNonEmptyString(record.channelId, "sensorAccumulatedChargeCompleteness.channelId"),
221
+ site: {
222
+ x: requireSiteIndex(site.x, "sensorAccumulatedChargeCompleteness.site.x"),
223
+ y: requireSiteIndex(site.y, "sensorAccumulatedChargeCompleteness.site.y")
224
+ },
225
+ bindingId: window.bindingId,
226
+ timeReference: window.timeReference,
227
+ startOffsetSecondsFromOpeningReference: window.start,
228
+ endOffsetSecondsFromOpeningReference: window.end,
229
+ darkCurrentProfileId: requireNonEmptyString(record.darkCurrentProfileId, "sensorAccumulatedChargeCompleteness.darkCurrentProfileId"),
230
+ includedAdditionalComponentIds: [...ids].sort(),
231
+ coverageMeaning: "all-material-stored-electron-contributors-accounted-for",
232
+ scientificStatus,
233
+ evidence: parseEvidenceList(record.evidence, "sensorAccumulatedChargeCompleteness.evidence"),
234
+ ...(limitation === undefined
235
+ ? {}
236
+ : { limitation })
237
+ };
238
+ }
239
+ function sameSite(a, b) {
240
+ return a.x === b.x && a.y === b.y;
241
+ }
242
+ function sameWindow(startA, endA, startB, endB) {
243
+ return (startA === startB &&
244
+ endA === endB);
245
+ }
246
+ function validatePhoto(photo) {
247
+ if (photo.kind === "eqe-temporal-photo-signal")
248
+ parseSensorEqeTemporalPhotoSignal(photo);
249
+ if ((photo.kind !== "eqe-expected-counts" && photo.kind !== "eqe-temporal-photo-signal") ||
250
+ photo.temporalIntegrationApplied !==
251
+ true ||
252
+ photo.accumulatedSignalCompleteness !==
253
+ "photo-signal-only" ||
254
+ photo.darkChargeIncluded !== false ||
255
+ photo.otherChargeIncluded !== false ||
256
+ photo
257
+ .physicalFullWellAssessmentAuthorized !==
258
+ false) {
259
+ throw new InvalidScientificInputError("Charge composition requires an unmodified photo-signal-only EQE exposure result.");
260
+ }
261
+ if (!Number.isFinite(photo
262
+ .expectedGeneratedElectronCount) ||
263
+ photo
264
+ .expectedGeneratedElectronCount < 0) {
265
+ throw new InvalidScientificInputError("Photo expected electron count must be finite and nonnegative.");
266
+ }
267
+ }
268
+ function validateDarkBinding(photo, dark) {
269
+ if (dark.colorSamplingProfileId !==
270
+ photo.colorSamplingProfileId ||
271
+ dark.channelId !==
272
+ photo.channelId ||
273
+ !sameSite(dark.site, photo.site) ||
274
+ dark.bindingId !==
275
+ photo.bindingId ||
276
+ (photo.kind === "eqe-temporal-photo-signal"
277
+ ? dark.stationarityProfileId !== undefined || dark.temporalIntegrationId !== photo.temporalIntegrationId
278
+ : dark.temporalIntegrationId !== undefined || dark.stationarityProfileId !== photo.stationarityProfileId) ||
279
+ dark.timeReference !==
280
+ photo.timeReference ||
281
+ !sameWindow(dark.startOffsetSecondsFromOpeningReference, dark.endOffsetSecondsFromOpeningReference, photo.startOffsetSecondsFromOpeningReference, photo.endOffsetSecondsFromOpeningReference) ||
282
+ dark.localExposureDurationSeconds !==
283
+ photo.localExposureDurationSeconds ||
284
+ dark.photoSignalIncluded !== false ||
285
+ dark.otherChargeIncluded !== false ||
286
+ dark
287
+ .physicalFullWellAssessmentAuthorized !==
288
+ false) {
289
+ throw new InvalidScientificInputError("Dark charge must bind to the exact same uncombined EQE local exposure event.");
290
+ }
291
+ if (!Number.isFinite(dark.expectedDarkElectronCount) ||
292
+ dark.expectedDarkElectronCount < 0) {
293
+ throw new InvalidScientificInputError("Dark expected electron count must be finite and nonnegative.");
294
+ }
295
+ }
296
+ function validateComponentBinding(component, photo) {
297
+ if (component.colorSamplingProfileId !==
298
+ photo.colorSamplingProfileId ||
299
+ component.channelId !==
300
+ photo.channelId ||
301
+ !sameSite(component.site, photo.site) ||
302
+ component.bindingId !==
303
+ photo.bindingId ||
304
+ component.timeReference !==
305
+ photo.timeReference ||
306
+ !sameWindow(component.startOffsetSecondsFromOpeningReference, component.endOffsetSecondsFromOpeningReference, photo.startOffsetSecondsFromOpeningReference, photo.endOffsetSecondsFromOpeningReference)) {
307
+ throw new InvalidScientificInputError("Additional stored-charge component must bind to the exact same local exposure event.");
308
+ }
309
+ }
310
+ /**
311
+ * Compose photo, independently evaluated dark and explicitly incremental charge by exact local
312
+ * exposure identity, retaining completeness assessment before capacity/noise.
313
+ *
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.
320
+ *
321
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
322
+ */
323
+ export function composeSensorAccumulatedCharge(input) {
324
+ validatePhoto(input.photoSignal);
325
+ validateDarkBinding(input.photoSignal, input.darkCharge);
326
+ const profile = parseSensorAccumulatedChargeCompletenessProfile(input.completenessProfile);
327
+ const components = (input.additionalChargeComponents ??
328
+ []).map(parseSensorAdditionalStoredChargeComponent);
329
+ if (profile.colorSamplingProfileId !==
330
+ input.photoSignal
331
+ .colorSamplingProfileId ||
332
+ profile.channelId !==
333
+ input.photoSignal.channelId ||
334
+ !sameSite(profile.site, input.photoSignal.site) ||
335
+ profile.bindingId !==
336
+ input.photoSignal.bindingId ||
337
+ profile.timeReference !==
338
+ input.photoSignal.timeReference ||
339
+ !sameWindow(profile.startOffsetSecondsFromOpeningReference, profile.endOffsetSecondsFromOpeningReference, input.photoSignal.startOffsetSecondsFromOpeningReference, input.photoSignal.endOffsetSecondsFromOpeningReference) ||
340
+ profile.darkCurrentProfileId !==
341
+ input.darkCharge
342
+ .darkCurrentProfileId) {
343
+ throw new InvalidScientificInputError("Charge-completeness profile must bind to the exact photo/dark exposure pipeline.");
344
+ }
345
+ const seen = new Set();
346
+ for (const component of components) {
347
+ validateComponentBinding(component, input.photoSignal);
348
+ if (seen.has(component.componentId)) {
349
+ throw new InvalidScientificInputError("Additional stored-charge component IDs must be unique.");
350
+ }
351
+ seen.add(component.componentId);
352
+ }
353
+ const actualIds = [...seen].sort();
354
+ if (JSON.stringify(actualIds) !==
355
+ JSON.stringify(profile
356
+ .includedAdditionalComponentIds)) {
357
+ throw new InvalidScientificInputError("Charge-completeness profile additional component IDs must exactly match the supplied components.");
358
+ }
359
+ const sum = {
360
+ sum: 0,
361
+ correction: 0
362
+ };
363
+ addCompensated(sum, input.photoSignal
364
+ .expectedGeneratedElectronCount);
365
+ addCompensated(sum, input.darkCharge
366
+ .expectedDarkElectronCount);
367
+ let additionalTotal = 0;
368
+ for (const component of components) {
369
+ additionalTotal +=
370
+ component.expectedElectronCount;
371
+ addCompensated(sum, component.expectedElectronCount);
372
+ }
373
+ if (!Number.isFinite(additionalTotal) ||
374
+ !Number.isFinite(sum.sum) ||
375
+ sum.sum < 0) {
376
+ throw new InvalidScientificInputError("Accumulated stored-electron totals must remain finite and nonnegative.");
377
+ }
378
+ const result = {
379
+ completenessProfileId: profile.profileId,
380
+ colorSamplingProfileId: input.photoSignal
381
+ .colorSamplingProfileId,
382
+ channelId: input.photoSignal.channelId,
383
+ site: {
384
+ ...input.photoSignal.site
385
+ },
386
+ bindingId: input.photoSignal.bindingId,
387
+ timeReference: input.photoSignal.timeReference,
388
+ startOffsetSecondsFromOpeningReference: input.photoSignal
389
+ .startOffsetSecondsFromOpeningReference,
390
+ endOffsetSecondsFromOpeningReference: input.photoSignal
391
+ .endOffsetSecondsFromOpeningReference,
392
+ localExposureDurationSeconds: input.photoSignal
393
+ .localExposureDurationSeconds,
394
+ photoExpectedElectronCount: input.photoSignal
395
+ .expectedGeneratedElectronCount,
396
+ darkExpectedElectronCount: input.darkCharge
397
+ .expectedDarkElectronCount,
398
+ additionalExpectedElectronCount: additionalTotal,
399
+ totalExpectedStoredElectronCount: sum.sum,
400
+ additionalComponents: components.map((component) => ({
401
+ componentId: component.componentId,
402
+ kind: component.kind,
403
+ expectedElectronCount: component.expectedElectronCount,
404
+ scientificStatus: component.scientificStatus,
405
+ uncertainty: component.uncertainty,
406
+ evidence: component.evidence
407
+ })),
408
+ accumulatedChargeCompleteness: "complete-for-physical-storage-capacity-assessment",
409
+ completenessScientificStatus: profile.scientificStatus,
410
+ allCountsAreExpectationValues: true,
411
+ integerChargeSampled: false,
412
+ photoSignalIncluded: true,
413
+ darkChargeIncluded: true,
414
+ otherChargeIncluded: components.length > 0,
415
+ darkShotNoiseApplied: false,
416
+ photoShotNoiseApplied: false,
417
+ readNoiseApplied: false,
418
+ physicalFullWellAssessmentAuthorized: true,
419
+ cameraSaturationAssessmentAuthorized: false,
420
+ saturationAssessed: false,
421
+ bloomingModeled: false,
422
+ adcQuantizationApplied: false,
423
+ rawCodeValueProduced: false,
424
+ componentEvidence: {
425
+ completeness: profile.evidence,
426
+ photoSignal: input.photoSignal
427
+ .componentEvidence,
428
+ darkCurrent: input.darkCharge
429
+ .componentEvidence
430
+ }
431
+ };
432
+ const assumptions = [
433
+ "Stored-electron accounting is bound to one exact EQE local exposure event; equal duration alone is insufficient.",
434
+ "Photo-signal expected electrons and thermally generated dark electrons are separate terms.",
435
+ "Every additional component must declare itself incremental beyond both modeled photo signal and modeled dark current to avoid silent double counting.",
436
+ "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.",
437
+ "All values remain expectation counts. Photo/dark shot noise, read noise and stochastic integer sampling are not applied.",
438
+ "Physical full-well assessment becomes structurally authorized, but no saturation or blooming behavior is calculated by this composition.",
439
+ "Camera/digital saturation remains a separate response-chain property and is not authorized by physical charge completeness.",
440
+ "A/W current/charge results remain outside this stored-electron composition until a separate carrier/storage mapping exists."
441
+ ];
442
+ return profile.scientificStatus ===
443
+ "calibrated"
444
+ ? calculatedResult(result, "sensor-accumulated-charge-composition", input.photoSignal.kind === "eqe-temporal-photo-signal" ? "1.1.0" : "1.0.0", assumptions)
445
+ : approximationResult(result, "sensor-accumulated-charge-composition", input.photoSignal.kind === "eqe-temporal-photo-signal" ? "1.1.0" : "1.0.0", [
446
+ ...assumptions,
447
+ profile.limitation
448
+ ]);
449
+ }
450
+ //# sourceMappingURL=accumulated-charge.js.map