@photivra/engine 1.5.0 → 2.1.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 (1085) hide show
  1. package/CHANGELOG.md +414 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +116 -9
  56. package/dist/capture/native-raw-development.js +221 -62
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +65 -12
  62. package/dist/capture/native-raw.js +81 -19
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/diffraction-provider.d.ts +30 -0
  236. package/dist/facade/diffraction-provider.js +127 -0
  237. package/dist/facade/diffraction-provider.js.map +1 -0
  238. package/dist/facade/host-yield.d.ts +7 -0
  239. package/dist/facade/host-yield.js +19 -0
  240. package/dist/facade/host-yield.js.map +1 -0
  241. package/dist/facade/scene-radiance.d.ts +117 -0
  242. package/dist/facade/scene-radiance.js +205 -0
  243. package/dist/facade/scene-radiance.js.map +1 -0
  244. package/dist/facade/simulate-capture.d.ts +363 -0
  245. package/dist/facade/simulate-capture.js +1281 -0
  246. package/dist/facade/simulate-capture.js.map +1 -0
  247. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  248. package/dist/gpu/chart-radiance-gpu.js +176 -0
  249. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  250. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  251. package/dist/gpu/image-kernel-accelerator.js +720 -0
  252. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  253. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  254. package/dist/gpu/image-kernel-execution.js +84 -0
  255. package/dist/gpu/image-kernel-execution.js.map +1 -0
  256. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  257. package/dist/gpu/sensor-stage-gpu.js +317 -0
  258. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  259. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  260. package/dist/gpu/temporal-sum-gpu.js +150 -0
  261. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  262. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  263. package/dist/gpu/webgpu-runtime.js +215 -0
  264. package/dist/gpu/webgpu-runtime.js.map +1 -0
  265. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  266. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  267. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  268. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  269. package/dist/gpu/wgsl-kernels.js +365 -0
  270. package/dist/gpu/wgsl-kernels.js.map +1 -0
  271. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  272. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  273. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  274. package/dist/index.d.ts +91 -25
  275. package/dist/index.js +60 -15
  276. package/dist/index.js.map +1 -1
  277. package/dist/motion/camera-rotation.d.ts +92 -40
  278. package/dist/motion/camera-rotation.js +84 -47
  279. package/dist/motion/camera-rotation.js.map +1 -1
  280. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  281. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  282. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  283. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  284. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  285. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  286. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  287. package/dist/motion/capture-rotation-trajectory.js +36 -26
  288. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  289. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  290. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  291. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  292. package/dist/motion/extended-object-projection.d.ts +19 -16
  293. package/dist/motion/extended-object-projection.js +38 -18
  294. package/dist/motion/extended-object-projection.js.map +1 -1
  295. package/dist/motion/projected-motion.d.ts +18 -17
  296. package/dist/motion/projected-motion.js +25 -17
  297. package/dist/motion/projected-motion.js.map +1 -1
  298. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  299. package/dist/motion/temporal-exposure-sum.js +141 -0
  300. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  301. package/dist/motion/video-sequence.d.ts +111 -0
  302. package/dist/motion/video-sequence.js +179 -0
  303. package/dist/motion/video-sequence.js.map +1 -0
  304. package/dist/optics/aperture.d.ts +14 -15
  305. package/dist/optics/aperture.js +13 -11
  306. package/dist/optics/aperture.js.map +1 -1
  307. package/dist/optics/atmospheric-haze.d.ts +83 -0
  308. package/dist/optics/atmospheric-haze.js +113 -0
  309. package/dist/optics/atmospheric-haze.js.map +1 -0
  310. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  311. package/dist/optics/brown-conrady-distortion.js +291 -0
  312. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  313. package/dist/optics/circle-of-confusion.d.ts +10 -10
  314. package/dist/optics/circle-of-confusion.js +15 -11
  315. package/dist/optics/circle-of-confusion.js.map +1 -1
  316. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  317. package/dist/optics/complex-pupil-psf.js +190 -98
  318. package/dist/optics/complex-pupil-psf.js.map +1 -1
  319. package/dist/optics/depth-of-field.d.ts +25 -15
  320. package/dist/optics/depth-of-field.js +67 -27
  321. package/dist/optics/depth-of-field.js.map +1 -1
  322. package/dist/optics/diffraction-psf-profile.d.ts +118 -0
  323. package/dist/optics/diffraction-psf-profile.js +252 -0
  324. package/dist/optics/diffraction-psf-profile.js.map +1 -0
  325. package/dist/optics/diffraction.d.ts +14 -13
  326. package/dist/optics/diffraction.js +14 -10
  327. package/dist/optics/diffraction.js.map +1 -1
  328. package/dist/optics/focus-breathing.d.ts +88 -27
  329. package/dist/optics/focus-breathing.js +114 -23
  330. package/dist/optics/focus-breathing.js.map +1 -1
  331. package/dist/optics/focus-state.d.ts +18 -18
  332. package/dist/optics/focus-state.js +21 -15
  333. package/dist/optics/focus-state.js.map +1 -1
  334. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  335. package/dist/optics/front-of-lens-filter.js +259 -88
  336. package/dist/optics/front-of-lens-filter.js.map +1 -1
  337. package/dist/optics/illumination-vignetting.d.ts +16 -17
  338. package/dist/optics/illumination-vignetting.js +40 -17
  339. package/dist/optics/illumination-vignetting.js.map +1 -1
  340. package/dist/optics/irradiance-convolution.d.ts +59 -0
  341. package/dist/optics/irradiance-convolution.js +138 -0
  342. package/dist/optics/irradiance-convolution.js.map +1 -0
  343. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  344. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  345. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  346. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  347. package/dist/optics/lens-psf-kernels.js +175 -0
  348. package/dist/optics/lens-psf-kernels.js.map +1 -0
  349. package/dist/optics/lens-psf-profile.d.ts +78 -46
  350. package/dist/optics/lens-psf-profile.js +335 -124
  351. package/dist/optics/lens-psf-profile.js.map +1 -1
  352. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  353. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  354. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  355. package/dist/optics/polygon-diffraction.d.ts +80 -23
  356. package/dist/optics/polygon-diffraction.js +130 -25
  357. package/dist/optics/polygon-diffraction.js.map +1 -1
  358. package/dist/optics/profile-contract.d.ts +5 -6
  359. package/dist/optics/profile-contract.js +14 -11
  360. package/dist/optics/profile-contract.js.map +1 -1
  361. package/dist/optics/psf-foundation.d.ts +23 -23
  362. package/dist/optics/psf-foundation.js +24 -21
  363. package/dist/optics/psf-foundation.js.map +1 -1
  364. package/dist/optics/pupil-vignetting.d.ts +118 -0
  365. package/dist/optics/pupil-vignetting.js +264 -0
  366. package/dist/optics/pupil-vignetting.js.map +1 -0
  367. package/dist/optics/radial-distortion.d.ts +34 -33
  368. package/dist/optics/radial-distortion.js +37 -30
  369. package/dist/optics/radial-distortion.js.map +1 -1
  370. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  371. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  372. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  373. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  374. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  375. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  376. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  377. package/dist/optics/sensor-aperture-rays.js +32 -14
  378. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  379. package/dist/optics/sensor-environment-query.d.ts +81 -16
  380. package/dist/optics/sensor-environment-query.js +145 -12
  381. package/dist/optics/sensor-environment-query.js.map +1 -1
  382. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  383. package/dist/optics/sensor-psf-quadrature.js +18 -11
  384. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  385. package/dist/optics/sensor-psf-support.d.ts +8 -6
  386. package/dist/optics/sensor-psf-support.js +8 -5
  387. package/dist/optics/sensor-psf-support.js.map +1 -1
  388. package/dist/optics/stray-light.d.ts +22 -19
  389. package/dist/optics/stray-light.js +18 -12
  390. package/dist/optics/stray-light.js.map +1 -1
  391. package/dist/optics/thin-lens.d.ts +10 -9
  392. package/dist/optics/thin-lens.js +12 -8
  393. package/dist/optics/thin-lens.js.map +1 -1
  394. package/dist/optics/zernike-wavefront.d.ts +154 -0
  395. package/dist/optics/zernike-wavefront.js +352 -0
  396. package/dist/optics/zernike-wavefront.js.map +1 -0
  397. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  398. package/dist/output/capture-corrected-sdr.js +16 -8
  399. package/dist/output/capture-corrected-sdr.js.map +1 -1
  400. package/dist/output/capture-geometry.d.ts +34 -36
  401. package/dist/output/capture-geometry.js +52 -32
  402. package/dist/output/capture-geometry.js.map +1 -1
  403. package/dist/output/capture-sdr.d.ts +7 -6
  404. package/dist/output/capture-sdr.js +11 -8
  405. package/dist/output/capture-sdr.js.map +1 -1
  406. package/dist/output/crop.d.ts +22 -6
  407. package/dist/output/crop.js +40 -6
  408. package/dist/output/crop.js.map +1 -1
  409. package/dist/output/geometric-transforms.d.ts +60 -23
  410. package/dist/output/geometric-transforms.js +111 -24
  411. package/dist/output/geometric-transforms.js.map +1 -1
  412. package/dist/output/lens-corrections.d.ts +27 -19
  413. package/dist/output/lens-corrections.js +29 -13
  414. package/dist/output/lens-corrections.js.map +1 -1
  415. package/dist/output/native-capture-sdr.d.ts +71 -16
  416. package/dist/output/native-capture-sdr.js +190 -33
  417. package/dist/output/native-capture-sdr.js.map +1 -1
  418. package/dist/output/png-encoder.d.ts +65 -0
  419. package/dist/output/png-encoder.js +461 -0
  420. package/dist/output/png-encoder.js.map +1 -0
  421. package/dist/output/print-contrast-reference.d.ts +10 -9
  422. package/dist/output/print-contrast-reference.js +10 -8
  423. package/dist/output/print-contrast-reference.js.map +1 -1
  424. package/dist/output/print-detail.d.ts +18 -17
  425. package/dist/output/print-detail.js +12 -10
  426. package/dist/output/print-detail.js.map +1 -1
  427. package/dist/output/print-jpeg.d.ts +26 -5
  428. package/dist/output/print-jpeg.js +117 -50
  429. package/dist/output/print-jpeg.js.map +1 -1
  430. package/dist/output/print-plan.d.ts +19 -19
  431. package/dist/output/print-plan.js +11 -10
  432. package/dist/output/print-plan.js.map +1 -1
  433. package/dist/output/print-region-statistics.d.ts +14 -15
  434. package/dist/output/print-region-statistics.js +11 -11
  435. package/dist/output/print-region-statistics.js.map +1 -1
  436. package/dist/output/sdr-rendering.d.ts +48 -10
  437. package/dist/output/sdr-rendering.js +114 -25
  438. package/dist/output/sdr-rendering.js.map +1 -1
  439. package/dist/output/subject-framing-crop.d.ts +6 -10
  440. package/dist/output/subject-framing-crop.js +23 -13
  441. package/dist/output/subject-framing-crop.js.map +1 -1
  442. package/dist/processing/demosaic.d.ts +90 -0
  443. package/dist/processing/demosaic.js +275 -0
  444. package/dist/processing/demosaic.js.map +1 -0
  445. package/dist/processing/denoise.d.ts +68 -0
  446. package/dist/processing/denoise.js +214 -0
  447. package/dist/processing/denoise.js.map +1 -0
  448. package/dist/processing/focus-stacking.d.ts +17 -0
  449. package/dist/processing/focus-stacking.js +80 -0
  450. package/dist/processing/focus-stacking.js.map +1 -0
  451. package/dist/processing/hdr.d.ts +54 -0
  452. package/dist/processing/hdr.js +172 -0
  453. package/dist/processing/hdr.js.map +1 -0
  454. package/dist/processing/image-ops.d.ts +66 -0
  455. package/dist/processing/image-ops.js +192 -0
  456. package/dist/processing/image-ops.js.map +1 -0
  457. package/dist/processing/panorama.d.ts +51 -0
  458. package/dist/processing/panorama.js +305 -0
  459. package/dist/processing/panorama.js.map +1 -0
  460. package/dist/processing/processing-task.d.ts +85 -0
  461. package/dist/processing/processing-task.js +164 -0
  462. package/dist/processing/processing-task.js.map +1 -0
  463. package/dist/processing/tone-mapping.d.ts +69 -0
  464. package/dist/processing/tone-mapping.js +310 -0
  465. package/dist/processing/tone-mapping.js.map +1 -0
  466. package/dist/schema/camera.d.ts +5 -4
  467. package/dist/schema/illumination-spectral.d.ts +13 -19
  468. package/dist/schema/illumination-spectral.js +23 -19
  469. package/dist/schema/illumination-spectral.js.map +1 -1
  470. package/dist/schema/illumination-temporal.d.ts +12 -15
  471. package/dist/schema/illumination-temporal.js +43 -28
  472. package/dist/schema/illumination-temporal.js.map +1 -1
  473. package/dist/schema/illumination.d.ts +5 -4
  474. package/dist/schema/illumination.js +55 -20
  475. package/dist/schema/illumination.js.map +1 -1
  476. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  477. package/dist/schema/scene-radiance-temporal.js +26 -23
  478. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  479. package/dist/schema/scene-radiance.d.ts +17 -17
  480. package/dist/schema/scene-radiance.js +56 -34
  481. package/dist/schema/scene-radiance.js.map +1 -1
  482. package/dist/schema/scene.d.ts +14 -13
  483. package/dist/schema/validation.d.ts +0 -1
  484. package/dist/schema/validation.js +17 -15
  485. package/dist/schema/validation.js.map +1 -1
  486. package/dist/sensor/accumulated-charge.d.ts +45 -64
  487. package/dist/sensor/accumulated-charge.js +41 -47
  488. package/dist/sensor/accumulated-charge.js.map +1 -1
  489. package/dist/sensor/architecture.d.ts +22 -25
  490. package/dist/sensor/architecture.js +17 -16
  491. package/dist/sensor/architecture.js.map +1 -1
  492. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  493. package/dist/sensor/camera-saturation-capacity.js +36 -34
  494. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  495. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  496. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  497. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  498. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  499. package/dist/sensor/capture-mode-timing.js +24 -21
  500. package/dist/sensor/capture-mode-timing.js.map +1 -1
  501. package/dist/sensor/capture-mode.d.ts +28 -30
  502. package/dist/sensor/capture-mode.js +33 -31
  503. package/dist/sensor/capture-mode.js.map +1 -1
  504. package/dist/sensor/color-sampling.d.ts +30 -33
  505. package/dist/sensor/color-sampling.js +32 -37
  506. package/dist/sensor/color-sampling.js.map +1 -1
  507. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  508. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  509. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  510. package/dist/sensor/dark-current.d.ts +53 -49
  511. package/dist/sensor/dark-current.js +87 -46
  512. package/dist/sensor/dark-current.js.map +1 -1
  513. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  514. package/dist/sensor/environment-photo-signal.js +127 -46
  515. package/dist/sensor/environment-photo-signal.js.map +1 -1
  516. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  517. package/dist/sensor/eqe-electron-rate.js +34 -14
  518. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  519. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  520. package/dist/sensor/eqe-local-exposure.js +15 -11
  521. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  522. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  523. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  524. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  525. package/dist/sensor/exposure-window.d.ts +48 -34
  526. package/dist/sensor/exposure-window.js +77 -36
  527. package/dist/sensor/exposure-window.js.map +1 -1
  528. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  529. package/dist/sensor/fixed-pattern-noise.js +166 -0
  530. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  531. package/dist/sensor/iso-gain.d.ts +44 -0
  532. package/dist/sensor/iso-gain.js +119 -0
  533. package/dist/sensor/iso-gain.js.map +1 -0
  534. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  535. package/dist/sensor/iso-signal-chain.js +52 -66
  536. package/dist/sensor/iso-signal-chain.js.map +1 -1
  537. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  538. package/dist/sensor/local-exposure-binding.js +22 -18
  539. package/dist/sensor/local-exposure-binding.js.map +1 -1
  540. package/dist/sensor/optical-stack.d.ts +36 -40
  541. package/dist/sensor/optical-stack.js +34 -37
  542. package/dist/sensor/optical-stack.js.map +1 -1
  543. package/dist/sensor/photon-energy.d.ts +22 -28
  544. package/dist/sensor/photon-energy.js +42 -34
  545. package/dist/sensor/photon-energy.js.map +1 -1
  546. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  547. package/dist/sensor/physical-charge-capacity.js +35 -36
  548. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  549. package/dist/sensor/pixel-pitch.d.ts +2 -3
  550. package/dist/sensor/pixel-pitch.js +4 -2
  551. package/dist/sensor/pixel-pitch.js.map +1 -1
  552. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  553. package/dist/sensor/radiometry-readiness.js +20 -17
  554. package/dist/sensor/radiometry-readiness.js.map +1 -1
  555. package/dist/sensor/raw-readout.d.ts +173 -83
  556. package/dist/sensor/raw-readout.js +425 -160
  557. package/dist/sensor/raw-readout.js.map +1 -1
  558. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  559. package/dist/sensor/raw-reconstruction.js +200 -47
  560. package/dist/sensor/raw-reconstruction.js.map +1 -1
  561. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  562. package/dist/sensor/readout-exposure-linkage.js +125 -27
  563. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  564. package/dist/sensor/readout-timing.d.ts +43 -44
  565. package/dist/sensor/readout-timing.js +38 -30
  566. package/dist/sensor/readout-timing.js.map +1 -1
  567. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  568. package/dist/sensor/response-application-compatibility.js +35 -34
  569. package/dist/sensor/response-application-compatibility.js.map +1 -1
  570. package/dist/sensor/response-operating-range.d.ts +26 -35
  571. package/dist/sensor/response-operating-range.js +40 -39
  572. package/dist/sensor/response-operating-range.js.map +1 -1
  573. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  574. package/dist/sensor/responsivity-photocurrent.js +57 -40
  575. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  576. package/dist/sensor/sampling-aperture.d.ts +21 -25
  577. package/dist/sensor/sampling-aperture.js +29 -28
  578. package/dist/sensor/sampling-aperture.js.map +1 -1
  579. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  580. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  581. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  582. package/dist/sensor/sensor-geometry.d.ts +28 -32
  583. package/dist/sensor/sensor-geometry.js +35 -20
  584. package/dist/sensor/sensor-geometry.js.map +1 -1
  585. package/dist/sensor/signal-noise.d.ts +14 -16
  586. package/dist/sensor/signal-noise.js +15 -13
  587. package/dist/sensor/signal-noise.js.map +1 -1
  588. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  589. package/dist/sensor/spatial-sample-reduction.js +39 -48
  590. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  591. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  592. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  593. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  594. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  595. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  596. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  597. package/dist/sensor/spectral-coverage.d.ts +6 -9
  598. package/dist/sensor/spectral-coverage.js +9 -6
  599. package/dist/sensor/spectral-coverage.js.map +1 -1
  600. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  601. package/dist/sensor/spectral-quadrature.js +38 -48
  602. package/dist/sensor/spectral-quadrature.js.map +1 -1
  603. package/dist/sensor/spectral-response.d.ts +53 -41
  604. package/dist/sensor/spectral-response.js +80 -47
  605. package/dist/sensor/spectral-response.js.map +1 -1
  606. package/dist/sensor/stochastic-seed.d.ts +50 -0
  607. package/dist/sensor/stochastic-seed.js +123 -0
  608. package/dist/sensor/stochastic-seed.js.map +1 -0
  609. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  610. package/dist/sensor/temporal-eqe-sum.js +5 -6
  611. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  612. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  613. package/dist/sensor/temporal-photo-signal.js +11 -10
  614. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  615. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  616. package/dist/sensor/temporal-sample-binding.js +3 -3
  617. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  618. package/dist/simulation/poc-simulation.d.ts +16 -16
  619. package/dist/simulation/poc-simulation.js +20 -15
  620. package/dist/simulation/poc-simulation.js.map +1 -1
  621. package/dist/stabilization/camera-shake.d.ts +42 -18
  622. package/dist/stabilization/camera-shake.js +43 -20
  623. package/dist/stabilization/camera-shake.js.map +1 -1
  624. package/dist/stabilization/system.d.ts +44 -41
  625. package/dist/stabilization/system.js +196 -108
  626. package/dist/stabilization/system.js.map +1 -1
  627. package/docs/AGENT_GUIDE.md +183 -0
  628. package/docs/API_REFERENCE.md +777 -2
  629. package/docs/QUICK_START.md +663 -0
  630. package/docs/USAGE.md +1719 -714
  631. package/docs/api/camera-equivalent-focal-length.md +6 -7
  632. package/docs/api/camera-field-of-view.md +16 -8
  633. package/docs/api/camera-lens-projection.md +246 -0
  634. package/docs/api/camera-projected-object-size.md +6 -5
  635. package/docs/api/capture-capture-export-metadata.md +10 -10
  636. package/docs/api/capture-dng-import.md +134 -0
  637. package/docs/api/capture-environment-raw-producer.md +17 -11
  638. package/docs/api/capture-export-jpeg.md +16 -0
  639. package/docs/api/capture-focus-control.md +25 -47
  640. package/docs/api/capture-linear-encoding.md +21 -12
  641. package/docs/api/capture-lossless-jpeg.md +49 -0
  642. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  643. package/docs/api/capture-native-environment-raw.md +161 -4
  644. package/docs/api/capture-native-raw-development.md +69 -8
  645. package/docs/api/capture-native-raw-dng.md +84 -0
  646. package/docs/api/capture-native-raw.md +21 -10
  647. package/docs/api/capture-packed-sensor-raw.md +156 -0
  648. package/docs/api/capture-photographic-export.md +69 -31
  649. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  650. package/docs/api/capture-raw-white-level.md +37 -0
  651. package/docs/api/capture-release-sequence.md +6 -7
  652. package/docs/api/capture-sensor-raw-frame.md +6 -6
  653. package/docs/api/capture-sensor-raw-producer.md +17 -11
  654. package/docs/api/capture-simulated-capture.md +15 -15
  655. package/docs/api/color-camera-color-matrix.md +103 -0
  656. package/docs/api/color-capture-color.md +22 -11
  657. package/docs/api/color-chromatic-adaptation.md +82 -0
  658. package/docs/api/color-color-difference.md +134 -0
  659. package/docs/api/color-color-matching-functions.md +259 -0
  660. package/docs/api/color-colorimetry-math.md +54 -0
  661. package/docs/api/color-gamut-mapping.md +72 -0
  662. package/docs/api/color-illuminants.md +280 -0
  663. package/docs/api/color-rgb-color-spaces.md +151 -0
  664. package/docs/api/color-sensor-color-development.md +27 -0
  665. package/docs/api/color-srgb-icc.md +2 -4
  666. package/docs/api/color-white-balance.md +95 -19
  667. package/docs/api/composition-image-formation-plan.md +124 -95
  668. package/docs/api/composition-plan-consumer.md +7 -7
  669. package/docs/api/core-calculation-result.md +18 -14
  670. package/docs/api/core-configuration-error.md +1 -1
  671. package/docs/api/core-image-formation.md +7 -7
  672. package/docs/api/core-scientific-assurance.md +12 -10
  673. package/docs/api/core-spectral-composition.md +14 -14
  674. package/docs/api/core-spectral.md +6 -6
  675. package/docs/api/core-validation.md +3 -3
  676. package/docs/api/core-version.md +7 -6
  677. package/docs/api/equipment-exposure-capabilities.md +11 -10
  678. package/docs/api/equipment-generic-tier-assets.md +7 -2
  679. package/docs/api/equipment-generic-tier-presets.md +6 -6
  680. package/docs/api/equipment-iso-capabilities.md +18 -18
  681. package/docs/api/equipment-metering-capabilities.md +6 -6
  682. package/docs/api/equipment-release-capabilities.md +4 -4
  683. package/docs/api/exports.json +2253 -3
  684. package/docs/api/exposure-exposure-duration-control.md +9 -9
  685. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  686. package/docs/api/exposure-exposure.md +10 -10
  687. package/docs/api/exposure-flash-ttl.md +182 -0
  688. package/docs/api/exposure-flash.md +183 -28
  689. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  690. package/docs/api/exposure-metering-target.md +9 -8
  691. package/docs/api/exposure-metering-temporal.md +8 -8
  692. package/docs/api/exposure-metering.md +69 -9
  693. package/docs/api/exposure-program-line.md +6 -5
  694. package/docs/api/facade-chart-radiance-batch.md +96 -0
  695. package/docs/api/facade-chart-scenes.md +240 -0
  696. package/docs/api/facade-scene-radiance.md +122 -0
  697. package/docs/api/facade-simulate-capture.md +397 -0
  698. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  699. package/docs/api/gpu-image-kernel-execution.md +152 -0
  700. package/docs/api/motion-camera-rotation.md +43 -26
  701. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  702. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  703. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  704. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  705. package/docs/api/motion-extended-object-projection.md +10 -8
  706. package/docs/api/motion-projected-motion.md +8 -8
  707. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  708. package/docs/api/motion-video-sequence.md +159 -0
  709. package/docs/api/optics-aperture.md +8 -8
  710. package/docs/api/optics-atmospheric-haze.md +104 -0
  711. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  712. package/docs/api/optics-circle-of-confusion.md +5 -4
  713. package/docs/api/optics-complex-pupil-psf.md +57 -16
  714. package/docs/api/optics-depth-of-field.md +12 -6
  715. package/docs/api/optics-diffraction-psf-profile.md +96 -0
  716. package/docs/api/optics-diffraction.md +8 -7
  717. package/docs/api/optics-focus-breathing.md +104 -16
  718. package/docs/api/optics-focus-state.md +9 -10
  719. package/docs/api/optics-front-of-lens-filter.md +72 -14
  720. package/docs/api/optics-illumination-vignetting.md +10 -10
  721. package/docs/api/optics-irradiance-convolution.md +95 -0
  722. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  723. package/docs/api/optics-lens-psf-kernels.md +72 -0
  724. package/docs/api/optics-lens-psf-profile.md +48 -26
  725. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  726. package/docs/api/optics-polygon-diffraction.md +78 -13
  727. package/docs/api/optics-profile-contract.md +4 -4
  728. package/docs/api/optics-psf-foundation.md +12 -12
  729. package/docs/api/optics-pupil-vignetting.md +132 -0
  730. package/docs/api/optics-radial-distortion.md +12 -12
  731. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  732. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  733. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  734. package/docs/api/optics-sensor-environment-query.md +52 -9
  735. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  736. package/docs/api/optics-stray-light.md +12 -11
  737. package/docs/api/optics-thin-lens.md +4 -3
  738. package/docs/api/optics-zernike-wavefront.md +229 -0
  739. package/docs/api/output-capture-corrected-sdr.md +10 -7
  740. package/docs/api/output-capture-geometry.md +35 -36
  741. package/docs/api/output-capture-sdr.md +4 -4
  742. package/docs/api/output-crop.md +7 -4
  743. package/docs/api/output-geometric-transforms.md +65 -19
  744. package/docs/api/output-lens-corrections.md +17 -15
  745. package/docs/api/output-native-capture-sdr.md +26 -13
  746. package/docs/api/output-png-encoder.md +105 -0
  747. package/docs/api/output-print-contrast-reference.md +8 -8
  748. package/docs/api/output-print-detail.md +14 -14
  749. package/docs/api/output-print-jpeg.md +22 -5
  750. package/docs/api/output-print-plan.md +18 -18
  751. package/docs/api/output-print-region-statistics.md +14 -14
  752. package/docs/api/output-sdr-rendering.md +52 -10
  753. package/docs/api/output-subject-framing-crop.md +5 -6
  754. package/docs/api/processing-demosaic.md +120 -0
  755. package/docs/api/processing-denoise.md +148 -0
  756. package/docs/api/processing-focus-stacking.md +41 -0
  757. package/docs/api/processing-hdr.md +113 -0
  758. package/docs/api/processing-panorama.md +82 -0
  759. package/docs/api/processing-processing-task.md +107 -0
  760. package/docs/api/processing-tone-mapping.md +142 -0
  761. package/docs/api/schema-camera.md +6 -4
  762. package/docs/api/schema-illumination-spectral.md +10 -11
  763. package/docs/api/schema-illumination-temporal.md +13 -15
  764. package/docs/api/schema-illumination.md +4 -4
  765. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  766. package/docs/api/schema-scene-radiance.md +18 -17
  767. package/docs/api/schema-scene.md +9 -9
  768. package/docs/api/schema-validation.md +1 -1
  769. package/docs/api/sensor-accumulated-charge.md +12 -20
  770. package/docs/api/sensor-architecture.md +15 -16
  771. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  772. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  773. package/docs/api/sensor-capture-mode-timing.md +9 -9
  774. package/docs/api/sensor-capture-mode.md +29 -30
  775. package/docs/api/sensor-color-sampling.md +31 -33
  776. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  777. package/docs/api/sensor-dark-current.md +30 -14
  778. package/docs/api/sensor-environment-photo-signal.md +13 -6
  779. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  780. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  781. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  782. package/docs/api/sensor-exposure-window.md +24 -24
  783. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  784. package/docs/api/sensor-iso-gain.md +63 -0
  785. package/docs/api/sensor-iso-signal-chain.md +13 -22
  786. package/docs/api/sensor-local-exposure-binding.md +12 -13
  787. package/docs/api/sensor-optical-stack.md +37 -40
  788. package/docs/api/sensor-photon-energy.md +10 -11
  789. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  790. package/docs/api/sensor-pixel-pitch.md +1 -1
  791. package/docs/api/sensor-radiometry-readiness.md +9 -9
  792. package/docs/api/sensor-raw-readout.md +118 -52
  793. package/docs/api/sensor-raw-reconstruction.md +97 -20
  794. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  795. package/docs/api/sensor-readout-timing.md +33 -35
  796. package/docs/api/sensor-response-application-compatibility.md +9 -11
  797. package/docs/api/sensor-response-operating-range.md +14 -18
  798. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  799. package/docs/api/sensor-sampling-aperture.md +22 -25
  800. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  801. package/docs/api/sensor-sensor-geometry.md +23 -24
  802. package/docs/api/sensor-signal-noise.md +10 -10
  803. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  804. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  805. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  806. package/docs/api/sensor-spectral-coverage.md +5 -5
  807. package/docs/api/sensor-spectral-quadrature.md +33 -35
  808. package/docs/api/sensor-spectral-response.md +28 -16
  809. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  810. package/docs/api/simulation-poc-simulation.md +17 -16
  811. package/docs/api/stabilization-camera-shake.md +29 -10
  812. package/docs/api/stabilization-system.md +25 -21
  813. package/docs/examples/production-request.json +3821 -2157
  814. package/docs/examples/simulate-capture.mjs +14 -0
  815. package/llms.txt +35 -0
  816. package/package.json +32 -11
  817. package/AGENTS.md +0 -674
  818. package/CONTRIBUTING.md +0 -76
  819. package/DCO +0 -33
  820. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  821. package/dist/camera/field-of-view.d.ts.map +0 -1
  822. package/dist/camera/projected-object-size.d.ts.map +0 -1
  823. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  824. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  825. package/dist/capture/export-jpeg.d.ts.map +0 -1
  826. package/dist/capture/export-tiff.d.ts.map +0 -1
  827. package/dist/capture/focus-control.d.ts.map +0 -1
  828. package/dist/capture/linear-encoding.d.ts.map +0 -1
  829. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  830. package/dist/capture/native-raw-development.d.ts.map +0 -1
  831. package/dist/capture/native-raw.d.ts.map +0 -1
  832. package/dist/capture/photographic-export.d.ts.map +0 -1
  833. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  834. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  835. package/dist/capture/release-sequence.d.ts.map +0 -1
  836. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  837. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  838. package/dist/capture/simulated-capture.d.ts.map +0 -1
  839. package/dist/color/capture-color.d.ts.map +0 -1
  840. package/dist/color/sensor-color-development.d.ts.map +0 -1
  841. package/dist/color/srgb-icc.d.ts.map +0 -1
  842. package/dist/color/srgb-transfer.d.ts.map +0 -1
  843. package/dist/color/white-balance.d.ts.map +0 -1
  844. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  845. package/dist/composition/plan-consumer.d.ts.map +0 -1
  846. package/dist/core/calculation-result.d.ts.map +0 -1
  847. package/dist/core/canonical-json.d.ts.map +0 -1
  848. package/dist/core/configuration-error.d.ts.map +0 -1
  849. package/dist/core/evidence-provenance.d.ts.map +0 -1
  850. package/dist/core/image-formation.d.ts.map +0 -1
  851. package/dist/core/owned-data.d.ts.map +0 -1
  852. package/dist/core/record-validation.d.ts.map +0 -1
  853. package/dist/core/scientific-assurance.d.ts.map +0 -1
  854. package/dist/core/spectral-composition.d.ts.map +0 -1
  855. package/dist/core/spectral.d.ts.map +0 -1
  856. package/dist/core/validation.d.ts.map +0 -1
  857. package/dist/core/version.d.ts.map +0 -1
  858. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  859. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  860. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  861. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  862. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  863. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  864. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  865. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  866. package/dist/exposure/exposure.d.ts.map +0 -1
  867. package/dist/exposure/flash.d.ts.map +0 -1
  868. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  869. package/dist/exposure/metering-target.d.ts.map +0 -1
  870. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  871. package/dist/exposure/metering.d.ts.map +0 -1
  872. package/dist/exposure/program-line.d.ts.map +0 -1
  873. package/dist/index.d.ts.map +0 -1
  874. package/dist/motion/camera-rotation.d.ts.map +0 -1
  875. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  876. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  877. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  878. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  879. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  880. package/dist/motion/projected-motion.d.ts.map +0 -1
  881. package/dist/optics/aperture.d.ts.map +0 -1
  882. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  883. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  884. package/dist/optics/depth-of-field.d.ts.map +0 -1
  885. package/dist/optics/diffraction.d.ts.map +0 -1
  886. package/dist/optics/focus-breathing.d.ts.map +0 -1
  887. package/dist/optics/focus-state.d.ts.map +0 -1
  888. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  889. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  890. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  891. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  892. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  893. package/dist/optics/profile-contract.d.ts.map +0 -1
  894. package/dist/optics/psf-foundation.d.ts.map +0 -1
  895. package/dist/optics/radial-distortion.d.ts.map +0 -1
  896. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  897. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  898. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  899. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  900. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  901. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  902. package/dist/optics/stray-light.d.ts.map +0 -1
  903. package/dist/optics/thin-lens.d.ts.map +0 -1
  904. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  905. package/dist/output/capture-geometry.d.ts.map +0 -1
  906. package/dist/output/capture-sdr.d.ts.map +0 -1
  907. package/dist/output/crop.d.ts.map +0 -1
  908. package/dist/output/geometric-transforms.d.ts.map +0 -1
  909. package/dist/output/lens-corrections.d.ts.map +0 -1
  910. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  911. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  912. package/dist/output/print-detail.d.ts.map +0 -1
  913. package/dist/output/print-jpeg.d.ts.map +0 -1
  914. package/dist/output/print-plan.d.ts.map +0 -1
  915. package/dist/output/print-region-statistics.d.ts.map +0 -1
  916. package/dist/output/sdr-rendering.d.ts.map +0 -1
  917. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  918. package/dist/schema/camera.d.ts.map +0 -1
  919. package/dist/schema/camera.js +0 -3
  920. package/dist/schema/camera.js.map +0 -1
  921. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  922. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  923. package/dist/schema/illumination.d.ts.map +0 -1
  924. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  925. package/dist/schema/scene-radiance.d.ts.map +0 -1
  926. package/dist/schema/scene.d.ts.map +0 -1
  927. package/dist/schema/scene.js +0 -3
  928. package/dist/schema/scene.js.map +0 -1
  929. package/dist/schema/validation.d.ts.map +0 -1
  930. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  931. package/dist/sensor/architecture.d.ts.map +0 -1
  932. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  933. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  934. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  935. package/dist/sensor/capture-mode.d.ts.map +0 -1
  936. package/dist/sensor/color-sampling.d.ts.map +0 -1
  937. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  938. package/dist/sensor/dark-current.d.ts.map +0 -1
  939. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  940. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  941. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  942. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  943. package/dist/sensor/exposure-window.d.ts.map +0 -1
  944. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  945. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  946. package/dist/sensor/optical-stack.d.ts.map +0 -1
  947. package/dist/sensor/photon-energy.d.ts.map +0 -1
  948. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  949. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  950. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  951. package/dist/sensor/raw-readout.d.ts.map +0 -1
  952. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  953. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  954. package/dist/sensor/readout-timing.d.ts.map +0 -1
  955. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  956. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  957. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  958. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  959. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  960. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  961. package/dist/sensor/signal-noise.d.ts.map +0 -1
  962. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  963. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  964. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  965. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  966. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  967. package/dist/sensor/spectral-response.d.ts.map +0 -1
  968. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  969. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  970. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  971. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  972. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  973. package/dist/stabilization/system.d.ts.map +0 -1
  974. package/docs/API_STYLE.md +0 -235
  975. package/docs/ARCHITECTURE.md +0 -356
  976. package/docs/AUTOMATION_COORDINATION.md +0 -190
  977. package/docs/CAPTURE_COLOR.md +0 -25
  978. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  979. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  980. package/docs/CAPTURE_SDR.md +0 -22
  981. package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
  982. package/docs/DEVELOPERS.md +0 -68
  983. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  984. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  985. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  986. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  987. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  988. package/docs/IMAGE_FORMATION.md +0 -247
  989. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  990. package/docs/MOTION_AND_SIGNAL.md +0 -250
  991. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  992. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  993. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  994. package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
  995. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  996. package/docs/PERFORMANCE_BASELINE.md +0 -56
  997. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  998. package/docs/PHYSICS_FOUNDATION.md +0 -426
  999. package/docs/POC_API.md +0 -278
  1000. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  1001. package/docs/POC_PROJECTION_REUSE.md +0 -124
  1002. package/docs/PRINT_195_196_REVIEW.md +0 -93
  1003. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  1004. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  1005. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  1006. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  1007. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1008. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1009. package/docs/PRINT_PLANNING.md +0 -75
  1010. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1011. package/docs/PROCESSED_OUTPUT.md +0 -157
  1012. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1013. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1014. package/docs/PROVENANCE.md +0 -115
  1015. package/docs/PSF_FOUNDATION.md +0 -165
  1016. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1017. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1018. package/docs/RELEASE_1_0.md +0 -66
  1019. package/docs/RELEASE_1_0_1.md +0 -61
  1020. package/docs/RELEASE_1_1_0.md +0 -25
  1021. package/docs/RELEASE_1_2_0.md +0 -51
  1022. package/docs/RELEASE_1_3_0.md +0 -15
  1023. package/docs/RELEASE_1_4_0.md +0 -23
  1024. package/docs/RELEASE_1_5_0.md +0 -105
  1025. package/docs/RELEASE_AUDIT.md +0 -39
  1026. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1027. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1028. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1029. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1030. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1031. package/docs/SDR_RENDERING.md +0 -33
  1032. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1033. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1034. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1035. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1036. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1037. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1038. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1039. package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
  1040. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1041. package/docs/SIMULATED_CAPTURE.md +0 -65
  1042. package/docs/STABILIZATION.md +0 -234
  1043. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1044. package/docs/TIER_ACCEPTANCE.md +0 -129
  1045. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1046. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1047. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1048. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1049. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1050. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1051. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1052. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1053. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1054. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1055. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1056. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1057. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1058. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1059. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1060. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1061. package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
  1062. package/docs/validation/documentation-fragments.json +0 -212
  1063. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1064. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1065. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1066. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1067. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1068. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1069. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1070. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1071. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1072. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1073. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1074. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1075. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1076. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1077. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1078. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1079. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1080. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1081. package/docs/validation/print-detail-capabilities.json +0 -103
  1082. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1083. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1084. package/docs/validation/release-audit-inventory.json +0 -1306
  1085. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1,52 +1,59 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Preflight all optical, spatial, spectral and temporal support into an internal owned execution plan
5
- * without invoking provider code. Planning checks complete spatial/spectral/temporal support before
6
- * invoking supplied synchronous radiance code. Queries use explicit environment directions, vacuum/air
7
- * wavelength and opening-reference seconds. Optical throughput, optional local PSF and typed EQE
8
- * produce photo expectations; callback invocation does not verify transport, visibility or
9
- * calibration.
10
- * Internal executor consumes a completed bounded geometric plan; returns no partial success on
11
- * failure.
3
+ * Photo signal for one sensor site from a scene-radiance provider (the "environment"): asks the
4
+ * provider for radiance along each sampled direction, then applies optics and the sensor response.
5
+ *
6
+ * Work is split into a plan and an execution step. Planning checks spatial, spectral and temporal
7
+ * coverage and builds an internal plan before any provider code runs. Each query gives an explicit
8
+ * scene direction, a wavelength (air or vacuum) and a time in seconds from the shutter's opening
9
+ * reference. Optical throughput, an optional local PSF (point-spread function) and the EQE (external
10
+ * quantum efficiency) response then give the expected photo signal. Calling the provider does not
11
+ * verify its light transport, visibility or calibration.
12
12
  * @see docs/ENVIRONMENT_RAW_CAPTURE.md for equations, coordinate/unit conventions, blockers and
13
13
  * support limits.
14
14
  */
15
15
  import { approximationResult } from "../core/calculation-result.js";
16
16
  import { freezeOwnedData } from "../core/owned-data.js";
17
- import { requirePublicOpaqueId } from "../core/record-validation.js";
17
+ import { requirePublicOpaqueId, requireInputKeys } from "../core/record-validation.js";
18
18
  import { parseEvidenceList } from "../core/evidence-provenance.js";
19
19
  import { InvalidScientificInputError } from "../core/validation.js";
20
20
  import { parseSceneIlluminationProfile } from "../schema/illumination.js";
21
21
  import { parseSceneIlluminationTemporalProfile } from "../schema/illumination-temporal.js";
22
22
  import { parseSceneMaterialResponseProfile, parseSceneRadianceProviderProfile, parseSceneRadianceEvaluationResult, validateSceneRadianceEvaluationBindings } from "../schema/scene-radiance.js";
23
- import { calculateSensorEnvironmentRadianceQuery } from "../optics/sensor-environment-query.js";
23
+ import { calculateMappedSensorEnvironmentRadianceQuery, calculateSensorEnvironmentRadianceQuery, prepareEnvironmentLensFieldMapping } from "../optics/sensor-environment-query.js";
24
24
  import { calculateSceneRadianceToSensorIrradiance } from "../optics/scene-to-sensor-irradiance.js";
25
25
  import { calculateSensorPsfIrradianceQuadrature } from "../optics/sensor-psf-quadrature.js";
26
26
  import { calculateIlluminationVignetting } from "../optics/illumination-vignetting.js";
27
27
  import { calculateSensorApertureRays } from "../optics/sensor-aperture-rays.js";
28
28
  import { sensorPsfSourcePoint } from "../optics/sensor-psf-support.js";
29
- import { resolveLensSampledPsf } from "../optics/lens-psf-profile.js";
29
+ import { markEngineOwnedLensSampledPsfProfile, resolveLensSampledPsf } from "../optics/lens-psf-profile.js";
30
30
  import { calculateSensorSpatialSamplingQuadrature } from "./spatial-sampling-quadrature.js";
31
31
  import { calculateSensorSpectralQuadrature } from "./spectral-quadrature.js";
32
32
  import { resolveNativeEffectiveRasterColorSamplingBinding } from "./capture-color-sampling-binding.js";
33
33
  import { calculateCaptureExposureWindows } from "./exposure-window.js";
34
34
  import { createSensorEqeTemporalPhotoSignal } from "./temporal-photo-signal.js";
35
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
35
36
  /**
36
- * Preflight all optical, spatial, spectral and temporal support into an internal owned execution plan
37
- * without invoking provider code.
37
+ * Builds an internal execution plan covering all optical, spatial, spectral and temporal sampling,
38
+ * without calling any provider code.
38
39
  *
39
- * Planning checks complete spatial/spectral/temporal support before invoking supplied synchronous
40
- * radiance code. Queries use explicit environment directions, vacuum/air wavelength and
41
- * opening-reference seconds. Optical throughput, optional local PSF and typed EQE produce photo
42
- * expectations; callback invocation does not verify transport, visibility or calibration.
43
- * @param input - Omit<CalculateEnvironmentSensorPhotoSignalInput, "evaluateRadiance" | "evaluateApertureRadiance">. See the linked contract for coordinate, unit and profile binding semantics.
44
- * @returns EnvironmentPhotoPlan. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
40
+ * Coverage is checked completely before any supplied radiance function runs. Each query gives an
41
+ * explicit scene direction, a wavelength (air or vacuum) and seconds from the opening reference.
42
+ * @param input - The photo-signal input without its radiance functions; see
43
+ * `CalculateEnvironmentSensorPhotoSignalInput`.
44
+ * @param ownership - Internal. "copy" (default) makes a structured clone of the input. "engine-owned"
45
+ * uses the input as the plan's own data without cloning again. Only engine callers that already hold a
46
+ * private structured clone, never shown to supplied code and never changed afterwards, may pass it.
47
+ * @param retention - Internal. "full" (default) keeps every planned query result for "full" execution
48
+ * records. "photo-only" keeps only each query's frozen request and image-plane point, which is all that
49
+ * photo-only execution reads. Every query is still computed and validated at plan time, so limit checks
50
+ * and errors are unchanged.
51
+ * @returns The result. Success does not imply calibration.
45
52
  *
46
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
53
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
47
54
  */
48
- export function planEnvironmentSensorPhotoSignal(input) {
49
- const owned = structuredClone(input);
55
+ export function planEnvironmentSensorPhotoSignal(input, ownership = "copy", retention = "full") {
56
+ const owned = ownership === "engine-owned" ? input : structuredClone(input);
50
57
  requirePublicOpaqueId(owned.temporalIntegrationId, "Environment integration requires a public identity.");
51
58
  if (!Number.isSafeInteger(owned.temporalSampleCount) || owned.temporalSampleCount < 1 || owned.temporalSampleCount > 256 ||
52
59
  owned.sensor.responseApplication.sourcePlane.value !== "sensor-package-incident" ||
@@ -92,9 +99,11 @@ export function planEnvironmentSensorPhotoSignal(input) {
92
99
  throw new InvalidScientificInputError("PSF omission needs an explicit limitation.");
93
100
  }
94
101
  else if (owned.psf.kind !== "sampled-local")
95
- throw new InvalidScientificInputError("Unknown environment PSF selection.");
102
+ throw new InvalidConfigurationError("Unknown environment PSF selection.");
96
103
  if (owned.psf.kind === "sampled-local") {
97
104
  const p = owned.psf.configuration.psf;
105
+ // The profile belongs only to this plan, so its parse can be cached across nodes and time instants.
106
+ markEngineOwnedLensSampledPsfProfile(p.profile);
98
107
  if (p.focalLengthMm !== owned.optics.focalLengthMm || p.apertureFNumber !== owned.optics.nominalFNumber ||
99
108
  p.focus.kind !== focus.kind || (p.focus.kind === "finite" && focus.kind === "finite" && p.focus.distanceM !== focus.distanceM)) {
100
109
  throw new InvalidScientificInputError("PSF and optical focal/aperture/focus state must match exactly.");
@@ -102,6 +111,10 @@ export function planEnvironmentSensorPhotoSignal(input) {
102
111
  }
103
112
  if (owned.pupil !== undefined && owned.psf.kind !== "not-applied")
104
113
  throw new InvalidScientificInputError("Ideal pupil integration cannot mix with a sampled PSF; geometric defocus would be ambiguous.");
114
+ const lensMapping = owned.lensFieldMapping === undefined ? undefined : prepareEnvironmentLensFieldMapping(owned.lensFieldMapping);
115
+ if (lensMapping !== undefined && owned.pupil !== undefined) {
116
+ throw new InvalidScientificInputError("Ideal pupil rays use the rectilinear distortion-free projection and cannot combine with a lens field mapping.");
117
+ }
105
118
  const pupilCount = owned.pupil === undefined ? 1 : calculateSensorApertureRays({ sourcePointNativeSensorMm: { x: 0, y: 0 },
106
119
  focalLengthMm: owned.optics.focalLengthMm, nominalFNumber: owned.optics.nominalFNumber, focus, pupil: owned.pupil,
107
120
  angularVelocityRadPerSec: owned.motion.angularVelocityRadPerSec, timeSecondsFromOpeningReference: window.startOffsetSecondsFromOpeningReference }).value.rays.length;
@@ -134,16 +147,24 @@ export function planEnvironmentSensorPhotoSignal(input) {
134
147
  if (!(time > window.startOffsetSecondsFromOpeningReference && time > previous && time < window.endOffsetSecondsFromOpeningReference))
135
148
  throw new InvalidScientificInputError("Local midpoints must be representable and strictly ordered.");
136
149
  previous = time;
137
- const groups = nodes.map((n, ni) => ({ node: n.node, taps: n.points.map((p, pi) => ({ ...p,
138
- ...(owned.pupil === undefined ? {} : { apertureRays: calculateSensorApertureRays({ sourcePointNativeSensorMm: p.point,
139
- focalLengthMm: owned.optics.focalLengthMm, nominalFNumber: owned.optics.nominalFNumber, focus, pupil: owned.pupil,
140
- angularVelocityRadPerSec: owned.motion.angularVelocityRadPerSec, timeSecondsFromOpeningReference: time }).value.rays }),
141
- query: calculateSensorEnvironmentRadianceQuery({ ...owned.motion, sourcePointNativeSensorMm: p.point,
150
+ const groups = nodes.map((n, ni) => ({ node: n.node, taps: n.points.map((p, pi) => {
151
+ const apertureRays = owned.pupil === undefined ? undefined : calculateSensorApertureRays({ sourcePointNativeSensorMm: p.point,
152
+ focalLengthMm: owned.optics.focalLengthMm, nominalFNumber: owned.optics.nominalFNumber, focus, pupil: owned.pupil,
153
+ angularVelocityRadPerSec: owned.motion.angularVelocityRadPerSec, timeSecondsFromOpeningReference: time }).value.rays;
154
+ const queryInput = { ...owned.motion, sourcePointNativeSensorMm: p.point,
142
155
  focalLengthMm: owned.optics.focalLengthMm, focus, timeSecondsFromOpeningReference: time,
143
156
  request: { schemaVersion: "0.1.0", sampleId: `${owned.temporalIntegrationId}-t${temporalSampleIndex}-n${ni}-p${pi}`,
144
157
  providerProfileId: sceneBindings.providerProfile.profileId, sceneId: sceneBindings.providerProfile.sceneId,
145
158
  illuminationProfileId: sceneBindings.illuminationProfile.profileId, materialResponseProfileId: sceneBindings.materialResponseProfile.profileId,
146
- wavelengthNanometers: n.node.wavelengthNanometers, wavelengthBasis } }) })) }));
159
+ wavelengthNanometers: n.node.wavelengthNanometers, wavelengthBasis } };
160
+ const query = freezePlannedRequest(lensMapping === undefined ? calculateSensorEnvironmentRadianceQuery(queryInput)
161
+ : calculateMappedSensorEnvironmentRadianceQuery(queryInput, lensMapping));
162
+ const areaFactor = query.value.lensFieldMapping?.distortionAreaFactor;
163
+ // Photo-only plans drop the query result (projection, diagnostics) once it is validated (a 2.0 memory saving).
164
+ return { ...p, ...(apertureRays === undefined ? {} : { apertureRays }),
165
+ ...(areaFactor === undefined ? {} : { distortionAreaFactor: areaFactor }), request: query.value.request,
166
+ sourcePointImagePlaneMm: query.value.sourcePointImagePlaneMm, ...(retention === "full" ? { query } : {}) };
167
+ }) }));
147
168
  // Validate PSF evidence/basis/support before supplied code is invoked.
148
169
  if (owned.psf.kind === "sampled-local")
149
170
  calculateSensorPsfIrradianceQuadrature({ ...owned.psf.configuration,
@@ -155,13 +176,69 @@ export function planEnvironmentSensorPhotoSignal(input) {
155
176
  });
156
177
  return { owned, sceneBindings, fieldThroughputEvidence, spatialQuadrature, spectralQuadrature, instants, count, focus };
157
178
  }
158
- /** Internal executor consumes a completed bounded geometric plan; returns no partial success on failure. */
159
- export function executeEnvironmentSensorPhotoSignal(plan, evaluate, evaluateAperture) {
179
+ /** Aperture queries already built for a batched provider, keyed by the planned ray; each is used once. */
180
+ const PREBUILT_APERTURE_QUERIES = new WeakMap();
181
+ /**
182
+ * Internal: the frozen provider request and frozen private ray copy of one ideal-pupil query (sample ID suffix "-a"
183
+ * and the pupil index, reversed ray direction). If prebuildApertureRadianceQuery already built this query for a batch,
184
+ * the same objects are returned once, so the batch and the executor share them; otherwise new ones are built.
185
+ */
186
+ export function apertureRadianceQuery(base, ray) {
187
+ const prebuilt = PREBUILT_APERTURE_QUERIES.get(ray);
188
+ if (prebuilt !== undefined && prebuilt.base === base) {
189
+ PREBUILT_APERTURE_QUERIES.delete(ray);
190
+ return { request: prebuilt.request, apertureRay: prebuilt.apertureRay };
191
+ }
192
+ return { request: freezeOwnedData({ ...base, sampleId: base.sampleId + "-a" + ray.pupilSampleIndex,
193
+ target: { kind: "environment-direction", outgoingDirectionUnitVector: {
194
+ x: -ray.directionUnitVector.x, y: -ray.directionUnitVector.y, z: -ray.directionUnitVector.z
195
+ } } }),
196
+ apertureRay: freezeOwnedData(copyRay(ray)) };
197
+ }
198
+ /**
199
+ * A private copy of an engine-computed ray: plain records of numbers, copied key by key in the same order, so it
200
+ * equals what structuredClone returns for this data (a 2.0 performance change: structuredClone dominated pupil runs).
201
+ */
202
+ function copyRay(ray) {
203
+ const copy = (value) => {
204
+ if (typeof value !== "object" || value === null)
205
+ return value;
206
+ if (Array.isArray(value))
207
+ return value.map(copy);
208
+ const out = {};
209
+ for (const key of Object.keys(value))
210
+ out[key] = copy(value[key]);
211
+ return out;
212
+ };
213
+ return copy(ray);
214
+ }
215
+ /** Internal: builds a pupil query for a batched provider and keeps it for the executor's apertureRadianceQuery call. */
216
+ export function prebuildApertureRadianceQuery(base, ray) {
217
+ PREBUILT_APERTURE_QUERIES.delete(ray);
218
+ const query = apertureRadianceQuery(base, ray);
219
+ PREBUILT_APERTURE_QUERIES.set(ray, { base, ...query });
220
+ return query;
221
+ }
222
+ /** Deep-freezes a planned provider request once, so execution can hand the same immutable request to supplied code. */
223
+ function freezePlannedRequest(query) {
224
+ freezeOwnedData(query.value.request);
225
+ return query;
226
+ }
227
+ /**
228
+ * Internal: runs a completed, bounded plan. On failure nothing partial is returned.
229
+ * With retention "full" (default), every per-evaluation record is kept in value.instants[].evaluations.
230
+ * With "photo-only", those lists are empty, for engine callers that read only value.photo. Photo values
231
+ * are identical either way.
232
+ */
233
+ export function executeEnvironmentSensorPhotoSignal(plan, evaluate, evaluateAperture, retention = "full") {
160
234
  if (typeof evaluate !== "function")
161
235
  throw new InvalidScientificInputError("Environment radiance evaluator must be synchronous callable code.");
162
236
  const { owned } = plan;
163
237
  if (owned.pupil !== undefined && typeof evaluateAperture !== "function")
164
238
  throw new InvalidScientificInputError("Pupil integration requires an origin-aware aperture evaluator.");
239
+ if (retention === "full" && plan.instants.some(instant => instant.groups.some(group => group.taps.some(tap => tap.query === undefined)))) {
240
+ throw new InvalidScientificInputError("Full environment execution records require a full plan.");
241
+ }
165
242
  const irradiance = [];
166
243
  const instants = [];
167
244
  for (const instant of plan.instants) {
@@ -170,22 +247,22 @@ export function executeEnvironmentSensorPhotoSignal(plan, evaluate, evaluateAper
170
247
  let integratedIrradiance = 0;
171
248
  const support = tap.apertureRays ?? [undefined];
172
249
  for (const ray of support) {
173
- const baseRequest = structuredClone(tap.query.value.request);
174
- const request = freezeOwnedData(ray === undefined ? baseRequest : {
175
- ...baseRequest, sampleId: baseRequest.sampleId + "-a" + ray.pupilSampleIndex,
176
- target: { kind: "environment-direction", outgoingDirectionUnitVector: {
177
- x: -ray.directionUnitVector.x, y: -ray.directionUnitVector.y, z: -ray.directionUnitVector.z
178
- } }
179
- });
180
- const apertureRay = ray === undefined ? undefined : freezeOwnedData(structuredClone(ray));
250
+ // Planned requests are deep-frozen once at plan time (freezePlannedRequest); no per-evaluation clone.
251
+ const query = ray === undefined ? undefined : apertureRadianceQuery(tap.request, ray);
252
+ const request = query === undefined ? tap.request : query.request, apertureRay = query?.apertureRay;
181
253
  const result = parseSceneRadianceEvaluationResult(apertureRay === undefined ? evaluate(request) : evaluateAperture(request, apertureRay));
182
254
  const bindings = validateSceneRadianceEvaluationBindings({ ...plan.sceneBindings, request, result });
183
255
  const optics = calculateSceneRadianceToSensorIrradiance({ ...owned.optics, sceneRadianceRequest: request,
184
- sceneRadianceResult: result, imagePointMm: tap.query.value.sourcePointImagePlaneMm, fieldThroughput: tap.fieldThroughput });
185
- evaluations.push({ query: tap.query, result, bindings, optics,
186
- ...(apertureRay === undefined ? {} : { apertureRay, apertureRequest: request }) });
256
+ sceneRadianceResult: result, imagePointMm: tap.sourcePointImagePlaneMm, fieldThroughput: tap.fieldThroughput });
257
+ if (retention === "full")
258
+ evaluations.push({ query: tap.query, result, bindings, optics,
259
+ ...(apertureRay === undefined ? {} : { apertureRay, apertureRequest: request }) });
187
260
  integratedIrradiance += optics.value.sensorPlaneSpectralIrradianceWattsPerSquareMeterNanometer * (ray?.weight ?? 1);
188
261
  }
262
+ if (tap.distortionAreaFactor !== undefined) {
263
+ // Distortion squeezes or stretches the ideal image. Flux is conserved, so irradiance scales by 1/det, once.
264
+ integratedIrradiance *= tap.distortionAreaFactor;
265
+ }
189
266
  return { kernelSampleX: tap.kernelSampleX, kernelSampleY: tap.kernelSampleY, sourcePointNativeSensorMm: tap.point,
190
267
  timeSecondsFromOpeningReference: instant.time, spectralIrradianceWattsPerSquareMeterPerNanometer: integratedIrradiance };
191
268
  }) }));
@@ -205,15 +282,19 @@ export function executeEnvironmentSensorPhotoSignal(plan, evaluate, evaluateAper
205
282
  fieldThroughputLimitation: owned.fieldThroughput.limitation,
206
283
  psfOmission: owned.psf.kind === "not-applied" ? { evidence: parseEvidenceList(owned.psf.evidence, "psfOmission.evidence"), limitation: owned.psf.limitation } : null,
207
284
  psfRedistributionApplied: owned.psf.kind === "sampled-local", pupilIntegrationApplied: owned.pupil !== undefined, pupilIntegrationProfile: owned.pupil ?? null, photo, instants
208
- }, "environment-sensor-photo-signal", "0.3.0", [
285
+ }, "environment-sensor-photo-signal", owned.lensFieldMapping === undefined ? "0.3.0" : "0.4.0", [
209
286
  "Supplied synchronous provider code was invoked at each generated environment query; physical transport and visibility are not verified.",
210
287
  "Ideal focus-aware rotation/projection, explicit evidence-bound field throughput and optional destination-local sampled PSF are bounded approximations.",
211
288
  "Optional ideal pupil rays use normalized radiance averaging; source intersections remain provider-owned and convergence is unverified.",
212
- "PSF pupil throughput is not applied; child uncertainty, finite-support and quadrature convergence are not combined or established."
289
+ "PSF pupil throughput is not applied; child uncertainty, finite-support and quadrature convergence are not combined or established.",
290
+ ...(owned.lensFieldMapping === undefined ? [] : [
291
+ "Lens field mapping: rays use the declared projection after inverse distortion; irradiance is multiplied once by the distortion area factor 1/det(d distorted/d ideal); field throughput and sampled PSFs remain evaluated at the physical sensor point."
292
+ ])
213
293
  ]);
214
294
  }
215
- /** Generate, evaluate and integrate one site's actual local midpoint environment support. */
295
+ /** Plans, queries the provider and integrates the photo signal for one site, at the site's own midpoint sample positions. */
216
296
  export function calculateEnvironmentSensorPhotoSignal(input) {
297
+ requireInputKeys(input, "calculateEnvironmentSensorPhotoSignal", ["temporalIntegrationId", "sensor", "sceneBindings", "optics", "motion", "temporalSampleCount", "pupil", "lensFieldMapping", "fieldThroughput", "psf", "evaluateRadiance", "evaluateApertureRadiance"]);
217
298
  const { evaluateRadiance, evaluateApertureRadiance, ...data } = input;
218
299
  return executeEnvironmentSensorPhotoSignal(planEnvironmentSensorPhotoSignal(data), evaluateRadiance, evaluateApertureRadiance);
219
300
  }
@@ -1 +1 @@
1
- {"version":3,"file":"environment-photo-signal.js","sourceRoot":"","sources":["../../src/sensor/environment-photo-signal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environment-photo-signal.js","sourceRoot":"","sources":["../../src/sensor/environment-photo-signal.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Photo signal for one sensor site from a scene-radiance provider (the \"environment\"): asks the\n * provider for radiance along each sampled direction, then applies optics and the sensor response.\n *\n * Work is split into a plan and an execution step. Planning checks spatial, spectral and temporal\n * coverage and builds an internal plan before any provider code runs. Each query gives an explicit\n * scene direction, a wavelength (air or vacuum) and a time in seconds from the shutter's opening\n * reference. Optical throughput, an optional local PSF (point-spread function) and the EQE (external\n * quantum efficiency) response then give the expected photo signal. Calling the provider does not\n * verify its light transport, visibility or calibration.\n * @see docs/ENVIRONMENT_RAW_CAPTURE.md for equations, coordinate/unit conventions, blockers and\n * support limits.\n */\n\nimport { approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { freezeOwnedData } from \"../core/owned-data.js\";\nimport { requirePublicOpaqueId, requireInputKeys } from \"../core/record-validation.js\";\nimport { parseEvidenceList, type EvidenceProvenance } from \"../core/evidence-provenance.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport { parseSceneIlluminationProfile } from \"../schema/illumination.js\";\nimport { parseSceneIlluminationTemporalProfile } from \"../schema/illumination-temporal.js\";\nimport { parseSceneMaterialResponseProfile, parseSceneRadianceProviderProfile, parseSceneRadianceEvaluationResult,\n validateSceneRadianceEvaluationBindings, type SceneRadianceEvaluationRequest,\n type SceneRadianceEvaluationResult } from \"../schema/scene-radiance.js\";\nimport { calculateMappedSensorEnvironmentRadianceQuery, calculateSensorEnvironmentRadianceQuery, prepareEnvironmentLensFieldMapping,\n type CalculateSensorEnvironmentRadianceQueryInput, type EnvironmentLensFieldMapping } from \"../optics/sensor-environment-query.js\";\nimport { calculateSceneRadianceToSensorIrradiance, type CalculateSceneRadianceToSensorIrradianceInput } from \"../optics/scene-to-sensor-irradiance.js\";\nimport { calculateSensorPsfIrradianceQuadrature, type CalculateSensorPsfIrradianceQuadratureInput } from \"../optics/sensor-psf-quadrature.js\";\nimport { calculateIlluminationVignetting, type IlluminationVignettingProfile } from \"../optics/illumination-vignetting.js\";\nimport { calculateSensorApertureRays, type IdealCircularPupil, type SensorApertureRay } from \"../optics/sensor-aperture-rays.js\";\nimport { sensorPsfSourcePoint } from \"../optics/sensor-psf-support.js\";\nimport { markEngineOwnedLensSampledPsfProfile, resolveLensSampledPsf } from \"../optics/lens-psf-profile.js\";\nimport { calculateSensorSpatialSamplingQuadrature } from \"./spatial-sampling-quadrature.js\";\nimport { calculateSensorSpectralQuadrature } from \"./spectral-quadrature.js\";\nimport { resolveNativeEffectiveRasterColorSamplingBinding } from \"./capture-color-sampling-binding.js\";\nimport { calculateCaptureExposureWindows } from \"./exposure-window.js\";\nimport { createSensorEqeTemporalPhotoSignal } from \"./temporal-photo-signal.js\";\nimport type { CalculateSensorEqeTemporalExposureInput } from \"./eqe-temporal-exposure.js\";\nimport type { CalculateSceneToSensorIrradianceQuadratureInput } from \"../optics/scene-to-sensor-quadrature.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\n/** Caller-supplied synchronous radiance function, run locally. Calling it does not prove its light transport is physical. */\nexport type EnvironmentRadianceEvaluator = (request: Readonly<SceneRadianceEvaluationRequest>) => SceneRadianceEvaluationResult;\nexport type EnvironmentApertureRadianceEvaluator = (request: Readonly<SceneRadianceEvaluationRequest>, apertureRay: Readonly<SensorApertureRay>) => SceneRadianceEvaluationResult;\nexport interface CalculateEnvironmentSensorPhotoSignalInput {\n temporalIntegrationId: string;\n sensor: Omit<CalculateSensorEqeTemporalExposureInput, \"samples\">;\n sceneBindings: CalculateSceneToSensorIrradianceQuadratureInput[\"sceneBindings\"];\n optics: Omit<CalculateSceneRadianceToSensorIrradianceInput,\n \"sceneRadianceRequest\" | \"sceneRadianceResult\" | \"imagePointMm\" | \"fieldThroughput\">;\n motion: Pick<CalculateSensorEnvironmentRadianceQueryInput,\n \"angularVelocityRadPerSec\" | \"timeReference\" | \"environmentDirectionConvention\">;\n temporalSampleCount: number;\n /** Optional ideal circular pupil, for geometric depth of field (DOF) and visibility. Cannot be combined with a sampled PSF. */\n pupil?: IdealCircularPupil;\n /**\n * Optional lens field mapping (added in 2.0): a projection model and radial or Brown-Conrady\n * distortion for the scene-ray query. Its distortion area factor is applied to irradiance exactly\n * once. If omitted, the ideal rectilinear, distortion-free path is unchanged. Cannot be combined\n * with `pupil`.\n */\n lensFieldMapping?: EnvironmentLensFieldMapping;\n /** Explicit attenuation across the field (such as vignetting), applied once before the PSF spreads the light. */\n fieldThroughput: { kind: \"unity\"; evidence: readonly EvidenceProvenance[]; limitation: string } | {\n kind: \"radial-illumination-vignetting\"; profile: IlluminationVignettingProfile;\n evidence: readonly EvidenceProvenance[]; limitation: string;\n };\n psf: { kind: \"not-applied\"; evidence: readonly EvidenceProvenance[]; limitation: string } | {\n kind: \"sampled-local\";\n configuration: Pick<CalculateSensorPsfIrradianceQuadratureInput, \"psf\" | \"psfWavelengthBasis\" | \"spatialModel\">;\n };\n evaluateRadiance: EnvironmentRadianceEvaluator;\n /** Required with `pupil`: rays start at different points on the aperture, so a direction-only function cannot be used. */\n evaluateApertureRadiance?: EnvironmentApertureRadianceEvaluator;\n}\nexport interface EnvironmentSensorPhotoSignal {\n sourceTargetProjectionCalculated: true;\n providerCallbackExecuted: true;\n providerTransportVerified: false;\n sceneVisibilityCalculated: false;\n productionPlanActivated: false;\n providerEvaluationCount: number;\n sourcePlane: \"sensor-package-incident\";\n fieldThroughputEvidence: readonly EvidenceProvenance[];\n fieldThroughputLimitation: string;\n psfOmission: { evidence: readonly EvidenceProvenance[]; limitation: string } | null;\n psfRedistributionApplied: boolean;\n pupilIntegrationApplied: boolean;\n pupilIntegrationProfile: IdealCircularPupil | null;\n photo: ReturnType<typeof createSensorEqeTemporalPhotoSignal>;\n instants: readonly {\n temporalSampleIndex: number;\n timeSecondsFromOpeningReference: number;\n psf: ReturnType<typeof calculateSensorPsfIrradianceQuadrature> | null;\n evaluations: readonly {\n query: ReturnType<typeof calculateSensorEnvironmentRadianceQuery>;\n result: SceneRadianceEvaluationResult;\n bindings: ReturnType<typeof validateSceneRadianceEvaluationBindings>;\n optics: ReturnType<typeof calculateSceneRadianceToSensorIrradiance>;\n apertureRay?: SensorApertureRay;\n apertureRequest?: SceneRadianceEvaluationRequest;\n }[];\n }[];\n}\n\n/** Internal plan, shared with the full-frame composer, so all work is bounded before any callback runs. */\ninterface EnvironmentPhotoPlan {\n owned: Omit<CalculateEnvironmentSensorPhotoSignalInput, \"evaluateRadiance\" | \"evaluateApertureRadiance\">;\n sceneBindings: CalculateSceneToSensorIrradianceQuadratureInput[\"sceneBindings\"];\n fieldThroughputEvidence: readonly EvidenceProvenance[];\n spatialQuadrature: ReturnType<typeof calculateSensorSpatialSamplingQuadrature>[\"value\"];\n spectralQuadrature: ReturnType<typeof calculateSensorSpectralQuadrature>[\"value\"];\n count: number;\n focus: CalculateSensorEnvironmentRadianceQueryInput[\"focus\"];\n instants: { temporalSampleIndex: number; time: number; groups: {\n node: CalculateSensorPsfIrradianceQuadratureInput[\"samples\"][number][\"node\"];\n taps: { kernelSampleX: number; kernelSampleY: number; point: { x: number; y: number };\n /** Deep-frozen provider request of the planned query (the same object as query.value.request). */\n request: SceneRadianceEvaluationRequest;\n /** The planned query's image-plane source point (the same object as query.value.sourcePointImagePlaneMm). */\n sourcePointImagePlaneMm: { x: number; y: number };\n /** The complete query result. Kept only by \"full\" plans, whose per-evaluation records include it. */\n query?: ReturnType<typeof calculateSensorEnvironmentRadianceQuery>;\n apertureRays?: readonly SensorApertureRay[];\n /** 1 / det(d distorted / d ideal), the change in area from distortion. Present only with a lens field mapping. */\n distortionAreaFactor?: number;\n fieldThroughput: CalculateSceneRadianceToSensorIrradianceInput[\"fieldThroughput\"] }[];\n }[] }[];\n}\n/**\n * Builds an internal execution plan covering all optical, spatial, spectral and temporal sampling,\n * without calling any provider code.\n *\n * Coverage is checked completely before any supplied radiance function runs. Each query gives an\n * explicit scene direction, a wavelength (air or vacuum) and seconds from the opening reference.\n * @param input - The photo-signal input without its radiance functions; see\n * `CalculateEnvironmentSensorPhotoSignalInput`.\n * @param ownership - Internal. \"copy\" (default) makes a structured clone of the input. \"engine-owned\"\n * uses the input as the plan's own data without cloning again. Only engine callers that already hold a\n * private structured clone, never shown to supplied code and never changed afterwards, may pass it.\n * @param retention - Internal. \"full\" (default) keeps every planned query result for \"full\" execution\n * records. \"photo-only\" keeps only each query's frozen request and image-plane point, which is all that\n * photo-only execution reads. Every query is still computed and validated at plan time, so limit checks\n * and errors are unchanged.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function planEnvironmentSensorPhotoSignal(input: Omit<CalculateEnvironmentSensorPhotoSignalInput, \"evaluateRadiance\" | \"evaluateApertureRadiance\">,\n ownership: \"copy\" | \"engine-owned\" = \"copy\", retention: \"full\" | \"photo-only\" = \"full\"): EnvironmentPhotoPlan {\n const owned = ownership === \"engine-owned\" ? input : structuredClone(input);\n requirePublicOpaqueId(owned.temporalIntegrationId, \"Environment integration requires a public identity.\");\n if (!Number.isSafeInteger(owned.temporalSampleCount) || owned.temporalSampleCount < 1 || owned.temporalSampleCount > 256 ||\n owned.sensor.responseApplication.sourcePlane.value !== \"sensor-package-incident\" ||\n (owned.fieldThroughput?.kind !== \"unity\" && owned.fieldThroughput?.kind !== \"radial-illumination-vignetting\") || typeof owned.fieldThroughput.limitation !== \"string\" || !owned.fieldThroughput.limitation.trim()) {\n throw new InvalidScientificInputError(\"Environment exposure requires package-incident response, 1..256 midpoints and explicit supported field throughput.\");\n }\n if (owned.fieldThroughput.kind === \"radial-illumination-vignetting\" &&\n (typeof owned.fieldThroughput.profile !== \"object\" || owned.fieldThroughput.profile === null ||\n typeof owned.fieldThroughput.profile.coefficients !== \"object\" || owned.fieldThroughput.profile.coefficients === null)) {\n throw new InvalidScientificInputError(\"Radial throughput requires a declared profile and coefficients.\");\n }\n const fieldThroughputEvidence = parseEvidenceList(owned.fieldThroughput.evidence, \"environmentFieldThroughput.evidence\");\n const sceneBindings = { providerProfile: parseSceneRadianceProviderProfile(owned.sceneBindings.providerProfile),\n illuminationProfile: parseSceneIlluminationProfile(owned.sceneBindings.illuminationProfile),\n materialResponseProfile: parseSceneMaterialResponseProfile(owned.sceneBindings.materialResponseProfile),\n ...(owned.sceneBindings.illuminationTemporalProfile === undefined ? {} : {\n illuminationTemporalProfile: parseSceneIlluminationTemporalProfile(owned.sceneBindings.illuminationTemporalProfile) }) };\n if (sceneBindings.providerProfile.fidelity.spectral !== \"wavelength-resolved\") throw new InvalidScientificInputError(\"Environment exposure requires wavelength-resolved provider fidelity.\");\n const sensor = owned.sensor;\n const nativeRaster = sensor.localExposure.exposureWindowInput.nativeRaster;\n const binding = resolveNativeEffectiveRasterColorSamplingBinding({ nativeRaster, colorSamplingProfile: sensor.colorSamplingProfile,\n bindingProfile: sensor.localExposure.bindingProfile });\n if (binding.relationshipMeaning !== \"one-native-effective-sample-to-one-color-site\") throw new InvalidScientificInputError(\"Environment exposure requires explicit one-to-one native/color timing.\");\n const spatialQuadrature = calculateSensorSpatialSamplingQuadrature({ ...sensor.spatialSampling, nativeRaster,\n colorSamplingProfile: sensor.colorSamplingProfile, colorSamplingBindingProfile: sensor.localExposure.bindingProfile }).value;\n const spectralQuadrature = calculateSensorSpectralQuadrature({ ...sensor.spectralSampling,\n colorSamplingProfile: sensor.colorSamplingProfile, spectralResponseProfile: sensor.spectralResponseProfile }).value;\n if (spectralQuadrature.wavelengthBasis === \"unspecified\") throw new InvalidScientificInputError(\"Environment spectral basis must be explicit.\");\n const wavelengthBasis = spectralQuadrature.wavelengthBasis;\n const site = sensor.spatialSampling.site;\n const window = calculateCaptureExposureWindows({ ...sensor.localExposure.exposureWindowInput,\n samplePointsNative: [{ x: site.x+.5, y: site.y+.5 }] }).value.samples[0]!;\n const focus = owned.optics.focus.kind === \"infinity-focus\" ? { kind: \"infinity\" as const } :\n owned.optics.focus.kind === \"ideal-symmetric-thin-lens\" ? { kind: \"finite\" as const, distanceM: owned.optics.focus.objectDistanceM } :\n owned.optics.focus.focus.kind === \"infinity\" ? { kind: \"infinity\" as const } : { kind: \"finite\" as const, distanceM: owned.optics.focus.focus.objectDistanceM };\n if (owned.psf.kind === \"not-applied\") {\n parseEvidenceList(owned.psf.evidence, \"environmentPsfOmission.evidence\");\n if (typeof owned.psf.limitation !== \"string\" || !owned.psf.limitation.trim()) throw new InvalidScientificInputError(\"PSF omission needs an explicit limitation.\");\n } else if (owned.psf.kind !== \"sampled-local\") throw new InvalidConfigurationError(\"Unknown environment PSF selection.\");\n if (owned.psf.kind === \"sampled-local\") {\n const p = owned.psf.configuration.psf;\n // The profile belongs only to this plan, so its parse can be cached across nodes and time instants.\n markEngineOwnedLensSampledPsfProfile(p.profile);\n if (p.focalLengthMm !== owned.optics.focalLengthMm || p.apertureFNumber !== owned.optics.nominalFNumber ||\n p.focus.kind !== focus.kind || (p.focus.kind === \"finite\" && focus.kind === \"finite\" && p.focus.distanceM !== focus.distanceM)) {\n throw new InvalidScientificInputError(\"PSF and optical focal/aperture/focus state must match exactly.\");\n }\n }\n if (owned.pupil !== undefined && owned.psf.kind !== \"not-applied\") throw new InvalidScientificInputError(\"Ideal pupil integration cannot mix with a sampled PSF; geometric defocus would be ambiguous.\");\n const lensMapping = owned.lensFieldMapping === undefined ? undefined : prepareEnvironmentLensFieldMapping(owned.lensFieldMapping);\n if (lensMapping !== undefined && owned.pupil !== undefined) {\n throw new InvalidScientificInputError(\"Ideal pupil rays use the rectilinear distortion-free projection and cannot combine with a lens field mapping.\");\n }\n const pupilCount = owned.pupil === undefined ? 1 : calculateSensorApertureRays({sourcePointNativeSensorMm:{x:0,y:0},\n focalLengthMm:owned.optics.focalLengthMm,nominalFNumber:owned.optics.nominalFNumber,focus,pupil:owned.pupil,\n angularVelocityRadPerSec:owned.motion.angularVelocityRadPerSec,timeSecondsFromOpeningReference:window.startOffsetSecondsFromOpeningReference}).value.rays.length;\n let count = 0;\n const nodes = spectralQuadrature.nodes.flatMap(spectral => spatialQuadrature.nodes.map(spatial => {\n const node = { spatialNode: { antiAliasingComponentIndex: spatial.antiAliasingComponentIndex,\n apertureSampleXIndex: spatial.apertureSampleXIndex, apertureSampleYIndex: spatial.apertureSampleYIndex },\n spectralSampleIndex: spectral.spectralSampleIndex, wavelengthNanometers: spectral.wavelengthNanometers };\n const destination = spatial.preAntiAliasingSourcePointMm;\n const resolved = owned.psf.kind === \"sampled-local\" ? resolveLensSampledPsf({ ...owned.psf.configuration.psf,\n wavelengthNm: spectral.wavelengthNanometers, fieldPointMm: { x: destination.x, y: -destination.y } }) : null;\n const kernel = resolved?.value.kernel;\n const taps = kernel ? kernel.widthSamples*kernel.heightSamples : 1;\n count += taps*owned.temporalSampleCount*pupilCount;\n if (count > 100000) throw new InvalidScientificInputError(\"Environment exposure exceeds the 100000-provider-evaluation budget.\");\n const points = Array.from({ length: taps }, (_, i) => ({ kernelSampleX: kernel ? i%kernel.widthSamples : 0,\n kernelSampleY: kernel ? Math.floor(i/kernel.widthSamples) : 0,\n point: kernel ? sensorPsfSourcePoint(destination, kernel, i%kernel.widthSamples, Math.floor(i/kernel.widthSamples)) : { ...destination } }));\n return { node, points: points.map(p => ({ ...p, fieldThroughput: owned.fieldThroughput.kind === \"unity\"\n ? { kind: \"unity\" as const }\n : { kind: \"illumination-vignetting-result\" as const, result: calculateIlluminationVignetting({\n imagePointMm: { x: p.point.x, y: -p.point.y }, profile: owned.fieldThroughput.profile }).value } })) };\n }));\n const measure = window.localExposureDurationSeconds/owned.temporalSampleCount;\n let previous = -Infinity;\n const instants = Array.from({ length: owned.temporalSampleCount }, (_, temporalSampleIndex) => {\n const time = window.startOffsetSecondsFromOpeningReference+(temporalSampleIndex+.5)*measure;\n if (!(time > window.startOffsetSecondsFromOpeningReference && time > previous && time < window.endOffsetSecondsFromOpeningReference)) throw new InvalidScientificInputError(\"Local midpoints must be representable and strictly ordered.\");\n previous = time;\n const groups = nodes.map((n, ni) => ({ node: n.node, taps: n.points.map((p, pi) => {\n const apertureRays = owned.pupil === undefined ? undefined : calculateSensorApertureRays({sourcePointNativeSensorMm:p.point,\n focalLengthMm:owned.optics.focalLengthMm,nominalFNumber:owned.optics.nominalFNumber,focus,pupil:owned.pupil,\n angularVelocityRadPerSec:owned.motion.angularVelocityRadPerSec,timeSecondsFromOpeningReference:time}).value.rays;\n const queryInput: CalculateSensorEnvironmentRadianceQueryInput = { ...owned.motion, sourcePointNativeSensorMm: p.point,\n focalLengthMm: owned.optics.focalLengthMm, focus, timeSecondsFromOpeningReference: time,\n request: { schemaVersion: \"0.1.0\", sampleId: `${owned.temporalIntegrationId}-t${temporalSampleIndex}-n${ni}-p${pi}`,\n providerProfileId: sceneBindings.providerProfile.profileId, sceneId: sceneBindings.providerProfile.sceneId,\n illuminationProfileId: sceneBindings.illuminationProfile.profileId, materialResponseProfileId: sceneBindings.materialResponseProfile.profileId,\n wavelengthNanometers: n.node.wavelengthNanometers, wavelengthBasis } };\n const query = freezePlannedRequest(lensMapping === undefined ? calculateSensorEnvironmentRadianceQuery(queryInput)\n : calculateMappedSensorEnvironmentRadianceQuery(queryInput, lensMapping));\n const areaFactor = query.value.lensFieldMapping?.distortionAreaFactor;\n // Photo-only plans drop the query result (projection, diagnostics) once it is validated (a 2.0 memory saving).\n return { ...p, ...(apertureRays === undefined ? {} : { apertureRays }),\n ...(areaFactor === undefined ? {} : { distortionAreaFactor: areaFactor }), request: query.value.request,\n sourcePointImagePlaneMm: query.value.sourcePointImagePlaneMm, ...(retention === \"full\" ? { query } : {}) };\n }) }));\n // Validate PSF evidence/basis/support before supplied code is invoked.\n if (owned.psf.kind === \"sampled-local\") calculateSensorPsfIrradianceQuadrature({ ...owned.psf.configuration,\n spatialQuadrature, spectralQuadrature, timeSecondsFromOpeningReference: time,\n inputMeaning: \"pre-psf-pre-sensor-stack-pre-aa-spectral-irradiance\", samples: groups.map(g => ({ node: g.node,\n sourceSamples: g.taps.map(t => ({ kernelSampleX: t.kernelSampleX, kernelSampleY: t.kernelSampleY,\n sourcePointNativeSensorMm: t.point, timeSecondsFromOpeningReference: time, spectralIrradianceWattsPerSquareMeterPerNanometer: 0 })) })) });\n return { temporalSampleIndex, time, groups };\n });\n return { owned, sceneBindings, fieldThroughputEvidence, spatialQuadrature, spectralQuadrature, instants, count, focus };\n}\n\n/** Aperture queries already built for a batched provider, keyed by the planned ray; each is used once. */\nconst PREBUILT_APERTURE_QUERIES = new WeakMap<object, { base: object; request: SceneRadianceEvaluationRequest; apertureRay: SensorApertureRay }>();\n\n/**\n * Internal: the frozen provider request and frozen private ray copy of one ideal-pupil query (sample ID suffix \"-a\"\n * and the pupil index, reversed ray direction). If prebuildApertureRadianceQuery already built this query for a batch,\n * the same objects are returned once, so the batch and the executor share them; otherwise new ones are built.\n */\nexport function apertureRadianceQuery(base: SceneRadianceEvaluationRequest, ray: SensorApertureRay):\n { request: SceneRadianceEvaluationRequest; apertureRay: SensorApertureRay } {\n const prebuilt = PREBUILT_APERTURE_QUERIES.get(ray);\n if (prebuilt !== undefined && prebuilt.base === base) {\n PREBUILT_APERTURE_QUERIES.delete(ray);\n return { request: prebuilt.request, apertureRay: prebuilt.apertureRay };\n }\n return { request: freezeOwnedData({ ...base, sampleId: base.sampleId+\"-a\"+ray.pupilSampleIndex,\n target: { kind: \"environment-direction\" as const, outgoingDirectionUnitVector: {\n x: -ray.directionUnitVector.x, y: -ray.directionUnitVector.y, z: -ray.directionUnitVector.z } } }),\n apertureRay: freezeOwnedData(copyRay(ray)) };\n}\n/**\n * A private copy of an engine-computed ray: plain records of numbers, copied key by key in the same order, so it\n * equals what structuredClone returns for this data (a 2.0 performance change: structuredClone dominated pupil runs).\n */\nfunction copyRay(ray: SensorApertureRay): SensorApertureRay {\n const copy = (value: unknown): unknown => {\n if (typeof value !== \"object\" || value === null) return value;\n if (Array.isArray(value)) return value.map(copy);\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value)) out[key] = copy((value as Record<string, unknown>)[key]);\n return out;\n };\n return copy(ray) as SensorApertureRay;\n}\n/** Internal: builds a pupil query for a batched provider and keeps it for the executor's apertureRadianceQuery call. */\nexport function prebuildApertureRadianceQuery(base: SceneRadianceEvaluationRequest, ray: SensorApertureRay):\n { request: SceneRadianceEvaluationRequest; apertureRay: SensorApertureRay } {\n PREBUILT_APERTURE_QUERIES.delete(ray);\n const query = apertureRadianceQuery(base, ray);\n PREBUILT_APERTURE_QUERIES.set(ray, { base, ...query });\n return query;\n}\n\n/** Deep-freezes a planned provider request once, so execution can hand the same immutable request to supplied code. */\nfunction freezePlannedRequest<T extends { value: { request: object } }>(query: T): T {\n freezeOwnedData(query.value.request);\n return query;\n}\n\n/**\n * Internal: runs a completed, bounded plan. On failure nothing partial is returned.\n * With retention \"full\" (default), every per-evaluation record is kept in value.instants[].evaluations.\n * With \"photo-only\", those lists are empty, for engine callers that read only value.photo. Photo values\n * are identical either way.\n */\nexport function executeEnvironmentSensorPhotoSignal(plan: ReturnType<typeof planEnvironmentSensorPhotoSignal>, evaluate: EnvironmentRadianceEvaluator, evaluateAperture?: EnvironmentApertureRadianceEvaluator,\n retention: \"full\" | \"photo-only\" = \"full\"): CalculationResult<EnvironmentSensorPhotoSignal> {\n if (typeof evaluate !== \"function\") throw new InvalidScientificInputError(\"Environment radiance evaluator must be synchronous callable code.\");\n const { owned } = plan;\n if (owned.pupil !== undefined && typeof evaluateAperture !== \"function\") throw new InvalidScientificInputError(\"Pupil integration requires an origin-aware aperture evaluator.\");\n if (retention === \"full\" && plan.instants.some(instant => instant.groups.some(group => group.taps.some(tap => tap.query === undefined)))) {\n throw new InvalidScientificInputError(\"Full environment execution records require a full plan.\");\n }\n const irradiance = [];\n const instants: EnvironmentSensorPhotoSignal[\"instants\"][number][] = [];\n for (const instant of plan.instants) {\n const evaluations: EnvironmentSensorPhotoSignal[\"instants\"][number][\"evaluations\"][number][] = [];\n const samples = instant.groups.map(group => ({ node: group.node, sourceSamples: group.taps.map(tap => {\n let integratedIrradiance = 0;\n const support: readonly (SensorApertureRay | undefined)[] = tap.apertureRays ?? [undefined];\n for (const ray of support) {\n // Planned requests are deep-frozen once at plan time (freezePlannedRequest); no per-evaluation clone.\n const query = ray === undefined ? undefined : apertureRadianceQuery(tap.request, ray);\n const request = query === undefined ? tap.request : query.request, apertureRay = query?.apertureRay;\n const result = parseSceneRadianceEvaluationResult(apertureRay === undefined ? evaluate(request) : evaluateAperture!(request,apertureRay));\n const bindings = validateSceneRadianceEvaluationBindings({ ...plan.sceneBindings, request, result });\n const optics = calculateSceneRadianceToSensorIrradiance({ ...owned.optics, sceneRadianceRequest: request,\n sceneRadianceResult: result, imagePointMm: tap.sourcePointImagePlaneMm, fieldThroughput: tap.fieldThroughput });\n if (retention === \"full\") evaluations.push({ query: tap.query!, result, bindings, optics,\n ...(apertureRay === undefined ? {} : {apertureRay,apertureRequest:request}) });\n integratedIrradiance += optics.value.sensorPlaneSpectralIrradianceWattsPerSquareMeterNanometer*(ray?.weight ?? 1);\n }\n if (tap.distortionAreaFactor !== undefined) {\n // Distortion squeezes or stretches the ideal image. Flux is conserved, so irradiance scales by 1/det, once.\n integratedIrradiance *= tap.distortionAreaFactor;\n }\n return { kernelSampleX: tap.kernelSampleX, kernelSampleY: tap.kernelSampleY, sourcePointNativeSensorMm: tap.point,\n timeSecondsFromOpeningReference: instant.time, spectralIrradianceWattsPerSquareMeterPerNanometer: integratedIrradiance };\n }) }));\n const psf = owned.psf.kind === \"sampled-local\" ? calculateSensorPsfIrradianceQuadrature({ ...owned.psf.configuration,\n spatialQuadrature: plan.spatialQuadrature, spectralQuadrature: plan.spectralQuadrature,\n timeSecondsFromOpeningReference: instant.time, inputMeaning: \"pre-psf-pre-sensor-stack-pre-aa-spectral-irradiance\", samples }) : null;\n irradiance.push({ temporalSampleIndex: instant.temporalSampleIndex, timeSecondsFromOpeningReference: instant.time,\n irradianceSamples: psf ? psf.value.irradianceSamples : samples.map(s => ({ node: s.node,\n spectralIrradianceWattsPerSquareMeterPerNanometer: s.sourceSamples[0]!.spectralIrradianceWattsPerSquareMeterPerNanometer })) });\n instants.push({ temporalSampleIndex: instant.temporalSampleIndex, timeSecondsFromOpeningReference: instant.time, psf, evaluations });\n }\n const photo = createSensorEqeTemporalPhotoSignal({ temporalIntegrationId: owned.temporalIntegrationId,\n exposure: { ...owned.sensor, samples: irradiance } });\n return approximationResult({ sourceTargetProjectionCalculated: true, providerCallbackExecuted: true,\n providerTransportVerified: false, sceneVisibilityCalculated: false, productionPlanActivated: false,\n providerEvaluationCount: plan.count, sourcePlane: \"sensor-package-incident\", fieldThroughputEvidence: plan.fieldThroughputEvidence,\n fieldThroughputLimitation: owned.fieldThroughput.limitation,\n psfOmission: owned.psf.kind === \"not-applied\" ? { evidence: parseEvidenceList(owned.psf.evidence, \"psfOmission.evidence\"), limitation: owned.psf.limitation } : null,\n psfRedistributionApplied: owned.psf.kind === \"sampled-local\", pupilIntegrationApplied: owned.pupil !== undefined, pupilIntegrationProfile: owned.pupil ?? null, photo, instants\n }, \"environment-sensor-photo-signal\", owned.lensFieldMapping === undefined ? \"0.3.0\" : \"0.4.0\", [\n \"Supplied synchronous provider code was invoked at each generated environment query; physical transport and visibility are not verified.\",\n \"Ideal focus-aware rotation/projection, explicit evidence-bound field throughput and optional destination-local sampled PSF are bounded approximations.\",\n \"Optional ideal pupil rays use normalized radiance averaging; source intersections remain provider-owned and convergence is unverified.\",\n \"PSF pupil throughput is not applied; child uncertainty, finite-support and quadrature convergence are not combined or established.\",\n ...(owned.lensFieldMapping === undefined ? [] : [\n \"Lens field mapping: rays use the declared projection after inverse distortion; irradiance is multiplied once by the distortion area factor 1/det(d distorted/d ideal); field throughput and sampled PSFs remain evaluated at the physical sensor point.\"\n ])\n ]);\n}\n\n/** Plans, queries the provider and integrates the photo signal for one site, at the site's own midpoint sample positions. */\nexport function calculateEnvironmentSensorPhotoSignal(input: CalculateEnvironmentSensorPhotoSignalInput): CalculationResult<EnvironmentSensorPhotoSignal> {\n requireInputKeys(input, \"calculateEnvironmentSensorPhotoSignal\", [\"temporalIntegrationId\", \"sensor\", \"sceneBindings\", \"optics\", \"motion\", \"temporalSampleCount\", \"pupil\", \"lensFieldMapping\", \"fieldThroughput\", \"psf\", \"evaluateRadiance\", \"evaluateApertureRadiance\"]);\n const { evaluateRadiance, evaluateApertureRadiance, ...data } = input;\n return executeEnvironmentSensorPhotoSignal(planEnvironmentSensorPhotoSignal(data), evaluateRadiance, evaluateApertureRadiance);\n}\n"]}
@@ -1,9 +1,10 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Converts pre-response geometric-aperture spectral radiant power into incident-photon rate and
4
- * expected generated-electron rate. This function applies response per wavelength node. It never
5
- * applies one broadband-average QE to total radiant power. Temporal exposure integration remains
6
- * downstream, so all outputs are rates (per second), not photon/electron counts.
2
+ * EQE electron rate: converts the light power reaching a sensor site into a photon rate and an
3
+ * expected electron rate, using the sensor's EQE (external quantum efficiency, the fraction of
4
+ * incident photons that produce a collected electron).
5
+ *
6
+ * The response is applied at each wavelength node. One broadband-average QE is never applied to the
7
+ * total power. Outputs are rates per second; integrating over the exposure time happens later.
7
8
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
8
9
  * limits.
9
10
  */
@@ -57,7 +58,7 @@ export interface SensorEqeElectronRate {
57
58
  responseProfileId: string;
58
59
  responseApplicationProfileId: string;
59
60
  operatingRangeProfileId: string;
60
- /** Engine-produced results populate the exact source color site. */
61
+ /** The exact source colour site. Results produced by the engine fill this in. */
61
62
  site?: {
62
63
  x: number;
63
64
  y: number;
@@ -94,14 +95,14 @@ export interface SensorEqeElectronRate {
94
95
  quadratureConvergenceErrorEstimated: false;
95
96
  }
96
97
  /**
97
- * Converts pre-response geometric-aperture spectral radiant power into
98
- * incident-photon rate and expected generated-electron rate.
98
+ * Converts the spectral radiant power collected by the site's geometric aperture
99
+ * (before the sensor response) into an incident photon rate and an expected
100
+ * generated electron rate.
99
101
  *
100
- * This function applies response per wavelength node. It never applies one
101
- * broadband-average QE to total radiant power.
102
+ * The response is applied at each wavelength node. One broadband-average QE is
103
+ * never applied to the total power.
102
104
  *
103
- * Temporal exposure integration remains downstream, so all outputs are rates
104
- * (per second), not photon/electron counts.
105
+ * Integration over exposure time happens later, so all outputs are rates per
106
+ * second, not photon or electron counts.
105
107
  */
106
108
  export declare function calculateSensorEqeElectronRate(input: CalculateSensorEqeElectronRateInput): CalculationResult<SensorEqeElectronRate>;
107
- //# sourceMappingURL=eqe-electron-rate.d.ts.map
@@ -1,18 +1,22 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Converts pre-response geometric-aperture spectral radiant power into incident-photon rate and
5
- * expected generated-electron rate. This function applies response per wavelength node. It never
6
- * applies one broadband-average QE to total radiant power. Temporal exposure integration remains
7
- * downstream, so all outputs are rates (per second), not photon/electron counts.
3
+ * EQE electron rate: converts the light power reaching a sensor site into a photon rate and an
4
+ * expected electron rate, using the sensor's EQE (external quantum efficiency, the fraction of
5
+ * incident photons that produce a collected electron).
6
+ *
7
+ * The response is applied at each wavelength node. One broadband-average QE is never applied to the
8
+ * total power. Outputs are rates per second; integrating over the exposure time happens later.
8
9
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
9
10
  * limits.
10
11
  */
11
12
  import { approximationResult } from "../core/calculation-result.js";
13
+ import { stringifyCanonicalJson } from "../core/canonical-json.js";
12
14
  import { InvalidScientificInputError } from "../core/validation.js";
13
15
  import { calculatePhotonEnergyFromWavelength } from "./photon-energy.js";
14
16
  import { parseSensorColorSamplingProfile } from "./color-sampling.js";
15
- import { createSensorSpectralResponseChannelBinding, parseSensorSpectralResponseProfile, resolveParsedSensorSpectralResponseAtWavelength } from "./spectral-response.js";
17
+ import { createSensorSpectralResponseChannelBinding, requireCurrentSensorSpectralResponseChannelBinding, parseSensorSpectralResponseProfile, resolveParsedSensorSpectralResponseAtWavelength } from "./spectral-response.js";
18
+ import { requireInputObject, requireInputKeys } from "../core/record-validation.js";
19
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
16
20
  const REDUCTION_TOLERANCE = 1e-10;
17
21
  function addCompensated(state, value) {
18
22
  const adjusted = value - state.correction;
@@ -53,8 +57,18 @@ function approximatelyEqual(actual, expected) {
53
57
  return (Math.abs(actual - expected) <=
54
58
  REDUCTION_TOLERANCE * scale);
55
59
  }
60
+ /**
61
+ * Identity string for parsed plain data that ignores key order, so records with
62
+ * the same content compare equal whatever order their properties were added in.
63
+ */
56
64
  function canonicalJson(value) {
57
- return JSON.stringify(value);
65
+ if (value === undefined)
66
+ return "undefined";
67
+ return stringifyCanonicalJson(value, {
68
+ undefinedObjectProperties: "omit",
69
+ nonFiniteNumberMessage: "EQE electron-rate identity data must contain finite numbers.",
70
+ unsupportedValueMessage: "EQE electron-rate identity data must be plain JSON data."
71
+ });
58
72
  }
59
73
  function requireEquivalent(actual, expected, message) {
60
74
  if (canonicalJson(actual) !==
@@ -63,6 +77,7 @@ function requireEquivalent(actual, expected, message) {
63
77
  }
64
78
  }
65
79
  function validateAuthorizationChain(reduction, compatibility, operatingRange) {
80
+ requireInputObject(reduction, "reduction input");
66
81
  if (reduction.outputMeaning !==
67
82
  "pre-response-spatio-spectral-radiometric-reduction" ||
68
83
  reduction
@@ -269,7 +284,7 @@ function parseAirContext(reduction, nodes, context) {
269
284
  context.samples.forEach((entry, arrayIndex) => {
270
285
  if (typeof entry !== "object" ||
271
286
  entry === null) {
272
- throw new InvalidScientificInputError("airPhotonEnergyContext.samples[" +
287
+ throw new InvalidConfigurationError("airPhotonEnergyContext.samples[" +
273
288
  arrayIndex +
274
289
  "] must be an object.");
275
290
  }
@@ -316,6 +331,9 @@ function validateResponseBinding(resolved, reduction) {
316
331
  function validateExactResponseDataBinding(responseProfile, reduction) {
317
332
  const response = responseProfile.channels.find((entry) => entry.channelId ===
318
333
  reduction.channelId);
334
+ if (reduction.responseChannelBinding !== undefined) {
335
+ requireCurrentSensorSpectralResponseChannelBinding(reduction.responseChannelBinding);
336
+ }
319
337
  if (response === undefined ||
320
338
  reduction.responseChannelBinding ===
321
339
  undefined ||
@@ -332,16 +350,18 @@ function requireEqeResponse(response) {
332
350
  return response;
333
351
  }
334
352
  /**
335
- * Converts pre-response geometric-aperture spectral radiant power into
336
- * incident-photon rate and expected generated-electron rate.
353
+ * Converts the spectral radiant power collected by the site's geometric aperture
354
+ * (before the sensor response) into an incident photon rate and an expected
355
+ * generated electron rate.
337
356
  *
338
- * This function applies response per wavelength node. It never applies one
339
- * broadband-average QE to total radiant power.
357
+ * The response is applied at each wavelength node. One broadband-average QE is
358
+ * never applied to the total power.
340
359
  *
341
- * Temporal exposure integration remains downstream, so all outputs are rates
342
- * (per second), not photon/electron counts.
360
+ * Integration over exposure time happens later, so all outputs are rates per
361
+ * second, not photon or electron counts.
343
362
  */
344
363
  export function calculateSensorEqeElectronRate(input) {
364
+ requireInputKeys(input, "calculateSensorEqeElectronRate", ["reduction", "compatibility", "operatingRange", "colorSamplingProfile", "spectralResponseProfile", "airPhotonEnergyContext"]);
345
365
  validateAuthorizationChain(input.reduction, input.compatibility, input.operatingRange);
346
366
  if (input.reduction
347
367
  .sourceResponseKind ===