@photivra/engine 0.6.0 → 1.0.1

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 (750) hide show
  1. package/AGENTS.md +674 -0
  2. package/CHANGELOG.md +191 -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 +139 -72
  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 +9 -0
  139. package/dist/core/version.d.ts.map +1 -0
  140. package/dist/core/version.js +10 -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 +139 -3
  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 +66 -0
  582. package/docs/RELEASE_1_0_1.md +61 -0
  583. package/docs/RELEASE_AUDIT.md +39 -0
  584. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
  585. package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
  586. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
  587. package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
  588. package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
  589. package/docs/SDR_RENDERING.md +33 -0
  590. package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
  591. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
  592. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
  593. package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
  594. package/docs/SENSOR_RAW_FRAME.md +20 -0
  595. package/docs/SENSOR_RAW_PRODUCER.md +77 -0
  596. package/docs/SIGNAL_CONFORMANCE.md +23 -0
  597. package/docs/SIMULATED_CAPTURE.md +65 -0
  598. package/docs/STABILIZATION.md +160 -17
  599. package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
  600. package/docs/TIER_ACCEPTANCE.md +129 -0
  601. package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
  602. package/docs/USAGE.md +5050 -1047
  603. package/docs/V1_COMPOSITION_MAP.md +123 -0
  604. package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
  605. package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
  606. package/docs/api/camera-equivalent-focal-length.md +53 -0
  607. package/docs/api/camera-field-of-view.md +119 -0
  608. package/docs/api/camera-projected-object-size.md +54 -0
  609. package/docs/api/capture-capture-export-metadata.md +107 -0
  610. package/docs/api/capture-environment-raw-producer.md +56 -0
  611. package/docs/api/capture-focus-control.md +419 -0
  612. package/docs/api/capture-linear-encoding.md +99 -0
  613. package/docs/api/capture-photographic-export.md +172 -0
  614. package/docs/api/capture-raw-frame-reconstruction.md +87 -0
  615. package/docs/api/capture-release-sequence.md +252 -0
  616. package/docs/api/capture-sensor-raw-frame.md +66 -0
  617. package/docs/api/capture-sensor-raw-producer.md +98 -0
  618. package/docs/api/capture-simulated-capture.md +179 -0
  619. package/docs/api/color-capture-color.md +122 -0
  620. package/docs/api/color-white-balance.md +386 -0
  621. package/docs/api/composition-image-formation-plan.md +825 -0
  622. package/docs/api/composition-plan-consumer.md +98 -0
  623. package/docs/api/core-calculation-result.md +220 -0
  624. package/docs/api/core-configuration-error.md +19 -0
  625. package/docs/api/core-image-formation.md +204 -0
  626. package/docs/api/core-scientific-assurance.md +214 -0
  627. package/docs/api/core-spectral-composition.md +268 -0
  628. package/docs/api/core-spectral.md +78 -0
  629. package/docs/api/core-validation.md +34 -0
  630. package/docs/api/core-version.md +14 -0
  631. package/docs/api/equipment-exposure-capabilities.md +270 -0
  632. package/docs/api/equipment-generic-tier-assets.md +82 -0
  633. package/docs/api/equipment-generic-tier-presets.md +103 -0
  634. package/docs/api/equipment-iso-capabilities.md +295 -0
  635. package/docs/api/equipment-metering-capabilities.md +126 -0
  636. package/docs/api/equipment-release-capabilities.md +91 -0
  637. package/docs/api/exports.json +5656 -0
  638. package/docs/api/exposure-exposure-duration-control.md +115 -0
  639. package/docs/api/exposure-exposure-mode-resolver.md +966 -0
  640. package/docs/api/exposure-exposure.md +150 -0
  641. package/docs/api/exposure-flash.md +327 -0
  642. package/docs/api/exposure-metering-scene-radiance.md +154 -0
  643. package/docs/api/exposure-metering-target.md +134 -0
  644. package/docs/api/exposure-metering-temporal.md +77 -0
  645. package/docs/api/exposure-metering.md +172 -0
  646. package/docs/api/exposure-program-line.md +64 -0
  647. package/docs/api/motion-camera-rotation.md +215 -0
  648. package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
  649. package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
  650. package/docs/api/motion-capture-rotation-trajectory.md +132 -0
  651. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
  652. package/docs/api/motion-extended-object-projection.md +312 -0
  653. package/docs/api/motion-projected-motion.md +60 -0
  654. package/docs/api/optics-aperture.md +69 -0
  655. package/docs/api/optics-circle-of-confusion.md +46 -0
  656. package/docs/api/optics-complex-pupil-psf.md +193 -0
  657. package/docs/api/optics-depth-of-field.md +92 -0
  658. package/docs/api/optics-diffraction.md +46 -0
  659. package/docs/api/optics-focus-breathing.md +119 -0
  660. package/docs/api/optics-focus-state.md +64 -0
  661. package/docs/api/optics-front-of-lens-filter.md +263 -0
  662. package/docs/api/optics-illumination-vignetting.md +95 -0
  663. package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
  664. package/docs/api/optics-lens-psf-profile.md +380 -0
  665. package/docs/api/optics-polygon-diffraction.md +68 -0
  666. package/docs/api/optics-profile-contract.md +47 -0
  667. package/docs/api/optics-psf-foundation.md +181 -0
  668. package/docs/api/optics-radial-distortion.md +194 -0
  669. package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
  670. package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
  671. package/docs/api/optics-sensor-environment-query.md +58 -0
  672. package/docs/api/optics-sensor-psf-quadrature.md +81 -0
  673. package/docs/api/optics-stray-light.md +109 -0
  674. package/docs/api/optics-thin-lens.md +53 -0
  675. package/docs/api/output-capture-corrected-sdr.md +71 -0
  676. package/docs/api/output-capture-geometry.md +500 -0
  677. package/docs/api/output-capture-sdr.md +69 -0
  678. package/docs/api/output-crop.md +47 -0
  679. package/docs/api/output-geometric-transforms.md +199 -0
  680. package/docs/api/output-lens-corrections.md +162 -0
  681. package/docs/api/output-sdr-rendering.md +122 -0
  682. package/docs/api/output-subject-framing-crop.md +59 -0
  683. package/docs/api/schema-camera.md +84 -0
  684. package/docs/api/schema-illumination-spectral.md +77 -0
  685. package/docs/api/schema-illumination-temporal.md +289 -0
  686. package/docs/api/schema-illumination.md +246 -0
  687. package/docs/api/schema-scene-radiance-temporal.md +215 -0
  688. package/docs/api/schema-scene-radiance.md +415 -0
  689. package/docs/api/schema-scene.md +105 -0
  690. package/docs/api/schema-validation.md +25 -0
  691. package/docs/api/sensor-accumulated-charge.md +273 -0
  692. package/docs/api/sensor-architecture.md +155 -0
  693. package/docs/api/sensor-camera-saturation-capacity.md +215 -0
  694. package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
  695. package/docs/api/sensor-capture-mode-timing.md +123 -0
  696. package/docs/api/sensor-capture-mode.md +321 -0
  697. package/docs/api/sensor-color-sampling.md +228 -0
  698. package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
  699. package/docs/api/sensor-dark-current.md +227 -0
  700. package/docs/api/sensor-environment-photo-signal.md +77 -0
  701. package/docs/api/sensor-eqe-electron-rate.md +166 -0
  702. package/docs/api/sensor-eqe-local-exposure.md +68 -0
  703. package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
  704. package/docs/api/sensor-exposure-window.md +183 -0
  705. package/docs/api/sensor-iso-signal-chain.md +264 -0
  706. package/docs/api/sensor-local-exposure-binding.md +126 -0
  707. package/docs/api/sensor-optical-stack.md +211 -0
  708. package/docs/api/sensor-photon-energy.md +149 -0
  709. package/docs/api/sensor-physical-charge-capacity.md +196 -0
  710. package/docs/api/sensor-pixel-pitch.md +41 -0
  711. package/docs/api/sensor-radiometry-readiness.md +240 -0
  712. package/docs/api/sensor-raw-readout.md +499 -0
  713. package/docs/api/sensor-raw-reconstruction.md +260 -0
  714. package/docs/api/sensor-readout-exposure-linkage.md +172 -0
  715. package/docs/api/sensor-readout-timing.md +209 -0
  716. package/docs/api/sensor-response-application-compatibility.md +256 -0
  717. package/docs/api/sensor-response-operating-range.md +293 -0
  718. package/docs/api/sensor-responsivity-photocurrent.md +245 -0
  719. package/docs/api/sensor-sampling-aperture.md +221 -0
  720. package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
  721. package/docs/api/sensor-sensor-geometry.md +143 -0
  722. package/docs/api/sensor-signal-noise.md +75 -0
  723. package/docs/api/sensor-spatial-sample-reduction.md +186 -0
  724. package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
  725. package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
  726. package/docs/api/sensor-spectral-coverage.md +33 -0
  727. package/docs/api/sensor-spectral-quadrature.md +183 -0
  728. package/docs/api/sensor-spectral-response.md +291 -0
  729. package/docs/api/sensor-temporal-photo-signal.md +62 -0
  730. package/docs/api/simulation-poc-simulation.md +364 -0
  731. package/docs/api/stabilization-camera-shake.md +71 -0
  732. package/docs/api/stabilization-system.md +442 -0
  733. package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
  734. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
  735. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
  736. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
  737. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
  738. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
  739. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
  740. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
  741. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
  742. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
  743. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
  744. package/docs/examples/production-capture.mjs +34 -0
  745. package/docs/examples/production-request.json +4613 -0
  746. package/docs/examples/quick-start.mjs +12 -0
  747. package/docs/validation/documentation-fragments.json +212 -0
  748. package/docs/validation/release-audit-inventory.json +1306 -0
  749. package/docs/validation/tier-acceptance-report-v1.json +2538 -0
  750. package/package.json +15 -3
@@ -0,0 +1,672 @@
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. Operating-range
6
+ * assessment preserves incident power versus irradiance, wavelength support, reference conditions and
7
+ * declared nonlinearity criterion. Per-bin conversion requires spectral-bin applicability and spatial
8
+ * linear superposition. Valid mean input must not conceal an invalid bright local sub-aperture.
9
+ * Assess every declared spectral-bin input against operating applicability and superposition before
10
+ * authorizing instantaneous response conversion. Operating-range assessment preserves incident power
11
+ * versus irradiance, wavelength support, reference conditions and declared nonlinearity criterion.
12
+ * Per-bin conversion requires spectral-bin applicability and spatial linear superposition. Valid mean
13
+ * input must not conceal an invalid bright local sub-aperture.
14
+ * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
15
+ * limits.
16
+ */
17
+ import { calculatedResult } from "../core/calculation-result.js";
18
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
19
+ import { parseEvidenceList } from "../core/evidence-provenance.js";
20
+ import { InvalidScientificInputError } from "../core/validation.js";
21
+ function requireRecord(value, path) {
22
+ if (typeof value !== "object" ||
23
+ value === null ||
24
+ Array.isArray(value)) {
25
+ throw new InvalidConfigurationError(path + " must be an object.");
26
+ }
27
+ return value;
28
+ }
29
+ function requireNonEmptyString(value, path) {
30
+ if (typeof value !== "string" ||
31
+ value.trim().length === 0) {
32
+ throw new InvalidConfigurationError(path + " must be a non-empty string.");
33
+ }
34
+ return value;
35
+ }
36
+ function requireFiniteNonNegative(value, path) {
37
+ if (typeof value !== "number" ||
38
+ !Number.isFinite(value) ||
39
+ value < 0) {
40
+ throw new InvalidConfigurationError(path +
41
+ " must be finite and greater than or equal to zero.");
42
+ }
43
+ return value;
44
+ }
45
+ function requirePositiveFinite(value, path) {
46
+ if (typeof value !== "number" ||
47
+ !Number.isFinite(value) ||
48
+ value <= 0) {
49
+ throw new InvalidConfigurationError(path +
50
+ " must be finite and greater than zero.");
51
+ }
52
+ return value;
53
+ }
54
+ function parseUncertainty(value, path) {
55
+ const record = requireRecord(value, path);
56
+ if (record.kind === "relative") {
57
+ const fraction = requireFiniteNonNegative(record.fraction, path + ".fraction");
58
+ return {
59
+ kind: "relative",
60
+ fraction,
61
+ basis: requireNonEmptyString(record.basis, path + ".basis")
62
+ };
63
+ }
64
+ if (record.kind === "not-quantified") {
65
+ return {
66
+ kind: "not-quantified",
67
+ limitation: requireNonEmptyString(record.limitation, path + ".limitation")
68
+ };
69
+ }
70
+ throw new InvalidConfigurationError(path + ".kind is invalid.");
71
+ }
72
+ function parseReferenceConditions(value, path) {
73
+ const record = requireRecord(value, path);
74
+ const result = {};
75
+ if (record.temperatureC !== undefined) {
76
+ if (typeof record.temperatureC !==
77
+ "number" ||
78
+ !Number.isFinite(record.temperatureC)) {
79
+ throw new InvalidConfigurationError(path +
80
+ ".temperatureC must be finite.");
81
+ }
82
+ result.temperatureC =
83
+ record.temperatureC;
84
+ }
85
+ if (record.incidenceAngleDegreesFromNormal !==
86
+ undefined) {
87
+ const angle = record
88
+ .incidenceAngleDegreesFromNormal;
89
+ if (typeof angle !== "number" ||
90
+ !Number.isFinite(angle) ||
91
+ angle < 0 ||
92
+ angle > 90) {
93
+ throw new InvalidConfigurationError(path +
94
+ ".incidenceAngleDegreesFromNormal must be finite from 0 through 90.");
95
+ }
96
+ result.incidenceAngleDegreesFromNormal =
97
+ angle;
98
+ }
99
+ if (record.polarization !== undefined) {
100
+ if (record.polarization !==
101
+ "unpolarized" &&
102
+ record.polarization !==
103
+ "unspecified") {
104
+ throw new InvalidConfigurationError(path +
105
+ ".polarization is invalid.");
106
+ }
107
+ result.polarization =
108
+ record.polarization;
109
+ }
110
+ if (result.temperatureC === undefined &&
111
+ result
112
+ .incidenceAngleDegreesFromNormal ===
113
+ undefined &&
114
+ result.polarization === undefined) {
115
+ throw new InvalidConfigurationError(path +
116
+ " must declare at least one condition.");
117
+ }
118
+ return result;
119
+ }
120
+ function parseReferenceConditionPolicy(value, path) {
121
+ const record = requireRecord(value, path);
122
+ if (record.kind ===
123
+ "exact-match-required") {
124
+ return {
125
+ kind: "exact-match-required"
126
+ };
127
+ }
128
+ if (record.kind === "assume-compatible") {
129
+ return {
130
+ kind: "assume-compatible",
131
+ limitation: requireNonEmptyString(record.limitation, path + ".limitation"),
132
+ evidence: parseEvidenceList(record.evidence, path + ".evidence")
133
+ };
134
+ }
135
+ throw new InvalidConfigurationError(path + ".kind is invalid.");
136
+ }
137
+ function parseInputRange(value, path) {
138
+ const record = requireRecord(value, path);
139
+ const minimumInclusive = requireFiniteNonNegative(record.minimumInclusive, path + ".minimumInclusive");
140
+ const maximumInclusive = requirePositiveFinite(record.maximumInclusive, path + ".maximumInclusive");
141
+ if (minimumInclusive >=
142
+ maximumInclusive) {
143
+ throw new InvalidConfigurationError(path +
144
+ ".minimumInclusive must be less than maximumInclusive.");
145
+ }
146
+ if (record.kind ===
147
+ "wavelength-integrated-geometric-aperture-radiant-power") {
148
+ if (record.unit !== "W") {
149
+ throw new InvalidConfigurationError(path +
150
+ '.unit must be "W".');
151
+ }
152
+ return {
153
+ kind: "wavelength-integrated-geometric-aperture-radiant-power",
154
+ unit: "W",
155
+ minimumInclusive,
156
+ maximumInclusive
157
+ };
158
+ }
159
+ if (record.kind ===
160
+ "wavelength-integrated-spatial-average-irradiance") {
161
+ if (record.unit !== "W/m^2") {
162
+ throw new InvalidConfigurationError(path +
163
+ '.unit must be "W/m^2".');
164
+ }
165
+ return {
166
+ kind: "wavelength-integrated-spatial-average-irradiance",
167
+ unit: "W/m^2",
168
+ minimumInclusive,
169
+ maximumInclusive
170
+ };
171
+ }
172
+ throw new InvalidConfigurationError(path + ".kind is invalid.");
173
+ }
174
+ function parseWavelengthApplicability(value, path) {
175
+ const record = requireRecord(value, path);
176
+ if (record.wavelengthBasis !== "air" &&
177
+ record.wavelengthBasis !==
178
+ "vacuum") {
179
+ throw new InvalidConfigurationError(path +
180
+ '.wavelengthBasis must be "air" or "vacuum".');
181
+ }
182
+ const minimumNanometers = requirePositiveFinite(record.minimumNanometers, path + ".minimumNanometers");
183
+ const maximumNanometers = requirePositiveFinite(record.maximumNanometers, path + ".maximumNanometers");
184
+ if (minimumNanometers >=
185
+ maximumNanometers) {
186
+ throw new InvalidConfigurationError(path +
187
+ ".minimumNanometers must be less than maximumNanometers.");
188
+ }
189
+ if (record.containment !==
190
+ "requested-range-must-be-contained") {
191
+ throw new InvalidConfigurationError(path +
192
+ '.containment must be "requested-range-must-be-contained".');
193
+ }
194
+ return {
195
+ wavelengthBasis: record.wavelengthBasis,
196
+ minimumNanometers,
197
+ maximumNanometers,
198
+ containment: "requested-range-must-be-contained"
199
+ };
200
+ }
201
+ function parseLinearityCriterion(value, path) {
202
+ const record = requireRecord(value, path);
203
+ const maximumAbsoluteRelativeDeviation = requireFiniteNonNegative(record
204
+ .maximumAbsoluteRelativeDeviation, path +
205
+ ".maximumAbsoluteRelativeDeviation");
206
+ if (maximumAbsoluteRelativeDeviation >
207
+ 1) {
208
+ throw new InvalidConfigurationError(path +
209
+ ".maximumAbsoluteRelativeDeviation must be a fraction from 0 through 1.");
210
+ }
211
+ return {
212
+ maximumAbsoluteRelativeDeviation
213
+ };
214
+ }
215
+ function parseSpectralInputModel(value) {
216
+ if (value === undefined) {
217
+ return {
218
+ kind: "broadband-integrated-only"
219
+ };
220
+ }
221
+ const record = requireRecord(value, "sensorResponseOperatingRange.spectralInputModel");
222
+ if (record.kind ===
223
+ "broadband-integrated-only") {
224
+ return {
225
+ kind: "broadband-integrated-only"
226
+ };
227
+ }
228
+ if (record.kind !==
229
+ "per-spectral-bin") {
230
+ throw new InvalidConfigurationError("sensorResponseOperatingRange.spectralInputModel.kind is invalid.");
231
+ }
232
+ if (record.scientificStatus !==
233
+ "calibrated" &&
234
+ record.scientificStatus !==
235
+ "approximation") {
236
+ throw new InvalidConfigurationError("sensorResponseOperatingRange.spectralInputModel.scientificStatus is invalid.");
237
+ }
238
+ const maximumBinWidthNanometers = requirePositiveFinite(record.maximumBinWidthNanometers, "sensorResponseOperatingRange.spectralInputModel.maximumBinWidthNanometers");
239
+ const limitation = record.limitation === undefined
240
+ ? undefined
241
+ : requireNonEmptyString(record.limitation, "sensorResponseOperatingRange.spectralInputModel.limitation");
242
+ if (record.scientificStatus ===
243
+ "approximation" &&
244
+ limitation === undefined) {
245
+ throw new InvalidConfigurationError("sensorResponseOperatingRange.spectralInputModel.limitation is required for an approximation.");
246
+ }
247
+ return {
248
+ kind: "per-spectral-bin",
249
+ maximumBinWidthNanometers,
250
+ scientificStatus: record.scientificStatus,
251
+ evidence: parseEvidenceList(record.evidence, "sensorResponseOperatingRange.spectralInputModel.evidence"),
252
+ ...(limitation === undefined
253
+ ? {}
254
+ : { limitation })
255
+ };
256
+ }
257
+ function parseSpatialLinearityModel(value) {
258
+ if (value === undefined) {
259
+ return {
260
+ kind: "not-established",
261
+ limitation: "Spatial-distribution linear superposition was not declared."
262
+ };
263
+ }
264
+ const record = requireRecord(value, "sensorResponseOperatingRange.spatialLinearityModel");
265
+ if (record.kind === "not-established") {
266
+ return {
267
+ kind: "not-established",
268
+ limitation: requireNonEmptyString(record.limitation, "sensorResponseOperatingRange.spatialLinearityModel.limitation")
269
+ };
270
+ }
271
+ if (record.kind !==
272
+ "linear-superposition-over-geometric-aperture") {
273
+ throw new InvalidConfigurationError("sensorResponseOperatingRange.spatialLinearityModel.kind is invalid.");
274
+ }
275
+ if (record.scientificStatus !==
276
+ "calibrated" &&
277
+ record.scientificStatus !==
278
+ "approximation") {
279
+ throw new InvalidConfigurationError("sensorResponseOperatingRange.spatialLinearityModel.scientificStatus is invalid.");
280
+ }
281
+ const limitation = record.limitation === undefined
282
+ ? undefined
283
+ : requireNonEmptyString(record.limitation, "sensorResponseOperatingRange.spatialLinearityModel.limitation");
284
+ if (record.scientificStatus ===
285
+ "approximation" &&
286
+ limitation === undefined) {
287
+ throw new InvalidConfigurationError("sensorResponseOperatingRange.spatialLinearityModel.limitation is required for an approximation.");
288
+ }
289
+ return {
290
+ kind: "linear-superposition-over-geometric-aperture",
291
+ scientificStatus: record.scientificStatus,
292
+ evidence: parseEvidenceList(record.evidence, "sensorResponseOperatingRange.spatialLinearityModel.evidence"),
293
+ ...(limitation === undefined
294
+ ? {}
295
+ : { limitation })
296
+ };
297
+ }
298
+ /**
299
+ * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
300
+ * missing required fields and incompatible scientific data fail at this boundary.
301
+ *
302
+ * Operating-range assessment preserves incident power versus irradiance, wavelength support, reference
303
+ * conditions and declared nonlinearity criterion. Per-bin conversion requires spectral-bin
304
+ * applicability and spatial linear superposition. Valid mean input must not conceal an invalid bright
305
+ * local sub-aperture.
306
+ * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
307
+ * @returns SensorResponseOperatingRangeProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
308
+ *
309
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
310
+ */
311
+ export function parseSensorResponseOperatingRangeProfile(value) {
312
+ const record = requireRecord(value, "sensorResponseOperatingRange");
313
+ if (record.schemaVersion !== "0.1.0") {
314
+ throw new InvalidConfigurationError('sensorResponseOperatingRange.schemaVersion must be "0.1.0".');
315
+ }
316
+ if (record.scientificStatus !==
317
+ "calibrated" &&
318
+ record.scientificStatus !==
319
+ "approximation") {
320
+ throw new InvalidConfigurationError("sensorResponseOperatingRange.scientificStatus is invalid.");
321
+ }
322
+ const referenceConditions = record.referenceConditions ===
323
+ undefined
324
+ ? undefined
325
+ : parseReferenceConditions(record.referenceConditions, "sensorResponseOperatingRange.referenceConditions");
326
+ const referenceConditionPolicy = parseReferenceConditionPolicy(record.referenceConditionPolicy, "sensorResponseOperatingRange.referenceConditionPolicy");
327
+ if (referenceConditionPolicy.kind ===
328
+ "exact-match-required" &&
329
+ referenceConditions === undefined) {
330
+ throw new InvalidConfigurationError("sensorResponseOperatingRange.referenceConditions is required when exact-match-required is selected.");
331
+ }
332
+ const uncertainty = parseUncertainty(record.uncertainty, "sensorResponseOperatingRange.uncertainty");
333
+ if (record.scientificStatus ===
334
+ "calibrated" &&
335
+ uncertainty.kind ===
336
+ "not-quantified") {
337
+ throw new InvalidConfigurationError("A calibrated sensor response operating range must declare quantified relative uncertainty.");
338
+ }
339
+ return {
340
+ schemaVersion: "0.1.0",
341
+ profileId: requireNonEmptyString(record.profileId, "sensorResponseOperatingRange.profileId"),
342
+ responseApplicationProfileId: requireNonEmptyString(record
343
+ .responseApplicationProfileId, "sensorResponseOperatingRange.responseApplicationProfileId"),
344
+ spectralResponseProfileId: requireNonEmptyString(record
345
+ .spectralResponseProfileId, "sensorResponseOperatingRange.spectralResponseProfileId"),
346
+ colorSamplingProfileId: requireNonEmptyString(record.colorSamplingProfileId, "sensorResponseOperatingRange.colorSamplingProfileId"),
347
+ channelId: requireNonEmptyString(record.channelId, "sensorResponseOperatingRange.channelId"),
348
+ scientificStatus: record.scientificStatus,
349
+ uncertainty,
350
+ evidence: parseEvidenceList(record.evidence, "sensorResponseOperatingRange.evidence"),
351
+ inputRange: parseInputRange(record.inputRange, "sensorResponseOperatingRange.inputRange"),
352
+ wavelengthApplicability: parseWavelengthApplicability(record.wavelengthApplicability, "sensorResponseOperatingRange.wavelengthApplicability"),
353
+ linearityCriterion: parseLinearityCriterion(record.linearityCriterion, "sensorResponseOperatingRange.linearityCriterion"),
354
+ spatialLinearityModel: parseSpatialLinearityModel(record.spatialLinearityModel),
355
+ spectralInputModel: parseSpectralInputModel(record.spectralInputModel),
356
+ ...(referenceConditions ===
357
+ undefined
358
+ ? {}
359
+ : { referenceConditions }),
360
+ referenceConditionPolicy
361
+ };
362
+ }
363
+ function conditionsMatch(reference, operating) {
364
+ if (reference.temperatureC !==
365
+ undefined &&
366
+ operating.temperatureC !==
367
+ reference.temperatureC) {
368
+ return false;
369
+ }
370
+ if (reference
371
+ .incidenceAngleDegreesFromNormal !==
372
+ undefined &&
373
+ operating
374
+ .incidenceAngleDegreesFromNormal !==
375
+ reference
376
+ .incidenceAngleDegreesFromNormal) {
377
+ return false;
378
+ }
379
+ if (reference.polarization !==
380
+ undefined &&
381
+ operating.polarization !==
382
+ reference.polarization) {
383
+ return false;
384
+ }
385
+ return true;
386
+ }
387
+ function requireReductionMetric(reduction, range) {
388
+ const value = range.kind ===
389
+ "wavelength-integrated-geometric-aperture-radiant-power"
390
+ ? reduction
391
+ .wavelengthIntegratedGeometricApertureIncidentFluxWatts
392
+ : reduction
393
+ .wavelengthIntegratedSpatialAverageIrradianceWattsPerSquareMeter;
394
+ if (typeof value !== "number" ||
395
+ !Number.isFinite(value) ||
396
+ value < 0) {
397
+ throw new InvalidScientificInputError("The selected operating-range input metric must be finite and nonnegative.");
398
+ }
399
+ return value;
400
+ }
401
+ function spectralNodeInputValue(entry, range) {
402
+ const value = range.kind ===
403
+ "wavelength-integrated-geometric-aperture-radiant-power"
404
+ ? entry
405
+ .wavelengthIntegratedGeometricApertureIncidentFluxContributionWatts
406
+ : entry
407
+ .wavelengthIntegratedSpatialAverageContributionWattsPerSquareMeter;
408
+ if (typeof value !== "number" ||
409
+ !Number.isFinite(value) ||
410
+ value < 0) {
411
+ throw new InvalidScientificInputError("Per-spectral-node operating-range input must be finite and nonnegative.");
412
+ }
413
+ return value;
414
+ }
415
+ function validateReductionIdentity(reduction, compatibility) {
416
+ if (reduction.responseProfileId !==
417
+ compatibility
418
+ .spectralResponseProfileId ||
419
+ reduction.colorSamplingProfileId !==
420
+ compatibility
421
+ .colorSamplingProfileId ||
422
+ reduction.channelId !==
423
+ compatibility.channelId) {
424
+ throw new InvalidScientificInputError("reduction and compatibility assessment identities do not match.");
425
+ }
426
+ }
427
+ /**
428
+ * Assess every declared spectral-bin input against operating applicability and superposition before
429
+ * authorizing instantaneous response conversion.
430
+ *
431
+ * Operating-range assessment preserves incident power versus irradiance, wavelength support, reference
432
+ * conditions and declared nonlinearity criterion. Per-bin conversion requires spectral-bin
433
+ * applicability and spatial linear superposition. Valid mean input must not conceal an invalid bright
434
+ * local sub-aperture.
435
+ * @param input - AssessSensorResponseOperatingRangeInput. See the linked contract for coordinate, unit and profile binding semantics.
436
+ * @returns CalculationResult<SensorResponseOperatingRangeAssessment>. Read structured blockers before consuming an authorization.
437
+ *
438
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
439
+ */
440
+ export function assessSensorResponseOperatingRange(input) {
441
+ validateReductionIdentity(input.reduction, input.compatibility);
442
+ const profile = parseSensorResponseOperatingRangeProfile(input.operatingRangeProfile);
443
+ const blockers = [];
444
+ if (!input.compatibility
445
+ .structuralCompatibilityEstablished ||
446
+ input.compatibility
447
+ .compatibilityStatus === "blocked") {
448
+ blockers.push("structural-compatibility-not-established");
449
+ }
450
+ if (profile.responseApplicationProfileId !==
451
+ input.compatibility
452
+ .applicationProfileId) {
453
+ blockers.push("response-application-profile-id-mismatch");
454
+ }
455
+ if (profile.spectralResponseProfileId !==
456
+ input.reduction
457
+ .responseProfileId) {
458
+ blockers.push("spectral-response-profile-id-mismatch");
459
+ }
460
+ if (profile.colorSamplingProfileId !==
461
+ input.reduction
462
+ .colorSamplingProfileId) {
463
+ blockers.push("color-sampling-profile-id-mismatch");
464
+ }
465
+ if (profile.channelId !==
466
+ input.reduction.channelId) {
467
+ blockers.push("channel-id-mismatch");
468
+ }
469
+ if (!input.reduction
470
+ .wavelengthBasisResolved) {
471
+ blockers.push("wavelength-basis-unresolved");
472
+ }
473
+ else if (input.reduction.wavelengthBasis !==
474
+ profile.wavelengthApplicability
475
+ .wavelengthBasis) {
476
+ blockers.push("wavelength-basis-mismatch");
477
+ }
478
+ const wavelengthRange = input.reduction
479
+ .wavelengthRangeNanometers;
480
+ if (wavelengthRange.minimum <
481
+ profile.wavelengthApplicability
482
+ .minimumNanometers ||
483
+ wavelengthRange.maximum >
484
+ profile.wavelengthApplicability
485
+ .maximumNanometers) {
486
+ blockers.push("wavelength-range-outside-linearity-applicability");
487
+ }
488
+ const metricValue = requireReductionMetric(input.reduction, profile.inputRange);
489
+ if (metricValue <
490
+ profile.inputRange.minimumInclusive) {
491
+ blockers.push("input-below-linearity-range");
492
+ }
493
+ if (metricValue >
494
+ profile.inputRange.maximumInclusive) {
495
+ blockers.push("input-above-linearity-range");
496
+ }
497
+ const spectralInputModel = profile.spectralInputModel ?? {
498
+ kind: "broadband-integrated-only"
499
+ };
500
+ const evaluatedSpectralNodeInputs = [];
501
+ if (spectralInputModel.kind ===
502
+ "per-spectral-bin") {
503
+ for (const entry of input.reduction.perWavelength) {
504
+ if (entry.wavelengthMeasureNanometers >
505
+ spectralInputModel
506
+ .maximumBinWidthNanometers) {
507
+ blockers.push("spectral-bin-width-outside-linearity-applicability");
508
+ }
509
+ const value = spectralNodeInputValue(entry, profile.inputRange);
510
+ evaluatedSpectralNodeInputs.push({
511
+ spectralSampleIndex: entry.spectralSampleIndex,
512
+ wavelengthNanometers: entry.wavelengthNanometers,
513
+ wavelengthMeasureNanometers: entry.wavelengthMeasureNanometers,
514
+ kind: profile.inputRange.kind,
515
+ unit: profile.inputRange.unit,
516
+ value
517
+ });
518
+ if (value <
519
+ profile.inputRange
520
+ .minimumInclusive) {
521
+ blockers.push("spectral-bin-input-below-linearity-range");
522
+ }
523
+ if (value >
524
+ profile.inputRange
525
+ .maximumInclusive) {
526
+ blockers.push("spectral-bin-input-above-linearity-range");
527
+ }
528
+ }
529
+ }
530
+ if (profile.spatialLinearityModel?.kind !==
531
+ "linear-superposition-over-geometric-aperture") {
532
+ blockers.push("spatial-linearity-superposition-not-established");
533
+ }
534
+ if (profile.referenceConditionPolicy.kind ===
535
+ "exact-match-required") {
536
+ const referenceConditions = profile.referenceConditions;
537
+ if (input.compatibility
538
+ .operatingConditions ===
539
+ undefined) {
540
+ blockers.push("operating-conditions-not-declared");
541
+ }
542
+ else if (!conditionsMatch(referenceConditions, input.compatibility
543
+ .operatingConditions)) {
544
+ blockers.push("linearity-operating-conditions-mismatch");
545
+ }
546
+ }
547
+ const compatible = blockers.length === 0;
548
+ const approximate = input.compatibility
549
+ .compatibilityStatus ===
550
+ "compatible-approximation" ||
551
+ profile.scientificStatus ===
552
+ "approximation" ||
553
+ profile.uncertainty.kind ===
554
+ "not-quantified" ||
555
+ (profile.spatialLinearityModel?.kind ===
556
+ "linear-superposition-over-geometric-aperture" &&
557
+ profile.spatialLinearityModel
558
+ .scientificStatus ===
559
+ "approximation") ||
560
+ (spectralInputModel.kind ===
561
+ "per-spectral-bin" &&
562
+ spectralInputModel
563
+ .scientificStatus ===
564
+ "approximation") ||
565
+ profile.referenceConditionPolicy.kind ===
566
+ "assume-compatible";
567
+ const spectralRateReady = compatible &&
568
+ spectralInputModel.kind ===
569
+ "per-spectral-bin";
570
+ const status = compatible
571
+ ? spectralRateReady
572
+ ? approximate
573
+ ? "rate-conversion-authorized-approximation"
574
+ : "rate-conversion-authorized"
575
+ : approximate
576
+ ? "broadband-range-compatible-approximation"
577
+ : "broadband-range-compatible"
578
+ : "blocked";
579
+ const referenceConditionEvidence = profile.referenceConditionPolicy.kind ===
580
+ "assume-compatible"
581
+ ? profile.referenceConditionPolicy
582
+ .evidence
583
+ : [];
584
+ const spatialLinearityEvidence = profile.spatialLinearityModel?.kind ===
585
+ "linear-superposition-over-geometric-aperture"
586
+ ? profile.spatialLinearityModel.evidence
587
+ : [];
588
+ return calculatedResult({
589
+ operatingRangeProfileId: profile.profileId,
590
+ responseApplicationProfileId: input.compatibility
591
+ .applicationProfileId,
592
+ spectralResponseProfileId: input.reduction
593
+ .responseProfileId,
594
+ colorSamplingProfileId: input.reduction
595
+ .colorSamplingProfileId,
596
+ channelId: input.reduction.channelId,
597
+ requiredSignalPath: input.compatibility
598
+ .requiredSignalPath,
599
+ inputRange: profile.inputRange,
600
+ evaluatedInput: {
601
+ kind: profile.inputRange.kind,
602
+ unit: profile.inputRange.unit,
603
+ value: metricValue
604
+ },
605
+ wavelengthApplicability: profile.wavelengthApplicability,
606
+ evaluatedWavelengthRangeNanometers: {
607
+ ...wavelengthRange
608
+ },
609
+ linearityCriterion: profile.linearityCriterion,
610
+ spectralInputModel,
611
+ ...(evaluatedSpectralNodeInputs.length ===
612
+ 0
613
+ ? {}
614
+ : {
615
+ evaluatedSpectralNodeInputs
616
+ }),
617
+ spectralNodeRangeCompatibilityAssessed: spectralInputModel.kind ===
618
+ "per-spectral-bin",
619
+ spatialLinearityModel: profile.spatialLinearityModel ?? {
620
+ kind: "not-established",
621
+ limitation: "Spatial-distribution linear superposition was not declared."
622
+ },
623
+ referenceConditionPolicy: profile.referenceConditionPolicy,
624
+ ...(profile.referenceConditions ===
625
+ undefined
626
+ ? {}
627
+ : {
628
+ referenceConditions: profile.referenceConditions
629
+ }),
630
+ ...(input.compatibility
631
+ .operatingConditions ===
632
+ undefined
633
+ ? {}
634
+ : {
635
+ operatingConditions: input.compatibility
636
+ .operatingConditions
637
+ }),
638
+ operatingRangeCompatibilityAssessed: true,
639
+ instantaneousResponseRangeCompatible: compatible,
640
+ status,
641
+ blockers,
642
+ responseRateConversionAuthorized: spectralRateReady,
643
+ responseApplicationPerformed: false,
644
+ temporalIntegrationAuthorized: false,
645
+ exposureDomainLinearityAssessed: false,
646
+ accumulatedChargeLinearityAssessed: false,
647
+ saturationAssessed: false,
648
+ photonConversionPerformed: false,
649
+ electronConversionPerformed: false,
650
+ currentConversionPerformed: false,
651
+ componentEvidence: {
652
+ operatingRange: profile.evidence,
653
+ referenceConditionAssumption: referenceConditionEvidence,
654
+ spatialLinearity: spatialLinearityEvidence,
655
+ structuralCompatibility: input.compatibility
656
+ .componentEvidence
657
+ }
658
+ }, "sensor-response-operating-range-assessment", "1.0.0", [
659
+ "This gate assesses instantaneous response-law applicability only; it does not apply response or integrate exposure.",
660
+ "The valid optical-input range is evidence-backed and must be expressed in the same wavelength-integrated power or irradiance domain produced by the pre-response reducer.",
661
+ "Broadband-integrated range compatibility alone cannot authorize wavelength-dependent response conversion; per-spectral-bin applicability must be explicitly established and every bin must remain inside the calibrated input range.",
662
+ "Per-spectral-bin applicability also declares a maximum supported bin width so a broad quadrature bin is not silently treated as an equivalent monochromatic calibration point.",
663
+ "Linearity can depend on optical input level and wavelength; the reduction wavelength range must remain inside the declared applicability range.",
664
+ "Post-spatial rate conversion additionally requires explicit linear superposition over the geometric aperture; otherwise sub-aperture illumination patterns could hide local nonlinear behavior.",
665
+ "The maximumAbsoluteRelativeDeviation criterion documents the tolerated response nonlinearity for the declared valid range; this function does not derive that criterion from synthetic data.",
666
+ "Reference conditions for the linearity calibration are separate from spectral-response reference conditions and must match when exact matching is required.",
667
+ "Exposure-domain linearity, accumulated-charge saturation/full-well behavior, and downstream electronics linearity are intentionally not assessed here.",
668
+ "A successful result authorizes only a future instantaneous rate conversion path: photon-rate→electrons for EQE/filter×EQE or radiant-power→current for A/W responsivity.",
669
+ "Temporal integration, saturation, noise, ADC/RAW conversion and reconstruction remain downstream."
670
+ ]);
671
+ }
672
+ //# sourceMappingURL=response-operating-range.js.map