@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-kernel-accelerator.js","sourceRoot":"","sources":["../../src/gpu/image-kernel-accelerator.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Optional image-kernel accelerator (#277). One object runs work on the execution backend the caller\n * asks for.\n * - `cpu-reference` uses the unchanged float64 engine code.\n * - `webgpu-f32` runs the project's own WGSL (WebGPU shader) kernels for the heaviest per-pixel loops.\n * Every result is labelled as a float32 approximation, with an error bound worked out in advance.\n * A requested WebGPU backend falls back to the CPU only if the caller chose\n * `fallback: \"cpu-reference\"`. The result label then names the backend that actually ran, and why.\n * See docs/WEBGPU.md.\n */\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { InvalidScientificResultError } from \"../core/validation.js\";\nimport { requireAllowlistedRecord } from \"../core/record-validation.js\";\nimport { createHostYieldGate } from \"../capture/host-yield-cadence.js\";\nimport { checkNativeRawIntegrity, createNativeRawDevelopmentTask, prepareNativeRawDevelopment, takeNativeRawOwnership,\n type NativeRawDevelopmentInput, type NativeRawDevelopmentOutput, type NativeRawDevelopmentProvider, type RawHighlightDiagnostics } from \"../capture/native-raw-development.js\";\nimport type { NativeRawOutput } from \"../capture/native-raw.js\";\nimport { resolveCaptureColorModel } from \"../color/capture-color.js\";\nimport { RAW_HIGHLIGHT_RECONSTRUCTION_START } from \"../color/sensor-color-development.js\";\nimport { transformOrientedRasterPointToNative } from \"../output/capture-geometry.js\";\nimport type { SdrRenderingProfile, SdrRenderingResult } from \"../output/sdr-rendering.js\";\nimport { calculateNativeCaptureSdrPlan, createNativeCaptureSdrTask, sdrOutputEncoding, validateNativeCaptureSdrTile, NATIVE_CAPTURE_SDR_LIMITS,\n type NativeCaptureSdrInput, type NativeCaptureSdrOutput, type NativeCaptureSdrProvider, type NativeCaptureSdrTileRequest } from \"../output/native-capture-sdr.js\";\nimport { convolveIrradianceRows, calculateIrradianceConvolutionPlan, type IrradianceConvolutionInput, type IrradianceConvolutionPlan } from \"../optics/irradiance-convolution.js\";\nimport { ImageKernelExecutionError, cpuExecution, float32Gamma, integerCodeBound, webGpuExecution,\n type ImageKernelBackend, type ImageKernelExecution, type ImageKernelFallbackReason, type ImageKernelRelativeErrorBound } from \"./image-kernel-execution.js\";\nimport { BUFFER_USAGE, GpuResourceScope, abortedError, acquireWebGpuRuntime, createComputePipeline, linearDispatch, runComputePass,\n type WebGpuRuntime } from \"./webgpu-runtime.js\";\nimport { CONVOLUTION_WORKGROUP_EDGE, IRRADIANCE_CONVOLUTION_WGSL, LINEAR_WORKGROUP_SIZE, RAW_DEVELOPMENT_WGSL, SDR_COUNTER, SDR_COUNTER_SLOTS,\n SDR_LUMINANCE_WGSL, SDR_TONE_MODE, SDR_WGSL } from \"./wgsl-kernels.js\";\nimport type { PackedSensorRawInput, PackedSensorRawResult } from \"../capture/packed-sensor-raw.js\";\nimport { simulateSensorRawOnCpu, simulateSensorRawOnGpu } from \"./sensor-stage-gpu.js\";\nimport { calculateTemporalExposureSumPlan, type TemporalExposureSumInput, type TemporalExposureSumPlan } from \"../motion/temporal-exposure-sum.js\";\nimport { sumTemporalExposureOnCpu, sumTemporalExposureOnGpu } from \"./temporal-sum-gpu.js\";\nimport type { ChartRadianceBatchInput, ChartRadianceBatchPlan } from \"../facade/chart-radiance-batch.js\";\nimport { evaluateChartRadianceOnCpu, evaluateChartRadianceOnGpu } from \"./chart-radiance-gpu.js\";\n\nexport interface ChartRadianceResult {\n plan: ChartRadianceBatchPlan;\n /** Row-major (query, column): float64 for `cpu-reference`, float32 for `webgpu-f32`. */\n values: Float64Array | Float32Array;\n columns: number;\n execution: ImageKernelExecution;\n /**\n * Queries whose float32 classification fell inside its bound, recomputed on the host with the\n * reference (then rounded to float32). Empty for `cpu-reference`.\n */\n hostRecomputedQueryIndices: Uint32Array;\n}\n\nexport interface AcceleratedPackedSensorRawResult extends PackedSensorRawResult {\n execution: ImageKernelExecution;\n /**\n * Region-relative indices of the flagged sites, ascending (empty for `cpu-reference`). Every other site\n * equals the reference; recomputing these sites with the reference makes the whole region bit-identical.\n */\n flaggedSiteIndices: Uint32Array;\n}\nexport interface TemporalExposureSumResult {\n plan: TemporalExposureSumPlan;\n /** Float64 for `cpu-reference`, float32 for `webgpu-f32`; row-major, same grid as the input. */\n values: Float64Array | Float32Array;\n execution: ImageKernelExecution;\n}\n\nexport interface ImageKernelAcceleratorOptions {\n /** Requested backend. `cpu-reference` is the reference and never touches WebGPU. */\n backend: ImageKernelBackend;\n /** Required with `webgpu-f32`: use the CPU reference (labelled) or fail when WebGPU cannot be acquired. */\n fallback?: \"cpu-reference\" | \"fail\";\n /** WebGPU entry point; defaults to `navigator.gpu`. Supply a worker's `navigator.gpu` explicitly if needed. */\n gpu?: unknown;\n powerPreference?: \"low-power\" | \"high-performance\";\n /** Largest single GPU band buffer in bytes (4 KiB up to the device limit); default min(64 MiB, device limit). Affects memory only, never results. */\n maximumBandBytes?: number;\n /** Aborts adapter/device acquisition. */\n signal?: AbortSignal;\n}\nexport interface ImageKernelRunOptions {\n signal?: AbortSignal;\n /** Yields to the host event loop between CPU reference chunks and GPU bands. Convolution, sensor and temporal stages; tasks keep their own yields. */\n yieldControl?: (signal: AbortSignal) => Promise<void>;\n}\nexport type ImageKernelAcceleratorState = \"ready\" | \"lost\" | \"disposed\";\nexport interface AcceleratedNativeCaptureSdrOutput extends NativeCaptureSdrOutput { execution: ImageKernelExecution }\nexport interface AcceleratedNativeRawDevelopmentOutput extends NativeRawDevelopmentOutput { execution: ImageKernelExecution }\nexport interface IrradianceConvolutionResult {\n plan: IrradianceConvolutionPlan;\n /** Float64 for `cpu-reference`, float32 for `webgpu-f32`; row-major, same grid as the input. */\n values: Float64Array | Float32Array;\n /** Float64 sums of the input and output samples. Their difference is the amount lost across the grid edge. */\n inputSum: number;\n outputSum: number;\n execution: ImageKernelExecution;\n}\n/** Runs one operation at a time. dispose() releases the device and every buffer. */\nexport interface ImageKernelAccelerator {\n readonly backend: ImageKernelBackend;\n readonly requestedBackend: ImageKernelBackend;\n readonly fallbackReason: ImageKernelFallbackReason | null;\n readonly state: ImageKernelAcceleratorState;\n renderNativeCaptureSdr(input: NativeCaptureSdrInput, provider: NativeCaptureSdrProvider, options?: ImageKernelRunOptions): Promise<AcceleratedNativeCaptureSdrOutput>;\n /** Takes ownership of `input.raw` exactly like `createNativeRawDevelopmentTask` (the caller's arrays are detached). */\n developNativeRaw(input: NativeRawDevelopmentInput, provider: NativeRawDevelopmentProvider | ((signal: AbortSignal) => Promise<void>),\n options?: ImageKernelRunOptions): Promise<AcceleratedNativeRawDevelopmentOutput>;\n convolveIrradiance(input: IrradianceConvolutionInput, options?: ImageKernelRunOptions): Promise<IrradianceConvolutionResult>;\n /** Sensor stage on typed arrays: seeded charge, read noise and ADC to RAW codes (see `simulatePackedSensorRaw`). */\n simulateSensorRaw(input: PackedSensorRawInput, options?: ImageKernelRunOptions): Promise<AcceleratedPackedSensorRawResult>;\n /** Exposure and motion as a weighted sum of shifted frames (see `calculateTemporalExposureSum`). */\n sumTemporalExposure(input: TemporalExposureSumInput, options?: ImageKernelRunOptions): Promise<TemporalExposureSumResult>;\n /** Chart scene radiance or its spectral integral at many frame points (see `calculateChartRadianceBatch`). */\n evaluateChartRadiance(input: ChartRadianceBatchInput, options?: ImageKernelRunOptions): Promise<ChartRadianceResult>;\n dispose(): void;\n}\n\nconst DEFAULT_BAND_BYTES = 64 * 1024 * 1024;\nconst MINIMUM_BAND_BYTES = 4096;\n/** Limit on multiply-adds per convolution dispatch, to stay clear of the GPU watchdog timeout. */\nconst MAXIMUM_CONVOLUTION_TAPS_PER_DISPATCH = 2 ** 30;\n/** Inputs whose float64 product with the rendering scale exceeds this are outside the float32 domain. */\nconst FLOAT32_SAFE_MAGNITUDE = 2 ** 120;\nconst FLOAT32_SUBNORMAL_LIMIT = 2 ** -126;\nconst NO_COUNTERS = (): number[] => new Array<number>(SDR_COUNTER_SLOTS).fill(0);\n\nfunction runOptions(value: ImageKernelRunOptions | undefined): ImageKernelRunOptions {\n if (value === undefined) return {};\n const r = requireAllowlistedRecord(value, [\"signal\", \"yieldControl\"], \"Invalid image-kernel run options.\");\n if ((r.signal !== undefined && (typeof r.signal !== \"object\" || r.signal === null || typeof (r.signal as AbortSignal).aborted !== \"boolean\")) ||\n (r.yieldControl !== undefined && typeof r.yieldControl !== \"function\")) {\n throw new InvalidConfigurationError(\"Invalid image-kernel run options.\");\n }\n return value;\n}\n\n/** Links an optional caller signal to an internal controller; `dispose` removes the listener. */\nfunction linkedAbort(signal: AbortSignal | undefined): { controller: AbortController; dispose: () => void } {\n const controller = new AbortController();\n if (!signal) return { controller, dispose: () => undefined };\n if (signal.aborted) { controller.abort(); return { controller, dispose: () => undefined }; }\n const listener = (): void => controller.abort();\n signal.addEventListener(\"abort\", listener, { once: true });\n return { controller, dispose: (): void => signal.removeEventListener(\"abort\", listener) };\n}\n\n/** Requests a backend. Never swaps backends silently: a fallback must be set in the options and is shown in every result label. */\nexport async function createImageKernelAccelerator(options: ImageKernelAcceleratorOptions): Promise<ImageKernelAccelerator> {\n const r = requireAllowlistedRecord(options, [\"backend\", \"fallback\", \"gpu\", \"powerPreference\", \"maximumBandBytes\", \"signal\"],\n \"Invalid image-kernel accelerator options.\");\n if ((r.backend !== \"cpu-reference\" && r.backend !== \"webgpu-f32\") ||\n (r.backend === \"webgpu-f32\" && r.fallback !== \"cpu-reference\" && r.fallback !== \"fail\") ||\n (r.backend === \"cpu-reference\" && r.fallback !== undefined) ||\n (r.powerPreference !== undefined && r.powerPreference !== \"low-power\" && r.powerPreference !== \"high-performance\") ||\n (r.maximumBandBytes !== undefined && (typeof r.maximumBandBytes !== \"number\" || !Number.isSafeInteger(r.maximumBandBytes) ||\n r.maximumBandBytes < MINIMUM_BAND_BYTES)) ||\n (r.signal !== undefined && (typeof r.signal !== \"object\" || r.signal === null || typeof (r.signal as AbortSignal).aborted !== \"boolean\"))) {\n throw new InvalidConfigurationError(\"Invalid image-kernel accelerator options: backend, explicit WebGPU fallback, power preference or band size.\");\n }\n const requested = r.backend;\n if (requested === \"cpu-reference\") return createAccelerator(requested, null, null, DEFAULT_BAND_BYTES);\n const gpu = \"gpu\" in r ? r.gpu : (globalThis as { navigator?: { gpu?: unknown } }).navigator?.gpu;\n const acquired = await acquireWebGpuRuntime(gpu, options.powerPreference, options.signal);\n if (\"failure\" in acquired) {\n if (r.fallback === \"fail\") throw new ImageKernelExecutionError(acquired.failure, acquired.message);\n return createAccelerator(requested, acquired.failure, null, DEFAULT_BAND_BYTES);\n }\n const runtime = acquired.runtime;\n const band = Math.min(options.maximumBandBytes ?? DEFAULT_BAND_BYTES, runtime.maximumStorageBindingBytes);\n return createAccelerator(requested, null, runtime, band);\n}\n\nfunction createAccelerator(requested: ImageKernelBackend, fallbackReason: ImageKernelFallbackReason | null,\n runtime: WebGpuRuntime | null, bandBytes: number): ImageKernelAccelerator {\n let disposed = false, busy = false;\n const pipelines = new Map<string, Promise<GPUComputePipeline>>();\n const backend: ImageKernelBackend = runtime ? \"webgpu-f32\" : \"cpu-reference\";\n function state(): ImageKernelAcceleratorState { return disposed ? \"disposed\" : runtime?.isLost() ? \"lost\" : \"ready\"; }\n function pipeline(gpu: WebGpuRuntime, label: string, code: string, signal: AbortSignal): Promise<GPUComputePipeline> {\n let pending = pipelines.get(label);\n if (!pending) {\n pending = createComputePipeline(gpu, label, code, undefined);\n pipelines.set(label, pending);\n pending.catch(() => pipelines.delete(label));\n }\n return gpu.guard(pending, signal);\n }\n /** Runs one operation at a time, and turns aborts, disposal and device loss into domain errors. */\n async function operate<T>(signal: AbortSignal | undefined, body: (abort: AbortController) => Promise<T>): Promise<T> {\n if (disposed) throw new ImageKernelExecutionError(\"disposed\", \"The image-kernel accelerator was disposed.\");\n if (runtime?.isLost()) throw new ImageKernelExecutionError(\"device-lost\", \"The WebGPU device was lost; create a new accelerator.\");\n if (busy) throw new ImageKernelExecutionError(\"busy\", \"The image-kernel accelerator runs one operation at a time.\");\n busy = true;\n const link = linkedAbort(signal);\n try {\n if (link.controller.signal.aborted) throw abortedError();\n return await body(link.controller);\n } catch (error) {\n link.controller.abort();\n if (disposed) throw new ImageKernelExecutionError(\"disposed\", \"The image-kernel accelerator was disposed; no output is available.\");\n if (signal?.aborted && !(error instanceof ImageKernelExecutionError && error.reason === \"device-lost\")) throw abortedError();\n throw error;\n } finally {\n link.dispose();\n busy = false;\n }\n }\n const cpuLabel = (): ImageKernelExecution => cpuExecution(requested, fallbackReason);\n return {\n backend, requestedBackend: requested, fallbackReason,\n get state(): ImageKernelAcceleratorState { return state(); },\n async renderNativeCaptureSdr(input, provider, options): Promise<AcceleratedNativeCaptureSdrOutput> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n if (!runtime) {\n const task = createNativeCaptureSdrTask(input, provider);\n const cancel = (): void => task.cancel();\n abort.signal.addEventListener(\"abort\", cancel, { once: true });\n try { await task.run(); return { ...task.takeOutput(), execution: cpuLabel() }; }\n finally { abort.signal.removeEventListener(\"abort\", cancel); task.dispose(); }\n }\n return renderSdrOnGpu(runtime, bandBytes, input, provider, abort, (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async developNativeRaw(input, provider, options): Promise<AcceleratedNativeRawDevelopmentOutput> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n if (!runtime) {\n const task = createNativeRawDevelopmentTask(input, provider);\n const cancel = (): void => task.cancel();\n abort.signal.addEventListener(\"abort\", cancel, { once: true });\n try { await task.run(); return { ...task.takeOutput(), execution: cpuLabel() }; }\n finally { abort.signal.removeEventListener(\"abort\", cancel); task.dispose(); }\n }\n return developRawOnGpu(runtime, bandBytes, input, provider, abort, (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async convolveIrradiance(input, options): Promise<IrradianceConvolutionResult> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n const plan = calculateIrradianceConvolutionPlan(input);\n if (!runtime) return convolveOnCpu(plan, input, abort, run.yieldControl, cpuLabel());\n return convolveOnGpu(runtime, bandBytes, plan, input, abort, run.yieldControl,\n (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async simulateSensorRaw(input, options): Promise<AcceleratedPackedSensorRawResult> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n if (!runtime) return simulateSensorRawOnCpu(input, abort, run.yieldControl, cpuLabel());\n return simulateSensorRawOnGpu(runtime, bandBytes, input, abort, run.yieldControl, (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async sumTemporalExposure(input, options): Promise<TemporalExposureSumResult> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n const plan = calculateTemporalExposureSumPlan(input);\n if (!runtime) return sumTemporalExposureOnCpu(plan, input, abort, run.yieldControl, cpuLabel());\n return sumTemporalExposureOnGpu(runtime, bandBytes, plan, input, abort, run.yieldControl,\n (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n async evaluateChartRadiance(input, options): Promise<ChartRadianceResult> {\n const run = runOptions(options);\n return operate(run.signal, async (abort) => {\n if (!runtime) return evaluateChartRadianceOnCpu(input, abort, run.yieldControl, cpuLabel());\n return evaluateChartRadianceOnGpu(runtime, bandBytes, input, abort, run.yieldControl, (label, code) => pipeline(runtime, label, code, abort.signal));\n });\n },\n dispose(): void {\n if (disposed) return;\n disposed = true;\n pipelines.clear();\n runtime?.destroy();\n }\n };\n}\n\ntype PipelineSource = (label: string, code: string) => Promise<GPUComputePipeline>;\n\nfunction checkAbort(abort: AbortController): void {\n if (abort.signal.aborted) throw abortedError();\n}\n\nfunction sumOf(values: Float32Array | Float64Array): number {\n let sum = 0;\n for (let i = 0; i < values.length; i++) sum += values[i]!;\n return sum;\n}\n\nasync function convolveOnCpu(plan: IrradianceConvolutionPlan, input: IrradianceConvolutionInput, abort: AbortController,\n yieldControl: ImageKernelRunOptions[\"yieldControl\"], execution: ImageKernelExecution): Promise<IrradianceConvolutionResult> {\n // Snapshot so a caller mutation during host yields cannot change the reference.\n const samples = input.samples.slice(), kernels = input.kernels.slice();\n const values = new Float64Array(plan.width * plan.height);\n const rowsPerChunk = Math.max(1, Math.floor(2_000_000 / Math.max(1, plan.width * plan.tapCount)));\n const gate = createHostYieldGate();\n for (let y = 0; y < plan.height; y += rowsPerChunk) {\n checkAbort(abort);\n const end = Math.min(plan.height, y + rowsPerChunk);\n convolveIrradianceRows(plan, samples, kernels, y, end, values.subarray(y * plan.width, end * plan.width));\n if (yieldControl && gate.due()) { await yieldControl(abort.signal); gate.restart(); }\n }\n checkAbort(abort);\n return { plan, values, inputSum: sumOf(samples), outputSum: sumOf(values), execution };\n}\n\nasync function convolveOnGpu(runtime: WebGpuRuntime, bandBytes: number, plan: IrradianceConvolutionPlan, input: IrradianceConvolutionInput,\n abort: AbortController, yieldControl: ImageKernelRunOptions[\"yieldControl\"], pipelines: PipelineSource): Promise<IrradianceConvolutionResult> {\n const { width, height, kernelRadius: r, tapCount } = plan;\n const samples = new Float32Array(input.samples), kernels = new Float32Array(input.kernels), inputSum = sumOf(input.samples);\n const errorBound = irradianceConvolutionErrorBound(plan, input.kernels);\n if (kernels.byteLength > runtime.maximumStorageBindingBytes) {\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"PSF kernels exceed the device's storage binding limit.\");\n }\n const rowBytes = width * 4;\n let rows = Math.min(height, Math.floor(bandBytes / rowBytes) - 2 * r, Math.floor(MAXIMUM_CONVOLUTION_TAPS_PER_DISPATCH / (width * tapCount)));\n if (rows < 1) {\n if ((1 + 2 * r) * rowBytes > runtime.maximumStorageBindingBytes) {\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"One convolution band exceeds the device's storage binding limit.\");\n }\n rows = 1;\n }\n const values = new Float32Array(width * height);\n const pipeline = await pipelines(\"photivra-irradiance-convolution\", IRRADIANCE_CONVOLUTION_WGSL);\n const scope = new GpuResourceScope(runtime);\n try {\n const kernelBuffer = scope.upload(\"photivra-psf-kernels\", kernels, BUFFER_USAGE.STORAGE);\n const gate = createHostYieldGate();\n for (let y0 = 0; y0 < height; y0 += rows) {\n checkAbort(abort);\n const y1 = Math.min(height, y0 + rows), in0 = Math.max(0, y0 - r), in1 = Math.min(height, y1 + r);\n const params = new Uint32Array([width, height, r, 2 * r + 1, plan.patchWidth, plan.patchHeight, plan.patchColumns, plan.patchRows,\n y0, y1 - y0, in0, tapCount]);\n // Per-band scope: every buffer of the band, its readback included, is destroyed before the next band.\n const bandScope = new GpuResourceScope(runtime);\n try {\n const band = bandScope.upload(\"photivra-irradiance-band\", samples.subarray(in0 * width, in1 * width), BUFFER_USAGE.STORAGE);\n const result = bandScope.buffer(\"photivra-irradiance-result\", (y1 - y0) * rowBytes, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const uniform = bandScope.upload(\"photivra-irradiance-params\", params, BUFFER_USAGE.UNIFORM);\n const bindGroup = runtime.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [\n { binding: 0, resource: { buffer: uniform } }, { binding: 1, resource: { buffer: band } },\n { binding: 2, resource: { buffer: kernelBuffer } }, { binding: 3, resource: { buffer: result } }] });\n const groups: [number, number] = [Math.ceil(width / CONVOLUTION_WORKGROUP_EDGE), Math.ceil((y1 - y0) / CONVOLUTION_WORKGROUP_EDGE)];\n const [data] = await runComputePass(runtime, bandScope, pipeline, bindGroup, groups, [{ buffer: result, bytes: (y1 - y0) * rowBytes }], abort.signal);\n values.set(new Float32Array(data!, 0, (y1 - y0) * width), y0 * width);\n } finally {\n bandScope.release();\n }\n if (yieldControl && gate.due()) { await yieldControl(abort.signal); gate.restart(); }\n }\n } finally {\n scope.release();\n }\n checkAbort(abort);\n const execution = webGpuExecution(errorBound, 0);\n return { plan, values, inputSum, outputSum: sumOf(values), execution };\n}\n\n/**\n * A-priori float32 bound for every convolution output (all terms are non-negative):\n * |v_f32 − v_ref| ≤ (γ_{T+3} + 2^-40)·v_ref + 2T·2^-126 + 2·S_max·Σ_t max_p w_{p,t}·[0 < w_{p,t} < 2^-126].\n * The last term covers weights below the float32 normal range: the host conversion may round them to zero or\n * a subnormal (|f32(w) − w| ≤ w) and the GPU may flush them, so their whole product w·s (s ≤ S_max) is at risk,\n * with a factor 2 for the conversion and the later roundings. It is zero when no such weight exists.\n */\nexport function irradianceConvolutionErrorBound(plan: IrradianceConvolutionPlan, kernels: Float32Array | Float64Array): ImageKernelRelativeErrorBound {\n const { tapCount } = plan, patches = kernels.length / tapCount;\n let atRisk = 0;\n for (let t = 0; t < tapCount; t++) {\n let largest = 0;\n for (let p = 0; p < patches; p++) {\n const w = kernels[p * tapCount + t]!;\n if (w < FLOAT32_SUBNORMAL_LIMIT && w > largest) largest = w;\n }\n atRisk += largest;\n }\n return { kind: \"relative-to-reference\", relative: float32Gamma(tapCount + 3) + 2 ** -40,\n absolute: 2 * tapCount * FLOAT32_SUBNORMAL_LIMIT + 2 * plan.maximumSampleMagnitude * atRisk };\n}\n\n/** Uniform values of a tone curve for the float32 kernels (see wgsl-kernels.ts, LUMINANCE_FUNCTIONS). */\ninterface ToneUniform { mode: number; tone: [number, number, number, number]; lum: [number, number, number, number] }\n\n/**\n * The tone curve's kernel constants. Luminance curves run on the GPU within this float32 domain:\n * extended Reinhard with Lw ≥ 2^-20; Naka–Rushton with exponent n ≥ 1 (below 1 its ratio f(L)/L is\n * unbounded as L → 0, so no useful bound exists near L = 0), 1/g(Lw) ≤ 2^60 and σⁿ ≥ 2^-60.\n * @internal\n */\nexport function toneUniform(profile: Pick<SdrRenderingProfile, \"toneCurve\" | \"toneCurveParameters\">): ToneUniform {\n const [kr, kg, kb] = resolveCaptureColorModel().cameraRgbToXyz[1]! as readonly number[];\n const p = profile.toneCurveParameters;\n if (profile.toneCurve === \"identity\" || profile.toneCurve === \"positive-reinhard-per-channel\") {\n return { mode: SDR_TONE_MODE.perChannel, tone: [0, 0, 0, 0], lum: [0, 0, 0, 0] };\n }\n if (profile.toneCurve === \"extended-reinhard-luminance\" && p && !(\"exponent\" in p)) {\n if (!(p.whiteLuminance >= 2 ** -20)) throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"Extended Reinhard white luminance below 2^-20 is outside the float32 domain.\");\n return { mode: SDR_TONE_MODE.extendedReinhard, tone: [1 / (p.whiteLuminance * p.whiteLuminance), 0, 0, 0], lum: [kr!, kg!, kb!, 1] };\n }\n if (profile.toneCurve === \"naka-rushton-luminance\" && p && \"exponent\" in p) {\n const q = p as Extract<NonNullable<SdrRenderingProfile[\"toneCurveParameters\"]>, { exponent: number }>, n = q.exponent, sigma = q.semiSaturation;\n if (!(n >= 1)) {\n throw new ImageKernelExecutionError(\"unsupported-on-backend\", \"webgpu-f32 implements Naka–Rushton with exponent ≥ 1; use cpu-reference below 1.\");\n }\n const white = 1 / (1 + (sigma / q.whiteLuminance) ** n), sigmaN = sigma ** n;\n if (!(1 / white <= 2 ** 60 && sigmaN >= 2 ** -60)) {\n throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"Naka–Rushton parameters are outside the float32 domain.\");\n }\n return { mode: SDR_TONE_MODE.nakaRushton, tone: [sigma, n, 1 / white, sigmaN], lum: [kr!, kg!, kb!, Math.max(1, n - 1)] };\n }\n throw new InvalidConfigurationError(\"Unsupported SDR rendering profile.\");\n}\n\n/** Adds one band's counters into the run's; the luminance bound slot keeps the largest float32 value. */\nfunction mergeCounters(counters: number[], band: Uint32Array): void {\n band.forEach((value, i) => {\n if (i === SDR_COUNTER.linearBoundBits) counters[i] = Math.max(counters[i]!, new Float32Array(new Uint32Array([value]).buffer)[0]!);\n else counters[i]! += value;\n });\n}\n\n/** Fails closed when a luminance-toned sample left the float32 domain. */\nfunction requireLuminanceDomain(counters: readonly number[]): void {\n if (counters[SDR_COUNTER.luminanceDomain]! > 0) {\n throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"A luminance-toned sample is outside the float32 execution domain.\");\n }\n}\n\nfunction sdrDiagnostics(counters: readonly number[], captureSaturation: SdrRenderingResult[\"diagnostics\"][\"captureSaturation\"]): SdrRenderingResult[\"diagnostics\"] {\n return { renderingNegativeSampleCount: counters[SDR_COUNTER.negative]!, renderingAboveReferenceSampleCount: counters[SDR_COUNTER.above]!,\n toneChangedSampleCount: counters[SDR_COUNTER.changed]!, gamutClippedLowSampleCount: counters[SDR_COUNTER.low]!,\n gamutClippedHighSampleCount: counters[SDR_COUNTER.high]!, captureSaturation };\n}\n\n/** Throws (fails closed) when a reject-mode gamut decision is out of range or cannot be decided in float32. */\nfunction requireGamutDecision(reject: boolean, counters: readonly number[]): void {\n if (counters[SDR_COUNTER.outOfGamut]! > 0) throw new InvalidConfigurationError(\"Tone output exceeds the declared SDR gamut range.\");\n if (reject && counters[SDR_COUNTER.gamutUncertain]! > 0) {\n throw new ImageKernelExecutionError(\"indeterminate-float32-classification\",\n \"Reject-out-of-range gamut handling is not decidable in float32 for at least one sample; use cpu-reference.\");\n }\n}\n\nasync function dispatchSdrBand(runtime: WebGpuRuntime, pipeline: GPUComputePipeline, staging: Float32Array<ArrayBuffer>, count: number,\n params: ArrayBuffer, abort: AbortController, invocations: number): Promise<{ codes: Uint32Array; counters: Uint32Array }> {\n const scope = new GpuResourceScope(runtime);\n try {\n const source = scope.upload(\"photivra-sdr-source\", staging.subarray(0, count), BUFFER_USAGE.STORAGE);\n const codes = scope.buffer(\"photivra-sdr-codes\", count * 4, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const counters = scope.upload(\"photivra-sdr-counters\", new Uint32Array(SDR_COUNTER_SLOTS), BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const uniform = scope.upload(\"photivra-sdr-params\", new Uint8Array(params), BUFFER_USAGE.UNIFORM);\n const bindGroup = runtime.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [\n { binding: 0, resource: { buffer: uniform } }, { binding: 1, resource: { buffer: source } },\n { binding: 2, resource: { buffer: codes } }, { binding: 3, resource: { buffer: counters } }] });\n const [codeData, counterData] = await runComputePass(runtime, scope, pipeline, bindGroup,\n linearDispatch(invocations, LINEAR_WORKGROUP_SIZE, runtime.maximumWorkgroupsPerDimension),\n [{ buffer: codes, bytes: count * 4 }, { buffer: counters, bytes: SDR_COUNTER_SLOTS * 4 }], abort.signal);\n return { codes: new Uint32Array(codeData!, 0, count), counters: new Uint32Array(counterData!, 0, SDR_COUNTER_SLOTS) };\n } finally {\n scope.release();\n }\n}\n\nasync function renderSdrOnGpu(runtime: WebGpuRuntime, bandBytes: number, input: NativeCaptureSdrInput, provider: NativeCaptureSdrProvider,\n abort: AbortController, pipelines: PipelineSource): Promise<AcceleratedNativeCaptureSdrOutput> {\n const plan = calculateNativeCaptureSdrPlan(input);\n if (!provider || typeof provider.readTile !== \"function\" || typeof provider.yieldControl !== \"function\") {\n throw new InvalidConfigurationError(\"Native SDR requires a tile reader and event-loop yield.\");\n }\n if (provider.onProgress !== undefined && typeof provider.onProgress !== \"function\") throw new InvalidConfigurationError(\"Native SDR onProgress must be a function.\");\n const readTile = provider.readTile.bind(provider), yieldControl = provider.yieldControl.bind(provider), onProgress = provider.onProgress?.bind(provider);\n const tone = toneUniform(plan.profile), luminance = tone.mode !== SDR_TONE_MODE.perChannel;\n const plane = plan.capture.planes.find(p => p.id === plan.sourcePlaneId)!;\n if (plane.storage.kind === \"inline-float64\") throw new InvalidConfigurationError(\"External native source required.\");\n const storage = plane.storage, profile = plan.profile, width = plane.pixelWidth, height = plane.pixelHeight;\n const scale = 2 ** profile.renderingExposureEv / plane.referenceWhiteValue, maximum = 2 ** profile.bitDepth - 1;\n const scale32 = Math.fround(scale);\n if (!(scale32 > 0 && Number.isFinite(scale32))) throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"SDR scale is outside float32.\");\n const tileHeight = NATIVE_CAPTURE_SDR_LIMITS.tileHeight, rowSamples = width * 3;\n const bandRows = Math.max(tileHeight, Math.floor(bandBytes / (rowSamples * 4) / tileHeight) * tileHeight);\n if (Math.min(bandRows, height) * rowSamples * 4 > runtime.maximumStorageBindingBytes) {\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"One SDR tile row exceeds the device's storage binding limit.\");\n }\n const reinhard = profile.toneCurve === \"positive-reinhard-per-channel\", reject = profile.gamutHandling === \"reject-out-of-range\";\n const params = new ArrayBuffer(luminance ? 64 : 32), words = new Uint32Array(params), floats = new Float32Array(params);\n if (luminance) {\n words[1] = reject ? 1 : 0; words[2] = tone.mode; floats[4] = scale32; floats[5] = maximum; floats[6] = 2 ** -20;\n floats.set(tone.tone, 8); floats.set(tone.lum, 12);\n } else {\n words[1] = reinhard ? 1 : 0; words[2] = reject ? 1 : 0; floats[4] = scale32; floats[5] = maximum; floats[6] = 2 ** -20;\n }\n const pipeline = luminance ? await pipelines(\"photivra-sdr-luminance\", SDR_LUMINANCE_WGSL) : await pipelines(\"photivra-sdr\", SDR_WGSL);\n const codes = profile.bitDepth === 8 ? new Uint8Array(plan.outputBytes) : new Uint16Array(plan.outputBytes / 2);\n const staging = new Float32Array(Math.min(bandRows, height) * rowSamples);\n const counters = NO_COUNTERS();\n let hostUncertain = 0, bandStart = 0, completed = 0;\n try {\n for (let y = 0; y < height; y += tileHeight) {\n for (let x = 0; x < width; x += NATIVE_CAPTURE_SDR_LIMITS.tileWidth) {\n checkAbort(abort);\n const request: NativeCaptureSdrTileRequest = Object.freeze({ captureId: plan.capture.captureId, sourcePlaneId: plane.id,\n artifactId: storage.artifactId, sha256: storage.sha256, x, y,\n width: Math.min(NATIVE_CAPTURE_SDR_LIMITS.tileWidth, width - x), height: Math.min(tileHeight, height - y) });\n const tile = await readTile(request, abort.signal);\n checkAbort(abort);\n const { source, stride } = validateNativeCaptureSdrTile(tile, request, plane);\n completed++;\n for (let row = 0; row < request.height; row++) {\n const out = (y + row - bandStart) * rowSamples + x * 3;\n for (let i = 0, from = row * stride; i < request.width * 3; i++) {\n const s = source[from + i]!, magnitude = Math.abs(s), exposed = magnitude * scale;\n // The reference's own failure precedence first, then the float32 domain.\n if (!Number.isFinite(exposed)) throw new InvalidScientificResultError(\"Rendering exposure produced a non-finite sample.\");\n if (magnitude > FLOAT32_SAFE_MAGNITUDE || exposed > FLOAT32_SAFE_MAGNITUDE) {\n throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"SDR sample magnitude is outside the float32 execution domain.\");\n }\n if (magnitude !== 0 && magnitude < FLOAT32_SUBNORMAL_LIMIT) hostUncertain++;\n staging[out + i] = s;\n }\n }\n await yieldControl(abort.signal);\n checkAbort(abort);\n }\n const bandEnd = Math.min(height, y + tileHeight);\n if (bandEnd - bandStart >= bandRows || bandEnd === height) {\n const count = (bandEnd - bandStart) * rowSamples;\n words[0] = luminance ? count / 3 : count;\n const result = await dispatchSdrBand(runtime, pipeline, staging, count, params, abort, words[0]!);\n mergeCounters(counters, result.counters);\n requireLuminanceDomain(counters);\n requireGamutDecision(reject, counters);\n codes.set(result.codes, bandStart * rowSamples);\n bandStart = bandEnd;\n // Progress reports tiles whose codes are committed, in the reference's tile units.\n onProgress?.({ completedTileCount: completed, totalTileCount: plan.tileCount });\n }\n }\n } catch (error) {\n codes.fill(0);\n throw error;\n }\n const uncertainty = counters[SDR_COUNTER.uncertain]! + hostUncertain;\n // Per-channel linear bound: source/scale/product rounding, Reinhard add/divide, plus float64 reference slack (L ≤ 1).\n // Luminance curves: the largest per-sample bound the kernel evaluated from the a-priori formula (docs/WEBGPU.md).\n const linearBound = luminance ? counters[SDR_COUNTER.linearBoundBits]! * (1 + 2 ** -20) : float32Gamma(6);\n const execution = webGpuExecution(integerCodeBound(maximum, linearBound), uncertainty);\n return { plan, integerSamples: codes, diagnostics: sdrDiagnostics(counters, \"not-consumed\"), outputEncoding: sdrOutputEncoding(maximum),\n displayAdaptation: { kind: \"external-platform\", applied: false, displayCapabilities: \"unknown\" }, execution };\n}\n\n/** Integer native-site affine map of oriented output pixels, mirroring the reference's centre-point transform. */\nfunction orientedToNativeAffine(plan: NativeRawOutput[\"plan\"]): { ox: number; oy: number; axx: number; axy: number; ayx: number; ayy: number } {\n const g = plan.exposure.resolvedGeometry, crop = g.output.cropRect, active = g.activeCapture.nativeRect;\n const W = g.activeCapture.raster.pixelWidth, H = g.activeCapture.raster.pixelHeight, orientation = plan.exposure.geometry.orientation;\n const m = orientation === \"landscape\" ? { ox: crop.x, oy: crop.y, axx: 1, axy: 0, ayx: 0, ayy: 1 }\n : orientation === \"portrait-clockwise\" ? { ox: crop.y, oy: H - crop.x - 1, axx: 0, axy: 1, ayx: -1, ayy: 0 }\n : orientation === \"landscape-inverted\" ? { ox: W - crop.x - 1, oy: H - crop.y - 1, axx: -1, axy: 0, ayx: 0, ayy: -1 }\n : { ox: W - crop.y - 1, oy: crop.x, axx: 0, axy: -1, ayx: 1, ayy: 0 };\n const affine = { ...m, ox: m.ox + active.x, oy: m.oy + active.y };\n for (const [i, j] of [[0, 0], [crop.width - 1, 0], [0, crop.height - 1], [crop.width - 1, crop.height - 1]] as const) {\n const q = transformOrientedRasterPointToNative({ point: { x: crop.x + i + .5, y: crop.y + j + .5 }, nativeRaster: g.activeCapture.raster, orientation });\n if (Math.floor(q.x) + active.x !== affine.ox + affine.axx * i + affine.axy * j || Math.floor(q.y) + active.y !== affine.oy + affine.ayx * i + affine.ayy * j) {\n throw new InvalidConfigurationError(\"Oriented output does not map affinely onto native sites.\");\n }\n }\n return affine;\n}\n\nfunction rowSumNorm(matrix: readonly (readonly number[])[]): number {\n return Math.max(...matrix.map(row => row.reduce((sum, v) => sum + Math.abs(v), 0)));\n}\n\n/** Inputs of the a-priori float32 forward-error bound for packed RAW development (see docs/WEBGPU.md). */\nexport interface RawDevelopmentBoundInput {\n maximumTaps: number; maximumWeightSum: number; maximumSiteMagnitude: number; maximumGain: number;\n reconstruct: boolean; cameraToXyzNorm: number; xyzToRgbNorm: number; scale: number;\n}\n/**\n * Forward-error bounds (Higham γ_k, binary32) through the development chain: channel sums → gains →\n * highlight clip/blend → camera→XYZ → XYZ→linear sRGB → rendering exposure. Returns the bound on the\n * exposed value, and the classification bands for the white-balance clip and reconstruction-start\n * decisions. Internal; exported only for unit tests.\n */\nexport function rawDevelopmentErrorBounds(b: RawDevelopmentBoundInput): { exposed: number; gain: number; channel: number } {\n const C = b.maximumWeightSum * b.maximumSiteMagnitude, U = b.maximumGain * C, Bmax = Math.max(U, b.maximumGain);\n const deltaC = float32Gamma(b.maximumTaps + 2) * C + float32Gamma(1);\n const deltaU = b.maximumGain * deltaC + float32Gamma(2) * U;\n const deltaT = (deltaC + float32Gamma(3)) / (1 - RAW_HIGHLIGHT_RECONSTRUCTION_START);\n const deltaB = b.reconstruct ? 3 * deltaU + 2 * Bmax * deltaT + 2 * float32Gamma(4) * Bmax + float32Gamma(1) * b.maximumGain\n : deltaU + float32Gamma(1) * b.maximumGain;\n const deltaXyz = b.cameraToXyzNorm * (deltaB + float32Gamma(4) * Bmax);\n const deltaRgb = b.xyzToRgbNorm * (deltaXyz + float32Gamma(4) * b.cameraToXyzNorm * Bmax);\n const exposed = b.scale * (deltaRgb + float32Gamma(2) * b.xyzToRgbNorm * b.cameraToXyzNorm * Bmax);\n return { exposed, gain: deltaU + float32Gamma(1) * b.maximumGain, channel: deltaC + float32Gamma(1) };\n}\n\nasync function developRawOnGpu(runtime: WebGpuRuntime, bandBytes: number, input: NativeRawDevelopmentInput,\n provider: NativeRawDevelopmentProvider | ((signal: AbortSignal) => Promise<void>), abort: AbortController,\n pipelines: PipelineSource): Promise<AcceleratedNativeRawDevelopmentOutput> {\n const hooks = typeof provider === \"function\" ? { yieldControl: provider } : provider;\n if (!hooks || typeof hooks.yieldControl !== \"function\" || (hooks.onProgress !== undefined && typeof hooks.onProgress !== \"function\")) {\n throw new InvalidConfigurationError(\"Development requires a host event-loop yield.\");\n }\n const yieldControl = hooks.yieldControl.bind(hooks), onProgress = hooks.onProgress?.bind(hooks);\n // Run the reference's own synchronous input-limit, halo and CFA checks, then the same RAW ownership transfer.\n const v = prepareNativeRawDevelopment(input);\n const tone = toneUniform(v.profile), luminance = tone.mode !== SDR_TONE_MODE.perChannel;\n if (v.border !== \"reject\") {\n throw new ImageKernelExecutionError(\"unsupported-on-backend\",\n \"webgpu-f32 develops with rejected borders only; use cpu-reference for borderHandling \\\"mirror\\\".\");\n }\n const plan = v.plan, layout = plan.frame.colorSamplingProfile.layout, native = plan.exposure.geometry.nativeRaster;\n if (layout.kind !== \"periodic-mosaic\") throw new InvalidConfigurationError(\"Development requires periodic CFA.\");\n const affine = orientedToNativeAffine(plan);\n const raw = takeNativeRawOwnership(input.raw, plan);\n const rw = layout.repeatWidthSites, rh = layout.repeatHeightSites, nativeWidth = native.pixelWidth, nativeHeight = native.pixelHeight;\n const outWidth = v.raster.pixelWidth, outHeight = v.raster.pixelHeight, profile = v.profile, development = v.development;\n const tilesPerRow = Math.ceil(outWidth / 256), totalTileCount = tilesPerRow * outHeight;\n let codes: Uint8Array | Uint16Array | null = null;\n const release = (): void => {\n raw.codes.fill(0); raw.blackLevels.fill(0); raw.digitalSaturationCodes.fill(0); raw.saturationFlags.fill(0); raw.effectiveSaturationCodes.fill(0);\n codes?.fill(0);\n };\n const scope = new GpuResourceScope(runtime);\n try {\n // Reference integrity check (bounded chunks with host yields), then the largest normalized site magnitude.\n const gate = createHostYieldGate(), rowsPerChunk = Math.max(1, Math.floor((1 << 18) / nativeWidth));\n for (let y = 0; y < nativeHeight; y += rowsPerChunk) {\n checkAbort(abort);\n checkNativeRawIntegrity(raw, nativeWidth, rw, rh, y, Math.min(nativeHeight, y + rowsPerChunk));\n if (gate.due()) { await yieldControl(abort.signal); checkAbort(abort); gate.restart(); }\n }\n const white = raw.effectiveSaturationCodes;\n // The reference's site normalization (raw-development-kernel.ts), evaluated in float64.\n const normalizedSite = (i: number, x: number, y: number): number => {\n const code = raw.codes[i]!, top = white[(y % rh) * rw + x % rw]!, black = raw.blackLevels[i]!;\n return raw.saturationFlags[i]! !== 0 || code >= top ? 1 : (code - black) / (top - black);\n };\n let maximumSiteMagnitude = 0;\n for (let y = 0, i = 0; y < nativeHeight; y++) for (let x = 0; x < nativeWidth; x++, i++) {\n const m = Math.abs(normalizedSite(i, x, y));\n if (m > maximumSiteMagnitude) maximumSiteMagnitude = m;\n }\n // CFA kernel table: phase-major, channel-minor (start, count) ranges into (offsetX, offsetY, weight) taps.\n const tapList: number[][] = [], ranges = new Uint32Array(v.phases.length * 6);\n let halo = 0, maximumTaps = 0, maximumWeightSum = 0;\n v.phases.forEach((phase, p) => phase.profile.kernels.forEach((kernel, c) => {\n ranges[(p * 3 + c) * 2] = tapList.length; ranges[(p * 3 + c) * 2 + 1] = kernel.contributions.length;\n maximumTaps = Math.max(maximumTaps, kernel.contributions.length);\n let weights = 0;\n for (const t of kernel.contributions) {\n tapList.push([t.offsetX, t.offsetY, t.weight]);\n halo = Math.max(halo, Math.abs(t.offsetX), Math.abs(t.offsetY));\n weights += Math.abs(t.weight);\n }\n maximumWeightSum = Math.max(maximumWeightSum, weights);\n }));\n const tapBuffer = new ArrayBuffer(Math.max(1, tapList.length) * 16), tapInts = new Int32Array(tapBuffer), tapFloats = new Float32Array(tapBuffer);\n tapList.forEach(([ox, oy, w], i) => { tapInts[i * 4] = ox!; tapInts[i * 4 + 1] = oy!; tapFloats[i * 4 + 2] = w!; });\n const gains = development.appliedGains, clipLevel = Math.min(...gains), M = development.cameraToXyz, X = resolveCaptureColorModel().xyzToCameraRgb;\n const reconstruct = development.highlightMode === \"reconstruct\";\n const scale = 2 ** profile.renderingExposureEv, maximum = 2 ** profile.bitDepth - 1;\n const bounds = rawDevelopmentErrorBounds({ maximumTaps, maximumWeightSum, maximumSiteMagnitude, maximumGain: Math.max(...gains),\n reconstruct, cameraToXyzNorm: rowSumNorm(M), xyzToRgbNorm: rowSumNorm(X), scale });\n const band = Math.fround(bounds.exposed * (1 + 2 ** -20));\n if (!Number.isFinite(band) || bounds.exposed > 1 || maximumSiteMagnitude * maximumWeightSum * Math.max(...gains) * scale > FLOAT32_SAFE_MAGNITUDE) {\n throw new ImageKernelExecutionError(\"unsupported-float32-domain\", \"Development values are outside the float32 execution domain.\");\n }\n const reinhard = profile.toneCurve === \"positive-reinhard-per-channel\", reject = profile.gamutHandling === \"reject-out-of-range\";\n const params = new ArrayBuffer(256), ints = new Int32Array(params), words = new Uint32Array(params), floats = new Float32Array(params);\n words[52] = tone.mode; floats.set(tone.tone, 56); floats.set(tone.lum, 60);\n words[0] = outWidth; words[3] = reinhard ? 1 : 0; words[4] = reject ? 1 : 0; words[5] = rw; words[6] = rh;\n ints[8] = affine.ox; ints[9] = affine.oy; ints[10] = affine.axx; ints[11] = affine.axy; ints[12] = affine.ayx; ints[13] = affine.ayy;\n floats[16] = scale; floats[17] = maximum; floats[18] = band; floats[19] = Math.max(band, 2 ** -20);\n floats[20] = clipLevel; words[21] = reconstruct ? 1 : 0;\n floats[22] = Math.fround(bounds.gain * (1 + 2 ** -20)); floats[23] = Math.fround(bounds.channel * (1 + 2 ** -20));\n floats.set(gains, 24);\n for (let row = 0; row < 3; row++) { floats.set(M[row]!, 28 + row * 4); floats.set(X[row]!, 40 + row * 4); }\n const regionOf = (r0: number, r1: number): { x: number; y: number; width: number; height: number } => {\n const xs: number[] = [], ys: number[] = [];\n for (const [i, j] of [[0, r0], [outWidth - 1, r0], [0, r1 - 1], [outWidth - 1, r1 - 1]] as const) {\n xs.push(affine.ox + affine.axx * i + affine.axy * j); ys.push(affine.oy + affine.ayx * i + affine.ayy * j);\n }\n const x = Math.max(0, Math.min(...xs) - halo), y = Math.max(0, Math.min(...ys) - halo);\n return { x, y, width: Math.min(nativeWidth, Math.max(...xs) + halo + 1) - x, height: Math.min(nativeHeight, Math.max(...ys) + halo + 1) - y };\n };\n const regionBytes = (r0: number, r1: number): number => { const r = regionOf(r0, r1); return r.width * r.height * 4; };\n let bandRows = Math.max(1, Math.min(outHeight, Math.floor(bandBytes / (outWidth * 12))));\n while (bandRows > 1 && regionBytes(0, bandRows) > bandBytes) bandRows = Math.ceil(bandRows / 2);\n if (Math.max(regionBytes(0, bandRows), bandRows * outWidth * 12) > runtime.maximumStorageBindingBytes) {\n throw new ImageKernelExecutionError(\"insufficient-limits\", \"One development band exceeds the device's storage binding limit.\");\n }\n const pipeline = await pipelines(\"photivra-raw-development\", RAW_DEVELOPMENT_WGSL);\n const output = profile.bitDepth === 8 ? new Uint8Array(outWidth * outHeight * 3) : new Uint16Array(outWidth * outHeight * 3);\n codes = output;\n const counters = NO_COUNTERS();\n const taps = scope.upload(\"photivra-cfa-taps\", new Uint8Array(tapBuffer), BUFFER_USAGE.STORAGE);\n const phaseTable = scope.upload(\"photivra-cfa-phases\", ranges, BUFFER_USAGE.STORAGE);\n for (let r0 = 0; r0 < outHeight; r0 += bandRows) {\n checkAbort(abort);\n const r1 = Math.min(outHeight, r0 + bandRows), region = regionOf(r0, r1), count = (r1 - r0) * outWidth;\n const normalized = new Float32Array(region.width * region.height);\n for (let y = 0; y < region.height; y++) {\n for (let x = 0, i = (region.y + y) * nativeWidth + region.x; x < region.width; x++, i++) {\n normalized[y * region.width + x] = normalizedSite(i, region.x + x, region.y + y);\n }\n }\n words[1] = count; words[2] = r0; words[7] = region.width; ints[14] = region.x; ints[15] = region.y;\n const bandScope = new GpuResourceScope(runtime);\n try {\n const source = bandScope.upload(\"photivra-raw-normalized\", normalized, BUFFER_USAGE.STORAGE);\n const out = bandScope.buffer(\"photivra-raw-codes\", count * 12, BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const counterBuffer = bandScope.upload(\"photivra-raw-counters\", new Uint32Array(SDR_COUNTER_SLOTS), BUFFER_USAGE.STORAGE | BUFFER_USAGE.COPY_SRC);\n const uniform = bandScope.upload(\"photivra-raw-params\", new Uint8Array(params), BUFFER_USAGE.UNIFORM);\n const bindGroup = runtime.device.createBindGroup({ layout: pipeline.getBindGroupLayout(0), entries: [\n { binding: 0, resource: { buffer: uniform } }, { binding: 1, resource: { buffer: source } }, { binding: 2, resource: { buffer: taps } },\n { binding: 3, resource: { buffer: phaseTable } }, { binding: 4, resource: { buffer: out } }, { binding: 5, resource: { buffer: counterBuffer } }] });\n const [codeData, counterData] = await runComputePass(runtime, bandScope, pipeline, bindGroup,\n linearDispatch(count, LINEAR_WORKGROUP_SIZE, runtime.maximumWorkgroupsPerDimension),\n [{ buffer: out, bytes: count * 12 }, { buffer: counterBuffer, bytes: SDR_COUNTER_SLOTS * 4 }], abort.signal);\n mergeCounters(counters, new Uint32Array(counterData!, 0, SDR_COUNTER_SLOTS));\n requireLuminanceDomain(counters);\n requireGamutDecision(reject, counters);\n output.set(new Uint32Array(codeData!, 0, count * 3), r0 * outWidth * 3);\n } finally {\n bandScope.release();\n }\n onProgress?.({ completedTileCount: r1 * tilesPerRow, totalTileCount });\n await yieldControl(abort.signal);\n checkAbort(abort);\n }\n const highlight: RawHighlightDiagnostics = { mode: development.highlightMode, saturatedPixelCount: counters[SDR_COUNTER.saturatedPixels]!,\n whiteBalanceClippedSampleCount: counters[SDR_COUNTER.whiteBalanceClipped]!, reconstructedPixelCount: counters[SDR_COUNTER.reconstructedPixels]! };\n const linearBound = luminance ? counters[SDR_COUNTER.linearBoundBits]! * (1 + 2 ** -20) : bounds.exposed + float32Gamma(3);\n const execution = webGpuExecution(integerCodeBound(maximum, linearBound), counters[SDR_COUNTER.uncertain]!);\n return { raw, phaseProfiles: v.phases, colorProfile: v.color, whiteBalance: v.whiteBalance, borderHandling: v.border, width: outWidth, height: outHeight, integerSamples: output,\n diagnostics: sdrDiagnostics(counters, \"consumed-in-raw-development\"), highlight, outputEncoding: sdrOutputEncoding(maximum), rendering: profile,\n displayAdaptation: { kind: \"external-platform\", applied: false, displayCapabilities: \"unknown\" },\n imageDataPairing: \"derived-from-exact-packed-native-raw\", producerOriginVerified: false, execution };\n } catch (error) {\n release();\n throw error;\n } finally {\n scope.release();\n }\n}\n"]}
@@ -0,0 +1,92 @@
1
+ /** Requested or actual execution backend. */
2
+ export type ImageKernelBackend = "cpu-reference" | "webgpu-f32";
3
+ /** Why a requested WebGPU backend was not used (only with `fallback: "cpu-reference"`). */
4
+ export type ImageKernelFallbackReason = "webgpu-unavailable" | "adapter-unavailable" | "device-request-failed" | "insufficient-limits" | "unsupported-platform-endianness";
5
+ /** Failure classes reported by {@link ImageKernelExecutionError}. */
6
+ export type ImageKernelFailureReason = ImageKernelFallbackReason | "device-lost" | "out-of-memory" | "gpu-validation" | "aborted" | "disposed" | "busy" | "unsupported-on-backend" | "unsupported-float32-domain" | "indeterminate-float32-classification";
7
+ /** Domain error for getting and running a backend. Input validation still throws the engine's existing errors. */
8
+ export declare class ImageKernelExecutionError extends Error {
9
+ readonly code = "IMAGE_KERNEL_EXECUTION";
10
+ readonly reason: ImageKernelFailureReason;
11
+ constructor(reason: ImageKernelFailureReason, message: string);
12
+ }
13
+ /** Integer output codes: |code_webgpu − code_reference| ≤ maximumAbsoluteCodeDifference for every sample. */
14
+ export interface ImageKernelCodeErrorBound {
15
+ kind: "integer-code-difference";
16
+ maximumAbsoluteCodeDifference: number;
17
+ /** Bound on the float32 linear value entering the sRGB transfer, after tone and gamut handling. */
18
+ linearAbsoluteBound: number;
19
+ /** Declared bound on the WGSL sRGB transfer evaluation (pow), see WEBGPU_F32_TRANSFER_ABSOLUTE_BOUND. */
20
+ transferAbsoluteBound: number;
21
+ }
22
+ /** Non-negative linear sums: |v_webgpu − v_reference| ≤ relative·v_reference + absolute for every sample. */
23
+ export interface ImageKernelRelativeErrorBound {
24
+ kind: "relative-to-reference";
25
+ relative: number;
26
+ absolute: number;
27
+ }
28
+ /**
29
+ * Seeded stochastic stages (the sensor stage). Random states are integer arithmetic and bit-identical to
30
+ * the reference. A site is flagged when any float32 decision (sampling test, saturation limit, rounding)
31
+ * fell inside its a-priori bound. Every unflagged site has exactly the reference code and flags; only
32
+ * flagged sites may differ, and the statistical-equivalence tests cover them (docs/WEBGPU.md).
33
+ */
34
+ export interface ImageKernelSeededRealizationBound {
35
+ kind: "exact-except-flagged-sites";
36
+ /** Number of flagged sites; equal to the execution's `diagnosticUncertaintySampleCount`. */
37
+ flaggedSiteCount: number;
38
+ noiseModel: {
39
+ id: string;
40
+ version: string;
41
+ };
42
+ seedSchedule: string;
43
+ }
44
+ /** Label attached to every accelerated result. */
45
+ export interface ImageKernelExecution {
46
+ backend: ImageKernelBackend;
47
+ requestedBackend: ImageKernelBackend;
48
+ fallbackReason: ImageKernelFallbackReason | null;
49
+ arithmetic: "float64" | "float32";
50
+ assurance: "engine-reference" | "approximation-with-a-priori-bound";
51
+ /**
52
+ * True only for `cpu-reference`. Bit-exact identities (SHA-256 artifact bindings, byte-parity fixtures,
53
+ * cross-engine determinism hashes) are CPU-only and must never be computed from a `webgpu-f32` result.
54
+ */
55
+ bitIdenticalToReference: boolean;
56
+ errorBound: ImageKernelCodeErrorBound | ImageKernelRelativeErrorBound | ImageKernelSeededRealizationBound | null;
57
+ /**
58
+ * Diagnostic counts equal the reference when no sample fell inside a float32 classification band
59
+ * (`diagnosticUncertaintySampleCount === 0`). Otherwise each count differs by at most that many
60
+ * samples.
61
+ */
62
+ diagnosticsExact: boolean;
63
+ diagnosticUncertaintySampleCount: number;
64
+ limitations: readonly string[];
65
+ }
66
+ /** IEEE 754 binary32 unit roundoff. */
67
+ export declare const WEBGPU_F32_UNIT_ROUNDOFF: number;
68
+ /**
69
+ * Declared absolute error bound for the WGSL sRGB encode on [0, 1]: `1.055·pow(x, 1/2.4) − 0.055`. pow
70
+ * takes its accuracy from exp2(y·log2 x) (log2: 3 ULP, or 2^-21 absolute on [0.5, 2]; exp2: 3 + 2|x|
71
+ * ULP). The worst case over [0.0031308, 1] is about 2.5e-6. The bound 2^-17 ≈ 7.6e-6 keeps a 3× margin,
72
+ * and also covers the small jump where the sRGB segments join (< 1e-7).
73
+ */
74
+ export declare const WEBGPU_F32_TRANSFER_ABSOLUTE_BOUND: number;
75
+ /** Largest slope of the sRGB encode on [0, 1] (the linear segment, 12.92). */
76
+ export declare const SRGB_ENCODE_LIPSCHITZ = 12.92;
77
+ /** Higham's γ_k for binary32. */
78
+ export declare function float32Gamma(k: number): number;
79
+ /** Integer-code bound from a bound on the linear value: |Δcode| ≤ ⌊maximum·(12.92·δ_L + δ_E)⌋ + 1, capped at maximum. */
80
+ export declare function integerCodeBound(maximum: number, linearAbsoluteBound: number): ImageKernelCodeErrorBound;
81
+ /**
82
+ * Composes two `relative-to-reference` bounds through a pipeline `second ∘ first`, where the second
83
+ * stage is linear with non-negative weights summing to at most `secondWeightSum` per output (convolution,
84
+ * temporal sums). With |ã − a| ≤ r₁a + a₁ elementwise and |B̃x − Bx| ≤ r₂Bx + a₂:
85
+ * |B̃ã − Ba| ≤ |B̃ã − Bã| + |B(ã − a)| ≤ r₂(1 + r₁)Ba + r₂W·a₁ + a₂ + r₁Ba + W·a₁,
86
+ * so r = r₁ + r₂ + r₁r₂ and a = a₂ + W·a₁·(1 + r₂). See docs/WEBGPU.md, "Accuracy contract".
87
+ */
88
+ export declare function composeRelativeErrorBounds(first: ImageKernelRelativeErrorBound, second: ImageKernelRelativeErrorBound, secondWeightSum: number): ImageKernelRelativeErrorBound;
89
+ export declare const CPU_REFERENCE_LIMITATIONS: readonly string[];
90
+ export declare const WEBGPU_F32_LIMITATIONS: readonly string[];
91
+ export declare function cpuExecution(requestedBackend: ImageKernelBackend, fallbackReason: ImageKernelFallbackReason | null): ImageKernelExecution;
92
+ export declare function webGpuExecution(errorBound: ImageKernelExecution["errorBound"], uncertainty: number): ImageKernelExecution;
@@ -0,0 +1,84 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * Execution-backend labels, error bounds and domain errors for the optional image-kernel accelerator.
4
+ *
5
+ * `cpu-reference` is the float64 engine reference and the default. `webgpu-f32` is a separate float32
6
+ * approximation backend. Every one of its results carries a forward-error bound worked out in advance
7
+ * from:
8
+ * - IEEE 754 binary32 rounding (unit roundoff u = 2^-24; γ_k = k·u/(1 − k·u), the classical factor
9
+ * in error bounds for floating-point sums and inner products: Rump & Jeannerod, SIAM J. Matrix
10
+ * Anal. Appl. 35(2), 2014, sec. 1, free author copy. Also see: Higham, Accuracy and Stability of
11
+ * Numerical Algorithms, 2nd ed., SIAM 2002, §2–§3);
12
+ * - the WGSL built-in accuracy table (W3C WebGPU Shading Language, §"Floating Point Accuracy").
13
+ * See docs/WEBGPU.md.
14
+ */
15
+ import { requireInputObject } from "../core/record-validation.js";
16
+ import { InvalidScientificInputError } from "../core/validation.js";
17
+ /** Domain error for getting and running a backend. Input validation still throws the engine's existing errors. */
18
+ export class ImageKernelExecutionError extends Error {
19
+ code = "IMAGE_KERNEL_EXECUTION";
20
+ reason;
21
+ constructor(reason, message) {
22
+ super(message);
23
+ this.name = "ImageKernelExecutionError";
24
+ this.reason = reason;
25
+ }
26
+ }
27
+ /** IEEE 754 binary32 unit roundoff. */
28
+ export const WEBGPU_F32_UNIT_ROUNDOFF = 2 ** -24;
29
+ /**
30
+ * Declared absolute error bound for the WGSL sRGB encode on [0, 1]: `1.055·pow(x, 1/2.4) − 0.055`. pow
31
+ * takes its accuracy from exp2(y·log2 x) (log2: 3 ULP, or 2^-21 absolute on [0.5, 2]; exp2: 3 + 2|x|
32
+ * ULP). The worst case over [0.0031308, 1] is about 2.5e-6. The bound 2^-17 ≈ 7.6e-6 keeps a 3× margin,
33
+ * and also covers the small jump where the sRGB segments join (< 1e-7).
34
+ */
35
+ export const WEBGPU_F32_TRANSFER_ABSOLUTE_BOUND = 2 ** -17;
36
+ /** Largest slope of the sRGB encode on [0, 1] (the linear segment, 12.92). */
37
+ export const SRGB_ENCODE_LIPSCHITZ = 12.92;
38
+ /** Higham's γ_k for binary32. */
39
+ export function float32Gamma(k) {
40
+ const ku = k * WEBGPU_F32_UNIT_ROUNDOFF;
41
+ return ku < 1 ? ku / (1 - ku) : Number.POSITIVE_INFINITY;
42
+ }
43
+ /** Integer-code bound from a bound on the linear value: |Δcode| ≤ ⌊maximum·(12.92·δ_L + δ_E)⌋ + 1, capped at maximum. */
44
+ export function integerCodeBound(maximum, linearAbsoluteBound) {
45
+ const linear = Math.min(1, linearAbsoluteBound);
46
+ const real = maximum * (SRGB_ENCODE_LIPSCHITZ * linear + WEBGPU_F32_TRANSFER_ABSOLUTE_BOUND);
47
+ return { kind: "integer-code-difference", maximumAbsoluteCodeDifference: Math.min(maximum, Math.floor(real) + 1),
48
+ linearAbsoluteBound: linear, transferAbsoluteBound: WEBGPU_F32_TRANSFER_ABSOLUTE_BOUND };
49
+ }
50
+ /**
51
+ * Composes two `relative-to-reference` bounds through a pipeline `second ∘ first`, where the second
52
+ * stage is linear with non-negative weights summing to at most `secondWeightSum` per output (convolution,
53
+ * temporal sums). With |ã − a| ≤ r₁a + a₁ elementwise and |B̃x − Bx| ≤ r₂Bx + a₂:
54
+ * |B̃ã − Ba| ≤ |B̃ã − Bã| + |B(ã − a)| ≤ r₂(1 + r₁)Ba + r₂W·a₁ + a₂ + r₁Ba + W·a₁,
55
+ * so r = r₁ + r₂ + r₁r₂ and a = a₂ + W·a₁·(1 + r₂). See docs/WEBGPU.md, "Accuracy contract".
56
+ */
57
+ export function composeRelativeErrorBounds(first, second, secondWeightSum) {
58
+ requireInputObject(first, "composeRelativeErrorBounds first bound");
59
+ requireInputObject(second, "composeRelativeErrorBounds second bound");
60
+ for (const v of [first.relative, first.absolute, second.relative, second.absolute, secondWeightSum]) {
61
+ if (!(typeof v === "number" && v >= 0 && v <= Number.MAX_VALUE)) {
62
+ throw new InvalidScientificInputError("Error bounds and weight sums must be finite and non-negative.");
63
+ }
64
+ }
65
+ return { kind: "relative-to-reference", relative: first.relative + second.relative + first.relative * second.relative,
66
+ absolute: second.absolute + secondWeightSum * first.absolute * (1 + second.relative) };
67
+ }
68
+ export const CPU_REFERENCE_LIMITATIONS = Object.freeze(["Float64 engine reference execution; results are the reference by definition"]);
69
+ export const WEBGPU_F32_LIMITATIONS = Object.freeze([
70
+ "Float32 WebGPU execution is an approximation of the float64 reference within the reported a-priori bound",
71
+ "Not bit-identical to the reference: never use for SHA-256 artifact identities, byte-parity evidence or determinism hashes",
72
+ "Bound assumes a conforming WebGPU implementation (correctly rounded f32 add/multiply/divide, WGSL accuracy table)",
73
+ "Execution speed depends on the adapter; software adapters do not represent GPU performance"
74
+ ]);
75
+ export function cpuExecution(requestedBackend, fallbackReason) {
76
+ return { backend: "cpu-reference", requestedBackend, fallbackReason, arithmetic: "float64", assurance: "engine-reference",
77
+ bitIdenticalToReference: true, errorBound: null, diagnosticsExact: true, diagnosticUncertaintySampleCount: 0, limitations: CPU_REFERENCE_LIMITATIONS };
78
+ }
79
+ export function webGpuExecution(errorBound, uncertainty) {
80
+ return { backend: "webgpu-f32", requestedBackend: "webgpu-f32", fallbackReason: null, arithmetic: "float32",
81
+ assurance: "approximation-with-a-priori-bound", bitIdenticalToReference: false, errorBound, diagnosticsExact: uncertainty === 0,
82
+ diagnosticUncertaintySampleCount: uncertainty, limitations: WEBGPU_F32_LIMITATIONS };
83
+ }
84
+ //# sourceMappingURL=image-kernel-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-kernel-execution.js","sourceRoot":"","sources":["../../src/gpu/image-kernel-execution.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Execution-backend labels, error bounds and domain errors for the optional image-kernel accelerator.\n *\n * `cpu-reference` is the float64 engine reference and the default. `webgpu-f32` is a separate float32\n * approximation backend. Every one of its results carries a forward-error bound worked out in advance\n * from:\n * - IEEE 754 binary32 rounding (unit roundoff u = 2^-24; γ_k = k·u/(1 − k·u), the classical factor\n * in error bounds for floating-point sums and inner products: Rump & Jeannerod, SIAM J. Matrix\n * Anal. Appl. 35(2), 2014, sec. 1, free author copy. Also see: Higham, Accuracy and Stability of\n * Numerical Algorithms, 2nd ed., SIAM 2002, §2–§3);\n * - the WGSL built-in accuracy table (W3C WebGPU Shading Language, §\"Floating Point Accuracy\").\n * See docs/WEBGPU.md.\n */\n\nimport { requireInputObject } from \"../core/record-validation.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\n\n/** Requested or actual execution backend. */\nexport type ImageKernelBackend = \"cpu-reference\" | \"webgpu-f32\";\n\n/** Why a requested WebGPU backend was not used (only with `fallback: \"cpu-reference\"`). */\nexport type ImageKernelFallbackReason = \"webgpu-unavailable\" | \"adapter-unavailable\" | \"device-request-failed\" |\n \"insufficient-limits\" | \"unsupported-platform-endianness\";\n\n/** Failure classes reported by {@link ImageKernelExecutionError}. */\nexport type ImageKernelFailureReason = ImageKernelFallbackReason | \"device-lost\" | \"out-of-memory\" | \"gpu-validation\" |\n \"aborted\" | \"disposed\" | \"busy\" | \"unsupported-on-backend\" | \"unsupported-float32-domain\" | \"indeterminate-float32-classification\";\n\n/** Domain error for getting and running a backend. Input validation still throws the engine's existing errors. */\nexport class ImageKernelExecutionError extends Error {\n readonly code = \"IMAGE_KERNEL_EXECUTION\";\n readonly reason: ImageKernelFailureReason;\n\n constructor(reason: ImageKernelFailureReason, message: string) {\n super(message);\n this.name = \"ImageKernelExecutionError\";\n this.reason = reason;\n }\n}\n\n/** Integer output codes: |code_webgpu − code_reference| ≤ maximumAbsoluteCodeDifference for every sample. */\nexport interface ImageKernelCodeErrorBound {\n kind: \"integer-code-difference\";\n maximumAbsoluteCodeDifference: number;\n /** Bound on the float32 linear value entering the sRGB transfer, after tone and gamut handling. */\n linearAbsoluteBound: number;\n /** Declared bound on the WGSL sRGB transfer evaluation (pow), see WEBGPU_F32_TRANSFER_ABSOLUTE_BOUND. */\n transferAbsoluteBound: number;\n}\n\n/** Non-negative linear sums: |v_webgpu − v_reference| ≤ relative·v_reference + absolute for every sample. */\nexport interface ImageKernelRelativeErrorBound {\n kind: \"relative-to-reference\";\n relative: number;\n absolute: number;\n}\n\n/**\n * Seeded stochastic stages (the sensor stage). Random states are integer arithmetic and bit-identical to\n * the reference. A site is flagged when any float32 decision (sampling test, saturation limit, rounding)\n * fell inside its a-priori bound. Every unflagged site has exactly the reference code and flags; only\n * flagged sites may differ, and the statistical-equivalence tests cover them (docs/WEBGPU.md).\n */\nexport interface ImageKernelSeededRealizationBound {\n kind: \"exact-except-flagged-sites\";\n /** Number of flagged sites; equal to the execution's `diagnosticUncertaintySampleCount`. */\n flaggedSiteCount: number;\n noiseModel: { id: string; version: string };\n seedSchedule: string;\n}\n\n/** Label attached to every accelerated result. */\nexport interface ImageKernelExecution {\n backend: ImageKernelBackend;\n requestedBackend: ImageKernelBackend;\n fallbackReason: ImageKernelFallbackReason | null;\n arithmetic: \"float64\" | \"float32\";\n assurance: \"engine-reference\" | \"approximation-with-a-priori-bound\";\n /**\n * True only for `cpu-reference`. Bit-exact identities (SHA-256 artifact bindings, byte-parity fixtures,\n * cross-engine determinism hashes) are CPU-only and must never be computed from a `webgpu-f32` result.\n */\n bitIdenticalToReference: boolean;\n errorBound: ImageKernelCodeErrorBound | ImageKernelRelativeErrorBound | ImageKernelSeededRealizationBound | null;\n /**\n * Diagnostic counts equal the reference when no sample fell inside a float32 classification band\n * (`diagnosticUncertaintySampleCount === 0`). Otherwise each count differs by at most that many\n * samples.\n */\n diagnosticsExact: boolean;\n diagnosticUncertaintySampleCount: number;\n limitations: readonly string[];\n}\n\n/** IEEE 754 binary32 unit roundoff. */\nexport const WEBGPU_F32_UNIT_ROUNDOFF = 2 ** -24;\n/**\n * Declared absolute error bound for the WGSL sRGB encode on [0, 1]: `1.055·pow(x, 1/2.4) − 0.055`. pow\n * takes its accuracy from exp2(y·log2 x) (log2: 3 ULP, or 2^-21 absolute on [0.5, 2]; exp2: 3 + 2|x|\n * ULP). The worst case over [0.0031308, 1] is about 2.5e-6. The bound 2^-17 ≈ 7.6e-6 keeps a 3× margin,\n * and also covers the small jump where the sRGB segments join (< 1e-7).\n */\nexport const WEBGPU_F32_TRANSFER_ABSOLUTE_BOUND = 2 ** -17;\n/** Largest slope of the sRGB encode on [0, 1] (the linear segment, 12.92). */\nexport const SRGB_ENCODE_LIPSCHITZ = 12.92;\n\n/** Higham's γ_k for binary32. */\nexport function float32Gamma(k: number): number {\n const ku = k * WEBGPU_F32_UNIT_ROUNDOFF;\n return ku < 1 ? ku / (1 - ku) : Number.POSITIVE_INFINITY;\n}\n\n/** Integer-code bound from a bound on the linear value: |Δcode| ≤ ⌊maximum·(12.92·δ_L + δ_E)⌋ + 1, capped at maximum. */\nexport function integerCodeBound(maximum: number, linearAbsoluteBound: number): ImageKernelCodeErrorBound {\n const linear = Math.min(1, linearAbsoluteBound);\n const real = maximum * (SRGB_ENCODE_LIPSCHITZ * linear + WEBGPU_F32_TRANSFER_ABSOLUTE_BOUND);\n return { kind: \"integer-code-difference\", maximumAbsoluteCodeDifference: Math.min(maximum, Math.floor(real) + 1),\n linearAbsoluteBound: linear, transferAbsoluteBound: WEBGPU_F32_TRANSFER_ABSOLUTE_BOUND };\n}\n\n/**\n * Composes two `relative-to-reference` bounds through a pipeline `second ∘ first`, where the second\n * stage is linear with non-negative weights summing to at most `secondWeightSum` per output (convolution,\n * temporal sums). With |ã − a| ≤ r₁a + a₁ elementwise and |B̃x − Bx| ≤ r₂Bx + a₂:\n * |B̃ã − Ba| ≤ |B̃ã − Bã| + |B(ã − a)| ≤ r₂(1 + r₁)Ba + r₂W·a₁ + a₂ + r₁Ba + W·a₁,\n * so r = r₁ + r₂ + r₁r₂ and a = a₂ + W·a₁·(1 + r₂). See docs/WEBGPU.md, \"Accuracy contract\".\n */\nexport function composeRelativeErrorBounds(first: ImageKernelRelativeErrorBound, second: ImageKernelRelativeErrorBound,\n secondWeightSum: number): ImageKernelRelativeErrorBound {\n requireInputObject(first, \"composeRelativeErrorBounds first bound\");\n requireInputObject(second, \"composeRelativeErrorBounds second bound\");\n for (const v of [first.relative, first.absolute, second.relative, second.absolute, secondWeightSum]) {\n if (!(typeof v === \"number\" && v >= 0 && v <= Number.MAX_VALUE)) {\n throw new InvalidScientificInputError(\"Error bounds and weight sums must be finite and non-negative.\");\n }\n }\n return { kind: \"relative-to-reference\", relative: first.relative + second.relative + first.relative * second.relative,\n absolute: second.absolute + secondWeightSum * first.absolute * (1 + second.relative) };\n}\n\nexport const CPU_REFERENCE_LIMITATIONS = Object.freeze([\"Float64 engine reference execution; results are the reference by definition\"]);\nexport const WEBGPU_F32_LIMITATIONS = Object.freeze([\n \"Float32 WebGPU execution is an approximation of the float64 reference within the reported a-priori bound\",\n \"Not bit-identical to the reference: never use for SHA-256 artifact identities, byte-parity evidence or determinism hashes\",\n \"Bound assumes a conforming WebGPU implementation (correctly rounded f32 add/multiply/divide, WGSL accuracy table)\",\n \"Execution speed depends on the adapter; software adapters do not represent GPU performance\"\n]);\n\nexport function cpuExecution(requestedBackend: ImageKernelBackend, fallbackReason: ImageKernelFallbackReason | null): ImageKernelExecution {\n return { backend: \"cpu-reference\", requestedBackend, fallbackReason, arithmetic: \"float64\", assurance: \"engine-reference\",\n bitIdenticalToReference: true, errorBound: null, diagnosticsExact: true, diagnosticUncertaintySampleCount: 0, limitations: CPU_REFERENCE_LIMITATIONS };\n}\n\nexport function webGpuExecution(errorBound: ImageKernelExecution[\"errorBound\"], uncertainty: number): ImageKernelExecution {\n return { backend: \"webgpu-f32\", requestedBackend: \"webgpu-f32\", fallbackReason: null, arithmetic: \"float32\",\n assurance: \"approximation-with-a-priori-bound\", bitIdenticalToReference: false, errorBound, diagnosticsExact: uncertainty === 0,\n diagnosticUncertaintySampleCount: uncertainty, limitations: WEBGPU_F32_LIMITATIONS };\n}\n"]}
@@ -0,0 +1,44 @@
1
+ import { type PackedSensorRawInput, type PackedSensorRawPlan } from "../capture/packed-sensor-raw.js";
2
+ import { type ImageKernelExecution } from "./image-kernel-execution.js";
3
+ import type { AcceleratedPackedSensorRawResult } from "./image-kernel-accelerator.js";
4
+ import { type WebGpuRuntime } from "./webgpu-runtime.js";
5
+ type PipelineSource = (label: string, code: string) => Promise<GPUComputePipeline>;
6
+ type YieldControl = ((signal: AbortSignal) => Promise<void>) | undefined;
7
+ /** Largest physical capacity on the GPU: every realized count up to it is exact in float32. */
8
+ export declare const SENSOR_GPU_MAXIMUM_CAPACITY: number;
9
+ /** Poisson means must stay below this on the GPU (30-bit integer part of a mean word). */
10
+ export declare const SENSOR_GPU_MAXIMUM_MEAN: number;
11
+ /** Largest |fixed-pattern readout offset| on the GPU, in electrons and in codes. */
12
+ export declare const SENSOR_GPU_MAXIMUM_OFFSET_ELECTRONS: number;
13
+ export declare const SENSOR_GPU_MAXIMUM_OFFSET_CODES: number;
14
+ /** CPU reference with host yields and abort, row-chunked; codes equal `simulatePackedSensorRaw`. */
15
+ export declare function simulateSensorRawOnCpu(input: PackedSensorRawInput, abort: AbortController, yieldControl: YieldControl, execution: ImageKernelExecution): Promise<AcceleratedPackedSensorRawResult>;
16
+ /**
17
+ * Splits a positive value into four non-negative pieces with at most 12 significant bits each (by
18
+ * truncation), so that the product of any integer below 2^12 and a piece is exact in float32. Returns
19
+ * the pieces and the non-negative remainder (below 2^-44 of the value).
20
+ * @internal
21
+ */
22
+ export declare function twelveBitPieces(value: number): {
23
+ pieces: number[];
24
+ residual: number;
25
+ };
26
+ /**
27
+ * `L(k) − S(k)` for k < 256, where L is the reference's log k! (the summed logarithms of
28
+ * `samplePoisson`'s logFactorial) and S(k) = (k + ½) ln k − k + ½ ln 2π.
29
+ * @internal
30
+ */
31
+ export declare function stirlingRemainderTable(): Float64Array;
32
+ interface SensorConstants {
33
+ aux: Float32Array<ArrayBuffer>;
34
+ params: ArrayBuffer;
35
+ siteWords: number;
36
+ poissonComponents: number[];
37
+ deterministicComponents: number[];
38
+ threshold: number;
39
+ gain: number;
40
+ }
41
+ /** Checks the float32 execution domain and builds the frame constants (see docs/WEBGPU.md). @internal */
42
+ export declare function sensorGpuConstants(plan: PackedSensorRawPlan): SensorConstants;
43
+ export declare function simulateSensorRawOnGpu(runtime: WebGpuRuntime, bandBytes: number, input: PackedSensorRawInput, abort: AbortController, yieldControl: YieldControl, pipelines: PipelineSource): Promise<AcceleratedPackedSensorRawResult>;
44
+ export {};