@photivra/engine 0.5.1 → 1.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 (753) hide show
  1. package/AGENTS.md +674 -0
  2. package/CHANGELOG.md +218 -0
  3. package/CITATION.cff +1 -1
  4. package/CONTRIBUTING.md +76 -0
  5. package/DCO +33 -0
  6. package/NODE_SUPPORT.md +37 -0
  7. package/NOTICE +2 -0
  8. package/README.md +157 -56
  9. package/SECURITY.md +55 -0
  10. package/THIRD_PARTY.md +63 -0
  11. package/dist/camera/equivalent-focal-length.d.ts +9 -0
  12. package/dist/camera/equivalent-focal-length.d.ts.map +1 -1
  13. package/dist/camera/equivalent-focal-length.js +9 -0
  14. package/dist/camera/equivalent-focal-length.js.map +1 -1
  15. package/dist/camera/field-of-view.d.ts +13 -0
  16. package/dist/camera/field-of-view.d.ts.map +1 -1
  17. package/dist/camera/field-of-view.js +13 -0
  18. package/dist/camera/field-of-view.js.map +1 -1
  19. package/dist/camera/projected-object-size.d.ts +8 -0
  20. package/dist/camera/projected-object-size.d.ts.map +1 -1
  21. package/dist/camera/projected-object-size.js +8 -0
  22. package/dist/camera/projected-object-size.js.map +1 -1
  23. package/dist/capture/capture-export-metadata.d.ts +60 -0
  24. package/dist/capture/capture-export-metadata.d.ts.map +1 -0
  25. package/dist/capture/capture-export-metadata.js +62 -0
  26. package/dist/capture/capture-export-metadata.js.map +1 -0
  27. package/dist/capture/environment-raw-producer.d.ts +55 -0
  28. package/dist/capture/environment-raw-producer.d.ts.map +1 -0
  29. package/dist/capture/environment-raw-producer.js +88 -0
  30. package/dist/capture/environment-raw-producer.js.map +1 -0
  31. package/dist/capture/export-jpeg.d.ts +12 -0
  32. package/dist/capture/export-jpeg.d.ts.map +1 -0
  33. package/dist/capture/export-jpeg.js +126 -0
  34. package/dist/capture/export-jpeg.js.map +1 -0
  35. package/dist/capture/export-tiff.d.ts +45 -0
  36. package/dist/capture/export-tiff.d.ts.map +1 -0
  37. package/dist/capture/export-tiff.js +129 -0
  38. package/dist/capture/export-tiff.js.map +1 -0
  39. package/dist/capture/focus-control.d.ts +210 -0
  40. package/dist/capture/focus-control.d.ts.map +1 -0
  41. package/dist/capture/focus-control.js +664 -0
  42. package/dist/capture/focus-control.js.map +1 -0
  43. package/dist/capture/linear-encoding.d.ts +59 -0
  44. package/dist/capture/linear-encoding.d.ts.map +1 -0
  45. package/dist/capture/linear-encoding.js +98 -0
  46. package/dist/capture/linear-encoding.js.map +1 -0
  47. package/dist/capture/photographic-export.d.ts +135 -0
  48. package/dist/capture/photographic-export.d.ts.map +1 -0
  49. package/dist/capture/photographic-export.js +273 -0
  50. package/dist/capture/photographic-export.js.map +1 -0
  51. package/dist/capture/raw-frame-limits.d.ts +12 -0
  52. package/dist/capture/raw-frame-limits.d.ts.map +1 -0
  53. package/dist/capture/raw-frame-limits.js +13 -0
  54. package/dist/capture/raw-frame-limits.js.map +1 -0
  55. package/dist/capture/raw-frame-reconstruction.d.ts +48 -0
  56. package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -0
  57. package/dist/capture/raw-frame-reconstruction.js +146 -0
  58. package/dist/capture/raw-frame-reconstruction.js.map +1 -0
  59. package/dist/capture/release-sequence.d.ts +120 -0
  60. package/dist/capture/release-sequence.d.ts.map +1 -0
  61. package/dist/capture/release-sequence.js +446 -0
  62. package/dist/capture/release-sequence.js.map +1 -0
  63. package/dist/capture/sensor-raw-frame.d.ts +34 -0
  64. package/dist/capture/sensor-raw-frame.d.ts.map +1 -0
  65. package/dist/capture/sensor-raw-frame.js +106 -0
  66. package/dist/capture/sensor-raw-frame.js.map +1 -0
  67. package/dist/capture/sensor-raw-producer.d.ts +51 -0
  68. package/dist/capture/sensor-raw-producer.d.ts.map +1 -0
  69. package/dist/capture/sensor-raw-producer.js +235 -0
  70. package/dist/capture/sensor-raw-producer.js.map +1 -0
  71. package/dist/capture/simulated-capture.d.ts +125 -0
  72. package/dist/capture/simulated-capture.d.ts.map +1 -0
  73. package/dist/capture/simulated-capture.js +248 -0
  74. package/dist/capture/simulated-capture.js.map +1 -0
  75. package/dist/color/capture-color.d.ts +73 -0
  76. package/dist/color/capture-color.d.ts.map +1 -0
  77. package/dist/color/capture-color.js +145 -0
  78. package/dist/color/capture-color.js.map +1 -0
  79. package/dist/color/sensor-color-development.d.ts +23 -0
  80. package/dist/color/sensor-color-development.d.ts.map +1 -0
  81. package/dist/color/sensor-color-development.js +56 -0
  82. package/dist/color/sensor-color-development.js.map +1 -0
  83. package/dist/color/white-balance.d.ts +175 -0
  84. package/dist/color/white-balance.d.ts.map +1 -0
  85. package/dist/color/white-balance.js +606 -0
  86. package/dist/color/white-balance.js.map +1 -0
  87. package/dist/composition/image-formation-plan.d.ts +481 -0
  88. package/dist/composition/image-formation-plan.d.ts.map +1 -0
  89. package/dist/composition/image-formation-plan.js +2499 -0
  90. package/dist/composition/image-formation-plan.js.map +1 -0
  91. package/dist/composition/plan-consumer.d.ts +53 -0
  92. package/dist/composition/plan-consumer.d.ts.map +1 -0
  93. package/dist/composition/plan-consumer.js +119 -0
  94. package/dist/composition/plan-consumer.js.map +1 -0
  95. package/dist/core/calculation-result.d.ts.map +1 -1
  96. package/dist/core/calculation-result.js +6 -0
  97. package/dist/core/calculation-result.js.map +1 -1
  98. package/dist/core/canonical-json.d.ts +18 -0
  99. package/dist/core/canonical-json.d.ts.map +1 -0
  100. package/dist/core/canonical-json.js +44 -0
  101. package/dist/core/canonical-json.js.map +1 -0
  102. package/dist/core/configuration-error.d.ts +6 -0
  103. package/dist/core/configuration-error.d.ts.map +1 -1
  104. package/dist/core/configuration-error.js +6 -0
  105. package/dist/core/configuration-error.js.map +1 -1
  106. package/dist/core/evidence-provenance.d.ts +6 -0
  107. package/dist/core/evidence-provenance.d.ts.map +1 -1
  108. package/dist/core/evidence-provenance.js +7 -0
  109. package/dist/core/evidence-provenance.js.map +1 -1
  110. package/dist/core/image-formation.d.ts +9 -3
  111. package/dist/core/image-formation.d.ts.map +1 -1
  112. package/dist/core/image-formation.js +29 -5
  113. package/dist/core/image-formation.js.map +1 -1
  114. package/dist/core/owned-data.d.ts +25 -0
  115. package/dist/core/owned-data.d.ts.map +1 -0
  116. package/dist/core/owned-data.js +34 -0
  117. package/dist/core/owned-data.js.map +1 -0
  118. package/dist/core/record-validation.d.ts +17 -0
  119. package/dist/core/record-validation.d.ts.map +1 -0
  120. package/dist/core/record-validation.js +44 -0
  121. package/dist/core/record-validation.js.map +1 -0
  122. package/dist/core/scientific-assurance.d.ts +101 -0
  123. package/dist/core/scientific-assurance.d.ts.map +1 -0
  124. package/dist/core/scientific-assurance.js +301 -0
  125. package/dist/core/scientific-assurance.js.map +1 -0
  126. package/dist/core/spectral-composition.d.ts +106 -0
  127. package/dist/core/spectral-composition.d.ts.map +1 -0
  128. package/dist/core/spectral-composition.js +334 -0
  129. package/dist/core/spectral-composition.js.map +1 -0
  130. package/dist/core/spectral.d.ts +34 -0
  131. package/dist/core/spectral.d.ts.map +1 -0
  132. package/dist/core/spectral.js +57 -0
  133. package/dist/core/spectral.js.map +1 -0
  134. package/dist/core/validation.d.ts +6 -0
  135. package/dist/core/validation.d.ts.map +1 -1
  136. package/dist/core/validation.js +6 -0
  137. package/dist/core/validation.js.map +1 -1
  138. package/dist/core/version.d.ts +14 -0
  139. package/dist/core/version.d.ts.map +1 -0
  140. package/dist/core/version.js +15 -0
  141. package/dist/core/version.js.map +1 -0
  142. package/dist/equipment/exposure-capabilities.d.ts +125 -0
  143. package/dist/equipment/exposure-capabilities.d.ts.map +1 -0
  144. package/dist/equipment/exposure-capabilities.js +391 -0
  145. package/dist/equipment/exposure-capabilities.js.map +1 -0
  146. package/dist/equipment/generic-tier-assets.d.ts +82 -0
  147. package/dist/equipment/generic-tier-assets.d.ts.map +1 -0
  148. package/dist/equipment/generic-tier-assets.js +119 -0
  149. package/dist/equipment/generic-tier-assets.js.map +1 -0
  150. package/dist/equipment/generic-tier-presets.d.ts +57 -0
  151. package/dist/equipment/generic-tier-presets.d.ts.map +1 -0
  152. package/dist/equipment/generic-tier-presets.js +122 -0
  153. package/dist/equipment/generic-tier-presets.js.map +1 -0
  154. package/dist/equipment/iso-capabilities.d.ts +143 -0
  155. package/dist/equipment/iso-capabilities.d.ts.map +1 -0
  156. package/dist/equipment/iso-capabilities.js +578 -0
  157. package/dist/equipment/iso-capabilities.js.map +1 -0
  158. package/dist/equipment/metering-capabilities.d.ts +58 -0
  159. package/dist/equipment/metering-capabilities.d.ts.map +1 -0
  160. package/dist/equipment/metering-capabilities.js +151 -0
  161. package/dist/equipment/metering-capabilities.js.map +1 -0
  162. package/dist/equipment/release-capabilities.d.ts +33 -0
  163. package/dist/equipment/release-capabilities.d.ts.map +1 -0
  164. package/dist/equipment/release-capabilities.js +176 -0
  165. package/dist/equipment/release-capabilities.js.map +1 -0
  166. package/dist/exposure/exposure-duration-control.d.ts +72 -0
  167. package/dist/exposure/exposure-duration-control.d.ts.map +1 -0
  168. package/dist/exposure/exposure-duration-control.js +161 -0
  169. package/dist/exposure/exposure-duration-control.js.map +1 -0
  170. package/dist/exposure/exposure-mode-resolver.d.ts +637 -0
  171. package/dist/exposure/exposure-mode-resolver.d.ts.map +1 -0
  172. package/dist/exposure/exposure-mode-resolver.js +1905 -0
  173. package/dist/exposure/exposure-mode-resolver.js.map +1 -0
  174. package/dist/exposure/exposure.d.ts +8 -0
  175. package/dist/exposure/exposure.d.ts.map +1 -1
  176. package/dist/exposure/exposure.js +8 -0
  177. package/dist/exposure/exposure.js.map +1 -1
  178. package/dist/exposure/flash.d.ts +179 -0
  179. package/dist/exposure/flash.d.ts.map +1 -0
  180. package/dist/exposure/flash.js +644 -0
  181. package/dist/exposure/flash.js.map +1 -0
  182. package/dist/exposure/metering-scene-radiance.d.ts +72 -0
  183. package/dist/exposure/metering-scene-radiance.d.ts.map +1 -0
  184. package/dist/exposure/metering-scene-radiance.js +222 -0
  185. package/dist/exposure/metering-scene-radiance.js.map +1 -0
  186. package/dist/exposure/metering-target.d.ts +67 -0
  187. package/dist/exposure/metering-target.d.ts.map +1 -0
  188. package/dist/exposure/metering-target.js +265 -0
  189. package/dist/exposure/metering-target.js.map +1 -0
  190. package/dist/exposure/metering-temporal.d.ts +76 -0
  191. package/dist/exposure/metering-temporal.d.ts.map +1 -0
  192. package/dist/exposure/metering-temporal.js +210 -0
  193. package/dist/exposure/metering-temporal.js.map +1 -0
  194. package/dist/exposure/metering.d.ts +124 -0
  195. package/dist/exposure/metering.d.ts.map +1 -0
  196. package/dist/exposure/metering.js +422 -0
  197. package/dist/exposure/metering.js.map +1 -0
  198. package/dist/exposure/program-line.d.ts +29 -0
  199. package/dist/exposure/program-line.d.ts.map +1 -0
  200. package/dist/exposure/program-line.js +126 -0
  201. package/dist/exposure/program-line.js.map +1 -0
  202. package/dist/index.d.ts +101 -7
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +99 -7
  205. package/dist/index.js.map +1 -1
  206. package/dist/motion/camera-rotation.d.ts +76 -0
  207. package/dist/motion/camera-rotation.d.ts.map +1 -1
  208. package/dist/motion/camera-rotation.js +111 -0
  209. package/dist/motion/camera-rotation.js.map +1 -1
  210. package/dist/motion/capture-rotation-inverse-mapping.d.ts +113 -0
  211. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -0
  212. package/dist/motion/capture-rotation-inverse-mapping.js +184 -0
  213. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -0
  214. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +104 -0
  215. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -0
  216. package/dist/motion/capture-rotation-temporal-quadrature.js +131 -0
  217. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -0
  218. package/dist/motion/capture-rotation-trajectory.d.ts +113 -0
  219. package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -0
  220. package/dist/motion/capture-rotation-trajectory.js +168 -0
  221. package/dist/motion/capture-rotation-trajectory.js.map +1 -0
  222. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +119 -0
  223. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +1 -0
  224. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +263 -0
  225. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -0
  226. package/dist/motion/extended-object-projection.d.ts +175 -0
  227. package/dist/motion/extended-object-projection.d.ts.map +1 -0
  228. package/dist/motion/extended-object-projection.js +402 -0
  229. package/dist/motion/extended-object-projection.js.map +1 -0
  230. package/dist/motion/projected-motion.d.ts +11 -0
  231. package/dist/motion/projected-motion.d.ts.map +1 -1
  232. package/dist/motion/projected-motion.js +11 -0
  233. package/dist/motion/projected-motion.js.map +1 -1
  234. package/dist/optics/aperture.d.ts +9 -0
  235. package/dist/optics/aperture.d.ts.map +1 -1
  236. package/dist/optics/aperture.js +9 -0
  237. package/dist/optics/aperture.js.map +1 -1
  238. package/dist/optics/circle-of-confusion.d.ts +8 -0
  239. package/dist/optics/circle-of-confusion.d.ts.map +1 -1
  240. package/dist/optics/circle-of-confusion.js +8 -0
  241. package/dist/optics/circle-of-confusion.js.map +1 -1
  242. package/dist/optics/complex-pupil-psf.d.ts +128 -0
  243. package/dist/optics/complex-pupil-psf.d.ts.map +1 -0
  244. package/dist/optics/complex-pupil-psf.js +462 -0
  245. package/dist/optics/complex-pupil-psf.js.map +1 -0
  246. package/dist/optics/depth-of-field.d.ts +18 -0
  247. package/dist/optics/depth-of-field.d.ts.map +1 -1
  248. package/dist/optics/depth-of-field.js +29 -4
  249. package/dist/optics/depth-of-field.js.map +1 -1
  250. package/dist/optics/diffraction.d.ts +8 -0
  251. package/dist/optics/diffraction.d.ts.map +1 -1
  252. package/dist/optics/diffraction.js +8 -0
  253. package/dist/optics/diffraction.js.map +1 -1
  254. package/dist/optics/focus-breathing.d.ts +13 -0
  255. package/dist/optics/focus-breathing.d.ts.map +1 -1
  256. package/dist/optics/focus-breathing.js +13 -0
  257. package/dist/optics/focus-breathing.js.map +1 -1
  258. package/dist/optics/focus-state.d.ts +47 -0
  259. package/dist/optics/focus-state.d.ts.map +1 -0
  260. package/dist/optics/focus-state.js +78 -0
  261. package/dist/optics/focus-state.js.map +1 -0
  262. package/dist/optics/front-of-lens-filter.d.ts +114 -0
  263. package/dist/optics/front-of-lens-filter.d.ts.map +1 -0
  264. package/dist/optics/front-of-lens-filter.js +468 -0
  265. package/dist/optics/front-of-lens-filter.js.map +1 -0
  266. package/dist/optics/illumination-vignetting.d.ts +9 -0
  267. package/dist/optics/illumination-vignetting.d.ts.map +1 -1
  268. package/dist/optics/illumination-vignetting.js +9 -0
  269. package/dist/optics/illumination-vignetting.js.map +1 -1
  270. package/dist/optics/lateral-chromatic-aberration.d.ts +11 -0
  271. package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
  272. package/dist/optics/lateral-chromatic-aberration.js +23 -4
  273. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  274. package/dist/optics/lens-psf-profile.d.ts +217 -0
  275. package/dist/optics/lens-psf-profile.d.ts.map +1 -0
  276. package/dist/optics/lens-psf-profile.js +823 -0
  277. package/dist/optics/lens-psf-profile.js.map +1 -0
  278. package/dist/optics/polygon-diffraction.d.ts +67 -0
  279. package/dist/optics/polygon-diffraction.d.ts.map +1 -0
  280. package/dist/optics/polygon-diffraction.js +145 -0
  281. package/dist/optics/polygon-diffraction.js.map +1 -0
  282. package/dist/optics/profile-contract.d.ts +42 -0
  283. package/dist/optics/profile-contract.d.ts.map +1 -0
  284. package/dist/optics/profile-contract.js +92 -0
  285. package/dist/optics/profile-contract.js.map +1 -0
  286. package/dist/optics/psf-foundation.d.ts +16 -3
  287. package/dist/optics/psf-foundation.d.ts.map +1 -1
  288. package/dist/optics/psf-foundation.js +28 -15
  289. package/dist/optics/psf-foundation.js.map +1 -1
  290. package/dist/optics/radial-distortion.d.ts +22 -2
  291. package/dist/optics/radial-distortion.d.ts.map +1 -1
  292. package/dist/optics/radial-distortion.js +101 -23
  293. package/dist/optics/radial-distortion.js.map +1 -1
  294. package/dist/optics/scene-to-sensor-irradiance.d.ts +213 -0
  295. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +1 -0
  296. package/dist/optics/scene-to-sensor-irradiance.js +662 -0
  297. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -0
  298. package/dist/optics/scene-to-sensor-quadrature.d.ts +63 -0
  299. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +1 -0
  300. package/dist/optics/scene-to-sensor-quadrature.js +82 -0
  301. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -0
  302. package/dist/optics/sensor-environment-query.d.ts +60 -0
  303. package/dist/optics/sensor-environment-query.d.ts.map +1 -0
  304. package/dist/optics/sensor-environment-query.js +50 -0
  305. package/dist/optics/sensor-environment-query.js.map +1 -0
  306. package/dist/optics/sensor-psf-quadrature.d.ts +70 -0
  307. package/dist/optics/sensor-psf-quadrature.d.ts.map +1 -0
  308. package/dist/optics/sensor-psf-quadrature.js +101 -0
  309. package/dist/optics/sensor-psf-quadrature.js.map +1 -0
  310. package/dist/optics/sensor-psf-support.d.ts +20 -0
  311. package/dist/optics/sensor-psf-support.d.ts.map +1 -0
  312. package/dist/optics/sensor-psf-support.js +13 -0
  313. package/dist/optics/sensor-psf-support.js.map +1 -0
  314. package/dist/optics/stray-light.d.ts +91 -0
  315. package/dist/optics/stray-light.d.ts.map +1 -0
  316. package/dist/optics/stray-light.js +110 -0
  317. package/dist/optics/stray-light.js.map +1 -0
  318. package/dist/optics/thin-lens.d.ts +8 -0
  319. package/dist/optics/thin-lens.d.ts.map +1 -1
  320. package/dist/optics/thin-lens.js +8 -0
  321. package/dist/optics/thin-lens.js.map +1 -1
  322. package/dist/output/capture-corrected-sdr.d.ts +49 -0
  323. package/dist/output/capture-corrected-sdr.d.ts.map +1 -0
  324. package/dist/output/capture-corrected-sdr.js +149 -0
  325. package/dist/output/capture-corrected-sdr.js.map +1 -0
  326. package/dist/output/capture-geometry.d.ts.map +1 -1
  327. package/dist/output/capture-geometry.js +32 -11
  328. package/dist/output/capture-geometry.js.map +1 -1
  329. package/dist/output/capture-sdr.d.ts +49 -0
  330. package/dist/output/capture-sdr.d.ts.map +1 -0
  331. package/dist/output/capture-sdr.js +90 -0
  332. package/dist/output/capture-sdr.js.map +1 -0
  333. package/dist/output/crop.d.ts +6 -0
  334. package/dist/output/crop.d.ts.map +1 -1
  335. package/dist/output/crop.js +6 -0
  336. package/dist/output/crop.js.map +1 -1
  337. package/dist/output/geometric-transforms.d.ts +137 -0
  338. package/dist/output/geometric-transforms.d.ts.map +1 -0
  339. package/dist/output/geometric-transforms.js +225 -0
  340. package/dist/output/geometric-transforms.js.map +1 -0
  341. package/dist/output/lens-corrections.d.ts +121 -0
  342. package/dist/output/lens-corrections.d.ts.map +1 -0
  343. package/dist/output/lens-corrections.js +210 -0
  344. package/dist/output/lens-corrections.js.map +1 -0
  345. package/dist/output/sdr-rendering.d.ts +81 -0
  346. package/dist/output/sdr-rendering.d.ts.map +1 -0
  347. package/dist/output/sdr-rendering.js +106 -0
  348. package/dist/output/sdr-rendering.js.map +1 -0
  349. package/dist/output/subject-framing-crop.d.ts +8 -0
  350. package/dist/output/subject-framing-crop.d.ts.map +1 -1
  351. package/dist/output/subject-framing-crop.js +8 -0
  352. package/dist/output/subject-framing-crop.js.map +1 -1
  353. package/dist/schema/camera.d.ts +6 -0
  354. package/dist/schema/camera.d.ts.map +1 -1
  355. package/dist/schema/illumination-spectral.d.ts +51 -0
  356. package/dist/schema/illumination-spectral.d.ts.map +1 -0
  357. package/dist/schema/illumination-spectral.js +132 -0
  358. package/dist/schema/illumination-spectral.js.map +1 -0
  359. package/dist/schema/illumination-temporal.d.ts +156 -0
  360. package/dist/schema/illumination-temporal.d.ts.map +1 -0
  361. package/dist/schema/illumination-temporal.js +554 -0
  362. package/dist/schema/illumination-temporal.js.map +1 -0
  363. package/dist/schema/illumination.d.ts +138 -0
  364. package/dist/schema/illumination.d.ts.map +1 -0
  365. package/dist/schema/illumination.js +483 -0
  366. package/dist/schema/illumination.js.map +1 -0
  367. package/dist/schema/scene-radiance-temporal.d.ts +107 -0
  368. package/dist/schema/scene-radiance-temporal.d.ts.map +1 -0
  369. package/dist/schema/scene-radiance-temporal.js +259 -0
  370. package/dist/schema/scene-radiance-temporal.js.map +1 -0
  371. package/dist/schema/scene-radiance.d.ts +185 -0
  372. package/dist/schema/scene-radiance.d.ts.map +1 -0
  373. package/dist/schema/scene-radiance.js +535 -0
  374. package/dist/schema/scene-radiance.js.map +1 -0
  375. package/dist/schema/scene.d.ts +7 -0
  376. package/dist/schema/scene.d.ts.map +1 -1
  377. package/dist/schema/validation.d.ts.map +1 -1
  378. package/dist/schema/validation.js +7 -0
  379. package/dist/schema/validation.js.map +1 -1
  380. package/dist/sensor/accumulated-charge.d.ts +199 -0
  381. package/dist/sensor/accumulated-charge.d.ts.map +1 -0
  382. package/dist/sensor/accumulated-charge.js +450 -0
  383. package/dist/sensor/accumulated-charge.js.map +1 -0
  384. package/dist/sensor/architecture.d.ts +48 -13
  385. package/dist/sensor/architecture.d.ts.map +1 -1
  386. package/dist/sensor/architecture.js +58 -16
  387. package/dist/sensor/architecture.js.map +1 -1
  388. package/dist/sensor/camera-saturation-capacity.d.ts +138 -0
  389. package/dist/sensor/camera-saturation-capacity.d.ts.map +1 -0
  390. package/dist/sensor/camera-saturation-capacity.js +356 -0
  391. package/dist/sensor/camera-saturation-capacity.js.map +1 -0
  392. package/dist/sensor/capture-color-sampling-binding.d.ts +212 -0
  393. package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -0
  394. package/dist/sensor/capture-color-sampling-binding.js +437 -0
  395. package/dist/sensor/capture-color-sampling-binding.js.map +1 -0
  396. package/dist/sensor/capture-mode-timing.d.ts +63 -0
  397. package/dist/sensor/capture-mode-timing.d.ts.map +1 -0
  398. package/dist/sensor/capture-mode-timing.js +270 -0
  399. package/dist/sensor/capture-mode-timing.js.map +1 -0
  400. package/dist/sensor/capture-mode.d.ts +157 -0
  401. package/dist/sensor/capture-mode.d.ts.map +1 -0
  402. package/dist/sensor/capture-mode.js +447 -0
  403. package/dist/sensor/capture-mode.js.map +1 -0
  404. package/dist/sensor/color-sampling.d.ts +133 -0
  405. package/dist/sensor/color-sampling.d.ts.map +1 -0
  406. package/dist/sensor/color-sampling.js +245 -0
  407. package/dist/sensor/color-sampling.js.map +1 -0
  408. package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
  409. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
  410. package/dist/sensor/constant-rate-temporal-integration.js +382 -0
  411. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
  412. package/dist/sensor/dark-current.d.ts +169 -0
  413. package/dist/sensor/dark-current.d.ts.map +1 -0
  414. package/dist/sensor/dark-current.js +427 -0
  415. package/dist/sensor/dark-current.js.map +1 -0
  416. package/dist/sensor/environment-photo-signal.d.ts +123 -0
  417. package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
  418. package/dist/sensor/environment-photo-signal.js +186 -0
  419. package/dist/sensor/environment-photo-signal.js.map +1 -0
  420. package/dist/sensor/eqe-electron-rate.d.ts +107 -0
  421. package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
  422. package/dist/sensor/eqe-electron-rate.js +561 -0
  423. package/dist/sensor/eqe-electron-rate.js.map +1 -0
  424. package/dist/sensor/eqe-local-exposure.d.ts +65 -0
  425. package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
  426. package/dist/sensor/eqe-local-exposure.js +84 -0
  427. package/dist/sensor/eqe-local-exposure.js.map +1 -0
  428. package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
  429. package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
  430. package/dist/sensor/eqe-temporal-exposure.js +62 -0
  431. package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
  432. package/dist/sensor/exposure-window.d.ts +117 -0
  433. package/dist/sensor/exposure-window.d.ts.map +1 -0
  434. package/dist/sensor/exposure-window.js +305 -0
  435. package/dist/sensor/exposure-window.js.map +1 -0
  436. package/dist/sensor/iso-signal-chain.d.ts +148 -0
  437. package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
  438. package/dist/sensor/iso-signal-chain.js +411 -0
  439. package/dist/sensor/iso-signal-chain.js.map +1 -0
  440. package/dist/sensor/local-exposure-binding.d.ts +87 -0
  441. package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
  442. package/dist/sensor/local-exposure-binding.js +214 -0
  443. package/dist/sensor/local-exposure-binding.js.map +1 -0
  444. package/dist/sensor/optical-stack.d.ts +132 -0
  445. package/dist/sensor/optical-stack.d.ts.map +1 -0
  446. package/dist/sensor/optical-stack.js +303 -0
  447. package/dist/sensor/optical-stack.js.map +1 -0
  448. package/dist/sensor/photon-energy.d.ts +97 -0
  449. package/dist/sensor/photon-energy.d.ts.map +1 -0
  450. package/dist/sensor/photon-energy.js +390 -0
  451. package/dist/sensor/photon-energy.js.map +1 -0
  452. package/dist/sensor/physical-charge-capacity.d.ts +130 -0
  453. package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
  454. package/dist/sensor/physical-charge-capacity.js +345 -0
  455. package/dist/sensor/physical-charge-capacity.js.map +1 -0
  456. package/dist/sensor/pixel-pitch.d.ts +6 -0
  457. package/dist/sensor/pixel-pitch.d.ts.map +1 -1
  458. package/dist/sensor/pixel-pitch.js +6 -0
  459. package/dist/sensor/pixel-pitch.js.map +1 -1
  460. package/dist/sensor/radiometry-readiness.d.ts +10 -0
  461. package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
  462. package/dist/sensor/radiometry-readiness.js +10 -0
  463. package/dist/sensor/radiometry-readiness.js.map +1 -1
  464. package/dist/sensor/raw-readout.d.ts +314 -0
  465. package/dist/sensor/raw-readout.d.ts.map +1 -0
  466. package/dist/sensor/raw-readout.js +914 -0
  467. package/dist/sensor/raw-readout.js.map +1 -0
  468. package/dist/sensor/raw-reconstruction.d.ts +170 -0
  469. package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
  470. package/dist/sensor/raw-reconstruction.js +424 -0
  471. package/dist/sensor/raw-reconstruction.js.map +1 -0
  472. package/dist/sensor/readout-exposure-linkage.d.ts +123 -0
  473. package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -0
  474. package/dist/sensor/readout-exposure-linkage.js +222 -0
  475. package/dist/sensor/readout-exposure-linkage.js.map +1 -0
  476. package/dist/sensor/readout-timing.d.ts +137 -0
  477. package/dist/sensor/readout-timing.d.ts.map +1 -0
  478. package/dist/sensor/readout-timing.js +243 -0
  479. package/dist/sensor/readout-timing.js.map +1 -0
  480. package/dist/sensor/response-application-compatibility.d.ts +136 -0
  481. package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
  482. package/dist/sensor/response-application-compatibility.js +408 -0
  483. package/dist/sensor/response-application-compatibility.js.map +1 -0
  484. package/dist/sensor/response-operating-range.d.ts +173 -0
  485. package/dist/sensor/response-operating-range.d.ts.map +1 -0
  486. package/dist/sensor/response-operating-range.js +672 -0
  487. package/dist/sensor/response-operating-range.js.map +1 -0
  488. package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
  489. package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
  490. package/dist/sensor/responsivity-photocurrent.js +644 -0
  491. package/dist/sensor/responsivity-photocurrent.js.map +1 -0
  492. package/dist/sensor/sampling-aperture.d.ts +154 -0
  493. package/dist/sensor/sampling-aperture.d.ts.map +1 -0
  494. package/dist/sensor/sampling-aperture.js +388 -0
  495. package/dist/sensor/sampling-aperture.js.map +1 -0
  496. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
  497. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
  498. package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
  499. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
  500. package/dist/sensor/sensor-geometry.d.ts +12 -0
  501. package/dist/sensor/sensor-geometry.d.ts.map +1 -1
  502. package/dist/sensor/sensor-geometry.js +12 -0
  503. package/dist/sensor/sensor-geometry.js.map +1 -1
  504. package/dist/sensor/signal-noise.d.ts +10 -0
  505. package/dist/sensor/signal-noise.d.ts.map +1 -1
  506. package/dist/sensor/signal-noise.js +10 -0
  507. package/dist/sensor/signal-noise.js.map +1 -1
  508. package/dist/sensor/spatial-sample-reduction.d.ts +171 -0
  509. package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -0
  510. package/dist/sensor/spatial-sample-reduction.js +345 -0
  511. package/dist/sensor/spatial-sample-reduction.js.map +1 -0
  512. package/dist/sensor/spatial-sampling-quadrature.d.ts +179 -0
  513. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -0
  514. package/dist/sensor/spatial-sampling-quadrature.js +224 -0
  515. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -0
  516. package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
  517. package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
  518. package/dist/sensor/spatio-spectral-reduction.js +373 -0
  519. package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
  520. package/dist/sensor/spectral-coverage.d.ts +24 -0
  521. package/dist/sensor/spectral-coverage.d.ts.map +1 -0
  522. package/dist/sensor/spectral-coverage.js +86 -0
  523. package/dist/sensor/spectral-coverage.js.map +1 -0
  524. package/dist/sensor/spectral-quadrature.d.ts +169 -0
  525. package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
  526. package/dist/sensor/spectral-quadrature.js +542 -0
  527. package/dist/sensor/spectral-quadrature.js.map +1 -0
  528. package/dist/sensor/spectral-response.d.ts +192 -0
  529. package/dist/sensor/spectral-response.d.ts.map +1 -0
  530. package/dist/sensor/spectral-response.js +664 -0
  531. package/dist/sensor/spectral-response.js.map +1 -0
  532. package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
  533. package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
  534. package/dist/sensor/temporal-eqe-sum.js +30 -0
  535. package/dist/sensor/temporal-eqe-sum.js.map +1 -0
  536. package/dist/sensor/temporal-photo-signal.d.ts +38 -0
  537. package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
  538. package/dist/sensor/temporal-photo-signal.js +110 -0
  539. package/dist/sensor/temporal-photo-signal.js.map +1 -0
  540. package/dist/sensor/temporal-sample-binding.d.ts +6 -0
  541. package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
  542. package/dist/sensor/temporal-sample-binding.js +32 -0
  543. package/dist/sensor/temporal-sample-binding.js.map +1 -0
  544. package/dist/simulation/poc-simulation.d.ts.map +1 -1
  545. package/dist/simulation/poc-simulation.js +34 -11
  546. package/dist/simulation/poc-simulation.js.map +1 -1
  547. package/dist/stabilization/camera-shake.d.ts +11 -0
  548. package/dist/stabilization/camera-shake.d.ts.map +1 -1
  549. package/dist/stabilization/camera-shake.js +11 -0
  550. package/dist/stabilization/camera-shake.js.map +1 -1
  551. package/dist/stabilization/system.d.ts +218 -0
  552. package/dist/stabilization/system.d.ts.map +1 -0
  553. package/dist/stabilization/system.js +695 -0
  554. package/dist/stabilization/system.js.map +1 -0
  555. package/docs/API_REFERENCE.md +2017 -0
  556. package/docs/API_STYLE.md +132 -0
  557. package/docs/ARCHITECTURE.md +150 -23
  558. package/docs/AUTOMATION_COORDINATION.md +190 -0
  559. package/docs/CAPTURE_COLOR.md +25 -0
  560. package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
  561. package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
  562. package/docs/CAPTURE_SDR.md +20 -0
  563. package/docs/DEVELOPERS.md +60 -0
  564. package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
  565. package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
  566. package/docs/EXPORT_ACCEPTANCE.md +133 -0
  567. package/docs/GENERIC_TIER_PRESETS.md +269 -0
  568. package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
  569. package/docs/IMAGE_FORMATION.md +105 -9
  570. package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
  571. package/docs/MOTION_AND_SIGNAL.md +145 -1
  572. package/docs/NUMERICAL_CORRECTNESS.md +191 -0
  573. package/docs/PERFORMANCE_BASELINE.md +56 -0
  574. package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
  575. package/docs/PHYSICS_FOUNDATION.md +152 -5
  576. package/docs/POC_API.md +2 -0
  577. package/docs/POC_PROJECTION_REUSE.md +124 -0
  578. package/docs/PROCESSED_OUTPUT.md +157 -0
  579. package/docs/PRODUCTION_COMPOSITION.md +373 -0
  580. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
  581. package/docs/PROVENANCE.md +4 -0
  582. package/docs/PSF_FOUNDATION.md +110 -88
  583. package/docs/RAW_FRAME_ENVELOPE.md +56 -0
  584. package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
  585. package/docs/RELEASE_1_0.md +65 -0
  586. package/docs/RELEASE_AUDIT.md +38 -0
  587. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
  588. package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
  589. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
  590. package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
  591. package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
  592. package/docs/SDR_RENDERING.md +33 -0
  593. package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
  594. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
  595. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
  596. package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
  597. package/docs/SENSOR_RAW_FRAME.md +20 -0
  598. package/docs/SENSOR_RAW_PRODUCER.md +77 -0
  599. package/docs/SIGNAL_CONFORMANCE.md +23 -0
  600. package/docs/SIMULATED_CAPTURE.md +65 -0
  601. package/docs/STABILIZATION.md +160 -17
  602. package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
  603. package/docs/TIER_ACCEPTANCE.md +129 -0
  604. package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
  605. package/docs/USAGE.md +5604 -331
  606. package/docs/V1_COMPOSITION_MAP.md +123 -0
  607. package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
  608. package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
  609. package/docs/api/camera-equivalent-focal-length.md +53 -0
  610. package/docs/api/camera-field-of-view.md +119 -0
  611. package/docs/api/camera-projected-object-size.md +54 -0
  612. package/docs/api/capture-capture-export-metadata.md +107 -0
  613. package/docs/api/capture-environment-raw-producer.md +56 -0
  614. package/docs/api/capture-focus-control.md +419 -0
  615. package/docs/api/capture-linear-encoding.md +99 -0
  616. package/docs/api/capture-photographic-export.md +172 -0
  617. package/docs/api/capture-raw-frame-reconstruction.md +87 -0
  618. package/docs/api/capture-release-sequence.md +252 -0
  619. package/docs/api/capture-sensor-raw-frame.md +66 -0
  620. package/docs/api/capture-sensor-raw-producer.md +98 -0
  621. package/docs/api/capture-simulated-capture.md +179 -0
  622. package/docs/api/color-capture-color.md +122 -0
  623. package/docs/api/color-white-balance.md +386 -0
  624. package/docs/api/composition-image-formation-plan.md +825 -0
  625. package/docs/api/composition-plan-consumer.md +98 -0
  626. package/docs/api/core-calculation-result.md +220 -0
  627. package/docs/api/core-configuration-error.md +19 -0
  628. package/docs/api/core-image-formation.md +204 -0
  629. package/docs/api/core-scientific-assurance.md +214 -0
  630. package/docs/api/core-spectral-composition.md +268 -0
  631. package/docs/api/core-spectral.md +78 -0
  632. package/docs/api/core-validation.md +34 -0
  633. package/docs/api/core-version.md +14 -0
  634. package/docs/api/equipment-exposure-capabilities.md +270 -0
  635. package/docs/api/equipment-generic-tier-assets.md +82 -0
  636. package/docs/api/equipment-generic-tier-presets.md +103 -0
  637. package/docs/api/equipment-iso-capabilities.md +295 -0
  638. package/docs/api/equipment-metering-capabilities.md +126 -0
  639. package/docs/api/equipment-release-capabilities.md +91 -0
  640. package/docs/api/exports.json +5656 -0
  641. package/docs/api/exposure-exposure-duration-control.md +115 -0
  642. package/docs/api/exposure-exposure-mode-resolver.md +966 -0
  643. package/docs/api/exposure-exposure.md +150 -0
  644. package/docs/api/exposure-flash.md +327 -0
  645. package/docs/api/exposure-metering-scene-radiance.md +154 -0
  646. package/docs/api/exposure-metering-target.md +134 -0
  647. package/docs/api/exposure-metering-temporal.md +77 -0
  648. package/docs/api/exposure-metering.md +172 -0
  649. package/docs/api/exposure-program-line.md +64 -0
  650. package/docs/api/motion-camera-rotation.md +215 -0
  651. package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
  652. package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
  653. package/docs/api/motion-capture-rotation-trajectory.md +132 -0
  654. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
  655. package/docs/api/motion-extended-object-projection.md +312 -0
  656. package/docs/api/motion-projected-motion.md +60 -0
  657. package/docs/api/optics-aperture.md +69 -0
  658. package/docs/api/optics-circle-of-confusion.md +46 -0
  659. package/docs/api/optics-complex-pupil-psf.md +193 -0
  660. package/docs/api/optics-depth-of-field.md +92 -0
  661. package/docs/api/optics-diffraction.md +46 -0
  662. package/docs/api/optics-focus-breathing.md +119 -0
  663. package/docs/api/optics-focus-state.md +64 -0
  664. package/docs/api/optics-front-of-lens-filter.md +263 -0
  665. package/docs/api/optics-illumination-vignetting.md +95 -0
  666. package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
  667. package/docs/api/optics-lens-psf-profile.md +380 -0
  668. package/docs/api/optics-polygon-diffraction.md +68 -0
  669. package/docs/api/optics-profile-contract.md +47 -0
  670. package/docs/api/optics-psf-foundation.md +181 -0
  671. package/docs/api/optics-radial-distortion.md +194 -0
  672. package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
  673. package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
  674. package/docs/api/optics-sensor-environment-query.md +58 -0
  675. package/docs/api/optics-sensor-psf-quadrature.md +81 -0
  676. package/docs/api/optics-stray-light.md +109 -0
  677. package/docs/api/optics-thin-lens.md +53 -0
  678. package/docs/api/output-capture-corrected-sdr.md +71 -0
  679. package/docs/api/output-capture-geometry.md +500 -0
  680. package/docs/api/output-capture-sdr.md +69 -0
  681. package/docs/api/output-crop.md +47 -0
  682. package/docs/api/output-geometric-transforms.md +199 -0
  683. package/docs/api/output-lens-corrections.md +162 -0
  684. package/docs/api/output-sdr-rendering.md +122 -0
  685. package/docs/api/output-subject-framing-crop.md +59 -0
  686. package/docs/api/schema-camera.md +84 -0
  687. package/docs/api/schema-illumination-spectral.md +77 -0
  688. package/docs/api/schema-illumination-temporal.md +289 -0
  689. package/docs/api/schema-illumination.md +246 -0
  690. package/docs/api/schema-scene-radiance-temporal.md +215 -0
  691. package/docs/api/schema-scene-radiance.md +415 -0
  692. package/docs/api/schema-scene.md +105 -0
  693. package/docs/api/schema-validation.md +25 -0
  694. package/docs/api/sensor-accumulated-charge.md +273 -0
  695. package/docs/api/sensor-architecture.md +155 -0
  696. package/docs/api/sensor-camera-saturation-capacity.md +215 -0
  697. package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
  698. package/docs/api/sensor-capture-mode-timing.md +123 -0
  699. package/docs/api/sensor-capture-mode.md +321 -0
  700. package/docs/api/sensor-color-sampling.md +228 -0
  701. package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
  702. package/docs/api/sensor-dark-current.md +227 -0
  703. package/docs/api/sensor-environment-photo-signal.md +77 -0
  704. package/docs/api/sensor-eqe-electron-rate.md +166 -0
  705. package/docs/api/sensor-eqe-local-exposure.md +68 -0
  706. package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
  707. package/docs/api/sensor-exposure-window.md +183 -0
  708. package/docs/api/sensor-iso-signal-chain.md +264 -0
  709. package/docs/api/sensor-local-exposure-binding.md +126 -0
  710. package/docs/api/sensor-optical-stack.md +211 -0
  711. package/docs/api/sensor-photon-energy.md +149 -0
  712. package/docs/api/sensor-physical-charge-capacity.md +196 -0
  713. package/docs/api/sensor-pixel-pitch.md +41 -0
  714. package/docs/api/sensor-radiometry-readiness.md +240 -0
  715. package/docs/api/sensor-raw-readout.md +499 -0
  716. package/docs/api/sensor-raw-reconstruction.md +260 -0
  717. package/docs/api/sensor-readout-exposure-linkage.md +172 -0
  718. package/docs/api/sensor-readout-timing.md +209 -0
  719. package/docs/api/sensor-response-application-compatibility.md +256 -0
  720. package/docs/api/sensor-response-operating-range.md +293 -0
  721. package/docs/api/sensor-responsivity-photocurrent.md +245 -0
  722. package/docs/api/sensor-sampling-aperture.md +221 -0
  723. package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
  724. package/docs/api/sensor-sensor-geometry.md +143 -0
  725. package/docs/api/sensor-signal-noise.md +75 -0
  726. package/docs/api/sensor-spatial-sample-reduction.md +186 -0
  727. package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
  728. package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
  729. package/docs/api/sensor-spectral-coverage.md +33 -0
  730. package/docs/api/sensor-spectral-quadrature.md +183 -0
  731. package/docs/api/sensor-spectral-response.md +291 -0
  732. package/docs/api/sensor-temporal-photo-signal.md +62 -0
  733. package/docs/api/simulation-poc-simulation.md +364 -0
  734. package/docs/api/stabilization-camera-shake.md +71 -0
  735. package/docs/api/stabilization-system.md +442 -0
  736. package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
  737. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
  738. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
  739. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
  740. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
  741. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
  742. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
  743. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
  744. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
  745. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
  746. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
  747. package/docs/examples/production-capture.mjs +34 -0
  748. package/docs/examples/production-request.json +4613 -0
  749. package/docs/examples/quick-start.mjs +12 -0
  750. package/docs/validation/documentation-fragments.json +212 -0
  751. package/docs/validation/release-audit-inventory.json +1306 -0
  752. package/docs/validation/tier-acceptance-report-v1.json +2538 -0
  753. package/package.json +18 -4
@@ -0,0 +1,578 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * Module boundary and integration notes.
4
+ * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
5
+ * missing required fields and incompatible scientific data fail at this boundary. ISO is an
6
+ * exposure-index/control capability, not a source of photons or evidence of read noise.
7
+ * Standard/expanded settings, capture-mode restrictions and Auto ISO availability are explicit;
8
+ * unknown availability cannot authorize automatic control.
9
+ * Resolve one standard/expanded/Auto ISO request under declared profile/capture-mode availability and
10
+ * report explicit unavailable/unknown state. ISO is an exposure-index/control capability, not a source
11
+ * of photons or evidence of read noise. Standard/expanded settings, capture-mode restrictions and Auto
12
+ * ISO availability are explicit; unknown availability cannot authorize automatic control.
13
+ * @see docs/GENERIC_TIER_PRESETS.md for equations, coordinate/unit conventions, blockers and support
14
+ * limits.
15
+ */
16
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
17
+ import { parseEvidenceList } from "../core/evidence-provenance.js";
18
+ import { InvalidScientificInputError } from "../core/validation.js";
19
+ export const ISO_CAPABILITY_PROFILE_SCHEMA_VERSION = "0.1.0";
20
+ function requireRecord(value, path) {
21
+ if (typeof value !== "object" ||
22
+ value === null ||
23
+ Array.isArray(value)) {
24
+ throw new InvalidConfigurationError(path + " must be an object.");
25
+ }
26
+ return value;
27
+ }
28
+ function requireNonEmptyString(value, path) {
29
+ if (typeof value !== "string" ||
30
+ value.trim().length === 0) {
31
+ throw new InvalidConfigurationError(path +
32
+ " must be a non-empty string.");
33
+ }
34
+ return value.trim();
35
+ }
36
+ function requirePositiveFinite(value, path) {
37
+ if (typeof value !== "number" ||
38
+ !Number.isFinite(value) ||
39
+ value <= 0) {
40
+ throw new InvalidConfigurationError(path +
41
+ " must be finite and greater than zero.");
42
+ }
43
+ return value;
44
+ }
45
+ function parseRange(value, path) {
46
+ const record = requireRecord(value, path);
47
+ const minimum = requirePositiveFinite(record.minimum, path + ".minimum");
48
+ const maximum = requirePositiveFinite(record.maximum, path + ".maximum");
49
+ if (minimum > maximum) {
50
+ throw new InvalidConfigurationError(path +
51
+ ".minimum must be less than or equal to maximum.");
52
+ }
53
+ return {
54
+ minimum,
55
+ maximum
56
+ };
57
+ }
58
+ function rangeWithin(inner, outer) {
59
+ return (inner.minimum >=
60
+ outer.minimum &&
61
+ inner.maximum <=
62
+ outer.maximum);
63
+ }
64
+ function parseGrid(value, range, path) {
65
+ const record = requireRecord(value, path);
66
+ if (record.kind ===
67
+ "continuous-within-range") {
68
+ return {
69
+ kind: "continuous-within-range"
70
+ };
71
+ }
72
+ if (record.kind ===
73
+ "discrete-values") {
74
+ if (!Array.isArray(record.values) ||
75
+ record.values.length === 0) {
76
+ throw new InvalidConfigurationError(path +
77
+ ".values must be a non-empty array.");
78
+ }
79
+ let previous = Number.NEGATIVE_INFINITY;
80
+ const values = record.values.map((entry, index) => {
81
+ const parsed = requirePositiveFinite(entry, path +
82
+ ".values[" +
83
+ index +
84
+ "]");
85
+ if (parsed <= previous) {
86
+ throw new InvalidConfigurationError(path +
87
+ ".values must be strictly increasing.");
88
+ }
89
+ if (parsed <
90
+ range.minimum ||
91
+ parsed >
92
+ range.maximum) {
93
+ throw new InvalidConfigurationError(path +
94
+ ".values must remain inside the standard ISO range.");
95
+ }
96
+ previous = parsed;
97
+ return parsed;
98
+ });
99
+ if (values[0] !==
100
+ range.minimum ||
101
+ values[values.length - 1] !== range.maximum) {
102
+ throw new InvalidConfigurationError(path +
103
+ ".values must include the exact standard range endpoints.");
104
+ }
105
+ return {
106
+ kind: "discrete-values",
107
+ values
108
+ };
109
+ }
110
+ throw new InvalidConfigurationError(path + ".kind is invalid.");
111
+ }
112
+ function parseAvailability(value, path) {
113
+ if (value !== "supported" &&
114
+ value !== "unsupported" &&
115
+ value !== "unknown") {
116
+ throw new InvalidConfigurationError(path + " is invalid.");
117
+ }
118
+ return value;
119
+ }
120
+ function parseAutoIso(value, standardRange, path) {
121
+ const record = requireRecord(value, path);
122
+ const availability = parseAvailability(record.availability, path + ".availability");
123
+ const evidence = parseEvidenceList(record.evidence, path + ".evidence");
124
+ if (availability ===
125
+ "supported") {
126
+ const autoRange = parseRange(record
127
+ .standardExposureIndexRange, path +
128
+ ".standardExposureIndexRange");
129
+ if (!rangeWithin(autoRange, standardRange)) {
130
+ throw new InvalidConfigurationError(path +
131
+ ".standardExposureIndexRange must lie inside the standard ISO range.");
132
+ }
133
+ return {
134
+ availability: "supported",
135
+ standardExposureIndexRange: autoRange,
136
+ evidence
137
+ };
138
+ }
139
+ if (record
140
+ .standardExposureIndexRange !==
141
+ undefined) {
142
+ throw new InvalidConfigurationError(path +
143
+ ".standardExposureIndexRange must be omitted unless Auto ISO is supported.");
144
+ }
145
+ return {
146
+ availability,
147
+ evidence
148
+ };
149
+ }
150
+ function parseExpandedSetting(value, standardRange, path) {
151
+ const record = requireRecord(value, path);
152
+ const direction = record.direction;
153
+ if (direction !== "low" &&
154
+ direction !== "high") {
155
+ throw new InvalidConfigurationError(path +
156
+ ".direction must be low or high.");
157
+ }
158
+ const exposureIndexEquivalent = requirePositiveFinite(record
159
+ .exposureIndexEquivalent, path +
160
+ ".exposureIndexEquivalent");
161
+ if ((direction === "low" &&
162
+ exposureIndexEquivalent >=
163
+ standardRange.minimum) ||
164
+ (direction === "high" &&
165
+ exposureIndexEquivalent <=
166
+ standardRange.maximum)) {
167
+ throw new InvalidConfigurationError(path +
168
+ ".exposureIndexEquivalent must lie outside the standard range in the declared direction.");
169
+ }
170
+ if (typeof record.autoIsoEligible !==
171
+ "boolean") {
172
+ throw new InvalidConfigurationError(path +
173
+ ".autoIsoEligible must be boolean.");
174
+ }
175
+ return {
176
+ settingId: requireNonEmptyString(record.settingId, path + ".settingId"),
177
+ label: requireNonEmptyString(record.label, path + ".label"),
178
+ direction,
179
+ exposureIndexEquivalent,
180
+ autoIsoEligible: record.autoIsoEligible,
181
+ evidence: parseEvidenceList(record.evidence, path + ".evidence")
182
+ };
183
+ }
184
+ function parseCaptureModePolicy(value, standardRange, expandedIds, path) {
185
+ const record = requireRecord(value, path);
186
+ const modeRange = parseRange(record
187
+ .standardExposureIndexRange, path +
188
+ ".standardExposureIndexRange");
189
+ if (!rangeWithin(modeRange, standardRange)) {
190
+ throw new InvalidConfigurationError(path +
191
+ ".standardExposureIndexRange must lie inside the global standard range.");
192
+ }
193
+ if (!Array.isArray(record.expandedSettingIds)) {
194
+ throw new InvalidConfigurationError(path +
195
+ ".expandedSettingIds must be an array.");
196
+ }
197
+ const expandedSettingIds = record.expandedSettingIds.map((entry, index) => {
198
+ const id = requireNonEmptyString(entry, path +
199
+ ".expandedSettingIds[" +
200
+ index +
201
+ "]");
202
+ if (!expandedIds.has(id)) {
203
+ throw new InvalidConfigurationError(path +
204
+ ".expandedSettingIds contains an unknown settingId.");
205
+ }
206
+ return id;
207
+ });
208
+ if (new Set(expandedSettingIds).size !==
209
+ expandedSettingIds.length) {
210
+ throw new InvalidConfigurationError(path +
211
+ ".expandedSettingIds must not contain duplicates.");
212
+ }
213
+ return {
214
+ captureModeId: requireNonEmptyString(record.captureModeId, path + ".captureModeId"),
215
+ standardExposureIndexRange: modeRange,
216
+ expandedSettingIds,
217
+ autoIso: parseAutoIso(record.autoIso, modeRange, path + ".autoIso"),
218
+ evidence: parseEvidenceList(record.evidence, path + ".evidence")
219
+ };
220
+ }
221
+ /**
222
+ * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
223
+ * missing required fields and incompatible scientific data fail at this boundary.
224
+ *
225
+ * ISO is an exposure-index/control capability, not a source of photons or evidence of read noise.
226
+ * Standard/expanded settings, capture-mode restrictions and Auto ISO availability are explicit;
227
+ * unknown availability cannot authorize automatic control.
228
+ * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
229
+ * @returns IsoCapabilityProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
230
+ *
231
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
232
+ */
233
+ export function parseIsoCapabilityProfile(value) {
234
+ const record = requireRecord(value, "isoCapabilityProfile");
235
+ if (record.schemaVersion !==
236
+ ISO_CAPABILITY_PROFILE_SCHEMA_VERSION) {
237
+ throw new InvalidConfigurationError('isoCapabilityProfile.schemaVersion must be "' +
238
+ ISO_CAPABILITY_PROFILE_SCHEMA_VERSION +
239
+ '".');
240
+ }
241
+ if (record.capabilityMeaning !==
242
+ "reported-exposure-index-capability-not-physical-gain") {
243
+ throw new InvalidConfigurationError("isoCapabilityProfile.capabilityMeaning is invalid.");
244
+ }
245
+ const standard = requireRecord(record.standard, "isoCapabilityProfile.standard");
246
+ const standardRange = parseRange(standard
247
+ .exposureIndexRange, "isoCapabilityProfile.standard.exposureIndexRange");
248
+ const settingGrid = parseGrid(standard.settingGrid, standardRange, "isoCapabilityProfile.standard.settingGrid");
249
+ if (!Array.isArray(record.expandedSettings)) {
250
+ throw new InvalidConfigurationError("isoCapabilityProfile.expandedSettings must be an array.");
251
+ }
252
+ const expandedSettings = record.expandedSettings.map((entry, index) => parseExpandedSetting(entry, standardRange, "isoCapabilityProfile.expandedSettings[" +
253
+ index +
254
+ "]"));
255
+ const expandedIds = expandedSettings.map((entry) => entry.settingId);
256
+ if (new Set(expandedIds).size !==
257
+ expandedIds.length) {
258
+ throw new InvalidConfigurationError("isoCapabilityProfile.expandedSettings must not contain duplicate settingId values.");
259
+ }
260
+ const expandedIdSet = new Set(expandedIds);
261
+ if (!Array.isArray(record.captureModePolicies)) {
262
+ throw new InvalidConfigurationError("isoCapabilityProfile.captureModePolicies must be an array.");
263
+ }
264
+ const captureModePolicies = record.captureModePolicies.map((entry, index) => parseCaptureModePolicy(entry, standardRange, expandedIdSet, "isoCapabilityProfile.captureModePolicies[" +
265
+ index +
266
+ "]"));
267
+ const modeIds = captureModePolicies.map((entry) => entry.captureModeId);
268
+ if (new Set(modeIds).size !==
269
+ modeIds.length) {
270
+ throw new InvalidConfigurationError("isoCapabilityProfile.captureModePolicies must not contain duplicate captureModeId values.");
271
+ }
272
+ return {
273
+ schemaVersion: ISO_CAPABILITY_PROFILE_SCHEMA_VERSION,
274
+ profileId: requireNonEmptyString(record.profileId, "isoCapabilityProfile.profileId"),
275
+ profileVersion: requireNonEmptyString(record.profileVersion, "isoCapabilityProfile.profileVersion"),
276
+ capabilityMeaning: "reported-exposure-index-capability-not-physical-gain",
277
+ standard: {
278
+ exposureIndexRange: standardRange,
279
+ settingGrid
280
+ },
281
+ expandedSettings,
282
+ autoIso: parseAutoIso(record.autoIso, standardRange, "isoCapabilityProfile.autoIso"),
283
+ captureModePolicies,
284
+ evidence: parseEvidenceList(record.evidence, "isoCapabilityProfile.evidence")
285
+ };
286
+ }
287
+ function isStandardValueSupported(value, range, grid) {
288
+ if (value < range.minimum ||
289
+ value > range.maximum) {
290
+ return false;
291
+ }
292
+ return (grid.kind ===
293
+ "continuous-within-range" ||
294
+ grid.values.includes(value));
295
+ }
296
+ function resolveModePolicy(profile, captureModeId) {
297
+ if (captureModeId ===
298
+ undefined) {
299
+ return {
300
+ range: profile.standard
301
+ .exposureIndexRange,
302
+ expandedSettingIds: new Set(profile
303
+ .expandedSettings
304
+ .map((entry) => entry.settingId)),
305
+ autoIso: profile.autoIso
306
+ };
307
+ }
308
+ if (captureModeId.trim()
309
+ .length === 0) {
310
+ throw new InvalidScientificInputError("captureModeId must be a non-empty string when provided.");
311
+ }
312
+ const policy = profile.captureModePolicies.find((entry) => entry.captureModeId ===
313
+ captureModeId);
314
+ if (policy === undefined) {
315
+ return {
316
+ range: profile.standard
317
+ .exposureIndexRange,
318
+ expandedSettingIds: new Set(profile
319
+ .expandedSettings
320
+ .map((entry) => entry.settingId)),
321
+ autoIso: profile.autoIso
322
+ };
323
+ }
324
+ return {
325
+ range: policy
326
+ .standardExposureIndexRange,
327
+ expandedSettingIds: new Set(policy
328
+ .expandedSettingIds),
329
+ autoIso: policy.autoIso
330
+ };
331
+ }
332
+ /**
333
+ * Resolve one standard/expanded/Auto ISO request under declared profile/capture-mode availability and
334
+ * report explicit unavailable/unknown state.
335
+ *
336
+ * ISO is an exposure-index/control capability, not a source of photons or evidence of read noise.
337
+ * Standard/expanded settings, capture-mode restrictions and Auto ISO availability are explicit;
338
+ * unknown availability cannot authorize automatic control.
339
+ * @param input - ResolveIsoCapabilityInput. See the linked contract for coordinate, unit and profile binding semantics.
340
+ * @returns ResolvedIsoCapability. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
341
+ *
342
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
343
+ */
344
+ export function resolveIsoCapability(input) {
345
+ const profile = parseIsoCapabilityProfile(input.profile);
346
+ const modePolicy = resolveModePolicy(profile, input.captureModeId);
347
+ if (input.setting.kind ===
348
+ "standard") {
349
+ if (typeof input.setting
350
+ .exposureIndex !==
351
+ "number" ||
352
+ !Number.isFinite(input.setting
353
+ .exposureIndex) ||
354
+ input.setting
355
+ .exposureIndex <= 0) {
356
+ throw new InvalidScientificInputError("standard exposureIndex must be finite and greater than zero.");
357
+ }
358
+ if (!isStandardValueSupported(input.setting
359
+ .exposureIndex, modePolicy.range, profile.standard
360
+ .settingGrid)) {
361
+ throw new InvalidScientificInputError("Requested standard exposure index is not supported by the selected ISO capability/mode.");
362
+ }
363
+ const autoEligible = modePolicy.autoIso
364
+ .availability ===
365
+ "supported" &&
366
+ input.setting
367
+ .exposureIndex >=
368
+ modePolicy.autoIso
369
+ .standardExposureIndexRange
370
+ .minimum &&
371
+ input.setting
372
+ .exposureIndex <=
373
+ modePolicy.autoIso
374
+ .standardExposureIndexRange
375
+ .maximum;
376
+ return {
377
+ profileId: profile.profileId,
378
+ profileVersion: profile.profileVersion,
379
+ captureModeId: input.captureModeId ??
380
+ null,
381
+ setting: {
382
+ kind: "standard",
383
+ exposureIndex: input.setting
384
+ .exposureIndex
385
+ },
386
+ reportedExposureIndex: input.setting
387
+ .exposureIndex,
388
+ expandedSetting: false,
389
+ autoIsoEligible: autoEligible,
390
+ standardExposureIndexRange: {
391
+ ...modePolicy.range
392
+ },
393
+ standardSettingGrid: profile.standard
394
+ .settingGrid.kind ===
395
+ "continuous-within-range"
396
+ ? {
397
+ kind: "continuous-within-range"
398
+ }
399
+ : {
400
+ kind: "discrete-values",
401
+ values: [
402
+ ...profile.standard
403
+ .settingGrid
404
+ .values
405
+ ]
406
+ },
407
+ autoIso: modePolicy.autoIso,
408
+ capturedPhotonExpectationModified: false,
409
+ photonShotNoiseStatisticsModified: false,
410
+ physicalGainInferred: false,
411
+ conversionGainInferred: false,
412
+ readNoiseInferred: false,
413
+ saturationInferred: false,
414
+ exactCommercialCameraBehaviorClaimed: false
415
+ };
416
+ }
417
+ if (input.setting.kind !==
418
+ "expanded") {
419
+ throw new InvalidScientificInputError("ISO setting must be a valid standard or expanded setting.");
420
+ }
421
+ const expandedSettingId = input.setting.settingId;
422
+ if (typeof expandedSettingId !==
423
+ "string" ||
424
+ expandedSettingId.trim()
425
+ .length === 0) {
426
+ throw new InvalidScientificInputError("ISO setting must be a valid standard or expanded setting.");
427
+ }
428
+ const setting = profile.expandedSettings.find((entry) => entry.settingId ===
429
+ expandedSettingId);
430
+ if (setting === undefined ||
431
+ !modePolicy
432
+ .expandedSettingIds
433
+ .has(setting.settingId)) {
434
+ throw new InvalidScientificInputError("Requested expanded ISO setting is not supported by the selected ISO capability/mode.");
435
+ }
436
+ return {
437
+ profileId: profile.profileId,
438
+ profileVersion: profile.profileVersion,
439
+ captureModeId: input.captureModeId ??
440
+ null,
441
+ setting: {
442
+ kind: "expanded",
443
+ settingId: setting.settingId,
444
+ label: setting.label,
445
+ direction: setting.direction,
446
+ exposureIndexEquivalent: setting
447
+ .exposureIndexEquivalent
448
+ },
449
+ reportedExposureIndex: setting
450
+ .exposureIndexEquivalent,
451
+ expandedSetting: true,
452
+ autoIsoEligible: modePolicy.autoIso
453
+ .availability ===
454
+ "supported" &&
455
+ setting.autoIsoEligible,
456
+ standardExposureIndexRange: {
457
+ ...modePolicy.range
458
+ },
459
+ standardSettingGrid: profile.standard
460
+ .settingGrid.kind ===
461
+ "continuous-within-range"
462
+ ? {
463
+ kind: "continuous-within-range"
464
+ }
465
+ : {
466
+ kind: "discrete-values",
467
+ values: [
468
+ ...profile.standard
469
+ .settingGrid.values
470
+ ]
471
+ },
472
+ autoIso: modePolicy.autoIso,
473
+ capturedPhotonExpectationModified: false,
474
+ photonShotNoiseStatisticsModified: false,
475
+ physicalGainInferred: false,
476
+ conversionGainInferred: false,
477
+ readNoiseInferred: false,
478
+ saturationInferred: false,
479
+ exactCommercialCameraBehaviorClaimed: false
480
+ };
481
+ }
482
+ function sameResolvedGrid(resolved, detailed) {
483
+ if (resolved.kind !==
484
+ detailed.kind) {
485
+ return false;
486
+ }
487
+ if (resolved.kind ===
488
+ "continuous-within-range" ||
489
+ detailed.kind ===
490
+ "continuous-within-range") {
491
+ return true;
492
+ }
493
+ return (resolved.values.length ===
494
+ detailed.values.length &&
495
+ resolved.values.every((value, index) => value ===
496
+ detailed.values[index]));
497
+ }
498
+ function gridWithinRange(grid, range) {
499
+ if (grid.kind ===
500
+ "continuous-within-range") {
501
+ return {
502
+ kind: "continuous-within-range"
503
+ };
504
+ }
505
+ const values = grid.values.filter((value) => value >= range.minimum &&
506
+ value <= range.maximum);
507
+ if (values.length === 0) {
508
+ throw new InvalidScientificInputError("Selected capture-mode ISO range contains no values from the resolved equipment ISO grid.");
509
+ }
510
+ return {
511
+ kind: "discrete-values",
512
+ values
513
+ };
514
+ }
515
+ /**
516
+ * Binds the detailed #7 ISO/EI capability contract into the numeric capability
517
+ * envelope consumed by #99.
518
+ *
519
+ * The existing equipment capability must agree exactly with the profile's
520
+ * global standard ISO range/grid. An evidenced capture-mode policy may narrow
521
+ * the standard manual envelope for that mode. Auto ISO may then be narrower
522
+ * still. Expanded L/H-style settings remain outside #99's ordinary numeric
523
+ * ISO grid and are resolved through resolveIsoCapability().
524
+ */
525
+ export function bindIsoCapabilityToExposureCapabilities(input) {
526
+ const profile = parseIsoCapabilityProfile(input.isoCapabilityProfile);
527
+ const source = input.equipmentCapabilities;
528
+ if (source.iso.minimum !==
529
+ profile.standard
530
+ .exposureIndexRange
531
+ .minimum ||
532
+ source.iso.maximum !==
533
+ profile.standard
534
+ .exposureIndexRange
535
+ .maximum ||
536
+ !sameResolvedGrid(source.iso.settingGrid, profile.standard
537
+ .settingGrid)) {
538
+ throw new InvalidScientificInputError("Detailed ISO capability standard range/grid must exactly match the existing resolved equipment ISO capability.");
539
+ }
540
+ const modePolicy = resolveModePolicy(profile, input.captureModeId);
541
+ const settingGrid = gridWithinRange(source.iso.settingGrid, modePolicy.range);
542
+ const iso = modePolicy.autoIso
543
+ .availability ===
544
+ "supported"
545
+ ? {
546
+ minimum: modePolicy.range.minimum,
547
+ maximum: modePolicy.range.maximum,
548
+ settingGrid,
549
+ autoIsoAvailability: "supported",
550
+ autoIsoMinimum: modePolicy.autoIso
551
+ .standardExposureIndexRange
552
+ .minimum,
553
+ autoIsoMaximum: modePolicy.autoIso
554
+ .standardExposureIndexRange
555
+ .maximum
556
+ }
557
+ : {
558
+ minimum: modePolicy.range.minimum,
559
+ maximum: modePolicy.range.maximum,
560
+ settingGrid,
561
+ autoIsoAvailability: modePolicy.autoIso
562
+ .availability
563
+ };
564
+ return {
565
+ isoCapabilityProfileId: profile.profileId,
566
+ isoCapabilityProfileVersion: profile.profileVersion,
567
+ captureModeId: input.captureModeId ??
568
+ null,
569
+ capabilities: {
570
+ ...source,
571
+ iso
572
+ },
573
+ expandedSettingsExcludedFromNumericExposureGrid: true,
574
+ physicalGainInferred: false,
575
+ readNoiseInferred: false
576
+ };
577
+ }
578
+ //# sourceMappingURL=iso-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iso-capabilities.js","sourceRoot":"","sources":["../../src/equipment/iso-capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { type EvidenceProvenance } from "../core/evidence-provenance.js";
2
+ import { type ExposureMeteringPolicy, type ExposureMeteringProfile } from "../exposure/metering.js";
3
+ import type { GenericCapabilityAvailability } from "./exposure-capabilities.js";
4
+ export declare const GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION: "0.1.0";
5
+ export interface GenericSupportedMeteringProfile {
6
+ meteringProfileId: string;
7
+ policyKind: ExposureMeteringPolicy["kind"];
8
+ evidence: readonly EvidenceProvenance[];
9
+ }
10
+ export interface GenericBodyMeteringCapabilityProfile {
11
+ schemaVersion: typeof GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION;
12
+ profileId: string;
13
+ profileVersion: string;
14
+ scientificStatus: "approximation";
15
+ evidence: readonly EvidenceProvenance[];
16
+ supportedMeteringProfiles: readonly GenericSupportedMeteringProfile[];
17
+ spotFocusPointLinkage: {
18
+ availability: GenericCapabilityAvailability;
19
+ evidence: readonly EvidenceProvenance[];
20
+ };
21
+ }
22
+ export type MeteringCapabilityCompatibilityBlocker = "metering-profile-unsupported" | "metering-policy-mismatch";
23
+ export interface MeteringCapabilityCompatibilityAssessment {
24
+ schemaVersion: typeof GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION;
25
+ status: "compatible" | "blocked";
26
+ bodyProfile: {
27
+ profileId: string;
28
+ profileVersion: string;
29
+ };
30
+ meteringProfile: {
31
+ profileId: string;
32
+ policyKind: ExposureMeteringPolicy["kind"];
33
+ };
34
+ targetPolicyOwnership: "metering-profile";
35
+ targetCalibrationDuplicatedInEquipmentProfile: false;
36
+ spotFocusPointLinkageAvailability: GenericCapabilityAvailability;
37
+ blockers: readonly MeteringCapabilityCompatibilityBlocker[];
38
+ }
39
+ export interface AssessExposureMeteringProfileCompatibilityInput {
40
+ bodyCapabilities: GenericBodyMeteringCapabilityProfile;
41
+ meteringProfile: ExposureMeteringProfile;
42
+ }
43
+ /**
44
+ * Parses generic body metering capability metadata.
45
+ *
46
+ * This profile declares which engine-owned metering profiles/modes a generic
47
+ * body can select. It deliberately does not duplicate target/calibration
48
+ * values from those metering profiles.
49
+ */
50
+ export declare function parseGenericBodyMeteringCapabilityProfile(value: unknown): GenericBodyMeteringCapabilityProfile;
51
+ /**
52
+ * Checks whether one engine metering profile is selectable on a generic body.
53
+ *
54
+ * Calibration/target policy remains authoritative in the metering profile and
55
+ * is never copied into equipment capability metadata.
56
+ */
57
+ export declare function assessExposureMeteringProfileCompatibility(input: AssessExposureMeteringProfileCompatibilityInput): MeteringCapabilityCompatibilityAssessment;
58
+ //# sourceMappingURL=metering-capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metering-capabilities.d.ts","sourceRoot":"","sources":["../../src/equipment/metering-capabilities.ts"],"names":[],"mappings":"AAeA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAIhF,eAAO,MAAM,+CAA+C,EAC1D,OAAgB,CAAC;AAEnB,MAAM,WAAW,+BAA+B;IAC9C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC3C,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,oCAAoC;IACnD,aAAa,EACX,OAAO,+CAA+C,CAAC;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,eAAe,CAAC;IAClC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,yBAAyB,EACvB,SAAS,+BAA+B,EAAE,CAAC;IAC7C,qBAAqB,EAAE;QACrB,YAAY,EAAE,6BAA6B,CAAC;QAC5C,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;KACzC,CAAC;CACH;AAED,MAAM,MAAM,sCAAsC,GAC9C,8BAA8B,GAC9B,0BAA0B,CAAC;AAE/B,MAAM,WAAW,yCAAyC;IACxD,aAAa,EACX,OAAO,+CAA+C,CAAC;IACzD,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,eAAe,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;KAC5C,CAAC;IACF,qBAAqB,EAAE,kBAAkB,CAAC;IAC1C,6CAA6C,EAAE,KAAK,CAAC;IACrD,iCAAiC,EAC/B,6BAA6B,CAAC;IAChC,QAAQ,EACN,SAAS,sCAAsC,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,+CAA+C;IAC9D,gBAAgB,EACd,oCAAoC,CAAC;IACvC,eAAe,EACb,uBAAuB,CAAC;CAC3B;AA0ED;;;;;;GAMG;AACH,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,OAAO,GACb,oCAAoC,CAyHtC;AAED;;;;;GAKG;AACH,wBAAgB,0CAA0C,CACxD,KAAK,EACH,+CAA+C,GAChD,yCAAyC,CAsE3C"}