@photivra/engine 1.5.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1078) hide show
  1. package/CHANGELOG.md +393 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +116 -9
  56. package/dist/capture/native-raw-development.js +221 -62
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +65 -12
  62. package/dist/capture/native-raw.js +81 -19
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/host-yield.d.ts +7 -0
  236. package/dist/facade/host-yield.js +23 -0
  237. package/dist/facade/host-yield.js.map +1 -0
  238. package/dist/facade/scene-radiance.d.ts +117 -0
  239. package/dist/facade/scene-radiance.js +205 -0
  240. package/dist/facade/scene-radiance.js.map +1 -0
  241. package/dist/facade/simulate-capture.d.ts +284 -0
  242. package/dist/facade/simulate-capture.js +1026 -0
  243. package/dist/facade/simulate-capture.js.map +1 -0
  244. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  245. package/dist/gpu/chart-radiance-gpu.js +176 -0
  246. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  247. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  248. package/dist/gpu/image-kernel-accelerator.js +720 -0
  249. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  250. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  251. package/dist/gpu/image-kernel-execution.js +84 -0
  252. package/dist/gpu/image-kernel-execution.js.map +1 -0
  253. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  254. package/dist/gpu/sensor-stage-gpu.js +317 -0
  255. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  256. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  257. package/dist/gpu/temporal-sum-gpu.js +150 -0
  258. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  259. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  260. package/dist/gpu/webgpu-runtime.js +215 -0
  261. package/dist/gpu/webgpu-runtime.js.map +1 -0
  262. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  263. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  264. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  265. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  266. package/dist/gpu/wgsl-kernels.js +365 -0
  267. package/dist/gpu/wgsl-kernels.js.map +1 -0
  268. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  269. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  270. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  271. package/dist/index.d.ts +89 -25
  272. package/dist/index.js +59 -15
  273. package/dist/index.js.map +1 -1
  274. package/dist/motion/camera-rotation.d.ts +92 -40
  275. package/dist/motion/camera-rotation.js +84 -47
  276. package/dist/motion/camera-rotation.js.map +1 -1
  277. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  278. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  279. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  280. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  281. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  282. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  283. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  284. package/dist/motion/capture-rotation-trajectory.js +36 -26
  285. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  286. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  287. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  288. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  289. package/dist/motion/extended-object-projection.d.ts +19 -16
  290. package/dist/motion/extended-object-projection.js +38 -18
  291. package/dist/motion/extended-object-projection.js.map +1 -1
  292. package/dist/motion/projected-motion.d.ts +18 -17
  293. package/dist/motion/projected-motion.js +25 -17
  294. package/dist/motion/projected-motion.js.map +1 -1
  295. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  296. package/dist/motion/temporal-exposure-sum.js +141 -0
  297. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  298. package/dist/motion/video-sequence.d.ts +111 -0
  299. package/dist/motion/video-sequence.js +179 -0
  300. package/dist/motion/video-sequence.js.map +1 -0
  301. package/dist/optics/aperture.d.ts +14 -15
  302. package/dist/optics/aperture.js +13 -11
  303. package/dist/optics/aperture.js.map +1 -1
  304. package/dist/optics/atmospheric-haze.d.ts +83 -0
  305. package/dist/optics/atmospheric-haze.js +113 -0
  306. package/dist/optics/atmospheric-haze.js.map +1 -0
  307. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  308. package/dist/optics/brown-conrady-distortion.js +291 -0
  309. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  310. package/dist/optics/circle-of-confusion.d.ts +10 -10
  311. package/dist/optics/circle-of-confusion.js +15 -11
  312. package/dist/optics/circle-of-confusion.js.map +1 -1
  313. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  314. package/dist/optics/complex-pupil-psf.js +190 -98
  315. package/dist/optics/complex-pupil-psf.js.map +1 -1
  316. package/dist/optics/depth-of-field.d.ts +25 -15
  317. package/dist/optics/depth-of-field.js +67 -27
  318. package/dist/optics/depth-of-field.js.map +1 -1
  319. package/dist/optics/diffraction.d.ts +14 -13
  320. package/dist/optics/diffraction.js +14 -10
  321. package/dist/optics/diffraction.js.map +1 -1
  322. package/dist/optics/focus-breathing.d.ts +88 -27
  323. package/dist/optics/focus-breathing.js +114 -23
  324. package/dist/optics/focus-breathing.js.map +1 -1
  325. package/dist/optics/focus-state.d.ts +18 -18
  326. package/dist/optics/focus-state.js +21 -15
  327. package/dist/optics/focus-state.js.map +1 -1
  328. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  329. package/dist/optics/front-of-lens-filter.js +259 -88
  330. package/dist/optics/front-of-lens-filter.js.map +1 -1
  331. package/dist/optics/illumination-vignetting.d.ts +16 -17
  332. package/dist/optics/illumination-vignetting.js +40 -17
  333. package/dist/optics/illumination-vignetting.js.map +1 -1
  334. package/dist/optics/irradiance-convolution.d.ts +59 -0
  335. package/dist/optics/irradiance-convolution.js +138 -0
  336. package/dist/optics/irradiance-convolution.js.map +1 -0
  337. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  338. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  339. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  340. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  341. package/dist/optics/lens-psf-kernels.js +175 -0
  342. package/dist/optics/lens-psf-kernels.js.map +1 -0
  343. package/dist/optics/lens-psf-profile.d.ts +78 -46
  344. package/dist/optics/lens-psf-profile.js +335 -124
  345. package/dist/optics/lens-psf-profile.js.map +1 -1
  346. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  347. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  348. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  349. package/dist/optics/polygon-diffraction.d.ts +80 -23
  350. package/dist/optics/polygon-diffraction.js +130 -25
  351. package/dist/optics/polygon-diffraction.js.map +1 -1
  352. package/dist/optics/profile-contract.d.ts +5 -6
  353. package/dist/optics/profile-contract.js +14 -11
  354. package/dist/optics/profile-contract.js.map +1 -1
  355. package/dist/optics/psf-foundation.d.ts +23 -23
  356. package/dist/optics/psf-foundation.js +24 -21
  357. package/dist/optics/psf-foundation.js.map +1 -1
  358. package/dist/optics/pupil-vignetting.d.ts +118 -0
  359. package/dist/optics/pupil-vignetting.js +264 -0
  360. package/dist/optics/pupil-vignetting.js.map +1 -0
  361. package/dist/optics/radial-distortion.d.ts +34 -33
  362. package/dist/optics/radial-distortion.js +37 -30
  363. package/dist/optics/radial-distortion.js.map +1 -1
  364. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  365. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  366. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  367. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  368. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  369. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  370. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  371. package/dist/optics/sensor-aperture-rays.js +32 -14
  372. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  373. package/dist/optics/sensor-environment-query.d.ts +81 -16
  374. package/dist/optics/sensor-environment-query.js +145 -12
  375. package/dist/optics/sensor-environment-query.js.map +1 -1
  376. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  377. package/dist/optics/sensor-psf-quadrature.js +18 -11
  378. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  379. package/dist/optics/sensor-psf-support.d.ts +8 -6
  380. package/dist/optics/sensor-psf-support.js +8 -5
  381. package/dist/optics/sensor-psf-support.js.map +1 -1
  382. package/dist/optics/stray-light.d.ts +22 -19
  383. package/dist/optics/stray-light.js +18 -12
  384. package/dist/optics/stray-light.js.map +1 -1
  385. package/dist/optics/thin-lens.d.ts +10 -9
  386. package/dist/optics/thin-lens.js +12 -8
  387. package/dist/optics/thin-lens.js.map +1 -1
  388. package/dist/optics/zernike-wavefront.d.ts +154 -0
  389. package/dist/optics/zernike-wavefront.js +352 -0
  390. package/dist/optics/zernike-wavefront.js.map +1 -0
  391. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  392. package/dist/output/capture-corrected-sdr.js +16 -8
  393. package/dist/output/capture-corrected-sdr.js.map +1 -1
  394. package/dist/output/capture-geometry.d.ts +34 -36
  395. package/dist/output/capture-geometry.js +52 -32
  396. package/dist/output/capture-geometry.js.map +1 -1
  397. package/dist/output/capture-sdr.d.ts +7 -6
  398. package/dist/output/capture-sdr.js +11 -8
  399. package/dist/output/capture-sdr.js.map +1 -1
  400. package/dist/output/crop.d.ts +22 -6
  401. package/dist/output/crop.js +40 -6
  402. package/dist/output/crop.js.map +1 -1
  403. package/dist/output/geometric-transforms.d.ts +60 -23
  404. package/dist/output/geometric-transforms.js +111 -24
  405. package/dist/output/geometric-transforms.js.map +1 -1
  406. package/dist/output/lens-corrections.d.ts +27 -19
  407. package/dist/output/lens-corrections.js +29 -13
  408. package/dist/output/lens-corrections.js.map +1 -1
  409. package/dist/output/native-capture-sdr.d.ts +71 -16
  410. package/dist/output/native-capture-sdr.js +190 -33
  411. package/dist/output/native-capture-sdr.js.map +1 -1
  412. package/dist/output/png-encoder.d.ts +65 -0
  413. package/dist/output/png-encoder.js +461 -0
  414. package/dist/output/png-encoder.js.map +1 -0
  415. package/dist/output/print-contrast-reference.d.ts +10 -9
  416. package/dist/output/print-contrast-reference.js +10 -8
  417. package/dist/output/print-contrast-reference.js.map +1 -1
  418. package/dist/output/print-detail.d.ts +18 -17
  419. package/dist/output/print-detail.js +12 -10
  420. package/dist/output/print-detail.js.map +1 -1
  421. package/dist/output/print-jpeg.d.ts +26 -5
  422. package/dist/output/print-jpeg.js +117 -50
  423. package/dist/output/print-jpeg.js.map +1 -1
  424. package/dist/output/print-plan.d.ts +19 -19
  425. package/dist/output/print-plan.js +11 -10
  426. package/dist/output/print-plan.js.map +1 -1
  427. package/dist/output/print-region-statistics.d.ts +14 -15
  428. package/dist/output/print-region-statistics.js +11 -11
  429. package/dist/output/print-region-statistics.js.map +1 -1
  430. package/dist/output/sdr-rendering.d.ts +48 -10
  431. package/dist/output/sdr-rendering.js +114 -25
  432. package/dist/output/sdr-rendering.js.map +1 -1
  433. package/dist/output/subject-framing-crop.d.ts +6 -10
  434. package/dist/output/subject-framing-crop.js +23 -13
  435. package/dist/output/subject-framing-crop.js.map +1 -1
  436. package/dist/processing/demosaic.d.ts +90 -0
  437. package/dist/processing/demosaic.js +275 -0
  438. package/dist/processing/demosaic.js.map +1 -0
  439. package/dist/processing/denoise.d.ts +68 -0
  440. package/dist/processing/denoise.js +214 -0
  441. package/dist/processing/denoise.js.map +1 -0
  442. package/dist/processing/focus-stacking.d.ts +17 -0
  443. package/dist/processing/focus-stacking.js +80 -0
  444. package/dist/processing/focus-stacking.js.map +1 -0
  445. package/dist/processing/hdr.d.ts +54 -0
  446. package/dist/processing/hdr.js +172 -0
  447. package/dist/processing/hdr.js.map +1 -0
  448. package/dist/processing/image-ops.d.ts +66 -0
  449. package/dist/processing/image-ops.js +192 -0
  450. package/dist/processing/image-ops.js.map +1 -0
  451. package/dist/processing/panorama.d.ts +51 -0
  452. package/dist/processing/panorama.js +305 -0
  453. package/dist/processing/panorama.js.map +1 -0
  454. package/dist/processing/processing-task.d.ts +85 -0
  455. package/dist/processing/processing-task.js +164 -0
  456. package/dist/processing/processing-task.js.map +1 -0
  457. package/dist/processing/tone-mapping.d.ts +69 -0
  458. package/dist/processing/tone-mapping.js +310 -0
  459. package/dist/processing/tone-mapping.js.map +1 -0
  460. package/dist/schema/camera.d.ts +5 -4
  461. package/dist/schema/illumination-spectral.d.ts +13 -19
  462. package/dist/schema/illumination-spectral.js +23 -19
  463. package/dist/schema/illumination-spectral.js.map +1 -1
  464. package/dist/schema/illumination-temporal.d.ts +12 -15
  465. package/dist/schema/illumination-temporal.js +43 -28
  466. package/dist/schema/illumination-temporal.js.map +1 -1
  467. package/dist/schema/illumination.d.ts +5 -4
  468. package/dist/schema/illumination.js +55 -20
  469. package/dist/schema/illumination.js.map +1 -1
  470. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  471. package/dist/schema/scene-radiance-temporal.js +26 -23
  472. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  473. package/dist/schema/scene-radiance.d.ts +17 -17
  474. package/dist/schema/scene-radiance.js +56 -34
  475. package/dist/schema/scene-radiance.js.map +1 -1
  476. package/dist/schema/scene.d.ts +14 -13
  477. package/dist/schema/validation.d.ts +0 -1
  478. package/dist/schema/validation.js +17 -15
  479. package/dist/schema/validation.js.map +1 -1
  480. package/dist/sensor/accumulated-charge.d.ts +45 -64
  481. package/dist/sensor/accumulated-charge.js +41 -47
  482. package/dist/sensor/accumulated-charge.js.map +1 -1
  483. package/dist/sensor/architecture.d.ts +22 -25
  484. package/dist/sensor/architecture.js +17 -16
  485. package/dist/sensor/architecture.js.map +1 -1
  486. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  487. package/dist/sensor/camera-saturation-capacity.js +36 -34
  488. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  489. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  490. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  491. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  492. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  493. package/dist/sensor/capture-mode-timing.js +24 -21
  494. package/dist/sensor/capture-mode-timing.js.map +1 -1
  495. package/dist/sensor/capture-mode.d.ts +28 -30
  496. package/dist/sensor/capture-mode.js +33 -31
  497. package/dist/sensor/capture-mode.js.map +1 -1
  498. package/dist/sensor/color-sampling.d.ts +30 -33
  499. package/dist/sensor/color-sampling.js +32 -37
  500. package/dist/sensor/color-sampling.js.map +1 -1
  501. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  502. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  503. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  504. package/dist/sensor/dark-current.d.ts +53 -49
  505. package/dist/sensor/dark-current.js +87 -46
  506. package/dist/sensor/dark-current.js.map +1 -1
  507. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  508. package/dist/sensor/environment-photo-signal.js +127 -46
  509. package/dist/sensor/environment-photo-signal.js.map +1 -1
  510. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  511. package/dist/sensor/eqe-electron-rate.js +34 -14
  512. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  513. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  514. package/dist/sensor/eqe-local-exposure.js +15 -11
  515. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  516. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  517. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  518. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  519. package/dist/sensor/exposure-window.d.ts +48 -34
  520. package/dist/sensor/exposure-window.js +77 -36
  521. package/dist/sensor/exposure-window.js.map +1 -1
  522. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  523. package/dist/sensor/fixed-pattern-noise.js +166 -0
  524. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  525. package/dist/sensor/iso-gain.d.ts +44 -0
  526. package/dist/sensor/iso-gain.js +119 -0
  527. package/dist/sensor/iso-gain.js.map +1 -0
  528. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  529. package/dist/sensor/iso-signal-chain.js +52 -66
  530. package/dist/sensor/iso-signal-chain.js.map +1 -1
  531. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  532. package/dist/sensor/local-exposure-binding.js +22 -18
  533. package/dist/sensor/local-exposure-binding.js.map +1 -1
  534. package/dist/sensor/optical-stack.d.ts +36 -40
  535. package/dist/sensor/optical-stack.js +34 -37
  536. package/dist/sensor/optical-stack.js.map +1 -1
  537. package/dist/sensor/photon-energy.d.ts +22 -28
  538. package/dist/sensor/photon-energy.js +42 -34
  539. package/dist/sensor/photon-energy.js.map +1 -1
  540. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  541. package/dist/sensor/physical-charge-capacity.js +35 -36
  542. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  543. package/dist/sensor/pixel-pitch.d.ts +2 -3
  544. package/dist/sensor/pixel-pitch.js +4 -2
  545. package/dist/sensor/pixel-pitch.js.map +1 -1
  546. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  547. package/dist/sensor/radiometry-readiness.js +20 -17
  548. package/dist/sensor/radiometry-readiness.js.map +1 -1
  549. package/dist/sensor/raw-readout.d.ts +173 -83
  550. package/dist/sensor/raw-readout.js +425 -160
  551. package/dist/sensor/raw-readout.js.map +1 -1
  552. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  553. package/dist/sensor/raw-reconstruction.js +200 -47
  554. package/dist/sensor/raw-reconstruction.js.map +1 -1
  555. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  556. package/dist/sensor/readout-exposure-linkage.js +125 -27
  557. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  558. package/dist/sensor/readout-timing.d.ts +43 -44
  559. package/dist/sensor/readout-timing.js +38 -30
  560. package/dist/sensor/readout-timing.js.map +1 -1
  561. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  562. package/dist/sensor/response-application-compatibility.js +35 -34
  563. package/dist/sensor/response-application-compatibility.js.map +1 -1
  564. package/dist/sensor/response-operating-range.d.ts +26 -35
  565. package/dist/sensor/response-operating-range.js +40 -39
  566. package/dist/sensor/response-operating-range.js.map +1 -1
  567. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  568. package/dist/sensor/responsivity-photocurrent.js +57 -40
  569. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  570. package/dist/sensor/sampling-aperture.d.ts +21 -25
  571. package/dist/sensor/sampling-aperture.js +29 -28
  572. package/dist/sensor/sampling-aperture.js.map +1 -1
  573. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  574. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  575. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  576. package/dist/sensor/sensor-geometry.d.ts +28 -32
  577. package/dist/sensor/sensor-geometry.js +35 -20
  578. package/dist/sensor/sensor-geometry.js.map +1 -1
  579. package/dist/sensor/signal-noise.d.ts +14 -16
  580. package/dist/sensor/signal-noise.js +15 -13
  581. package/dist/sensor/signal-noise.js.map +1 -1
  582. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  583. package/dist/sensor/spatial-sample-reduction.js +39 -48
  584. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  585. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  586. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  587. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  588. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  589. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  590. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  591. package/dist/sensor/spectral-coverage.d.ts +6 -9
  592. package/dist/sensor/spectral-coverage.js +9 -6
  593. package/dist/sensor/spectral-coverage.js.map +1 -1
  594. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  595. package/dist/sensor/spectral-quadrature.js +38 -48
  596. package/dist/sensor/spectral-quadrature.js.map +1 -1
  597. package/dist/sensor/spectral-response.d.ts +53 -41
  598. package/dist/sensor/spectral-response.js +80 -47
  599. package/dist/sensor/spectral-response.js.map +1 -1
  600. package/dist/sensor/stochastic-seed.d.ts +50 -0
  601. package/dist/sensor/stochastic-seed.js +123 -0
  602. package/dist/sensor/stochastic-seed.js.map +1 -0
  603. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  604. package/dist/sensor/temporal-eqe-sum.js +5 -6
  605. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  606. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  607. package/dist/sensor/temporal-photo-signal.js +11 -10
  608. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  609. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  610. package/dist/sensor/temporal-sample-binding.js +3 -3
  611. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  612. package/dist/simulation/poc-simulation.d.ts +16 -16
  613. package/dist/simulation/poc-simulation.js +20 -15
  614. package/dist/simulation/poc-simulation.js.map +1 -1
  615. package/dist/stabilization/camera-shake.d.ts +42 -18
  616. package/dist/stabilization/camera-shake.js +43 -20
  617. package/dist/stabilization/camera-shake.js.map +1 -1
  618. package/dist/stabilization/system.d.ts +44 -41
  619. package/dist/stabilization/system.js +196 -108
  620. package/dist/stabilization/system.js.map +1 -1
  621. package/docs/AGENT_GUIDE.md +183 -0
  622. package/docs/API_REFERENCE.md +761 -2
  623. package/docs/QUICK_START.md +495 -0
  624. package/docs/USAGE.md +1719 -714
  625. package/docs/api/camera-equivalent-focal-length.md +6 -7
  626. package/docs/api/camera-field-of-view.md +16 -8
  627. package/docs/api/camera-lens-projection.md +246 -0
  628. package/docs/api/camera-projected-object-size.md +6 -5
  629. package/docs/api/capture-capture-export-metadata.md +10 -10
  630. package/docs/api/capture-dng-import.md +134 -0
  631. package/docs/api/capture-environment-raw-producer.md +17 -11
  632. package/docs/api/capture-export-jpeg.md +16 -0
  633. package/docs/api/capture-focus-control.md +25 -47
  634. package/docs/api/capture-linear-encoding.md +21 -12
  635. package/docs/api/capture-lossless-jpeg.md +49 -0
  636. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  637. package/docs/api/capture-native-environment-raw.md +161 -4
  638. package/docs/api/capture-native-raw-development.md +69 -8
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +21 -10
  641. package/docs/api/capture-packed-sensor-raw.md +156 -0
  642. package/docs/api/capture-photographic-export.md +69 -31
  643. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  644. package/docs/api/capture-raw-white-level.md +37 -0
  645. package/docs/api/capture-release-sequence.md +6 -7
  646. package/docs/api/capture-sensor-raw-frame.md +6 -6
  647. package/docs/api/capture-sensor-raw-producer.md +17 -11
  648. package/docs/api/capture-simulated-capture.md +15 -15
  649. package/docs/api/color-camera-color-matrix.md +103 -0
  650. package/docs/api/color-capture-color.md +22 -11
  651. package/docs/api/color-chromatic-adaptation.md +82 -0
  652. package/docs/api/color-color-difference.md +134 -0
  653. package/docs/api/color-color-matching-functions.md +259 -0
  654. package/docs/api/color-colorimetry-math.md +54 -0
  655. package/docs/api/color-gamut-mapping.md +72 -0
  656. package/docs/api/color-illuminants.md +280 -0
  657. package/docs/api/color-rgb-color-spaces.md +151 -0
  658. package/docs/api/color-sensor-color-development.md +27 -0
  659. package/docs/api/color-srgb-icc.md +2 -4
  660. package/docs/api/color-white-balance.md +95 -19
  661. package/docs/api/composition-image-formation-plan.md +124 -95
  662. package/docs/api/composition-plan-consumer.md +7 -7
  663. package/docs/api/core-calculation-result.md +18 -14
  664. package/docs/api/core-configuration-error.md +1 -1
  665. package/docs/api/core-image-formation.md +7 -7
  666. package/docs/api/core-scientific-assurance.md +12 -10
  667. package/docs/api/core-spectral-composition.md +14 -14
  668. package/docs/api/core-spectral.md +6 -6
  669. package/docs/api/core-validation.md +3 -3
  670. package/docs/api/core-version.md +7 -6
  671. package/docs/api/equipment-exposure-capabilities.md +11 -10
  672. package/docs/api/equipment-generic-tier-assets.md +7 -2
  673. package/docs/api/equipment-generic-tier-presets.md +6 -6
  674. package/docs/api/equipment-iso-capabilities.md +18 -18
  675. package/docs/api/equipment-metering-capabilities.md +6 -6
  676. package/docs/api/equipment-release-capabilities.md +4 -4
  677. package/docs/api/exports.json +2213 -8
  678. package/docs/api/exposure-exposure-duration-control.md +9 -9
  679. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  680. package/docs/api/exposure-exposure.md +10 -10
  681. package/docs/api/exposure-flash-ttl.md +182 -0
  682. package/docs/api/exposure-flash.md +183 -28
  683. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  684. package/docs/api/exposure-metering-target.md +9 -8
  685. package/docs/api/exposure-metering-temporal.md +8 -8
  686. package/docs/api/exposure-metering.md +69 -9
  687. package/docs/api/exposure-program-line.md +6 -5
  688. package/docs/api/facade-chart-radiance-batch.md +96 -0
  689. package/docs/api/facade-chart-scenes.md +240 -0
  690. package/docs/api/facade-scene-radiance.md +122 -0
  691. package/docs/api/facade-simulate-capture.md +324 -0
  692. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  693. package/docs/api/gpu-image-kernel-execution.md +152 -0
  694. package/docs/api/motion-camera-rotation.md +43 -26
  695. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  696. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  697. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  698. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  699. package/docs/api/motion-extended-object-projection.md +10 -8
  700. package/docs/api/motion-projected-motion.md +8 -8
  701. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  702. package/docs/api/motion-video-sequence.md +159 -0
  703. package/docs/api/optics-aperture.md +8 -8
  704. package/docs/api/optics-atmospheric-haze.md +104 -0
  705. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  706. package/docs/api/optics-circle-of-confusion.md +5 -4
  707. package/docs/api/optics-complex-pupil-psf.md +57 -16
  708. package/docs/api/optics-depth-of-field.md +12 -6
  709. package/docs/api/optics-diffraction.md +8 -7
  710. package/docs/api/optics-focus-breathing.md +104 -16
  711. package/docs/api/optics-focus-state.md +9 -10
  712. package/docs/api/optics-front-of-lens-filter.md +72 -14
  713. package/docs/api/optics-illumination-vignetting.md +10 -10
  714. package/docs/api/optics-irradiance-convolution.md +95 -0
  715. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  716. package/docs/api/optics-lens-psf-kernels.md +72 -0
  717. package/docs/api/optics-lens-psf-profile.md +48 -26
  718. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  719. package/docs/api/optics-polygon-diffraction.md +78 -13
  720. package/docs/api/optics-profile-contract.md +4 -4
  721. package/docs/api/optics-psf-foundation.md +12 -12
  722. package/docs/api/optics-pupil-vignetting.md +132 -0
  723. package/docs/api/optics-radial-distortion.md +12 -12
  724. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  725. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  726. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  727. package/docs/api/optics-sensor-environment-query.md +52 -9
  728. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  729. package/docs/api/optics-stray-light.md +12 -11
  730. package/docs/api/optics-thin-lens.md +4 -3
  731. package/docs/api/optics-zernike-wavefront.md +229 -0
  732. package/docs/api/output-capture-corrected-sdr.md +10 -7
  733. package/docs/api/output-capture-geometry.md +35 -36
  734. package/docs/api/output-capture-sdr.md +4 -4
  735. package/docs/api/output-crop.md +7 -4
  736. package/docs/api/output-geometric-transforms.md +65 -19
  737. package/docs/api/output-lens-corrections.md +17 -15
  738. package/docs/api/output-native-capture-sdr.md +26 -13
  739. package/docs/api/output-png-encoder.md +105 -0
  740. package/docs/api/output-print-contrast-reference.md +8 -8
  741. package/docs/api/output-print-detail.md +14 -14
  742. package/docs/api/output-print-jpeg.md +22 -5
  743. package/docs/api/output-print-plan.md +18 -18
  744. package/docs/api/output-print-region-statistics.md +14 -14
  745. package/docs/api/output-sdr-rendering.md +52 -10
  746. package/docs/api/output-subject-framing-crop.md +5 -6
  747. package/docs/api/processing-demosaic.md +120 -0
  748. package/docs/api/processing-denoise.md +148 -0
  749. package/docs/api/processing-focus-stacking.md +41 -0
  750. package/docs/api/processing-hdr.md +113 -0
  751. package/docs/api/processing-panorama.md +82 -0
  752. package/docs/api/processing-processing-task.md +107 -0
  753. package/docs/api/processing-tone-mapping.md +142 -0
  754. package/docs/api/schema-camera.md +6 -4
  755. package/docs/api/schema-illumination-spectral.md +10 -11
  756. package/docs/api/schema-illumination-temporal.md +13 -15
  757. package/docs/api/schema-illumination.md +4 -4
  758. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  759. package/docs/api/schema-scene-radiance.md +18 -17
  760. package/docs/api/schema-scene.md +9 -9
  761. package/docs/api/schema-validation.md +1 -1
  762. package/docs/api/sensor-accumulated-charge.md +12 -20
  763. package/docs/api/sensor-architecture.md +15 -16
  764. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  765. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  766. package/docs/api/sensor-capture-mode-timing.md +9 -9
  767. package/docs/api/sensor-capture-mode.md +29 -30
  768. package/docs/api/sensor-color-sampling.md +31 -33
  769. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  770. package/docs/api/sensor-dark-current.md +30 -14
  771. package/docs/api/sensor-environment-photo-signal.md +13 -6
  772. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  773. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  774. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  775. package/docs/api/sensor-exposure-window.md +24 -24
  776. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  777. package/docs/api/sensor-iso-gain.md +63 -0
  778. package/docs/api/sensor-iso-signal-chain.md +13 -22
  779. package/docs/api/sensor-local-exposure-binding.md +12 -13
  780. package/docs/api/sensor-optical-stack.md +37 -40
  781. package/docs/api/sensor-photon-energy.md +10 -11
  782. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  783. package/docs/api/sensor-pixel-pitch.md +1 -1
  784. package/docs/api/sensor-radiometry-readiness.md +9 -9
  785. package/docs/api/sensor-raw-readout.md +118 -52
  786. package/docs/api/sensor-raw-reconstruction.md +97 -20
  787. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  788. package/docs/api/sensor-readout-timing.md +33 -35
  789. package/docs/api/sensor-response-application-compatibility.md +9 -11
  790. package/docs/api/sensor-response-operating-range.md +14 -18
  791. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  792. package/docs/api/sensor-sampling-aperture.md +22 -25
  793. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  794. package/docs/api/sensor-sensor-geometry.md +23 -24
  795. package/docs/api/sensor-signal-noise.md +10 -10
  796. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  797. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  798. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  799. package/docs/api/sensor-spectral-coverage.md +5 -5
  800. package/docs/api/sensor-spectral-quadrature.md +33 -35
  801. package/docs/api/sensor-spectral-response.md +28 -16
  802. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  803. package/docs/api/simulation-poc-simulation.md +17 -16
  804. package/docs/api/stabilization-camera-shake.md +29 -10
  805. package/docs/api/stabilization-system.md +25 -21
  806. package/docs/examples/production-request.json +3821 -2157
  807. package/docs/examples/simulate-capture.mjs +14 -0
  808. package/llms.txt +35 -0
  809. package/package.json +32 -12
  810. package/AGENTS.md +0 -674
  811. package/CONTRIBUTING.md +0 -76
  812. package/DCO +0 -33
  813. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  814. package/dist/camera/field-of-view.d.ts.map +0 -1
  815. package/dist/camera/projected-object-size.d.ts.map +0 -1
  816. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  817. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  818. package/dist/capture/export-jpeg.d.ts.map +0 -1
  819. package/dist/capture/export-tiff.d.ts.map +0 -1
  820. package/dist/capture/focus-control.d.ts.map +0 -1
  821. package/dist/capture/linear-encoding.d.ts.map +0 -1
  822. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  823. package/dist/capture/native-raw-development.d.ts.map +0 -1
  824. package/dist/capture/native-raw.d.ts.map +0 -1
  825. package/dist/capture/photographic-export.d.ts.map +0 -1
  826. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  827. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  828. package/dist/capture/release-sequence.d.ts.map +0 -1
  829. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  830. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  831. package/dist/capture/simulated-capture.d.ts.map +0 -1
  832. package/dist/color/capture-color.d.ts.map +0 -1
  833. package/dist/color/sensor-color-development.d.ts.map +0 -1
  834. package/dist/color/srgb-icc.d.ts.map +0 -1
  835. package/dist/color/srgb-transfer.d.ts.map +0 -1
  836. package/dist/color/white-balance.d.ts.map +0 -1
  837. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  838. package/dist/composition/plan-consumer.d.ts.map +0 -1
  839. package/dist/core/calculation-result.d.ts.map +0 -1
  840. package/dist/core/canonical-json.d.ts.map +0 -1
  841. package/dist/core/configuration-error.d.ts.map +0 -1
  842. package/dist/core/evidence-provenance.d.ts.map +0 -1
  843. package/dist/core/image-formation.d.ts.map +0 -1
  844. package/dist/core/owned-data.d.ts.map +0 -1
  845. package/dist/core/record-validation.d.ts.map +0 -1
  846. package/dist/core/scientific-assurance.d.ts.map +0 -1
  847. package/dist/core/spectral-composition.d.ts.map +0 -1
  848. package/dist/core/spectral.d.ts.map +0 -1
  849. package/dist/core/validation.d.ts.map +0 -1
  850. package/dist/core/version.d.ts.map +0 -1
  851. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  852. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  853. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  854. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  855. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  856. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  857. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  858. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  859. package/dist/exposure/exposure.d.ts.map +0 -1
  860. package/dist/exposure/flash.d.ts.map +0 -1
  861. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  862. package/dist/exposure/metering-target.d.ts.map +0 -1
  863. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  864. package/dist/exposure/metering.d.ts.map +0 -1
  865. package/dist/exposure/program-line.d.ts.map +0 -1
  866. package/dist/index.d.ts.map +0 -1
  867. package/dist/motion/camera-rotation.d.ts.map +0 -1
  868. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  869. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  870. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  871. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  872. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  873. package/dist/motion/projected-motion.d.ts.map +0 -1
  874. package/dist/optics/aperture.d.ts.map +0 -1
  875. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  876. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  877. package/dist/optics/depth-of-field.d.ts.map +0 -1
  878. package/dist/optics/diffraction.d.ts.map +0 -1
  879. package/dist/optics/focus-breathing.d.ts.map +0 -1
  880. package/dist/optics/focus-state.d.ts.map +0 -1
  881. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  882. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  883. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  884. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  885. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  886. package/dist/optics/profile-contract.d.ts.map +0 -1
  887. package/dist/optics/psf-foundation.d.ts.map +0 -1
  888. package/dist/optics/radial-distortion.d.ts.map +0 -1
  889. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  890. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  891. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  892. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  893. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  894. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  895. package/dist/optics/stray-light.d.ts.map +0 -1
  896. package/dist/optics/thin-lens.d.ts.map +0 -1
  897. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  898. package/dist/output/capture-geometry.d.ts.map +0 -1
  899. package/dist/output/capture-sdr.d.ts.map +0 -1
  900. package/dist/output/crop.d.ts.map +0 -1
  901. package/dist/output/geometric-transforms.d.ts.map +0 -1
  902. package/dist/output/lens-corrections.d.ts.map +0 -1
  903. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  904. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  905. package/dist/output/print-detail.d.ts.map +0 -1
  906. package/dist/output/print-jpeg.d.ts.map +0 -1
  907. package/dist/output/print-plan.d.ts.map +0 -1
  908. package/dist/output/print-region-statistics.d.ts.map +0 -1
  909. package/dist/output/sdr-rendering.d.ts.map +0 -1
  910. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  911. package/dist/schema/camera.d.ts.map +0 -1
  912. package/dist/schema/camera.js +0 -3
  913. package/dist/schema/camera.js.map +0 -1
  914. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  915. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  916. package/dist/schema/illumination.d.ts.map +0 -1
  917. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  918. package/dist/schema/scene-radiance.d.ts.map +0 -1
  919. package/dist/schema/scene.d.ts.map +0 -1
  920. package/dist/schema/scene.js +0 -3
  921. package/dist/schema/scene.js.map +0 -1
  922. package/dist/schema/validation.d.ts.map +0 -1
  923. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  924. package/dist/sensor/architecture.d.ts.map +0 -1
  925. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  926. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  927. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  928. package/dist/sensor/capture-mode.d.ts.map +0 -1
  929. package/dist/sensor/color-sampling.d.ts.map +0 -1
  930. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  931. package/dist/sensor/dark-current.d.ts.map +0 -1
  932. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  933. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  934. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  935. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  936. package/dist/sensor/exposure-window.d.ts.map +0 -1
  937. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  938. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  939. package/dist/sensor/optical-stack.d.ts.map +0 -1
  940. package/dist/sensor/photon-energy.d.ts.map +0 -1
  941. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  942. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  943. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  944. package/dist/sensor/raw-readout.d.ts.map +0 -1
  945. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  946. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  947. package/dist/sensor/readout-timing.d.ts.map +0 -1
  948. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  949. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  950. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  951. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  952. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  953. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  954. package/dist/sensor/signal-noise.d.ts.map +0 -1
  955. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  956. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  957. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  958. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  959. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  960. package/dist/sensor/spectral-response.d.ts.map +0 -1
  961. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  962. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  963. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  964. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  965. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  966. package/dist/stabilization/system.d.ts.map +0 -1
  967. package/docs/API_STYLE.md +0 -235
  968. package/docs/ARCHITECTURE.md +0 -356
  969. package/docs/AUTOMATION_COORDINATION.md +0 -190
  970. package/docs/CAPTURE_COLOR.md +0 -25
  971. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  972. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  973. package/docs/CAPTURE_SDR.md +0 -22
  974. package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
  975. package/docs/DEVELOPERS.md +0 -68
  976. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  977. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  978. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  979. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  980. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  981. package/docs/IMAGE_FORMATION.md +0 -247
  982. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  983. package/docs/MOTION_AND_SIGNAL.md +0 -250
  984. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  985. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  986. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  987. package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
  988. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  989. package/docs/PERFORMANCE_BASELINE.md +0 -56
  990. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  991. package/docs/PHYSICS_FOUNDATION.md +0 -426
  992. package/docs/POC_API.md +0 -278
  993. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  994. package/docs/POC_PROJECTION_REUSE.md +0 -124
  995. package/docs/PRINT_195_196_REVIEW.md +0 -93
  996. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  997. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  998. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  999. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  1000. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1001. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1002. package/docs/PRINT_PLANNING.md +0 -75
  1003. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1004. package/docs/PROCESSED_OUTPUT.md +0 -157
  1005. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1006. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1007. package/docs/PROVENANCE.md +0 -115
  1008. package/docs/PSF_FOUNDATION.md +0 -165
  1009. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1010. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1011. package/docs/RELEASE_1_0.md +0 -66
  1012. package/docs/RELEASE_1_0_1.md +0 -61
  1013. package/docs/RELEASE_1_1_0.md +0 -25
  1014. package/docs/RELEASE_1_2_0.md +0 -51
  1015. package/docs/RELEASE_1_3_0.md +0 -15
  1016. package/docs/RELEASE_1_4_0.md +0 -23
  1017. package/docs/RELEASE_1_5_0.md +0 -105
  1018. package/docs/RELEASE_AUDIT.md +0 -39
  1019. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1020. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1021. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1022. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1023. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1024. package/docs/SDR_RENDERING.md +0 -33
  1025. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1026. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1027. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1028. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1029. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1030. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1031. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1032. package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
  1033. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1034. package/docs/SIMULATED_CAPTURE.md +0 -65
  1035. package/docs/STABILIZATION.md +0 -234
  1036. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1037. package/docs/TIER_ACCEPTANCE.md +0 -129
  1038. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1039. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1040. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1041. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1042. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1043. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1044. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1045. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1046. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1047. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1048. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1049. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1050. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1051. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1052. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1053. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1054. package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
  1055. package/docs/validation/documentation-fragments.json +0 -212
  1056. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1057. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1058. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1061. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1062. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1065. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1066. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1067. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1068. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1069. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1070. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1071. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1072. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1073. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1074. package/docs/validation/print-detail-capabilities.json +0 -103
  1075. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1076. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1077. package/docs/validation/release-audit-inventory.json +0 -1306
  1078. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1,16 +1,13 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
5
- * missing required fields and incompatible scientific data fail at this boundary. Dark current is an
6
- * independently declared pre-compensation thermal electron rate. Exact-temperature or sampled linear
7
- * interpolation is supported only within declared applicability; no universal doubling-temperature law
8
- * is inferred. Population means remain approximations and do not model hot-pixel/DCNU structure.
9
- * Evaluate the declared temperature-dependent dark electron rate and integrate over the exact
10
- * photo-signal local exposure event. Dark current is an independently declared pre-compensation
11
- * thermal electron rate. Exact-temperature or sampled linear interpolation is supported only within
12
- * declared applicability; no universal doubling-temperature law is inferred. Population means remain
13
- * approximations and do not model hot-pixel/DCNU structure.
3
+ * Dark current: electrons generated by heat in a sensor site even with no light, and the dark charge
4
+ * they add over one exposure.
5
+ *
6
+ * The dark-current rate (electrons per second, before any compensation) is declared separately as a
7
+ * function of temperature. It is given either at an exact temperature or as samples, interpolated
8
+ * log-linearly (or with the legacy linear rule) only within the declared range. No universal
9
+ * "doubles every N degrees" law is assumed. Rates are population means, an approximation; hot pixels
10
+ * and DCNU (dark-current non-uniformity) are not modelled.
14
11
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
15
12
  * limits.
16
13
  */
@@ -19,12 +16,15 @@ import { InvalidConfigurationError } from "../core/configuration-error.js";
19
16
  import { parseEvidenceList } from "../core/evidence-provenance.js";
20
17
  import { parseSensorEqeTemporalPhotoSignal } from "./temporal-photo-signal.js";
21
18
  import { InvalidScientificInputError } from "../core/validation.js";
22
- function requireRecord(value, path) {
19
+ import { requireInputObject, requireInputKeys, rejectUnknownFields, rejectUnknownVariantFields, UNCERTAINTY_VARIANT_FIELDS } from "../core/record-validation.js";
20
+ function requireRecord(value, path, allowedKeys) {
23
21
  if (typeof value !== "object" ||
24
22
  value === null ||
25
23
  Array.isArray(value)) {
26
24
  throw new InvalidConfigurationError(path + " must be an object.");
27
25
  }
26
+ if (allowedKeys !== null)
27
+ rejectUnknownFields(value, allowedKeys, path);
28
28
  return value;
29
29
  }
30
30
  function requireNonEmptyString(value, path) {
@@ -59,7 +59,8 @@ function requireSiteIndex(value, path) {
59
59
  return value;
60
60
  }
61
61
  function parseUncertainty(value, path) {
62
- const record = requireRecord(value, path);
62
+ const record = requireRecord(value, path, null);
63
+ rejectUnknownVariantFields(record, "kind", UNCERTAINTY_VARIANT_FIELDS, path);
63
64
  if (record.kind === "relative") {
64
65
  const fraction = requireNonNegativeFinite(record.fraction, path + ".fraction");
65
66
  if (typeof record.basis !== "string" ||
@@ -82,9 +83,10 @@ function parseUncertainty(value, path) {
82
83
  throw new InvalidConfigurationError(path + ".kind is invalid.");
83
84
  }
84
85
  function parseSiteApplicability(value) {
85
- const record = requireRecord(value, "sensorDarkCurrent.siteApplicability");
86
+ const record = requireRecord(value, "sensorDarkCurrent.siteApplicability", null);
87
+ rejectUnknownVariantFields(record, "kind", { "exact-site": ["kind", "site"], "uniform-site-mean-approximation": ["kind", "limitation", "evidence"] }, "sensorDarkCurrent.siteApplicability");
86
88
  if (record.kind === "exact-site") {
87
- const site = requireRecord(record.site, "sensorDarkCurrent.siteApplicability.site");
89
+ const site = requireRecord(record.site, "sensorDarkCurrent.siteApplicability.site", ["x", "y"]);
88
90
  return {
89
91
  kind: "exact-site",
90
92
  site: {
@@ -104,7 +106,12 @@ function parseSiteApplicability(value) {
104
106
  throw new InvalidConfigurationError("sensorDarkCurrent.siteApplicability.kind is invalid.");
105
107
  }
106
108
  function parseTemperatureModel(value) {
107
- const record = requireRecord(value, "sensorDarkCurrent.temperatureModel");
109
+ const record = requireRecord(value, "sensorDarkCurrent.temperatureModel", null);
110
+ rejectUnknownVariantFields(record, "kind", {
111
+ "fixed-reference-temperature": ["kind", "referenceTemperatureC", "darkCurrentElectronsPerSecond"],
112
+ "piecewise-linear-temperature-table": ["kind", "interpolation", "outsideRangeBehavior", "samples"],
113
+ "log-linear-temperature-table": ["kind", "interpolation", "outsideRangeBehavior", "samples"]
114
+ }, "sensorDarkCurrent.temperatureModel");
108
115
  if (record.kind ===
109
116
  "fixed-reference-temperature") {
110
117
  return {
@@ -113,13 +120,18 @@ function parseTemperatureModel(value) {
113
120
  darkCurrentElectronsPerSecond: requireNonNegativeFinite(record.darkCurrentElectronsPerSecond, "sensorDarkCurrent.temperatureModel.darkCurrentElectronsPerSecond")
114
121
  };
115
122
  }
123
+ const logLinear = record.kind ===
124
+ "log-linear-temperature-table";
116
125
  if (record.kind !==
117
- "piecewise-linear-temperature-table") {
126
+ "piecewise-linear-temperature-table" &&
127
+ !logLinear) {
118
128
  throw new InvalidConfigurationError("sensorDarkCurrent.temperatureModel.kind is invalid.");
119
129
  }
120
130
  if (record.interpolation !==
121
- "piecewise-linear") {
122
- throw new InvalidConfigurationError('sensorDarkCurrent.temperatureModel.interpolation must be "piecewise-linear".');
131
+ (logLinear ? "log-linear" : "piecewise-linear")) {
132
+ throw new InvalidConfigurationError(logLinear
133
+ ? 'sensorDarkCurrent.temperatureModel.interpolation must be "log-linear".'
134
+ : 'sensorDarkCurrent.temperatureModel.interpolation must be "piecewise-linear".');
123
135
  }
124
136
  if (record.outsideRangeBehavior !==
125
137
  "fail-closed") {
@@ -133,7 +145,7 @@ function parseTemperatureModel(value) {
133
145
  const samples = record.samples.map((sample, index) => {
134
146
  const parsed = requireRecord(sample, "sensorDarkCurrent.temperatureModel.samples[" +
135
147
  index +
136
- "]");
148
+ "]", ["temperatureC", "darkCurrentElectronsPerSecond"]);
137
149
  const temperatureC = requireFinite(parsed.temperatureC, "sensorDarkCurrent.temperatureModel.samples[" +
138
150
  index +
139
151
  "].temperatureC");
@@ -150,28 +162,40 @@ function parseTemperatureModel(value) {
150
162
  "].darkCurrentElectronsPerSecond")
151
163
  };
152
164
  });
153
- return {
154
- kind: "piecewise-linear-temperature-table",
155
- interpolation: "piecewise-linear",
156
- outsideRangeBehavior: "fail-closed",
157
- samples
158
- };
165
+ if (logLinear &&
166
+ samples.some((sample) => sample
167
+ .darkCurrentElectronsPerSecond <=
168
+ 0)) {
169
+ throw new InvalidConfigurationError("sensorDarkCurrent.temperatureModel log-linear samples require strictly positive rates.");
170
+ }
171
+ return logLinear
172
+ ? {
173
+ kind: "log-linear-temperature-table",
174
+ interpolation: "log-linear",
175
+ outsideRangeBehavior: "fail-closed",
176
+ samples
177
+ }
178
+ : {
179
+ kind: "piecewise-linear-temperature-table",
180
+ interpolation: "piecewise-linear",
181
+ outsideRangeBehavior: "fail-closed",
182
+ samples
183
+ };
159
184
  }
160
185
  /**
161
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
162
- * missing required fields and incompatible scientific data fail at this boundary.
186
+ * Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,
187
+ * missing required fields and inconsistent scientific data are rejected.
163
188
  *
164
- * Dark current is an independently declared pre-compensation thermal electron rate. Exact-temperature
165
- * or sampled linear interpolation is supported only within declared applicability; no universal
166
- * doubling-temperature law is inferred. Population means remain approximations and do not model
167
- * hot-pixel/DCNU structure.
168
- * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
169
- * @returns SensorDarkCurrentProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
189
+ * The profile declares the dark-current rate (before compensation) against temperature, at an exact
190
+ * temperature or as samples. Interpolation (log-linear, or the legacy linear rule) is allowed only
191
+ * within the declared range. No universal doubling-temperature law is assumed.
192
+ * @param value - Untrusted data. TypeScript types alone are not validation.
193
+ * @returns The result. Success does not imply calibration.
170
194
  *
171
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
195
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
172
196
  */
173
197
  export function parseSensorDarkCurrentProfile(value) {
174
- const record = requireRecord(value, "sensorDarkCurrent");
198
+ const record = requireRecord(value, "sensorDarkCurrent", ["schemaVersion", "chargeMeaning", "scientificStatus", "darkCurrentCompensationIncluded", "spatialDarkCurrentNonuniformityModeled", "uncertainty", "siteApplicability", "profileId", "colorSamplingProfileId", "channelId", "evidence", "temperatureModel"]);
175
199
  if (record.schemaVersion !== "0.1.0") {
176
200
  throw new InvalidConfigurationError('sensorDarkCurrent.schemaVersion must be "0.1.0".');
177
201
  }
@@ -275,6 +299,20 @@ function resolveDarkCurrentRate(model, operatingTemperatureC) {
275
299
  lower.temperatureC) /
276
300
  (upper.temperatureC -
277
301
  lower.temperatureC);
302
+ if (model.kind ===
303
+ "log-linear-temperature-table") {
304
+ // r = r0^(1-alpha) * r1^alpha, written as r0 * (r1/r0)^alpha.
305
+ return {
306
+ rate: lower
307
+ .darkCurrentElectronsPerSecond *
308
+ (upper
309
+ .darkCurrentElectronsPerSecond /
310
+ lower
311
+ .darkCurrentElectronsPerSecond) **
312
+ alpha,
313
+ interpolationUsed: true
314
+ };
315
+ }
278
316
  const rate = lower
279
317
  .darkCurrentElectronsPerSecond +
280
318
  alpha *
@@ -288,6 +326,7 @@ function resolveDarkCurrentRate(model, operatingTemperatureC) {
288
326
  };
289
327
  }
290
328
  function validateExposure(exposure) {
329
+ requireInputObject(exposure, "exposure input");
291
330
  if (exposure.kind === "eqe-temporal-photo-signal")
292
331
  parseSensorEqeTemporalPhotoSignal(exposure);
293
332
  if ((exposure.kind !== "eqe-expected-counts" && exposure.kind !== "eqe-temporal-photo-signal") ||
@@ -316,19 +355,18 @@ function validateExposure(exposure) {
316
355
  }
317
356
  }
318
357
  /**
319
- * Evaluate the declared temperature-dependent dark electron rate and integrate over the exact
320
- * photo-signal local exposure event.
358
+ * Evaluates the declared dark-current rate at the sensor temperature and integrates it over the exact
359
+ * local exposure of the photo signal.
321
360
  *
322
- * Dark current is an independently declared pre-compensation thermal electron rate. Exact-temperature
323
- * or sampled linear interpolation is supported only within declared applicability; no universal
324
- * doubling-temperature law is inferred. Population means remain approximations and do not model
325
- * hot-pixel/DCNU structure.
326
- * @param input - CalculateSensorDarkCurrentChargeInput<SensorEqePhotoExposure>. See the linked contract for coordinate, unit and profile binding semantics.
327
- * @returns CalculationResult<SensorPhotoDarkCurrentCharge>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
361
+ * The rate is a population mean, an approximation. Hot pixels and DCNU (dark-current non-uniformity)
362
+ * are not modelled. No universal doubling-temperature law is assumed.
363
+ * @param input - The input; see `CalculateSensorDarkCurrentChargeInput` for its fields, units and coordinates.
364
+ * @returns The result. Success does not imply calibration.
328
365
  *
329
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
366
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
330
367
  */
331
368
  export function calculateSensorDarkCurrentCharge(input) {
369
+ requireInputKeys(input, "calculateSensorDarkCurrentCharge", ["exposure", "darkCurrentProfile", "operatingTemperatureC"]);
332
370
  validateExposure(input.exposure);
333
371
  const profile = parseSensorDarkCurrentProfile(input.darkCurrentProfile);
334
372
  if (profile.colorSamplingProfileId !==
@@ -402,7 +440,10 @@ export function calculateSensorDarkCurrentCharge(input) {
402
440
  const assumptions = [
403
441
  "Dark current is modeled as pre-compensation thermally generated electron rate in electrons per second.",
404
442
  "Release 4.0 style temperature handling is data-driven: no universal exponential or doubling-temperature law is inferred.",
405
- "Piecewise-linear interpolation is allowed only inside an explicitly sampled temperature table; extrapolation fails closed.",
443
+ profile.temperatureModel.kind ===
444
+ "log-linear-temperature-table"
445
+ ? "Log-linear (exponential-in-temperature) interpolation between adjacent declared samples is allowed only inside the sampled table; extrapolation fails closed."
446
+ : "Piecewise-linear interpolation is allowed only inside an explicitly sampled temperature table; extrapolation fails closed.",
406
447
  "Dark-current compensation, dark offset, hot-pixel/defect excess, leakage and charge injection remain separate from this thermal dark-current expectation.",
407
448
  "Expected dark-electron count is rate × the exact local exposure duration; no integer sampling or dark-current shot-noise realization is performed.",
408
449
  "This result is dark charge only. Photo-signal and other accumulated charge are not included, so physical full-well assessment remains unauthorized.",
@@ -1 +1 @@
1
- {"version":3,"file":"dark-current.js","sourceRoot":"","sources":["../../src/sensor/dark-current.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dark-current.js","sourceRoot":"","sources":["../../src/sensor/dark-current.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Dark current: electrons generated by heat in a sensor site even with no light, and the dark charge\n * they add over one exposure.\n *\n * The dark-current rate (electrons per second, before any compensation) is declared separately as a\n * function of temperature. It is given either at an exact temperature or as samples, interpolated\n * log-linearly (or with the legacy linear rule) only within the declared range. No universal\n * \"doubles every N degrees\" law is assumed. Rates are population means, an approximation; hot pixels\n * and DCNU (dark-current non-uniformity) are not modelled.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport {\n approximationResult,\n calculatedResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport type { SensorEqeExposureIntegration } from \"./constant-rate-temporal-integration.js\";\nimport { parseSensorEqeTemporalPhotoSignal } from \"./temporal-photo-signal.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport type {\n SensorEqePhotoExposure, SensorEqeTemporalPhotoSignal\n} from \"./temporal-photo-signal.js\";\nimport type {\n SensorSpectralResponseScientificStatus,\n SensorSpectralResponseUncertainty\n} from \"./spectral-response.js\";\nimport { requireInputObject, requireInputKeys, rejectUnknownFields, rejectUnknownVariantFields, UNCERTAINTY_VARIANT_FIELDS } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport type SensorDarkCurrentSiteApplicability =\n | {\n kind: \"exact-site\";\n site: {\n x: number;\n y: number;\n };\n }\n | {\n kind:\n \"uniform-site-mean-approximation\";\n limitation: string;\n evidence:\n readonly EvidenceProvenance[];\n };\n\nexport type SensorDarkCurrentTemperatureModel =\n | {\n kind:\n \"fixed-reference-temperature\";\n referenceTemperatureC: number;\n darkCurrentElectronsPerSecond:\n number;\n }\n | {\n /** Legacy interpolation, linear in rate. Between samples of an exponential curve it gives values that are too high. */\n kind:\n \"piecewise-linear-temperature-table\";\n interpolation: \"piecewise-linear\";\n outsideRangeBehavior:\n \"fail-closed\";\n samples: readonly {\n temperatureC: number;\n darkCurrentElectronsPerSecond:\n number;\n }[];\n }\n | {\n /**\n * Linear interpolation of ln(rate) between neighbouring samples. That makes the rate exponential\n * in temperature within each interval, matching the roughly exponential (Arrhenius, or\n * \"doubling temperature\") behaviour of thermally generated dark current. Rates must be strictly\n * positive. No single doubling temperature is imposed; each interval follows its own two samples.\n */\n kind:\n \"log-linear-temperature-table\";\n interpolation: \"log-linear\";\n outsideRangeBehavior:\n \"fail-closed\";\n samples: readonly {\n temperatureC: number;\n darkCurrentElectronsPerSecond:\n number;\n }[];\n };\n\nexport interface SensorDarkCurrentProfile {\n schemaVersion: \"0.1.0\";\n profileId: string;\n colorSamplingProfileId: string;\n channelId: string;\n scientificStatus:\n SensorSpectralResponseScientificStatus;\n uncertainty:\n SensorSpectralResponseUncertainty;\n evidence: readonly EvidenceProvenance[];\n chargeMeaning:\n \"pre-compensation-thermally-generated-electrons\";\n siteApplicability:\n SensorDarkCurrentSiteApplicability;\n temperatureModel:\n SensorDarkCurrentTemperatureModel;\n darkCurrentCompensationIncluded: false;\n spatialDarkCurrentNonuniformityModeled:\n boolean;\n}\n\nexport interface CalculateSensorDarkCurrentChargeInput<Exposure extends SensorEqePhotoExposure = SensorEqeExposureIntegration> {\n exposure:\n Exposure;\n darkCurrentProfile:\n SensorDarkCurrentProfile;\n operatingTemperatureC: number;\n}\n\nexport interface SensorDarkCurrentCharge {\n darkCurrentProfileId: string;\n colorSamplingProfileId: string;\n channelId: string;\n site: {\n x: number;\n y: number;\n };\n bindingId: string;\n stationarityProfileId: string;\n temporalIntegrationId?: never;\n timeReference:\n \"first-opening-boundary-phase\";\n startOffsetSecondsFromOpeningReference:\n number;\n endOffsetSecondsFromOpeningReference:\n number;\n operatingTemperatureC: number;\n temperatureModel:\n SensorDarkCurrentTemperatureModel[\"kind\"];\n temperatureInterpolationUsed:\n boolean;\n darkCurrentElectronsPerSecond:\n number;\n localExposureDurationSeconds:\n number;\n expectedDarkElectronCount:\n number;\n countMeaning:\n \"expected-thermally-generated-electrons\";\n expectationValueOnly: true;\n integerDarkElectronCountSampled:\n false;\n darkShotNoiseApplied: false;\n darkCurrentCompensationApplied:\n false;\n spatialDarkCurrentNonuniformityModeled:\n boolean;\n photoSignalIncluded: false;\n otherChargeIncluded: false;\n physicalFullWellAssessmentAuthorized:\n false;\n saturationAssessed: false;\n componentEvidence: {\n darkCurrent:\n readonly EvidenceProvenance[];\n siteApproximation:\n readonly EvidenceProvenance[];\n exposure:\n SensorEqeExposureIntegration[\"componentEvidence\"];\n };\n}\n\n/** Dark charge for the exact same time-resolved photo event. It has no stationarity ID. */\nexport type SensorTemporalDarkCurrentCharge = Omit<SensorDarkCurrentCharge, \"stationarityProfileId\" | \"temporalIntegrationId\" | \"componentEvidence\"> & {\n stationarityProfileId?: never;\n temporalIntegrationId: string;\n componentEvidence: Omit<SensorDarkCurrentCharge[\"componentEvidence\"], \"exposure\"> & { exposure: SensorEqeTemporalPhotoSignal[\"componentEvidence\"] };\n};\nexport type SensorPhotoDarkCurrentCharge = SensorDarkCurrentCharge | SensorTemporalDarkCurrentCharge;\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value;\n}\n\nfunction requireFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be finite.\"\n );\n }\n return value;\n}\n\nfunction requireNonNegativeFinite(\n value: unknown,\n path: string\n): number {\n const parsed =\n requireFinite(value, path);\n if (parsed < 0) {\n throw new InvalidConfigurationError(\n path +\n \" must be greater than or equal to zero.\"\n );\n }\n return parsed;\n}\n\nfunction requireSiteIndex(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isSafeInteger(value) ||\n value < 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a non-negative safe integer.\"\n );\n }\n return value;\n}\n\nfunction parseUncertainty(\n value: unknown,\n path: string\n): SensorSpectralResponseUncertainty {\n const record =\n requireRecord(value, path, null);\n rejectUnknownVariantFields(record, \"kind\", UNCERTAINTY_VARIANT_FIELDS, path);\n\n if (record.kind === \"relative\") {\n const fraction =\n requireNonNegativeFinite(\n record.fraction,\n path + \".fraction\"\n );\n if (\n typeof record.basis !== \"string\" ||\n record.basis.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \".basis must be a non-empty string.\"\n );\n }\n return {\n kind: \"relative\",\n fraction,\n basis: record.basis\n };\n }\n\n if (\n record.kind === \"not-quantified\"\n ) {\n return {\n kind: \"not-quantified\",\n limitation:\n requireNonEmptyString(\n record.limitation,\n path + \".limitation\"\n )\n };\n }\n\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n}\n\nfunction parseSiteApplicability(\n value: unknown\n): SensorDarkCurrentSiteApplicability {\n const record = requireRecord(\n value,\n \"sensorDarkCurrent.siteApplicability\", null\n );\n rejectUnknownVariantFields(record, \"kind\", { \"exact-site\": [\"kind\", \"site\"], \"uniform-site-mean-approximation\": [\"kind\", \"limitation\", \"evidence\"] }, \"sensorDarkCurrent.siteApplicability\");\n\n if (record.kind === \"exact-site\") {\n const site = requireRecord(\n record.site,\n \"sensorDarkCurrent.siteApplicability.site\", [\"x\", \"y\"]\n );\n return {\n kind: \"exact-site\",\n site: {\n x: requireSiteIndex(\n site.x,\n \"sensorDarkCurrent.siteApplicability.site.x\"\n ),\n y: requireSiteIndex(\n site.y,\n \"sensorDarkCurrent.siteApplicability.site.y\"\n )\n }\n };\n }\n\n if (\n record.kind ===\n \"uniform-site-mean-approximation\"\n ) {\n return {\n kind:\n \"uniform-site-mean-approximation\",\n limitation:\n requireNonEmptyString(\n record.limitation,\n \"sensorDarkCurrent.siteApplicability.limitation\"\n ),\n evidence: parseEvidenceList(\n record.evidence,\n \"sensorDarkCurrent.siteApplicability.evidence\"\n )\n };\n }\n\n throw new InvalidConfigurationError(\n \"sensorDarkCurrent.siteApplicability.kind is invalid.\"\n );\n}\n\nfunction parseTemperatureModel(\n value: unknown\n): SensorDarkCurrentTemperatureModel {\n const record = requireRecord(\n value,\n \"sensorDarkCurrent.temperatureModel\", null\n );\n rejectUnknownVariantFields(record, \"kind\", {\n \"fixed-reference-temperature\": [\"kind\", \"referenceTemperatureC\", \"darkCurrentElectronsPerSecond\"],\n \"piecewise-linear-temperature-table\": [\"kind\", \"interpolation\", \"outsideRangeBehavior\", \"samples\"],\n \"log-linear-temperature-table\": [\"kind\", \"interpolation\", \"outsideRangeBehavior\", \"samples\"]\n }, \"sensorDarkCurrent.temperatureModel\");\n\n if (\n record.kind ===\n \"fixed-reference-temperature\"\n ) {\n return {\n kind:\n \"fixed-reference-temperature\",\n referenceTemperatureC:\n requireFinite(\n record.referenceTemperatureC,\n \"sensorDarkCurrent.temperatureModel.referenceTemperatureC\"\n ),\n darkCurrentElectronsPerSecond:\n requireNonNegativeFinite(\n record.darkCurrentElectronsPerSecond,\n \"sensorDarkCurrent.temperatureModel.darkCurrentElectronsPerSecond\"\n )\n };\n }\n\n const logLinear =\n record.kind ===\n \"log-linear-temperature-table\";\n if (\n record.kind !==\n \"piecewise-linear-temperature-table\" &&\n !logLinear\n ) {\n throw new InvalidConfigurationError(\n \"sensorDarkCurrent.temperatureModel.kind is invalid.\"\n );\n }\n if (\n record.interpolation !==\n (logLinear ? \"log-linear\" : \"piecewise-linear\")\n ) {\n throw new InvalidConfigurationError(\n logLinear\n ? 'sensorDarkCurrent.temperatureModel.interpolation must be \"log-linear\".'\n : 'sensorDarkCurrent.temperatureModel.interpolation must be \"piecewise-linear\".'\n );\n }\n if (\n record.outsideRangeBehavior !==\n \"fail-closed\"\n ) {\n throw new InvalidConfigurationError(\n 'sensorDarkCurrent.temperatureModel.outsideRangeBehavior must be \"fail-closed\".'\n );\n }\n if (\n !Array.isArray(record.samples) ||\n record.samples.length < 2\n ) {\n throw new InvalidConfigurationError(\n \"sensorDarkCurrent.temperatureModel.samples must contain at least two samples.\"\n );\n }\n\n let previousTemperature =\n Number.NEGATIVE_INFINITY;\n const samples =\n record.samples.map(\n (sample, index) => {\n const parsed = requireRecord(\n sample,\n \"sensorDarkCurrent.temperatureModel.samples[\" +\n index +\n \"]\", [\"temperatureC\", \"darkCurrentElectronsPerSecond\"]\n );\n const temperatureC =\n requireFinite(\n parsed.temperatureC,\n \"sensorDarkCurrent.temperatureModel.samples[\" +\n index +\n \"].temperatureC\"\n );\n if (\n temperatureC <=\n previousTemperature\n ) {\n throw new InvalidConfigurationError(\n \"sensorDarkCurrent.temperatureModel.samples must be strictly increasing in temperature.\"\n );\n }\n previousTemperature =\n temperatureC;\n return {\n temperatureC,\n darkCurrentElectronsPerSecond:\n requireNonNegativeFinite(\n parsed.darkCurrentElectronsPerSecond,\n \"sensorDarkCurrent.temperatureModel.samples[\" +\n index +\n \"].darkCurrentElectronsPerSecond\"\n )\n };\n }\n );\n\n if (\n logLinear &&\n samples.some(\n (sample) =>\n sample\n .darkCurrentElectronsPerSecond <=\n 0\n )\n ) {\n throw new InvalidConfigurationError(\n \"sensorDarkCurrent.temperatureModel log-linear samples require strictly positive rates.\"\n );\n }\n\n return logLinear\n ? {\n kind:\n \"log-linear-temperature-table\",\n interpolation: \"log-linear\",\n outsideRangeBehavior:\n \"fail-closed\",\n samples\n }\n : {\n kind:\n \"piecewise-linear-temperature-table\",\n interpolation: \"piecewise-linear\",\n outsideRangeBehavior:\n \"fail-closed\",\n samples\n };\n}\n\n/**\n * Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,\n * missing required fields and inconsistent scientific data are rejected.\n *\n * The profile declares the dark-current rate (before compensation) against temperature, at an exact\n * temperature or as samples. Interpolation (log-linear, or the legacy linear rule) is allowed only\n * within the declared range. No universal doubling-temperature law is assumed.\n * @param value - Untrusted data. TypeScript types alone are not validation.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function parseSensorDarkCurrentProfile(\n value: unknown\n): SensorDarkCurrentProfile {\n const record = requireRecord(\n value,\n \"sensorDarkCurrent\", [\"schemaVersion\", \"chargeMeaning\", \"scientificStatus\", \"darkCurrentCompensationIncluded\", \"spatialDarkCurrentNonuniformityModeled\", \"uncertainty\", \"siteApplicability\", \"profileId\", \"colorSamplingProfileId\", \"channelId\", \"evidence\", \"temperatureModel\"]\n );\n\n if (\n record.schemaVersion !== \"0.1.0\"\n ) {\n throw new InvalidConfigurationError(\n 'sensorDarkCurrent.schemaVersion must be \"0.1.0\".'\n );\n }\n if (\n record.chargeMeaning !==\n \"pre-compensation-thermally-generated-electrons\"\n ) {\n throw new InvalidConfigurationError(\n \"sensorDarkCurrent.chargeMeaning is invalid.\"\n );\n }\n if (\n record.scientificStatus !==\n \"calibrated\" &&\n record.scientificStatus !==\n \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n \"sensorDarkCurrent.scientificStatus is invalid.\"\n );\n }\n if (\n record.darkCurrentCompensationIncluded !==\n false\n ) {\n throw new InvalidConfigurationError(\n \"sensorDarkCurrent.darkCurrentCompensationIncluded must be false.\"\n );\n }\n if (\n typeof record\n .spatialDarkCurrentNonuniformityModeled !==\n \"boolean\"\n ) {\n throw new InvalidConfigurationError(\n \"sensorDarkCurrent.spatialDarkCurrentNonuniformityModeled must be boolean.\"\n );\n }\n\n const uncertainty =\n parseUncertainty(\n record.uncertainty,\n \"sensorDarkCurrent.uncertainty\"\n );\n if (\n record.scientificStatus ===\n \"calibrated\" &&\n uncertainty.kind ===\n \"not-quantified\"\n ) {\n throw new InvalidConfigurationError(\n \"A calibrated dark-current profile must declare quantified relative uncertainty.\"\n );\n }\n\n const siteApplicability =\n parseSiteApplicability(\n record.siteApplicability\n );\n if (\n siteApplicability.kind ===\n \"uniform-site-mean-approximation\" &&\n record.scientificStatus !==\n \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n \"Uniform site-mean dark current must remain an approximation.\"\n );\n }\n if (\n siteApplicability.kind ===\n \"uniform-site-mean-approximation\" &&\n record\n .spatialDarkCurrentNonuniformityModeled !==\n false\n ) {\n throw new InvalidConfigurationError(\n \"Uniform site-mean dark current cannot claim spatial dark-current nonuniformity is modeled.\"\n );\n }\n\n return {\n schemaVersion: \"0.1.0\",\n profileId:\n requireNonEmptyString(\n record.profileId,\n \"sensorDarkCurrent.profileId\"\n ),\n colorSamplingProfileId:\n requireNonEmptyString(\n record.colorSamplingProfileId,\n \"sensorDarkCurrent.colorSamplingProfileId\"\n ),\n channelId:\n requireNonEmptyString(\n record.channelId,\n \"sensorDarkCurrent.channelId\"\n ),\n scientificStatus:\n record.scientificStatus,\n uncertainty,\n evidence: parseEvidenceList(\n record.evidence,\n \"sensorDarkCurrent.evidence\"\n ),\n chargeMeaning:\n \"pre-compensation-thermally-generated-electrons\",\n siteApplicability,\n temperatureModel:\n parseTemperatureModel(\n record.temperatureModel\n ),\n darkCurrentCompensationIncluded:\n false,\n spatialDarkCurrentNonuniformityModeled:\n record\n .spatialDarkCurrentNonuniformityModeled\n };\n}\n\nfunction sameSite(\n a: { x: number; y: number },\n b: { x: number; y: number }\n): boolean {\n return a.x === b.x && a.y === b.y;\n}\n\nfunction resolveDarkCurrentRate(\n model:\n SensorDarkCurrentTemperatureModel,\n operatingTemperatureC: number\n): {\n rate: number;\n interpolationUsed: boolean;\n} {\n if (\n !Number.isFinite(\n operatingTemperatureC\n )\n ) {\n throw new InvalidScientificInputError(\n \"operatingTemperatureC must be finite.\"\n );\n }\n\n if (\n model.kind ===\n \"fixed-reference-temperature\"\n ) {\n if (\n operatingTemperatureC !==\n model.referenceTemperatureC\n ) {\n throw new InvalidScientificInputError(\n \"Fixed-reference dark current may only be used at its exact reference temperature.\"\n );\n }\n return {\n rate:\n model\n .darkCurrentElectronsPerSecond,\n interpolationUsed: false\n };\n }\n\n const first =\n model.samples[0]!;\n const last =\n model.samples[\n model.samples.length - 1\n ]!;\n if (\n operatingTemperatureC <\n first.temperatureC ||\n operatingTemperatureC >\n last.temperatureC\n ) {\n throw new InvalidScientificInputError(\n \"operatingTemperatureC is outside the measured dark-current temperature range; extrapolation is not permitted.\"\n );\n }\n\n const exact =\n model.samples.find(\n (sample) =>\n sample.temperatureC ===\n operatingTemperatureC\n );\n if (exact !== undefined) {\n return {\n rate:\n exact\n .darkCurrentElectronsPerSecond,\n interpolationUsed: false\n };\n }\n\n const upperIndex =\n model.samples.findIndex(\n (sample) =>\n sample.temperatureC >\n operatingTemperatureC\n );\n const upper =\n model.samples[upperIndex]!;\n const lower =\n model.samples[upperIndex - 1]!;\n const alpha =\n (operatingTemperatureC -\n lower.temperatureC) /\n (upper.temperatureC -\n lower.temperatureC);\n if (\n model.kind ===\n \"log-linear-temperature-table\"\n ) {\n // r = r0^(1-alpha) * r1^alpha, written as r0 * (r1/r0)^alpha.\n return {\n rate:\n lower\n .darkCurrentElectronsPerSecond *\n (upper\n .darkCurrentElectronsPerSecond /\n lower\n .darkCurrentElectronsPerSecond) **\n alpha,\n interpolationUsed: true\n };\n }\n const rate =\n lower\n .darkCurrentElectronsPerSecond +\n alpha *\n (\n upper\n .darkCurrentElectronsPerSecond -\n lower\n .darkCurrentElectronsPerSecond\n );\n\n return {\n rate,\n interpolationUsed: true\n };\n}\n\nfunction validateExposure(\n exposure:\n SensorEqePhotoExposure\n): void {\n requireInputObject(exposure, \"exposure input\");\n if (exposure.kind === \"eqe-temporal-photo-signal\") parseSensorEqeTemporalPhotoSignal(exposure);\n if (\n (exposure.kind !== \"eqe-expected-counts\" && exposure.kind !== \"eqe-temporal-photo-signal\") ||\n exposure.temporalIntegrationApplied !==\n true ||\n exposure.exposureDurationApplied !==\n true ||\n exposure.accumulatedSignalCompleteness !==\n \"photo-signal-only\" ||\n exposure.darkChargeIncluded !== false ||\n exposure.otherChargeIncluded !== false ||\n exposure\n .physicalFullWellAssessmentAuthorized !==\n false\n ) {\n throw new InvalidScientificInputError(\n \"Dark-current composition requires an unmodified photo-signal-only EQE exposure integration.\"\n );\n }\n\n if (\n typeof exposure\n .localExposureDurationSeconds !==\n \"number\" ||\n !Number.isFinite(\n exposure\n .localExposureDurationSeconds\n ) ||\n exposure\n .localExposureDurationSeconds <=\n 0\n ) {\n throw new InvalidScientificInputError(\n \"EQE exposure local duration must be finite and positive.\"\n );\n }\n}\n\n/**\n * Evaluates the declared dark-current rate at the sensor temperature and integrates it over the exact\n * local exposure of the photo signal.\n *\n * The rate is a population mean, an approximation. Hot pixels and DCNU (dark-current non-uniformity)\n * are not modelled. No universal doubling-temperature law is assumed.\n * @param input - Dark-current input whose exposure is a per-exposure photo signal (SensorEqeExposureIntegration); see `CalculateSensorDarkCurrentChargeInput`.\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 calculateSensorDarkCurrentCharge(\n input: Omit<CalculateSensorDarkCurrentChargeInput, \"exposure\"> & { exposure: SensorEqeExposureIntegration }\n): CalculationResult<SensorDarkCurrentCharge>;\n/**\n * Evaluates the declared dark-current rate at the sensor temperature and integrates it over the exact\n * local exposure of the photo signal.\n *\n * The rate is a population mean, an approximation. Hot pixels and DCNU (dark-current non-uniformity)\n * are not modelled. No universal doubling-temperature law is assumed.\n * @param input - Dark-current input whose exposure is a time-resolved photo signal (SensorEqeTemporalPhotoSignal); see `CalculateSensorDarkCurrentChargeInput`.\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 calculateSensorDarkCurrentCharge(\n input: Omit<CalculateSensorDarkCurrentChargeInput, \"exposure\"> & { exposure: SensorEqeTemporalPhotoSignal }\n): CalculationResult<SensorTemporalDarkCurrentCharge>;\n/**\n * Evaluates the declared dark-current rate at the sensor temperature and integrates it over the exact\n * local exposure of the photo signal.\n *\n * The rate is a population mean, an approximation. Hot pixels and DCNU (dark-current non-uniformity)\n * are not modelled. No universal doubling-temperature law is assumed.\n * @param input - The input; see `CalculateSensorDarkCurrentChargeInput` for its fields, units and coordinates.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function calculateSensorDarkCurrentCharge(\n input: CalculateSensorDarkCurrentChargeInput<SensorEqePhotoExposure>\n): CalculationResult<SensorPhotoDarkCurrentCharge>;\n/**\n * Evaluates the declared dark-current rate at the sensor temperature and integrates it over the exact\n * local exposure of the photo signal.\n *\n * The rate is a population mean, an approximation. Hot pixels and DCNU (dark-current non-uniformity)\n * are not modelled. No universal doubling-temperature law is assumed.\n * @param input - The input; see `CalculateSensorDarkCurrentChargeInput` for its fields, units and coordinates.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function calculateSensorDarkCurrentCharge(\n input:\n CalculateSensorDarkCurrentChargeInput<SensorEqePhotoExposure>\n): CalculationResult<SensorPhotoDarkCurrentCharge> {\n requireInputKeys(input, \"calculateSensorDarkCurrentCharge\", [\"exposure\", \"darkCurrentProfile\", \"operatingTemperatureC\"]);\n validateExposure(input.exposure);\n const profile =\n parseSensorDarkCurrentProfile(\n input.darkCurrentProfile\n );\n\n if (\n profile.colorSamplingProfileId !==\n input.exposure\n .colorSamplingProfileId ||\n profile.channelId !==\n input.exposure.channelId\n ) {\n throw new InvalidScientificInputError(\n \"Dark-current profile color/channel identity must match the EQE exposure.\"\n );\n }\n\n const site =\n input.exposure.site;\n if (\n profile.siteApplicability.kind ===\n \"exact-site\" &&\n !sameSite(\n profile.siteApplicability.site,\n site\n )\n ) {\n throw new InvalidScientificInputError(\n \"Exact-site dark-current profile does not apply to the exposure site.\"\n );\n }\n\n const resolved =\n resolveDarkCurrentRate(\n profile.temperatureModel,\n input.operatingTemperatureC\n );\n const expectedDarkElectronCount =\n resolved.rate *\n input.exposure\n .localExposureDurationSeconds;\n\n if (\n !Number.isFinite(\n expectedDarkElectronCount\n ) ||\n expectedDarkElectronCount < 0\n ) {\n throw new InvalidScientificInputError(\n \"Expected dark-electron count must remain finite and nonnegative.\"\n );\n }\n\n const result:\n SensorPhotoDarkCurrentCharge = {\n darkCurrentProfileId:\n profile.profileId,\n colorSamplingProfileId:\n input.exposure\n .colorSamplingProfileId,\n channelId:\n input.exposure.channelId,\n site: {\n ...site\n },\n bindingId:\n input.exposure.bindingId,\n ...(input.exposure.kind === \"eqe-temporal-photo-signal\"\n ? { temporalIntegrationId: input.exposure.temporalIntegrationId }\n : { stationarityProfileId: input.exposure.stationarityProfileId }),\n timeReference:\n input.exposure.timeReference,\n startOffsetSecondsFromOpeningReference:\n input.exposure\n .startOffsetSecondsFromOpeningReference,\n endOffsetSecondsFromOpeningReference:\n input.exposure\n .endOffsetSecondsFromOpeningReference,\n operatingTemperatureC:\n input.operatingTemperatureC,\n temperatureModel:\n profile.temperatureModel.kind,\n temperatureInterpolationUsed:\n resolved.interpolationUsed,\n darkCurrentElectronsPerSecond:\n resolved.rate,\n localExposureDurationSeconds:\n input.exposure\n .localExposureDurationSeconds,\n expectedDarkElectronCount,\n countMeaning:\n \"expected-thermally-generated-electrons\",\n expectationValueOnly: true,\n integerDarkElectronCountSampled:\n false,\n darkShotNoiseApplied: false,\n darkCurrentCompensationApplied:\n false,\n spatialDarkCurrentNonuniformityModeled:\n profile\n .spatialDarkCurrentNonuniformityModeled,\n photoSignalIncluded: false,\n otherChargeIncluded: false,\n physicalFullWellAssessmentAuthorized:\n false,\n saturationAssessed: false,\n componentEvidence: {\n darkCurrent:\n profile.evidence,\n siteApproximation:\n profile.siteApplicability.kind ===\n \"uniform-site-mean-approximation\"\n ? profile\n .siteApplicability\n .evidence\n : [],\n exposure:\n input.exposure\n .componentEvidence\n }\n } as SensorPhotoDarkCurrentCharge;\n\n const assumptions = [\n \"Dark current is modeled as pre-compensation thermally generated electron rate in electrons per second.\",\n \"Release 4.0 style temperature handling is data-driven: no universal exponential or doubling-temperature law is inferred.\",\n profile.temperatureModel.kind ===\n \"log-linear-temperature-table\"\n ? \"Log-linear (exponential-in-temperature) interpolation between adjacent declared samples is allowed only inside the sampled table; extrapolation fails closed.\"\n : \"Piecewise-linear interpolation is allowed only inside an explicitly sampled temperature table; extrapolation fails closed.\",\n \"Dark-current compensation, dark offset, hot-pixel/defect excess, leakage and charge injection remain separate from this thermal dark-current expectation.\",\n \"Expected dark-electron count is rate × the exact local exposure duration; no integer sampling or dark-current shot-noise realization is performed.\",\n \"This result is dark charge only. Photo-signal and other accumulated charge are not included, so physical full-well assessment remains unauthorized.\",\n \"A/W current-domain exposure results cannot enter this electron-storage path without a separate carrier/storage mapping.\"\n ];\n\n return profile.scientificStatus ===\n \"calibrated\"\n ? calculatedResult(\n result,\n \"sensor-dark-current-charge\",\n input.exposure.kind === \"eqe-temporal-photo-signal\" ? \"1.1.0\" : \"1.0.0\",\n assumptions\n )\n : approximationResult(\n result,\n \"sensor-dark-current-charge\",\n input.exposure.kind === \"eqe-temporal-photo-signal\" ? \"1.1.0\" : \"1.0.0\",\n [\n ...assumptions,\n ...(profile\n .siteApplicability.kind ===\n \"uniform-site-mean-approximation\"\n ? [\n profile\n .siteApplicability\n .limitation\n ]\n : [])\n ]\n );\n}\n"]}
@@ -1,20 +1,20 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Preflight all optical, spatial, spectral and temporal support into an internal owned execution plan
4
- * without invoking provider code. Planning checks complete spatial/spectral/temporal support before
5
- * invoking supplied synchronous radiance code. Queries use explicit environment directions, vacuum/air
6
- * wavelength and opening-reference seconds. Optical throughput, optional local PSF and typed EQE
7
- * produce photo expectations; callback invocation does not verify transport, visibility or
8
- * calibration.
9
- * Internal executor consumes a completed bounded geometric plan; returns no partial success on
10
- * failure.
2
+ * Photo signal for one sensor site from a scene-radiance provider (the "environment"): asks the
3
+ * provider for radiance along each sampled direction, then applies optics and the sensor response.
4
+ *
5
+ * Work is split into a plan and an execution step. Planning checks spatial, spectral and temporal
6
+ * coverage and builds an internal plan before any provider code runs. Each query gives an explicit
7
+ * scene direction, a wavelength (air or vacuum) and a time in seconds from the shutter's opening
8
+ * reference. Optical throughput, an optional local PSF (point-spread function) and the EQE (external
9
+ * quantum efficiency) response then give the expected photo signal. Calling the provider does not
10
+ * verify its light transport, visibility or calibration.
11
11
  * @see docs/ENVIRONMENT_RAW_CAPTURE.md for equations, coordinate/unit conventions, blockers and
12
12
  * support limits.
13
13
  */
14
14
  import { type CalculationResult } from "../core/calculation-result.js";
15
15
  import { type EvidenceProvenance } from "../core/evidence-provenance.js";
16
16
  import { validateSceneRadianceEvaluationBindings, type SceneRadianceEvaluationRequest, type SceneRadianceEvaluationResult } from "../schema/scene-radiance.js";
17
- import { calculateSensorEnvironmentRadianceQuery, type CalculateSensorEnvironmentRadianceQueryInput } from "../optics/sensor-environment-query.js";
17
+ import { calculateSensorEnvironmentRadianceQuery, type CalculateSensorEnvironmentRadianceQueryInput, type EnvironmentLensFieldMapping } from "../optics/sensor-environment-query.js";
18
18
  import { calculateSceneRadianceToSensorIrradiance, type CalculateSceneRadianceToSensorIrradianceInput } from "../optics/scene-to-sensor-irradiance.js";
19
19
  import { calculateSensorPsfIrradianceQuadrature, type CalculateSensorPsfIrradianceQuadratureInput } from "../optics/sensor-psf-quadrature.js";
20
20
  import { type IlluminationVignettingProfile } from "../optics/illumination-vignetting.js";
@@ -24,7 +24,7 @@ import { calculateSensorSpectralQuadrature } from "./spectral-quadrature.js";
24
24
  import { createSensorEqeTemporalPhotoSignal } from "./temporal-photo-signal.js";
25
25
  import type { CalculateSensorEqeTemporalExposureInput } from "./eqe-temporal-exposure.js";
26
26
  import type { CalculateSceneToSensorIrradianceQuadratureInput } from "../optics/scene-to-sensor-quadrature.js";
27
- /** Supplied synchronous code executes locally. Invocation does not prove physical transport. */
27
+ /** Caller-supplied synchronous radiance function, run locally. Calling it does not prove its light transport is physical. */
28
28
  export type EnvironmentRadianceEvaluator = (request: Readonly<SceneRadianceEvaluationRequest>) => SceneRadianceEvaluationResult;
29
29
  export type EnvironmentApertureRadianceEvaluator = (request: Readonly<SceneRadianceEvaluationRequest>, apertureRay: Readonly<SensorApertureRay>) => SceneRadianceEvaluationResult;
30
30
  export interface CalculateEnvironmentSensorPhotoSignalInput {
@@ -34,9 +34,16 @@ export interface CalculateEnvironmentSensorPhotoSignalInput {
34
34
  optics: Omit<CalculateSceneRadianceToSensorIrradianceInput, "sceneRadianceRequest" | "sceneRadianceResult" | "imagePointMm" | "fieldThroughput">;
35
35
  motion: Pick<CalculateSensorEnvironmentRadianceQueryInput, "angularVelocityRadPerSec" | "timeReference" | "environmentDirectionConvention">;
36
36
  temporalSampleCount: number;
37
- /** Optional ideal geometric DOF/visibility support; cannot combine with a sampled PSF. */
37
+ /** Optional ideal circular pupil, for geometric depth of field (DOF) and visibility. Cannot be combined with a sampled PSF. */
38
38
  pupil?: IdealCircularPupil;
39
- /** Explicit source-field attenuation, applied once before PSF redistribution. */
39
+ /**
40
+ * Optional lens field mapping (added in 2.0): a projection model and radial or Brown-Conrady
41
+ * distortion for the scene-ray query. Its distortion area factor is applied to irradiance exactly
42
+ * once. If omitted, the ideal rectilinear, distortion-free path is unchanged. Cannot be combined
43
+ * with `pupil`.
44
+ */
45
+ lensFieldMapping?: EnvironmentLensFieldMapping;
46
+ /** Explicit attenuation across the field (such as vignetting), applied once before the PSF spreads the light. */
40
47
  fieldThroughput: {
41
48
  kind: "unity";
42
49
  evidence: readonly EvidenceProvenance[];
@@ -56,7 +63,7 @@ export interface CalculateEnvironmentSensorPhotoSignalInput {
56
63
  configuration: Pick<CalculateSensorPsfIrradianceQuadratureInput, "psf" | "psfWavelengthBasis" | "spatialModel">;
57
64
  };
58
65
  evaluateRadiance: EnvironmentRadianceEvaluator;
59
- /** Required with pupil; origin-aware scene intersections cannot use direction-only code. */
66
+ /** Required with `pupil`: rays start at different points on the aperture, so a direction-only function cannot be used. */
60
67
  evaluateApertureRadiance?: EnvironmentApertureRadianceEvaluator;
61
68
  }
62
69
  export interface EnvironmentSensorPhotoSignal {
@@ -91,7 +98,7 @@ export interface EnvironmentSensorPhotoSignal {
91
98
  }[];
92
99
  }[];
93
100
  }
94
- /** Internal preflight is shared with the full-frame composer to bound all work before callbacks. */
101
+ /** Internal plan, shared with the full-frame composer, so all work is bounded before any callback runs. */
95
102
  interface EnvironmentPhotoPlan {
96
103
  owned: Omit<CalculateEnvironmentSensorPhotoSignalInput, "evaluateRadiance" | "evaluateApertureRadiance">;
97
104
  sceneBindings: CalculateSceneToSensorIrradianceQuadratureInput["sceneBindings"];
@@ -112,30 +119,64 @@ interface EnvironmentPhotoPlan {
112
119
  x: number;
113
120
  y: number;
114
121
  };
115
- query: ReturnType<typeof calculateSensorEnvironmentRadianceQuery>;
122
+ /** Deep-frozen provider request of the planned query (the same object as query.value.request). */
123
+ request: SceneRadianceEvaluationRequest;
124
+ /** The planned query's image-plane source point (the same object as query.value.sourcePointImagePlaneMm). */
125
+ sourcePointImagePlaneMm: {
126
+ x: number;
127
+ y: number;
128
+ };
129
+ /** The complete query result. Kept only by "full" plans, whose per-evaluation records include it. */
130
+ query?: ReturnType<typeof calculateSensorEnvironmentRadianceQuery>;
116
131
  apertureRays?: readonly SensorApertureRay[];
132
+ /** 1 / det(d distorted / d ideal), the change in area from distortion. Present only with a lens field mapping. */
133
+ distortionAreaFactor?: number;
117
134
  fieldThroughput: CalculateSceneRadianceToSensorIrradianceInput["fieldThroughput"];
118
135
  }[];
119
136
  }[];
120
137
  }[];
121
138
  }
122
139
  /**
123
- * Preflight all optical, spatial, spectral and temporal support into an internal owned execution plan
124
- * without invoking provider code.
140
+ * Builds an internal execution plan covering all optical, spatial, spectral and temporal sampling,
141
+ * without calling any provider code.
125
142
  *
126
- * Planning checks complete spatial/spectral/temporal support before invoking supplied synchronous
127
- * radiance code. Queries use explicit environment directions, vacuum/air wavelength and
128
- * opening-reference seconds. Optical throughput, optional local PSF and typed EQE produce photo
129
- * expectations; callback invocation does not verify transport, visibility or calibration.
130
- * @param input - Omit<CalculateEnvironmentSensorPhotoSignalInput, "evaluateRadiance" | "evaluateApertureRadiance">. See the linked contract for coordinate, unit and profile binding semantics.
131
- * @returns EnvironmentPhotoPlan. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
143
+ * Coverage is checked completely before any supplied radiance function runs. Each query gives an
144
+ * explicit scene direction, a wavelength (air or vacuum) and seconds from the opening reference.
145
+ * @param input - The photo-signal input without its radiance functions; see
146
+ * `CalculateEnvironmentSensorPhotoSignalInput`.
147
+ * @param ownership - Internal. "copy" (default) makes a structured clone of the input. "engine-owned"
148
+ * uses the input as the plan's own data without cloning again. Only engine callers that already hold a
149
+ * private structured clone, never shown to supplied code and never changed afterwards, may pass it.
150
+ * @param retention - Internal. "full" (default) keeps every planned query result for "full" execution
151
+ * records. "photo-only" keeps only each query's frozen request and image-plane point, which is all that
152
+ * photo-only execution reads. Every query is still computed and validated at plan time, so limit checks
153
+ * and errors are unchanged.
154
+ * @returns The result. Success does not imply calibration.
132
155
  *
133
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
156
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
157
+ */
158
+ export declare function planEnvironmentSensorPhotoSignal(input: Omit<CalculateEnvironmentSensorPhotoSignalInput, "evaluateRadiance" | "evaluateApertureRadiance">, ownership?: "copy" | "engine-owned", retention?: "full" | "photo-only"): EnvironmentPhotoPlan;
159
+ /**
160
+ * Internal: the frozen provider request and frozen private ray copy of one ideal-pupil query (sample ID suffix "-a"
161
+ * and the pupil index, reversed ray direction). If prebuildApertureRadianceQuery already built this query for a batch,
162
+ * the same objects are returned once, so the batch and the executor share them; otherwise new ones are built.
163
+ */
164
+ export declare function apertureRadianceQuery(base: SceneRadianceEvaluationRequest, ray: SensorApertureRay): {
165
+ request: SceneRadianceEvaluationRequest;
166
+ apertureRay: SensorApertureRay;
167
+ };
168
+ /** Internal: builds a pupil query for a batched provider and keeps it for the executor's apertureRadianceQuery call. */
169
+ export declare function prebuildApertureRadianceQuery(base: SceneRadianceEvaluationRequest, ray: SensorApertureRay): {
170
+ request: SceneRadianceEvaluationRequest;
171
+ apertureRay: SensorApertureRay;
172
+ };
173
+ /**
174
+ * Internal: runs a completed, bounded plan. On failure nothing partial is returned.
175
+ * With retention "full" (default), every per-evaluation record is kept in value.instants[].evaluations.
176
+ * With "photo-only", those lists are empty, for engine callers that read only value.photo. Photo values
177
+ * are identical either way.
134
178
  */
135
- export declare function planEnvironmentSensorPhotoSignal(input: Omit<CalculateEnvironmentSensorPhotoSignalInput, "evaluateRadiance" | "evaluateApertureRadiance">): EnvironmentPhotoPlan;
136
- /** Internal executor consumes a completed bounded geometric plan; returns no partial success on failure. */
137
- export declare function executeEnvironmentSensorPhotoSignal(plan: ReturnType<typeof planEnvironmentSensorPhotoSignal>, evaluate: EnvironmentRadianceEvaluator, evaluateAperture?: EnvironmentApertureRadianceEvaluator): CalculationResult<EnvironmentSensorPhotoSignal>;
138
- /** Generate, evaluate and integrate one site's actual local midpoint environment support. */
179
+ export declare function executeEnvironmentSensorPhotoSignal(plan: ReturnType<typeof planEnvironmentSensorPhotoSignal>, evaluate: EnvironmentRadianceEvaluator, evaluateAperture?: EnvironmentApertureRadianceEvaluator, retention?: "full" | "photo-only"): CalculationResult<EnvironmentSensorPhotoSignal>;
180
+ /** Plans, queries the provider and integrates the photo signal for one site, at the site's own midpoint sample positions. */
139
181
  export declare function calculateEnvironmentSensorPhotoSignal(input: CalculateEnvironmentSensorPhotoSignalInput): CalculationResult<EnvironmentSensorPhotoSignal>;
140
182
  export {};
141
- //# sourceMappingURL=environment-photo-signal.d.ts.map