@photivra/engine 1.5.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1078) hide show
  1. package/CHANGELOG.md +393 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +116 -9
  56. package/dist/capture/native-raw-development.js +221 -62
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +65 -12
  62. package/dist/capture/native-raw.js +81 -19
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/host-yield.d.ts +7 -0
  236. package/dist/facade/host-yield.js +23 -0
  237. package/dist/facade/host-yield.js.map +1 -0
  238. package/dist/facade/scene-radiance.d.ts +117 -0
  239. package/dist/facade/scene-radiance.js +205 -0
  240. package/dist/facade/scene-radiance.js.map +1 -0
  241. package/dist/facade/simulate-capture.d.ts +284 -0
  242. package/dist/facade/simulate-capture.js +1026 -0
  243. package/dist/facade/simulate-capture.js.map +1 -0
  244. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  245. package/dist/gpu/chart-radiance-gpu.js +176 -0
  246. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  247. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  248. package/dist/gpu/image-kernel-accelerator.js +720 -0
  249. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  250. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  251. package/dist/gpu/image-kernel-execution.js +84 -0
  252. package/dist/gpu/image-kernel-execution.js.map +1 -0
  253. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  254. package/dist/gpu/sensor-stage-gpu.js +317 -0
  255. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  256. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  257. package/dist/gpu/temporal-sum-gpu.js +150 -0
  258. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  259. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  260. package/dist/gpu/webgpu-runtime.js +215 -0
  261. package/dist/gpu/webgpu-runtime.js.map +1 -0
  262. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  263. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  264. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  265. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  266. package/dist/gpu/wgsl-kernels.js +365 -0
  267. package/dist/gpu/wgsl-kernels.js.map +1 -0
  268. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  269. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  270. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  271. package/dist/index.d.ts +89 -25
  272. package/dist/index.js +59 -15
  273. package/dist/index.js.map +1 -1
  274. package/dist/motion/camera-rotation.d.ts +92 -40
  275. package/dist/motion/camera-rotation.js +84 -47
  276. package/dist/motion/camera-rotation.js.map +1 -1
  277. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  278. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  279. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  280. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  281. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  282. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  283. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  284. package/dist/motion/capture-rotation-trajectory.js +36 -26
  285. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  286. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  287. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  288. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  289. package/dist/motion/extended-object-projection.d.ts +19 -16
  290. package/dist/motion/extended-object-projection.js +38 -18
  291. package/dist/motion/extended-object-projection.js.map +1 -1
  292. package/dist/motion/projected-motion.d.ts +18 -17
  293. package/dist/motion/projected-motion.js +25 -17
  294. package/dist/motion/projected-motion.js.map +1 -1
  295. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  296. package/dist/motion/temporal-exposure-sum.js +141 -0
  297. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  298. package/dist/motion/video-sequence.d.ts +111 -0
  299. package/dist/motion/video-sequence.js +179 -0
  300. package/dist/motion/video-sequence.js.map +1 -0
  301. package/dist/optics/aperture.d.ts +14 -15
  302. package/dist/optics/aperture.js +13 -11
  303. package/dist/optics/aperture.js.map +1 -1
  304. package/dist/optics/atmospheric-haze.d.ts +83 -0
  305. package/dist/optics/atmospheric-haze.js +113 -0
  306. package/dist/optics/atmospheric-haze.js.map +1 -0
  307. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  308. package/dist/optics/brown-conrady-distortion.js +291 -0
  309. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  310. package/dist/optics/circle-of-confusion.d.ts +10 -10
  311. package/dist/optics/circle-of-confusion.js +15 -11
  312. package/dist/optics/circle-of-confusion.js.map +1 -1
  313. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  314. package/dist/optics/complex-pupil-psf.js +190 -98
  315. package/dist/optics/complex-pupil-psf.js.map +1 -1
  316. package/dist/optics/depth-of-field.d.ts +25 -15
  317. package/dist/optics/depth-of-field.js +67 -27
  318. package/dist/optics/depth-of-field.js.map +1 -1
  319. package/dist/optics/diffraction.d.ts +14 -13
  320. package/dist/optics/diffraction.js +14 -10
  321. package/dist/optics/diffraction.js.map +1 -1
  322. package/dist/optics/focus-breathing.d.ts +88 -27
  323. package/dist/optics/focus-breathing.js +114 -23
  324. package/dist/optics/focus-breathing.js.map +1 -1
  325. package/dist/optics/focus-state.d.ts +18 -18
  326. package/dist/optics/focus-state.js +21 -15
  327. package/dist/optics/focus-state.js.map +1 -1
  328. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  329. package/dist/optics/front-of-lens-filter.js +259 -88
  330. package/dist/optics/front-of-lens-filter.js.map +1 -1
  331. package/dist/optics/illumination-vignetting.d.ts +16 -17
  332. package/dist/optics/illumination-vignetting.js +40 -17
  333. package/dist/optics/illumination-vignetting.js.map +1 -1
  334. package/dist/optics/irradiance-convolution.d.ts +59 -0
  335. package/dist/optics/irradiance-convolution.js +138 -0
  336. package/dist/optics/irradiance-convolution.js.map +1 -0
  337. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  338. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  339. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  340. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  341. package/dist/optics/lens-psf-kernels.js +175 -0
  342. package/dist/optics/lens-psf-kernels.js.map +1 -0
  343. package/dist/optics/lens-psf-profile.d.ts +78 -46
  344. package/dist/optics/lens-psf-profile.js +335 -124
  345. package/dist/optics/lens-psf-profile.js.map +1 -1
  346. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  347. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  348. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  349. package/dist/optics/polygon-diffraction.d.ts +80 -23
  350. package/dist/optics/polygon-diffraction.js +130 -25
  351. package/dist/optics/polygon-diffraction.js.map +1 -1
  352. package/dist/optics/profile-contract.d.ts +5 -6
  353. package/dist/optics/profile-contract.js +14 -11
  354. package/dist/optics/profile-contract.js.map +1 -1
  355. package/dist/optics/psf-foundation.d.ts +23 -23
  356. package/dist/optics/psf-foundation.js +24 -21
  357. package/dist/optics/psf-foundation.js.map +1 -1
  358. package/dist/optics/pupil-vignetting.d.ts +118 -0
  359. package/dist/optics/pupil-vignetting.js +264 -0
  360. package/dist/optics/pupil-vignetting.js.map +1 -0
  361. package/dist/optics/radial-distortion.d.ts +34 -33
  362. package/dist/optics/radial-distortion.js +37 -30
  363. package/dist/optics/radial-distortion.js.map +1 -1
  364. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  365. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  366. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  367. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  368. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  369. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  370. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  371. package/dist/optics/sensor-aperture-rays.js +32 -14
  372. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  373. package/dist/optics/sensor-environment-query.d.ts +81 -16
  374. package/dist/optics/sensor-environment-query.js +145 -12
  375. package/dist/optics/sensor-environment-query.js.map +1 -1
  376. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  377. package/dist/optics/sensor-psf-quadrature.js +18 -11
  378. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  379. package/dist/optics/sensor-psf-support.d.ts +8 -6
  380. package/dist/optics/sensor-psf-support.js +8 -5
  381. package/dist/optics/sensor-psf-support.js.map +1 -1
  382. package/dist/optics/stray-light.d.ts +22 -19
  383. package/dist/optics/stray-light.js +18 -12
  384. package/dist/optics/stray-light.js.map +1 -1
  385. package/dist/optics/thin-lens.d.ts +10 -9
  386. package/dist/optics/thin-lens.js +12 -8
  387. package/dist/optics/thin-lens.js.map +1 -1
  388. package/dist/optics/zernike-wavefront.d.ts +154 -0
  389. package/dist/optics/zernike-wavefront.js +352 -0
  390. package/dist/optics/zernike-wavefront.js.map +1 -0
  391. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  392. package/dist/output/capture-corrected-sdr.js +16 -8
  393. package/dist/output/capture-corrected-sdr.js.map +1 -1
  394. package/dist/output/capture-geometry.d.ts +34 -36
  395. package/dist/output/capture-geometry.js +52 -32
  396. package/dist/output/capture-geometry.js.map +1 -1
  397. package/dist/output/capture-sdr.d.ts +7 -6
  398. package/dist/output/capture-sdr.js +11 -8
  399. package/dist/output/capture-sdr.js.map +1 -1
  400. package/dist/output/crop.d.ts +22 -6
  401. package/dist/output/crop.js +40 -6
  402. package/dist/output/crop.js.map +1 -1
  403. package/dist/output/geometric-transforms.d.ts +60 -23
  404. package/dist/output/geometric-transforms.js +111 -24
  405. package/dist/output/geometric-transforms.js.map +1 -1
  406. package/dist/output/lens-corrections.d.ts +27 -19
  407. package/dist/output/lens-corrections.js +29 -13
  408. package/dist/output/lens-corrections.js.map +1 -1
  409. package/dist/output/native-capture-sdr.d.ts +71 -16
  410. package/dist/output/native-capture-sdr.js +190 -33
  411. package/dist/output/native-capture-sdr.js.map +1 -1
  412. package/dist/output/png-encoder.d.ts +65 -0
  413. package/dist/output/png-encoder.js +461 -0
  414. package/dist/output/png-encoder.js.map +1 -0
  415. package/dist/output/print-contrast-reference.d.ts +10 -9
  416. package/dist/output/print-contrast-reference.js +10 -8
  417. package/dist/output/print-contrast-reference.js.map +1 -1
  418. package/dist/output/print-detail.d.ts +18 -17
  419. package/dist/output/print-detail.js +12 -10
  420. package/dist/output/print-detail.js.map +1 -1
  421. package/dist/output/print-jpeg.d.ts +26 -5
  422. package/dist/output/print-jpeg.js +117 -50
  423. package/dist/output/print-jpeg.js.map +1 -1
  424. package/dist/output/print-plan.d.ts +19 -19
  425. package/dist/output/print-plan.js +11 -10
  426. package/dist/output/print-plan.js.map +1 -1
  427. package/dist/output/print-region-statistics.d.ts +14 -15
  428. package/dist/output/print-region-statistics.js +11 -11
  429. package/dist/output/print-region-statistics.js.map +1 -1
  430. package/dist/output/sdr-rendering.d.ts +48 -10
  431. package/dist/output/sdr-rendering.js +114 -25
  432. package/dist/output/sdr-rendering.js.map +1 -1
  433. package/dist/output/subject-framing-crop.d.ts +6 -10
  434. package/dist/output/subject-framing-crop.js +23 -13
  435. package/dist/output/subject-framing-crop.js.map +1 -1
  436. package/dist/processing/demosaic.d.ts +90 -0
  437. package/dist/processing/demosaic.js +275 -0
  438. package/dist/processing/demosaic.js.map +1 -0
  439. package/dist/processing/denoise.d.ts +68 -0
  440. package/dist/processing/denoise.js +214 -0
  441. package/dist/processing/denoise.js.map +1 -0
  442. package/dist/processing/focus-stacking.d.ts +17 -0
  443. package/dist/processing/focus-stacking.js +80 -0
  444. package/dist/processing/focus-stacking.js.map +1 -0
  445. package/dist/processing/hdr.d.ts +54 -0
  446. package/dist/processing/hdr.js +172 -0
  447. package/dist/processing/hdr.js.map +1 -0
  448. package/dist/processing/image-ops.d.ts +66 -0
  449. package/dist/processing/image-ops.js +192 -0
  450. package/dist/processing/image-ops.js.map +1 -0
  451. package/dist/processing/panorama.d.ts +51 -0
  452. package/dist/processing/panorama.js +305 -0
  453. package/dist/processing/panorama.js.map +1 -0
  454. package/dist/processing/processing-task.d.ts +85 -0
  455. package/dist/processing/processing-task.js +164 -0
  456. package/dist/processing/processing-task.js.map +1 -0
  457. package/dist/processing/tone-mapping.d.ts +69 -0
  458. package/dist/processing/tone-mapping.js +310 -0
  459. package/dist/processing/tone-mapping.js.map +1 -0
  460. package/dist/schema/camera.d.ts +5 -4
  461. package/dist/schema/illumination-spectral.d.ts +13 -19
  462. package/dist/schema/illumination-spectral.js +23 -19
  463. package/dist/schema/illumination-spectral.js.map +1 -1
  464. package/dist/schema/illumination-temporal.d.ts +12 -15
  465. package/dist/schema/illumination-temporal.js +43 -28
  466. package/dist/schema/illumination-temporal.js.map +1 -1
  467. package/dist/schema/illumination.d.ts +5 -4
  468. package/dist/schema/illumination.js +55 -20
  469. package/dist/schema/illumination.js.map +1 -1
  470. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  471. package/dist/schema/scene-radiance-temporal.js +26 -23
  472. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  473. package/dist/schema/scene-radiance.d.ts +17 -17
  474. package/dist/schema/scene-radiance.js +56 -34
  475. package/dist/schema/scene-radiance.js.map +1 -1
  476. package/dist/schema/scene.d.ts +14 -13
  477. package/dist/schema/validation.d.ts +0 -1
  478. package/dist/schema/validation.js +17 -15
  479. package/dist/schema/validation.js.map +1 -1
  480. package/dist/sensor/accumulated-charge.d.ts +45 -64
  481. package/dist/sensor/accumulated-charge.js +41 -47
  482. package/dist/sensor/accumulated-charge.js.map +1 -1
  483. package/dist/sensor/architecture.d.ts +22 -25
  484. package/dist/sensor/architecture.js +17 -16
  485. package/dist/sensor/architecture.js.map +1 -1
  486. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  487. package/dist/sensor/camera-saturation-capacity.js +36 -34
  488. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  489. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  490. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  491. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  492. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  493. package/dist/sensor/capture-mode-timing.js +24 -21
  494. package/dist/sensor/capture-mode-timing.js.map +1 -1
  495. package/dist/sensor/capture-mode.d.ts +28 -30
  496. package/dist/sensor/capture-mode.js +33 -31
  497. package/dist/sensor/capture-mode.js.map +1 -1
  498. package/dist/sensor/color-sampling.d.ts +30 -33
  499. package/dist/sensor/color-sampling.js +32 -37
  500. package/dist/sensor/color-sampling.js.map +1 -1
  501. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  502. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  503. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  504. package/dist/sensor/dark-current.d.ts +53 -49
  505. package/dist/sensor/dark-current.js +87 -46
  506. package/dist/sensor/dark-current.js.map +1 -1
  507. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  508. package/dist/sensor/environment-photo-signal.js +127 -46
  509. package/dist/sensor/environment-photo-signal.js.map +1 -1
  510. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  511. package/dist/sensor/eqe-electron-rate.js +34 -14
  512. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  513. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  514. package/dist/sensor/eqe-local-exposure.js +15 -11
  515. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  516. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  517. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  518. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  519. package/dist/sensor/exposure-window.d.ts +48 -34
  520. package/dist/sensor/exposure-window.js +77 -36
  521. package/dist/sensor/exposure-window.js.map +1 -1
  522. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  523. package/dist/sensor/fixed-pattern-noise.js +166 -0
  524. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  525. package/dist/sensor/iso-gain.d.ts +44 -0
  526. package/dist/sensor/iso-gain.js +119 -0
  527. package/dist/sensor/iso-gain.js.map +1 -0
  528. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  529. package/dist/sensor/iso-signal-chain.js +52 -66
  530. package/dist/sensor/iso-signal-chain.js.map +1 -1
  531. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  532. package/dist/sensor/local-exposure-binding.js +22 -18
  533. package/dist/sensor/local-exposure-binding.js.map +1 -1
  534. package/dist/sensor/optical-stack.d.ts +36 -40
  535. package/dist/sensor/optical-stack.js +34 -37
  536. package/dist/sensor/optical-stack.js.map +1 -1
  537. package/dist/sensor/photon-energy.d.ts +22 -28
  538. package/dist/sensor/photon-energy.js +42 -34
  539. package/dist/sensor/photon-energy.js.map +1 -1
  540. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  541. package/dist/sensor/physical-charge-capacity.js +35 -36
  542. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  543. package/dist/sensor/pixel-pitch.d.ts +2 -3
  544. package/dist/sensor/pixel-pitch.js +4 -2
  545. package/dist/sensor/pixel-pitch.js.map +1 -1
  546. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  547. package/dist/sensor/radiometry-readiness.js +20 -17
  548. package/dist/sensor/radiometry-readiness.js.map +1 -1
  549. package/dist/sensor/raw-readout.d.ts +173 -83
  550. package/dist/sensor/raw-readout.js +425 -160
  551. package/dist/sensor/raw-readout.js.map +1 -1
  552. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  553. package/dist/sensor/raw-reconstruction.js +200 -47
  554. package/dist/sensor/raw-reconstruction.js.map +1 -1
  555. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  556. package/dist/sensor/readout-exposure-linkage.js +125 -27
  557. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  558. package/dist/sensor/readout-timing.d.ts +43 -44
  559. package/dist/sensor/readout-timing.js +38 -30
  560. package/dist/sensor/readout-timing.js.map +1 -1
  561. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  562. package/dist/sensor/response-application-compatibility.js +35 -34
  563. package/dist/sensor/response-application-compatibility.js.map +1 -1
  564. package/dist/sensor/response-operating-range.d.ts +26 -35
  565. package/dist/sensor/response-operating-range.js +40 -39
  566. package/dist/sensor/response-operating-range.js.map +1 -1
  567. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  568. package/dist/sensor/responsivity-photocurrent.js +57 -40
  569. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  570. package/dist/sensor/sampling-aperture.d.ts +21 -25
  571. package/dist/sensor/sampling-aperture.js +29 -28
  572. package/dist/sensor/sampling-aperture.js.map +1 -1
  573. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  574. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  575. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  576. package/dist/sensor/sensor-geometry.d.ts +28 -32
  577. package/dist/sensor/sensor-geometry.js +35 -20
  578. package/dist/sensor/sensor-geometry.js.map +1 -1
  579. package/dist/sensor/signal-noise.d.ts +14 -16
  580. package/dist/sensor/signal-noise.js +15 -13
  581. package/dist/sensor/signal-noise.js.map +1 -1
  582. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  583. package/dist/sensor/spatial-sample-reduction.js +39 -48
  584. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  585. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  586. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  587. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  588. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  589. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  590. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  591. package/dist/sensor/spectral-coverage.d.ts +6 -9
  592. package/dist/sensor/spectral-coverage.js +9 -6
  593. package/dist/sensor/spectral-coverage.js.map +1 -1
  594. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  595. package/dist/sensor/spectral-quadrature.js +38 -48
  596. package/dist/sensor/spectral-quadrature.js.map +1 -1
  597. package/dist/sensor/spectral-response.d.ts +53 -41
  598. package/dist/sensor/spectral-response.js +80 -47
  599. package/dist/sensor/spectral-response.js.map +1 -1
  600. package/dist/sensor/stochastic-seed.d.ts +50 -0
  601. package/dist/sensor/stochastic-seed.js +123 -0
  602. package/dist/sensor/stochastic-seed.js.map +1 -0
  603. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  604. package/dist/sensor/temporal-eqe-sum.js +5 -6
  605. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  606. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  607. package/dist/sensor/temporal-photo-signal.js +11 -10
  608. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  609. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  610. package/dist/sensor/temporal-sample-binding.js +3 -3
  611. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  612. package/dist/simulation/poc-simulation.d.ts +16 -16
  613. package/dist/simulation/poc-simulation.js +20 -15
  614. package/dist/simulation/poc-simulation.js.map +1 -1
  615. package/dist/stabilization/camera-shake.d.ts +42 -18
  616. package/dist/stabilization/camera-shake.js +43 -20
  617. package/dist/stabilization/camera-shake.js.map +1 -1
  618. package/dist/stabilization/system.d.ts +44 -41
  619. package/dist/stabilization/system.js +196 -108
  620. package/dist/stabilization/system.js.map +1 -1
  621. package/docs/AGENT_GUIDE.md +183 -0
  622. package/docs/API_REFERENCE.md +761 -2
  623. package/docs/QUICK_START.md +495 -0
  624. package/docs/USAGE.md +1719 -714
  625. package/docs/api/camera-equivalent-focal-length.md +6 -7
  626. package/docs/api/camera-field-of-view.md +16 -8
  627. package/docs/api/camera-lens-projection.md +246 -0
  628. package/docs/api/camera-projected-object-size.md +6 -5
  629. package/docs/api/capture-capture-export-metadata.md +10 -10
  630. package/docs/api/capture-dng-import.md +134 -0
  631. package/docs/api/capture-environment-raw-producer.md +17 -11
  632. package/docs/api/capture-export-jpeg.md +16 -0
  633. package/docs/api/capture-focus-control.md +25 -47
  634. package/docs/api/capture-linear-encoding.md +21 -12
  635. package/docs/api/capture-lossless-jpeg.md +49 -0
  636. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  637. package/docs/api/capture-native-environment-raw.md +161 -4
  638. package/docs/api/capture-native-raw-development.md +69 -8
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +21 -10
  641. package/docs/api/capture-packed-sensor-raw.md +156 -0
  642. package/docs/api/capture-photographic-export.md +69 -31
  643. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  644. package/docs/api/capture-raw-white-level.md +37 -0
  645. package/docs/api/capture-release-sequence.md +6 -7
  646. package/docs/api/capture-sensor-raw-frame.md +6 -6
  647. package/docs/api/capture-sensor-raw-producer.md +17 -11
  648. package/docs/api/capture-simulated-capture.md +15 -15
  649. package/docs/api/color-camera-color-matrix.md +103 -0
  650. package/docs/api/color-capture-color.md +22 -11
  651. package/docs/api/color-chromatic-adaptation.md +82 -0
  652. package/docs/api/color-color-difference.md +134 -0
  653. package/docs/api/color-color-matching-functions.md +259 -0
  654. package/docs/api/color-colorimetry-math.md +54 -0
  655. package/docs/api/color-gamut-mapping.md +72 -0
  656. package/docs/api/color-illuminants.md +280 -0
  657. package/docs/api/color-rgb-color-spaces.md +151 -0
  658. package/docs/api/color-sensor-color-development.md +27 -0
  659. package/docs/api/color-srgb-icc.md +2 -4
  660. package/docs/api/color-white-balance.md +95 -19
  661. package/docs/api/composition-image-formation-plan.md +124 -95
  662. package/docs/api/composition-plan-consumer.md +7 -7
  663. package/docs/api/core-calculation-result.md +18 -14
  664. package/docs/api/core-configuration-error.md +1 -1
  665. package/docs/api/core-image-formation.md +7 -7
  666. package/docs/api/core-scientific-assurance.md +12 -10
  667. package/docs/api/core-spectral-composition.md +14 -14
  668. package/docs/api/core-spectral.md +6 -6
  669. package/docs/api/core-validation.md +3 -3
  670. package/docs/api/core-version.md +7 -6
  671. package/docs/api/equipment-exposure-capabilities.md +11 -10
  672. package/docs/api/equipment-generic-tier-assets.md +7 -2
  673. package/docs/api/equipment-generic-tier-presets.md +6 -6
  674. package/docs/api/equipment-iso-capabilities.md +18 -18
  675. package/docs/api/equipment-metering-capabilities.md +6 -6
  676. package/docs/api/equipment-release-capabilities.md +4 -4
  677. package/docs/api/exports.json +2213 -8
  678. package/docs/api/exposure-exposure-duration-control.md +9 -9
  679. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  680. package/docs/api/exposure-exposure.md +10 -10
  681. package/docs/api/exposure-flash-ttl.md +182 -0
  682. package/docs/api/exposure-flash.md +183 -28
  683. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  684. package/docs/api/exposure-metering-target.md +9 -8
  685. package/docs/api/exposure-metering-temporal.md +8 -8
  686. package/docs/api/exposure-metering.md +69 -9
  687. package/docs/api/exposure-program-line.md +6 -5
  688. package/docs/api/facade-chart-radiance-batch.md +96 -0
  689. package/docs/api/facade-chart-scenes.md +240 -0
  690. package/docs/api/facade-scene-radiance.md +122 -0
  691. package/docs/api/facade-simulate-capture.md +324 -0
  692. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  693. package/docs/api/gpu-image-kernel-execution.md +152 -0
  694. package/docs/api/motion-camera-rotation.md +43 -26
  695. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  696. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  697. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  698. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  699. package/docs/api/motion-extended-object-projection.md +10 -8
  700. package/docs/api/motion-projected-motion.md +8 -8
  701. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  702. package/docs/api/motion-video-sequence.md +159 -0
  703. package/docs/api/optics-aperture.md +8 -8
  704. package/docs/api/optics-atmospheric-haze.md +104 -0
  705. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  706. package/docs/api/optics-circle-of-confusion.md +5 -4
  707. package/docs/api/optics-complex-pupil-psf.md +57 -16
  708. package/docs/api/optics-depth-of-field.md +12 -6
  709. package/docs/api/optics-diffraction.md +8 -7
  710. package/docs/api/optics-focus-breathing.md +104 -16
  711. package/docs/api/optics-focus-state.md +9 -10
  712. package/docs/api/optics-front-of-lens-filter.md +72 -14
  713. package/docs/api/optics-illumination-vignetting.md +10 -10
  714. package/docs/api/optics-irradiance-convolution.md +95 -0
  715. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  716. package/docs/api/optics-lens-psf-kernels.md +72 -0
  717. package/docs/api/optics-lens-psf-profile.md +48 -26
  718. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  719. package/docs/api/optics-polygon-diffraction.md +78 -13
  720. package/docs/api/optics-profile-contract.md +4 -4
  721. package/docs/api/optics-psf-foundation.md +12 -12
  722. package/docs/api/optics-pupil-vignetting.md +132 -0
  723. package/docs/api/optics-radial-distortion.md +12 -12
  724. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  725. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  726. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  727. package/docs/api/optics-sensor-environment-query.md +52 -9
  728. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  729. package/docs/api/optics-stray-light.md +12 -11
  730. package/docs/api/optics-thin-lens.md +4 -3
  731. package/docs/api/optics-zernike-wavefront.md +229 -0
  732. package/docs/api/output-capture-corrected-sdr.md +10 -7
  733. package/docs/api/output-capture-geometry.md +35 -36
  734. package/docs/api/output-capture-sdr.md +4 -4
  735. package/docs/api/output-crop.md +7 -4
  736. package/docs/api/output-geometric-transforms.md +65 -19
  737. package/docs/api/output-lens-corrections.md +17 -15
  738. package/docs/api/output-native-capture-sdr.md +26 -13
  739. package/docs/api/output-png-encoder.md +105 -0
  740. package/docs/api/output-print-contrast-reference.md +8 -8
  741. package/docs/api/output-print-detail.md +14 -14
  742. package/docs/api/output-print-jpeg.md +22 -5
  743. package/docs/api/output-print-plan.md +18 -18
  744. package/docs/api/output-print-region-statistics.md +14 -14
  745. package/docs/api/output-sdr-rendering.md +52 -10
  746. package/docs/api/output-subject-framing-crop.md +5 -6
  747. package/docs/api/processing-demosaic.md +120 -0
  748. package/docs/api/processing-denoise.md +148 -0
  749. package/docs/api/processing-focus-stacking.md +41 -0
  750. package/docs/api/processing-hdr.md +113 -0
  751. package/docs/api/processing-panorama.md +82 -0
  752. package/docs/api/processing-processing-task.md +107 -0
  753. package/docs/api/processing-tone-mapping.md +142 -0
  754. package/docs/api/schema-camera.md +6 -4
  755. package/docs/api/schema-illumination-spectral.md +10 -11
  756. package/docs/api/schema-illumination-temporal.md +13 -15
  757. package/docs/api/schema-illumination.md +4 -4
  758. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  759. package/docs/api/schema-scene-radiance.md +18 -17
  760. package/docs/api/schema-scene.md +9 -9
  761. package/docs/api/schema-validation.md +1 -1
  762. package/docs/api/sensor-accumulated-charge.md +12 -20
  763. package/docs/api/sensor-architecture.md +15 -16
  764. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  765. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  766. package/docs/api/sensor-capture-mode-timing.md +9 -9
  767. package/docs/api/sensor-capture-mode.md +29 -30
  768. package/docs/api/sensor-color-sampling.md +31 -33
  769. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  770. package/docs/api/sensor-dark-current.md +30 -14
  771. package/docs/api/sensor-environment-photo-signal.md +13 -6
  772. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  773. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  774. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  775. package/docs/api/sensor-exposure-window.md +24 -24
  776. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  777. package/docs/api/sensor-iso-gain.md +63 -0
  778. package/docs/api/sensor-iso-signal-chain.md +13 -22
  779. package/docs/api/sensor-local-exposure-binding.md +12 -13
  780. package/docs/api/sensor-optical-stack.md +37 -40
  781. package/docs/api/sensor-photon-energy.md +10 -11
  782. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  783. package/docs/api/sensor-pixel-pitch.md +1 -1
  784. package/docs/api/sensor-radiometry-readiness.md +9 -9
  785. package/docs/api/sensor-raw-readout.md +118 -52
  786. package/docs/api/sensor-raw-reconstruction.md +97 -20
  787. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  788. package/docs/api/sensor-readout-timing.md +33 -35
  789. package/docs/api/sensor-response-application-compatibility.md +9 -11
  790. package/docs/api/sensor-response-operating-range.md +14 -18
  791. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  792. package/docs/api/sensor-sampling-aperture.md +22 -25
  793. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  794. package/docs/api/sensor-sensor-geometry.md +23 -24
  795. package/docs/api/sensor-signal-noise.md +10 -10
  796. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  797. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  798. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  799. package/docs/api/sensor-spectral-coverage.md +5 -5
  800. package/docs/api/sensor-spectral-quadrature.md +33 -35
  801. package/docs/api/sensor-spectral-response.md +28 -16
  802. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  803. package/docs/api/simulation-poc-simulation.md +17 -16
  804. package/docs/api/stabilization-camera-shake.md +29 -10
  805. package/docs/api/stabilization-system.md +25 -21
  806. package/docs/examples/production-request.json +3821 -2157
  807. package/docs/examples/simulate-capture.mjs +14 -0
  808. package/llms.txt +35 -0
  809. package/package.json +32 -12
  810. package/AGENTS.md +0 -674
  811. package/CONTRIBUTING.md +0 -76
  812. package/DCO +0 -33
  813. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  814. package/dist/camera/field-of-view.d.ts.map +0 -1
  815. package/dist/camera/projected-object-size.d.ts.map +0 -1
  816. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  817. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  818. package/dist/capture/export-jpeg.d.ts.map +0 -1
  819. package/dist/capture/export-tiff.d.ts.map +0 -1
  820. package/dist/capture/focus-control.d.ts.map +0 -1
  821. package/dist/capture/linear-encoding.d.ts.map +0 -1
  822. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  823. package/dist/capture/native-raw-development.d.ts.map +0 -1
  824. package/dist/capture/native-raw.d.ts.map +0 -1
  825. package/dist/capture/photographic-export.d.ts.map +0 -1
  826. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  827. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  828. package/dist/capture/release-sequence.d.ts.map +0 -1
  829. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  830. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  831. package/dist/capture/simulated-capture.d.ts.map +0 -1
  832. package/dist/color/capture-color.d.ts.map +0 -1
  833. package/dist/color/sensor-color-development.d.ts.map +0 -1
  834. package/dist/color/srgb-icc.d.ts.map +0 -1
  835. package/dist/color/srgb-transfer.d.ts.map +0 -1
  836. package/dist/color/white-balance.d.ts.map +0 -1
  837. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  838. package/dist/composition/plan-consumer.d.ts.map +0 -1
  839. package/dist/core/calculation-result.d.ts.map +0 -1
  840. package/dist/core/canonical-json.d.ts.map +0 -1
  841. package/dist/core/configuration-error.d.ts.map +0 -1
  842. package/dist/core/evidence-provenance.d.ts.map +0 -1
  843. package/dist/core/image-formation.d.ts.map +0 -1
  844. package/dist/core/owned-data.d.ts.map +0 -1
  845. package/dist/core/record-validation.d.ts.map +0 -1
  846. package/dist/core/scientific-assurance.d.ts.map +0 -1
  847. package/dist/core/spectral-composition.d.ts.map +0 -1
  848. package/dist/core/spectral.d.ts.map +0 -1
  849. package/dist/core/validation.d.ts.map +0 -1
  850. package/dist/core/version.d.ts.map +0 -1
  851. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  852. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  853. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  854. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  855. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  856. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  857. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  858. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  859. package/dist/exposure/exposure.d.ts.map +0 -1
  860. package/dist/exposure/flash.d.ts.map +0 -1
  861. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  862. package/dist/exposure/metering-target.d.ts.map +0 -1
  863. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  864. package/dist/exposure/metering.d.ts.map +0 -1
  865. package/dist/exposure/program-line.d.ts.map +0 -1
  866. package/dist/index.d.ts.map +0 -1
  867. package/dist/motion/camera-rotation.d.ts.map +0 -1
  868. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  869. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  870. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  871. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  872. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  873. package/dist/motion/projected-motion.d.ts.map +0 -1
  874. package/dist/optics/aperture.d.ts.map +0 -1
  875. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  876. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  877. package/dist/optics/depth-of-field.d.ts.map +0 -1
  878. package/dist/optics/diffraction.d.ts.map +0 -1
  879. package/dist/optics/focus-breathing.d.ts.map +0 -1
  880. package/dist/optics/focus-state.d.ts.map +0 -1
  881. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  882. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  883. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  884. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  885. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  886. package/dist/optics/profile-contract.d.ts.map +0 -1
  887. package/dist/optics/psf-foundation.d.ts.map +0 -1
  888. package/dist/optics/radial-distortion.d.ts.map +0 -1
  889. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  890. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  891. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  892. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  893. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  894. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  895. package/dist/optics/stray-light.d.ts.map +0 -1
  896. package/dist/optics/thin-lens.d.ts.map +0 -1
  897. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  898. package/dist/output/capture-geometry.d.ts.map +0 -1
  899. package/dist/output/capture-sdr.d.ts.map +0 -1
  900. package/dist/output/crop.d.ts.map +0 -1
  901. package/dist/output/geometric-transforms.d.ts.map +0 -1
  902. package/dist/output/lens-corrections.d.ts.map +0 -1
  903. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  904. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  905. package/dist/output/print-detail.d.ts.map +0 -1
  906. package/dist/output/print-jpeg.d.ts.map +0 -1
  907. package/dist/output/print-plan.d.ts.map +0 -1
  908. package/dist/output/print-region-statistics.d.ts.map +0 -1
  909. package/dist/output/sdr-rendering.d.ts.map +0 -1
  910. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  911. package/dist/schema/camera.d.ts.map +0 -1
  912. package/dist/schema/camera.js +0 -3
  913. package/dist/schema/camera.js.map +0 -1
  914. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  915. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  916. package/dist/schema/illumination.d.ts.map +0 -1
  917. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  918. package/dist/schema/scene-radiance.d.ts.map +0 -1
  919. package/dist/schema/scene.d.ts.map +0 -1
  920. package/dist/schema/scene.js +0 -3
  921. package/dist/schema/scene.js.map +0 -1
  922. package/dist/schema/validation.d.ts.map +0 -1
  923. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  924. package/dist/sensor/architecture.d.ts.map +0 -1
  925. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  926. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  927. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  928. package/dist/sensor/capture-mode.d.ts.map +0 -1
  929. package/dist/sensor/color-sampling.d.ts.map +0 -1
  930. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  931. package/dist/sensor/dark-current.d.ts.map +0 -1
  932. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  933. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  934. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  935. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  936. package/dist/sensor/exposure-window.d.ts.map +0 -1
  937. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  938. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  939. package/dist/sensor/optical-stack.d.ts.map +0 -1
  940. package/dist/sensor/photon-energy.d.ts.map +0 -1
  941. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  942. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  943. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  944. package/dist/sensor/raw-readout.d.ts.map +0 -1
  945. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  946. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  947. package/dist/sensor/readout-timing.d.ts.map +0 -1
  948. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  949. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  950. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  951. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  952. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  953. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  954. package/dist/sensor/signal-noise.d.ts.map +0 -1
  955. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  956. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  957. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  958. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  959. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  960. package/dist/sensor/spectral-response.d.ts.map +0 -1
  961. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  962. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  963. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  964. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  965. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  966. package/dist/stabilization/system.d.ts.map +0 -1
  967. package/docs/API_STYLE.md +0 -235
  968. package/docs/ARCHITECTURE.md +0 -356
  969. package/docs/AUTOMATION_COORDINATION.md +0 -190
  970. package/docs/CAPTURE_COLOR.md +0 -25
  971. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  972. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  973. package/docs/CAPTURE_SDR.md +0 -22
  974. package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
  975. package/docs/DEVELOPERS.md +0 -68
  976. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  977. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  978. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  979. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  980. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  981. package/docs/IMAGE_FORMATION.md +0 -247
  982. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  983. package/docs/MOTION_AND_SIGNAL.md +0 -250
  984. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  985. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  986. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  987. package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
  988. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  989. package/docs/PERFORMANCE_BASELINE.md +0 -56
  990. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  991. package/docs/PHYSICS_FOUNDATION.md +0 -426
  992. package/docs/POC_API.md +0 -278
  993. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  994. package/docs/POC_PROJECTION_REUSE.md +0 -124
  995. package/docs/PRINT_195_196_REVIEW.md +0 -93
  996. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  997. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  998. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  999. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  1000. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1001. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1002. package/docs/PRINT_PLANNING.md +0 -75
  1003. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1004. package/docs/PROCESSED_OUTPUT.md +0 -157
  1005. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1006. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1007. package/docs/PROVENANCE.md +0 -115
  1008. package/docs/PSF_FOUNDATION.md +0 -165
  1009. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1010. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1011. package/docs/RELEASE_1_0.md +0 -66
  1012. package/docs/RELEASE_1_0_1.md +0 -61
  1013. package/docs/RELEASE_1_1_0.md +0 -25
  1014. package/docs/RELEASE_1_2_0.md +0 -51
  1015. package/docs/RELEASE_1_3_0.md +0 -15
  1016. package/docs/RELEASE_1_4_0.md +0 -23
  1017. package/docs/RELEASE_1_5_0.md +0 -105
  1018. package/docs/RELEASE_AUDIT.md +0 -39
  1019. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1020. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1021. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1022. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1023. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1024. package/docs/SDR_RENDERING.md +0 -33
  1025. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1026. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1027. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1028. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1029. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1030. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1031. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1032. package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
  1033. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1034. package/docs/SIMULATED_CAPTURE.md +0 -65
  1035. package/docs/STABILIZATION.md +0 -234
  1036. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1037. package/docs/TIER_ACCEPTANCE.md +0 -129
  1038. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1039. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1040. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1041. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1042. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1043. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1044. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1045. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1046. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1047. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1048. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1049. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1050. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1051. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1052. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1053. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1054. package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
  1055. package/docs/validation/documentation-fragments.json +0 -212
  1056. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1057. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1058. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1061. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1062. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1065. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1066. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1067. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1068. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1069. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1070. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1071. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1072. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1073. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1074. package/docs/validation/print-detail-capabilities.json +0 -103
  1075. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1076. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1077. package/docs/validation/release-audit-inventory.json +0 -1306
  1078. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1,33 +1,33 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
5
- * missing required fields and incompatible scientific data fail at this boundary. Reconstruction
6
- * consumes explicitly bound native post-ADC samples and declared normalized channel kernels. Native
7
- * CFA phase is absolute and orientation/crop remain downstream. This structural linear reconstruction
8
- * does not infer spectral sensor primaries, calibrated color or a complete arbitrary demosaic
9
- * algorithm.
10
- * Commit one validated native RAW sample with exact site/channel/event identity for declared
11
- * reconstruction. Reconstruction consumes explicitly bound native post-ADC samples and declared
12
- * normalized channel kernels. Native CFA phase is absolute and orientation/crop remain downstream.
13
- * This structural linear reconstruction does not infer spectral sensor primaries, calibrated color or
14
- * a complete arbitrary demosaic algorithm.
3
+ * RAW reconstruction (demosaicing): estimates every colour channel at each pixel from the RAW samples
4
+ * of nearby CFA (colour filter array) sites, using declared linear kernels.
5
+ *
6
+ * It uses native RAW samples (after the ADC) that are explicitly bound to their sites, and declared
7
+ * normalized kernels for each channel. The CFA phase is absolute; orientation and crop are applied
8
+ * later. This is a fixed linear reconstruction. It does not infer the sensor's spectral primaries or
9
+ * calibrated colour, and is not a general demosaic algorithm. Built-in bilinear Bayer kernels are
10
+ * provided.
15
11
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
16
12
  * limits.
17
13
  */
18
14
  import { approximationResult } from "../core/calculation-result.js";
19
15
  import { InvalidConfigurationError } from "../core/configuration-error.js";
16
+ import { computeEffectiveSaturationCode } from "../capture/raw-white-level.js";
20
17
  import { parseEvidenceList } from "../core/evidence-provenance.js";
21
18
  import { InvalidScientificInputError } from "../core/validation.js";
22
19
  import { parseSensorColorSamplingProfile, resolveColorSamplingSite } from "./color-sampling.js";
20
+ import { requireInputObject, requireInputKeys, rejectUnknownFields } from "../core/record-validation.js";
23
21
  export const SENSOR_RAW_CAPTURE_SAMPLE_VERSION = "0.1.0";
24
22
  export const SENSOR_RAW_RECONSTRUCTION_PROFILE_SCHEMA_VERSION = "0.1.0";
25
- function requireRecord(value, path) {
23
+ function requireRecord(value, path, allowedKeys) {
26
24
  if (typeof value !== "object" ||
27
25
  value === null ||
28
26
  Array.isArray(value)) {
29
27
  throw new InvalidConfigurationError(path + " must be an object.");
30
28
  }
29
+ if (allowedKeys !== null)
30
+ rejectUnknownFields(value, allowedKeys, path);
31
31
  return value;
32
32
  }
33
33
  function requireNonEmptyString(value, path) {
@@ -84,7 +84,7 @@ function parseStatus(value, path) {
84
84
  return value;
85
85
  }
86
86
  function parseContribution(value, path) {
87
- const record = requireRecord(value, path);
87
+ const record = requireRecord(value, path, ["offsetX", "offsetY", "sourceChannelId", "weight"]);
88
88
  return {
89
89
  offsetX: requireSafeInteger(record.offsetX, path + ".offsetX"),
90
90
  offsetY: requireSafeInteger(record.offsetY, path + ".offsetY"),
@@ -93,7 +93,7 @@ function parseContribution(value, path) {
93
93
  };
94
94
  }
95
95
  function parseKernel(value, path) {
96
- const record = requireRecord(value, path);
96
+ const record = requireRecord(value, path, ["contributions", "outputChannelId"]);
97
97
  if (!Array.isArray(record.contributions) ||
98
98
  record.contributions
99
99
  .length === 0) {
@@ -128,20 +128,18 @@ function parseKernel(value, path) {
128
128
  };
129
129
  }
130
130
  /**
131
- * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
132
- * missing required fields and incompatible scientific data fail at this boundary.
131
+ * Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,
132
+ * missing required fields and inconsistent scientific data are rejected.
133
133
  *
134
- * Reconstruction consumes explicitly bound native post-ADC samples and declared normalized channel
135
- * kernels. Native CFA phase is absolute and orientation/crop remain downstream. This structural linear
136
- * reconstruction does not infer spectral sensor primaries, calibrated color or a complete arbitrary
137
- * demosaic algorithm.
138
- * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
139
- * @returns SensorRawReconstructionProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
134
+ * The profile declares a normalized linear kernel for each output channel. It does not infer the
135
+ * sensor's spectral primaries or calibrated colour.
136
+ * @param value - Untrusted data. TypeScript types alone are not validation.
137
+ * @returns The result. Success does not imply calibration.
140
138
  *
141
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
139
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
142
140
  */
143
141
  export function parseSensorRawReconstructionProfile(value) {
144
- const record = requireRecord(value, "sensorRawReconstructionProfile");
142
+ const record = requireRecord(value, "sensorRawReconstructionProfile", ["schemaVersion", "method", "normalization", "negativeBlackSubtractedValuesAllowed", "kernels", "profileId", "profileVersion", "captureModeId", "colorSamplingProfileId", "scientificStatus", "evidence", "limitations"]);
145
143
  if (record.schemaVersion !==
146
144
  SENSOR_RAW_RECONSTRUCTION_PROFILE_SCHEMA_VERSION) {
147
145
  throw new InvalidConfigurationError('sensorRawReconstructionProfile.schemaVersion must be "' +
@@ -189,21 +187,18 @@ export function parseSensorRawReconstructionProfile(value) {
189
187
  };
190
188
  }
191
189
  /**
192
- * Commit one validated native RAW sample with exact site/channel/event identity for declared
193
- * reconstruction.
194
- *
195
- * Reconstruction consumes explicitly bound native post-ADC samples and declared normalized channel
196
- * kernels. Native CFA phase is absolute and orientation/crop remain downstream. This structural linear
197
- * reconstruction does not infer spectral sensor primaries, calibrated color or a complete arbitrary
198
- * demosaic algorithm.
199
- * @param input - CreateSensorRawCaptureSampleInput. See the linked contract for coordinate, unit and profile binding semantics.
200
- * @returns SensorRawCaptureSample. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
190
+ * Commits one validated native RAW sample, with its exact site, channel and exposure event, for use
191
+ * in reconstruction.
192
+ * @param input - The input; see `CreateSensorRawCaptureSampleInput` for its fields, units and coordinates.
193
+ * @returns The result. Success does not imply calibration.
201
194
  *
202
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
195
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
203
196
  */
204
197
  export function createSensorRawCaptureSample(input) {
198
+ requireInputKeys(input, "createSensorRawCaptureSample", ["rawCode", "contributors", "adcIntegralNonLinearity"]);
205
199
  const raw = input.rawCode;
206
200
  const contributors = input.contributors;
201
+ requireInputObject(contributors, "contributors input");
207
202
  if (contributors
208
203
  .modeSamplingKind !==
209
204
  "native-effective-raster" ||
@@ -266,6 +261,17 @@ export function createSensorRawCaptureSample(input) {
266
261
  blackSubtractedNormalizedCode: (raw.rawCode -
267
262
  raw.blackLevelCode) /
268
263
  denominator,
264
+ effectiveSaturationCode: computeEffectiveSaturationCode(input.adcIntegralNonLinearity ===
265
+ undefined
266
+ ? raw
267
+ : {
268
+ ...raw,
269
+ integralNonLinearity: input.adcIntegralNonLinearity
270
+ }),
271
+ systemConversionGainElectronsPerCode: raw.systemConversionGainElectronsPerCode,
272
+ readNoiseRmsElectrons: Math.sqrt(raw.electronicReadNoiseComponents.reduce((sum, component) => sum +
273
+ component.rmsElectrons *
274
+ component.rmsElectrons, 0)),
269
275
  readoutProfileId: raw.readoutProfileId,
270
276
  readoutRegimeId: raw.regimeId,
271
277
  sourceChargeSeedUint32: raw.chargeSeedUint32,
@@ -290,19 +296,18 @@ function requireCenterSite(value) {
290
296
  };
291
297
  }
292
298
  /**
293
- * Gather exactly supplied native channel contributions through explicit normalized kernels while
294
- * preserving CFA identity and signed black-subtracted values.
299
+ * Combines the supplied native samples through explicit normalized kernels, keeping CFA identity
300
+ * and signed black-subtracted values.
295
301
  *
296
- * Reconstruction consumes explicitly bound native post-ADC samples and declared normalized channel
297
- * kernels. Native CFA phase is absolute and orientation/crop remain downstream. This structural linear
298
- * reconstruction does not infer spectral sensor primaries, calibrated color or a complete arbitrary
299
- * demosaic algorithm.
300
- * @param input - ResolveSensorRawReconstructionInput. See the linked contract for coordinate, unit and profile binding semantics.
301
- * @returns CalculationResult<SensorRawReconstructedPixel>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
302
+ * The CFA phase is absolute; orientation and crop come later. This fixed linear reconstruction does
303
+ * not infer spectral primaries or calibrated colour, and is not a general demosaic algorithm.
304
+ * @param input - The input; see `ResolveSensorRawReconstructionInput` for its fields, units and coordinates.
305
+ * @returns The result. Success does not imply calibration.
302
306
  *
303
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
307
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
304
308
  */
305
309
  export function resolveSensorRawReconstruction(input) {
310
+ requireInputKeys(input, "resolveSensorRawReconstruction", ["profile", "colorSamplingProfile", "centerSite", "samples"]);
306
311
  const profile = parseSensorRawReconstructionProfile(input.profile);
307
312
  const center = requireCenterSite(input.centerSite);
308
313
  const colorSamplingProfile = parseSensorColorSamplingProfile(input.colorSamplingProfile);
@@ -380,11 +385,20 @@ export function resolveSensorRawReconstruction(input) {
380
385
  "Aliasing and moire are explicitly not modeled because this reconstruction contract does not establish an adequate pre-sampling optical transfer/scene-frequency model."
381
386
  ]);
382
387
  }
383
- /** Internal prepared scalar accumulation; reference and packed execution share operation order. */
384
- export function calculateRawReconstructionChannel(kernel, center, read) {
388
+ /**
389
+ * Internal: sums one channel's weighted contributions. The reference and packed paths use the same
390
+ * order of operations. With `mirrorBounds`, a contribution site outside the native frame is read from
391
+ * its mirror image (reflect-101, see `reflectRawSiteIndex`). Without it (the default), such a site is
392
+ * rejected.
393
+ */
394
+ export function calculateRawReconstructionChannel(kernel, center, read, mirrorBounds) {
385
395
  let value = 0;
386
396
  const sourceContributions = kernel.contributions.map(contribution => {
387
- const x = center.x + contribution.offsetX, y = center.y + contribution.offsetY;
397
+ let x = center.x + contribution.offsetX, y = center.y + contribution.offsetY;
398
+ if (mirrorBounds !== undefined) {
399
+ x = reflectRawSiteIndex(x, mirrorBounds.width);
400
+ y = reflectRawSiteIndex(y, mirrorBounds.height);
401
+ }
388
402
  if (x < 0 || y < 0)
389
403
  throw new InvalidScientificInputError("RAW reconstruction kernel references a site outside the non-negative native sensor coordinate domain.");
390
404
  const sourceValue = read(x, y, contribution.sourceChannelId);
@@ -395,4 +409,143 @@ export function calculateRawReconstructionChannel(kernel, center, read) {
395
409
  throw new InvalidScientificInputError("Reconstructed linear channel value must remain finite.");
396
410
  return { channelId: kernel.outputChannelId, linearBlackSubtractedNormalizedValue: value, sourceContributions };
397
411
  }
412
+ /**
413
+ * Mirror index ("reflect-101"): −1 → 1, −2 → 2, n → n−2. The edge site itself is not repeated, so
414
+ * for a CFA that repeats every 2 sites (Bayer) each mirrored site has the same channel as the site the
415
+ * repeating pattern would put there. Requires size ≥ 1; for size 1 every index maps to 0.
416
+ */
417
+ export function reflectRawSiteIndex(index, size) {
418
+ if (index >= 0 && index < size)
419
+ return index;
420
+ if (size === 1)
421
+ return 0;
422
+ const period = 2 * size - 2, m = ((index % period) + period) % period;
423
+ return m < size ? m : period - m;
424
+ }
425
+ /**
426
+ * Internal: proves that mirrored (reflect-101) reads at the border return the channel the repeating
427
+ * CFA would put at every virtual site within `reach` of each frame edge, for every row and column
428
+ * phase. Mirroring works per axis, so checking each axis over every phase also covers the corners.
429
+ * Throws otherwise.
430
+ */
431
+ export function validateMirrorBorderCfaConsistency(layout, width, height, reach) {
432
+ const rw = layout.repeatWidthSites, rh = layout.repeatHeightSites, ids = layout.siteChannelIds;
433
+ const at = (x, y) => ids[(((y % rh) + rh) % rh) * rw + ((x % rw) + rw) % rw];
434
+ if (reach >= width || reach >= height) {
435
+ throw new InvalidConfigurationError("Mirror border handling requires a native frame larger than the kernel reach.");
436
+ }
437
+ for (let d = 1; d <= reach; d++) {
438
+ for (let p = 0; p < Math.max(rw, rh); p++) {
439
+ if (at(-d, p) !== at(reflectRawSiteIndex(-d, width), p) || at(width - 1 + d, p) !== at(reflectRawSiteIndex(width - 1 + d, width), p) ||
440
+ at(p, -d) !== at(p, reflectRawSiteIndex(-d, height)) || at(p, height - 1 + d) !== at(p, reflectRawSiteIndex(height - 1 + d, height))) {
441
+ throw new InvalidConfigurationError("Mirror border handling would change the CFA channel of a reflected site; this CFA/frame size needs reject handling or a smaller region.");
442
+ }
443
+ }
444
+ }
445
+ }
446
+ /** Internal: largest absolute site offset of any contribution (the neighbourhood reach). */
447
+ export function rawReconstructionKernelReach(profiles) {
448
+ let reach = 0;
449
+ for (const { profile } of profiles)
450
+ for (const kernel of profile.kernels)
451
+ for (const c of kernel.contributions) {
452
+ reach = Math.max(reach, Math.abs(c.offsetX), Math.abs(c.offsetY));
453
+ }
454
+ return reach;
455
+ }
456
+ export const BUILT_IN_BAYER_DEMOSAIC_MODEL_VERSION = "1.0.0";
457
+ const CROSS1 = [[1, 0], [-1, 0], [0, 1], [0, -1]];
458
+ const DIAG1 = [[1, 1], [-1, 1], [1, -1], [-1, -1]];
459
+ function bayerTaps(points, role, weight) {
460
+ return points.map(([x, y]) => [x, y, role, weight]);
461
+ }
462
+ /**
463
+ * Kernels for one kind of site. `own` is the site's channel; `horizontal` is the colour channel on the
464
+ * same row, for a green site.
465
+ *
466
+ * Bilinear: the average of the nearest sites of the wanted channel. Every kernel sums to one and
467
+ * reproduces signals that vary linearly (affine) exactly.
468
+ */
469
+ function bayerSiteKernels(own, horizontal) {
470
+ if (own !== "G") {
471
+ const other = own === "R" ? "B" : "R";
472
+ const green = bayerTaps(CROSS1, "G", 1 / 4);
473
+ const opposite = bayerTaps(DIAG1, other, 1 / 4);
474
+ const result = { G: green };
475
+ result[own] = [[0, 0, own, 1]];
476
+ result[other] = opposite;
477
+ return result;
478
+ }
479
+ const h = horizontal, v = h === "R" ? "B" : "R";
480
+ const along = (role, horizontalAxis) => {
481
+ const near = horizontalAxis ? [[1, 0], [-1, 0]] : [[0, 1], [0, -1]];
482
+ return bayerTaps(near, role, 1 / 2);
483
+ };
484
+ const identity = [[0, 0, "G", 1]];
485
+ const result = { G: identity };
486
+ result[h] = along(h, true);
487
+ result[v] = along(v, false);
488
+ return result;
489
+ }
490
+ const BAYER_DEMOSAIC_EVIDENCE = {
491
+ bilinear: [{ sourceOrigin: "third-party", reuseStatus: "factual-reference-only",
492
+ sourceReference: "Gunturk, Glotzbach, Altunbasak, Schafer & Mersereau, Demosaicking: color filter array interpolation, IEEE Signal Processing Magazine 22(1), 2005",
493
+ note: "Bilinear interpolation of each Bayer channel from its nearest same-channel sites; weights derived in Photivra from that published definition." }]
494
+ };
495
+ /**
496
+ * Builds the per-phase linear reconstruction profiles of the built-in bilinear Bayer demosaic kernel.
497
+ *
498
+ * The result is the ordinary `explicit-linear-native-neighborhood` profile used by RAW frame
499
+ * reconstruction, native RAW development and `createCfaPlaneReconstructionTask`; there is no special
500
+ * code path. Edge pixels need either a region whose neighbourhood stays inside the frame, or mirror
501
+ * border handling.
502
+ *
503
+ * Approximation: fixed linear interpolation, not a calibrated or adaptive demosaic. Bilinear blurs
504
+ * and shows "zipper" artefacts at edges. Aliasing and moiré are not modelled. The adaptive AHD method
505
+ * is `createAhdDemosaicTask`.
506
+ */
507
+ export function createBuiltInBayerDemosaicProfiles(input) {
508
+ requireInputKeys(input, "createBuiltInBayerDemosaicProfiles", ["kernel", "captureModeId", "colorSamplingProfile", "channelRoles"]);
509
+ const kernel = input.kernel;
510
+ if (kernel !== "bilinear")
511
+ throw new InvalidConfigurationError("Unknown built-in Bayer demosaic kernel.");
512
+ const captureModeId = requireNonEmptyString(input.captureModeId, "captureModeId");
513
+ const cfa = parseSensorColorSamplingProfile(input.colorSamplingProfile), layout = cfa.layout;
514
+ const roles = requireRecord(input.channelRoles, "channelRoles", ["red", "green", "blue"]);
515
+ const ids = { R: requireNonEmptyString(roles.red, "channelRoles.red"),
516
+ G: requireNonEmptyString(roles.green, "channelRoles.green"), B: requireNonEmptyString(roles.blue, "channelRoles.blue") };
517
+ if (new Set(Object.values(ids)).size !== 3)
518
+ throw new InvalidConfigurationError("channelRoles must name three distinct channels.");
519
+ if (layout.kind !== "periodic-mosaic" || layout.repeatWidthSites !== 2 || layout.repeatHeightSites !== 2) {
520
+ throw new InvalidScientificInputError("Built-in Bayer kernels require a 2×2 periodic mosaic.");
521
+ }
522
+ const tile = layout.siteChannelIds.map((id) => {
523
+ const found = ["R", "G", "B"].find((r) => ids[r] === id);
524
+ if (found === undefined)
525
+ throw new InvalidScientificInputError("Bayer CFA channel is not one of channelRoles.");
526
+ return found;
527
+ });
528
+ const red = tile.indexOf("R"), blue = tile.indexOf("B");
529
+ if (tile.filter((r) => r === "G").length !== 2 || red < 0 || blue < 0 || red + blue !== 3) {
530
+ throw new InvalidScientificInputError("Built-in Bayer kernels require one red, one blue and two diagonal green sites.");
531
+ }
532
+ const phaseProfiles = [0, 1, 2, 3].map((i) => {
533
+ const phaseX = i % 2, phaseY = (i - phaseX) / 2, own = tile[i];
534
+ const byRole = bayerSiteKernels(own, own === "G" ? tile[phaseY * 2 + (1 - phaseX)] : null);
535
+ const profile = parseSensorRawReconstructionProfile({
536
+ schemaVersion: SENSOR_RAW_RECONSTRUCTION_PROFILE_SCHEMA_VERSION, profileId: "photivra-builtin-" + kernel + "-phase-" + phaseX + "-" + phaseY,
537
+ profileVersion: BUILT_IN_BAYER_DEMOSAIC_MODEL_VERSION, captureModeId, colorSamplingProfileId: cfa.profileId, scientificStatus: "approximation",
538
+ method: "explicit-linear-native-neighborhood", normalization: "weights-sum-to-one-per-output-channel", negativeBlackSubtractedValuesAllowed: true,
539
+ kernels: ["R", "G", "B"].map((r) => ({ outputChannelId: ids[r], contributions: byRole[r].map(([offsetX, offsetY, source, weight]) => ({ offsetX, offsetY, sourceChannelId: ids[source], weight })) })),
540
+ evidence: BAYER_DEMOSAIC_EVIDENCE[kernel].map((e) => ({ ...e })),
541
+ limitations: ["Fixed linear Bayer interpolation; not adaptive, calibrated or manufacturer-specific.", "Aliasing, moire and colour fringing are not modelled or suppressed."]
542
+ });
543
+ return { phaseX, phaseY, profile };
544
+ });
545
+ return approximationResult({ kernel, phaseProfiles, outputChannelIds: [ids.R, ids.G, ids.B], kernelReachSites: 1 }, "built-in-bayer-demosaic-" + kernel, BUILT_IN_BAYER_DEMOSAIC_MODEL_VERSION, [
546
+ "Nearest same-channel bilinear interpolation.",
547
+ "Weights sum to one per output channel and reproduce affine channel signals exactly.",
548
+ "Linear kernels only; adaptive (edge-directed) reconstruction is a separate non-linear path."
549
+ ]);
550
+ }
398
551
  //# sourceMappingURL=raw-reconstruction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"raw-reconstruction.js","sourceRoot":"","sources":["../../src/sensor/raw-reconstruction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"raw-reconstruction.js","sourceRoot":"","sources":["../../src/sensor/raw-reconstruction.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * RAW reconstruction (demosaicing): estimates every colour channel at each pixel from the RAW samples\n * of nearby CFA (colour filter array) sites, using declared linear kernels.\n *\n * It uses native RAW samples (after the ADC) that are explicitly bound to their sites, and declared\n * normalized kernels for each channel. The CFA phase is absolute; orientation and crop are applied\n * later. This is a fixed linear reconstruction. It does not infer the sensor's spectral primaries or\n * calibrated colour, and is not a general demosaic algorithm. Built-in bilinear Bayer kernels are\n * provided.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport {\n approximationResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { computeEffectiveSaturationCode } from \"../capture/raw-white-level.js\";\nimport {\n parseEvidenceList,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport type {\n ResolvedCaptureModeColorSamplingContributors\n} from \"./capture-color-sampling-binding.js\";\nimport {\n parseSensorColorSamplingProfile,\n resolveColorSamplingSite,\n type SensorColorSamplingProfile\n} from \"./color-sampling.js\";\nimport type {\n SensorAdcIntegralNonLinearity,\n SensorRawCodeSample\n} from \"./raw-readout.js\";\nimport type {\n SensorSpectralResponseScientificStatus\n} from \"./spectral-response.js\";\nimport { requireInputObject, requireInputKeys, rejectUnknownFields } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport const SENSOR_RAW_CAPTURE_SAMPLE_VERSION =\n \"0.1.0\" as const;\nexport const SENSOR_RAW_RECONSTRUCTION_PROFILE_SCHEMA_VERSION =\n \"0.1.0\" as const;\n\nexport interface CreateSensorRawCaptureSampleInput {\n rawCode:\n SensorRawCodeSample;\n contributors:\n ResolvedCaptureModeColorSamplingContributors;\n /**\n * The selected readout regime's declared ADC integral non-linearity (INL), if any. The code sample\n * records INL only at its own code, but the effective white level needs it at saturation.\n */\n adcIntegralNonLinearity?:\n SensorAdcIntegralNonLinearity;\n}\n\nexport interface SensorRawCaptureSample {\n version:\n typeof SENSOR_RAW_CAPTURE_SAMPLE_VERSION;\n captureModeId: string;\n modeSampleCoordinateSystem:\n \"capture-mode-full-frame-effective-sample-index\";\n modeSampleIndexFullFrame: {\n x: number;\n y: number;\n };\n colorSamplingProfileId: string;\n colorSamplingSite: {\n x: number;\n y: number;\n };\n channelId: string;\n rawCode: number;\n blackLevelCode: number;\n digitalSaturationCode: number;\n blackSubtractedNormalizedCode:\n number;\n /** Full-saturation code from `calculateEffectiveSaturationCode`; constant per CFA phase. */\n effectiveSaturationCode: number;\n /** Regime system conversion gain, e⁻ per code (DNG NoiseProfile input). */\n systemConversionGainElectronsPerCode: number;\n /** Total read noise in e⁻: the square root of the sum of the squared RMS components (DNG NoiseProfile input). */\n readNoiseRmsElectrons: number;\n readoutProfileId: string;\n readoutRegimeId: string;\n sourceChargeSeedUint32: number;\n sourceReadNoiseSeedUint32: number;\n physicalScalarSaturationApplied:\n boolean;\n digitalSaturationApplied:\n boolean;\n cfaPhasePreservedInNativeCoordinates:\n true;\n physicalOrientationApplied:\n false;\n outputRotationApplied:\n false;\n groupedModeCombinationApplied:\n false;\n reconstructionApplied: false;\n aliasingModeled: false;\n moireModeled: false;\n}\n\nexport interface SensorRawReconstructionKernelContribution {\n offsetX: number;\n offsetY: number;\n sourceChannelId: string;\n weight: number;\n}\n\nexport interface SensorRawReconstructionChannelKernel {\n outputChannelId: string;\n contributions:\n readonly SensorRawReconstructionKernelContribution[];\n}\n\nexport interface SensorRawReconstructionProfile {\n schemaVersion:\n typeof SENSOR_RAW_RECONSTRUCTION_PROFILE_SCHEMA_VERSION;\n profileId: string;\n profileVersion: string;\n captureModeId: string;\n colorSamplingProfileId: string;\n scientificStatus:\n SensorSpectralResponseScientificStatus;\n method:\n \"explicit-linear-native-neighborhood\";\n normalization:\n \"weights-sum-to-one-per-output-channel\";\n negativeBlackSubtractedValuesAllowed:\n true;\n kernels:\n readonly SensorRawReconstructionChannelKernel[];\n evidence:\n readonly EvidenceProvenance[];\n limitations: readonly string[];\n}\n\nexport interface ResolveSensorRawReconstructionInput {\n profile:\n SensorRawReconstructionProfile;\n colorSamplingProfile:\n SensorColorSamplingProfile;\n centerSite: {\n x: number;\n y: number;\n };\n samples:\n readonly SensorRawCaptureSample[];\n}\n\nexport interface SensorRawReconstructedPixel {\n reconstructionProfileId:\n string;\n reconstructionProfileVersion:\n string;\n captureModeId: string;\n colorSamplingProfileId: string;\n centerSite: {\n x: number;\n y: number;\n };\n outputChannels:\n readonly {\n channelId: string;\n linearBlackSubtractedNormalizedValue:\n number;\n sourceContributions:\n readonly {\n site: {\n x: number;\n y: number;\n };\n sourceChannelId: string;\n weight: number;\n sourceValue: number;\n }[];\n }[];\n method:\n \"explicit-linear-native-neighborhood\";\n cfaAware: true;\n captureModeAware: true;\n physicalOrientationApplied:\n false;\n outputRotationApplied: false;\n sharpeningApplied: false;\n denoisingApplied: false;\n aliasingModeled: false;\n moireModeled: false;\n preSamplingOpticalTransferAdequacyEstablished:\n false;\n reconstructionDoesNotModifyRawSamples:\n true;\n}\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction requireFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be finite.\"\n );\n }\n return value;\n}\n\nfunction requireSafeInteger(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isSafeInteger(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a safe integer.\"\n );\n }\n return value;\n}\n\nfunction requireNonNegativeSafeIntegerInput(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isSafeInteger(value) ||\n value < 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must be a non-negative safe integer.\"\n );\n }\n return value;\n}\n\nfunction parseLimitations(\n value: unknown,\n path: string\n): readonly string[] {\n if (!Array.isArray(value)) {\n throw new InvalidConfigurationError(\n path + \" must be an array.\"\n );\n }\n const parsed =\n value.map((entry, index) =>\n requireNonEmptyString(\n entry,\n path +\n \"[\" +\n index +\n \"]\"\n )\n );\n if (\n new Set(parsed).size !==\n parsed.length\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must not contain duplicates.\"\n );\n }\n return parsed;\n}\n\nfunction parseStatus(\n value: unknown,\n path: string\n): SensorSpectralResponseScientificStatus {\n if (\n value !== \"calibrated\" &&\n value !== \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n path + \" is invalid.\"\n );\n }\n return value;\n}\n\nfunction parseContribution(\n value: unknown,\n path: string\n): SensorRawReconstructionKernelContribution {\n const record =\n requireRecord(value, path, [\"offsetX\", \"offsetY\", \"sourceChannelId\", \"weight\"]);\n return {\n offsetX:\n requireSafeInteger(\n record.offsetX,\n path + \".offsetX\"\n ),\n offsetY:\n requireSafeInteger(\n record.offsetY,\n path + \".offsetY\"\n ),\n sourceChannelId:\n requireNonEmptyString(\n record.sourceChannelId,\n path + \".sourceChannelId\"\n ),\n weight:\n requireFinite(\n record.weight,\n path + \".weight\"\n )\n };\n}\n\nfunction parseKernel(\n value: unknown,\n path: string\n): SensorRawReconstructionChannelKernel {\n const record =\n requireRecord(value, path, [\"contributions\", \"outputChannelId\"]);\n if (\n !Array.isArray(\n record.contributions\n ) ||\n record.contributions\n .length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \".contributions must be a non-empty array.\"\n );\n }\n const contributions =\n record.contributions.map(\n (entry, index) =>\n parseContribution(\n entry,\n path +\n \".contributions[\" +\n index +\n \"]\"\n )\n );\n const keys =\n contributions.map(\n (entry) =>\n entry.offsetX +\n \":\" +\n entry.offsetY +\n \":\" +\n entry.sourceChannelId\n );\n if (\n new Set(keys).size !==\n keys.length\n ) {\n throw new InvalidConfigurationError(\n path +\n \".contributions must not contain duplicate site/channel references.\"\n );\n }\n\n const sum =\n contributions.reduce(\n (valueSum, entry) =>\n valueSum + entry.weight,\n 0\n );\n if (\n !Number.isFinite(sum) ||\n Math.abs(sum - 1) >\n 1e-12\n ) {\n throw new InvalidConfigurationError(\n path +\n \".contribution weights must sum to one.\"\n );\n }\n\n return {\n outputChannelId:\n requireNonEmptyString(\n record.outputChannelId,\n path +\n \".outputChannelId\"\n ),\n contributions\n };\n}\n\n/**\n * Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,\n * missing required fields and inconsistent scientific data are rejected.\n *\n * The profile declares a normalized linear kernel for each output channel. It does not infer the\n * sensor's spectral primaries or calibrated colour.\n * @param value - Untrusted data. TypeScript types alone are not validation.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function parseSensorRawReconstructionProfile(\n value: unknown\n): SensorRawReconstructionProfile {\n const record =\n requireRecord(\n value,\n \"sensorRawReconstructionProfile\", [\"schemaVersion\", \"method\", \"normalization\", \"negativeBlackSubtractedValuesAllowed\", \"kernels\", \"profileId\", \"profileVersion\", \"captureModeId\", \"colorSamplingProfileId\", \"scientificStatus\", \"evidence\", \"limitations\"]\n );\n if (\n record.schemaVersion !==\n SENSOR_RAW_RECONSTRUCTION_PROFILE_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'sensorRawReconstructionProfile.schemaVersion must be \"' +\n SENSOR_RAW_RECONSTRUCTION_PROFILE_SCHEMA_VERSION +\n '\".'\n );\n }\n if (\n record.method !==\n \"explicit-linear-native-neighborhood\"\n ) {\n throw new InvalidConfigurationError(\n 'sensorRawReconstructionProfile.method must be \"explicit-linear-native-neighborhood\".'\n );\n }\n if (\n record.normalization !==\n \"weights-sum-to-one-per-output-channel\"\n ) {\n throw new InvalidConfigurationError(\n \"sensorRawReconstructionProfile.normalization is invalid.\"\n );\n }\n if (\n record\n .negativeBlackSubtractedValuesAllowed !==\n true\n ) {\n throw new InvalidConfigurationError(\n \"sensorRawReconstructionProfile.negativeBlackSubtractedValuesAllowed must be true.\"\n );\n }\n if (\n !Array.isArray(\n record.kernels\n ) ||\n record.kernels.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"sensorRawReconstructionProfile.kernels must be a non-empty array.\"\n );\n }\n\n const kernels =\n record.kernels.map(\n (entry, index) =>\n parseKernel(\n entry,\n \"sensorRawReconstructionProfile.kernels[\" +\n index +\n \"]\"\n )\n );\n const outputIds =\n kernels.map(\n (kernel) =>\n kernel.outputChannelId\n );\n if (\n new Set(outputIds).size !==\n outputIds.length\n ) {\n throw new InvalidConfigurationError(\n \"sensorRawReconstructionProfile.kernels must not contain duplicate outputChannelId values.\"\n );\n }\n\n return {\n schemaVersion:\n SENSOR_RAW_RECONSTRUCTION_PROFILE_SCHEMA_VERSION,\n profileId:\n requireNonEmptyString(\n record.profileId,\n \"sensorRawReconstructionProfile.profileId\"\n ),\n profileVersion:\n requireNonEmptyString(\n record.profileVersion,\n \"sensorRawReconstructionProfile.profileVersion\"\n ),\n captureModeId:\n requireNonEmptyString(\n record.captureModeId,\n \"sensorRawReconstructionProfile.captureModeId\"\n ),\n colorSamplingProfileId:\n requireNonEmptyString(\n record.colorSamplingProfileId,\n \"sensorRawReconstructionProfile.colorSamplingProfileId\"\n ),\n scientificStatus:\n parseStatus(\n record.scientificStatus,\n \"sensorRawReconstructionProfile.scientificStatus\"\n ),\n method:\n \"explicit-linear-native-neighborhood\",\n normalization:\n \"weights-sum-to-one-per-output-channel\",\n negativeBlackSubtractedValuesAllowed:\n true,\n kernels,\n evidence:\n parseEvidenceList(\n record.evidence,\n \"sensorRawReconstructionProfile.evidence\"\n ),\n limitations:\n parseLimitations(\n record.limitations,\n \"sensorRawReconstructionProfile.limitations\"\n )\n };\n}\n\n/**\n * Commits one validated native RAW sample, with its exact site, channel and exposure event, for use\n * in reconstruction.\n * @param input - The input; see `CreateSensorRawCaptureSampleInput` for its fields, units and coordinates.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function createSensorRawCaptureSample(\n input:\n CreateSensorRawCaptureSampleInput\n): SensorRawCaptureSample {\n requireInputKeys(input, \"createSensorRawCaptureSample\", [\"rawCode\", \"contributors\", \"adcIntegralNonLinearity\"]);\n const raw =\n input.rawCode;\n const contributors =\n input.contributors;\n\n requireInputObject(contributors, \"contributors input\");\n if (\n contributors\n .modeSamplingKind !==\n \"native-effective-raster\" ||\n contributors.grouping !==\n null ||\n contributors\n .totalContributorSites !==\n 1 ||\n contributors\n .colorSamplingSiteRect\n .width !== 1 ||\n contributors\n .colorSamplingSiteRect\n .height !== 1\n ) {\n throw new InvalidScientificInputError(\n \"RAW site creation schema 0.1.0 requires one ungrouped native-effective capture-mode sample bound to exactly one color-sampling site; grouped/remosaic modes need explicit signal-combination weights.\"\n );\n }\n\n if (\n contributors\n .colorSamplingProfileId !==\n raw.colorSamplingProfileId\n ) {\n throw new InvalidScientificInputError(\n \"RAW readout color-sampling profile identity must match the capture-mode contributor binding.\"\n );\n }\n\n if (\n contributors\n .channelComposition.kind !==\n \"single-channel\" ||\n contributors\n .channelComposition\n .channelId !==\n raw.channelId\n ) {\n throw new InvalidScientificInputError(\n \"RAW readout channel must match the capture-mode color-sampling contributor channel.\"\n );\n }\n\n if (\n raw.site.x !==\n contributors\n .colorSamplingSiteRect.x ||\n raw.site.y !==\n contributors\n .colorSamplingSiteRect.y\n ) {\n throw new InvalidScientificInputError(\n \"RAW readout site must match the exact capture-mode color-sampling contributor site.\"\n );\n }\n\n const denominator =\n raw.digitalSaturationCode -\n raw.blackLevelCode;\n if (denominator <= 0) {\n throw new InvalidScientificInputError(\n \"RAW black/white code span must be positive.\"\n );\n }\n\n return {\n version:\n SENSOR_RAW_CAPTURE_SAMPLE_VERSION,\n captureModeId:\n contributors.modeId,\n modeSampleCoordinateSystem:\n \"capture-mode-full-frame-effective-sample-index\",\n modeSampleIndexFullFrame: {\n ...contributors\n .modeSampleIndexFullFrame\n },\n colorSamplingProfileId:\n raw.colorSamplingProfileId,\n colorSamplingSite: {\n ...raw.site\n },\n channelId:\n raw.channelId,\n rawCode:\n raw.rawCode,\n blackLevelCode:\n raw.blackLevelCode,\n digitalSaturationCode:\n raw.digitalSaturationCode,\n blackSubtractedNormalizedCode:\n (\n raw.rawCode -\n raw.blackLevelCode\n ) /\n denominator,\n effectiveSaturationCode:\n computeEffectiveSaturationCode(\n input.adcIntegralNonLinearity ===\n undefined\n ? raw\n : {\n ...raw,\n integralNonLinearity:\n input.adcIntegralNonLinearity\n }\n ),\n systemConversionGainElectronsPerCode:\n raw.systemConversionGainElectronsPerCode,\n readNoiseRmsElectrons:\n Math.sqrt(\n raw.electronicReadNoiseComponents.reduce(\n (sum, component) =>\n sum +\n component.rmsElectrons *\n component.rmsElectrons,\n 0\n )\n ),\n readoutProfileId:\n raw.readoutProfileId,\n readoutRegimeId:\n raw.regimeId,\n sourceChargeSeedUint32:\n raw.chargeSeedUint32,\n sourceReadNoiseSeedUint32:\n raw.readNoiseSeedUint32,\n physicalScalarSaturationApplied:\n raw\n .physicalScalarSaturationApplied,\n digitalSaturationApplied:\n raw\n .digitalSaturationApplied,\n cfaPhasePreservedInNativeCoordinates:\n true,\n physicalOrientationApplied:\n false,\n outputRotationApplied:\n false,\n groupedModeCombinationApplied:\n false,\n reconstructionApplied:\n false,\n aliasingModeled:\n false,\n moireModeled: false\n };\n}\n\nfunction requireCenterSite(\n value: {\n x: number;\n y: number;\n }\n): {\n x: number;\n y: number;\n} {\n return {\n x:\n requireNonNegativeSafeIntegerInput(\n value.x,\n \"centerSite.x\"\n ),\n y:\n requireNonNegativeSafeIntegerInput(\n value.y,\n \"centerSite.y\"\n )\n };\n}\n\n/**\n * Combines the supplied native samples through explicit normalized kernels, keeping CFA identity\n * and signed black-subtracted values.\n *\n * The CFA phase is absolute; orientation and crop come later. This fixed linear reconstruction does\n * not infer spectral primaries or calibrated colour, and is not a general demosaic algorithm.\n * @param input - The input; see `ResolveSensorRawReconstructionInput` for its fields, units and coordinates.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function resolveSensorRawReconstruction(\n input:\n ResolveSensorRawReconstructionInput\n): CalculationResult<SensorRawReconstructedPixel> {\n requireInputKeys(input, \"resolveSensorRawReconstruction\", [\"profile\", \"colorSamplingProfile\", \"centerSite\", \"samples\"]);\n const profile =\n parseSensorRawReconstructionProfile(\n input.profile\n );\n const center =\n requireCenterSite(\n input.centerSite\n );\n const colorSamplingProfile =\n parseSensorColorSamplingProfile(\n input.colorSamplingProfile\n );\n if (\n colorSamplingProfile.profileId !==\n profile.colorSamplingProfileId\n ) {\n throw new InvalidScientificInputError(\n \"Reconstruction color-sampling profile identity must match the reconstruction profile.\"\n );\n }\n\n if (\n !Array.isArray(input.samples) ||\n input.samples.length === 0\n ) {\n throw new InvalidScientificInputError(\n \"samples must be a non-empty RAW neighborhood.\"\n );\n }\n\n for (\n const sample of\n input.samples\n ) {\n if (\n sample.captureModeId !==\n profile.captureModeId ||\n sample\n .colorSamplingProfileId !==\n profile\n .colorSamplingProfileId\n ) {\n throw new InvalidScientificInputError(\n \"Every RAW neighborhood sample must match the reconstruction profile capture-mode and color-sampling identities.\"\n );\n }\n const resolvedSite =\n resolveColorSamplingSite({\n profile:\n colorSamplingProfile,\n site:\n sample\n .colorSamplingSite\n });\n if (\n resolvedSite.mapping\n .channelId !==\n sample.channelId\n ) {\n throw new InvalidScientificInputError(\n \"RAW neighborhood sample channelId must match the declared color-sampling topology at its native site.\"\n );\n }\n }\n\n const sampleMap =\n new Map(\n input.samples.map(\n (sample) => [\n sample.colorSamplingSite.x +\n \":\" +\n sample.colorSamplingSite.y +\n \":\" +\n sample.channelId,\n sample\n ] as const\n )\n );\n if (\n sampleMap.size !==\n input.samples.length\n ) {\n throw new InvalidScientificInputError(\n \"RAW neighborhood must not contain duplicate site/channel samples.\"\n );\n }\n\n const outputChannels = profile.kernels.map(kernel => calculateRawReconstructionChannel(kernel, center, (x, y, channelId) => {\n const sample = sampleMap.get(x + \":\" + y + \":\" + channelId);\n if (sample === undefined) throw new InvalidScientificInputError(\"RAW reconstruction neighborhood is missing a required site/channel contribution.\");\n return sample.blackSubtractedNormalizedCode;\n }));\n\n return approximationResult(\n {\n reconstructionProfileId:\n profile.profileId,\n reconstructionProfileVersion:\n profile.profileVersion,\n captureModeId:\n profile.captureModeId,\n colorSamplingProfileId:\n profile\n .colorSamplingProfileId,\n centerSite:\n center,\n outputChannels,\n method:\n \"explicit-linear-native-neighborhood\",\n cfaAware: true,\n captureModeAware:\n true,\n physicalOrientationApplied:\n false,\n outputRotationApplied:\n false,\n sharpeningApplied:\n false,\n denoisingApplied: false,\n aliasingModeled: false,\n moireModeled: false,\n preSamplingOpticalTransferAdequacyEstablished:\n false,\n reconstructionDoesNotModifyRawSamples:\n true\n },\n \"sensor-raw-explicit-linear-reconstruction\",\n \"1.0.0\",\n [\n \"Reconstruction uses only explicitly declared linear native-neighborhood weights tied to exact capture-mode and color-sampling identities.\",\n \"No manufacturer-specific CFA algorithm or branded demosaic behavior is inferred from topology labels.\",\n \"RAW samples remain in invariant native sensor/CFA coordinates; physical orientation and final output rotation are downstream.\",\n \"Negative black-subtracted values are preserved through the linear reconstruction instead of being silently clamped.\",\n \"Sharpening and denoising are not part of RAW reconstruction.\",\n \"Aliasing and moire are explicitly not modeled because this reconstruction contract does not establish an adequate pre-sampling optical transfer/scene-frequency model.\"\n ]\n );\n}\n\n/**\n * Internal: sums one channel's weighted contributions. The reference and packed paths use the same\n * order of operations. With `mirrorBounds`, a contribution site outside the native frame is read from\n * its mirror image (reflect-101, see `reflectRawSiteIndex`). Without it (the default), such a site is\n * rejected.\n */\nexport function calculateRawReconstructionChannel(kernel: SensorRawReconstructionChannelKernel,\n center: {x:number;y:number}, read: (x:number,y:number,channelId:string)=>number,\n mirrorBounds?: {width:number;height:number}): SensorRawReconstructedPixel[\"outputChannels\"][number] {\n let value = 0;\n const sourceContributions = kernel.contributions.map(contribution => {\n let x = center.x + contribution.offsetX, y = center.y + contribution.offsetY;\n if (mirrorBounds !== undefined) { x = reflectRawSiteIndex(x, mirrorBounds.width); y = reflectRawSiteIndex(y, mirrorBounds.height); }\n if (x < 0 || y < 0) throw new InvalidScientificInputError(\"RAW reconstruction kernel references a site outside the non-negative native sensor coordinate domain.\");\n const sourceValue = read(x,y,contribution.sourceChannelId);\n value += sourceValue*contribution.weight;\n return {site:{x,y},sourceChannelId:contribution.sourceChannelId,weight:contribution.weight,sourceValue};\n });\n if (!Number.isFinite(value)) throw new InvalidScientificInputError(\"Reconstructed linear channel value must remain finite.\");\n return {channelId:kernel.outputChannelId,linearBlackSubtractedNormalizedValue:value,sourceContributions};\n}\n\n// ------------------------------------------------------------------ built-in Bayer kernels and borders\n\n/** How a reconstruction neighbourhood that leaves the native frame is handled. */\nexport type RawReconstructionBorderHandling = \"reject\" | \"mirror\";\n\n/**\n * Mirror index (\"reflect-101\"): −1 → 1, −2 → 2, n → n−2. The edge site itself is not repeated, so\n * for a CFA that repeats every 2 sites (Bayer) each mirrored site has the same channel as the site the\n * repeating pattern would put there. Requires size ≥ 1; for size 1 every index maps to 0.\n */\nexport function reflectRawSiteIndex(index: number, size: number): number {\n if (index >= 0 && index < size) return index;\n if (size === 1) return 0;\n const period = 2 * size - 2, m = ((index % period) + period) % period;\n return m < size ? m : period - m;\n}\n\n/**\n * Internal: proves that mirrored (reflect-101) reads at the border return the channel the repeating\n * CFA would put at every virtual site within `reach` of each frame edge, for every row and column\n * phase. Mirroring works per axis, so checking each axis over every phase also covers the corners.\n * Throws otherwise.\n */\nexport function validateMirrorBorderCfaConsistency(layout: { repeatWidthSites: number; repeatHeightSites: number;\n siteChannelIds: readonly string[] }, width: number, height: number, reach: number): void {\n const rw = layout.repeatWidthSites, rh = layout.repeatHeightSites, ids = layout.siteChannelIds;\n const at = (x: number, y: number): string => ids[(((y % rh) + rh) % rh) * rw + ((x % rw) + rw) % rw]!;\n if (reach >= width || reach >= height) {\n throw new InvalidConfigurationError(\"Mirror border handling requires a native frame larger than the kernel reach.\");\n }\n for (let d = 1; d <= reach; d++) {\n for (let p = 0; p < Math.max(rw, rh); p++) {\n if (at(-d, p) !== at(reflectRawSiteIndex(-d, width), p) || at(width - 1 + d, p) !== at(reflectRawSiteIndex(width - 1 + d, width), p) ||\n at(p, -d) !== at(p, reflectRawSiteIndex(-d, height)) || at(p, height - 1 + d) !== at(p, reflectRawSiteIndex(height - 1 + d, height))) {\n throw new InvalidConfigurationError(\"Mirror border handling would change the CFA channel of a reflected site; this CFA/frame size needs reject handling or a smaller region.\");\n }\n }\n }\n}\n\n/** Internal: largest absolute site offset of any contribution (the neighbourhood reach). */\nexport function rawReconstructionKernelReach(profiles: readonly { profile: SensorRawReconstructionProfile }[]): number {\n let reach = 0;\n for (const { profile } of profiles) for (const kernel of profile.kernels) for (const c of kernel.contributions) {\n reach = Math.max(reach, Math.abs(c.offsetX), Math.abs(c.offsetY));\n }\n return reach;\n}\n\nexport type BuiltInBayerDemosaicKernel = \"bilinear\";\nexport const BUILT_IN_BAYER_DEMOSAIC_MODEL_VERSION = \"1.0.0\" as const;\n\nexport interface CreateBuiltInBayerDemosaicProfilesInput {\n kernel: BuiltInBayerDemosaicKernel;\n /** Capture mode the RAW frame belongs to; copied into every phase profile. */\n captureModeId: string;\n /** Must be a 2×2 periodic Bayer mosaic: one red, one blue and two diagonal green sites. */\n colorSamplingProfile: SensorColorSamplingProfile;\n /** CFA channel IDs for the red, green and blue roles. This is also the output channel order. */\n channelRoles: { red: string; green: string; blue: string };\n}\n\nexport interface BuiltInBayerDemosaicProfiles {\n kernel: BuiltInBayerDemosaicKernel;\n /** One profile per absolute CFA phase, row-major (`phaseY`, then `phaseX`). */\n phaseProfiles: { phaseX: number; phaseY: number; profile: SensorRawReconstructionProfile }[];\n outputChannelIds: [string, string, string];\n /** Largest |offset| of any contribution: 1 for bilinear. */\n kernelReachSites: number;\n}\n\ntype BayerRole = \"R\" | \"G\" | \"B\";\ntype BayerTap = readonly [dx: number, dy: number, role: BayerRole, weight: number];\nconst CROSS1 = [[1, 0], [-1, 0], [0, 1], [0, -1]] as const;\nconst DIAG1 = [[1, 1], [-1, 1], [1, -1], [-1, -1]] as const;\nfunction bayerTaps(points: readonly (readonly [number, number])[], role: BayerRole, weight: number): BayerTap[] {\n return points.map(([x, y]) => [x, y, role, weight] as const);\n}\n\n/**\n * Kernels for one kind of site. `own` is the site's channel; `horizontal` is the colour channel on the\n * same row, for a green site.\n *\n * Bilinear: the average of the nearest sites of the wanted channel. Every kernel sums to one and\n * reproduces signals that vary linearly (affine) exactly.\n */\nfunction bayerSiteKernels(own: BayerRole, horizontal: BayerRole | null): Record<BayerRole, BayerTap[]> {\n if (own !== \"G\") {\n const other: BayerRole = own === \"R\" ? \"B\" : \"R\";\n const green: BayerTap[] = bayerTaps(CROSS1, \"G\", 1 / 4);\n const opposite: BayerTap[] = bayerTaps(DIAG1, other, 1 / 4);\n const result = { G: green } as Record<BayerRole, BayerTap[]>;\n result[own] = [[0, 0, own, 1]]; result[other] = opposite;\n return result;\n }\n const h = horizontal!, v: BayerRole = h === \"R\" ? \"B\" : \"R\";\n const along = (role: BayerRole, horizontalAxis: boolean): BayerTap[] => {\n const near = horizontalAxis ? [[1, 0], [-1, 0]] as const : [[0, 1], [0, -1]] as const;\n return bayerTaps(near, role, 1 / 2);\n };\n const identity: BayerTap[] = [[0, 0, \"G\", 1]];\n const result = { G: identity } as Record<BayerRole, BayerTap[]>;\n result[h] = along(h, true); result[v] = along(v, false);\n return result;\n}\n\nconst BAYER_DEMOSAIC_EVIDENCE: Readonly<Record<BuiltInBayerDemosaicKernel, readonly EvidenceProvenance[]>> = {\n bilinear: [{ sourceOrigin: \"third-party\", reuseStatus: \"factual-reference-only\",\n sourceReference: \"Gunturk, Glotzbach, Altunbasak, Schafer & Mersereau, Demosaicking: color filter array interpolation, IEEE Signal Processing Magazine 22(1), 2005\",\n note: \"Bilinear interpolation of each Bayer channel from its nearest same-channel sites; weights derived in Photivra from that published definition.\" }]\n};\n\n/**\n * Builds the per-phase linear reconstruction profiles of the built-in bilinear Bayer demosaic kernel.\n *\n * The result is the ordinary `explicit-linear-native-neighborhood` profile used by RAW frame\n * reconstruction, native RAW development and `createCfaPlaneReconstructionTask`; there is no special\n * code path. Edge pixels need either a region whose neighbourhood stays inside the frame, or mirror\n * border handling.\n *\n * Approximation: fixed linear interpolation, not a calibrated or adaptive demosaic. Bilinear blurs\n * and shows \"zipper\" artefacts at edges. Aliasing and moiré are not modelled. The adaptive AHD method\n * is `createAhdDemosaicTask`.\n */\nexport function createBuiltInBayerDemosaicProfiles(input: CreateBuiltInBayerDemosaicProfilesInput): CalculationResult<BuiltInBayerDemosaicProfiles> {\n requireInputKeys(input, \"createBuiltInBayerDemosaicProfiles\", [\"kernel\", \"captureModeId\", \"colorSamplingProfile\", \"channelRoles\"]);\n const kernel = input.kernel;\n if (kernel !== \"bilinear\") throw new InvalidConfigurationError(\"Unknown built-in Bayer demosaic kernel.\");\n const captureModeId = requireNonEmptyString(input.captureModeId, \"captureModeId\");\n const cfa = parseSensorColorSamplingProfile(input.colorSamplingProfile), layout = cfa.layout;\n const roles = requireRecord(input.channelRoles, \"channelRoles\", [\"red\", \"green\", \"blue\"]);\n const ids: Record<BayerRole, string> = { R: requireNonEmptyString(roles.red, \"channelRoles.red\"),\n G: requireNonEmptyString(roles.green, \"channelRoles.green\"), B: requireNonEmptyString(roles.blue, \"channelRoles.blue\") };\n if (new Set(Object.values(ids)).size !== 3) throw new InvalidConfigurationError(\"channelRoles must name three distinct channels.\");\n if (layout.kind !== \"periodic-mosaic\" || layout.repeatWidthSites !== 2 || layout.repeatHeightSites !== 2) {\n throw new InvalidScientificInputError(\"Built-in Bayer kernels require a 2×2 periodic mosaic.\");\n }\n const tile = layout.siteChannelIds.map((id): BayerRole => {\n const found = ([\"R\", \"G\", \"B\"] as const).find((r) => ids[r] === id);\n if (found === undefined) throw new InvalidScientificInputError(\"Bayer CFA channel is not one of channelRoles.\");\n return found;\n });\n const red = tile.indexOf(\"R\"), blue = tile.indexOf(\"B\");\n if (tile.filter((r) => r === \"G\").length !== 2 || red < 0 || blue < 0 || red + blue !== 3) {\n throw new InvalidScientificInputError(\"Built-in Bayer kernels require one red, one blue and two diagonal green sites.\");\n }\n const phaseProfiles = [0, 1, 2, 3].map((i) => {\n const phaseX = i % 2, phaseY = (i - phaseX) / 2, own = tile[i]!;\n const byRole = bayerSiteKernels(own, own === \"G\" ? tile[phaseY * 2 + (1 - phaseX)]! : null);\n const profile = parseSensorRawReconstructionProfile({\n schemaVersion: SENSOR_RAW_RECONSTRUCTION_PROFILE_SCHEMA_VERSION, profileId: \"photivra-builtin-\" + kernel + \"-phase-\" + phaseX + \"-\" + phaseY,\n profileVersion: BUILT_IN_BAYER_DEMOSAIC_MODEL_VERSION, captureModeId, colorSamplingProfileId: cfa.profileId, scientificStatus: \"approximation\",\n method: \"explicit-linear-native-neighborhood\", normalization: \"weights-sum-to-one-per-output-channel\", negativeBlackSubtractedValuesAllowed: true,\n kernels: ([\"R\", \"G\", \"B\"] as const).map((r) => ({ outputChannelId: ids[r], contributions: byRole[r].map(([offsetX, offsetY, source, weight]) =>\n ({ offsetX, offsetY, sourceChannelId: ids[source], weight })) })),\n evidence: BAYER_DEMOSAIC_EVIDENCE[kernel].map((e) => ({ ...e })),\n limitations: [\"Fixed linear Bayer interpolation; not adaptive, calibrated or manufacturer-specific.\", \"Aliasing, moire and colour fringing are not modelled or suppressed.\"]\n });\n return { phaseX, phaseY, profile };\n });\n return approximationResult({ kernel, phaseProfiles, outputChannelIds: [ids.R, ids.G, ids.B], kernelReachSites: 1 },\n \"built-in-bayer-demosaic-\" + kernel, BUILT_IN_BAYER_DEMOSAIC_MODEL_VERSION, [\n \"Nearest same-channel bilinear interpolation.\",\n \"Weights sum to one per output channel and reproduce affine channel signals exactly.\",\n \"Linear kernels only; adaptive (edge-directed) reconstruction is a separate non-linear path.\"\n ]);\n}\n"]}