@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tone-mapping.js","sourceRoot":"","sources":["../../src/processing/tone-mapping.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAC3I,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,OAAO,EAC9D,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EAAE,UAAU,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAC3I,gBAAgB,EAAE,cAAc,EAEjC,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,GAAG,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,oBAAoB,CAAU,CAAC;AAyB3F,wFAAwF;AACxF,MAAM,UAAU,mCAAmC,CAAC,KAAqC,EAAE,QAA4B;IACrH,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,qBAAqB,CAAC,EAAE,2CAA2C,CAAC,CAAC;IAC9K,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChH,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACjJ,MAAM,KAAK,GAAG,CAAC,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClI,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IAC9G,OAAO,oBAAoB,CAAC;QAC1B,QAAQ,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,qBAAqB,EAAE,CAAC,GAAG,EAAE,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC/H,IAAI,EAAE,QAAQ,CAAC;YACb,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;YACrB,IAAI,MAAM,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC;oBACpE,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;oBAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC1D,CAAC;gBACD,KAAK,CAAC;YACR,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,GAAG,UAAU,EAAE,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9H,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtD,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;oBACxD,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;wBAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;wBAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;wBAAC,SAAS;oBAAC,CAAC;oBACxE,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;oBACtF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,GAAG,KAAK,CAAC,CAAC;wBAAC,IAAI,CAAC,GAAG,CAAC;4BAAE,KAAK,EAAE,CAAC;oBAAC,CAAC;gBAC9G,CAAC;gBACD,KAAK,CAAC;YACR,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM;gBACpI,UAAU,EAAE,oBAAoB,CAAC,2BAA2B,EAAE;oBAC5D,4GAA4G;oBAC5G,6GAA6G;oBAC7G,6GAA6G;iBAAC,CAAC,EAAE,CAAC;QACxH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAsBD;;;;;;;GAOG;AACH,MAAM,UAAU,iCAAiC,CAAC,KAAmC,EAAE,QAA4B;IACjH,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB;QACxI,qBAAqB,CAAC,EAAE,yCAAyC,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChH,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAChI,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACzF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxF,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAClH,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxF,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC7C,sGAAsG;IACtG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IAC3C,OAAO,oBAAoB,CAAC;QAC1B,QAAQ,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,QAAQ,EAAE,qBAAqB,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACjK,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC/D,IAAI,EAAE,QAAQ,CAAC;YACb,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;YACjD,4GAA4G;YAC5G,oDAAoD;YACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC;oBAClF,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC9C,CAAC;gBACD,KAAK,CAAC;YACR,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;oBACjB,KAAK,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;wBAAE,KAAK,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;4BACnH,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAE,CAAC;4BAC7B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;gCAAC,CAAC,IAAI,CAAC,CAAC;gCAAC,CAAC,EAAE,CAAC;4BAAC,CAAC;wBACrC,CAAC;oBACD,iFAAiF;oBACjF,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACrD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;wBAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAAC,CAAC;gBAC5D,CAAC;gBACD,KAAK,CAAC;YACR,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,IAAI,IAAI,CAAC,CAAC,CAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;oBAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;gBAAC,CAAC;YACnH,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBAAC,EAAE,GAAG,CAAC,CAAC;gBAAC,EAAE,GAAG,CAAC,CAAC;YAAC,CAAC,CAAC,iBAAiB;YACtD,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClF,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAmB,EAAE,CAAC;YAC7E,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACtK,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;oBAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE;wBAAE,KAAK,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBACvE,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;oBACrB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBAAC,SAAS;oBAAC,CAAC;oBACxD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;oBAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3F,CAAC;gBACD,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBACxD,KAAK,CAAC,CAAC,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC1D,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;wBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBACzF,KAAK,CAAC;gBACR,CAAC;gBACD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,KAAmB,EAAE,CAAS,EAAE,CAAS,EAAU,EAAE;gBACnE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;gBACvH,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACzI,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,CAAC,CAAC;YACvJ,CAAC,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;oBAClC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAAC,SAAS;oBAAC,CAAC;oBACxD,IAAI,CAAS,CAAC;oBACd,IAAI,KAAK,KAAK,CAAC;wBAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yBACpC,CAAC;wBACJ,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;wBACjH,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACpE,CAAC;oBACD,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC9D,CAAC;gBACD,KAAK,CAAC;YACR,CAAC;YACD,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBAAC,GAAG,GAAG,CAAC,CAAC;gBAAC,GAAG,GAAG,CAAC,CAAC;YAAC,CAAC,CAAC,iBAAiB;YAC1D,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,MAAM,EAAE,GAAG,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxH,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC;oBACpE,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;wBAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;wBAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;wBAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;wBAAC,SAAS;oBAAC,CAAC;oBACpF,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;oBAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC,GAAG,KAAK,CAAC,CAAC;wBAAC,IAAI,CAAC,GAAG,CAAC;4BAAE,KAAK,EAAE,CAAC;oBAAC,CAAC;gBACtH,CAAC;gBACD,KAAK,CAAC;YACR,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK;gBAC7G,UAAU,EAAE,oBAAoB,CAAC,mCAAmC,EAAE;oBACpE,kFAAkF,GAAG,MAAM,GAAG,mBAAmB,GAAG,MAAM,GAAG,iBAAiB,GAAG,CAAC,GAAG,IAAI;oBACzJ,uBAAuB,GAAG,QAAQ,GAAG,+DAA+D;oBACpG,kHAAkH;iBAAC,CAAC,EAAE,CAAC;QAC7H,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAuBD,6GAA6G;AAC7G,kHAAkH;AAClH,sBAAsB;AACtB,yFAAyF;AACzF,MAAM,UAAU,wBAAwB,CAAC,KAA0B,EAAE,QAA4B;IAC/F,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,sBAAsB;QACpI,eAAe,EAAE,qBAAqB,CAAC,EAAE,gCAAgC,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IAClI,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,EAAE,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3J,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,EAAE,yBAAyB,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACxL,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAClH,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACvI,OAAO,oBAAoB,CAAC;QAC1B,QAAQ,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,qBAAqB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;QACzJ,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC/D,IAAI,EAAE,QAAQ,CAAC;YACb,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE;gBAAE,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;YAC/F,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YAC1G,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;gBACtC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;gBAC3J,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC;wBACzE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACvG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC/F,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;wBAC9F,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC;oBAC7C,CAAC;oBACD,KAAK,CAAC;gBACR,CAAC;YACH,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,IAAI,GAAG,GAAG,CAAC,CAAC;oBACZ,KAAK,MAAM,CAAC,IAAI,OAAO;wBAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC;oBACtC,KAAK,MAAM,CAAC,IAAI,OAAO;wBAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,GAAG,GAAG,CAAC;gBAC9C,CAAC;gBACD,KAAK,CAAC;YACR,CAAC;YACD,IAAI,GAAG,GAA0B,IAAI,EAAE,KAAK,GAAwC,EAAE,CAAC;YACvF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;gBACxH,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;gBAClB,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;oBACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;wBAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;4BAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC;gBACtH,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YACpE,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;oBACpB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBAAC,OAAO,EAAE,CAAC;oBAAC,CAAC;yBAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBAAC,OAAO,EAAE,CAAC;oBAAC,CAAC;gBACtF,CAAC;gBACD,KAAK,CAAC;YACR,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,oBAAoB,CAAC,8BAA8B,EAAE;oBACvI,uHAAuH;oBACvH,8GAA8G;oBAC9G,0EAA0E;iBAAC,CAAC,EAAE,CAAC;QACnF,CAAC;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * HDR → SDR tone-mapping operators, and exposure fusion. Each is a named rendering choice (an\n * approximation), not a perceptual or display-calibrated model:\n * - Reinhard et al. 2002 global photographic operator: log-average key, L = a·L_w/L̄_w,\n * L_d = L(1 + L/L_white²)/(1 + L); colour by the luminance ratio L_d/L_w (chromaticity-preserving).\n * - Durand & Dorsey 2002 local operator: base = bilateral(log₁₀ L), detail = log₁₀ L − base,\n * output log = base·c + detail − max(base)·c with c = log₁₀(contrast)/(max(base) − min(base)); the\n * bilateral filter uses the paper's piecewise-linear acceleration with spatial downsampling.\n * - Mertens, Kautz & Van Reeth 2007 exposure fusion of display-referred frames: per-pixel weight\n * W = C^ωc·S^ωs·E^ωe from Laplacian contrast, RGB standard deviation and well-exposedness\n * exp(−(v − 0.5)²/(2·0.2²)), normalized across frames and blended with Laplacian pyramids\n * (Burt & Adelson 1983).\n * The HDR operators output display-referred linear RGB in the input primaries; encode it with the SDR\n * rendering functions. Fusion output stays in the (encoded) domain of its inputs.\n * @see docs/PROCESSING.md for equations, sources and limits.\n */\n\nimport {\n autoLevels, collapse, collapseRows, convolveRows, convolveSeparable, gaussianKernel, gaussianPyramid, gaussianPyramidRows, laplacianPyramid,\n laplacianPyramidRows, luminanceWeights, pyramidBytes, reflect\n} from \"./image-ops.js\";\nimport {\n createProcessingTask, finiteRows, maximumWorkingBytes, optionalFiniteIn, optionalIntegerIn, processingProvenance, requireEnum, requireImage,\n requireImageList, requireOptions,\n type ProcessingBody, type ProcessingLinearColorSpace, type ProcessingProvenance, type ProcessingProvider, type ProcessingRgbImage, type ProcessingTask\n} from \"./processing-task.js\";\n\nconst SPACES = [\"linear-srgb-d65\", \"linear-display-p3-d65\", \"linear-rec2020-d65\"] as const;\n\nexport interface ToneMappedImage extends ProcessingRgbImage {\n /** Output components above 1 (left unclipped for the downstream gamut/encoding stage). */\n aboveOneSampleCount: number;\n provenance: ProcessingProvenance;\n}\n\nexport interface ReinhardGlobalToneMappingInput {\n image: ProcessingRgbImage;\n inputColorSpace: ProcessingLinearColorSpace;\n /** Key value a; default 0.18. */\n key?: number;\n /** Smallest scaled luminance mapped to white; default the largest scaled luminance. */\n whiteLuminance?: number;\n /** δ in the log-average exp(mean(log(δ + L_w))); default 1e-6. */\n logAverageDelta?: number;\n maximumWorkingBytes?: number;\n}\n\nexport interface ReinhardGlobalToneMappingOutput extends ToneMappedImage {\n logAverageLuminance: number;\n whiteLuminance: number;\n}\n\n/** Reinhard, Stark, Shirley & Ferwerda (2002) global photographic tone reproduction. */\nexport function createReinhardGlobalToneMappingTask(input: ReinhardGlobalToneMappingInput, provider: ProcessingProvider): ProcessingTask<ReinhardGlobalToneMappingOutput> {\n const r = requireOptions(input, [\"image\", \"inputColorSpace\", \"key\", \"whiteLuminance\", \"logAverageDelta\", \"maximumWorkingBytes\"], \"createReinhardGlobalToneMappingTask input\");\n const image = requireImage(r.image, \"image\"), space = requireEnum(r.inputColorSpace, SPACES, \"inputColorSpace\");\n const key = optionalFiniteIn(r.key, 0.18, \"key\", 0, 1e6, true), delta = optionalFiniteIn(r.logAverageDelta, 1e-6, \"logAverageDelta\", 0, 1, true);\n const white = r.whiteLuminance === undefined ? undefined : optionalFiniteIn(r.whiteLuminance, 1, \"whiteLuminance\", 0, 1e12, true);\n const [wr, wg, wb] = luminanceWeights(space), h = image.height, stride = image.width * 3, n = image.width * h;\n return createProcessingTask({\n provider, totalTileCount: 3 * h, estimatedWorkingBytes: n * 12, maximumWorkingBytes: maximumWorkingBytes(r.maximumWorkingBytes),\n body: function* (): ProcessingBody<ReinhardGlobalToneMappingOutput> {\n yield* finiteRows(image.data, image.width, h, 3, \"image\");\n const d = image.data;\n let logSum = 0, maxL = 0;\n for (let y = 0; y < h; y++) {\n for (let i = y * stride; i < (y + 1) * stride; i += 3) {\n const l = Math.max(0, wr * d[i]! + wg * d[i + 1]! + wb * d[i + 2]!);\n logSum += Math.log(delta + l); maxL = Math.max(maxL, l);\n }\n yield;\n }\n const logAverage = Math.exp(logSum / n), scale = key / logAverage, lWhite = white ?? Math.max(maxL * scale, Number.MIN_VALUE);\n const out = new Float32Array(3 * n);\n let above = 0;\n for (let y = 0; y < h; y++) {\n for (let i = y * stride; i < (y + 1) * stride; i += 3) {\n const lw = wr * d[i]! + wg * d[i + 1]! + wb * d[i + 2]!;\n if (!(lw > 0)) { out[i] = 0; out[i + 1] = 0; out[i + 2] = 0; continue; }\n const l = scale * lw, ld = l * (1 + l / (lWhite * lWhite)) / (1 + l), ratio = ld / lw;\n for (let c = 0; c < 3; c++) { const v = (out[i + c] = Math.max(0, d[i + c]!) * ratio); if (v > 1) above++; }\n }\n yield;\n }\n return { width: image.width, height: h, data: out, aboveOneSampleCount: above, logAverageLuminance: logAverage, whiteLuminance: lWhite,\n provenance: processingProvenance(\"tone-reinhard-2002-global\", [\n \"Global photographic operator L_d = L(1 + L/L_white^2)/(1 + L) with L = a L_w / exp(mean log(delta + L_w)).\",\n \"Colour scaled by L_d/L_w (preserves chromaticity); negative components and non-positive luminance map to 0.\",\n \"Display-referred linear output; no dodging-and-burning (local) variant, gamut mapping or transfer encoding.\"]) };\n }\n });\n}\n\nexport interface DurandDorseyToneMappingInput {\n image: ProcessingRgbImage;\n inputColorSpace: ProcessingLinearColorSpace;\n /** Spatial σ in pixels; default 2% of the larger image side. */\n spatialSigmaPixels?: number;\n /** Range σ in log₁₀ luminance; default 0.4. */\n rangeSigmaLog10?: number;\n /** Target base-layer contrast ratio; default 5. */\n targetContrast?: number;\n /** Spatial downsampling factor of the fast bilateral filter; default max(1, round(σ_s/4)). */\n downsampleFactor?: number;\n maximumWorkingBytes?: number;\n}\n\nexport interface DurandDorseyToneMappingOutput extends ToneMappedImage {\n /** Bilateral base layer (log₁₀ luminance) per pixel; −Infinity for pixels with luminance ≤ 0, which are excluded from the filter. */\n baseLog10: Float32Array;\n compressionFactor: number;\n}\n\n/**\n * Durand & Dorsey (2002) bilateral base/detail tone mapping. The fast bilateral filter is the paper's\n * piecewise-linear scheme:\n * 1. Place intensity nodes i_j no more than σ_r apart.\n * 2. For each node, compute J_j = (f ⊗ (g_r(I − i_j)·I)) / (f ⊗ g_r(I − i_j)) on a box-downsampled grid.\n * 3. Upsample bilinearly, then interpolate linearly between the two nodes on either side of each\n * full-resolution intensity.\n */\nexport function createDurandDorseyToneMappingTask(input: DurandDorseyToneMappingInput, provider: ProcessingProvider): ProcessingTask<DurandDorseyToneMappingOutput> {\n const r = requireOptions(input, [\"image\", \"inputColorSpace\", \"spatialSigmaPixels\", \"rangeSigmaLog10\", \"targetContrast\", \"downsampleFactor\",\n \"maximumWorkingBytes\"], \"createDurandDorseyToneMappingTask input\");\n const image = requireImage(r.image, \"image\"), space = requireEnum(r.inputColorSpace, SPACES, \"inputColorSpace\");\n const W = image.width, H = image.height, n = W * H;\n const sigmaS = optionalFiniteIn(r.spatialSigmaPixels, Math.max(0.5, 0.02 * Math.max(W, H)), \"spatialSigmaPixels\", 0, 1e5, true);\n const sigmaR = optionalFiniteIn(r.rangeSigmaLog10, 0.4, \"rangeSigmaLog10\", 0, 100, true);\n const contrast = optionalFiniteIn(r.targetContrast, 5, \"targetContrast\", 1, 1e12, true);\n const z = optionalIntegerIn(r.downsampleFactor, Math.max(1, Math.round(sigmaS / 4)), \"downsampleFactor\", 1, 1024);\n const cw = Math.ceil(W / z), ch = Math.ceil(H / z), kernel = gaussianKernel(sigmaS / z);\n const [wr, wg, wb] = luminanceWeights(space);\n // Node count depends on the data range; the plan bounds it by the float32 log₁₀ range (≈ 90 decades).\n const maxNodes = Math.ceil(90 / sigmaR) + 2;\n const nodeRows = 2 * convolveRows(ch) + ch;\n return createProcessingTask({\n provider, totalTileCount: 4 * H + ch + maxNodes * nodeRows, estimatedWorkingBytes: n * (3 * 4 + 4 + 4) + cw * ch * 4 * 6 + Math.min(maxNodes, 4096) * cw * ch * 4,\n maximumWorkingBytes: maximumWorkingBytes(r.maximumWorkingBytes),\n body: function* (): ProcessingBody<DurandDorseyToneMappingOutput> {\n yield* finiteRows(image.data, W, H, 3, \"image\");\n const d = image.data, logL = new Float32Array(n);\n // Pixels with luminance ≤ 0 have no finite log₁₀; they are marked −∞, excluded from the filter and from the\n // ranges below, and output as 0 by the colour pass.\n for (let y = 0; y < H; y++) {\n for (let x = 0; x < W; x++) {\n const i = y * W + x, l = wr * d[3 * i]! + wg * d[3 * i + 1]! + wb * d[3 * i + 2]!;\n logL[i] = l > 0 ? Math.log10(l) : -Infinity;\n }\n yield;\n }\n const coarse = new Float32Array(cw * ch);\n let lo = Infinity, hi = -Infinity;\n for (let y = 0; y < ch; y++) {\n for (let x = 0; x < cw; x++) {\n let s = 0, c = 0;\n for (let yy = y * z; yy < Math.min(H, (y + 1) * z); yy++) for (let xx = x * z; xx < Math.min(W, (x + 1) * z); xx++) {\n const v = logL[yy * W + xx]!;\n if (v > -Infinity) { s += v; c++; }\n }\n // A cell with no positive-luminance pixel is NaN and carries zero filter weight.\n const v = (coarse[y * cw + x] = c > 0 ? s / c : NaN);\n if (c > 0) { lo = Math.min(lo, v); hi = Math.max(hi, v); }\n }\n yield;\n }\n for (let i = 0; i < n; i++) if (logL[i]! > -Infinity) { lo = Math.min(lo, logL[i]!); hi = Math.max(hi, logL[i]!); }\n if (!(hi >= lo)) { lo = 0; hi = 0; } // all-zero image\n const nodes = hi > lo ? Math.min(maxNodes, Math.ceil((hi - lo) / sigmaR) + 1) : 1;\n const step = nodes > 1 ? (hi - lo) / (nodes - 1) : 0, J: Float32Array[] = [];\n const g = new Float32Array(cw * ch), hgt = new Float32Array(cw * ch), tmp = new Float32Array(cw * ch), gs = new Float32Array(cw * ch), hs = new Float32Array(cw * ch);\n for (let j = 0; j < maxNodes; j++) {\n if (j >= nodes) { for (let k = 0; k < nodeRows; k++) yield; continue; }\n const node = lo + j * step;\n for (let i = 0; i < cw * ch; i++) {\n const c = coarse[i]!;\n if (Number.isNaN(c)) { g[i] = 0; hgt[i] = 0; continue; }\n const w = Math.exp(-((c - node) ** 2) / (2 * sigmaR * sigmaR)); g[i] = w; hgt[i] = w * c;\n }\n yield* convolveSeparable(g, cw, ch, 1, kernel, tmp, gs);\n yield* convolveSeparable(hgt, cw, ch, 1, kernel, tmp, hs);\n const out = new Float32Array(cw * ch);\n for (let y = 0; y < ch; y++) {\n for (let i = y * cw; i < (y + 1) * cw; i++) out[i] = gs[i]! > 0 ? hs[i]! / gs[i]! : node;\n yield;\n }\n J.push(out);\n }\n const sample = (plane: Float32Array, x: number, y: number): number => {\n const fx = Math.min(Math.max((x + 0.5) / z - 0.5, 0), cw - 1), fy = Math.min(Math.max((y + 0.5) / z - 0.5, 0), ch - 1);\n const x0 = Math.floor(fx), y0 = Math.floor(fy), x1 = Math.min(x0 + 1, cw - 1), y1 = Math.min(y0 + 1, ch - 1), ax = fx - x0, ay = fy - y0;\n return (1 - ay) * ((1 - ax) * plane[y0 * cw + x0]! + ax * plane[y0 * cw + x1]!) + ay * ((1 - ax) * plane[y1 * cw + x0]! + ax * plane[y1 * cw + x1]!);\n };\n const base = new Float32Array(n);\n let bLo = Infinity, bHi = -Infinity;\n for (let y = 0; y < H; y++) {\n for (let x = 0; x < W; x++) {\n const i = y * W + x, v = logL[i]!;\n if (!(v > -Infinity)) { base[i] = -Infinity; continue; }\n let b: number;\n if (nodes === 1) b = sample(J[0]!, x, y);\n else {\n const t = Math.min(Math.max((v - lo) / step, 0), nodes - 1), j0 = Math.min(Math.floor(t), nodes - 2), a = t - j0;\n b = (1 - a) * sample(J[j0]!, x, y) + a * sample(J[j0 + 1]!, x, y);\n }\n base[i] = b; bLo = Math.min(bLo, b); bHi = Math.max(bHi, b);\n }\n yield;\n }\n if (!(bHi >= bLo)) { bLo = 0; bHi = 0; } // all-zero image\n const factor = bHi > bLo ? Math.log10(contrast) / (bHi - bLo) : 1, offset = bHi * factor, out = new Float32Array(3 * n);\n let above = 0;\n for (let y = 0; y < H; y++) {\n for (let i = y * W; i < (y + 1) * W; i++) {\n const lw = wr * d[3 * i]! + wg * d[3 * i + 1]! + wb * d[3 * i + 2]!;\n if (!(lw > 0)) { out[3 * i] = 0; out[3 * i + 1] = 0; out[3 * i + 2] = 0; continue; }\n const ratio = 10 ** (base[i]! * factor + (logL[i]! - base[i]!) - offset) / lw;\n for (let c = 0; c < 3; c++) { const v = (out[3 * i + c] = Math.max(0, d[3 * i + c]!) * ratio); if (v > 1) above++; }\n }\n yield;\n }\n return { width: W, height: H, data: out, baseLog10: base, compressionFactor: factor, aboveOneSampleCount: above,\n provenance: processingProvenance(\"tone-durand-dorsey-2002-bilateral\", [\n \"Base = fast piecewise-linear bilateral filter of log10 luminance (spatial sigma \" + sigmaS + \" px, range sigma \" + sigmaR + \", downsampling \" + z + \").\",\n \"Base compressed to a \" + contrast + \":1 contrast, detail kept, largest base mapped to luminance 1.\",\n \"Colour scaled by the luminance ratio; display-referred linear output without gamut mapping or transfer encoding.\"]) };\n }\n });\n}\n\n// ------------------------------------------------------------------ exposure fusion\n\nexport interface ExposureFusionInput {\n /** Display-referred (e.g. sRGB-encoded) frames with values nominally in [0, 1]. */\n frames: readonly ProcessingRgbImage[];\n contrastExponent?: number;\n saturationExponent?: number;\n wellExposednessExponent?: number;\n /** Well-exposedness Gaussian σ; default 0.2. */\n wellExposednessSigma?: number;\n /** Pyramid levels; default down to a 1-pixel side (at most 12). */\n pyramidLevels?: number;\n maximumWorkingBytes?: number;\n}\n\nexport interface ExposureFusionOutput extends ProcessingRgbImage {\n /** Components clipped to [0, 1] after collapsing the blended pyramid. */\n clippedSampleCount: number;\n provenance: ProcessingProvenance;\n}\n\n// Patent note (public record, not legal advice): standard Mertens et al. Laplacian-pyramid fusion. CyberLink\n// US 8,885,976 (in force to 2034) claims a specific merged-pyramid variant that this implementation does not use;\n// see THIRD_PARTY.md.\n/** Mertens, Kautz & Van Reeth (2007) exposure fusion with Laplacian-pyramid blending. */\nexport function createExposureFusionTask(input: ExposureFusionInput, provider: ProcessingProvider): ProcessingTask<ExposureFusionOutput> {\n const r = requireOptions(input, [\"frames\", \"contrastExponent\", \"saturationExponent\", \"wellExposednessExponent\", \"wellExposednessSigma\",\n \"pyramidLevels\", \"maximumWorkingBytes\"], \"createExposureFusionTask input\");\n const frames = requireImageList(r.frames, \"frames\", 1), W = frames[0]!.width, H = frames[0]!.height, n = W * H, K = frames.length;\n const wc = optionalFiniteIn(r.contrastExponent, 1, \"contrastExponent\", 0, 16), ws = optionalFiniteIn(r.saturationExponent, 1, \"saturationExponent\", 0, 16);\n const we = optionalFiniteIn(r.wellExposednessExponent, 1, \"wellExposednessExponent\", 0, 16), sigma = optionalFiniteIn(r.wellExposednessSigma, 0.2, \"wellExposednessSigma\", 0, 10, true);\n const levels = optionalIntegerIn(r.pyramidLevels, autoLevels(W, H, 12), \"pyramidLevels\", 1, autoLevels(W, H, 32));\n const rows = K * H + H + K * (laplacianPyramidRows(W, H, levels) + gaussianPyramidRows(W, H, levels)) + collapseRows(W, H, levels) + H;\n return createProcessingTask({\n provider, totalTileCount: K * H + rows, estimatedWorkingBytes: K * n * 4 + 3 * pyramidBytes(W, H, 3, levels) + 2 * pyramidBytes(W, H, 1, levels) + n * 12,\n maximumWorkingBytes: maximumWorkingBytes(r.maximumWorkingBytes),\n body: function* (): ProcessingBody<ExposureFusionOutput> {\n for (const [k, f] of frames.entries()) yield* finiteRows(f.data, W, H, 3, \"frames[\" + k + \"]\");\n const weights = frames.map(() => new Float32Array(n)), [lr, lg, lb] = luminanceWeights(\"linear-srgb-d65\");\n for (const [k, f] of frames.entries()) {\n const d = f.data, w = weights[k]!;\n const gray = (x: number, y: number): number => { const i = 3 * (reflect(y, H) * W + reflect(x, W)); return lr * d[i]! + lg * d[i + 1]! + lb * d[i + 2]!; };\n for (let y = 0; y < H; y++) {\n for (let x = 0; x < W; x++) {\n const i = y * W + x, R = d[3 * i]!, G = d[3 * i + 1]!, B = d[3 * i + 2]!;\n const c = Math.abs(gray(x - 1, y) + gray(x + 1, y) + gray(x, y - 1) + gray(x, y + 1) - 4 * gray(x, y));\n const mu = (R + G + B) / 3, s = Math.sqrt(((R - mu) ** 2 + (G - mu) ** 2 + (B - mu) ** 2) / 3);\n const e = Math.exp(-((R - 0.5) ** 2 + (G - 0.5) ** 2 + (B - 0.5) ** 2) / (2 * sigma * sigma));\n w[i] = c ** wc * s ** ws * e ** we + 1e-12;\n }\n yield;\n }\n }\n for (let y = 0; y < H; y++) {\n for (let i = y * W; i < (y + 1) * W; i++) {\n let sum = 0;\n for (const w of weights) sum += w[i]!;\n for (const w of weights) w[i] = w[i]! / sum;\n }\n yield;\n }\n let acc: Float32Array[] | null = null, sizes: { width: number; height: number }[] = [];\n for (const [k, f] of frames.entries()) {\n const lap = yield* laplacianPyramid(f.data, W, H, 3, levels), gw = yield* gaussianPyramid(weights[k]!, W, H, 1, levels);\n sizes = lap.sizes;\n acc ??= lap.sizes.map((s) => new Float32Array(s.width * s.height * 3));\n for (let l = 0; l < levels; l++) {\n const a = acc[l]!, L = lap.levels[l]!, G = gw.levels[l]!;\n for (let i = 0; i < G.length; i++) for (let c = 0; c < 3; c++) a[3 * i + c] = a[3 * i + c]! + G[i]! * L[3 * i + c]!;\n }\n }\n const fused = yield* collapse({ levels: acc!, sizes, channels: 3 });\n let clipped = 0;\n for (let y = 0; y < H; y++) {\n for (let i = 3 * y * W; i < 3 * (y + 1) * W; i++) {\n const v = fused[i]!;\n if (v < 0) { fused[i] = 0; clipped++; } else if (v > 1) { fused[i] = 1; clipped++; }\n }\n yield;\n }\n return { width: W, height: H, data: fused, clippedSampleCount: clipped, provenance: processingProvenance(\"exposure-fusion-mertens-2007\", [\n \"Weights: |3x3 Laplacian of Rec.709 luma|^wc * RGB std^ws * prod exp(-(v-0.5)^2/(2 sigma^2))^we, normalized per pixel.\",\n \"Laplacian-pyramid blending with Burt-Adelson 5-tap kernel and reflect-101 borders; output clipped to [0, 1].\",\n \"Display-referred blending of registered frames; not a radiance estimate.\"]) };\n }\n });\n}\n\n"]}
@@ -1,7 +1,9 @@
1
1
  /**
2
- * The legacy CameraConfiguration is a finite unit-bearing POC setting record, not a complete
3
- * equipment capability profile. Its parser lives in schema/validation; newer ISO/exposure
4
- * capabilities remain separate so adding a control policy does not reinterpret saved POC data.
2
+ * The legacy CameraConfiguration: one set of camera settings, with units, for the
3
+ * proof-of-concept (POC) simulation. It is not a full description of what a camera can do.
4
+ *
5
+ * Its parser is in schema/validation. Newer ISO and exposure capabilities are separate types,
6
+ * so adding a control policy never changes the meaning of saved POC data.
5
7
  * @see docs/RELEASE_1_0.md and the corresponding domain guide.
6
8
  */
7
9
  export interface SensorConfiguration {
@@ -37,4 +39,3 @@ export interface CameraConfiguration {
37
39
  focus: FocusConfiguration;
38
40
  stabilization?: StabilizationConfiguration;
39
41
  }
40
- //# sourceMappingURL=camera.d.ts.map
@@ -1,12 +1,8 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Adapts a continuous scene-illumination spectrum into the shared spectral coverage contract.
4
- * Discrete-line spectra intentionally use their own measure path and are never broadened into
5
- * continuous breakpoints.
6
- * Resolves a discrete illumination spectrum into integrated per-line source quantities. Relative line
7
- * weights are fractions of the declared wavelength-integrated source magnitude. A disabled source
8
- * resolves to zero contribution. This helper does not evaluate visibility, material response,
9
- * transport, outgoing scene radiance, optics, or sensor response.
2
+ * Connects light-source spectra to the shared spectral helpers in core/spectral-composition.
3
+ *
4
+ * Continuous spectra become wavelength coverage with breakpoints. Discrete-line spectra keep
5
+ * their own path and are never widened into continuous spectra.
10
6
  * @see docs/SCENE_RADIANCE_AND_ILLUMINATION.md for equations, coordinate/unit conventions, blockers
11
7
  * and support limits.
12
8
  */
@@ -31,21 +27,19 @@ export interface SceneIlluminationDiscreteLineMeasure {
31
27
  sceneRadianceCalculated: false;
32
28
  }
33
29
  /**
34
- * Adapts a continuous scene-illumination spectrum into the shared spectral
35
- * coverage contract.
30
+ * Converts a continuous light-source spectrum into the shared spectral coverage
31
+ * type (wavelength range plus breakpoints).
36
32
  *
37
- * Discrete-line spectra intentionally use their own measure path and are never
38
- * broadened into continuous breakpoints.
33
+ * Discrete-line spectra are handled separately and are never widened into
34
+ * continuous breakpoints.
39
35
  */
40
36
  export declare function createSceneIlluminationSpectralCoverageParticipant(input: CreateSceneIlluminationSpectralCoverageParticipantInput): SpectralCoverageParticipant;
41
37
  /**
42
- * Resolves a discrete illumination spectrum into integrated per-line source
43
- * quantities.
38
+ * Splits a discrete-line light source into the amount carried by each line.
44
39
  *
45
- * Relative line weights are fractions of the declared wavelength-integrated
46
- * source magnitude. A disabled source resolves to zero contribution. This
47
- * helper does not evaluate visibility, material response, transport, outgoing
48
- * scene radiance, optics, or sensor response.
40
+ * Each relative line weight is a fraction of the source's declared total (integrated
41
+ * over wavelength). A disabled source contributes zero. This helper does not handle
42
+ * visibility, material response, light transport, outgoing scene radiance, optics or
43
+ * sensor response.
49
44
  */
50
45
  export declare function resolveSceneIlluminationDiscreteLineMeasure(source: SceneIlluminationSource): SceneIlluminationDiscreteLineMeasure;
51
- //# sourceMappingURL=illumination-spectral.d.ts.map
@@ -1,32 +1,33 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Adapts a continuous scene-illumination spectrum into the shared spectral coverage contract.
5
- * Discrete-line spectra intentionally use their own measure path and are never broadened into
6
- * continuous breakpoints.
7
- * Resolves a discrete illumination spectrum into integrated per-line source quantities. Relative line
8
- * weights are fractions of the declared wavelength-integrated source magnitude. A disabled source
9
- * resolves to zero contribution. This helper does not evaluate visibility, material response,
10
- * transport, outgoing scene radiance, optics, or sensor response.
3
+ * Connects light-source spectra to the shared spectral helpers in core/spectral-composition.
4
+ *
5
+ * Continuous spectra become wavelength coverage with breakpoints. Discrete-line spectra keep
6
+ * their own path and are never widened into continuous spectra.
11
7
  * @see docs/SCENE_RADIANCE_AND_ILLUMINATION.md for equations, coordinate/unit conventions, blockers
12
8
  * and support limits.
13
9
  */
14
10
  import { distributeIntegratedQuantityAcrossDiscreteSpectralLines } from "../core/spectral-composition.js";
15
11
  import { InvalidScientificInputError } from "../core/validation.js";
12
+ import { requireInputObject, requireInputKeys } from "../core/record-validation.js";
13
+ import { parseSceneIlluminationSource } from "./illumination.js";
14
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
16
15
  function nonEmptyParticipantId(candidate) {
17
16
  if (candidate.trim().length === 0) {
18
- throw new InvalidScientificInputError("participantId must be a non-empty string when supplied.");
17
+ throw new InvalidConfigurationError("participantId must be a non-empty string when supplied.");
19
18
  }
20
19
  return candidate;
21
20
  }
22
21
  /**
23
- * Adapts a continuous scene-illumination spectrum into the shared spectral
24
- * coverage contract.
22
+ * Converts a continuous light-source spectrum into the shared spectral coverage
23
+ * type (wavelength range plus breakpoints).
25
24
  *
26
- * Discrete-line spectra intentionally use their own measure path and are never
27
- * broadened into continuous breakpoints.
25
+ * Discrete-line spectra are handled separately and are never widened into
26
+ * continuous breakpoints.
28
27
  */
29
28
  export function createSceneIlluminationSpectralCoverageParticipant(input) {
29
+ requireInputKeys(input, "createSceneIlluminationSpectralCoverageParticipant", ["source", "participantId"]);
30
+ requireInputObject(input.source, "source");
30
31
  const spectrum = input.source.spectrum;
31
32
  if (spectrum.kind !==
32
33
  "continuous-relative-spectrum") {
@@ -90,15 +91,18 @@ function magnitudeQuantity(source) {
90
91
  };
91
92
  }
92
93
  /**
93
- * Resolves a discrete illumination spectrum into integrated per-line source
94
- * quantities.
94
+ * Splits a discrete-line light source into the amount carried by each line.
95
95
  *
96
- * Relative line weights are fractions of the declared wavelength-integrated
97
- * source magnitude. A disabled source resolves to zero contribution. This
98
- * helper does not evaluate visibility, material response, transport, outgoing
99
- * scene radiance, optics, or sensor response.
96
+ * Each relative line weight is a fraction of the source's declared total (integrated
97
+ * over wavelength). A disabled source contributes zero. This helper does not handle
98
+ * visibility, material response, light transport, outgoing scene radiance, optics or
99
+ * sensor response.
100
100
  */
101
101
  export function resolveSceneIlluminationDiscreteLineMeasure(source) {
102
+ requireInputObject(source, "resolveSceneIlluminationDiscreteLineMeasure input");
103
+ // 2.0.0: the whole source is validated, so an unknown field at any level is rejected.
104
+ parseSceneIlluminationSource(source, "source");
105
+ requireInputObject(source.spectrum, "source.spectrum");
102
106
  if (source.spectrum.kind !==
103
107
  "discrete-relative-lines") {
104
108
  throw new InvalidScientificInputError("Discrete line measure resolution requires a discrete-relative-lines spectrum.");
@@ -1 +1 @@
1
- {"version":3,"file":"illumination-spectral.js","sourceRoot":"","sources":["../../src/schema/illumination-spectral.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"illumination-spectral.js","sourceRoot":"","sources":["../../src/schema/illumination-spectral.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Connects light-source spectra to the shared spectral helpers in core/spectral-composition.\n *\n * Continuous spectra become wavelength coverage with breakpoints. Discrete-line spectra keep\n * their own path and are never widened into continuous spectra.\n * @see docs/SCENE_RADIANCE_AND_ILLUMINATION.md for equations, coordinate/unit conventions, blockers\n * and support limits.\n */\n\nimport {\n distributeIntegratedQuantityAcrossDiscreteSpectralLines,\n type DiscreteSpectralLineMeasure,\n type DiscreteSpectralLineQuantityUnit,\n type SpectralCoverageParticipant\n} from \"../core/spectral-composition.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport type {\n SceneIlluminationScientificStatus,\n SceneIlluminationSource\n} from \"./illumination.js\";\nimport { requireInputObject, requireInputKeys } from \"../core/record-validation.js\";\nimport { parseSceneIlluminationSource } from \"./illumination.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\nexport interface CreateSceneIlluminationSpectralCoverageParticipantInput {\n source: SceneIlluminationSource;\n participantId?: string;\n}\n\nexport interface SceneIlluminationDiscreteLineMeasure {\n sourceId: string;\n sourceFamily:\n SceneIlluminationSource[\"family\"];\n sourceEnabled: boolean;\n spectrumId: string;\n magnitudeKind:\n SceneIlluminationSource[\"magnitude\"][\"kind\"];\n magnitudeScientificStatus:\n SceneIlluminationScientificStatus;\n spectrumScientificStatus:\n \"calibrated-relative-lines\" |\n \"approximation\";\n measure: DiscreteSpectralLineMeasure;\n combinedUncertaintyCalculated: false;\n calibratedAbsoluteLineClaimAuthorized:\n false;\n materialTransportApplied: false;\n sceneRadianceCalculated: false;\n}\n\nfunction nonEmptyParticipantId(\n candidate: string\n): string {\n if (candidate.trim().length === 0) {\n throw new InvalidConfigurationError(\n \"participantId must be a non-empty string when supplied.\"\n );\n }\n return candidate;\n}\n\n/**\n * Converts a continuous light-source spectrum into the shared spectral coverage\n * type (wavelength range plus breakpoints).\n *\n * Discrete-line spectra are handled separately and are never widened into\n * continuous breakpoints.\n */\nexport function createSceneIlluminationSpectralCoverageParticipant(\n input:\n CreateSceneIlluminationSpectralCoverageParticipantInput\n): SpectralCoverageParticipant {\n requireInputKeys(input, \"createSceneIlluminationSpectralCoverageParticipant\", [\"source\", \"participantId\"]);\n requireInputObject(input.source, \"source\");\n const spectrum = input.source.spectrum;\n if (\n spectrum.kind !==\n \"continuous-relative-spectrum\"\n ) {\n throw new InvalidScientificInputError(\n \"Continuous spectral coverage requires a continuous-relative-spectrum; discrete lines, RGB, blackbody approximation, and unresolved spectra use different semantics.\"\n );\n }\n if (\n spectrum.wavelengthBasis ===\n \"unspecified\"\n ) {\n throw new InvalidScientificInputError(\n \"Continuous illumination spectral coverage requires a resolved air or vacuum wavelength basis.\"\n );\n }\n\n const first = spectrum.samples[0]!;\n const last =\n spectrum.samples[\n spectrum.samples.length - 1\n ]!;\n const participantId =\n nonEmptyParticipantId(\n input.participantId ??\n \"illumination-source:\" +\n input.source.sourceId +\n \":\" +\n spectrum.spectrumId\n );\n\n return {\n participantId,\n role: \"illumination-source\",\n wavelengthBasis:\n spectrum.wavelengthBasis,\n wavelengthRangeNanometers: {\n minimum:\n first.wavelengthNanometers,\n maximum:\n last.wavelengthNanometers\n },\n breakpointsNanometers:\n spectrum.samples\n .slice(1, -1)\n .map(\n (sample) =>\n sample.wavelengthNanometers\n )\n };\n}\n\nfunction magnitudeQuantity(\n source: SceneIlluminationSource\n): {\n totalIntegratedQuantity: number;\n quantityUnit:\n DiscreteSpectralLineQuantityUnit;\n scientificStatus:\n SceneIlluminationScientificStatus;\n} {\n const magnitude = source.magnitude;\n\n if (\n magnitude.kind ===\n \"relative-linear-scale\"\n ) {\n return {\n totalIntegratedQuantity:\n magnitude.scale,\n quantityUnit: \"relative\",\n scientificStatus:\n \"approximation\"\n };\n }\n if (\n magnitude.kind ===\n \"radiant-intensity\"\n ) {\n return {\n totalIntegratedQuantity:\n magnitude.wattsPerSteradian,\n quantityUnit: \"W/sr\",\n scientificStatus:\n magnitude.scientificStatus\n };\n }\n if (\n magnitude.kind ===\n \"surface-radiance\"\n ) {\n return {\n totalIntegratedQuantity:\n magnitude\n .wattsPerSquareMeterSteradian,\n quantityUnit: \"W/m^2/sr\",\n scientificStatus:\n magnitude.scientificStatus\n };\n }\n return {\n totalIntegratedQuantity:\n magnitude.wattsPerSquareMeter,\n quantityUnit: \"W/m^2\",\n scientificStatus:\n magnitude.scientificStatus\n };\n}\n\n/**\n * Splits a discrete-line light source into the amount carried by each line.\n *\n * Each relative line weight is a fraction of the source's declared total (integrated\n * over wavelength). A disabled source contributes zero. This helper does not handle\n * visibility, material response, light transport, outgoing scene radiance, optics or\n * sensor response.\n */\nexport function resolveSceneIlluminationDiscreteLineMeasure(\n source:\n SceneIlluminationSource\n): SceneIlluminationDiscreteLineMeasure {\n requireInputObject(source, \"resolveSceneIlluminationDiscreteLineMeasure input\");\n // 2.0.0: the whole source is validated, so an unknown field at any level is rejected.\n parseSceneIlluminationSource(source, \"source\");\n requireInputObject(source.spectrum, \"source.spectrum\");\n if (\n source.spectrum.kind !==\n \"discrete-relative-lines\"\n ) {\n throw new InvalidScientificInputError(\n \"Discrete line measure resolution requires a discrete-relative-lines spectrum.\"\n );\n }\n\n const magnitude =\n magnitudeQuantity(source);\n const effectiveTotal =\n source.enabled\n ? magnitude\n .totalIntegratedQuantity\n : 0;\n\n return {\n sourceId: source.sourceId,\n sourceFamily: source.family,\n sourceEnabled: source.enabled,\n spectrumId:\n source.spectrum.spectrumId,\n magnitudeKind:\n source.magnitude.kind,\n magnitudeScientificStatus:\n magnitude.scientificStatus,\n spectrumScientificStatus:\n source.spectrum\n .scientificStatus,\n measure:\n distributeIntegratedQuantityAcrossDiscreteSpectralLines(\n {\n distribution:\n source.spectrum\n .distribution,\n totalIntegratedQuantity:\n effectiveTotal,\n quantityUnit:\n magnitude.quantityUnit\n }\n ),\n combinedUncertaintyCalculated:\n false,\n calibratedAbsoluteLineClaimAuthorized:\n false,\n materialTransportApplied: false,\n sceneRadianceCalculated: false\n };\n}\n"]}
@@ -38,7 +38,7 @@ export interface SceneIlluminationTemporalSourceBinding {
38
38
  waveformId: string;
39
39
  captureTimeReference: "first-opening-boundary-phase";
40
40
  /**
41
- * Capture-reference time at which waveform-local t=0 occurs.
41
+ * The capture time at which the waveform's own t=0 falls.
42
42
  *
43
43
  * waveformTime = captureTime - waveformTimeZeroSecondsFromCaptureReference
44
44
  */
@@ -128,29 +128,26 @@ export interface SceneIlluminationTemporalExposureIntegration {
128
128
  convergenceErrorEstimated: false;
129
129
  }
130
130
  /**
131
- * Parses time-varying illumination metadata as an additive overlay on one
132
- * existing illumination profile.
131
+ * Parses a time-varying illumination profile that sits on top of one existing
132
+ * illumination profile.
133
133
  *
134
- * The base source magnitude/spectrum remain authoritative. Each binding applies
135
- * one relative temporal multiplier waveform to one source. Unbound sources
136
- * remain time-invariant.
134
+ * The base source magnitude and spectrum still apply. Each binding multiplies one
135
+ * source by one relative waveform over time. Sources with no binding stay constant.
137
136
  */
138
137
  export declare function parseSceneIlluminationTemporalProfile(value: unknown): SceneIlluminationTemporalProfile;
139
138
  /**
140
- * Evaluates one explicitly registered time-varying source multiplier at one
141
- * physical capture time.
139
+ * Returns one registered source's time-varying multiplier at one capture time.
142
140
  *
143
- * Capture time is seconds from the first opening-boundary phase. Sensor data
144
- * readout timing is not used as a time surrogate.
141
+ * Capture time is in seconds from the first opening boundary of the exposure. Sensor
142
+ * readout timing is never used in place of capture time.
145
143
  */
146
144
  export declare function evaluateSceneIlluminationTemporalMultiplier(input: EvaluateSceneIlluminationTemporalMultiplierInput): SceneIlluminationTemporalMultiplierEvaluation;
147
145
  /**
148
- * Integrates one time-varying source multiplier over one authoritative local
149
- * exposure window from #12 using deterministic midpoint quadrature.
146
+ * Integrates one source's time-varying multiplier over one local exposure window
147
+ * (from sensor/exposure-window), using the deterministic midpoint rule.
150
148
  *
151
- * This integrates relative temporal modulation only. It does not apply source
152
- * magnitude, scene transport, optics, sensor response, or metering policy.
149
+ * It integrates only the relative modulation over time. It does not apply source
150
+ * magnitude, scene light transport, optics, sensor response or metering policy.
153
151
  */
154
152
  export declare function integrateSceneIlluminationTemporalMultiplierOverExposureWindow(input: IntegrateSceneIlluminationTemporalMultiplierInput): SceneIlluminationTemporalExposureIntegration;
155
153
  export {};
156
- //# sourceMappingURL=illumination-temporal.d.ts.map
@@ -1,25 +1,27 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Parses time-varying illumination metadata as an additive overlay on one existing illumination
5
- * profile. The base source magnitude/spectrum remain authoritative. Each binding applies one relative
6
- * temporal multiplier waveform to one source. Unbound sources remain time-invariant.
7
- * Evaluates one explicitly registered time-varying source multiplier at one physical capture time.
8
- * Capture time is seconds from the first opening-boundary phase. Sensor data readout timing is not
9
- * used as a time surrogate.
3
+ * Time-varying light sources, such as flicker or a pulsed light.
4
+ *
5
+ * A temporal profile sits on top of an existing illumination profile. Each binding multiplies
6
+ * one source by a relative waveform over time. The base source magnitude and spectrum still
7
+ * apply, and sources with no binding stay constant. This module parses the profile, evaluates
8
+ * a waveform at one capture time, and integrates it over an exposure window.
10
9
  * @see docs/SCENE_RADIANCE_AND_ILLUMINATION.md for equations, coordinate/unit conventions, blockers
11
10
  * and support limits.
12
11
  */
13
12
  import { InvalidConfigurationError } from "../core/configuration-error.js";
14
13
  import { parseEvidenceList } from "../core/evidence-provenance.js";
15
14
  import { InvalidScientificInputError, requirePositiveInteger } from "../core/validation.js";
15
+ import { requireInputKeys, rejectUnknownFields, rejectUnknownVariantFields, UNCERTAINTY_VARIANT_FIELDS, requireFixedFieldsWhenPresent } from "../core/record-validation.js";
16
16
  export const SCENE_ILLUMINATION_TEMPORAL_PROFILE_SCHEMA_VERSION = "0.1.0";
17
- function requireRecord(value, path) {
17
+ function requireRecord(value, path, allowedKeys) {
18
18
  if (typeof value !== "object" ||
19
19
  value === null ||
20
20
  Array.isArray(value)) {
21
21
  throw new InvalidConfigurationError(path + " must be an object.");
22
22
  }
23
+ if (allowedKeys !== null)
24
+ rejectUnknownFields(value, allowedKeys, path);
23
25
  return value;
24
26
  }
25
27
  function requireNonEmptyString(value, path) {
@@ -71,7 +73,8 @@ function parseScientificStatus(value, path) {
71
73
  return value;
72
74
  }
73
75
  function parseUncertainty(value, path) {
74
- const record = requireRecord(value, path);
76
+ const record = requireRecord(value, path, null);
77
+ rejectUnknownVariantFields(record, "kind", UNCERTAINTY_VARIANT_FIELDS, path);
75
78
  if (record.kind === "relative") {
76
79
  return {
77
80
  kind: "relative",
@@ -88,7 +91,8 @@ function parseUncertainty(value, path) {
88
91
  throw new InvalidConfigurationError(path + ".kind is invalid.");
89
92
  }
90
93
  function parseRegistrationUncertainty(value, path) {
91
- const record = requireRecord(value, path);
94
+ const record = requireRecord(value, path, null);
95
+ rejectUnknownVariantFields(record, "kind", { "absolute-seconds": ["kind", "plusMinusSeconds", "basis"], "not-quantified": ["kind", "limitation"] }, path);
92
96
  if (record.kind ===
93
97
  "absolute-seconds") {
94
98
  return {
@@ -115,7 +119,7 @@ function parseWaveformSamples(value, path) {
115
119
  let previous = Number.NEGATIVE_INFINITY;
116
120
  return value.map((entry, index) => {
117
121
  const samplePath = path + "[" + index + "]";
118
- const sample = requireRecord(entry, samplePath);
122
+ const sample = requireRecord(entry, samplePath, ["timeSecondsFromWaveformReference", "relativeMagnitudeMultiplier"]);
119
123
  const time = requireNonNegativeFinite(sample
120
124
  .timeSecondsFromWaveformReference, samplePath +
121
125
  ".timeSecondsFromWaveformReference");
@@ -132,8 +136,13 @@ function parseWaveformSamples(value, path) {
132
136
  };
133
137
  });
134
138
  }
139
+ const WAVEFORM_BASE_FIELDS = ["kind", "waveformId", "timeUnit", "scientificStatus", "uncertainty", "evidence", "interpolation", "samples"];
135
140
  function parseWaveform(value, path) {
136
- const record = requireRecord(value, path);
141
+ const record = requireRecord(value, path, null);
142
+ rejectUnknownVariantFields(record, "kind", {
143
+ "aperiodic-relative-multiplier": [...WAVEFORM_BASE_FIELDS, "outsideSupportBehavior"],
144
+ "periodic-relative-multiplier": [...WAVEFORM_BASE_FIELDS, "periodSeconds", "endpointContinuityRequired"]
145
+ }, path);
137
146
  if (record.timeUnit !== "s") {
138
147
  throw new InvalidConfigurationError(path + '.timeUnit must be "s".');
139
148
  }
@@ -214,7 +223,7 @@ function parseWaveform(value, path) {
214
223
  throw new InvalidConfigurationError(path + ".kind is invalid.");
215
224
  }
216
225
  function parseSourceBinding(value, path) {
217
- const record = requireRecord(value, path);
226
+ const record = requireRecord(value, path, ["captureTimeReference", "scientificStatus", "timingUncertainty", "bindingId", "sourceId", "waveformId", "waveformTimeZeroSecondsFromCaptureReference", "evidence"]);
218
227
  if (record.captureTimeReference !==
219
228
  "first-opening-boundary-phase") {
220
229
  throw new InvalidConfigurationError(path +
@@ -241,16 +250,21 @@ function parseSourceBinding(value, path) {
241
250
  evidence: parseEvidenceList(record.evidence, path + ".evidence")
242
251
  };
243
252
  }
253
+ /** Fixed flags the parser writes; a parsed profile may carry them back in unchanged. */
254
+ const TEMPORAL_PROFILE_FIXED_FIELDS = {
255
+ baseIlluminationProfileRemainsAuthoritative: true, sensorReadoutTimingUsedAsExposureTiming: false,
256
+ automaticExposurePolicyIncluded: false
257
+ };
244
258
  /**
245
- * Parses time-varying illumination metadata as an additive overlay on one
246
- * existing illumination profile.
259
+ * Parses a time-varying illumination profile that sits on top of one existing
260
+ * illumination profile.
247
261
  *
248
- * The base source magnitude/spectrum remain authoritative. Each binding applies
249
- * one relative temporal multiplier waveform to one source. Unbound sources
250
- * remain time-invariant.
262
+ * The base source magnitude and spectrum still apply. Each binding multiplies one
263
+ * source by one relative waveform over time. Sources with no binding stay constant.
251
264
  */
252
265
  export function parseSceneIlluminationTemporalProfile(value) {
253
- const record = requireRecord(value, "sceneIlluminationTemporalProfile");
266
+ const record = requireRecord(value, "sceneIlluminationTemporalProfile", ["schemaVersion", "waveforms", "sourceBindings", "profileId", "sceneId", "illuminationProfileId", "evidence", ...Object.keys(TEMPORAL_PROFILE_FIXED_FIELDS)]);
267
+ requireFixedFieldsWhenPresent(record, TEMPORAL_PROFILE_FIXED_FIELDS, "sceneIlluminationTemporalProfile");
254
268
  if (record.schemaVersion !==
255
269
  SCENE_ILLUMINATION_TEMPORAL_PROFILE_SCHEMA_VERSION) {
256
270
  throw new InvalidConfigurationError('sceneIlluminationTemporalProfile.schemaVersion must be "' +
@@ -402,16 +416,16 @@ function evaluateWaveform(waveform, waveformTimeSeconds) {
402
416
  return interpolateWaveform(waveform.samples, periodicTime);
403
417
  }
404
418
  /**
405
- * Evaluates one explicitly registered time-varying source multiplier at one
406
- * physical capture time.
419
+ * Returns one registered source's time-varying multiplier at one capture time.
407
420
  *
408
- * Capture time is seconds from the first opening-boundary phase. Sensor data
409
- * readout timing is not used as a time surrogate.
421
+ * Capture time is in seconds from the first opening boundary of the exposure. Sensor
422
+ * readout timing is never used in place of capture time.
410
423
  */
411
424
  export function evaluateSceneIlluminationTemporalMultiplier(input) {
425
+ requireInputKeys(input, "evaluateSceneIlluminationTemporalMultiplier", ["illuminationProfile", "temporalProfile", "sourceId", "captureTimeSecondsFromReference"]);
412
426
  if (typeof input.sourceId !== "string" ||
413
427
  input.sourceId.trim().length === 0) {
414
- throw new InvalidScientificInputError("sourceId must be a non-empty string.");
428
+ throw new InvalidConfigurationError("sourceId must be a non-empty string.");
415
429
  }
416
430
  if (typeof input
417
431
  .captureTimeSecondsFromReference !==
@@ -447,13 +461,14 @@ export function evaluateSceneIlluminationTemporalMultiplier(input) {
447
461
  };
448
462
  }
449
463
  /**
450
- * Integrates one time-varying source multiplier over one authoritative local
451
- * exposure window from #12 using deterministic midpoint quadrature.
464
+ * Integrates one source's time-varying multiplier over one local exposure window
465
+ * (from sensor/exposure-window), using the deterministic midpoint rule.
452
466
  *
453
- * This integrates relative temporal modulation only. It does not apply source
454
- * magnitude, scene transport, optics, sensor response, or metering policy.
467
+ * It integrates only the relative modulation over time. It does not apply source
468
+ * magnitude, scene light transport, optics, sensor response or metering policy.
455
469
  */
456
470
  export function integrateSceneIlluminationTemporalMultiplierOverExposureWindow(input) {
471
+ requireInputKeys(input, "integrateSceneIlluminationTemporalMultiplierOverExposureWindow", ["illuminationProfile", "temporalProfile", "sourceId", "exposureWindows", "sampleIndex", "temporalSampleCount"]);
457
472
  requirePositiveInteger("temporalSampleCount", input.temporalSampleCount);
458
473
  if (!Number.isSafeInteger(input.sampleIndex) ||
459
474
  input.sampleIndex < 0) {