@photivra/engine 1.4.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 (1074) hide show
  1. package/CHANGELOG.md +401 -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 +118 -5
  56. package/dist/capture/native-raw-development.js +224 -59
  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 +67 -10
  62. package/dist/capture/native-raw.js +90 -24
  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 -4
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +23 -8
  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/DEVELOPERS.md +0 -68
  975. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  976. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  977. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  978. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  979. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  980. package/docs/IMAGE_FORMATION.md +0 -247
  981. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  982. package/docs/MOTION_AND_SIGNAL.md +0 -250
  983. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  984. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  985. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  986. package/docs/NATIVE_RAW_AND_PRINT.md +0 -47
  987. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  988. package/docs/PERFORMANCE_BASELINE.md +0 -56
  989. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  990. package/docs/PHYSICS_FOUNDATION.md +0 -426
  991. package/docs/POC_API.md +0 -278
  992. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  993. package/docs/POC_PROJECTION_REUSE.md +0 -124
  994. package/docs/PRINT_195_196_REVIEW.md +0 -93
  995. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  996. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  997. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  998. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  999. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1000. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1001. package/docs/PRINT_PLANNING.md +0 -75
  1002. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1003. package/docs/PROCESSED_OUTPUT.md +0 -157
  1004. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1005. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1006. package/docs/PROVENANCE.md +0 -115
  1007. package/docs/PSF_FOUNDATION.md +0 -165
  1008. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1009. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1010. package/docs/RELEASE_1_0.md +0 -66
  1011. package/docs/RELEASE_1_0_1.md +0 -61
  1012. package/docs/RELEASE_1_1_0.md +0 -25
  1013. package/docs/RELEASE_1_2_0.md +0 -51
  1014. package/docs/RELEASE_1_3_0.md +0 -15
  1015. package/docs/RELEASE_1_4_0.md +0 -23
  1016. package/docs/RELEASE_AUDIT.md +0 -39
  1017. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1018. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1019. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1020. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1021. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1022. package/docs/SDR_RENDERING.md +0 -33
  1023. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1024. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1025. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1026. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1027. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1028. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1029. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1030. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1031. package/docs/SIMULATED_CAPTURE.md +0 -65
  1032. package/docs/STABILIZATION.md +0 -234
  1033. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1034. package/docs/TIER_ACCEPTANCE.md +0 -129
  1035. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1036. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1037. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1038. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1039. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1040. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1041. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1042. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1043. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1044. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1045. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1046. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1047. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1048. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1049. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1050. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1051. package/docs/validation/documentation-fragments.json +0 -212
  1052. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1053. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1054. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1055. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1056. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1057. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1058. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1061. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1062. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1065. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1066. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1067. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1068. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1069. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1070. package/docs/validation/print-detail-capabilities.json +0 -103
  1071. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1072. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1073. package/docs/validation/release-audit-inventory.json +0 -1306
  1074. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1 +1 @@
1
- {"version":3,"file":"color-sampling.js","sourceRoot":"","sources":["../../src/sensor/color-sampling.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"color-sampling.js","sourceRoot":"","sources":["../../src/sensor/color-sampling.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EACL,iBAAiB,EAElB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AA6HrF,SAAS,aAAa,CACpB,KAAc,EACd,IAAY,EACZ,WAAqC;IAErC,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACpB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,qBAAqB,CAC7B,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,KAAK,IAAI;QAAE,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IACxE,OAAO,KAAsB,CAAC;AAChC,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACzB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,8BAA8B,CACtC,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,0BAA0B,CACjC,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5B,KAAK,IAAI,CAAC,EACV,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,mCAAmC,CAC3C,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CACtB,KAAc,EACd,IAAY,EACZ,OAGC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,6BAA6B,CACrC,CAAC;IACJ,CAAC;IAED,IACE,OAAO,CAAC,WAAW,KAAK,SAAS;QACjC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,WAAW,EACpC,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACrC,qBAAqB,CACnB,KAAK,EACL,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CACzB,CACF,CAAC;IAEF,IACE,CAAC,OAAO,CAAC,eAAe;QACxB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,EAChC,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,0CAA0C,CAClD,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAClB,KAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,WAAW,CAAC,CAAC,CAAC;IAExL,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACjC,IACE,MAAM,CAAC,gBAAgB,KAAK,SAAS;YACrC,MAAM,CAAC,iBAAiB,KAAK,SAAS;YACtC,MAAM,CAAC,cAAc,KAAK,SAAS;YACnC,MAAM,CAAC,MAAM,KAAK,SAAS;YAC3B,MAAM,CAAC,eAAe,KAAK,SAAS;YACpC,MAAM,CAAC,2BAA2B,KAAK,SAAS,EAChD,CAAC;YACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,qDAAqD,CACxD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,qBAAqB,CAC9B,MAAM,CAAC,SAAS,EAChB,IAAI,GAAG,YAAY,CACpB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACtC,IACE,MAAM,CAAC,SAAS,KAAK,SAAS;YAC9B,MAAM,CAAC,eAAe,KAAK,SAAS;YACpC,MAAM,CAAC,2BAA2B,KAAK,SAAS,EAChD,CAAC;YACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,8DAA8D,CACjE,CAAC;QACJ,CAAC;QAED,MAAM,gBAAgB,GACpB,0BAA0B,CACxB,MAAM,CAAC,gBAAgB,EACvB,IAAI,GAAG,mBAAmB,CAC3B,CAAC;QACJ,MAAM,iBAAiB,GACrB,0BAA0B,CACxB,MAAM,CAAC,iBAAiB,EACxB,IAAI,GAAG,oBAAoB,CAC5B,CAAC;QACJ,MAAM,eAAe,GACnB,gBAAgB,GAAG,iBAAiB,CAAC;QAEvC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,oDAAoD,CACvD,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,6BAA6B,EAAE,CAAC;YACpD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,gDAAgD,CACnD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,gBAAgB;YAChB,iBAAiB;YACjB,cAAc,EAAE,eAAe,CAC7B,MAAM,CAAC,cAAc,EACrB,IAAI,GAAG,iBAAiB,EACxB;gBACE,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,eAAe;aAC7B,CACF;YACD,MAAM,EAAE,6BAA6B;SACtC,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,IACE,MAAM,CAAC,SAAS,KAAK,SAAS;YAC9B,MAAM,CAAC,gBAAgB,KAAK,SAAS;YACrC,MAAM,CAAC,iBAAiB,KAAK,SAAS;YACtC,MAAM,CAAC,cAAc,KAAK,SAAS;YACnC,MAAM,CAAC,MAAM,KAAK,SAAS,EAC3B,CAAC;YACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,qDAAqD,CACxD,CAAC;QACJ,CAAC;QAED,IACE,MAAM,CAAC,2BAA2B;YAClC,cAAc,EACd,CAAC;YACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,qFAAqF,CACxF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,SAAS;YACf,eAAe,EAAE,eAAe,CAC9B,MAAM,CAAC,eAAe,EACtB,IAAI,GAAG,kBAAkB,EACzB;gBACE,eAAe,EAAE,KAAK;aACvB,CACF;YACD,2BAA2B,EAAE,cAAc;SAC5C,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,mBAAmB,CAC3B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,+BAA+B,CAC7C,KAAc;IAEd,MAAM,OAAO,GAAG,aAAa,CAC3B,KAAK,EACL,qBAAqB,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,CAAC,CAChG,CAAC;IAEF,IAAI,OAAO,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;QACtC,MAAM,IAAI,yBAAyB,CACjC,oDAAoD,CACrD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CACxB,OAAO,CAAC,MAAM,EACd,4BAA4B,CAC7B,CAAC;IAEF,MAAM,wBAAwB,GAC5B,MAAM,CAAC,IAAI,KAAK,SAAS;QACvB,CAAC,CAAC,yDAAyD;QAC3D,CAAC,CAAC,yCAAyC,CAAC;IAEhD,IACE,OAAO,CAAC,gBAAgB;QACxB,wBAAwB,EACxB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,qBAAqB,CAC9B,OAAO,CAAC,SAAS,EACjB,+BAA+B,CAChC;QACD,QAAQ,EAAE,iBAAiB,CACzB,OAAO,CAAC,QAAQ,EAChB,8BAA8B,CAC/B;QACD,gBAAgB,EAAE,wBAAwB;QAC1C,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5B,KAAK,GAAG,CAAC,EACT,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,IAAI;YACF,wEAAwE,CAC3E,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAoC;IAEpC,gBAAgB,CAAC,KAAK,EAAE,0BAA0B,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,MAAM,OAAO,GACX,+BAA+B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEjD,IACE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,KAAK,CAAC,IAAI,KAAK,IAAI,EACnB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,GAAG,sBAAsB,CAC9B,KAAK,CAAC,IAAI,CAAC,CAAC,EACZ,QAAQ,CACT,CAAC;IACF,MAAM,CAAC,GAAG,sBAAsB,CAC9B,KAAK,CAAC,IAAI,CAAC,CAAC,EACZ,QAAQ,CACT,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,2BAA2B,CACnC,8IAA8I,CAC/I,CAAC;IACJ,CAAC;IAED,IACE,OAAO,CAAC,gBAAgB;QACxB,yCAAyC,EACzC,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACzC,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;YACd,OAAO,EAAE;gBACP,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;aACpC;YACD,2BAA2B,EAAE,KAAK;YAClC,mCAAmC,EAAE,KAAK;YAC1C,oCAAoC,EAAE,KAAK;SAC5C,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GACX,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACtC,MAAM,OAAO,GACX,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC;IACvC,MAAM,KAAK,GACT,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB;QACzC,OAAO,CAAC;IACV,MAAM,SAAS,GACb,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,2BAA2B,CACnC,iDAAiD,CAClD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;QACd,OAAO,EAAE;YACP,IAAI,EAAE,iBAAiB;YACvB,SAAS;YACT,gBAAgB,EAAE;gBAChB,CAAC,EAAE,OAAO;gBACV,CAAC,EAAE,OAAO;aACX;YACD,gBAAgB,EACd,OAAO,CAAC,MAAM,CAAC,gBAAgB;YACjC,iBAAiB,EACf,OAAO,CAAC,MAAM,CAAC,iBAAiB;SACnC;QACD,2BAA2B,EAAE,KAAK;QAClC,mCAAmC,EAAE,KAAK;QAC1C,oCAAoC,EAAE,KAAK;KAC5C,CAAC;AACJ,CAAC","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Colour-sampling layout: which colour channel each sensor site measures. Examples are monochrome,\n * a repeating mosaic such as a Bayer CFA (colour filter array), or a layered (stacked) sensor.\n *\n * Sites form an abstract grid with zero-based integer indices, origin at the top left, +X right and\n * +Y down. A site is not necessarily one physical photodiode. The mosaic's repeat pattern is fixed to\n * this grid, so later crops or orientation changes must keep the original native site indices.\n * Layered layouts are described structurally only, because real layered sensors may sample each layer\n * at different densities or offsets.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport { requireInputKeys, rejectUnknownFields } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport type NativeColorSamplingSiteCoordinateSystem =\n \"native-sensor-color-sampling-site-index\";\n\nexport type SensorColorSamplingProfileCoordinateSystem =\n | NativeColorSamplingSiteCoordinateSystem\n | \"native-sensor-layered-spatial-relationship-not-resolved\";\n\nexport interface NativeColorSamplingSiteIndex {\n /**\n * Zero-based integer site index from the native sensor's left edge.\n *\n * It indexes the abstract grid of colour-sampling sites. It is not a\n * NativeImageRaster coordinate and does not claim one site is one physical\n * photodiode.\n */\n x: number;\n /**\n * Zero-based integer site index from the native sensor's top edge.\n *\n * +Y points downward in native sensor-facing coordinates.\n */\n y: number;\n}\n\nexport interface MonochromeColorSamplingLayout {\n kind: \"monochrome\";\n /**\n * A name for the measured channel only. It is not a spectral response\n * curve, wavelength, colour primary or calibration.\n */\n channelId: string;\n}\n\nexport interface PeriodicMosaicColorSamplingLayout {\n kind: \"periodic-mosaic\";\n /**\n * Number of color-sampling sites in one horizontal repeat period.\n */\n repeatWidthSites: number;\n /**\n * Number of color-sampling sites in one vertical repeat period.\n */\n repeatHeightSites: number;\n /**\n * Channel IDs for one repeating tile, in row-major order.\n *\n * Length must equal repeatWidthSites × repeatHeightSites.\n */\n siteChannelIds: readonly string[];\n /**\n * The repeat tile starts at native sensor site (0, 0).\n *\n * Active-area crops and camera orientation must not silently reset this phase.\n */\n anchor: \"native-sensor-top-left-site\";\n}\n\nexport interface LayeredColorSamplingLayout {\n kind: \"layered\";\n /**\n * Names for the layers or channels only. They do not define spectral\n * response, depth order, sampling density or alignment between layers.\n */\n layerChannelIds: readonly string[];\n /**\n * Layered layouts are described structurally only for now, because real\n * layered sensors may sample each layer differently.\n */\n spatialSamplingRelationship: \"not-resolved\";\n}\n\nexport type SensorColorSamplingLayout =\n | MonochromeColorSamplingLayout\n | PeriodicMosaicColorSamplingLayout\n | LayeredColorSamplingLayout;\n\nexport interface SensorColorSamplingProfile {\n schemaVersion: \"0.1.0\";\n profileId: string;\n /**\n * Evidence for this exact layout.\n *\n * Descriptive sensor-architecture metadata is a separate type.\n */\n evidence: readonly EvidenceProvenance[];\n coordinateSystem: SensorColorSamplingProfileCoordinateSystem;\n layout: SensorColorSamplingLayout;\n}\n\nexport interface ResolveColorSamplingSiteInput {\n profile: SensorColorSamplingProfile;\n site: NativeColorSamplingSiteIndex;\n}\n\nexport interface ResolvedColorSamplingSite {\n profileId: string;\n coordinateSystem: NativeColorSamplingSiteCoordinateSystem;\n site: NativeColorSamplingSiteIndex;\n mapping:\n | {\n kind: \"monochrome\";\n channelId: string;\n }\n | {\n kind: \"periodic-mosaic\";\n channelId: string;\n repeatCoordinate: {\n x: number;\n y: number;\n };\n repeatWidthSites: number;\n repeatHeightSites: number;\n };\n /**\n * States what this profile does not establish, for downstream code.\n */\n spectralResponseEstablished: false;\n nativeImageRasterBindingEstablished: false;\n physicalPhotodiodeBindingEstablished: false;\n}\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveSafeInteger(\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 + \" must be a positive safe integer.\"\n );\n }\n return value;\n}\n\nfunction parseChannelIds(\n value: unknown,\n path: string,\n options: {\n allowDuplicates: boolean;\n exactLength?: number;\n }\n): readonly string[] {\n if (!Array.isArray(value) || value.length === 0) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty array.\"\n );\n }\n\n if (\n options.exactLength !== undefined &&\n value.length !== options.exactLength\n ) {\n throw new InvalidConfigurationError(\n path +\n \" length must equal the declared repeating-tile site count.\"\n );\n }\n\n const ids = value.map((entry, index) =>\n requireNonEmptyString(\n entry,\n path + \"[\" + index + \"]\"\n )\n );\n\n if (\n !options.allowDuplicates &&\n new Set(ids).size !== ids.length\n ) {\n throw new InvalidConfigurationError(\n path + \" must not contain duplicate channel IDs.\"\n );\n }\n\n return ids;\n}\n\nfunction parseLayout(\n value: unknown,\n path: string\n): SensorColorSamplingLayout {\n const record = requireRecord(value, path, [\"kind\", \"repeatWidthSites\", \"repeatHeightSites\", \"siteChannelIds\", \"anchor\", \"layerChannelIds\", \"spatialSamplingRelationship\", \"channelId\"]);\n\n if (record.kind === \"monochrome\") {\n if (\n record.repeatWidthSites !== undefined ||\n record.repeatHeightSites !== undefined ||\n record.siteChannelIds !== undefined ||\n record.anchor !== undefined ||\n record.layerChannelIds !== undefined ||\n record.spatialSamplingRelationship !== undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" monochrome layout must omit mosaic/layered fields.\"\n );\n }\n\n return {\n kind: \"monochrome\",\n channelId: requireNonEmptyString(\n record.channelId,\n path + \".channelId\"\n )\n };\n }\n\n if (record.kind === \"periodic-mosaic\") {\n if (\n record.channelId !== undefined ||\n record.layerChannelIds !== undefined ||\n record.spatialSamplingRelationship !== undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" periodic-mosaic layout must omit monochrome/layered fields.\"\n );\n }\n\n const repeatWidthSites =\n requirePositiveSafeInteger(\n record.repeatWidthSites,\n path + \".repeatWidthSites\"\n );\n const repeatHeightSites =\n requirePositiveSafeInteger(\n record.repeatHeightSites,\n path + \".repeatHeightSites\"\n );\n const repeatSiteCount =\n repeatWidthSites * repeatHeightSites;\n\n if (!Number.isSafeInteger(repeatSiteCount)) {\n throw new InvalidConfigurationError(\n path +\n \" repeating-tile site count must be a safe integer.\"\n );\n }\n\n if (record.anchor !== \"native-sensor-top-left-site\") {\n throw new InvalidConfigurationError(\n path +\n '.anchor must be \"native-sensor-top-left-site\".'\n );\n }\n\n return {\n kind: \"periodic-mosaic\",\n repeatWidthSites,\n repeatHeightSites,\n siteChannelIds: parseChannelIds(\n record.siteChannelIds,\n path + \".siteChannelIds\",\n {\n allowDuplicates: true,\n exactLength: repeatSiteCount\n }\n ),\n anchor: \"native-sensor-top-left-site\"\n };\n }\n\n if (record.kind === \"layered\") {\n if (\n record.channelId !== undefined ||\n record.repeatWidthSites !== undefined ||\n record.repeatHeightSites !== undefined ||\n record.siteChannelIds !== undefined ||\n record.anchor !== undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" layered layout must omit monochrome/mosaic fields.\"\n );\n }\n\n if (\n record.spatialSamplingRelationship !==\n \"not-resolved\"\n ) {\n throw new InvalidConfigurationError(\n path +\n '.spatialSamplingRelationship must be \"not-resolved\" for the first layered contract.'\n );\n }\n\n return {\n kind: \"layered\",\n layerChannelIds: parseChannelIds(\n record.layerChannelIds,\n path + \".layerChannelIds\",\n {\n allowDuplicates: false\n }\n ),\n spatialSamplingRelationship: \"not-resolved\"\n };\n }\n\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n}\n\n/**\n * Parses an exact colour-sampling layout. It is not tied to NativeImageRaster,\n * physical photodiodes, spectral response or a manufacturer's layout name.\n *\n * Repeating mosaics use an abstract grid of native sensor sites with zero-based\n * integer indices, origin at the top left, +X right and +Y down. The repeat\n * pattern is fixed to this grid, so later crops or orientation changes must keep\n * the original native site indices.\n *\n * Layered layouts are described structurally only, because real layered sensors\n * may sample each layer at different densities or offsets. There is no per-site\n * lookup for layered layouts until that is modelled explicitly.\n */\nexport function parseSensorColorSamplingProfile(\n value: unknown\n): SensorColorSamplingProfile {\n const profile = requireRecord(\n value,\n \"sensorColorSampling\", [\"schemaVersion\", \"layout\", \"coordinateSystem\", \"profileId\", \"evidence\"]\n );\n\n if (profile.schemaVersion !== \"0.1.0\") {\n throw new InvalidConfigurationError(\n 'sensorColorSampling.schemaVersion must be \"0.1.0\".'\n );\n }\n\n const layout = parseLayout(\n profile.layout,\n \"sensorColorSampling.layout\"\n );\n\n const expectedCoordinateSystem =\n layout.kind === \"layered\"\n ? \"native-sensor-layered-spatial-relationship-not-resolved\"\n : \"native-sensor-color-sampling-site-index\";\n\n if (\n profile.coordinateSystem !==\n expectedCoordinateSystem\n ) {\n throw new InvalidConfigurationError(\n \"sensorColorSampling.coordinateSystem does not match the declared layout kind.\"\n );\n }\n\n return {\n schemaVersion: \"0.1.0\",\n profileId: requireNonEmptyString(\n profile.profileId,\n \"sensorColorSampling.profileId\"\n ),\n evidence: parseEvidenceList(\n profile.evidence,\n \"sensorColorSampling.evidence\"\n ),\n coordinateSystem: expectedCoordinateSystem,\n layout\n };\n}\n\nfunction requireNativeSiteIndex(\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 InvalidScientificInputError(\n path +\n \" must be a non-negative safe integer native color-sampling-site index.\"\n );\n }\n return value;\n}\n\n/**\n * Returns which channel one native site measures, for monochrome or repeating\n * mosaic layouts.\n *\n * It deliberately takes no NativeImageRaster. A separate binding\n * (capture-color-sampling-binding) must say how a capture mode's sample grid\n * maps onto this site grid before RAW or CFA sampling can be simulated.\n *\n * Layered layouts are rejected, because how their layers line up spatially is\n * not defined yet.\n */\nexport function resolveColorSamplingSite(\n input: ResolveColorSamplingSiteInput\n): ResolvedColorSamplingSite {\n requireInputKeys(input, \"resolveColorSamplingSite\", [\"profile\", \"site\"]);\n const profile =\n parseSensorColorSamplingProfile(input.profile);\n\n if (\n typeof input.site !== \"object\" ||\n input.site === null\n ) {\n throw new InvalidConfigurationError(\n \"site must be an object.\"\n );\n }\n\n const x = requireNativeSiteIndex(\n input.site.x,\n \"site.x\"\n );\n const y = requireNativeSiteIndex(\n input.site.y,\n \"site.y\"\n );\n\n if (profile.layout.kind === \"layered\") {\n throw new InvalidScientificInputError(\n \"Layered color sampling is structural-only in schema 0.1.0; per-site resolution requires an explicit per-layer spatial sampling relationship.\"\n );\n }\n\n if (\n profile.coordinateSystem !==\n \"native-sensor-color-sampling-site-index\"\n ) {\n throw new InvalidScientificInputError(\n \"Resolvable color sampling requires the native sensor color-sampling-site coordinate system.\"\n );\n }\n\n if (profile.layout.kind === \"monochrome\") {\n return {\n profileId: profile.profileId,\n coordinateSystem: profile.coordinateSystem,\n site: { x, y },\n mapping: {\n kind: \"monochrome\",\n channelId: profile.layout.channelId\n },\n spectralResponseEstablished: false,\n nativeImageRasterBindingEstablished: false,\n physicalPhotodiodeBindingEstablished: false\n };\n }\n\n const repeatX =\n x % profile.layout.repeatWidthSites;\n const repeatY =\n y % profile.layout.repeatHeightSites;\n const index =\n repeatY * profile.layout.repeatWidthSites +\n repeatX;\n const channelId =\n profile.layout.siteChannelIds[index];\n\n if (channelId === undefined) {\n throw new InvalidScientificInputError(\n \"Periodic color-sampling tile resolution failed.\"\n );\n }\n\n return {\n profileId: profile.profileId,\n coordinateSystem: profile.coordinateSystem,\n site: { x, y },\n mapping: {\n kind: \"periodic-mosaic\",\n channelId,\n repeatCoordinate: {\n x: repeatX,\n y: repeatY\n },\n repeatWidthSites:\n profile.layout.repeatWidthSites,\n repeatHeightSites:\n profile.layout.repeatHeightSites\n },\n spectralResponseEstablished: false,\n nativeImageRasterBindingEstablished: false,\n physicalPhotodiodeBindingEstablished: false\n };\n}\n"]}
@@ -1,13 +1,11 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
4
- * missing required fields and incompatible scientific data fail at this boundary. Rate times duration
5
- * is allowed only by explicit stationarity bound to the exact site and local shutter interval. EQE
6
- * integrates to expected photons/electrons; A/W integrates current magnitude to coulombs without an
7
- * implicit carrier mapping. Counts remain fractional expectations before stochastic sampling.
8
- * Integrates one explicitly stationary response-rate result over its exact bound local exposure
9
- * window. This function is intentionally limited to the constant-rate approximation. It does not
10
- * sample or integrate a time-varying signal.
2
+ * Constant-rate exposure: multiplies a sensor response rate by the exposure time.
3
+ *
4
+ * This shortcut (rate × duration) is allowed only when the caller declares the rate constant
5
+ * (stationary) for this exact site and local shutter interval. With EQE (external quantum
6
+ * efficiency) the result is expected photons and electrons. With A/W responsivity it is charge in
7
+ * coulombs, with no assumed conversion to electrons. Counts stay fractional expected values, before
8
+ * any random sampling. Time-varying signals are not handled here.
11
9
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
12
10
  * limits.
13
11
  */
@@ -101,26 +99,24 @@ export interface SensorResponsivityExposureIntegration extends SensorTemporalInt
101
99
  }
102
100
  export type SensorStationaryRateExposureIntegration = SensorEqeExposureIntegration | SensorResponsivityExposureIntegration;
103
101
  /**
104
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
105
- * missing required fields and incompatible scientific data fail at this boundary.
102
+ * Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,
103
+ * missing required fields and inconsistent scientific data are rejected.
106
104
  *
107
- * Rate times duration is allowed only by explicit stationarity bound to the exact site and local
108
- * shutter interval. EQE integrates to expected photons/electrons; A/W integrates current magnitude to
109
- * coulombs without an implicit carrier mapping. Counts remain fractional expectations before
110
- * stochastic sampling.
111
- * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
112
- * @returns SensorRateTemporalStationarityProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
105
+ * The profile declares that a rate is constant (stationary) for an exact site and local shutter
106
+ * interval, which is what allows rate × duration.
107
+ * @param value - Untrusted data. TypeScript types alone are not validation.
108
+ * @returns The result. Success does not imply calibration.
113
109
  *
114
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
110
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
115
111
  */
116
112
  export declare function parseSensorRateTemporalStationarityProfile(value: unknown): SensorRateTemporalStationarityProfile;
117
113
  /**
118
- * Integrates one explicitly stationary response-rate result over its exact
119
- * bound local exposure window.
114
+ * Integrates one response rate, declared constant, over its exact local
115
+ * exposure window.
120
116
  *
121
- * This function is intentionally limited to the constant-rate approximation.
122
- * It does not sample or integrate a time-varying signal.
117
+ * This is the constant-rate approximation only. It does not sample or
118
+ * integrate a time-varying signal. EQE rates give expected photons and
119
+ * electrons; A/W rates give coulombs. Counts stay fractional.
123
120
  */
124
121
  export declare function integrateStationarySensorRateOverLocalExposure(input: IntegrateStationarySensorRateInput): CalculationResult<SensorStationaryRateExposureIntegration>;
125
122
  export {};
126
- //# sourceMappingURL=constant-rate-temporal-integration.d.ts.map
@@ -1,14 +1,12 @@
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. Rate times duration
6
- * is allowed only by explicit stationarity bound to the exact site and local shutter interval. EQE
7
- * integrates to expected photons/electrons; A/W integrates current magnitude to coulombs without an
8
- * implicit carrier mapping. Counts remain fractional expectations before stochastic sampling.
9
- * Integrates one explicitly stationary response-rate result over its exact bound local exposure
10
- * window. This function is intentionally limited to the constant-rate approximation. It does not
11
- * sample or integrate a time-varying signal.
3
+ * Constant-rate exposure: multiplies a sensor response rate by the exposure time.
4
+ *
5
+ * This shortcut (rate × duration) is allowed only when the caller declares the rate constant
6
+ * (stationary) for this exact site and local shutter interval. With EQE (external quantum
7
+ * efficiency) the result is expected photons and electrons. With A/W responsivity it is charge in
8
+ * coulombs, with no assumed conversion to electrons. Counts stay fractional expected values, before
9
+ * any random sampling. Time-varying signals are not handled here.
12
10
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
13
11
  * limits.
14
12
  */
@@ -16,12 +14,15 @@ import { approximationResult, calculatedResult } from "../core/calculation-resul
16
14
  import { InvalidConfigurationError } from "../core/configuration-error.js";
17
15
  import { parseEvidenceList } from "../core/evidence-provenance.js";
18
16
  import { InvalidScientificInputError } from "../core/validation.js";
19
- function requireRecord(value, path) {
17
+ import { requireInputObject, requireInputKeys, rejectUnknownFields } from "../core/record-validation.js";
18
+ function requireRecord(value, path, allowedKeys) {
20
19
  if (typeof value !== "object" ||
21
20
  value === null ||
22
21
  Array.isArray(value)) {
23
22
  throw new InvalidConfigurationError(path + " must be an object.");
24
23
  }
24
+ if (allowedKeys !== null)
25
+ rejectUnknownFields(value, allowedKeys, path);
25
26
  return value;
26
27
  }
27
28
  function requireNonEmptyString(value, path) {
@@ -48,20 +49,18 @@ function requireFinite(value, path) {
48
49
  return value;
49
50
  }
50
51
  /**
51
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
52
- * missing required fields and incompatible scientific data fail at this boundary.
52
+ * Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,
53
+ * missing required fields and inconsistent scientific data are rejected.
53
54
  *
54
- * Rate times duration is allowed only by explicit stationarity bound to the exact site and local
55
- * shutter interval. EQE integrates to expected photons/electrons; A/W integrates current magnitude to
56
- * coulombs without an implicit carrier mapping. Counts remain fractional expectations before
57
- * stochastic sampling.
58
- * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
59
- * @returns SensorRateTemporalStationarityProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
55
+ * The profile declares that a rate is constant (stationary) for an exact site and local shutter
56
+ * interval, which is what allows rate × duration.
57
+ * @param value - Untrusted data. TypeScript types alone are not validation.
58
+ * @returns The result. Success does not imply calibration.
60
59
  *
61
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
60
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
62
61
  */
63
62
  export function parseSensorRateTemporalStationarityProfile(value) {
64
- const record = requireRecord(value, "sensorRateTemporalStationarity");
63
+ const record = requireRecord(value, "sensorRateTemporalStationarity", ["schemaVersion", "rateDomain", "site", "localExposureWindow", "stationarityMeaning", "status", "limitation", "profileId", "colorSamplingProfileId", "channelId", "bindingId", "evidence"]);
65
64
  if (record.schemaVersion !== "0.1.0") {
66
65
  throw new InvalidConfigurationError('sensorRateTemporalStationarity.schemaVersion must be "0.1.0".');
67
66
  }
@@ -71,8 +70,8 @@ export function parseSensorRateTemporalStationarityProfile(value) {
71
70
  "responsivity-photocurrent") {
72
71
  throw new InvalidConfigurationError("sensorRateTemporalStationarity.rateDomain is invalid.");
73
72
  }
74
- const site = requireRecord(record.site, "sensorRateTemporalStationarity.site");
75
- const localExposureWindow = requireRecord(record.localExposureWindow, "sensorRateTemporalStationarity.localExposureWindow");
73
+ const site = requireRecord(record.site, "sensorRateTemporalStationarity.site", ["x", "y"]);
74
+ const localExposureWindow = requireRecord(record.localExposureWindow, "sensorRateTemporalStationarity.localExposureWindow", ["timeReference", "startOffsetSecondsFromOpeningReference", "endOffsetSecondsFromOpeningReference"]);
76
75
  if (localExposureWindow.timeReference !==
77
76
  "first-opening-boundary-phase") {
78
77
  throw new InvalidConfigurationError('sensorRateTemporalStationarity.localExposureWindow.timeReference must be "first-opening-boundary-phase".');
@@ -127,6 +126,7 @@ function sameSite(a, b) {
127
126
  return a.x === b.x && a.y === b.y;
128
127
  }
129
128
  function requireRateSite(rate) {
129
+ requireInputObject(rate, "rate input");
130
130
  if (rate.site === undefined ||
131
131
  !Number.isSafeInteger(rate.site.x) ||
132
132
  rate.site.x < 0 ||
@@ -253,13 +253,15 @@ function requireNonNegativeFiniteRate(value, path) {
253
253
  return value;
254
254
  }
255
255
  /**
256
- * Integrates one explicitly stationary response-rate result over its exact
257
- * bound local exposure window.
256
+ * Integrates one response rate, declared constant, over its exact local
257
+ * exposure window.
258
258
  *
259
- * This function is intentionally limited to the constant-rate approximation.
260
- * It does not sample or integrate a time-varying signal.
259
+ * This is the constant-rate approximation only. It does not sample or
260
+ * integrate a time-varying signal. EQE rates give expected photons and
261
+ * electrons; A/W rates give coulombs. Counts stay fractional.
261
262
  */
262
263
  export function integrateStationarySensorRateOverLocalExposure(input) {
264
+ requireInputKeys(input, "integrateStationarySensorRateOverLocalExposure", ["rate", "exposureBinding", "stationarityProfile"]);
263
265
  const binding = validateBinding(input.rate, input.exposureBinding);
264
266
  const stationarity = parseSensorRateTemporalStationarityProfile(input.stationarityProfile);
265
267
  validateStationarity(stationarity, input.exposureBinding, binding.rateDomain, binding.site);
@@ -1 +1 @@
1
- {"version":3,"file":"constant-rate-temporal-integration.js","sourceRoot":"","sources":["../../src/sensor/constant-rate-temporal-integration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constant-rate-temporal-integration.js","sourceRoot":"","sources":["../../src/sensor/constant-rate-temporal-integration.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Constant-rate exposure: multiplies a sensor response rate by the exposure time.\n *\n * This shortcut (rate × duration) is allowed only when the caller declares the rate constant\n * (stationary) for this exact site and local shutter interval. With EQE (external quantum\n * efficiency) the result is expected photons and electrons. With A/W responsivity it is charge in\n * coulombs, with no assumed conversion to electrons. Counts stay fractional expected values, before\n * any random sampling. Time-varying signals are not handled here.\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 { InvalidScientificInputError } from \"../core/validation.js\";\nimport type {\n SensorEqeElectronRate\n} from \"./eqe-electron-rate.js\";\nimport type {\n SensorInstantaneousRateResult,\n SensorRateLocalExposureBinding\n} from \"./local-exposure-binding.js\";\nimport type {\n SensorResponsivityPhotocurrent\n} from \"./responsivity-photocurrent.js\";\nimport { requireInputObject, requireInputKeys, rejectUnknownFields } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport type SensorRateStationarityStatus =\n | \"established\"\n | \"approximation\";\n\nexport interface SensorRateTemporalStationarityProfile {\n schemaVersion: \"0.1.0\";\n profileId: string;\n rateDomain:\n SensorRateLocalExposureBinding[\"rateDomain\"];\n colorSamplingProfileId: string;\n channelId: string;\n site: {\n x: number;\n y: number;\n };\n bindingId: string;\n localExposureWindow: {\n timeReference:\n \"first-opening-boundary-phase\";\n startOffsetSecondsFromOpeningReference:\n number;\n endOffsetSecondsFromOpeningReference:\n number;\n };\n stationarityMeaning:\n \"reported-rate-constant-through-bound-local-exposure\";\n status:\n SensorRateStationarityStatus;\n evidence: readonly EvidenceProvenance[];\n limitation?: string;\n}\n\nexport interface IntegrateStationarySensorRateInput {\n rate:\n SensorInstantaneousRateResult;\n exposureBinding:\n SensorRateLocalExposureBinding;\n stationarityProfile:\n SensorRateTemporalStationarityProfile;\n}\n\ninterface SensorTemporalIntegrationCommon {\n colorSamplingProfileId: string;\n channelId: string;\n site: {\n x: number;\n y: number;\n };\n bindingId: string;\n stationarityProfileId: string;\n stationarityStatus:\n SensorRateStationarityStatus;\n timeReference:\n \"first-opening-boundary-phase\";\n startOffsetSecondsFromOpeningReference:\n number;\n endOffsetSecondsFromOpeningReference:\n number;\n localExposureDurationSeconds:\n number;\n integrationMethod:\n \"constant-rate-times-local-exposure-duration\";\n timeStationarityEstablished: true;\n temporalIntegrationApplied: true;\n exposureDurationApplied: true;\n timeVaryingSignalIntegrated: false;\n multiFrameSequenceIntegrated: false;\n darkChargeIncluded: false;\n otherChargeIncluded: false;\n accumulatedSignalCompleteness:\n \"photo-signal-only\";\n physicalFullWellAssessmentAuthorized:\n false;\n cameraSaturationAssessmentAuthorized:\n false;\n saturationAssessed: false;\n shotNoiseApplied: false;\n readNoiseApplied: false;\n adcQuantizationApplied: false;\n rawCodeValueProduced: false;\n componentEvidence: {\n stationarity:\n readonly EvidenceProvenance[];\n exposureBinding:\n SensorRateLocalExposureBinding[\"componentEvidence\"];\n };\n}\n\nexport interface SensorEqeExposureIntegration\n extends SensorTemporalIntegrationCommon {\n kind: \"eqe-expected-counts\";\n incidentPhotonRatePerSecond: number;\n expectedGeneratedElectronRatePerSecond:\n number;\n expectedIncidentPhotonCount: number;\n expectedGeneratedElectronCount:\n number;\n countsAreExpectationValues: true;\n integerPhotonCountSampled: false;\n integerElectronCountSampled: false;\n chargeCalculated: false;\n currentCalculated: false;\n}\n\nexport interface SensorResponsivityExposureIntegration\n extends SensorTemporalIntegrationCommon {\n kind:\n \"responsivity-photocurrent-charge\";\n photocurrentMagnitudeAmperes: number;\n photochargeMagnitudeCoulombs:\n number;\n currentSignConvention:\n \"magnitude-only-no-circuit-polarity\";\n chargeSignConvention:\n \"magnitude-only-no-carrier-or-circuit-polarity\";\n carrierCountInferred: false;\n electronCountCalculated: false;\n photonCountCalculated: false;\n detectorBandwidthModeled: false;\n}\n\nexport type SensorStationaryRateExposureIntegration =\n | SensorEqeExposureIntegration\n | SensorResponsivityExposureIntegration;\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 requireNonNegativeSafeInteger(\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 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\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 that a rate is constant (stationary) for an exact site and local shutter\n * interval, which is what allows rate × duration.\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 parseSensorRateTemporalStationarityProfile(\n value: unknown\n): SensorRateTemporalStationarityProfile {\n const record = requireRecord(\n value,\n \"sensorRateTemporalStationarity\", [\"schemaVersion\", \"rateDomain\", \"site\", \"localExposureWindow\", \"stationarityMeaning\", \"status\", \"limitation\", \"profileId\", \"colorSamplingProfileId\", \"channelId\", \"bindingId\", \"evidence\"]\n );\n\n if (\n record.schemaVersion !== \"0.1.0\"\n ) {\n throw new InvalidConfigurationError(\n 'sensorRateTemporalStationarity.schemaVersion must be \"0.1.0\".'\n );\n }\n\n if (\n record.rateDomain !==\n \"eqe-electron-rate\" &&\n record.rateDomain !==\n \"responsivity-photocurrent\"\n ) {\n throw new InvalidConfigurationError(\n \"sensorRateTemporalStationarity.rateDomain is invalid.\"\n );\n }\n\n const site = requireRecord(\n record.site,\n \"sensorRateTemporalStationarity.site\", [\"x\", \"y\"]\n );\n const localExposureWindow =\n requireRecord(\n record.localExposureWindow,\n \"sensorRateTemporalStationarity.localExposureWindow\", [\"timeReference\", \"startOffsetSecondsFromOpeningReference\", \"endOffsetSecondsFromOpeningReference\"]\n );\n\n if (\n localExposureWindow.timeReference !==\n \"first-opening-boundary-phase\"\n ) {\n throw new InvalidConfigurationError(\n 'sensorRateTemporalStationarity.localExposureWindow.timeReference must be \"first-opening-boundary-phase\".'\n );\n }\n\n if (\n record.stationarityMeaning !==\n \"reported-rate-constant-through-bound-local-exposure\"\n ) {\n throw new InvalidConfigurationError(\n \"sensorRateTemporalStationarity.stationarityMeaning is invalid.\"\n );\n }\n\n if (\n record.status !== \"established\" &&\n record.status !== \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n \"sensorRateTemporalStationarity.status is invalid.\"\n );\n }\n\n const limitation =\n record.limitation === undefined\n ? undefined\n : requireNonEmptyString(\n record.limitation,\n \"sensorRateTemporalStationarity.limitation\"\n );\n\n if (\n record.status === \"approximation\" &&\n limitation === undefined\n ) {\n throw new InvalidConfigurationError(\n \"sensorRateTemporalStationarity.limitation is required for an approximation.\"\n );\n }\n\n const start =\n requireFinite(\n localExposureWindow\n .startOffsetSecondsFromOpeningReference,\n \"sensorRateTemporalStationarity.localExposureWindow.startOffsetSecondsFromOpeningReference\"\n );\n const end =\n requireFinite(\n localExposureWindow\n .endOffsetSecondsFromOpeningReference,\n \"sensorRateTemporalStationarity.localExposureWindow.endOffsetSecondsFromOpeningReference\"\n );\n\n if (!(end > start)) {\n throw new InvalidConfigurationError(\n \"sensorRateTemporalStationarity.localExposureWindow end must be greater than start.\"\n );\n }\n\n return {\n schemaVersion: \"0.1.0\",\n profileId:\n requireNonEmptyString(\n record.profileId,\n \"sensorRateTemporalStationarity.profileId\"\n ),\n rateDomain:\n record.rateDomain,\n colorSamplingProfileId:\n requireNonEmptyString(\n record.colorSamplingProfileId,\n \"sensorRateTemporalStationarity.colorSamplingProfileId\"\n ),\n channelId:\n requireNonEmptyString(\n record.channelId,\n \"sensorRateTemporalStationarity.channelId\"\n ),\n site: {\n x: requireNonNegativeSafeInteger(\n site.x,\n \"sensorRateTemporalStationarity.site.x\"\n ),\n y: requireNonNegativeSafeInteger(\n site.y,\n \"sensorRateTemporalStationarity.site.y\"\n )\n },\n bindingId:\n requireNonEmptyString(\n record.bindingId,\n \"sensorRateTemporalStationarity.bindingId\"\n ),\n localExposureWindow: {\n timeReference:\n \"first-opening-boundary-phase\",\n startOffsetSecondsFromOpeningReference:\n start,\n endOffsetSecondsFromOpeningReference:\n end\n },\n stationarityMeaning:\n \"reported-rate-constant-through-bound-local-exposure\",\n status:\n record.status,\n evidence:\n parseEvidenceList(\n record.evidence,\n \"sensorRateTemporalStationarity.evidence\"\n ),\n ...(limitation === undefined\n ? {}\n : { limitation })\n };\n}\n\nfunction sameSite(\n a: { x: number; y: number },\n b: { x: number; y: number }\n): boolean {\n return a.x === b.x && a.y === b.y;\n}\n\nfunction requireRateSite(\n rate:\n SensorInstantaneousRateResult\n): {\n x: number;\n y: number;\n} {\n requireInputObject(rate, \"rate input\");\n if (\n rate.site === undefined ||\n !Number.isSafeInteger(rate.site.x) ||\n rate.site.x < 0 ||\n !Number.isSafeInteger(rate.site.y) ||\n rate.site.y < 0\n ) {\n throw new InvalidScientificInputError(\n \"rate.site is required for temporal integration.\"\n );\n }\n return {\n x: rate.site.x,\n y: rate.site.y\n };\n}\n\nfunction validateBinding(\n rate:\n SensorInstantaneousRateResult,\n binding:\n SensorRateLocalExposureBinding\n): {\n rateDomain:\n SensorRateLocalExposureBinding[\"rateDomain\"];\n site: {\n x: number;\n y: number;\n };\n duration: number;\n} {\n const site = requireRateSite(rate);\n\n if (\n !sameSite(site, binding.site) ||\n binding.colorSamplingProfileId !==\n rate.colorSamplingProfileId ||\n binding.channelId !==\n rate.channelId\n ) {\n throw new InvalidScientificInputError(\n \"rate and exposureBinding must reference the same color site/channel.\"\n );\n }\n\n const rateDomain =\n rate.sourceResponseKind ===\n \"effective-spectral-responsivity\"\n ? \"responsivity-photocurrent\"\n : \"eqe-electron-rate\";\n\n if (\n binding.rateDomain !==\n rateDomain ||\n binding\n .nativeImageRasterBindingEstablished !==\n true ||\n binding.channelAtSiteValidated !==\n true ||\n binding\n .constantRateTemporalIntegrationAuthorized !==\n false ||\n binding.timeStationarityEstablished !==\n false ||\n binding.temporalIntegrationApplied !==\n false ||\n binding\n .multiFrameSequenceBindingEstablished !==\n false\n ) {\n throw new InvalidScientificInputError(\n \"exposureBinding must remain an unintegrated local timing binding for the same rate domain.\"\n );\n }\n\n if (\n binding.rateIdentity\n .responseProfileId !==\n rate.responseProfileId ||\n binding.rateIdentity\n .responseApplicationProfileId !==\n rate.responseApplicationProfileId ||\n binding.rateIdentity\n .operatingRangeProfileId !==\n rate.operatingRangeProfileId\n ) {\n throw new InvalidScientificInputError(\n \"exposureBinding response-rate identity must match the rate.\"\n );\n }\n\n if (\n rateDomain ===\n \"responsivity-photocurrent\"\n ) {\n const current =\n rate as SensorResponsivityPhotocurrent;\n if (\n binding.rateIdentity\n .electricalApplicabilityProfileId !==\n current\n .electricalApplicabilityProfileId\n ) {\n throw new InvalidScientificInputError(\n \"exposureBinding electrical applicability identity must match the A/W rate.\"\n );\n }\n } else if (\n binding.rateIdentity\n .electricalApplicabilityProfileId !==\n undefined\n ) {\n throw new InvalidScientificInputError(\n \"EQE exposureBinding must not carry an A/W electrical applicability identity.\"\n );\n }\n\n const window =\n binding.localExposureWindow;\n const duration =\n window\n .endOffsetSecondsFromOpeningReference -\n window\n .startOffsetSecondsFromOpeningReference;\n\n if (\n !Number.isFinite(duration) ||\n duration <= 0 ||\n !Number.isFinite(\n binding.localExposureDurationSeconds\n ) ||\n binding.localExposureDurationSeconds !==\n duration\n ) {\n throw new InvalidScientificInputError(\n \"exposureBinding local duration must exactly equal end minus start and remain positive.\"\n );\n }\n\n return {\n rateDomain,\n site,\n duration\n };\n}\n\nfunction validateStationarity(\n stationarity:\n SensorRateTemporalStationarityProfile,\n binding:\n SensorRateLocalExposureBinding,\n rateDomain:\n SensorRateLocalExposureBinding[\"rateDomain\"],\n site: {\n x: number;\n y: number;\n }\n): void {\n if (\n stationarity.rateDomain !==\n rateDomain ||\n stationarity\n .colorSamplingProfileId !==\n binding.colorSamplingProfileId ||\n stationarity.channelId !==\n binding.channelId ||\n !sameSite(\n stationarity.site,\n site\n ) ||\n stationarity.bindingId !==\n binding.bindingId ||\n stationarity\n .localExposureWindow\n .timeReference !==\n binding.timeReference ||\n stationarity\n .localExposureWindow\n .startOffsetSecondsFromOpeningReference !==\n binding.localExposureWindow\n .startOffsetSecondsFromOpeningReference ||\n stationarity\n .localExposureWindow\n .endOffsetSecondsFromOpeningReference !==\n binding.localExposureWindow\n .endOffsetSecondsFromOpeningReference\n ) {\n throw new InvalidScientificInputError(\n \"stationarityProfile must apply to the exact bound rate domain, site, binding, and local exposure window.\"\n );\n }\n}\n\nfunction requireNonNegativeFiniteRate(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value < 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must be finite and greater than or equal to zero.\"\n );\n }\n return value;\n}\n\n/**\n * Integrates one response rate, declared constant, over its exact local\n * exposure window.\n *\n * This is the constant-rate approximation only. It does not sample or\n * integrate a time-varying signal. EQE rates give expected photons and\n * electrons; A/W rates give coulombs. Counts stay fractional.\n */\nexport function integrateStationarySensorRateOverLocalExposure(\n input:\n IntegrateStationarySensorRateInput\n): CalculationResult<SensorStationaryRateExposureIntegration> {\n requireInputKeys(input, \"integrateStationarySensorRateOverLocalExposure\", [\"rate\", \"exposureBinding\", \"stationarityProfile\"]);\n const binding =\n validateBinding(\n input.rate,\n input.exposureBinding\n );\n const stationarity =\n parseSensorRateTemporalStationarityProfile(\n input.stationarityProfile\n );\n validateStationarity(\n stationarity,\n input.exposureBinding,\n binding.rateDomain,\n binding.site\n );\n\n const common = {\n colorSamplingProfileId:\n input.rate\n .colorSamplingProfileId,\n channelId:\n input.rate.channelId,\n site: binding.site,\n bindingId:\n input.exposureBinding.bindingId,\n stationarityProfileId:\n stationarity.profileId,\n stationarityStatus:\n stationarity.status,\n timeReference:\n input.exposureBinding\n .timeReference,\n startOffsetSecondsFromOpeningReference:\n input.exposureBinding\n .localExposureWindow\n .startOffsetSecondsFromOpeningReference,\n endOffsetSecondsFromOpeningReference:\n input.exposureBinding\n .localExposureWindow\n .endOffsetSecondsFromOpeningReference,\n localExposureDurationSeconds:\n binding.duration,\n integrationMethod:\n \"constant-rate-times-local-exposure-duration\" as const,\n timeStationarityEstablished:\n true as const,\n temporalIntegrationApplied:\n true as const,\n exposureDurationApplied:\n true as const,\n timeVaryingSignalIntegrated:\n false as const,\n multiFrameSequenceIntegrated:\n false as const,\n darkChargeIncluded:\n false as const,\n otherChargeIncluded:\n false as const,\n accumulatedSignalCompleteness:\n \"photo-signal-only\" as const,\n physicalFullWellAssessmentAuthorized:\n false as const,\n cameraSaturationAssessmentAuthorized:\n false as const,\n saturationAssessed:\n false as const,\n shotNoiseApplied:\n false as const,\n readNoiseApplied:\n false as const,\n adcQuantizationApplied:\n false as const,\n rawCodeValueProduced:\n false as const,\n componentEvidence: {\n stationarity:\n stationarity.evidence,\n exposureBinding:\n input.exposureBinding\n .componentEvidence\n }\n };\n\n const assumptions = [\n \"The reported instantaneous rate is explicitly declared constant through this exact bound local exposure window.\",\n \"The integration is therefore rate × local duration; no temporal quadrature or time-varying signal samples are generated.\",\n \"Motion, flicker, flash, time-varying illumination/vignetting, shutter modulation and other temporal scene/optical effects are excluded unless already proven irrelevant by the stationarity evidence.\",\n \"A/W stationarity additionally treats the quasi-static detector-terminal photocurrent result as valid throughout the window; detector bandwidth/transient response remains unmodeled.\",\n \"This result contains photo-signal accumulation only. Dark current, defects, leakage, charge injection and other charge contributors are not included.\",\n \"Physical full-well and camera/digital saturation must not be assessed from this incomplete photo-signal accumulation alone.\",\n \"Shot/read noise, conversion gain, ADC/RAW conversion and reconstruction remain downstream.\"\n ];\n\n if (\n binding.rateDomain ===\n \"eqe-electron-rate\"\n ) {\n const rate =\n input.rate as\n SensorEqeElectronRate;\n const photonRate =\n requireNonNegativeFiniteRate(\n rate.incidentPhotonRatePerSecond,\n \"rate.incidentPhotonRatePerSecond\"\n );\n const electronRate =\n requireNonNegativeFiniteRate(\n rate\n .expectedGeneratedElectronRatePerSecond,\n \"rate.expectedGeneratedElectronRatePerSecond\"\n );\n const photonCount =\n photonRate *\n binding.duration;\n const electronCount =\n electronRate *\n binding.duration;\n\n if (\n !Number.isFinite(photonCount) ||\n !Number.isFinite(electronCount)\n ) {\n throw new InvalidScientificInputError(\n \"EQE constant-rate temporal integration must remain finite.\"\n );\n }\n\n const result:\n SensorEqeExposureIntegration = {\n ...common,\n kind:\n \"eqe-expected-counts\",\n incidentPhotonRatePerSecond:\n photonRate,\n expectedGeneratedElectronRatePerSecond:\n electronRate,\n expectedIncidentPhotonCount:\n photonCount,\n expectedGeneratedElectronCount:\n electronCount,\n countsAreExpectationValues:\n true,\n integerPhotonCountSampled:\n false,\n integerElectronCountSampled:\n false,\n chargeCalculated: false,\n currentCalculated: false\n };\n\n return stationarity.status ===\n \"established\"\n ? calculatedResult(\n result,\n \"sensor-stationary-eqe-exposure-integration\",\n \"1.0.0\",\n assumptions\n )\n : approximationResult(\n result,\n \"sensor-stationary-eqe-exposure-integration\",\n \"1.0.0\",\n [\n ...assumptions,\n stationarity.limitation!\n ]\n );\n }\n\n const rate =\n input.rate as\n SensorResponsivityPhotocurrent;\n const current =\n requireNonNegativeFiniteRate(\n rate.photocurrentMagnitudeAmperes,\n \"rate.photocurrentMagnitudeAmperes\"\n );\n\n if (\n rate.temporalResponseModel !==\n \"quasi-static-steady-state-only\" ||\n rate.detectorBandwidthModeled !==\n false ||\n rate.chargeCalculated !== false\n ) {\n throw new InvalidScientificInputError(\n \"A/W input must remain a quasi-static current result with no prior charge integration.\"\n );\n }\n\n const charge =\n current * binding.duration;\n if (!Number.isFinite(charge)) {\n throw new InvalidScientificInputError(\n \"A/W constant-current temporal integration must remain finite.\"\n );\n }\n\n const result:\n SensorResponsivityExposureIntegration =\n {\n ...common,\n kind:\n \"responsivity-photocurrent-charge\",\n photocurrentMagnitudeAmperes:\n current,\n photochargeMagnitudeCoulombs:\n charge,\n currentSignConvention:\n rate.currentSignConvention,\n chargeSignConvention:\n \"magnitude-only-no-carrier-or-circuit-polarity\",\n carrierCountInferred: false,\n electronCountCalculated:\n false,\n photonCountCalculated:\n false,\n detectorBandwidthModeled:\n false\n };\n\n return stationarity.status ===\n \"established\"\n ? calculatedResult(\n result,\n \"sensor-stationary-responsivity-exposure-integration\",\n \"1.0.0\",\n assumptions\n )\n : approximationResult(\n result,\n \"sensor-stationary-responsivity-exposure-integration\",\n \"1.0.0\",\n [\n ...assumptions,\n stationarity.limitation!\n ]\n );\n}\n"]}
@@ -1,15 +1,12 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
4
- * missing required fields and incompatible scientific data fail at this boundary. Dark current is an
5
- * independently declared pre-compensation thermal electron rate. Exact-temperature or sampled linear
6
- * interpolation is supported only within declared applicability; no universal doubling-temperature law
7
- * is inferred. Population means remain approximations and do not model hot-pixel/DCNU structure.
8
- * Evaluate the declared temperature-dependent dark electron rate and integrate over the exact
9
- * photo-signal local exposure event. Dark current is an independently declared pre-compensation
10
- * thermal electron rate. Exact-temperature or sampled linear interpolation is supported only within
11
- * declared applicability; no universal doubling-temperature law is inferred. Population means remain
12
- * approximations and do not model hot-pixel/DCNU structure.
2
+ * Dark current: electrons generated by heat in a sensor site even with no light, and the dark charge
3
+ * they add over one exposure.
4
+ *
5
+ * The dark-current rate (electrons per second, before any compensation) is declared separately as a
6
+ * function of temperature. It is given either at an exact temperature or as samples, interpolated
7
+ * log-linearly (or with the legacy linear rule) only within the declared range. No universal
8
+ * "doubles every N degrees" law is assumed. Rates are population means, an approximation; hot pixels
9
+ * and DCNU (dark-current non-uniformity) are not modelled.
13
10
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
14
11
  * limits.
15
12
  */
@@ -34,6 +31,7 @@ export type SensorDarkCurrentTemperatureModel = {
34
31
  referenceTemperatureC: number;
35
32
  darkCurrentElectronsPerSecond: number;
36
33
  } | {
34
+ /** Legacy interpolation, linear in rate. Between samples of an exponential curve it gives values that are too high. */
37
35
  kind: "piecewise-linear-temperature-table";
38
36
  interpolation: "piecewise-linear";
39
37
  outsideRangeBehavior: "fail-closed";
@@ -41,6 +39,20 @@ export type SensorDarkCurrentTemperatureModel = {
41
39
  temperatureC: number;
42
40
  darkCurrentElectronsPerSecond: number;
43
41
  }[];
42
+ } | {
43
+ /**
44
+ * Linear interpolation of ln(rate) between neighbouring samples. That makes the rate exponential
45
+ * in temperature within each interval, matching the roughly exponential (Arrhenius, or
46
+ * "doubling temperature") behaviour of thermally generated dark current. Rates must be strictly
47
+ * positive. No single doubling temperature is imposed; each interval follows its own two samples.
48
+ */
49
+ kind: "log-linear-temperature-table";
50
+ interpolation: "log-linear";
51
+ outsideRangeBehavior: "fail-closed";
52
+ samples: readonly {
53
+ temperatureC: number;
54
+ darkCurrentElectronsPerSecond: number;
55
+ }[];
44
56
  };
45
57
  export interface SensorDarkCurrentProfile {
46
58
  schemaVersion: "0.1.0";
@@ -97,7 +109,7 @@ export interface SensorDarkCurrentCharge {
97
109
  exposure: SensorEqeExposureIntegration["componentEvidence"];
98
110
  };
99
111
  }
100
- /** Dark charge shares the exact temporal photo event, without a stationarity ID. */
112
+ /** Dark charge for the exact same time-resolved photo event. It has no stationarity ID. */
101
113
  export type SensorTemporalDarkCurrentCharge = Omit<SensorDarkCurrentCharge, "stationarityProfileId" | "temporalIntegrationId" | "componentEvidence"> & {
102
114
  stationarityProfileId?: never;
103
115
  temporalIntegrationId: string;
@@ -107,63 +119,55 @@ export type SensorTemporalDarkCurrentCharge = Omit<SensorDarkCurrentCharge, "sta
107
119
  };
108
120
  export type SensorPhotoDarkCurrentCharge = SensorDarkCurrentCharge | SensorTemporalDarkCurrentCharge;
109
121
  /**
110
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
111
- * missing required fields and incompatible scientific data fail at this boundary.
122
+ * Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,
123
+ * missing required fields and inconsistent scientific data are rejected.
112
124
  *
113
- * Dark current is an independently declared pre-compensation thermal electron rate. Exact-temperature
114
- * or sampled linear interpolation is supported only within declared applicability; no universal
115
- * doubling-temperature law is inferred. Population means remain approximations and do not model
116
- * hot-pixel/DCNU structure.
117
- * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
118
- * @returns SensorDarkCurrentProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
125
+ * The profile declares the dark-current rate (before compensation) against temperature, at an exact
126
+ * temperature or as samples. Interpolation (log-linear, or the legacy linear rule) is allowed only
127
+ * within the declared range. No universal doubling-temperature law is assumed.
128
+ * @param value - Untrusted data. TypeScript types alone are not validation.
129
+ * @returns The result. Success does not imply calibration.
119
130
  *
120
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
131
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
121
132
  */
122
133
  export declare function parseSensorDarkCurrentProfile(value: unknown): SensorDarkCurrentProfile;
123
134
  /**
124
- * Evaluate the declared temperature-dependent dark electron rate and integrate over the exact
125
- * photo-signal local exposure event.
135
+ * Evaluates the declared dark-current rate at the sensor temperature and integrates it over the exact
136
+ * local exposure of the photo signal.
126
137
  *
127
- * Dark current is an independently declared pre-compensation thermal electron rate. Exact-temperature
128
- * or sampled linear interpolation is supported only within declared applicability; no universal
129
- * doubling-temperature law is inferred. Population means remain approximations and do not model
130
- * hot-pixel/DCNU structure.
131
- * @param input - Omit<CalculateSensorDarkCurrentChargeInput, "exposure"> & { exposure: SensorEqeExposureIntegration }. See the linked contract for coordinate, unit and profile binding semantics.
132
- * @returns CalculationResult<SensorDarkCurrentCharge>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
138
+ * The rate is a population mean, an approximation. Hot pixels and DCNU (dark-current non-uniformity)
139
+ * are not modelled. No universal doubling-temperature law is assumed.
140
+ * @param input - Dark-current input whose exposure is a per-exposure photo signal (SensorEqeExposureIntegration); see `CalculateSensorDarkCurrentChargeInput`.
141
+ * @returns The result. Success does not imply calibration.
133
142
  *
134
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
143
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
135
144
  */
136
145
  export declare function calculateSensorDarkCurrentCharge(input: Omit<CalculateSensorDarkCurrentChargeInput, "exposure"> & {
137
146
  exposure: SensorEqeExposureIntegration;
138
147
  }): CalculationResult<SensorDarkCurrentCharge>;
139
148
  /**
140
- * Evaluate the declared temperature-dependent dark electron rate and integrate over the exact
141
- * photo-signal local exposure event.
149
+ * Evaluates the declared dark-current rate at the sensor temperature and integrates it over the exact
150
+ * local exposure of the photo signal.
142
151
  *
143
- * Dark current is an independently declared pre-compensation thermal electron rate. Exact-temperature
144
- * or sampled linear interpolation is supported only within declared applicability; no universal
145
- * doubling-temperature law is inferred. Population means remain approximations and do not model
146
- * hot-pixel/DCNU structure.
147
- * @param input - Omit<CalculateSensorDarkCurrentChargeInput, "exposure"> & { exposure: SensorEqeTemporalPhotoSignal }. See the linked contract for coordinate, unit and profile binding semantics.
148
- * @returns CalculationResult<SensorTemporalDarkCurrentCharge>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
152
+ * The rate is a population mean, an approximation. Hot pixels and DCNU (dark-current non-uniformity)
153
+ * are not modelled. No universal doubling-temperature law is assumed.
154
+ * @param input - Dark-current input whose exposure is a time-resolved photo signal (SensorEqeTemporalPhotoSignal); see `CalculateSensorDarkCurrentChargeInput`.
155
+ * @returns The result. Success does not imply calibration.
149
156
  *
150
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
157
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
151
158
  */
152
159
  export declare function calculateSensorDarkCurrentCharge(input: Omit<CalculateSensorDarkCurrentChargeInput, "exposure"> & {
153
160
  exposure: SensorEqeTemporalPhotoSignal;
154
161
  }): CalculationResult<SensorTemporalDarkCurrentCharge>;
155
162
  /**
156
- * Evaluate the declared temperature-dependent dark electron rate and integrate over the exact
157
- * photo-signal local exposure event.
163
+ * Evaluates the declared dark-current rate at the sensor temperature and integrates it over the exact
164
+ * local exposure of the photo signal.
158
165
  *
159
- * Dark current is an independently declared pre-compensation thermal electron rate. Exact-temperature
160
- * or sampled linear interpolation is supported only within declared applicability; no universal
161
- * doubling-temperature law is inferred. Population means remain approximations and do not model
162
- * hot-pixel/DCNU structure.
163
- * @param input - CalculateSensorDarkCurrentChargeInput<SensorEqePhotoExposure>. See the linked contract for coordinate, unit and profile binding semantics.
164
- * @returns CalculationResult<SensorPhotoDarkCurrentCharge>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
166
+ * The rate is a population mean, an approximation. Hot pixels and DCNU (dark-current non-uniformity)
167
+ * are not modelled. No universal doubling-temperature law is assumed.
168
+ * @param input - The input; see `CalculateSensorDarkCurrentChargeInput` for its fields, units and coordinates.
169
+ * @returns The result. Success does not imply calibration.
165
170
  *
166
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
171
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
167
172
  */
168
173
  export declare function calculateSensorDarkCurrentCharge(input: CalculateSensorDarkCurrentChargeInput<SensorEqePhotoExposure>): CalculationResult<SensorPhotoDarkCurrentCharge>;
169
- //# sourceMappingURL=dark-current.d.ts.map