@photivra/engine 2.18.0 → 2.20.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 (335) hide show
  1. package/CHANGELOG.md +179 -1
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +7 -5
  4. package/README.md +6 -6
  5. package/SECURITY.md +1 -1
  6. package/THIRD_PARTY.md +14 -10
  7. package/dist/capture/dng-lens-correction-opcodes.d.ts +32 -0
  8. package/dist/capture/dng-lens-correction-opcodes.js +119 -0
  9. package/dist/capture/dng-lens-correction-opcodes.js.map +1 -0
  10. package/dist/capture/focus-control.js +2 -75
  11. package/dist/capture/focus-control.js.map +1 -1
  12. package/dist/capture/native-environment-lean.d.ts +1 -0
  13. package/dist/capture/native-environment-lean.js +2 -6
  14. package/dist/capture/native-environment-lean.js.map +1 -1
  15. package/dist/capture/native-environment-optical-stage.d.ts +1 -0
  16. package/dist/capture/native-environment-optical-stage.js +2 -5
  17. package/dist/capture/native-environment-optical-stage.js.map +1 -1
  18. package/dist/capture/native-environment-raw.js +1 -5
  19. package/dist/capture/native-environment-raw.js.map +1 -1
  20. package/dist/capture/native-raw-dng.d.ts +6 -0
  21. package/dist/capture/native-raw-dng.js +16 -2
  22. package/dist/capture/native-raw-dng.js.map +1 -1
  23. package/dist/capture/release-sequence.js +2 -47
  24. package/dist/capture/release-sequence.js.map +1 -1
  25. package/dist/capture/sensor-raw-producer.js +3 -5
  26. package/dist/capture/sensor-raw-producer.js.map +1 -1
  27. package/dist/color/white-balance.d.ts +2 -0
  28. package/dist/color/white-balance.js +3 -56
  29. package/dist/color/white-balance.js.map +1 -1
  30. package/dist/composition/image-formation-plan.d.ts +1 -0
  31. package/dist/composition/image-formation-plan.js +3 -49
  32. package/dist/composition/image-formation-plan.js.map +1 -1
  33. package/dist/core/evidence-provenance.js +1 -16
  34. package/dist/core/evidence-provenance.js.map +1 -1
  35. package/dist/core/record-validation.d.ts +54 -0
  36. package/dist/core/record-validation.js +176 -0
  37. package/dist/core/record-validation.js.map +1 -1
  38. package/dist/core/scientific-assurance.js +1 -18
  39. package/dist/core/scientific-assurance.js.map +1 -1
  40. package/dist/core/shared-helpers.d.ts +35 -0
  41. package/dist/core/shared-helpers.js +38 -0
  42. package/dist/core/shared-helpers.js.map +1 -0
  43. package/dist/core/spectral-composition.js +1 -36
  44. package/dist/core/spectral-composition.js.map +1 -1
  45. package/dist/core/spectral.js +1 -19
  46. package/dist/core/spectral.js.map +1 -1
  47. package/dist/core/version.d.ts +1 -1
  48. package/dist/core/version.js +1 -1
  49. package/dist/core/version.js.map +1 -1
  50. package/dist/equipment/exposure-capabilities.d.ts +1 -0
  51. package/dist/equipment/exposure-capabilities.js +2 -36
  52. package/dist/equipment/exposure-capabilities.js.map +1 -1
  53. package/dist/equipment/generic-lens-catalogue.d.ts +8 -2
  54. package/dist/equipment/generic-lens-catalogue.js +31 -2
  55. package/dist/equipment/generic-lens-catalogue.js.map +1 -1
  56. package/dist/equipment/generic-tier-assets.js +2 -3
  57. package/dist/equipment/generic-tier-assets.js.map +1 -1
  58. package/dist/equipment/generic-tier-presets.js +2 -3
  59. package/dist/equipment/generic-tier-presets.js.map +1 -1
  60. package/dist/equipment/iso-capabilities.js +2 -49
  61. package/dist/equipment/iso-capabilities.js.map +1 -1
  62. package/dist/equipment/metering-capabilities.js +1 -26
  63. package/dist/equipment/metering-capabilities.js.map +1 -1
  64. package/dist/equipment/release-capabilities.js +1 -53
  65. package/dist/equipment/release-capabilities.js.map +1 -1
  66. package/dist/exposure/auto-iso-slowest-shutter.js +1 -7
  67. package/dist/exposure/auto-iso-slowest-shutter.js.map +1 -1
  68. package/dist/exposure/exposure-duration-control.js +1 -16
  69. package/dist/exposure/exposure-duration-control.js.map +1 -1
  70. package/dist/exposure/exposure-mode-resolver.js +1 -17
  71. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  72. package/dist/exposure/filtered-exposure-time.d.ts +93 -0
  73. package/dist/exposure/filtered-exposure-time.js +129 -0
  74. package/dist/exposure/filtered-exposure-time.js.map +1 -0
  75. package/dist/exposure/flash-ttl.d.ts +1 -0
  76. package/dist/exposure/flash-ttl.js +1 -1
  77. package/dist/exposure/flash-ttl.js.map +1 -1
  78. package/dist/exposure/flash.js +1 -49
  79. package/dist/exposure/flash.js.map +1 -1
  80. package/dist/exposure/metering-scene-radiance.js +1 -25
  81. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  82. package/dist/exposure/metering-target.js +1 -30
  83. package/dist/exposure/metering-target.js.map +1 -1
  84. package/dist/exposure/metering-temporal.js +1 -8
  85. package/dist/exposure/metering-temporal.js.map +1 -1
  86. package/dist/exposure/metering.js +1 -72
  87. package/dist/exposure/metering.js.map +1 -1
  88. package/dist/exposure/program-line.js +1 -45
  89. package/dist/exposure/program-line.js.map +1 -1
  90. package/dist/facade/develop-joined-parts.d.ts +29 -0
  91. package/dist/facade/develop-joined-parts.js +33 -0
  92. package/dist/facade/develop-joined-parts.js.map +1 -0
  93. package/dist/facade/display-view-gpu.d.ts +7 -4
  94. package/dist/facade/display-view-gpu.js +4 -4
  95. package/dist/facade/display-view-gpu.js.map +1 -1
  96. package/dist/facade/display-view-lens-signal.d.ts +1 -1
  97. package/dist/facade/display-view-lens-signal.js +5 -3
  98. package/dist/facade/display-view-lens-signal.js.map +1 -1
  99. package/dist/facade/display-view.d.ts +3 -1
  100. package/dist/facade/display-view.js +1 -1
  101. package/dist/facade/display-view.js.map +1 -1
  102. package/dist/facade/fast-methods.d.ts +50 -0
  103. package/dist/facade/fast-methods.js +50 -0
  104. package/dist/facade/fast-methods.js.map +1 -0
  105. package/dist/facade/fast-resolution.d.ts +12 -0
  106. package/dist/facade/fast-resolution.js +18 -0
  107. package/dist/facade/fast-resolution.js.map +1 -0
  108. package/dist/facade/generic-lens-capture.d.ts +6 -3
  109. package/dist/facade/generic-lens-capture.js +6 -3
  110. package/dist/facade/generic-lens-capture.js.map +1 -1
  111. package/dist/facade/simulate-capture.d.ts +88 -16
  112. package/dist/facade/simulate-capture.js +279 -153
  113. package/dist/facade/simulate-capture.js.map +1 -1
  114. package/dist/facade/simulate-display-view.d.ts +3 -2
  115. package/dist/facade/simulate-display-view.js +22 -12
  116. package/dist/facade/simulate-display-view.js.map +1 -1
  117. package/dist/gpu/chart-composite-gpu.js +1 -3
  118. package/dist/gpu/chart-composite-gpu.js.map +1 -1
  119. package/dist/gpu/chart-radiance-gpu.js +1 -5
  120. package/dist/gpu/chart-radiance-gpu.js.map +1 -1
  121. package/dist/gpu/display-view-quality-gpu.d.ts +13 -1
  122. package/dist/gpu/display-view-quality-gpu.js +4 -8
  123. package/dist/gpu/display-view-quality-gpu.js.map +1 -1
  124. package/dist/gpu/display-view-speed-gpu.js +3 -25
  125. package/dist/gpu/display-view-speed-gpu.js.map +1 -1
  126. package/dist/gpu/sensor-stage-gpu.js +1 -5
  127. package/dist/gpu/sensor-stage-gpu.js.map +1 -1
  128. package/dist/gpu/webgpu-runtime.d.ts +2 -0
  129. package/dist/gpu/webgpu-runtime.js +3 -0
  130. package/dist/gpu/webgpu-runtime.js.map +1 -1
  131. package/dist/index.d.ts +11 -1
  132. package/dist/index.js +8 -0
  133. package/dist/index.js.map +1 -1
  134. package/dist/motion/camera-rotation.js +1 -6
  135. package/dist/motion/camera-rotation.js.map +1 -1
  136. package/dist/motion/capture-rotation-inverse-mapping.d.ts +12 -0
  137. package/dist/motion/capture-rotation-inverse-mapping.js +2 -2
  138. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  139. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +1 -0
  140. package/dist/motion/capture-rotation-temporal-quadrature.js +1 -1
  141. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  142. package/dist/motion/capture-rotation-trajectory.js +2 -17
  143. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  144. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +1 -0
  145. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +3 -14
  146. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  147. package/dist/motion/extended-object-projection.js +5 -40
  148. package/dist/motion/extended-object-projection.js.map +1 -1
  149. package/dist/optics/aperture-diameter.d.ts +47 -0
  150. package/dist/optics/aperture-diameter.js +50 -0
  151. package/dist/optics/aperture-diameter.js.map +1 -0
  152. package/dist/optics/atmospheric-haze.js +1 -7
  153. package/dist/optics/atmospheric-haze.js.map +1 -1
  154. package/dist/optics/brown-conrady-distortion.js +1 -7
  155. package/dist/optics/brown-conrady-distortion.js.map +1 -1
  156. package/dist/optics/complex-pupil-psf.d.ts +1 -0
  157. package/dist/optics/complex-pupil-psf.js +2 -84
  158. package/dist/optics/complex-pupil-psf.js.map +1 -1
  159. package/dist/optics/detail-limit.d.ts +182 -0
  160. package/dist/optics/detail-limit.js +336 -0
  161. package/dist/optics/detail-limit.js.map +1 -0
  162. package/dist/optics/focus-state.js +1 -11
  163. package/dist/optics/focus-state.js.map +1 -1
  164. package/dist/optics/front-of-lens-filter.d.ts +5 -0
  165. package/dist/optics/front-of-lens-filter.js +3 -65
  166. package/dist/optics/front-of-lens-filter.js.map +1 -1
  167. package/dist/optics/generic-lens-psf.d.ts +18 -2
  168. package/dist/optics/generic-lens-psf.js +25 -2
  169. package/dist/optics/generic-lens-psf.js.map +1 -1
  170. package/dist/optics/generic-nd-filter-presets.d.ts +12 -0
  171. package/dist/optics/generic-nd-filter-presets.js +48 -0
  172. package/dist/optics/generic-nd-filter-presets.js.map +1 -0
  173. package/dist/optics/illumination-vignetting.js +1 -6
  174. package/dist/optics/illumination-vignetting.js.map +1 -1
  175. package/dist/optics/lens-psf-profile.d.ts +4 -1
  176. package/dist/optics/lens-psf-profile.js +12 -111
  177. package/dist/optics/lens-psf-profile.js.map +1 -1
  178. package/dist/optics/longitudinal-chromatic-aberration.js +1 -7
  179. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -1
  180. package/dist/optics/pupil-vignetting.js +1 -7
  181. package/dist/optics/pupil-vignetting.js.map +1 -1
  182. package/dist/optics/radial-distortion.js +1 -6
  183. package/dist/optics/radial-distortion.js.map +1 -1
  184. package/dist/optics/scene-to-sensor-irradiance.d.ts +13 -0
  185. package/dist/optics/scene-to-sensor-irradiance.js +11 -96
  186. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  187. package/dist/optics/stray-light.d.ts +1 -0
  188. package/dist/optics/stray-light.js +1 -1
  189. package/dist/optics/stray-light.js.map +1 -1
  190. package/dist/optics/zernike-wavefront.js +1 -7
  191. package/dist/optics/zernike-wavefront.js.map +1 -1
  192. package/dist/output/capture-geometry.js +1 -8
  193. package/dist/output/capture-geometry.js.map +1 -1
  194. package/dist/output/crop-to-match-focal-length.d.ts +62 -0
  195. package/dist/output/crop-to-match-focal-length.js +63 -0
  196. package/dist/output/crop-to-match-focal-length.js.map +1 -0
  197. package/dist/output/developed-lens-corrections.d.ts +62 -0
  198. package/dist/output/developed-lens-corrections.js +135 -0
  199. package/dist/output/developed-lens-corrections.js.map +1 -0
  200. package/dist/output/generic-lens-corrections.d.ts +5 -7
  201. package/dist/output/generic-lens-corrections.js +11 -10
  202. package/dist/output/generic-lens-corrections.js.map +1 -1
  203. package/dist/output/geometric-transforms.js +1 -4
  204. package/dist/output/geometric-transforms.js.map +1 -1
  205. package/dist/output/lens-corrections.d.ts +12 -2
  206. package/dist/output/lens-corrections.js +22 -7
  207. package/dist/output/lens-corrections.js.map +1 -1
  208. package/dist/output/native-capture-sdr.d.ts +2 -2
  209. package/dist/output/native-capture-sdr.js +3 -2
  210. package/dist/output/native-capture-sdr.js.map +1 -1
  211. package/dist/output/print-contrast-reference.js +1 -1
  212. package/dist/output/print-contrast-reference.js.map +1 -1
  213. package/dist/output/print-size-blur-noise.d.ts +110 -0
  214. package/dist/output/print-size-blur-noise.js +138 -0
  215. package/dist/output/print-size-blur-noise.js.map +1 -0
  216. package/dist/processing/development-detail.d.ts +29 -0
  217. package/dist/processing/development-detail.js +128 -107
  218. package/dist/processing/development-detail.js.map +1 -1
  219. package/dist/schema/illumination-temporal.js +3 -72
  220. package/dist/schema/illumination-temporal.js.map +1 -1
  221. package/dist/schema/illumination.d.ts +1 -0
  222. package/dist/schema/illumination.js +2 -65
  223. package/dist/schema/illumination.js.map +1 -1
  224. package/dist/schema/scene-radiance-temporal.js +2 -14
  225. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  226. package/dist/schema/scene-radiance.js +2 -60
  227. package/dist/schema/scene-radiance.js.map +1 -1
  228. package/dist/schema/validation.d.ts +2 -0
  229. package/dist/schema/validation.js +2 -17
  230. package/dist/schema/validation.js.map +1 -1
  231. package/dist/sensor/accumulated-charge.js +2 -59
  232. package/dist/sensor/accumulated-charge.js.map +1 -1
  233. package/dist/sensor/architecture.js +1 -16
  234. package/dist/sensor/architecture.js.map +1 -1
  235. package/dist/sensor/camera-saturation-capacity.d.ts +1 -0
  236. package/dist/sensor/camera-saturation-capacity.js +3 -55
  237. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  238. package/dist/sensor/capture-color-sampling-binding.js +1 -26
  239. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  240. package/dist/sensor/capture-mode-timing.js +1 -39
  241. package/dist/sensor/capture-mode-timing.js.map +1 -1
  242. package/dist/sensor/capture-mode.js +1 -23
  243. package/dist/sensor/capture-mode.js.map +1 -1
  244. package/dist/sensor/color-sampling.js +1 -26
  245. package/dist/sensor/color-sampling.js.map +1 -1
  246. package/dist/sensor/constant-rate-temporal-integration.js +2 -46
  247. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  248. package/dist/sensor/dark-current.js +2 -45
  249. package/dist/sensor/dark-current.js.map +1 -1
  250. package/dist/sensor/eqe-electron-rate.js +2 -41
  251. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  252. package/dist/sensor/exposure-window.d.ts +7 -0
  253. package/dist/sensor/exposure-window.js +9 -24
  254. package/dist/sensor/exposure-window.js.map +1 -1
  255. package/dist/sensor/iso-gain.js +1 -7
  256. package/dist/sensor/iso-gain.js.map +1 -1
  257. package/dist/sensor/iso-signal-chain.js +1 -43
  258. package/dist/sensor/iso-signal-chain.js.map +1 -1
  259. package/dist/sensor/optical-stack.js +1 -25
  260. package/dist/sensor/optical-stack.js.map +1 -1
  261. package/dist/sensor/photon-energy.js +1 -26
  262. package/dist/sensor/photon-energy.js.map +1 -1
  263. package/dist/sensor/physical-charge-capacity.js +3 -77
  264. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  265. package/dist/sensor/radiometry-readiness.js +2 -23
  266. package/dist/sensor/radiometry-readiness.js.map +1 -1
  267. package/dist/sensor/raw-readout.d.ts +3 -0
  268. package/dist/sensor/raw-readout.js +4 -66
  269. package/dist/sensor/raw-readout.js.map +1 -1
  270. package/dist/sensor/raw-reconstruction.js +2 -64
  271. package/dist/sensor/raw-reconstruction.js.map +1 -1
  272. package/dist/sensor/readout-exposure-linkage.js +1 -9
  273. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  274. package/dist/sensor/readout-timing.js +4 -79
  275. package/dist/sensor/readout-timing.js.map +1 -1
  276. package/dist/sensor/response-application-compatibility.d.ts +2 -0
  277. package/dist/sensor/response-application-compatibility.js +4 -35
  278. package/dist/sensor/response-application-compatibility.js.map +1 -1
  279. package/dist/sensor/response-operating-range.d.ts +1 -0
  280. package/dist/sensor/response-operating-range.js +3 -79
  281. package/dist/sensor/response-operating-range.js.map +1 -1
  282. package/dist/sensor/responsivity-photocurrent.js +4 -114
  283. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  284. package/dist/sensor/sampling-aperture.js +1 -25
  285. package/dist/sensor/sampling-aperture.js.map +1 -1
  286. package/dist/sensor/sensor-characteristics.d.ts +137 -0
  287. package/dist/sensor/sensor-characteristics.js +115 -0
  288. package/dist/sensor/sensor-characteristics.js.map +1 -0
  289. package/dist/sensor/spatial-sample-reduction.js +3 -24
  290. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  291. package/dist/sensor/spatial-sampling-quadrature.js +1 -3
  292. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  293. package/dist/sensor/spatio-spectral-reduction.js +1 -18
  294. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  295. package/dist/sensor/spectral-coverage.d.ts +10 -1
  296. package/dist/sensor/spectral-coverage.js +1 -1
  297. package/dist/sensor/spectral-coverage.js.map +1 -1
  298. package/dist/sensor/spectral-quadrature.js +3 -41
  299. package/dist/sensor/spectral-quadrature.js.map +1 -1
  300. package/dist/sensor/spectral-response.js +1 -47
  301. package/dist/sensor/spectral-response.js.map +1 -1
  302. package/dist/sensor/temporal-photo-signal.d.ts +3 -0
  303. package/dist/sensor/temporal-photo-signal.js +5 -2
  304. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  305. package/dist/stabilization/camera-shake.js +1 -6
  306. package/dist/stabilization/camera-shake.js.map +1 -1
  307. package/dist/stabilization/system.d.ts +9 -0
  308. package/dist/stabilization/system.js +7 -86
  309. package/dist/stabilization/system.js.map +1 -1
  310. package/docs/AGENT_GUIDE.md +5 -0
  311. package/docs/API_REFERENCE.md +116 -3
  312. package/docs/QUICK_START.md +178 -14
  313. package/docs/USAGE.md +111 -3
  314. package/docs/api/capture-native-raw-dng.md +6 -0
  315. package/docs/api/core-version.md +1 -1
  316. package/docs/api/equipment-generic-lens-catalogue.md +7 -2
  317. package/docs/api/exports.json +203 -3
  318. package/docs/api/exposure-filtered-exposure-time.md +105 -0
  319. package/docs/api/facade-develop-joined-parts.md +32 -0
  320. package/docs/api/facade-display-view-gpu.md +5 -2
  321. package/docs/api/facade-fast-methods.md +91 -0
  322. package/docs/api/facade-simulate-capture.md +72 -16
  323. package/docs/api/facade-simulate-display-view.md +3 -2
  324. package/docs/api/optics-aperture-diameter.md +51 -0
  325. package/docs/api/optics-detail-limit.md +203 -0
  326. package/docs/api/optics-generic-nd-filter-presets.md +34 -0
  327. package/docs/api/optics-lens-psf-profile.md +3 -1
  328. package/docs/api/output-crop-to-match-focal-length.md +67 -0
  329. package/docs/api/output-developed-lens-corrections.md +12 -0
  330. package/docs/api/output-generic-lens-corrections.md +3 -10
  331. package/docs/api/output-lens-corrections.md +11 -1
  332. package/docs/api/output-print-size-blur-noise.md +115 -0
  333. package/docs/api/sensor-sensor-characteristics.md +105 -0
  334. package/llms.txt +5 -0
  335. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"exposure-mode-resolver.js","sourceRoot":"","sources":["../../src/exposure/exposure-mode-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Exposure modes: Manual, Aperture Priority, Shutter Priority, Program and Full Auto, each with\n * manual ISO or Auto ISO where the mode allows it.\n *\n * Every exposure mode applies its control policy to one shared relative exposure equation, with an\n * explicit reference anchor. Exposure compensation is already part of the frozen meter target. Manual\n * settings are never changed. Automatic settings snap to the declared setting grids, and the result\n * reports the signed leftover (residual) stops and any limits hit. A target with zero signal cannot\n * be used to make up an exposure.\n *\n * The relative meter target is normalized by an explicit reference exposure anchor. No ISO 100 or\n * other hidden absolute calibration is assumed.\n * @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support\n * limits.\n */\n\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport type {\n ResolvedGenericEquipmentExposureCapabilities,\n ResolvedNumericSettingGrid\n} from \"../equipment/exposure-capabilities.js\";\nimport {\n EXPOSURE_METER_TARGET_SCHEMA_VERSION,\n type ExposureMeterTarget\n} from \"./metering-target.js\";\nimport {\n parseExposureProgramLineProfile,\n type ExposureProgramLineProfile\n} from \"./program-line.js\";\nimport { rejectUnknownFields, requireInputKeys } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport const EXPOSURE_MODE_RESOLVER_VERSION =\n \"0.5.0\" as const;\n\nexport interface RelativeExposureControlAnchor {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n}\n\n/**\n * #505: the photographer's Auto ISO limits, a policy choice kept separate from what the body allows\n * (`capabilities.iso.autoIsoMinimum`/`autoIsoMaximum`, else the ISO range). Cameras let the\n * photographer cap Auto ISO, and some also raise its floor (for example the Nikon D850's \"maximum\n * sensitivity\", Fujifilm's per-preset default and maximum sensitivity, and Panasonic's separate upper\n * and lower Auto ISO limits; makers' manuals, see docs/USAGE.md).\n *\n * Both values are ISO settings: inside the body's Auto ISO range and, on a discrete ISO grid, one of\n * its values, with `minimum` at most `maximum`. Anything else fails with\n * `InvalidScientificInputError`; the engine never clips a limit silently. When a limit is strictly\n * inside the body's range and the ISO is held there, the limiting constraint is `user-iso-maximum` or\n * `user-iso-minimum`; a limit equal to the body's bound adds nothing, and the body's `iso-maximum` or\n * `iso-minimum` is reported.\n */\nexport interface AutoIsoLimits {\n /** The highest ISO Auto ISO may choose. */\n maximum: number;\n /** The lowest ISO Auto ISO may choose, and so its baseline. Default: the body's Auto ISO minimum. */\n minimum?: number;\n}\n\nexport type ManualIsoControl =\n | {\n kind: \"manual\";\n iso: number;\n }\n | {\n kind: \"automatic\";\n quantizationPolicy:\n \"nearest-log2-lower-on-tie\";\n /** #505: optional photographer-set Auto ISO limits inside the body's Auto ISO range. */\n autoIsoLimits?: AutoIsoLimits;\n };\n\nexport interface ResolveManualExposureModeInput {\n target: ExposureMeterTarget;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n manualShutterSeconds: number;\n isoControl: ManualIsoControl;\n}\n\nexport interface ResolveAperturePriorityExposureModeInput {\n target: ExposureMeterTarget;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n manualIso: number;\n shutterQuantizationPolicy:\n \"nearest-log2-shorter-on-tie\";\n}\n\nexport type ExposureTargetResidualState =\n | \"matched\"\n | \"under-target\"\n | \"over-target\"\n | \"target-unresolved\";\n\nexport type ExposureResolutionConstraint =\n | \"none\"\n | \"iso-minimum\"\n | \"iso-maximum\"\n | \"user-iso-minimum\"\n | \"user-iso-maximum\"\n | \"iso-grid-quantization\"\n | \"shutter-minimum\"\n | \"shutter-maximum\"\n | \"shutter-grid-quantization\"\n | \"aperture-widest\"\n | \"aperture-narrowest\"\n | \"aperture-grid-quantization\";\n\nexport type ExposureTargetResidual =\n | {\n status: \"resolved\";\n state:\n | \"matched\"\n | \"under-target\"\n | \"over-target\";\n targetExposureStops: number;\n achievedExposureStops: number;\n residualStops: number;\n limitingConstraint:\n ExposureResolutionConstraint;\n }\n | {\n status:\n \"target-unresolved\";\n state:\n \"target-unresolved\";\n reason:\n \"no-signal-target\";\n };\n\ninterface ManualExposureResolutionBase {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode: \"manual\";\n axisOwnership: {\n aperture: \"manual\";\n shutter: \"manual\";\n iso: \"manual\" | \"automatic\";\n };\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n capabilityProfiles: {\n bodyProfileId: string;\n bodyProfileVersion: string;\n lensProfileId: string;\n lensProfileVersion: string;\n };\n selectedFocalLengthMm: number;\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n manualShutterSeconds: number;\n apertureMutatedByResolver: false;\n shutterMutatedByResolver: false;\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n isoNoiseOrGainTopologyInferred: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n}\n\nexport type ManualExposureModeResolution =\n | (ManualExposureResolutionBase & {\n status: \"resolved\";\n isoControl: \"manual\";\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n idealIsoBeforeConstraints:\n null;\n isoResolution: {\n kind: \"manual-preserved\";\n quantized: false;\n clamped: false;\n };\n targetResidual:\n ExposureTargetResidual;\n })\n | (ManualExposureResolutionBase & {\n status: \"resolved\";\n isoControl: \"automatic\";\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n idealIsoBeforeConstraints:\n number;\n isoResolution: {\n kind:\n | \"continuous\"\n | \"discrete\";\n quantizationPolicy:\n \"nearest-log2-lower-on-tie\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n };\n targetResidual: {\n status: \"resolved\";\n state:\n | \"matched\"\n | \"under-target\"\n | \"over-target\";\n targetExposureStops: number;\n achievedExposureStops: number;\n residualStops: number;\n limitingConstraint:\n ExposureResolutionConstraint;\n };\n })\n | (ManualExposureResolutionBase & {\n status: \"blocked\";\n isoControl: \"automatic\";\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n };\n idealIsoBeforeConstraints:\n null;\n blocker:\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n | \"target-no-signal\";\n targetResidual: {\n status:\n \"target-unresolved\";\n state:\n \"target-unresolved\";\n reason:\n \"no-signal-target\" |\n \"auto-iso-unavailable\";\n };\n });\n\ninterface AperturePriorityExposureResolutionBase {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode: \"aperture-priority\";\n axisOwnership: {\n aperture: \"manual\";\n shutter: \"automatic\";\n iso: \"manual\";\n };\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n capabilityProfiles: {\n bodyProfileId: string;\n bodyProfileVersion: string;\n lensProfileId: string;\n lensProfileVersion: string;\n };\n selectedFocalLengthMm: number;\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n manualIso: number;\n apertureMutatedByResolver: false;\n isoMutatedByResolver: false;\n shutterResolvedByResolver: true;\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n isoNoiseOrGainTopologyInferred: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n}\n\nexport type AperturePriorityExposureModeResolution =\n | (AperturePriorityExposureResolutionBase & {\n status: \"resolved\";\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n idealShutterSecondsBeforeConstraints:\n number;\n shutterResolution: {\n kind:\n | \"continuous\"\n | \"discrete\";\n quantizationPolicy:\n \"nearest-log2-shorter-on-tie\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n };\n targetResidual: {\n status: \"resolved\";\n state:\n | \"matched\"\n | \"under-target\"\n | \"over-target\";\n targetExposureStops: number;\n achievedExposureStops: number;\n residualStops: number;\n limitingConstraint:\n ExposureResolutionConstraint;\n };\n })\n | (AperturePriorityExposureResolutionBase & {\n status: \"blocked\";\n resolvedSettings: {\n aperture: number;\n iso: number;\n };\n idealShutterSecondsBeforeConstraints:\n null;\n blocker: \"target-no-signal\";\n targetResidual: {\n status: \"target-unresolved\";\n state: \"target-unresolved\";\n reason: \"no-signal-target\";\n };\n });\n\nexport interface AutoIsoBaselinePolicy {\n isoBaseline: \"minimum-selectable\";\n isoQuantizationPolicy:\n \"nearest-log2-lower-on-tie\";\n /** #505: optional photographer-set Auto ISO limits inside the body's Auto ISO range. */\n autoIsoLimits?: AutoIsoLimits;\n}\n\nexport interface AperturePriorityAutoIsoPolicy\n extends AutoIsoBaselinePolicy {\n kind:\n \"minimum-iso-until-slowest-preferred-shutter\";\n slowestPreferredShutterSeconds:\n number;\n shutterSelectionPolicy:\n \"not-longer-than-target\";\n afterMaximumIso:\n | \"allow-slower-shutter\"\n | \"hold-preferred-shutter\";\n}\n\nexport interface ShutterPriorityAutoIsoPolicy\n extends AutoIsoBaselinePolicy {\n kind:\n \"minimum-iso-aperture-first\";\n apertureSelectionPolicy:\n \"not-wider-than-target\";\n}\n\nexport interface ResolveAperturePriorityAutoIsoExposureModeInput {\n target: ExposureMeterTarget;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n policy: AperturePriorityAutoIsoPolicy;\n}\n\nexport interface ResolveShutterPriorityExposureModeInput {\n target: ExposureMeterTarget;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n referenceExposure:\n RelativeExposureControlAnchor;\n manualShutterSeconds: number;\n isoControl:\n | {\n kind: \"manual\";\n iso: number;\n apertureQuantizationPolicy:\n \"nearest-log2-narrower-on-tie\";\n }\n | {\n kind: \"automatic\";\n policy:\n ShutterPriorityAutoIsoPolicy;\n };\n}\n\ninterface PriorityAutoIsoResolutionCommon {\n isoResolution: {\n kind:\n | \"continuous\"\n | \"discrete\";\n quantizationPolicy:\n \"nearest-log2-lower-on-tie\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n };\n idealIsoBeforeConstraints: number;\n}\n\nexport type AperturePriorityAutoIsoExposureModeResolution =\n | {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode:\n \"aperture-priority\";\n status: \"resolved\";\n axisOwnership: {\n aperture: \"manual\";\n shutter: \"automatic\";\n iso: \"automatic\";\n };\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n policy:\n AperturePriorityAutoIsoPolicy;\n baselineIso: number;\n idealShutterAtBaselineIsoSeconds:\n number;\n preferredShutterSeconds:\n number;\n afterMaximumIsoFallbackUsed:\n boolean;\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n shutterResolution: {\n kind:\n | \"continuous\"\n | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n selectionPolicy:\n | \"not-longer-than-target\"\n | \"nearest-log2-shorter-on-tie\";\n };\n isoResolution:\n PriorityAutoIsoResolutionCommon[\"isoResolution\"];\n idealIsoBeforeConstraints: number;\n targetResidual:\n Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n >;\n apertureMutatedByResolver: false;\n shutterResolvedByResolver: true;\n isoResolvedByResolver: true;\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n }\n | {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode:\n \"aperture-priority\";\n status: \"blocked\";\n axisOwnership: {\n aperture: \"manual\";\n shutter: \"automatic\";\n iso: \"automatic\";\n };\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n policy:\n AperturePriorityAutoIsoPolicy;\n resolvedSettings: {\n aperture: number;\n };\n blocker:\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n | \"target-no-signal\";\n targetResidual: {\n status:\n \"target-unresolved\";\n state:\n \"target-unresolved\";\n reason:\n | \"no-signal-target\"\n | \"auto-iso-unavailable\";\n };\n apertureMutatedByResolver: false;\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n };\n\ninterface ShutterPriorityResolutionBase {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode: \"shutter-priority\";\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n manualShutterSeconds: number;\n shutterMutatedByResolver: false;\n apertureResolvedByResolver: true;\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n}\n\nexport type ShutterPriorityExposureModeResolution =\n | (ShutterPriorityResolutionBase & {\n status: \"resolved\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"manual\";\n iso: \"manual\";\n };\n isoControl: \"manual\";\n manualIso: number;\n idealApertureBeforeConstraints:\n number;\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n apertureResolution: {\n kind:\n | \"continuous\"\n | \"discrete\";\n quantizationPolicy:\n \"nearest-log2-narrower-on-tie\";\n quantized: boolean;\n clamped:\n | false\n | \"widest\"\n | \"narrowest\";\n };\n targetResidual:\n Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n >;\n })\n | (ShutterPriorityResolutionBase & {\n status: \"resolved\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"manual\";\n iso: \"automatic\";\n };\n isoControl: \"automatic\";\n policy:\n ShutterPriorityAutoIsoPolicy;\n baselineIso: number;\n idealApertureAtBaselineIso:\n number;\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n apertureResolution: {\n kind:\n | \"continuous\"\n | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"widest\"\n | \"narrowest\";\n selectionPolicy:\n \"not-wider-than-target\";\n };\n idealIsoBeforeConstraints: number;\n isoResolution:\n PriorityAutoIsoResolutionCommon[\"isoResolution\"];\n targetResidual:\n Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n >;\n })\n | (ShutterPriorityResolutionBase & {\n status: \"blocked\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"manual\";\n iso: \"manual\" | \"automatic\";\n };\n isoControl: \"manual\" | \"automatic\";\n resolvedSettings: {\n shutterSeconds: number;\n };\n blocker:\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n | \"target-no-signal\";\n targetResidual: {\n status:\n \"target-unresolved\";\n state:\n \"target-unresolved\";\n reason:\n | \"no-signal-target\"\n | \"auto-iso-unavailable\";\n };\n });\n\nexport type ProgramAutoIsoControl =\n | {\n kind: \"manual\";\n iso: number;\n }\n | {\n kind: \"automatic\";\n isoBaseline:\n \"minimum-selectable\";\n isoQuantizationPolicy:\n \"nearest-log2-lower-on-tie\";\n /** #505: optional photographer-set Auto ISO limits inside the body's Auto ISO range. */\n autoIsoLimits?: AutoIsoLimits;\n /**\n * #504: optionally hold the program line's shutter at or faster than a slowest preferred shutter\n * before the ISO rises (for example from `estimateAutoIsoSlowestShutter()`). Absent, the program line\n * is followed as before.\n */\n slowestPreferredShutter?: ProgramSlowestPreferredShutterPolicy;\n };\n\n/**\n * #504: Program + Auto ISO's slowest preferred shutter, the two-axis policy of Aperture Priority + Auto\n * ISO applied to the program line. When the line asks for a longer shutter than\n * `slowestPreferredShutterSeconds`, the shutter is held there (snapped, never longer) with the line's\n * aperture, and Auto ISO makes up the rest. At the Auto ISO maximum, `afterMaximumIso` decides:\n * `\"allow-slower-shutter\"` lengthens the shutter toward the target, but never past the program line's\n * own shutter; `\"hold-preferred-shutter\"` keeps it and leaves the exposure under target.\n */\nexport interface ProgramSlowestPreferredShutterPolicy {\n slowestPreferredShutterSeconds: number;\n afterMaximumIso:\n | \"allow-slower-shutter\"\n | \"hold-preferred-shutter\";\n}\n\nexport interface ResolveProgramAutoExposureModeInput {\n target: ExposureMeterTarget;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n referenceExposure:\n RelativeExposureControlAnchor;\n programLine:\n ExposureProgramLineProfile;\n isoControl:\n ProgramAutoIsoControl;\n}\n\nexport interface FullAutoExposurePolicy {\n kind:\n \"generic-program-line-minimum-iso\";\n programLine:\n ExposureProgramLineProfile;\n isoBaseline:\n \"minimum-selectable\";\n isoQuantizationPolicy:\n \"nearest-log2-lower-on-tie\";\n /** #505: optional photographer-set Auto ISO limits inside the body's Auto ISO range. */\n autoIsoLimits?: AutoIsoLimits;\n}\n\nexport interface ResolveFullAutoExposureModeInput {\n target: ExposureMeterTarget;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n referenceExposure:\n RelativeExposureControlAnchor;\n policy:\n FullAutoExposurePolicy;\n}\n\nexport interface ProgramLineSelectionDiagnostics {\n profileId: string;\n profileVersion: string;\n requestedOpticalExposureStopsFromReference:\n number;\n selectedOpticalExposureStopsFromReference:\n number;\n position:\n | \"within-line\"\n | \"below-line\"\n | \"above-line\";\n interpolationPhase:\n number | null;\n idealAperture: number;\n idealShutterSeconds: number;\n resolvedAperture: number;\n resolvedShutterSeconds: number;\n apertureQuantized: boolean;\n shutterQuantized: boolean;\n apertureClamped:\n | false\n | \"widest\"\n | \"narrowest\";\n shutterClamped:\n | false\n | \"minimum\"\n | \"maximum\";\n}\n\ninterface ProgramExposureResolutionBase {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n programLineSelection:\n ProgramLineSelectionDiagnostics;\n apertureResolvedByResolver: true;\n shutterResolvedByResolver: true;\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n}\n\nexport type ProgramAutoExposureModeResolution =\n | (ProgramExposureResolutionBase & {\n mode: \"program-auto\";\n status: \"resolved\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"automatic\";\n iso: \"manual\";\n };\n isoControl: \"manual\";\n manualIso: number;\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n targetResidual:\n Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n >;\n })\n | (ProgramExposureResolutionBase & {\n mode: \"program-auto\";\n status: \"resolved\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"automatic\";\n iso: \"automatic\";\n };\n isoControl: \"automatic\";\n baselineIso: number;\n idealIsoBeforeConstraints:\n number;\n isoResolution:\n PriorityAutoIsoResolutionCommon[\"isoResolution\"];\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n targetResidual:\n Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n >;\n /**\n * #504: present only with `isoControl.slowestPreferredShutter`. `applied` is true when the line's\n * shutter was longer than the slowest preferred shutter and was held; `afterMaximumIsoFallbackUsed`\n * when the slower-shutter fallback ran at the Auto ISO maximum. `programLineSelection` stays the\n * line's own selection.\n */\n slowestPreferredShutter?: ProgramSlowestPreferredShutterPolicy & {\n applied: boolean;\n afterMaximumIsoFallbackUsed: boolean;\n };\n })\n | {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode: \"program-auto\";\n status: \"blocked\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"automatic\";\n iso: \"manual\" | \"automatic\";\n };\n isoControl: \"manual\" | \"automatic\";\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n blocker:\n | \"target-no-signal\"\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\";\n targetResidual: {\n status: \"target-unresolved\";\n state: \"target-unresolved\";\n reason:\n | \"no-signal-target\"\n | \"auto-iso-unavailable\";\n };\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n };\n\nexport type FullAutoExposureModeResolution =\n | (ProgramExposureResolutionBase & {\n mode:\n \"full-auto-exposure\";\n status: \"resolved\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"automatic\";\n iso: \"automatic\";\n };\n policy:\n FullAutoExposurePolicy;\n baselineIso: number;\n idealIsoBeforeConstraints:\n number;\n isoResolution:\n PriorityAutoIsoResolutionCommon[\"isoResolution\"];\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n targetResidual:\n Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n >;\n autofocusResolved: false;\n whiteBalanceResolved: false;\n flashResolved: false;\n driveResolved: false;\n sceneRecognitionResolved: false;\n stabilizationPolicyResolved:\n false;\n })\n | {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode:\n \"full-auto-exposure\";\n status: \"blocked\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"automatic\";\n iso: \"automatic\";\n };\n policy:\n FullAutoExposurePolicy;\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n blocker:\n | \"target-no-signal\"\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\";\n targetResidual: {\n status: \"target-unresolved\";\n state: \"target-unresolved\";\n reason:\n | \"no-signal-target\"\n | \"auto-iso-unavailable\";\n };\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n autofocusResolved: false;\n whiteBalanceResolved: false;\n flashResolved: false;\n driveResolved: false;\n sceneRecognitionResolved: false;\n stabilizationPolicyResolved:\n false;\n };\n\nfunction requireRecord(\n value: unknown,\n path: string\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n return value as UnknownRecord;\n}\n\nfunction requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value <= 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must be finite and greater than zero.\"\n );\n }\n return value;\n}\n\nfunction settingEquals(\n left: number,\n right: number\n): boolean {\n const scale = Math.max(\n Math.abs(left),\n Math.abs(right),\n 1\n );\n return (\n Math.abs(left - right) <=\n Number.EPSILON * 32 * scale\n );\n}\n\nfunction validateSettingAgainstGrid(\n value: number,\n minimum: number,\n maximum: number,\n grid: ResolvedNumericSettingGrid,\n path: string\n): void {\n if (\n value < minimum ||\n value > maximum\n ) {\n throw new InvalidScientificInputError(\n path +\n \" lies outside the resolved equipment capability range.\"\n );\n }\n\n if (\n grid.kind ===\n \"discrete-values\" &&\n !grid.values.some(\n (candidate) =>\n settingEquals(\n candidate,\n value\n )\n )\n ) {\n throw new InvalidScientificInputError(\n path +\n \" is not present in the resolved discrete equipment setting grid.\"\n );\n }\n}\n\nfunction validateTarget(\n value: unknown\n): ExposureMeterTarget {\n const record = requireRecord(\n value,\n \"target\"\n );\n if (\n record.schemaVersion !==\n EXPOSURE_METER_TARGET_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'target.schemaVersion must be \"' +\n EXPOSURE_METER_TARGET_SCHEMA_VERSION +\n '\".'\n );\n }\n if (\n record.scientificStatus !==\n \"approximation\" ||\n record.inputDomain !==\n \"relative-pre-exposure-linear-signal\" ||\n record.intendedConsumer !==\n \"exposure-mode-resolver\" ||\n record.automaticExposureResolved !==\n false ||\n record.sourceMeterSnapshotPreserved !==\n true\n ) {\n throw new InvalidScientificInputError(\n \"target does not satisfy the exposure-mode resolver boundary.\"\n );\n }\n\n const targetId = record.targetId;\n if (\n typeof targetId !== \"string\" ||\n targetId.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n \"target.targetId must be a non-empty string.\"\n );\n }\n\n requireRecord(\n record.sourceMeterSnapshot,\n \"target.sourceMeterSnapshot\"\n );\n\n if (\n record.status === \"resolved\"\n ) {\n requirePositiveFinite(\n record\n .requiredExposureScaleToTarget,\n \"target.requiredExposureScaleToTarget\"\n );\n if (\n typeof record\n .exposureOffsetStopsToTarget !==\n \"number\" ||\n !Number.isFinite(\n record\n .exposureOffsetStopsToTarget\n )\n ) {\n throw new InvalidScientificInputError(\n \"target.exposureOffsetStopsToTarget must be finite.\"\n );\n }\n } else if (\n record.status !== \"no-signal\"\n ) {\n throw new InvalidConfigurationError(\n \"target.status is invalid.\"\n );\n }\n\n return value as ExposureMeterTarget;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction validateResolvedGrid(\n grid: ResolvedNumericSettingGrid,\n minimum: number,\n maximum: number,\n path: string\n): void {\n requireRecord(grid, path);\n if (\n grid.kind ===\n \"continuous-within-range\"\n ) {\n return;\n }\n if (\n grid.kind !== \"discrete-values\" ||\n !Array.isArray(grid.values) ||\n grid.values.length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a continuous grid or a non-empty discrete-values grid.\"\n );\n }\n\n let previous =\n Number.NEGATIVE_INFINITY;\n for (\n let index = 0;\n index < grid.values.length;\n index += 1\n ) {\n const value =\n requirePositiveFinite(\n grid.values[index],\n path +\n \".values[\" +\n index +\n \"]\"\n );\n if (value <= previous) {\n throw new InvalidScientificInputError(\n path +\n \".values must be strictly increasing with no duplicates.\"\n );\n }\n if (\n value < minimum ||\n value > maximum\n ) {\n throw new InvalidScientificInputError(\n path +\n \".values must stay inside the resolved capability range.\"\n );\n }\n previous = value;\n }\n}\n\nfunction validateCapabilities(\n value:\n ResolvedGenericEquipmentExposureCapabilities\n): void {\n requireRecord(value, \"capabilities\");\n for (const key of [\"aperture\", \"shutter\", \"iso\", \"bodyProfile\", \"lensProfile\"] as const) {\n requireRecord(value[key], \"capabilities.\" + key);\n }\n if (\n value.schemaVersion !== \"0.1.0\" ||\n value.scientificStatus !==\n \"approximation\"\n ) {\n throw new InvalidScientificInputError(\n \"capabilities do not satisfy the generic equipment exposure-capability boundary.\"\n );\n }\n requirePositiveFinite(\n value.selectedFocalLengthMm,\n \"capabilities.selectedFocalLengthMm\"\n );\n requirePositiveFinite(\n value.aperture\n .widestAvailableFNumber,\n \"capabilities.aperture.widestAvailableFNumber\"\n );\n requirePositiveFinite(\n value.aperture\n .narrowestAvailableFNumber,\n \"capabilities.aperture.narrowestAvailableFNumber\"\n );\n requirePositiveFinite(\n value.shutter.minimumSeconds,\n \"capabilities.shutter.minimumSeconds\"\n );\n requirePositiveFinite(\n value.shutter.maximumSeconds,\n \"capabilities.shutter.maximumSeconds\"\n );\n requirePositiveFinite(\n value.iso.minimum,\n \"capabilities.iso.minimum\"\n );\n requirePositiveFinite(\n value.iso.maximum,\n \"capabilities.iso.maximum\"\n );\n\n if (\n value.aperture\n .widestAvailableFNumber >\n value.aperture\n .narrowestAvailableFNumber\n ) {\n throw new InvalidScientificInputError(\n \"capabilities aperture range is invalid.\"\n );\n }\n if (\n value.shutter.minimumSeconds >\n value.shutter.maximumSeconds\n ) {\n throw new InvalidScientificInputError(\n \"capabilities shutter range is invalid.\"\n );\n }\n if (\n value.iso.minimum >\n value.iso.maximum\n ) {\n throw new InvalidScientificInputError(\n \"capabilities ISO range is invalid.\"\n );\n }\n\n const hasAutoMinimum =\n value.iso.autoIsoMinimum !==\n undefined;\n const hasAutoMaximum =\n value.iso.autoIsoMaximum !==\n undefined;\n if (\n hasAutoMinimum !==\n hasAutoMaximum\n ) {\n throw new InvalidScientificInputError(\n \"capabilities Auto ISO bounds must provide both minimum and maximum or neither.\"\n );\n }\n if (\n hasAutoMinimum &&\n hasAutoMaximum\n ) {\n const autoMinimum =\n requirePositiveFinite(\n value.iso.autoIsoMinimum,\n \"capabilities.iso.autoIsoMinimum\"\n );\n const autoMaximum =\n requirePositiveFinite(\n value.iso.autoIsoMaximum,\n \"capabilities.iso.autoIsoMaximum\"\n );\n if (\n value.iso\n .autoIsoAvailability !==\n \"supported\" ||\n autoMinimum >\n autoMaximum ||\n autoMinimum <\n value.iso.minimum ||\n autoMaximum >\n value.iso.maximum\n ) {\n throw new InvalidScientificInputError(\n \"capabilities Auto ISO bounds must be ordered, inside the manual ISO range, and used only when Auto ISO is supported.\"\n );\n }\n }\n\n requireNonEmptyString(\n value.bodyProfile.profileId,\n \"capabilities.bodyProfile.profileId\"\n );\n requireNonEmptyString(\n value.bodyProfile.profileVersion,\n \"capabilities.bodyProfile.profileVersion\"\n );\n requireNonEmptyString(\n value.lensProfile.profileId,\n \"capabilities.lensProfile.profileId\"\n );\n requireNonEmptyString(\n value.lensProfile.profileVersion,\n \"capabilities.lensProfile.profileVersion\"\n );\n\n if (\n value.iso\n .autoIsoAvailability !==\n \"supported\" &&\n value.iso\n .autoIsoAvailability !==\n \"unsupported\" &&\n value.iso\n .autoIsoAvailability !==\n \"unknown\"\n ) {\n throw new InvalidConfigurationError(\n \"capabilities.iso.autoIsoAvailability is invalid.\"\n );\n }\n\n validateResolvedGrid(\n value.aperture.settingGrid,\n value.aperture\n .widestAvailableFNumber,\n value.aperture\n .narrowestAvailableFNumber,\n \"capabilities.aperture.settingGrid\"\n );\n validateResolvedGrid(\n value.shutter.settingGrid,\n value.shutter.minimumSeconds,\n value.shutter.maximumSeconds,\n \"capabilities.shutter.settingGrid\"\n );\n validateResolvedGrid(\n value.iso.settingGrid,\n value.iso.minimum,\n value.iso.maximum,\n \"capabilities.iso.settingGrid\"\n );\n}\n\nfunction validateReferenceExposure(\n reference:\n RelativeExposureControlAnchor,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): RelativeExposureControlAnchor {\n requireRecord(reference, \"referenceExposure\");\n const aperture =\n requirePositiveFinite(\n reference.aperture,\n \"referenceExposure.aperture\"\n );\n const shutterSeconds =\n requirePositiveFinite(\n reference.shutterSeconds,\n \"referenceExposure.shutterSeconds\"\n );\n const iso =\n requirePositiveFinite(\n reference.iso,\n \"referenceExposure.iso\"\n );\n\n validateSettingAgainstGrid(\n aperture,\n capabilities.aperture\n .widestAvailableFNumber,\n capabilities.aperture\n .narrowestAvailableFNumber,\n capabilities.aperture\n .settingGrid,\n \"referenceExposure.aperture\"\n );\n validateSettingAgainstGrid(\n shutterSeconds,\n capabilities.shutter\n .minimumSeconds,\n capabilities.shutter\n .maximumSeconds,\n capabilities.shutter\n .settingGrid,\n \"referenceExposure.shutterSeconds\"\n );\n validateSettingAgainstGrid(\n iso,\n capabilities.iso.minimum,\n capabilities.iso.maximum,\n capabilities.iso.settingGrid,\n \"referenceExposure.iso\"\n );\n\n return {\n aperture,\n shutterSeconds,\n iso\n };\n}\n\nfunction opticalExposureFactor(\n aperture: number,\n shutterSeconds: number,\n reference:\n RelativeExposureControlAnchor\n): number {\n const current =\n shutterSeconds /\n (aperture * aperture);\n const referenceOptical =\n reference.shutterSeconds /\n (reference.aperture *\n reference.aperture);\n const factor =\n current /\n referenceOptical;\n if (\n !Number.isFinite(factor) ||\n factor <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Optical exposure factor must remain finite and greater than zero.\"\n );\n }\n return factor;\n}\n\nfunction targetResidual(\n target:\n Extract<\n ExposureMeterTarget,\n { status: \"resolved\" }\n >,\n achievedScale: number,\n limitingConstraint:\n ExposureResolutionConstraint\n): Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n>;\nfunction targetResidual(\n target:\n ExposureMeterTarget,\n achievedScale: number,\n limitingConstraint:\n ExposureResolutionConstraint\n): ExposureTargetResidual;\nfunction targetResidual(\n target:\n ExposureMeterTarget,\n achievedScale: number,\n limitingConstraint:\n ExposureResolutionConstraint\n): ExposureTargetResidual {\n if (\n target.status ===\n \"no-signal\"\n ) {\n return {\n status:\n \"target-unresolved\",\n state:\n \"target-unresolved\",\n reason: \"no-signal-target\"\n };\n }\n\n const targetScale =\n target\n .requiredExposureScaleToTarget;\n const targetStops =\n target\n .exposureOffsetStopsToTarget;\n const achievedStops =\n Math.log2(achievedScale);\n const residualStops =\n Math.log2(\n targetScale /\n achievedScale\n );\n\n if (\n !Number.isFinite(\n achievedStops\n ) ||\n !Number.isFinite(\n residualStops\n )\n ) {\n throw new InvalidScientificInputError(\n \"Exposure target residual must remain finite.\"\n );\n }\n\n const toleranceStops =\n 1e-12;\n const state =\n Math.abs(residualStops) <=\n toleranceStops\n ? \"matched\"\n : residualStops > 0\n ? \"under-target\"\n : \"over-target\";\n\n return {\n status: \"resolved\",\n state,\n targetExposureStops:\n targetStops,\n achievedExposureStops:\n achievedStops,\n residualStops,\n limitingConstraint\n };\n}\n\nfunction nearestDiscreteIso(\n idealIso: number,\n values: readonly number[]\n): {\n iso: number;\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const first = values[0]!;\n const last =\n values[values.length - 1]!;\n\n if (idealIso < first) {\n return {\n iso: first,\n quantized: true,\n clamped: \"minimum\",\n limitingConstraint:\n \"iso-minimum\"\n };\n }\n if (idealIso > last) {\n return {\n iso: last,\n quantized: true,\n clamped: \"maximum\",\n limitingConstraint:\n \"iso-maximum\"\n };\n }\n\n let selected = first;\n let selectedDistance =\n Math.abs(\n Math.log2(\n idealIso / first\n )\n );\n\n for (\n let index = 1;\n index < values.length;\n index += 1\n ) {\n const candidate =\n values[index]!;\n const distance =\n Math.abs(\n Math.log2(\n idealIso /\n candidate\n )\n );\n if (\n distance <\n selectedDistance -\n 1e-15 ||\n (Math.abs(\n distance -\n selectedDistance\n ) <= 1e-15 &&\n candidate < selected)\n ) {\n selected = candidate;\n selectedDistance =\n distance;\n }\n }\n\n const quantized =\n !settingEquals(\n selected,\n idealIso\n );\n\n return {\n iso: selected,\n quantized,\n clamped: false,\n limitingConstraint:\n quantized\n ? \"iso-grid-quantization\"\n : \"none\"\n };\n}\n\ninterface EffectiveAutoIsoBounds {\n minimum: number;\n maximum: number;\n minimumConstraint:\n | \"iso-minimum\"\n | \"user-iso-minimum\";\n maximumConstraint:\n | \"iso-maximum\"\n | \"user-iso-maximum\";\n}\n\nfunction bodyAutoIsoBounds(\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): {\n minimum: number;\n maximum: number;\n} {\n return {\n minimum:\n capabilities.iso\n .autoIsoMinimum ??\n capabilities.iso.minimum,\n maximum:\n capabilities.iso\n .autoIsoMaximum ??\n capabilities.iso.maximum\n };\n}\n\n/**\n * #505: the Auto ISO range a resolver chooses in: the body's Auto ISO range, narrowed by the\n * photographer's validated limits when given. A limit outside the body's range, or off a discrete\n * ISO grid, fails; it is never clipped.\n */\nfunction autoIsoBounds(\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities,\n limits?: unknown,\n path = \"autoIsoLimits\"\n): EffectiveAutoIsoBounds {\n const body =\n bodyAutoIsoBounds(capabilities);\n if (limits === undefined) {\n return {\n ...body,\n minimumConstraint:\n \"iso-minimum\",\n maximumConstraint:\n \"iso-maximum\"\n };\n }\n const record = requireRecord(\n limits,\n path\n );\n rejectUnknownFields(\n record,\n [\"maximum\", \"minimum\"],\n path\n );\n const check = (\n value: unknown,\n field: string\n ): number => {\n const iso =\n requirePositiveFinite(\n value,\n path + \".\" + field\n );\n if (\n iso < body.minimum ||\n iso > body.maximum\n ) {\n throw new InvalidScientificInputError(\n path +\n \".\" +\n field +\n \" (ISO \" +\n iso +\n \") lies outside the body's Auto ISO range, ISO \" +\n body.minimum +\n \" to \" +\n body.maximum +\n \".\"\n );\n }\n const grid =\n capabilities.iso.settingGrid;\n if (\n grid.kind ===\n \"discrete-values\" &&\n !grid.values.some(\n (candidate) =>\n settingEquals(\n candidate,\n iso\n )\n )\n ) {\n throw new InvalidScientificInputError(\n path +\n \".\" +\n field +\n \" (ISO \" +\n iso +\n \") is not a selectable ISO of the resolved discrete ISO grid.\"\n );\n }\n return iso;\n };\n const maximum = check(\n record.maximum,\n \"maximum\"\n );\n const minimum =\n record.minimum === undefined\n ? body.minimum\n : check(\n record.minimum,\n \"minimum\"\n );\n if (minimum > maximum) {\n throw new InvalidScientificInputError(\n path +\n \".minimum must not exceed \" +\n path +\n \".maximum.\"\n );\n }\n return {\n minimum,\n maximum,\n minimumConstraint:\n minimum > body.minimum &&\n !settingEquals(\n minimum,\n body.minimum\n )\n ? \"user-iso-minimum\"\n : \"iso-minimum\",\n maximumConstraint:\n maximum < body.maximum &&\n !settingEquals(\n maximum,\n body.maximum\n )\n ? \"user-iso-maximum\"\n : \"iso-maximum\"\n };\n}\n\nfunction resolveAutomaticIso(\n idealIso: number,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities,\n bounds: EffectiveAutoIsoBounds\n): {\n iso: number;\n kind:\n | \"continuous\"\n | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const grid =\n capabilities.iso.settingGrid;\n\n if (\n grid.kind ===\n \"discrete-values\"\n ) {\n const autoValues =\n grid.values.filter(\n (value) =>\n value >= bounds.minimum &&\n value <= bounds.maximum\n );\n if (\n autoValues.length === 0\n ) {\n throw new InvalidScientificInputError(\n \"Auto ISO bounds contain no selectable values from the resolved ISO grid.\"\n );\n }\n const discrete =\n nearestDiscreteIso(\n idealIso,\n autoValues\n );\n return {\n ...discrete,\n limitingConstraint:\n discrete.clamped ===\n \"minimum\"\n ? bounds.minimumConstraint\n : discrete.clamped ===\n \"maximum\"\n ? bounds.maximumConstraint\n : discrete.limitingConstraint,\n kind: \"discrete\"\n };\n }\n\n if (\n idealIso <\n bounds.minimum\n ) {\n return {\n iso:\n bounds.minimum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"minimum\",\n limitingConstraint:\n bounds.minimumConstraint\n };\n }\n if (\n idealIso >\n bounds.maximum\n ) {\n return {\n iso:\n bounds.maximum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"maximum\",\n limitingConstraint:\n bounds.maximumConstraint\n };\n }\n\n return {\n iso: idealIso,\n kind: \"continuous\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n}\n\nfunction nearestDiscreteShutter(\n idealShutterSeconds: number,\n values: readonly number[]\n): {\n shutterSeconds: number;\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const first = values[0]!;\n const last =\n values[values.length - 1]!;\n\n if (idealShutterSeconds < first) {\n return {\n shutterSeconds: first,\n quantized: true,\n clamped: \"minimum\",\n limitingConstraint:\n \"shutter-minimum\"\n };\n }\n if (idealShutterSeconds > last) {\n return {\n shutterSeconds: last,\n quantized: true,\n clamped: \"maximum\",\n limitingConstraint:\n \"shutter-maximum\"\n };\n }\n\n let selected = first;\n let selectedDistance =\n Math.abs(\n Math.log2(\n idealShutterSeconds /\n first\n )\n );\n\n for (\n let index = 1;\n index < values.length;\n index += 1\n ) {\n const candidate =\n values[index]!;\n const distance =\n Math.abs(\n Math.log2(\n idealShutterSeconds /\n candidate\n )\n );\n if (\n distance <\n selectedDistance -\n 1e-15 ||\n (Math.abs(\n distance -\n selectedDistance\n ) <= 1e-15 &&\n candidate < selected)\n ) {\n selected = candidate;\n selectedDistance =\n distance;\n }\n }\n\n const quantized =\n !settingEquals(\n selected,\n idealShutterSeconds\n );\n\n return {\n shutterSeconds: selected,\n quantized,\n clamped: false,\n limitingConstraint:\n quantized\n ? \"shutter-grid-quantization\"\n : \"none\"\n };\n}\n\nfunction resolveAutomaticShutter(\n idealShutterSeconds: number,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): {\n shutterSeconds: number;\n kind:\n | \"continuous\"\n | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const grid =\n capabilities.shutter.settingGrid;\n\n if (\n grid.kind ===\n \"discrete-values\"\n ) {\n const discrete =\n nearestDiscreteShutter(\n idealShutterSeconds,\n grid.values\n );\n return {\n ...discrete,\n kind: \"discrete\"\n };\n }\n\n if (\n idealShutterSeconds <\n capabilities.shutter\n .minimumSeconds\n ) {\n return {\n shutterSeconds:\n capabilities.shutter\n .minimumSeconds,\n kind: \"continuous\",\n quantized: false,\n clamped: \"minimum\",\n limitingConstraint:\n \"shutter-minimum\"\n };\n }\n if (\n idealShutterSeconds >\n capabilities.shutter\n .maximumSeconds\n ) {\n return {\n shutterSeconds:\n capabilities.shutter\n .maximumSeconds,\n kind: \"continuous\",\n quantized: false,\n clamped: \"maximum\",\n limitingConstraint:\n \"shutter-maximum\"\n };\n }\n\n return {\n shutterSeconds:\n idealShutterSeconds,\n kind: \"continuous\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n}\n\nfunction minimumSelectableIso(\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities,\n bounds: EffectiveAutoIsoBounds\n): number {\n const grid =\n capabilities.iso.settingGrid;\n if (\n grid.kind ===\n \"continuous-within-range\"\n ) {\n return bounds.minimum;\n }\n const first =\n grid.values.find(\n (value) =>\n value >= bounds.minimum &&\n value <= bounds.maximum\n );\n if (first === undefined) {\n throw new InvalidScientificInputError(\n \"Auto ISO bounds contain no selectable values from the resolved ISO grid.\"\n );\n }\n return first;\n}\n\nfunction selectShutterNotLongerThanTarget(\n targetSeconds: number,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): {\n shutterSeconds: number;\n kind: \"continuous\" | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const minimum =\n capabilities.shutter.minimumSeconds;\n const maximum =\n capabilities.shutter.maximumSeconds;\n const grid =\n capabilities.shutter.settingGrid;\n\n if (grid.kind === \"continuous-within-range\") {\n if (targetSeconds < minimum) {\n return {\n shutterSeconds: minimum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"minimum\",\n limitingConstraint:\n \"shutter-minimum\"\n };\n }\n if (targetSeconds > maximum) {\n return {\n shutterSeconds: maximum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"maximum\",\n limitingConstraint:\n \"shutter-maximum\"\n };\n }\n return {\n shutterSeconds: targetSeconds,\n kind: \"continuous\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n }\n\n const values = grid.values;\n const first = values[0]!;\n const last = values[values.length - 1]!;\n\n // A grid value within settingEquals tolerance of the target counts as an\n // exact match. Floating-point error in the computed target must not push the\n // choice one grid step shorter (#272).\n const exactMatch =\n values.find(\n (candidate) =>\n settingEquals(\n candidate,\n targetSeconds\n )\n );\n if (exactMatch !== undefined) {\n return {\n shutterSeconds: exactMatch,\n kind: \"discrete\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n }\n\n if (targetSeconds < first) {\n return {\n shutterSeconds: first,\n kind: \"discrete\",\n quantized: true,\n clamped: \"minimum\",\n limitingConstraint:\n \"shutter-minimum\"\n };\n }\n if (targetSeconds > last) {\n return {\n shutterSeconds: last,\n kind: \"discrete\",\n quantized: true,\n clamped: \"maximum\",\n limitingConstraint:\n \"shutter-maximum\"\n };\n }\n\n let selected = first;\n for (const candidate of values) {\n if (candidate > targetSeconds) {\n break;\n }\n selected = candidate;\n }\n\n const quantized =\n !settingEquals(\n selected,\n targetSeconds\n );\n return {\n shutterSeconds: selected,\n kind: \"discrete\",\n quantized,\n clamped: false,\n limitingConstraint:\n quantized\n ? \"shutter-grid-quantization\"\n : \"none\"\n };\n}\n\nfunction nearestDiscreteAperture(\n idealFNumber: number,\n values: readonly number[]\n): {\n aperture: number;\n quantized: boolean;\n clamped:\n | false\n | \"widest\"\n | \"narrowest\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const first = values[0]!;\n const last =\n values[values.length - 1]!;\n\n if (idealFNumber < first) {\n return {\n aperture: first,\n quantized: true,\n clamped: \"widest\",\n limitingConstraint:\n \"aperture-widest\"\n };\n }\n if (idealFNumber > last) {\n return {\n aperture: last,\n quantized: true,\n clamped: \"narrowest\",\n limitingConstraint:\n \"aperture-narrowest\"\n };\n }\n\n let selected = first;\n let selectedDistance =\n Math.abs(\n Math.log2(\n idealFNumber /\n first\n )\n );\n\n for (\n let index = 1;\n index < values.length;\n index += 1\n ) {\n const candidate =\n values[index]!;\n const distance =\n Math.abs(\n Math.log2(\n idealFNumber /\n candidate\n )\n );\n if (\n distance <\n selectedDistance -\n 1e-15 ||\n (Math.abs(\n distance -\n selectedDistance\n ) <= 1e-15 &&\n candidate > selected)\n ) {\n selected = candidate;\n selectedDistance =\n distance;\n }\n }\n\n const quantized =\n !settingEquals(\n selected,\n idealFNumber\n );\n\n return {\n aperture: selected,\n quantized,\n clamped: false,\n limitingConstraint:\n quantized\n ? \"aperture-grid-quantization\"\n : \"none\"\n };\n}\n\nfunction resolveAutomaticAperture(\n idealFNumber: number,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): {\n aperture: number;\n kind: \"continuous\" | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"widest\"\n | \"narrowest\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const minimum =\n capabilities.aperture\n .widestAvailableFNumber;\n const maximum =\n capabilities.aperture\n .narrowestAvailableFNumber;\n const grid =\n capabilities.aperture.settingGrid;\n\n if (grid.kind === \"discrete-values\") {\n return {\n ...nearestDiscreteAperture(\n idealFNumber,\n grid.values\n ),\n kind: \"discrete\"\n };\n }\n\n if (idealFNumber < minimum) {\n return {\n aperture: minimum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"widest\",\n limitingConstraint:\n \"aperture-widest\"\n };\n }\n if (idealFNumber > maximum) {\n return {\n aperture: maximum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"narrowest\",\n limitingConstraint:\n \"aperture-narrowest\"\n };\n }\n\n return {\n aperture: idealFNumber,\n kind: \"continuous\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n}\n\nfunction selectApertureNotWiderThanTarget(\n idealFNumber: number,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): {\n aperture: number;\n kind: \"continuous\" | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"widest\"\n | \"narrowest\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const minimum =\n capabilities.aperture\n .widestAvailableFNumber;\n const maximum =\n capabilities.aperture\n .narrowestAvailableFNumber;\n const grid =\n capabilities.aperture.settingGrid;\n\n if (grid.kind === \"continuous-within-range\") {\n if (idealFNumber < minimum) {\n return {\n aperture: minimum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"widest\",\n limitingConstraint:\n \"aperture-widest\"\n };\n }\n if (idealFNumber > maximum) {\n return {\n aperture: maximum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"narrowest\",\n limitingConstraint:\n \"aperture-narrowest\"\n };\n }\n return {\n aperture: idealFNumber,\n kind: \"continuous\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n }\n\n const values = grid.values;\n const first = values[0]!;\n const last = values[values.length - 1]!;\n\n // A grid value within settingEquals tolerance of the ideal counts as an\n // exact match. Floating-point error in the computed ideal must not push the\n // choice one grid step narrower (#272).\n const exactMatch =\n values.find(\n (candidate) =>\n settingEquals(\n candidate,\n idealFNumber\n )\n );\n if (exactMatch !== undefined) {\n return {\n aperture: exactMatch,\n kind: \"discrete\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n }\n\n if (idealFNumber < first) {\n return {\n aperture: first,\n kind: \"discrete\",\n quantized: true,\n clamped: \"widest\",\n limitingConstraint:\n \"aperture-widest\"\n };\n }\n if (idealFNumber > last) {\n return {\n aperture: last,\n kind: \"discrete\",\n quantized: true,\n clamped: \"narrowest\",\n limitingConstraint:\n \"aperture-narrowest\"\n };\n }\n\n const selected =\n values.find(\n (candidate) =>\n candidate >= idealFNumber\n ) ?? last;\n const quantized =\n !settingEquals(\n selected,\n idealFNumber\n );\n\n return {\n aperture: selected,\n kind: \"discrete\",\n quantized,\n clamped: false,\n limitingConstraint:\n quantized\n ? \"aperture-grid-quantization\"\n : \"none\"\n };\n}\n\nfunction idealApertureForTarget(\n targetScale: number,\n shutterSeconds: number,\n iso: number,\n reference:\n RelativeExposureControlAnchor\n): number {\n const numerator =\n reference.aperture *\n reference.aperture *\n (shutterSeconds /\n reference.shutterSeconds) *\n (iso /\n reference.iso);\n const squared =\n numerator / targetScale;\n const aperture =\n Math.sqrt(squared);\n if (\n !Number.isFinite(aperture) ||\n aperture <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Ideal automatic aperture must remain finite and greater than zero.\"\n );\n }\n return aperture;\n}\n\nfunction validateProgramLineForResolution(\n value: ExposureProgramLineProfile,\n referenceExposure:\n RelativeExposureControlAnchor,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): ExposureProgramLineProfile {\n const profile =\n parseExposureProgramLineProfile(\n value\n );\n const toleranceStops = 1e-9;\n\n for (const node of profile.nodes) {\n if (\n node.aperture <\n capabilities.aperture\n .widestAvailableFNumber ||\n node.aperture >\n capabilities.aperture\n .narrowestAvailableFNumber\n ) {\n throw new InvalidScientificInputError(\n \"Program-line aperture lies outside the resolved equipment capability range.\"\n );\n }\n if (\n node.shutterSeconds <\n capabilities.shutter\n .minimumSeconds ||\n node.shutterSeconds >\n capabilities.shutter\n .maximumSeconds\n ) {\n throw new InvalidScientificInputError(\n \"Program-line shutter duration lies outside the resolved equipment capability range.\"\n );\n }\n\n const computedStops =\n Math.log2(\n opticalExposureFactor(\n node.aperture,\n node.shutterSeconds,\n referenceExposure\n )\n );\n if (\n !Number.isFinite(computedStops) ||\n Math.abs(\n computedStops -\n node\n .opticalExposureStopsFromReference\n ) > toleranceStops\n ) {\n throw new InvalidScientificInputError(\n \"Program-line node opticalExposureStopsFromReference is inconsistent with its aperture/shutter pair and the selected reference exposure.\"\n );\n }\n }\n\n return profile;\n}\n\nfunction selectProgramLineSettings(\n requestedOpticalStops: number,\n profile:\n ExposureProgramLineProfile,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): ProgramLineSelectionDiagnostics {\n if (!Number.isFinite(requestedOpticalStops)) {\n throw new InvalidScientificInputError(\n \"Requested program-line optical exposure stops must be finite.\"\n );\n }\n\n const first = profile.nodes[0]!;\n const last =\n profile.nodes[\n profile.nodes.length - 1\n ]!;\n\n let position:\n | \"within-line\"\n | \"below-line\"\n | \"above-line\";\n let selectedStops: number;\n let interpolationPhase:\n number | null;\n let idealAperture: number;\n let idealShutterSeconds: number;\n\n if (\n requestedOpticalStops <=\n first\n .opticalExposureStopsFromReference\n ) {\n position =\n requestedOpticalStops <\n first\n .opticalExposureStopsFromReference\n ? \"below-line\"\n : \"within-line\";\n selectedStops =\n first\n .opticalExposureStopsFromReference;\n interpolationPhase = null;\n idealAperture = first.aperture;\n idealShutterSeconds =\n first.shutterSeconds;\n } else if (\n requestedOpticalStops >=\n last\n .opticalExposureStopsFromReference\n ) {\n position =\n requestedOpticalStops >\n last\n .opticalExposureStopsFromReference\n ? \"above-line\"\n : \"within-line\";\n selectedStops =\n last\n .opticalExposureStopsFromReference;\n interpolationPhase = null;\n idealAperture = last.aperture;\n idealShutterSeconds =\n last.shutterSeconds;\n } else {\n position = \"within-line\";\n let left = first;\n let right = profile.nodes[1]!;\n\n for (\n let index = 1;\n index < profile.nodes.length;\n index += 1\n ) {\n const candidate =\n profile.nodes[index]!;\n if (\n requestedOpticalStops <=\n candidate\n .opticalExposureStopsFromReference\n ) {\n left =\n profile.nodes[index - 1]!;\n right = candidate;\n break;\n }\n }\n\n const span =\n right\n .opticalExposureStopsFromReference -\n left\n .opticalExposureStopsFromReference;\n const phase =\n (requestedOpticalStops -\n left\n .opticalExposureStopsFromReference) /\n span;\n interpolationPhase = phase;\n selectedStops =\n requestedOpticalStops;\n\n const logAperture =\n Math.log2(left.aperture) +\n phase *\n (Math.log2(right.aperture) -\n Math.log2(left.aperture));\n const logShutter =\n Math.log2(\n left.shutterSeconds\n ) +\n phase *\n (Math.log2(\n right.shutterSeconds\n ) -\n Math.log2(\n left.shutterSeconds\n ));\n\n idealAperture =\n Math.pow(2, logAperture);\n idealShutterSeconds =\n Math.pow(2, logShutter);\n }\n\n const aperture =\n resolveAutomaticAperture(\n idealAperture,\n capabilities\n );\n const shutter =\n resolveAutomaticShutter(\n idealShutterSeconds,\n capabilities\n );\n\n return {\n profileId: profile.profileId,\n profileVersion:\n profile.profileVersion,\n requestedOpticalExposureStopsFromReference:\n requestedOpticalStops,\n selectedOpticalExposureStopsFromReference:\n selectedStops,\n position,\n interpolationPhase,\n idealAperture,\n idealShutterSeconds,\n resolvedAperture:\n aperture.aperture,\n resolvedShutterSeconds:\n shutter.shutterSeconds,\n apertureQuantized:\n aperture.quantized,\n shutterQuantized:\n shutter.quantized,\n apertureClamped:\n aperture.clamped,\n shutterClamped:\n shutter.clamped\n };\n}\n\nfunction programLineResidualConstraint(\n selection:\n ProgramLineSelectionDiagnostics\n): ExposureResolutionConstraint {\n if (\n selection.apertureClamped ===\n \"widest\"\n ) {\n return \"aperture-widest\";\n }\n if (\n selection.apertureClamped ===\n \"narrowest\"\n ) {\n return \"aperture-narrowest\";\n }\n if (\n selection.shutterClamped ===\n \"minimum\"\n ) {\n return \"shutter-minimum\";\n }\n if (\n selection.shutterClamped ===\n \"maximum\"\n ) {\n return \"shutter-maximum\";\n }\n if (selection.apertureQuantized) {\n return \"aperture-grid-quantization\";\n }\n if (selection.shutterQuantized) {\n return \"shutter-grid-quantization\";\n }\n return \"none\";\n}\n\n/**\n * Resolves Manual exposure with either manual ISO or Auto ISO.\n *\n * The caller sets aperture and shutter; they are never changed. The relative\n * meter target is normalized by an explicit reference exposure anchor. No\n * ISO 100 or other hidden absolute calibration is assumed.\n */\nexport function resolveManualExposureMode(\n input:\n ResolveManualExposureModeInput\n): ManualExposureModeResolution {\n requireInputKeys(input, \"resolveManualExposureMode\", [\"target\", \"capabilities\", \"referenceExposure\", \"manualAperture\", \"manualShutterSeconds\", \"isoControl\"]);\n requireRecord(input.isoControl, \"isoControl\");\n const target =\n validateTarget(input.target);\n validateCapabilities(\n input.capabilities\n );\n\n const referenceExposure =\n validateReferenceExposure(\n input.referenceExposure,\n input.capabilities\n );\n\n const manualAperture =\n requirePositiveFinite(\n input.manualAperture,\n \"manualAperture\"\n );\n const manualShutterSeconds =\n requirePositiveFinite(\n input.manualShutterSeconds,\n \"manualShutterSeconds\"\n );\n\n validateSettingAgainstGrid(\n manualAperture,\n input.capabilities.aperture\n .widestAvailableFNumber,\n input.capabilities.aperture\n .narrowestAvailableFNumber,\n input.capabilities.aperture\n .settingGrid,\n \"manualAperture\"\n );\n validateSettingAgainstGrid(\n manualShutterSeconds,\n input.capabilities.shutter\n .minimumSeconds,\n input.capabilities.shutter\n .maximumSeconds,\n input.capabilities.shutter\n .settingGrid,\n \"manualShutterSeconds\"\n );\n\n const base:\n ManualExposureResolutionBase = {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"manual\",\n axisOwnership: {\n aperture: \"manual\",\n shutter: \"manual\",\n iso:\n input.isoControl.kind ===\n \"manual\"\n ? \"manual\"\n : \"automatic\"\n },\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n capabilityProfiles: {\n bodyProfileId:\n input.capabilities\n .bodyProfile.profileId,\n bodyProfileVersion:\n input.capabilities\n .bodyProfile.profileVersion,\n lensProfileId:\n input.capabilities\n .lensProfile.profileId,\n lensProfileVersion:\n input.capabilities\n .lensProfile.profileVersion\n },\n selectedFocalLengthMm:\n input.capabilities\n .selectedFocalLengthMm,\n referenceExposure,\n manualAperture,\n manualShutterSeconds,\n apertureMutatedByResolver: false,\n shutterMutatedByResolver: false,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n isoNoiseOrGainTopologyInferred:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n\n const opticalFactor =\n opticalExposureFactor(\n manualAperture,\n manualShutterSeconds,\n referenceExposure\n );\n\n if (\n input.isoControl.kind !==\n \"manual\" &&\n input.isoControl.kind !==\n \"automatic\"\n ) {\n throw new InvalidConfigurationError(\n \"isoControl.kind is invalid.\"\n );\n }\n if (\n input.isoControl.kind ===\n \"automatic\" &&\n input.isoControl\n .quantizationPolicy !==\n \"nearest-log2-lower-on-tie\"\n ) {\n throw new InvalidConfigurationError(\n 'isoControl.quantizationPolicy must be \"nearest-log2-lower-on-tie\".'\n );\n }\n const autoBounds =\n input.isoControl.kind ===\n \"automatic\"\n ? autoIsoBounds(\n input.capabilities,\n input.isoControl\n .autoIsoLimits,\n \"isoControl.autoIsoLimits\"\n )\n : undefined;\n\n if (\n input.isoControl.kind ===\n \"manual\"\n ) {\n const manualIso =\n requirePositiveFinite(\n input.isoControl.iso,\n \"isoControl.iso\"\n );\n validateSettingAgainstGrid(\n manualIso,\n input.capabilities.iso.minimum,\n input.capabilities.iso.maximum,\n input.capabilities.iso.settingGrid,\n \"isoControl.iso\"\n );\n\n const achievedScale =\n opticalFactor *\n (manualIso /\n referenceExposure.iso);\n\n return {\n ...base,\n status: \"resolved\",\n isoControl: \"manual\",\n resolvedSettings: {\n aperture:\n manualAperture,\n shutterSeconds:\n manualShutterSeconds,\n iso: manualIso\n },\n idealIsoBeforeConstraints:\n null,\n isoResolution: {\n kind:\n \"manual-preserved\",\n quantized: false,\n clamped: false\n },\n targetResidual:\n targetResidual(\n target,\n achievedScale,\n \"none\"\n )\n };\n }\n\n const availability =\n input.capabilities.iso\n .autoIsoAvailability;\n if (\n availability !== \"supported\"\n ) {\n return {\n ...base,\n status: \"blocked\",\n isoControl: \"automatic\",\n resolvedSettings: {\n aperture:\n manualAperture,\n shutterSeconds:\n manualShutterSeconds\n },\n idealIsoBeforeConstraints:\n null,\n blocker:\n availability ===\n \"unknown\"\n ? \"auto-iso-unknown\"\n : \"auto-iso-unsupported\",\n targetResidual: {\n status:\n \"target-unresolved\",\n state:\n \"target-unresolved\",\n reason:\n \"auto-iso-unavailable\"\n }\n };\n }\n\n if (target.status === \"no-signal\") {\n return {\n ...base,\n status: \"blocked\",\n isoControl: \"automatic\",\n resolvedSettings: {\n aperture:\n manualAperture,\n shutterSeconds:\n manualShutterSeconds\n },\n idealIsoBeforeConstraints:\n null,\n blocker:\n \"target-no-signal\",\n targetResidual: {\n status:\n \"target-unresolved\",\n state:\n \"target-unresolved\",\n reason: \"no-signal-target\"\n }\n };\n }\n\n const idealIso =\n referenceExposure.iso *\n (target\n .requiredExposureScaleToTarget /\n opticalFactor);\n\n if (\n !Number.isFinite(idealIso) ||\n idealIso <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Ideal Auto ISO must remain finite and greater than zero.\"\n );\n }\n\n const automatic =\n resolveAutomaticIso(\n idealIso,\n input.capabilities,\n autoBounds!\n );\n\n const achievedScale =\n opticalFactor *\n (automatic.iso /\n referenceExposure.iso);\n const residual =\n targetResidual(\n target,\n achievedScale,\n automatic\n .limitingConstraint\n );\n\n return {\n ...base,\n status: \"resolved\",\n isoControl: \"automatic\",\n resolvedSettings: {\n aperture:\n manualAperture,\n shutterSeconds:\n manualShutterSeconds,\n iso: automatic.iso\n },\n idealIsoBeforeConstraints:\n idealIso,\n isoResolution: {\n kind: automatic.kind,\n quantizationPolicy:\n input.isoControl\n .quantizationPolicy,\n quantized:\n automatic.quantized,\n clamped:\n automatic.clamped\n },\n targetResidual: residual\n };\n}\n\n/**\n * Resolves Aperture Priority with manual ISO.\n *\n * The caller sets aperture and ISO. Only the shutter is automatic. The target\n * and reference use the same relative exposure model as Manual + Auto ISO; no\n * new exposure equation is added for this mode.\n */\nexport function resolveAperturePriorityExposureMode(\n input:\n ResolveAperturePriorityExposureModeInput\n): AperturePriorityExposureModeResolution {\n requireInputKeys(input, \"resolveAperturePriorityExposureMode\", [\"target\", \"capabilities\", \"referenceExposure\", \"manualAperture\", \"manualIso\", \"shutterQuantizationPolicy\"]);\n const target =\n validateTarget(input.target);\n validateCapabilities(\n input.capabilities\n );\n\n const referenceExposure =\n validateReferenceExposure(\n input.referenceExposure,\n input.capabilities\n );\n\n const manualAperture =\n requirePositiveFinite(\n input.manualAperture,\n \"manualAperture\"\n );\n const manualIso =\n requirePositiveFinite(\n input.manualIso,\n \"manualIso\"\n );\n\n validateSettingAgainstGrid(\n manualAperture,\n input.capabilities.aperture\n .widestAvailableFNumber,\n input.capabilities.aperture\n .narrowestAvailableFNumber,\n input.capabilities.aperture\n .settingGrid,\n \"manualAperture\"\n );\n validateSettingAgainstGrid(\n manualIso,\n input.capabilities.iso.minimum,\n input.capabilities.iso.maximum,\n input.capabilities.iso.settingGrid,\n \"manualIso\"\n );\n\n if (\n input.shutterQuantizationPolicy !==\n \"nearest-log2-shorter-on-tie\"\n ) {\n throw new InvalidConfigurationError(\n 'shutterQuantizationPolicy must be \"nearest-log2-shorter-on-tie\".'\n );\n }\n\n const base:\n AperturePriorityExposureResolutionBase = {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"aperture-priority\",\n axisOwnership: {\n aperture: \"manual\",\n shutter: \"automatic\",\n iso: \"manual\"\n },\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n capabilityProfiles: {\n bodyProfileId:\n input.capabilities\n .bodyProfile.profileId,\n bodyProfileVersion:\n input.capabilities\n .bodyProfile.profileVersion,\n lensProfileId:\n input.capabilities\n .lensProfile.profileId,\n lensProfileVersion:\n input.capabilities\n .lensProfile.profileVersion\n },\n selectedFocalLengthMm:\n input.capabilities\n .selectedFocalLengthMm,\n referenceExposure,\n manualAperture,\n manualIso,\n apertureMutatedByResolver: false,\n isoMutatedByResolver: false,\n shutterResolvedByResolver: true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n isoNoiseOrGainTopologyInferred:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n\n if (target.status === \"no-signal\") {\n return {\n ...base,\n status: \"blocked\",\n resolvedSettings: {\n aperture:\n manualAperture,\n iso: manualIso\n },\n idealShutterSecondsBeforeConstraints:\n null,\n blocker: \"target-no-signal\",\n targetResidual: {\n status:\n \"target-unresolved\",\n state:\n \"target-unresolved\",\n reason: \"no-signal-target\"\n }\n };\n }\n\n const fixedAxisFactorAtReferenceShutter =\n opticalExposureFactor(\n manualAperture,\n referenceExposure\n .shutterSeconds,\n referenceExposure\n ) *\n (manualIso /\n referenceExposure.iso);\n\n if (\n !Number.isFinite(\n fixedAxisFactorAtReferenceShutter\n ) ||\n fixedAxisFactorAtReferenceShutter <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Aperture Priority fixed-axis exposure factor must remain finite and greater than zero.\"\n );\n }\n\n const idealShutterSeconds =\n referenceExposure\n .shutterSeconds *\n (target\n .requiredExposureScaleToTarget /\n fixedAxisFactorAtReferenceShutter);\n\n if (\n !Number.isFinite(\n idealShutterSeconds\n ) ||\n idealShutterSeconds <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Ideal automatic shutter duration must remain finite and greater than zero.\"\n );\n }\n\n const automatic =\n resolveAutomaticShutter(\n idealShutterSeconds,\n input.capabilities\n );\n\n const achievedScale =\n opticalExposureFactor(\n manualAperture,\n automatic.shutterSeconds,\n referenceExposure\n ) *\n (manualIso /\n referenceExposure.iso);\n\n const residual =\n targetResidual(\n target,\n achievedScale,\n automatic\n .limitingConstraint\n );\n\n return {\n ...base,\n status: \"resolved\",\n resolvedSettings: {\n aperture: manualAperture,\n shutterSeconds:\n automatic.shutterSeconds,\n iso: manualIso\n },\n idealShutterSecondsBeforeConstraints:\n idealShutterSeconds,\n shutterResolution: {\n kind: automatic.kind,\n quantizationPolicy:\n input\n .shutterQuantizationPolicy,\n quantized:\n automatic.quantized,\n clamped:\n automatic.clamped\n },\n targetResidual: residual\n };\n}\n\nfunction validateAutoIsoAvailability(\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): \"supported\" | \"unsupported\" | \"unknown\" {\n return capabilities.iso.autoIsoAvailability;\n}\n\nfunction buildPriorityAutoIsoBlocked<\n Mode extends\n | \"aperture-priority\"\n | \"shutter-priority\",\n Settings extends\n Record<string, number>\n>(\n mode: Mode,\n target: ExposureMeterTarget,\n referenceExposure:\n RelativeExposureControlAnchor,\n reason:\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n | \"target-no-signal\",\n resolvedSettings: Settings\n): {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode: Mode;\n status: \"blocked\";\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n resolvedSettings: Settings;\n blocker:\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n | \"target-no-signal\";\n targetResidual: {\n status: \"target-unresolved\";\n state: \"target-unresolved\";\n reason:\n | \"auto-iso-unavailable\"\n | \"no-signal-target\";\n };\n} {\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode,\n status: \"blocked\",\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n resolvedSettings,\n blocker: reason,\n targetResidual: {\n status: \"target-unresolved\",\n state: \"target-unresolved\",\n reason:\n reason === \"target-no-signal\"\n ? \"no-signal-target\"\n : \"auto-iso-unavailable\"\n }\n };\n}\n\n/**\n * Aperture Priority with Auto ISO. Keeps the aperture fixed, follows the declared minimum-shutter\n * policy, and uses Auto ISO (within its limits) to make up the rest of the exposure.\n *\n * Every exposure mode applies its control policy to one shared relative exposure equation, with an\n * explicit reference anchor. Exposure compensation is already part of the frozen meter target. Manual\n * settings are never changed. Automatic settings snap to the declared setting grids, and the result\n * reports the signed leftover (residual) stops and any limits hit. A target with zero signal cannot\n * be used to make up an exposure.\n * @param input - ResolveAperturePriorityAutoIsoExposureModeInput. See that type for coordinates, units and profile binding.\n * @returns AperturePriorityAutoIsoExposureModeResolution. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function resolveAperturePriorityAutoIsoExposureMode(\n input:\n ResolveAperturePriorityAutoIsoExposureModeInput\n): AperturePriorityAutoIsoExposureModeResolution {\n requireInputKeys(input, \"resolveAperturePriorityAutoIsoExposureMode\", [\"target\", \"capabilities\", \"referenceExposure\", \"manualAperture\", \"policy\"]);\n requireRecord(input.policy, \"policy\");\n const target = validateTarget(input.target);\n validateCapabilities(input.capabilities);\n const referenceExposure =\n validateReferenceExposure(\n input.referenceExposure,\n input.capabilities\n );\n const manualAperture =\n requirePositiveFinite(\n input.manualAperture,\n \"manualAperture\"\n );\n validateSettingAgainstGrid(\n manualAperture,\n input.capabilities.aperture\n .widestAvailableFNumber,\n input.capabilities.aperture\n .narrowestAvailableFNumber,\n input.capabilities.aperture\n .settingGrid,\n \"manualAperture\"\n );\n\n const policy = input.policy;\n if (\n policy.kind !==\n \"minimum-iso-until-slowest-preferred-shutter\" ||\n policy.isoBaseline !==\n \"minimum-selectable\" ||\n policy.isoQuantizationPolicy !==\n \"nearest-log2-lower-on-tie\" ||\n policy.shutterSelectionPolicy !==\n \"not-longer-than-target\" ||\n (policy.afterMaximumIso !==\n \"allow-slower-shutter\" &&\n policy.afterMaximumIso !==\n \"hold-preferred-shutter\")\n ) {\n throw new InvalidConfigurationError(\n \"Aperture Priority Auto ISO policy is invalid.\"\n );\n }\n\n const slowestPreferred =\n requirePositiveFinite(\n policy.slowestPreferredShutterSeconds,\n \"policy.slowestPreferredShutterSeconds\"\n );\n if (\n slowestPreferred <\n input.capabilities.shutter\n .minimumSeconds ||\n slowestPreferred >\n input.capabilities.shutter\n .maximumSeconds\n ) {\n throw new InvalidScientificInputError(\n \"policy.slowestPreferredShutterSeconds lies outside the resolved shutter capability range.\"\n );\n }\n const autoBounds =\n autoIsoBounds(\n input.capabilities,\n policy.autoIsoLimits,\n \"policy.autoIsoLimits\"\n );\n\n const availability =\n validateAutoIsoAvailability(\n input.capabilities\n );\n const commonBlocked = (\n blocker:\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n | \"target-no-signal\"\n ): AperturePriorityAutoIsoExposureModeResolution => {\n const raw = buildPriorityAutoIsoBlocked(\n \"aperture-priority\",\n target,\n referenceExposure,\n blocker,\n { aperture: manualAperture }\n );\n return {\n ...raw,\n axisOwnership: {\n aperture: \"manual\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n manualAperture,\n policy,\n apertureMutatedByResolver: false,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n };\n\n if (availability !== \"supported\") {\n return commonBlocked(\n availability === \"unknown\"\n ? \"auto-iso-unknown\"\n : \"auto-iso-unsupported\"\n );\n }\n if (target.status === \"no-signal\") {\n return commonBlocked(\n \"target-no-signal\"\n );\n }\n\n const baselineIso =\n minimumSelectableIso(\n input.capabilities,\n autoBounds\n );\n const factorAtReferenceShutter =\n opticalExposureFactor(\n manualAperture,\n referenceExposure\n .shutterSeconds,\n referenceExposure\n ) *\n (baselineIso /\n referenceExposure.iso);\n const idealAtBaseline =\n referenceExposure\n .shutterSeconds *\n (target\n .requiredExposureScaleToTarget /\n factorAtReferenceShutter);\n if (\n !Number.isFinite(idealAtBaseline) ||\n idealAtBaseline <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Ideal Aperture Priority shutter duration at baseline ISO must remain finite and greater than zero.\"\n );\n }\n\n const desiredPreferred =\n Math.min(\n idealAtBaseline,\n slowestPreferred\n );\n let shutter =\n selectShutterNotLongerThanTarget(\n desiredPreferred,\n input.capabilities\n );\n\n const isoPass =\n resolveManualExposureMode({\n target,\n capabilities:\n input.capabilities,\n referenceExposure,\n manualAperture,\n manualShutterSeconds:\n shutter.shutterSeconds,\n isoControl: {\n kind: \"automatic\",\n quantizationPolicy:\n policy.isoQuantizationPolicy,\n ...(policy.autoIsoLimits ===\n undefined\n ? {}\n : {\n autoIsoLimits:\n policy.autoIsoLimits\n })\n }\n });\n\n if (\n isoPass.status !== \"resolved\" ||\n isoPass.isoControl !== \"automatic\"\n ) {\n throw new InvalidScientificInputError(\n \"Aperture Priority Auto ISO could not resolve its ISO pass.\"\n );\n }\n\n let fallbackUsed = false;\n let shutterSelectionPolicy:\n | \"not-longer-than-target\"\n | \"nearest-log2-shorter-on-tie\" =\n \"not-longer-than-target\";\n\n if (\n isoPass.isoResolution.clamped ===\n \"maximum\" &&\n isoPass.targetResidual.state ===\n \"under-target\" &&\n policy.afterMaximumIso ===\n \"allow-slower-shutter\"\n ) {\n const maxIso =\n isoPass.resolvedSettings.iso;\n const fixedAtReference =\n opticalExposureFactor(\n manualAperture,\n referenceExposure\n .shutterSeconds,\n referenceExposure\n ) *\n (maxIso /\n referenceExposure.iso);\n const fallbackIdeal =\n referenceExposure\n .shutterSeconds *\n (target\n .requiredExposureScaleToTarget /\n fixedAtReference);\n shutter =\n resolveAutomaticShutter(\n fallbackIdeal,\n input.capabilities\n );\n fallbackUsed = true;\n shutterSelectionPolicy =\n \"nearest-log2-shorter-on-tie\";\n const achievedScale =\n opticalExposureFactor(\n manualAperture,\n shutter.shutterSeconds,\n referenceExposure\n ) *\n (maxIso /\n referenceExposure.iso);\n const residual =\n targetResidual(\n target,\n achievedScale,\n shutter.limitingConstraint\n );\n\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"aperture-priority\",\n status: \"resolved\",\n axisOwnership: {\n aperture: \"manual\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n manualAperture,\n policy,\n baselineIso,\n idealShutterAtBaselineIsoSeconds:\n idealAtBaseline,\n preferredShutterSeconds:\n desiredPreferred,\n afterMaximumIsoFallbackUsed:\n fallbackUsed,\n resolvedSettings: {\n aperture: manualAperture,\n shutterSeconds:\n shutter.shutterSeconds,\n iso: maxIso\n },\n shutterResolution: {\n kind: shutter.kind,\n quantized:\n shutter.quantized,\n clamped:\n shutter.clamped,\n selectionPolicy:\n shutterSelectionPolicy\n },\n idealIsoBeforeConstraints:\n isoPass\n .idealIsoBeforeConstraints,\n isoResolution:\n isoPass.isoResolution,\n targetResidual: residual,\n apertureMutatedByResolver: false,\n shutterResolvedByResolver: true,\n isoResolvedByResolver: true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n }\n\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"aperture-priority\",\n status: \"resolved\",\n axisOwnership: {\n aperture: \"manual\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n manualAperture,\n policy,\n baselineIso,\n idealShutterAtBaselineIsoSeconds:\n idealAtBaseline,\n preferredShutterSeconds:\n desiredPreferred,\n afterMaximumIsoFallbackUsed:\n fallbackUsed,\n resolvedSettings:\n isoPass.resolvedSettings,\n shutterResolution: {\n kind: shutter.kind,\n quantized:\n shutter.quantized,\n clamped:\n shutter.clamped,\n selectionPolicy:\n shutterSelectionPolicy\n },\n idealIsoBeforeConstraints:\n isoPass\n .idealIsoBeforeConstraints,\n isoResolution:\n isoPass.isoResolution,\n targetResidual:\n isoPass.targetResidual,\n apertureMutatedByResolver: false,\n shutterResolvedByResolver: true,\n isoResolvedByResolver: true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n}\n\n/**\n * Shutter Priority. Keeps the shutter fixed and chooses the aperture, plus optional Auto ISO, within\n * exactly what the equipment can do.\n *\n * Every exposure mode applies its control policy to one shared relative exposure equation, with an\n * explicit reference anchor. Exposure compensation is already part of the frozen meter target. Manual\n * settings are never changed. Automatic settings snap to the declared setting grids, and the result\n * reports the signed leftover (residual) stops and any limits hit. A target with zero signal cannot\n * be used to make up an exposure.\n * @param input - ResolveShutterPriorityExposureModeInput. See that type for coordinates, units and profile binding.\n * @returns ShutterPriorityExposureModeResolution. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function resolveShutterPriorityExposureMode(\n input:\n ResolveShutterPriorityExposureModeInput\n): ShutterPriorityExposureModeResolution {\n requireInputKeys(input, \"resolveShutterPriorityExposureMode\", [\"target\", \"capabilities\", \"referenceExposure\", \"manualShutterSeconds\", \"isoControl\"]);\n requireRecord(input.isoControl, \"isoControl\");\n const target = validateTarget(input.target);\n validateCapabilities(input.capabilities);\n const referenceExposure =\n validateReferenceExposure(\n input.referenceExposure,\n input.capabilities\n );\n const manualShutterSeconds =\n requirePositiveFinite(\n input.manualShutterSeconds,\n \"manualShutterSeconds\"\n );\n validateSettingAgainstGrid(\n manualShutterSeconds,\n input.capabilities.shutter\n .minimumSeconds,\n input.capabilities.shutter\n .maximumSeconds,\n input.capabilities.shutter\n .settingGrid,\n \"manualShutterSeconds\"\n );\n\n const base: ShutterPriorityResolutionBase = {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"shutter-priority\",\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n manualShutterSeconds,\n shutterMutatedByResolver: false,\n apertureResolvedByResolver: true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n\n if (input.isoControl.kind === \"manual\") {\n const manualIso =\n requirePositiveFinite(\n input.isoControl.iso,\n \"isoControl.iso\"\n );\n validateSettingAgainstGrid(\n manualIso,\n input.capabilities.iso.minimum,\n input.capabilities.iso.maximum,\n input.capabilities.iso.settingGrid,\n \"isoControl.iso\"\n );\n if (\n input.isoControl\n .apertureQuantizationPolicy !==\n \"nearest-log2-narrower-on-tie\"\n ) {\n throw new InvalidConfigurationError(\n 'isoControl.apertureQuantizationPolicy must be \"nearest-log2-narrower-on-tie\".'\n );\n }\n if (target.status === \"no-signal\") {\n return {\n ...base,\n status: \"blocked\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"manual\",\n iso: \"manual\"\n },\n isoControl: \"manual\",\n resolvedSettings: {\n shutterSeconds:\n manualShutterSeconds\n },\n blocker: \"target-no-signal\",\n targetResidual: {\n status: \"target-unresolved\",\n state: \"target-unresolved\",\n reason: \"no-signal-target\"\n }\n };\n }\n\n const idealAperture =\n idealApertureForTarget(\n target\n .requiredExposureScaleToTarget,\n manualShutterSeconds,\n manualIso,\n referenceExposure\n );\n const aperture =\n resolveAutomaticAperture(\n idealAperture,\n input.capabilities\n );\n const achievedScale =\n opticalExposureFactor(\n aperture.aperture,\n manualShutterSeconds,\n referenceExposure\n ) *\n (manualIso /\n referenceExposure.iso);\n\n return {\n ...base,\n status: \"resolved\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"manual\",\n iso: \"manual\"\n },\n isoControl: \"manual\",\n manualIso,\n idealApertureBeforeConstraints:\n idealAperture,\n resolvedSettings: {\n aperture:\n aperture.aperture,\n shutterSeconds:\n manualShutterSeconds,\n iso: manualIso\n },\n apertureResolution: {\n kind: aperture.kind,\n quantizationPolicy:\n input.isoControl\n .apertureQuantizationPolicy,\n quantized:\n aperture.quantized,\n clamped:\n aperture.clamped\n },\n targetResidual:\n targetResidual(\n target,\n achievedScale,\n aperture\n .limitingConstraint\n )\n };\n }\n\n if (\n input.isoControl.kind !==\n \"automatic\"\n ) {\n throw new InvalidConfigurationError(\n \"isoControl.kind is invalid for Shutter Priority.\"\n );\n }\n\n const policy =\n input.isoControl.policy;\n requireRecord(policy, \"isoControl.policy\");\n if (\n policy.kind !==\n \"minimum-iso-aperture-first\" ||\n policy.isoBaseline !==\n \"minimum-selectable\" ||\n policy.isoQuantizationPolicy !==\n \"nearest-log2-lower-on-tie\" ||\n policy.apertureSelectionPolicy !==\n \"not-wider-than-target\"\n ) {\n throw new InvalidConfigurationError(\n \"Shutter Priority Auto ISO policy is invalid.\"\n );\n }\n const autoBounds =\n autoIsoBounds(\n input.capabilities,\n policy.autoIsoLimits,\n \"isoControl.policy.autoIsoLimits\"\n );\n\n const availability =\n validateAutoIsoAvailability(\n input.capabilities\n );\n if (\n availability !== \"supported\"\n ) {\n const raw = buildPriorityAutoIsoBlocked(\n \"shutter-priority\",\n target,\n referenceExposure,\n availability === \"unknown\"\n ? \"auto-iso-unknown\"\n : \"auto-iso-unsupported\",\n {\n shutterSeconds:\n manualShutterSeconds\n }\n );\n return {\n ...base,\n ...raw,\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"manual\",\n iso: \"automatic\"\n },\n isoControl: \"automatic\"\n };\n }\n if (target.status === \"no-signal\") {\n return {\n ...base,\n status: \"blocked\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"manual\",\n iso: \"automatic\"\n },\n isoControl: \"automatic\",\n resolvedSettings: {\n shutterSeconds:\n manualShutterSeconds\n },\n blocker: \"target-no-signal\",\n targetResidual: {\n status: \"target-unresolved\",\n state: \"target-unresolved\",\n reason: \"no-signal-target\"\n }\n };\n }\n\n const baselineIso =\n minimumSelectableIso(\n input.capabilities,\n autoBounds\n );\n const idealAtBaseline =\n idealApertureForTarget(\n target\n .requiredExposureScaleToTarget,\n manualShutterSeconds,\n baselineIso,\n referenceExposure\n );\n const aperture =\n selectApertureNotWiderThanTarget(\n idealAtBaseline,\n input.capabilities\n );\n const isoPass =\n resolveManualExposureMode({\n target,\n capabilities:\n input.capabilities,\n referenceExposure,\n manualAperture:\n aperture.aperture,\n manualShutterSeconds,\n isoControl: {\n kind: \"automatic\",\n quantizationPolicy:\n policy.isoQuantizationPolicy,\n ...(policy.autoIsoLimits ===\n undefined\n ? {}\n : {\n autoIsoLimits:\n policy.autoIsoLimits\n })\n }\n });\n\n if (\n isoPass.status !== \"resolved\" ||\n isoPass.isoControl !== \"automatic\"\n ) {\n throw new InvalidScientificInputError(\n \"Shutter Priority Auto ISO could not resolve its ISO pass.\"\n );\n }\n\n return {\n ...base,\n status: \"resolved\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"manual\",\n iso: \"automatic\"\n },\n isoControl: \"automatic\",\n policy,\n baselineIso,\n idealApertureAtBaselineIso:\n idealAtBaseline,\n resolvedSettings:\n isoPass.resolvedSettings,\n apertureResolution: {\n kind: aperture.kind,\n quantized:\n aperture.quantized,\n clamped:\n aperture.clamped,\n selectionPolicy:\n policy.apertureSelectionPolicy\n },\n idealIsoBeforeConstraints:\n isoPass\n .idealIsoBeforeConstraints,\n isoResolution:\n isoPass.isoResolution,\n targetResidual:\n isoPass.targetResidual\n };\n}\n\n/**\n * Program auto exposure. Follows the declared generic program line in log2 exposure space, snaps\n * aperture and shutter to their grids, and can use Auto ISO for any exposure left over.\n *\n * Every exposure mode applies its control policy to one shared relative exposure equation, with an\n * explicit reference anchor. Exposure compensation is already part of the frozen meter target. Manual\n * settings are never changed. Automatic settings snap to the declared setting grids, and the result\n * reports the signed leftover (residual) stops and any limits hit. A target with zero signal cannot\n * be used to make up an exposure.\n * @param input - ResolveProgramAutoExposureModeInput. See that type for coordinates, units and profile binding.\n * @returns ProgramAutoExposureModeResolution. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function resolveProgramAutoExposureMode(\n input:\n ResolveProgramAutoExposureModeInput\n): ProgramAutoExposureModeResolution {\n requireInputKeys(input, \"resolveProgramAutoExposureMode\", [\"target\", \"capabilities\", \"referenceExposure\", \"programLine\", \"isoControl\"]);\n requireRecord(input.isoControl, \"isoControl\");\n const target =\n validateTarget(input.target);\n validateCapabilities(\n input.capabilities\n );\n const referenceExposure =\n validateReferenceExposure(\n input.referenceExposure,\n input.capabilities\n );\n const programLine =\n validateProgramLineForResolution(\n input.programLine,\n referenceExposure,\n input.capabilities\n );\n\n if (\n input.isoControl.kind !==\n \"manual\" &&\n input.isoControl.kind !==\n \"automatic\"\n ) {\n throw new InvalidConfigurationError(\n \"isoControl.kind is invalid for Program Auto.\"\n );\n }\n\n if (target.status === \"no-signal\") {\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"program-auto\",\n status: \"blocked\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"automatic\",\n iso:\n input.isoControl.kind ===\n \"manual\"\n ? \"manual\"\n : \"automatic\"\n },\n isoControl:\n input.isoControl.kind,\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n blocker: \"target-no-signal\",\n targetResidual: {\n status: \"target-unresolved\",\n state: \"target-unresolved\",\n reason: \"no-signal-target\"\n },\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n }\n\n if (\n input.isoControl.kind ===\n \"manual\"\n ) {\n const manualIso =\n requirePositiveFinite(\n input.isoControl.iso,\n \"isoControl.iso\"\n );\n validateSettingAgainstGrid(\n manualIso,\n input.capabilities.iso.minimum,\n input.capabilities.iso.maximum,\n input.capabilities.iso.settingGrid,\n \"isoControl.iso\"\n );\n\n const requestedOpticalStops =\n target\n .exposureOffsetStopsToTarget -\n Math.log2(\n manualIso /\n referenceExposure.iso\n );\n const selection =\n selectProgramLineSettings(\n requestedOpticalStops,\n programLine,\n input.capabilities\n );\n const achievedScale =\n opticalExposureFactor(\n selection.resolvedAperture,\n selection\n .resolvedShutterSeconds,\n referenceExposure\n ) *\n (manualIso /\n referenceExposure.iso);\n\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"program-auto\",\n status: \"resolved\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"automatic\",\n iso: \"manual\"\n },\n isoControl: \"manual\",\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n programLineSelection:\n selection,\n apertureResolvedByResolver:\n true,\n shutterResolvedByResolver:\n true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false,\n manualIso,\n resolvedSettings: {\n aperture:\n selection\n .resolvedAperture,\n shutterSeconds:\n selection\n .resolvedShutterSeconds,\n iso: manualIso\n },\n targetResidual:\n targetResidual(\n target,\n achievedScale,\n programLineResidualConstraint(\n selection\n )\n )\n };\n }\n\n if (\n input.isoControl\n .isoBaseline !==\n \"minimum-selectable\" ||\n input.isoControl\n .isoQuantizationPolicy !==\n \"nearest-log2-lower-on-tie\"\n ) {\n throw new InvalidConfigurationError(\n \"Program Auto ISO policy is invalid.\"\n );\n }\n const autoBounds =\n autoIsoBounds(\n input.capabilities,\n input.isoControl\n .autoIsoLimits,\n \"isoControl.autoIsoLimits\"\n );\n const holdPolicy =\n validateProgramSlowestPreferredShutter(\n input.isoControl\n .slowestPreferredShutter,\n input.capabilities\n );\n\n const availability =\n validateAutoIsoAvailability(\n input.capabilities\n );\n if (availability !== \"supported\") {\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"program-auto\",\n status: \"blocked\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n isoControl: \"automatic\",\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n blocker:\n availability === \"unknown\"\n ? \"auto-iso-unknown\"\n : \"auto-iso-unsupported\",\n targetResidual: {\n status: \"target-unresolved\",\n state: \"target-unresolved\",\n reason:\n \"auto-iso-unavailable\"\n },\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n }\n\n const baselineIso =\n minimumSelectableIso(\n input.capabilities,\n autoBounds\n );\n const requestedOpticalStops =\n target\n .exposureOffsetStopsToTarget -\n Math.log2(\n baselineIso /\n referenceExposure.iso\n );\n const selection =\n selectProgramLineSettings(\n requestedOpticalStops,\n programLine,\n input.capabilities\n );\n const isoControl =\n input.isoControl;\n const autoIsoPass = (\n shutterSeconds: number\n ): Extract<\n ManualExposureModeResolution,\n { status: \"resolved\"; isoControl: \"automatic\" }\n > => {\n const pass =\n resolveManualExposureMode({\n target,\n capabilities:\n input.capabilities,\n referenceExposure,\n manualAperture:\n selection.resolvedAperture,\n manualShutterSeconds:\n shutterSeconds,\n isoControl: {\n kind: \"automatic\",\n quantizationPolicy:\n isoControl\n .isoQuantizationPolicy,\n ...(isoControl\n .autoIsoLimits ===\n undefined\n ? {}\n : {\n autoIsoLimits:\n isoControl\n .autoIsoLimits\n })\n }\n });\n if (\n pass.status !== \"resolved\" ||\n pass.isoControl !== \"automatic\"\n ) {\n throw new InvalidScientificInputError(\n \"Program Auto could not resolve its Auto ISO pass.\"\n );\n }\n return pass;\n };\n\n // #504: hold the line's shutter at or faster than the slowest preferred shutter before the ISO rises.\n const lineShutterSeconds =\n selection\n .resolvedShutterSeconds;\n const holdApplied =\n holdPolicy !== undefined &&\n lineShutterSeconds >\n holdPolicy\n .slowestPreferredShutterSeconds &&\n !settingEquals(\n lineShutterSeconds,\n holdPolicy\n .slowestPreferredShutterSeconds\n );\n const heldShutterSeconds =\n holdApplied\n ? selectShutterNotLongerThanTarget(\n holdPolicy!\n .slowestPreferredShutterSeconds,\n input.capabilities\n ).shutterSeconds\n : lineShutterSeconds;\n const isoPass =\n autoIsoPass(\n heldShutterSeconds\n );\n let resolvedSettings =\n isoPass.resolvedSettings;\n let residual =\n isoPass.targetResidual;\n let fallbackUsed = false;\n if (\n holdApplied &&\n holdPolicy!.afterMaximumIso ===\n \"allow-slower-shutter\" &&\n isoPass.isoResolution.clamped ===\n \"maximum\" &&\n isoPass.targetResidual.state ===\n \"under-target\"\n ) {\n // At the Auto ISO maximum the shutter may lengthen toward the target, but not past the line's own shutter.\n const maxIso =\n isoPass.resolvedSettings.iso;\n const atReference =\n opticalExposureFactor(\n selection.resolvedAperture,\n referenceExposure\n .shutterSeconds,\n referenceExposure\n ) *\n (maxIso /\n referenceExposure.iso);\n const idealShutter =\n referenceExposure\n .shutterSeconds *\n (target\n .requiredExposureScaleToTarget /\n atReference);\n const beyondLine =\n idealShutter >=\n lineShutterSeconds;\n const shutter =\n beyondLine\n ? {\n shutterSeconds:\n lineShutterSeconds,\n limitingConstraint:\n isoPass.targetResidual\n .limitingConstraint\n }\n : resolveAutomaticShutter(\n idealShutter,\n input.capabilities\n );\n fallbackUsed = true;\n resolvedSettings = {\n aperture:\n selection.resolvedAperture,\n shutterSeconds:\n shutter.shutterSeconds,\n iso: maxIso\n };\n residual =\n targetResidual(\n target,\n opticalExposureFactor(\n selection.resolvedAperture,\n shutter.shutterSeconds,\n referenceExposure\n ) *\n (maxIso /\n referenceExposure.iso),\n shutter.limitingConstraint\n );\n }\n\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"program-auto\",\n status: \"resolved\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n isoControl: \"automatic\",\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n programLineSelection:\n selection,\n apertureResolvedByResolver: true,\n shutterResolvedByResolver: true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n flashPolicyApplied: false,\n safetyShiftApplied: false,\n baselineIso,\n idealIsoBeforeConstraints:\n isoPass\n .idealIsoBeforeConstraints,\n isoResolution:\n isoPass.isoResolution,\n resolvedSettings,\n targetResidual: residual,\n ...(holdPolicy === undefined\n ? {}\n : {\n slowestPreferredShutter: {\n ...holdPolicy,\n applied: holdApplied,\n afterMaximumIsoFallbackUsed:\n fallbackUsed\n }\n })\n };\n}\n\nfunction validateProgramSlowestPreferredShutter(\n value: unknown,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): ProgramSlowestPreferredShutterPolicy | undefined {\n if (value === undefined) {\n return undefined;\n }\n const record = requireRecord(\n value,\n \"isoControl.slowestPreferredShutter\"\n );\n rejectUnknownFields(\n record,\n [\"slowestPreferredShutterSeconds\", \"afterMaximumIso\"],\n \"isoControl.slowestPreferredShutter\"\n );\n if (\n record.afterMaximumIso !==\n \"allow-slower-shutter\" &&\n record.afterMaximumIso !==\n \"hold-preferred-shutter\"\n ) {\n throw new InvalidConfigurationError(\n 'isoControl.slowestPreferredShutter.afterMaximumIso must be \"allow-slower-shutter\" or \"hold-preferred-shutter\".'\n );\n }\n const seconds =\n requirePositiveFinite(\n record.slowestPreferredShutterSeconds,\n \"isoControl.slowestPreferredShutter.slowestPreferredShutterSeconds\"\n );\n if (\n seconds <\n capabilities.shutter\n .minimumSeconds ||\n seconds >\n capabilities.shutter\n .maximumSeconds\n ) {\n throw new InvalidScientificInputError(\n \"isoControl.slowestPreferredShutter.slowestPreferredShutterSeconds lies outside the resolved shutter capability range.\"\n );\n }\n return {\n slowestPreferredShutterSeconds:\n seconds,\n afterMaximumIso:\n record.afterMaximumIso\n };\n}\n\n/**\n * Full Auto. Chooses aperture, shutter and ISO under an explicit generic Full Auto exposure policy.\n * Autofocus, white balance (WB), flash, drive mode and scene recognition are not resolved.\n *\n * Every exposure mode applies its control policy to one shared relative exposure equation, with an\n * explicit reference anchor. Exposure compensation is already part of the frozen meter target. Manual\n * settings are never changed. Automatic settings snap to the declared setting grids, and the result\n * reports the signed leftover (residual) stops and any limits hit. A target with zero signal cannot\n * be used to make up an exposure.\n * @param input - ResolveFullAutoExposureModeInput. See that type for coordinates, units and profile binding.\n * @returns FullAutoExposureModeResolution. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function resolveFullAutoExposureMode(\n input:\n ResolveFullAutoExposureModeInput\n): FullAutoExposureModeResolution {\n requireInputKeys(input, \"resolveFullAutoExposureMode\", [\"target\", \"capabilities\", \"referenceExposure\", \"policy\"]);\n requireRecord(input.policy, \"policy\");\n const target =\n validateTarget(input.target);\n validateCapabilities(\n input.capabilities\n );\n const referenceExposure =\n validateReferenceExposure(\n input.referenceExposure,\n input.capabilities\n );\n\n if (\n input.policy.kind !==\n \"generic-program-line-minimum-iso\" ||\n input.policy.isoBaseline !==\n \"minimum-selectable\" ||\n input.policy\n .isoQuantizationPolicy !==\n \"nearest-log2-lower-on-tie\"\n ) {\n throw new InvalidConfigurationError(\n \"Full Auto exposure policy is invalid.\"\n );\n }\n const autoBounds =\n autoIsoBounds(\n input.capabilities,\n input.policy.autoIsoLimits,\n \"policy.autoIsoLimits\"\n );\n\n const programLine =\n validateProgramLineForResolution(\n input.policy.programLine,\n referenceExposure,\n input.capabilities\n );\n\n const blocked = (\n blocker:\n | \"target-no-signal\"\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n ): FullAutoExposureModeResolution => ({\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode:\n \"full-auto-exposure\",\n status: \"blocked\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n policy: input.policy,\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n blocker,\n targetResidual: {\n status: \"target-unresolved\",\n state: \"target-unresolved\",\n reason:\n blocker ===\n \"target-no-signal\"\n ? \"no-signal-target\"\n : \"auto-iso-unavailable\"\n },\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false,\n autofocusResolved: false,\n whiteBalanceResolved: false,\n flashResolved: false,\n driveResolved: false,\n sceneRecognitionResolved:\n false,\n stabilizationPolicyResolved:\n false\n });\n\n if (target.status === \"no-signal\") {\n return blocked(\n \"target-no-signal\"\n );\n }\n\n const availability =\n validateAutoIsoAvailability(\n input.capabilities\n );\n if (availability !== \"supported\") {\n return blocked(\n availability === \"unknown\"\n ? \"auto-iso-unknown\"\n : \"auto-iso-unsupported\"\n );\n }\n\n const baselineIso =\n minimumSelectableIso(\n input.capabilities,\n autoBounds\n );\n const requestedOpticalStops =\n target\n .exposureOffsetStopsToTarget -\n Math.log2(\n baselineIso /\n referenceExposure.iso\n );\n const selection =\n selectProgramLineSettings(\n requestedOpticalStops,\n programLine,\n input.capabilities\n );\n const isoPass =\n resolveManualExposureMode({\n target,\n capabilities:\n input.capabilities,\n referenceExposure,\n manualAperture:\n selection.resolvedAperture,\n manualShutterSeconds:\n selection\n .resolvedShutterSeconds,\n isoControl: {\n kind: \"automatic\",\n quantizationPolicy:\n input.policy\n .isoQuantizationPolicy,\n ...(input.policy\n .autoIsoLimits ===\n undefined\n ? {}\n : {\n autoIsoLimits:\n input.policy\n .autoIsoLimits\n })\n }\n });\n\n if (\n isoPass.status !== \"resolved\" ||\n isoPass.isoControl !== \"automatic\"\n ) {\n throw new InvalidScientificInputError(\n \"Full Auto exposure could not resolve its Auto ISO pass.\"\n );\n }\n\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode:\n \"full-auto-exposure\",\n status: \"resolved\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n policy: input.policy,\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n programLineSelection:\n selection,\n apertureResolvedByResolver: true,\n shutterResolvedByResolver: true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false,\n baselineIso,\n idealIsoBeforeConstraints:\n isoPass\n .idealIsoBeforeConstraints,\n isoResolution:\n isoPass.isoResolution,\n resolvedSettings:\n isoPass.resolvedSettings,\n targetResidual:\n isoPass.targetResidual,\n autofocusResolved: false,\n whiteBalanceResolved: false,\n flashResolved: false,\n driveResolved: false,\n sceneRecognitionResolved:\n false,\n stabilizationPolicyResolved:\n false\n };\n}\n\n"]}
1
+ {"version":3,"file":"exposure-mode-resolver.js","sourceRoot":"","sources":["../../src/exposure/exposure-mode-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Exposure modes: Manual, Aperture Priority, Shutter Priority, Program and Full Auto, each with\n * manual ISO or Auto ISO where the mode allows it.\n *\n * Every exposure mode applies its control policy to one shared relative exposure equation, with an\n * explicit reference anchor. Exposure compensation is already part of the frozen meter target. Manual\n * settings are never changed. Automatic settings snap to the declared setting grids, and the result\n * reports the signed leftover (residual) stops and any limits hit. A target with zero signal cannot\n * be used to make up an exposure.\n *\n * The relative meter target is normalized by an explicit reference exposure anchor. No ISO 100 or\n * other hidden absolute calibration is assumed.\n * @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support\n * limits.\n */\n\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport type {\n ResolvedGenericEquipmentExposureCapabilities,\n ResolvedNumericSettingGrid\n} from \"../equipment/exposure-capabilities.js\";\nimport {\n EXPOSURE_METER_TARGET_SCHEMA_VERSION,\n type ExposureMeterTarget\n} from \"./metering-target.js\";\nimport {\n parseExposureProgramLineProfile,\n type ExposureProgramLineProfile\n} from \"./program-line.js\";\nimport { rejectUnknownFields, requireInputKeys, requireTrimmedConfigString as requireNonEmptyString, requireInputPositiveFinite as requirePositiveFinite } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport const EXPOSURE_MODE_RESOLVER_VERSION =\n \"0.5.0\" as const;\n\nexport interface RelativeExposureControlAnchor {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n}\n\n/**\n * #505: the photographer's Auto ISO limits, a policy choice kept separate from what the body allows\n * (`capabilities.iso.autoIsoMinimum`/`autoIsoMaximum`, else the ISO range). Cameras let the\n * photographer cap Auto ISO, and some also raise its floor (for example the Nikon D850's \"maximum\n * sensitivity\", Fujifilm's per-preset default and maximum sensitivity, and Panasonic's separate upper\n * and lower Auto ISO limits; makers' manuals, see docs/USAGE.md).\n *\n * Both values are ISO settings: inside the body's Auto ISO range and, on a discrete ISO grid, one of\n * its values, with `minimum` at most `maximum`. Anything else fails with\n * `InvalidScientificInputError`; the engine never clips a limit silently. When a limit is strictly\n * inside the body's range and the ISO is held there, the limiting constraint is `user-iso-maximum` or\n * `user-iso-minimum`; a limit equal to the body's bound adds nothing, and the body's `iso-maximum` or\n * `iso-minimum` is reported.\n */\nexport interface AutoIsoLimits {\n /** The highest ISO Auto ISO may choose. */\n maximum: number;\n /** The lowest ISO Auto ISO may choose, and so its baseline. Default: the body's Auto ISO minimum. */\n minimum?: number;\n}\n\nexport type ManualIsoControl =\n | {\n kind: \"manual\";\n iso: number;\n }\n | {\n kind: \"automatic\";\n quantizationPolicy:\n \"nearest-log2-lower-on-tie\";\n /** #505: optional photographer-set Auto ISO limits inside the body's Auto ISO range. */\n autoIsoLimits?: AutoIsoLimits;\n };\n\nexport interface ResolveManualExposureModeInput {\n target: ExposureMeterTarget;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n manualShutterSeconds: number;\n isoControl: ManualIsoControl;\n}\n\nexport interface ResolveAperturePriorityExposureModeInput {\n target: ExposureMeterTarget;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n manualIso: number;\n shutterQuantizationPolicy:\n \"nearest-log2-shorter-on-tie\";\n}\n\nexport type ExposureTargetResidualState =\n | \"matched\"\n | \"under-target\"\n | \"over-target\"\n | \"target-unresolved\";\n\nexport type ExposureResolutionConstraint =\n | \"none\"\n | \"iso-minimum\"\n | \"iso-maximum\"\n | \"user-iso-minimum\"\n | \"user-iso-maximum\"\n | \"iso-grid-quantization\"\n | \"shutter-minimum\"\n | \"shutter-maximum\"\n | \"shutter-grid-quantization\"\n | \"aperture-widest\"\n | \"aperture-narrowest\"\n | \"aperture-grid-quantization\";\n\nexport type ExposureTargetResidual =\n | {\n status: \"resolved\";\n state:\n | \"matched\"\n | \"under-target\"\n | \"over-target\";\n targetExposureStops: number;\n achievedExposureStops: number;\n residualStops: number;\n limitingConstraint:\n ExposureResolutionConstraint;\n }\n | {\n status:\n \"target-unresolved\";\n state:\n \"target-unresolved\";\n reason:\n \"no-signal-target\";\n };\n\ninterface ManualExposureResolutionBase {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode: \"manual\";\n axisOwnership: {\n aperture: \"manual\";\n shutter: \"manual\";\n iso: \"manual\" | \"automatic\";\n };\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n capabilityProfiles: {\n bodyProfileId: string;\n bodyProfileVersion: string;\n lensProfileId: string;\n lensProfileVersion: string;\n };\n selectedFocalLengthMm: number;\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n manualShutterSeconds: number;\n apertureMutatedByResolver: false;\n shutterMutatedByResolver: false;\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n isoNoiseOrGainTopologyInferred: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n}\n\nexport type ManualExposureModeResolution =\n | (ManualExposureResolutionBase & {\n status: \"resolved\";\n isoControl: \"manual\";\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n idealIsoBeforeConstraints:\n null;\n isoResolution: {\n kind: \"manual-preserved\";\n quantized: false;\n clamped: false;\n };\n targetResidual:\n ExposureTargetResidual;\n })\n | (ManualExposureResolutionBase & {\n status: \"resolved\";\n isoControl: \"automatic\";\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n idealIsoBeforeConstraints:\n number;\n isoResolution: {\n kind:\n | \"continuous\"\n | \"discrete\";\n quantizationPolicy:\n \"nearest-log2-lower-on-tie\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n };\n targetResidual: {\n status: \"resolved\";\n state:\n | \"matched\"\n | \"under-target\"\n | \"over-target\";\n targetExposureStops: number;\n achievedExposureStops: number;\n residualStops: number;\n limitingConstraint:\n ExposureResolutionConstraint;\n };\n })\n | (ManualExposureResolutionBase & {\n status: \"blocked\";\n isoControl: \"automatic\";\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n };\n idealIsoBeforeConstraints:\n null;\n blocker:\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n | \"target-no-signal\";\n targetResidual: {\n status:\n \"target-unresolved\";\n state:\n \"target-unresolved\";\n reason:\n \"no-signal-target\" |\n \"auto-iso-unavailable\";\n };\n });\n\ninterface AperturePriorityExposureResolutionBase {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode: \"aperture-priority\";\n axisOwnership: {\n aperture: \"manual\";\n shutter: \"automatic\";\n iso: \"manual\";\n };\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n capabilityProfiles: {\n bodyProfileId: string;\n bodyProfileVersion: string;\n lensProfileId: string;\n lensProfileVersion: string;\n };\n selectedFocalLengthMm: number;\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n manualIso: number;\n apertureMutatedByResolver: false;\n isoMutatedByResolver: false;\n shutterResolvedByResolver: true;\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n isoNoiseOrGainTopologyInferred: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n}\n\nexport type AperturePriorityExposureModeResolution =\n | (AperturePriorityExposureResolutionBase & {\n status: \"resolved\";\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n idealShutterSecondsBeforeConstraints:\n number;\n shutterResolution: {\n kind:\n | \"continuous\"\n | \"discrete\";\n quantizationPolicy:\n \"nearest-log2-shorter-on-tie\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n };\n targetResidual: {\n status: \"resolved\";\n state:\n | \"matched\"\n | \"under-target\"\n | \"over-target\";\n targetExposureStops: number;\n achievedExposureStops: number;\n residualStops: number;\n limitingConstraint:\n ExposureResolutionConstraint;\n };\n })\n | (AperturePriorityExposureResolutionBase & {\n status: \"blocked\";\n resolvedSettings: {\n aperture: number;\n iso: number;\n };\n idealShutterSecondsBeforeConstraints:\n null;\n blocker: \"target-no-signal\";\n targetResidual: {\n status: \"target-unresolved\";\n state: \"target-unresolved\";\n reason: \"no-signal-target\";\n };\n });\n\nexport interface AutoIsoBaselinePolicy {\n isoBaseline: \"minimum-selectable\";\n isoQuantizationPolicy:\n \"nearest-log2-lower-on-tie\";\n /** #505: optional photographer-set Auto ISO limits inside the body's Auto ISO range. */\n autoIsoLimits?: AutoIsoLimits;\n}\n\nexport interface AperturePriorityAutoIsoPolicy\n extends AutoIsoBaselinePolicy {\n kind:\n \"minimum-iso-until-slowest-preferred-shutter\";\n slowestPreferredShutterSeconds:\n number;\n shutterSelectionPolicy:\n \"not-longer-than-target\";\n afterMaximumIso:\n | \"allow-slower-shutter\"\n | \"hold-preferred-shutter\";\n}\n\nexport interface ShutterPriorityAutoIsoPolicy\n extends AutoIsoBaselinePolicy {\n kind:\n \"minimum-iso-aperture-first\";\n apertureSelectionPolicy:\n \"not-wider-than-target\";\n}\n\nexport interface ResolveAperturePriorityAutoIsoExposureModeInput {\n target: ExposureMeterTarget;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n policy: AperturePriorityAutoIsoPolicy;\n}\n\nexport interface ResolveShutterPriorityExposureModeInput {\n target: ExposureMeterTarget;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n referenceExposure:\n RelativeExposureControlAnchor;\n manualShutterSeconds: number;\n isoControl:\n | {\n kind: \"manual\";\n iso: number;\n apertureQuantizationPolicy:\n \"nearest-log2-narrower-on-tie\";\n }\n | {\n kind: \"automatic\";\n policy:\n ShutterPriorityAutoIsoPolicy;\n };\n}\n\ninterface PriorityAutoIsoResolutionCommon {\n isoResolution: {\n kind:\n | \"continuous\"\n | \"discrete\";\n quantizationPolicy:\n \"nearest-log2-lower-on-tie\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n };\n idealIsoBeforeConstraints: number;\n}\n\nexport type AperturePriorityAutoIsoExposureModeResolution =\n | {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode:\n \"aperture-priority\";\n status: \"resolved\";\n axisOwnership: {\n aperture: \"manual\";\n shutter: \"automatic\";\n iso: \"automatic\";\n };\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n policy:\n AperturePriorityAutoIsoPolicy;\n baselineIso: number;\n idealShutterAtBaselineIsoSeconds:\n number;\n preferredShutterSeconds:\n number;\n afterMaximumIsoFallbackUsed:\n boolean;\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n shutterResolution: {\n kind:\n | \"continuous\"\n | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n selectionPolicy:\n | \"not-longer-than-target\"\n | \"nearest-log2-shorter-on-tie\";\n };\n isoResolution:\n PriorityAutoIsoResolutionCommon[\"isoResolution\"];\n idealIsoBeforeConstraints: number;\n targetResidual:\n Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n >;\n apertureMutatedByResolver: false;\n shutterResolvedByResolver: true;\n isoResolvedByResolver: true;\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n }\n | {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode:\n \"aperture-priority\";\n status: \"blocked\";\n axisOwnership: {\n aperture: \"manual\";\n shutter: \"automatic\";\n iso: \"automatic\";\n };\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n manualAperture: number;\n policy:\n AperturePriorityAutoIsoPolicy;\n resolvedSettings: {\n aperture: number;\n };\n blocker:\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n | \"target-no-signal\";\n targetResidual: {\n status:\n \"target-unresolved\";\n state:\n \"target-unresolved\";\n reason:\n | \"no-signal-target\"\n | \"auto-iso-unavailable\";\n };\n apertureMutatedByResolver: false;\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n };\n\ninterface ShutterPriorityResolutionBase {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode: \"shutter-priority\";\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n manualShutterSeconds: number;\n shutterMutatedByResolver: false;\n apertureResolvedByResolver: true;\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n}\n\nexport type ShutterPriorityExposureModeResolution =\n | (ShutterPriorityResolutionBase & {\n status: \"resolved\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"manual\";\n iso: \"manual\";\n };\n isoControl: \"manual\";\n manualIso: number;\n idealApertureBeforeConstraints:\n number;\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n apertureResolution: {\n kind:\n | \"continuous\"\n | \"discrete\";\n quantizationPolicy:\n \"nearest-log2-narrower-on-tie\";\n quantized: boolean;\n clamped:\n | false\n | \"widest\"\n | \"narrowest\";\n };\n targetResidual:\n Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n >;\n })\n | (ShutterPriorityResolutionBase & {\n status: \"resolved\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"manual\";\n iso: \"automatic\";\n };\n isoControl: \"automatic\";\n policy:\n ShutterPriorityAutoIsoPolicy;\n baselineIso: number;\n idealApertureAtBaselineIso:\n number;\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n apertureResolution: {\n kind:\n | \"continuous\"\n | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"widest\"\n | \"narrowest\";\n selectionPolicy:\n \"not-wider-than-target\";\n };\n idealIsoBeforeConstraints: number;\n isoResolution:\n PriorityAutoIsoResolutionCommon[\"isoResolution\"];\n targetResidual:\n Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n >;\n })\n | (ShutterPriorityResolutionBase & {\n status: \"blocked\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"manual\";\n iso: \"manual\" | \"automatic\";\n };\n isoControl: \"manual\" | \"automatic\";\n resolvedSettings: {\n shutterSeconds: number;\n };\n blocker:\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n | \"target-no-signal\";\n targetResidual: {\n status:\n \"target-unresolved\";\n state:\n \"target-unresolved\";\n reason:\n | \"no-signal-target\"\n | \"auto-iso-unavailable\";\n };\n });\n\nexport type ProgramAutoIsoControl =\n | {\n kind: \"manual\";\n iso: number;\n }\n | {\n kind: \"automatic\";\n isoBaseline:\n \"minimum-selectable\";\n isoQuantizationPolicy:\n \"nearest-log2-lower-on-tie\";\n /** #505: optional photographer-set Auto ISO limits inside the body's Auto ISO range. */\n autoIsoLimits?: AutoIsoLimits;\n /**\n * #504: optionally hold the program line's shutter at or faster than a slowest preferred shutter\n * before the ISO rises (for example from `estimateAutoIsoSlowestShutter()`). Absent, the program line\n * is followed as before.\n */\n slowestPreferredShutter?: ProgramSlowestPreferredShutterPolicy;\n };\n\n/**\n * #504: Program + Auto ISO's slowest preferred shutter, the two-axis policy of Aperture Priority + Auto\n * ISO applied to the program line. When the line asks for a longer shutter than\n * `slowestPreferredShutterSeconds`, the shutter is held there (snapped, never longer) with the line's\n * aperture, and Auto ISO makes up the rest. At the Auto ISO maximum, `afterMaximumIso` decides:\n * `\"allow-slower-shutter\"` lengthens the shutter toward the target, but never past the program line's\n * own shutter; `\"hold-preferred-shutter\"` keeps it and leaves the exposure under target.\n */\nexport interface ProgramSlowestPreferredShutterPolicy {\n slowestPreferredShutterSeconds: number;\n afterMaximumIso:\n | \"allow-slower-shutter\"\n | \"hold-preferred-shutter\";\n}\n\nexport interface ResolveProgramAutoExposureModeInput {\n target: ExposureMeterTarget;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n referenceExposure:\n RelativeExposureControlAnchor;\n programLine:\n ExposureProgramLineProfile;\n isoControl:\n ProgramAutoIsoControl;\n}\n\nexport interface FullAutoExposurePolicy {\n kind:\n \"generic-program-line-minimum-iso\";\n programLine:\n ExposureProgramLineProfile;\n isoBaseline:\n \"minimum-selectable\";\n isoQuantizationPolicy:\n \"nearest-log2-lower-on-tie\";\n /** #505: optional photographer-set Auto ISO limits inside the body's Auto ISO range. */\n autoIsoLimits?: AutoIsoLimits;\n}\n\nexport interface ResolveFullAutoExposureModeInput {\n target: ExposureMeterTarget;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n referenceExposure:\n RelativeExposureControlAnchor;\n policy:\n FullAutoExposurePolicy;\n}\n\nexport interface ProgramLineSelectionDiagnostics {\n profileId: string;\n profileVersion: string;\n requestedOpticalExposureStopsFromReference:\n number;\n selectedOpticalExposureStopsFromReference:\n number;\n position:\n | \"within-line\"\n | \"below-line\"\n | \"above-line\";\n interpolationPhase:\n number | null;\n idealAperture: number;\n idealShutterSeconds: number;\n resolvedAperture: number;\n resolvedShutterSeconds: number;\n apertureQuantized: boolean;\n shutterQuantized: boolean;\n apertureClamped:\n | false\n | \"widest\"\n | \"narrowest\";\n shutterClamped:\n | false\n | \"minimum\"\n | \"maximum\";\n}\n\ninterface ProgramExposureResolutionBase {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n programLineSelection:\n ProgramLineSelectionDiagnostics;\n apertureResolvedByResolver: true;\n shutterResolvedByResolver: true;\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n}\n\nexport type ProgramAutoExposureModeResolution =\n | (ProgramExposureResolutionBase & {\n mode: \"program-auto\";\n status: \"resolved\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"automatic\";\n iso: \"manual\";\n };\n isoControl: \"manual\";\n manualIso: number;\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n targetResidual:\n Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n >;\n })\n | (ProgramExposureResolutionBase & {\n mode: \"program-auto\";\n status: \"resolved\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"automatic\";\n iso: \"automatic\";\n };\n isoControl: \"automatic\";\n baselineIso: number;\n idealIsoBeforeConstraints:\n number;\n isoResolution:\n PriorityAutoIsoResolutionCommon[\"isoResolution\"];\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n targetResidual:\n Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n >;\n /**\n * #504: present only with `isoControl.slowestPreferredShutter`. `applied` is true when the line's\n * shutter was longer than the slowest preferred shutter and was held; `afterMaximumIsoFallbackUsed`\n * when the slower-shutter fallback ran at the Auto ISO maximum. `programLineSelection` stays the\n * line's own selection.\n */\n slowestPreferredShutter?: ProgramSlowestPreferredShutterPolicy & {\n applied: boolean;\n afterMaximumIsoFallbackUsed: boolean;\n };\n })\n | {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode: \"program-auto\";\n status: \"blocked\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"automatic\";\n iso: \"manual\" | \"automatic\";\n };\n isoControl: \"manual\" | \"automatic\";\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n blocker:\n | \"target-no-signal\"\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\";\n targetResidual: {\n status: \"target-unresolved\";\n state: \"target-unresolved\";\n reason:\n | \"no-signal-target\"\n | \"auto-iso-unavailable\";\n };\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n };\n\nexport type FullAutoExposureModeResolution =\n | (ProgramExposureResolutionBase & {\n mode:\n \"full-auto-exposure\";\n status: \"resolved\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"automatic\";\n iso: \"automatic\";\n };\n policy:\n FullAutoExposurePolicy;\n baselineIso: number;\n idealIsoBeforeConstraints:\n number;\n isoResolution:\n PriorityAutoIsoResolutionCommon[\"isoResolution\"];\n resolvedSettings: {\n aperture: number;\n shutterSeconds: number;\n iso: number;\n };\n targetResidual:\n Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n >;\n autofocusResolved: false;\n whiteBalanceResolved: false;\n flashResolved: false;\n driveResolved: false;\n sceneRecognitionResolved: false;\n stabilizationPolicyResolved:\n false;\n })\n | {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode:\n \"full-auto-exposure\";\n status: \"blocked\";\n axisOwnership: {\n aperture: \"automatic\";\n shutter: \"automatic\";\n iso: \"automatic\";\n };\n policy:\n FullAutoExposurePolicy;\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n blocker:\n | \"target-no-signal\"\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\";\n targetResidual: {\n status: \"target-unresolved\";\n state: \"target-unresolved\";\n reason:\n | \"no-signal-target\"\n | \"auto-iso-unavailable\";\n };\n exposureCompensationAppliedByResolver:\n false;\n meterRecomputedByResolver: false;\n flashPolicyApplied: false;\n safetyShiftApplied: false;\n autofocusResolved: false;\n whiteBalanceResolved: false;\n flashResolved: false;\n driveResolved: false;\n sceneRecognitionResolved: false;\n stabilizationPolicyResolved:\n false;\n };\n\nfunction requireRecord(\n value: unknown,\n path: string\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n return value as UnknownRecord;\n}\n\nfunction settingEquals(\n left: number,\n right: number\n): boolean {\n const scale = Math.max(\n Math.abs(left),\n Math.abs(right),\n 1\n );\n return (\n Math.abs(left - right) <=\n Number.EPSILON * 32 * scale\n );\n}\n\nfunction validateSettingAgainstGrid(\n value: number,\n minimum: number,\n maximum: number,\n grid: ResolvedNumericSettingGrid,\n path: string\n): void {\n if (\n value < minimum ||\n value > maximum\n ) {\n throw new InvalidScientificInputError(\n path +\n \" lies outside the resolved equipment capability range.\"\n );\n }\n\n if (\n grid.kind ===\n \"discrete-values\" &&\n !grid.values.some(\n (candidate) =>\n settingEquals(\n candidate,\n value\n )\n )\n ) {\n throw new InvalidScientificInputError(\n path +\n \" is not present in the resolved discrete equipment setting grid.\"\n );\n }\n}\n\nfunction validateTarget(\n value: unknown\n): ExposureMeterTarget {\n const record = requireRecord(\n value,\n \"target\"\n );\n if (\n record.schemaVersion !==\n EXPOSURE_METER_TARGET_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'target.schemaVersion must be \"' +\n EXPOSURE_METER_TARGET_SCHEMA_VERSION +\n '\".'\n );\n }\n if (\n record.scientificStatus !==\n \"approximation\" ||\n record.inputDomain !==\n \"relative-pre-exposure-linear-signal\" ||\n record.intendedConsumer !==\n \"exposure-mode-resolver\" ||\n record.automaticExposureResolved !==\n false ||\n record.sourceMeterSnapshotPreserved !==\n true\n ) {\n throw new InvalidScientificInputError(\n \"target does not satisfy the exposure-mode resolver boundary.\"\n );\n }\n\n const targetId = record.targetId;\n if (\n typeof targetId !== \"string\" ||\n targetId.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n \"target.targetId must be a non-empty string.\"\n );\n }\n\n requireRecord(\n record.sourceMeterSnapshot,\n \"target.sourceMeterSnapshot\"\n );\n\n if (\n record.status === \"resolved\"\n ) {\n requirePositiveFinite(\n record\n .requiredExposureScaleToTarget,\n \"target.requiredExposureScaleToTarget\"\n );\n if (\n typeof record\n .exposureOffsetStopsToTarget !==\n \"number\" ||\n !Number.isFinite(\n record\n .exposureOffsetStopsToTarget\n )\n ) {\n throw new InvalidScientificInputError(\n \"target.exposureOffsetStopsToTarget must be finite.\"\n );\n }\n } else if (\n record.status !== \"no-signal\"\n ) {\n throw new InvalidConfigurationError(\n \"target.status is invalid.\"\n );\n }\n\n return value as ExposureMeterTarget;\n}\n\nfunction validateResolvedGrid(\n grid: ResolvedNumericSettingGrid,\n minimum: number,\n maximum: number,\n path: string\n): void {\n requireRecord(grid, path);\n if (\n grid.kind ===\n \"continuous-within-range\"\n ) {\n return;\n }\n if (\n grid.kind !== \"discrete-values\" ||\n !Array.isArray(grid.values) ||\n grid.values.length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a continuous grid or a non-empty discrete-values grid.\"\n );\n }\n\n let previous =\n Number.NEGATIVE_INFINITY;\n for (\n let index = 0;\n index < grid.values.length;\n index += 1\n ) {\n const value =\n requirePositiveFinite(\n grid.values[index],\n path +\n \".values[\" +\n index +\n \"]\"\n );\n if (value <= previous) {\n throw new InvalidScientificInputError(\n path +\n \".values must be strictly increasing with no duplicates.\"\n );\n }\n if (\n value < minimum ||\n value > maximum\n ) {\n throw new InvalidScientificInputError(\n path +\n \".values must stay inside the resolved capability range.\"\n );\n }\n previous = value;\n }\n}\n\nfunction validateCapabilities(\n value:\n ResolvedGenericEquipmentExposureCapabilities\n): void {\n requireRecord(value, \"capabilities\");\n for (const key of [\"aperture\", \"shutter\", \"iso\", \"bodyProfile\", \"lensProfile\"] as const) {\n requireRecord(value[key], \"capabilities.\" + key);\n }\n if (\n value.schemaVersion !== \"0.1.0\" ||\n value.scientificStatus !==\n \"approximation\"\n ) {\n throw new InvalidScientificInputError(\n \"capabilities do not satisfy the generic equipment exposure-capability boundary.\"\n );\n }\n requirePositiveFinite(\n value.selectedFocalLengthMm,\n \"capabilities.selectedFocalLengthMm\"\n );\n requirePositiveFinite(\n value.aperture\n .widestAvailableFNumber,\n \"capabilities.aperture.widestAvailableFNumber\"\n );\n requirePositiveFinite(\n value.aperture\n .narrowestAvailableFNumber,\n \"capabilities.aperture.narrowestAvailableFNumber\"\n );\n requirePositiveFinite(\n value.shutter.minimumSeconds,\n \"capabilities.shutter.minimumSeconds\"\n );\n requirePositiveFinite(\n value.shutter.maximumSeconds,\n \"capabilities.shutter.maximumSeconds\"\n );\n requirePositiveFinite(\n value.iso.minimum,\n \"capabilities.iso.minimum\"\n );\n requirePositiveFinite(\n value.iso.maximum,\n \"capabilities.iso.maximum\"\n );\n\n if (\n value.aperture\n .widestAvailableFNumber >\n value.aperture\n .narrowestAvailableFNumber\n ) {\n throw new InvalidScientificInputError(\n \"capabilities aperture range is invalid.\"\n );\n }\n if (\n value.shutter.minimumSeconds >\n value.shutter.maximumSeconds\n ) {\n throw new InvalidScientificInputError(\n \"capabilities shutter range is invalid.\"\n );\n }\n if (\n value.iso.minimum >\n value.iso.maximum\n ) {\n throw new InvalidScientificInputError(\n \"capabilities ISO range is invalid.\"\n );\n }\n\n const hasAutoMinimum =\n value.iso.autoIsoMinimum !==\n undefined;\n const hasAutoMaximum =\n value.iso.autoIsoMaximum !==\n undefined;\n if (\n hasAutoMinimum !==\n hasAutoMaximum\n ) {\n throw new InvalidScientificInputError(\n \"capabilities Auto ISO bounds must provide both minimum and maximum or neither.\"\n );\n }\n if (\n hasAutoMinimum &&\n hasAutoMaximum\n ) {\n const autoMinimum =\n requirePositiveFinite(\n value.iso.autoIsoMinimum,\n \"capabilities.iso.autoIsoMinimum\"\n );\n const autoMaximum =\n requirePositiveFinite(\n value.iso.autoIsoMaximum,\n \"capabilities.iso.autoIsoMaximum\"\n );\n if (\n value.iso\n .autoIsoAvailability !==\n \"supported\" ||\n autoMinimum >\n autoMaximum ||\n autoMinimum <\n value.iso.minimum ||\n autoMaximum >\n value.iso.maximum\n ) {\n throw new InvalidScientificInputError(\n \"capabilities Auto ISO bounds must be ordered, inside the manual ISO range, and used only when Auto ISO is supported.\"\n );\n }\n }\n\n requireNonEmptyString(\n value.bodyProfile.profileId,\n \"capabilities.bodyProfile.profileId\"\n );\n requireNonEmptyString(\n value.bodyProfile.profileVersion,\n \"capabilities.bodyProfile.profileVersion\"\n );\n requireNonEmptyString(\n value.lensProfile.profileId,\n \"capabilities.lensProfile.profileId\"\n );\n requireNonEmptyString(\n value.lensProfile.profileVersion,\n \"capabilities.lensProfile.profileVersion\"\n );\n\n if (\n value.iso\n .autoIsoAvailability !==\n \"supported\" &&\n value.iso\n .autoIsoAvailability !==\n \"unsupported\" &&\n value.iso\n .autoIsoAvailability !==\n \"unknown\"\n ) {\n throw new InvalidConfigurationError(\n \"capabilities.iso.autoIsoAvailability is invalid.\"\n );\n }\n\n validateResolvedGrid(\n value.aperture.settingGrid,\n value.aperture\n .widestAvailableFNumber,\n value.aperture\n .narrowestAvailableFNumber,\n \"capabilities.aperture.settingGrid\"\n );\n validateResolvedGrid(\n value.shutter.settingGrid,\n value.shutter.minimumSeconds,\n value.shutter.maximumSeconds,\n \"capabilities.shutter.settingGrid\"\n );\n validateResolvedGrid(\n value.iso.settingGrid,\n value.iso.minimum,\n value.iso.maximum,\n \"capabilities.iso.settingGrid\"\n );\n}\n\nfunction validateReferenceExposure(\n reference:\n RelativeExposureControlAnchor,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): RelativeExposureControlAnchor {\n requireRecord(reference, \"referenceExposure\");\n const aperture =\n requirePositiveFinite(\n reference.aperture,\n \"referenceExposure.aperture\"\n );\n const shutterSeconds =\n requirePositiveFinite(\n reference.shutterSeconds,\n \"referenceExposure.shutterSeconds\"\n );\n const iso =\n requirePositiveFinite(\n reference.iso,\n \"referenceExposure.iso\"\n );\n\n validateSettingAgainstGrid(\n aperture,\n capabilities.aperture\n .widestAvailableFNumber,\n capabilities.aperture\n .narrowestAvailableFNumber,\n capabilities.aperture\n .settingGrid,\n \"referenceExposure.aperture\"\n );\n validateSettingAgainstGrid(\n shutterSeconds,\n capabilities.shutter\n .minimumSeconds,\n capabilities.shutter\n .maximumSeconds,\n capabilities.shutter\n .settingGrid,\n \"referenceExposure.shutterSeconds\"\n );\n validateSettingAgainstGrid(\n iso,\n capabilities.iso.minimum,\n capabilities.iso.maximum,\n capabilities.iso.settingGrid,\n \"referenceExposure.iso\"\n );\n\n return {\n aperture,\n shutterSeconds,\n iso\n };\n}\n\nfunction opticalExposureFactor(\n aperture: number,\n shutterSeconds: number,\n reference:\n RelativeExposureControlAnchor\n): number {\n const current =\n shutterSeconds /\n (aperture * aperture);\n const referenceOptical =\n reference.shutterSeconds /\n (reference.aperture *\n reference.aperture);\n const factor =\n current /\n referenceOptical;\n if (\n !Number.isFinite(factor) ||\n factor <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Optical exposure factor must remain finite and greater than zero.\"\n );\n }\n return factor;\n}\n\nfunction targetResidual(\n target:\n Extract<\n ExposureMeterTarget,\n { status: \"resolved\" }\n >,\n achievedScale: number,\n limitingConstraint:\n ExposureResolutionConstraint\n): Extract<\n ExposureTargetResidual,\n { status: \"resolved\" }\n>;\nfunction targetResidual(\n target:\n ExposureMeterTarget,\n achievedScale: number,\n limitingConstraint:\n ExposureResolutionConstraint\n): ExposureTargetResidual;\nfunction targetResidual(\n target:\n ExposureMeterTarget,\n achievedScale: number,\n limitingConstraint:\n ExposureResolutionConstraint\n): ExposureTargetResidual {\n if (\n target.status ===\n \"no-signal\"\n ) {\n return {\n status:\n \"target-unresolved\",\n state:\n \"target-unresolved\",\n reason: \"no-signal-target\"\n };\n }\n\n const targetScale =\n target\n .requiredExposureScaleToTarget;\n const targetStops =\n target\n .exposureOffsetStopsToTarget;\n const achievedStops =\n Math.log2(achievedScale);\n const residualStops =\n Math.log2(\n targetScale /\n achievedScale\n );\n\n if (\n !Number.isFinite(\n achievedStops\n ) ||\n !Number.isFinite(\n residualStops\n )\n ) {\n throw new InvalidScientificInputError(\n \"Exposure target residual must remain finite.\"\n );\n }\n\n const toleranceStops =\n 1e-12;\n const state =\n Math.abs(residualStops) <=\n toleranceStops\n ? \"matched\"\n : residualStops > 0\n ? \"under-target\"\n : \"over-target\";\n\n return {\n status: \"resolved\",\n state,\n targetExposureStops:\n targetStops,\n achievedExposureStops:\n achievedStops,\n residualStops,\n limitingConstraint\n };\n}\n\nfunction nearestDiscreteIso(\n idealIso: number,\n values: readonly number[]\n): {\n iso: number;\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const first = values[0]!;\n const last =\n values[values.length - 1]!;\n\n if (idealIso < first) {\n return {\n iso: first,\n quantized: true,\n clamped: \"minimum\",\n limitingConstraint:\n \"iso-minimum\"\n };\n }\n if (idealIso > last) {\n return {\n iso: last,\n quantized: true,\n clamped: \"maximum\",\n limitingConstraint:\n \"iso-maximum\"\n };\n }\n\n let selected = first;\n let selectedDistance =\n Math.abs(\n Math.log2(\n idealIso / first\n )\n );\n\n for (\n let index = 1;\n index < values.length;\n index += 1\n ) {\n const candidate =\n values[index]!;\n const distance =\n Math.abs(\n Math.log2(\n idealIso /\n candidate\n )\n );\n if (\n distance <\n selectedDistance -\n 1e-15 ||\n (Math.abs(\n distance -\n selectedDistance\n ) <= 1e-15 &&\n candidate < selected)\n ) {\n selected = candidate;\n selectedDistance =\n distance;\n }\n }\n\n const quantized =\n !settingEquals(\n selected,\n idealIso\n );\n\n return {\n iso: selected,\n quantized,\n clamped: false,\n limitingConstraint:\n quantized\n ? \"iso-grid-quantization\"\n : \"none\"\n };\n}\n\ninterface EffectiveAutoIsoBounds {\n minimum: number;\n maximum: number;\n minimumConstraint:\n | \"iso-minimum\"\n | \"user-iso-minimum\";\n maximumConstraint:\n | \"iso-maximum\"\n | \"user-iso-maximum\";\n}\n\nfunction bodyAutoIsoBounds(\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): {\n minimum: number;\n maximum: number;\n} {\n return {\n minimum:\n capabilities.iso\n .autoIsoMinimum ??\n capabilities.iso.minimum,\n maximum:\n capabilities.iso\n .autoIsoMaximum ??\n capabilities.iso.maximum\n };\n}\n\n/**\n * #505: the Auto ISO range a resolver chooses in: the body's Auto ISO range, narrowed by the\n * photographer's validated limits when given. A limit outside the body's range, or off a discrete\n * ISO grid, fails; it is never clipped.\n */\nfunction autoIsoBounds(\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities,\n limits?: unknown,\n path = \"autoIsoLimits\"\n): EffectiveAutoIsoBounds {\n const body =\n bodyAutoIsoBounds(capabilities);\n if (limits === undefined) {\n return {\n ...body,\n minimumConstraint:\n \"iso-minimum\",\n maximumConstraint:\n \"iso-maximum\"\n };\n }\n const record = requireRecord(\n limits,\n path\n );\n rejectUnknownFields(\n record,\n [\"maximum\", \"minimum\"],\n path\n );\n const check = (\n value: unknown,\n field: string\n ): number => {\n const iso =\n requirePositiveFinite(\n value,\n path + \".\" + field\n );\n if (\n iso < body.minimum ||\n iso > body.maximum\n ) {\n throw new InvalidScientificInputError(\n path +\n \".\" +\n field +\n \" (ISO \" +\n iso +\n \") lies outside the body's Auto ISO range, ISO \" +\n body.minimum +\n \" to \" +\n body.maximum +\n \".\"\n );\n }\n const grid =\n capabilities.iso.settingGrid;\n if (\n grid.kind ===\n \"discrete-values\" &&\n !grid.values.some(\n (candidate) =>\n settingEquals(\n candidate,\n iso\n )\n )\n ) {\n throw new InvalidScientificInputError(\n path +\n \".\" +\n field +\n \" (ISO \" +\n iso +\n \") is not a selectable ISO of the resolved discrete ISO grid.\"\n );\n }\n return iso;\n };\n const maximum = check(\n record.maximum,\n \"maximum\"\n );\n const minimum =\n record.minimum === undefined\n ? body.minimum\n : check(\n record.minimum,\n \"minimum\"\n );\n if (minimum > maximum) {\n throw new InvalidScientificInputError(\n path +\n \".minimum must not exceed \" +\n path +\n \".maximum.\"\n );\n }\n return {\n minimum,\n maximum,\n minimumConstraint:\n minimum > body.minimum &&\n !settingEquals(\n minimum,\n body.minimum\n )\n ? \"user-iso-minimum\"\n : \"iso-minimum\",\n maximumConstraint:\n maximum < body.maximum &&\n !settingEquals(\n maximum,\n body.maximum\n )\n ? \"user-iso-maximum\"\n : \"iso-maximum\"\n };\n}\n\nfunction resolveAutomaticIso(\n idealIso: number,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities,\n bounds: EffectiveAutoIsoBounds\n): {\n iso: number;\n kind:\n | \"continuous\"\n | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const grid =\n capabilities.iso.settingGrid;\n\n if (\n grid.kind ===\n \"discrete-values\"\n ) {\n const autoValues =\n grid.values.filter(\n (value) =>\n value >= bounds.minimum &&\n value <= bounds.maximum\n );\n if (\n autoValues.length === 0\n ) {\n throw new InvalidScientificInputError(\n \"Auto ISO bounds contain no selectable values from the resolved ISO grid.\"\n );\n }\n const discrete =\n nearestDiscreteIso(\n idealIso,\n autoValues\n );\n return {\n ...discrete,\n limitingConstraint:\n discrete.clamped ===\n \"minimum\"\n ? bounds.minimumConstraint\n : discrete.clamped ===\n \"maximum\"\n ? bounds.maximumConstraint\n : discrete.limitingConstraint,\n kind: \"discrete\"\n };\n }\n\n if (\n idealIso <\n bounds.minimum\n ) {\n return {\n iso:\n bounds.minimum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"minimum\",\n limitingConstraint:\n bounds.minimumConstraint\n };\n }\n if (\n idealIso >\n bounds.maximum\n ) {\n return {\n iso:\n bounds.maximum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"maximum\",\n limitingConstraint:\n bounds.maximumConstraint\n };\n }\n\n return {\n iso: idealIso,\n kind: \"continuous\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n}\n\nfunction nearestDiscreteShutter(\n idealShutterSeconds: number,\n values: readonly number[]\n): {\n shutterSeconds: number;\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const first = values[0]!;\n const last =\n values[values.length - 1]!;\n\n if (idealShutterSeconds < first) {\n return {\n shutterSeconds: first,\n quantized: true,\n clamped: \"minimum\",\n limitingConstraint:\n \"shutter-minimum\"\n };\n }\n if (idealShutterSeconds > last) {\n return {\n shutterSeconds: last,\n quantized: true,\n clamped: \"maximum\",\n limitingConstraint:\n \"shutter-maximum\"\n };\n }\n\n let selected = first;\n let selectedDistance =\n Math.abs(\n Math.log2(\n idealShutterSeconds /\n first\n )\n );\n\n for (\n let index = 1;\n index < values.length;\n index += 1\n ) {\n const candidate =\n values[index]!;\n const distance =\n Math.abs(\n Math.log2(\n idealShutterSeconds /\n candidate\n )\n );\n if (\n distance <\n selectedDistance -\n 1e-15 ||\n (Math.abs(\n distance -\n selectedDistance\n ) <= 1e-15 &&\n candidate < selected)\n ) {\n selected = candidate;\n selectedDistance =\n distance;\n }\n }\n\n const quantized =\n !settingEquals(\n selected,\n idealShutterSeconds\n );\n\n return {\n shutterSeconds: selected,\n quantized,\n clamped: false,\n limitingConstraint:\n quantized\n ? \"shutter-grid-quantization\"\n : \"none\"\n };\n}\n\nfunction resolveAutomaticShutter(\n idealShutterSeconds: number,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): {\n shutterSeconds: number;\n kind:\n | \"continuous\"\n | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const grid =\n capabilities.shutter.settingGrid;\n\n if (\n grid.kind ===\n \"discrete-values\"\n ) {\n const discrete =\n nearestDiscreteShutter(\n idealShutterSeconds,\n grid.values\n );\n return {\n ...discrete,\n kind: \"discrete\"\n };\n }\n\n if (\n idealShutterSeconds <\n capabilities.shutter\n .minimumSeconds\n ) {\n return {\n shutterSeconds:\n capabilities.shutter\n .minimumSeconds,\n kind: \"continuous\",\n quantized: false,\n clamped: \"minimum\",\n limitingConstraint:\n \"shutter-minimum\"\n };\n }\n if (\n idealShutterSeconds >\n capabilities.shutter\n .maximumSeconds\n ) {\n return {\n shutterSeconds:\n capabilities.shutter\n .maximumSeconds,\n kind: \"continuous\",\n quantized: false,\n clamped: \"maximum\",\n limitingConstraint:\n \"shutter-maximum\"\n };\n }\n\n return {\n shutterSeconds:\n idealShutterSeconds,\n kind: \"continuous\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n}\n\nfunction minimumSelectableIso(\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities,\n bounds: EffectiveAutoIsoBounds\n): number {\n const grid =\n capabilities.iso.settingGrid;\n if (\n grid.kind ===\n \"continuous-within-range\"\n ) {\n return bounds.minimum;\n }\n const first =\n grid.values.find(\n (value) =>\n value >= bounds.minimum &&\n value <= bounds.maximum\n );\n if (first === undefined) {\n throw new InvalidScientificInputError(\n \"Auto ISO bounds contain no selectable values from the resolved ISO grid.\"\n );\n }\n return first;\n}\n\nfunction selectShutterNotLongerThanTarget(\n targetSeconds: number,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): {\n shutterSeconds: number;\n kind: \"continuous\" | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"minimum\"\n | \"maximum\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const minimum =\n capabilities.shutter.minimumSeconds;\n const maximum =\n capabilities.shutter.maximumSeconds;\n const grid =\n capabilities.shutter.settingGrid;\n\n if (grid.kind === \"continuous-within-range\") {\n if (targetSeconds < minimum) {\n return {\n shutterSeconds: minimum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"minimum\",\n limitingConstraint:\n \"shutter-minimum\"\n };\n }\n if (targetSeconds > maximum) {\n return {\n shutterSeconds: maximum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"maximum\",\n limitingConstraint:\n \"shutter-maximum\"\n };\n }\n return {\n shutterSeconds: targetSeconds,\n kind: \"continuous\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n }\n\n const values = grid.values;\n const first = values[0]!;\n const last = values[values.length - 1]!;\n\n // A grid value within settingEquals tolerance of the target counts as an\n // exact match. Floating-point error in the computed target must not push the\n // choice one grid step shorter (#272).\n const exactMatch =\n values.find(\n (candidate) =>\n settingEquals(\n candidate,\n targetSeconds\n )\n );\n if (exactMatch !== undefined) {\n return {\n shutterSeconds: exactMatch,\n kind: \"discrete\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n }\n\n if (targetSeconds < first) {\n return {\n shutterSeconds: first,\n kind: \"discrete\",\n quantized: true,\n clamped: \"minimum\",\n limitingConstraint:\n \"shutter-minimum\"\n };\n }\n if (targetSeconds > last) {\n return {\n shutterSeconds: last,\n kind: \"discrete\",\n quantized: true,\n clamped: \"maximum\",\n limitingConstraint:\n \"shutter-maximum\"\n };\n }\n\n let selected = first;\n for (const candidate of values) {\n if (candidate > targetSeconds) {\n break;\n }\n selected = candidate;\n }\n\n const quantized =\n !settingEquals(\n selected,\n targetSeconds\n );\n return {\n shutterSeconds: selected,\n kind: \"discrete\",\n quantized,\n clamped: false,\n limitingConstraint:\n quantized\n ? \"shutter-grid-quantization\"\n : \"none\"\n };\n}\n\nfunction nearestDiscreteAperture(\n idealFNumber: number,\n values: readonly number[]\n): {\n aperture: number;\n quantized: boolean;\n clamped:\n | false\n | \"widest\"\n | \"narrowest\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const first = values[0]!;\n const last =\n values[values.length - 1]!;\n\n if (idealFNumber < first) {\n return {\n aperture: first,\n quantized: true,\n clamped: \"widest\",\n limitingConstraint:\n \"aperture-widest\"\n };\n }\n if (idealFNumber > last) {\n return {\n aperture: last,\n quantized: true,\n clamped: \"narrowest\",\n limitingConstraint:\n \"aperture-narrowest\"\n };\n }\n\n let selected = first;\n let selectedDistance =\n Math.abs(\n Math.log2(\n idealFNumber /\n first\n )\n );\n\n for (\n let index = 1;\n index < values.length;\n index += 1\n ) {\n const candidate =\n values[index]!;\n const distance =\n Math.abs(\n Math.log2(\n idealFNumber /\n candidate\n )\n );\n if (\n distance <\n selectedDistance -\n 1e-15 ||\n (Math.abs(\n distance -\n selectedDistance\n ) <= 1e-15 &&\n candidate > selected)\n ) {\n selected = candidate;\n selectedDistance =\n distance;\n }\n }\n\n const quantized =\n !settingEquals(\n selected,\n idealFNumber\n );\n\n return {\n aperture: selected,\n quantized,\n clamped: false,\n limitingConstraint:\n quantized\n ? \"aperture-grid-quantization\"\n : \"none\"\n };\n}\n\nfunction resolveAutomaticAperture(\n idealFNumber: number,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): {\n aperture: number;\n kind: \"continuous\" | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"widest\"\n | \"narrowest\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const minimum =\n capabilities.aperture\n .widestAvailableFNumber;\n const maximum =\n capabilities.aperture\n .narrowestAvailableFNumber;\n const grid =\n capabilities.aperture.settingGrid;\n\n if (grid.kind === \"discrete-values\") {\n return {\n ...nearestDiscreteAperture(\n idealFNumber,\n grid.values\n ),\n kind: \"discrete\"\n };\n }\n\n if (idealFNumber < minimum) {\n return {\n aperture: minimum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"widest\",\n limitingConstraint:\n \"aperture-widest\"\n };\n }\n if (idealFNumber > maximum) {\n return {\n aperture: maximum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"narrowest\",\n limitingConstraint:\n \"aperture-narrowest\"\n };\n }\n\n return {\n aperture: idealFNumber,\n kind: \"continuous\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n}\n\nfunction selectApertureNotWiderThanTarget(\n idealFNumber: number,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): {\n aperture: number;\n kind: \"continuous\" | \"discrete\";\n quantized: boolean;\n clamped:\n | false\n | \"widest\"\n | \"narrowest\";\n limitingConstraint:\n ExposureResolutionConstraint;\n} {\n const minimum =\n capabilities.aperture\n .widestAvailableFNumber;\n const maximum =\n capabilities.aperture\n .narrowestAvailableFNumber;\n const grid =\n capabilities.aperture.settingGrid;\n\n if (grid.kind === \"continuous-within-range\") {\n if (idealFNumber < minimum) {\n return {\n aperture: minimum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"widest\",\n limitingConstraint:\n \"aperture-widest\"\n };\n }\n if (idealFNumber > maximum) {\n return {\n aperture: maximum,\n kind: \"continuous\",\n quantized: false,\n clamped: \"narrowest\",\n limitingConstraint:\n \"aperture-narrowest\"\n };\n }\n return {\n aperture: idealFNumber,\n kind: \"continuous\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n }\n\n const values = grid.values;\n const first = values[0]!;\n const last = values[values.length - 1]!;\n\n // A grid value within settingEquals tolerance of the ideal counts as an\n // exact match. Floating-point error in the computed ideal must not push the\n // choice one grid step narrower (#272).\n const exactMatch =\n values.find(\n (candidate) =>\n settingEquals(\n candidate,\n idealFNumber\n )\n );\n if (exactMatch !== undefined) {\n return {\n aperture: exactMatch,\n kind: \"discrete\",\n quantized: false,\n clamped: false,\n limitingConstraint: \"none\"\n };\n }\n\n if (idealFNumber < first) {\n return {\n aperture: first,\n kind: \"discrete\",\n quantized: true,\n clamped: \"widest\",\n limitingConstraint:\n \"aperture-widest\"\n };\n }\n if (idealFNumber > last) {\n return {\n aperture: last,\n kind: \"discrete\",\n quantized: true,\n clamped: \"narrowest\",\n limitingConstraint:\n \"aperture-narrowest\"\n };\n }\n\n const selected =\n values.find(\n (candidate) =>\n candidate >= idealFNumber\n ) ?? last;\n const quantized =\n !settingEquals(\n selected,\n idealFNumber\n );\n\n return {\n aperture: selected,\n kind: \"discrete\",\n quantized,\n clamped: false,\n limitingConstraint:\n quantized\n ? \"aperture-grid-quantization\"\n : \"none\"\n };\n}\n\nfunction idealApertureForTarget(\n targetScale: number,\n shutterSeconds: number,\n iso: number,\n reference:\n RelativeExposureControlAnchor\n): number {\n const numerator =\n reference.aperture *\n reference.aperture *\n (shutterSeconds /\n reference.shutterSeconds) *\n (iso /\n reference.iso);\n const squared =\n numerator / targetScale;\n const aperture =\n Math.sqrt(squared);\n if (\n !Number.isFinite(aperture) ||\n aperture <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Ideal automatic aperture must remain finite and greater than zero.\"\n );\n }\n return aperture;\n}\n\nfunction validateProgramLineForResolution(\n value: ExposureProgramLineProfile,\n referenceExposure:\n RelativeExposureControlAnchor,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): ExposureProgramLineProfile {\n const profile =\n parseExposureProgramLineProfile(\n value\n );\n const toleranceStops = 1e-9;\n\n for (const node of profile.nodes) {\n if (\n node.aperture <\n capabilities.aperture\n .widestAvailableFNumber ||\n node.aperture >\n capabilities.aperture\n .narrowestAvailableFNumber\n ) {\n throw new InvalidScientificInputError(\n \"Program-line aperture lies outside the resolved equipment capability range.\"\n );\n }\n if (\n node.shutterSeconds <\n capabilities.shutter\n .minimumSeconds ||\n node.shutterSeconds >\n capabilities.shutter\n .maximumSeconds\n ) {\n throw new InvalidScientificInputError(\n \"Program-line shutter duration lies outside the resolved equipment capability range.\"\n );\n }\n\n const computedStops =\n Math.log2(\n opticalExposureFactor(\n node.aperture,\n node.shutterSeconds,\n referenceExposure\n )\n );\n if (\n !Number.isFinite(computedStops) ||\n Math.abs(\n computedStops -\n node\n .opticalExposureStopsFromReference\n ) > toleranceStops\n ) {\n throw new InvalidScientificInputError(\n \"Program-line node opticalExposureStopsFromReference is inconsistent with its aperture/shutter pair and the selected reference exposure.\"\n );\n }\n }\n\n return profile;\n}\n\nfunction selectProgramLineSettings(\n requestedOpticalStops: number,\n profile:\n ExposureProgramLineProfile,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): ProgramLineSelectionDiagnostics {\n if (!Number.isFinite(requestedOpticalStops)) {\n throw new InvalidScientificInputError(\n \"Requested program-line optical exposure stops must be finite.\"\n );\n }\n\n const first = profile.nodes[0]!;\n const last =\n profile.nodes[\n profile.nodes.length - 1\n ]!;\n\n let position:\n | \"within-line\"\n | \"below-line\"\n | \"above-line\";\n let selectedStops: number;\n let interpolationPhase:\n number | null;\n let idealAperture: number;\n let idealShutterSeconds: number;\n\n if (\n requestedOpticalStops <=\n first\n .opticalExposureStopsFromReference\n ) {\n position =\n requestedOpticalStops <\n first\n .opticalExposureStopsFromReference\n ? \"below-line\"\n : \"within-line\";\n selectedStops =\n first\n .opticalExposureStopsFromReference;\n interpolationPhase = null;\n idealAperture = first.aperture;\n idealShutterSeconds =\n first.shutterSeconds;\n } else if (\n requestedOpticalStops >=\n last\n .opticalExposureStopsFromReference\n ) {\n position =\n requestedOpticalStops >\n last\n .opticalExposureStopsFromReference\n ? \"above-line\"\n : \"within-line\";\n selectedStops =\n last\n .opticalExposureStopsFromReference;\n interpolationPhase = null;\n idealAperture = last.aperture;\n idealShutterSeconds =\n last.shutterSeconds;\n } else {\n position = \"within-line\";\n let left = first;\n let right = profile.nodes[1]!;\n\n for (\n let index = 1;\n index < profile.nodes.length;\n index += 1\n ) {\n const candidate =\n profile.nodes[index]!;\n if (\n requestedOpticalStops <=\n candidate\n .opticalExposureStopsFromReference\n ) {\n left =\n profile.nodes[index - 1]!;\n right = candidate;\n break;\n }\n }\n\n const span =\n right\n .opticalExposureStopsFromReference -\n left\n .opticalExposureStopsFromReference;\n const phase =\n (requestedOpticalStops -\n left\n .opticalExposureStopsFromReference) /\n span;\n interpolationPhase = phase;\n selectedStops =\n requestedOpticalStops;\n\n const logAperture =\n Math.log2(left.aperture) +\n phase *\n (Math.log2(right.aperture) -\n Math.log2(left.aperture));\n const logShutter =\n Math.log2(\n left.shutterSeconds\n ) +\n phase *\n (Math.log2(\n right.shutterSeconds\n ) -\n Math.log2(\n left.shutterSeconds\n ));\n\n idealAperture =\n Math.pow(2, logAperture);\n idealShutterSeconds =\n Math.pow(2, logShutter);\n }\n\n const aperture =\n resolveAutomaticAperture(\n idealAperture,\n capabilities\n );\n const shutter =\n resolveAutomaticShutter(\n idealShutterSeconds,\n capabilities\n );\n\n return {\n profileId: profile.profileId,\n profileVersion:\n profile.profileVersion,\n requestedOpticalExposureStopsFromReference:\n requestedOpticalStops,\n selectedOpticalExposureStopsFromReference:\n selectedStops,\n position,\n interpolationPhase,\n idealAperture,\n idealShutterSeconds,\n resolvedAperture:\n aperture.aperture,\n resolvedShutterSeconds:\n shutter.shutterSeconds,\n apertureQuantized:\n aperture.quantized,\n shutterQuantized:\n shutter.quantized,\n apertureClamped:\n aperture.clamped,\n shutterClamped:\n shutter.clamped\n };\n}\n\nfunction programLineResidualConstraint(\n selection:\n ProgramLineSelectionDiagnostics\n): ExposureResolutionConstraint {\n if (\n selection.apertureClamped ===\n \"widest\"\n ) {\n return \"aperture-widest\";\n }\n if (\n selection.apertureClamped ===\n \"narrowest\"\n ) {\n return \"aperture-narrowest\";\n }\n if (\n selection.shutterClamped ===\n \"minimum\"\n ) {\n return \"shutter-minimum\";\n }\n if (\n selection.shutterClamped ===\n \"maximum\"\n ) {\n return \"shutter-maximum\";\n }\n if (selection.apertureQuantized) {\n return \"aperture-grid-quantization\";\n }\n if (selection.shutterQuantized) {\n return \"shutter-grid-quantization\";\n }\n return \"none\";\n}\n\n/**\n * Resolves Manual exposure with either manual ISO or Auto ISO.\n *\n * The caller sets aperture and shutter; they are never changed. The relative\n * meter target is normalized by an explicit reference exposure anchor. No\n * ISO 100 or other hidden absolute calibration is assumed.\n */\nexport function resolveManualExposureMode(\n input:\n ResolveManualExposureModeInput\n): ManualExposureModeResolution {\n requireInputKeys(input, \"resolveManualExposureMode\", [\"target\", \"capabilities\", \"referenceExposure\", \"manualAperture\", \"manualShutterSeconds\", \"isoControl\"]);\n requireRecord(input.isoControl, \"isoControl\");\n const target =\n validateTarget(input.target);\n validateCapabilities(\n input.capabilities\n );\n\n const referenceExposure =\n validateReferenceExposure(\n input.referenceExposure,\n input.capabilities\n );\n\n const manualAperture =\n requirePositiveFinite(\n input.manualAperture,\n \"manualAperture\"\n );\n const manualShutterSeconds =\n requirePositiveFinite(\n input.manualShutterSeconds,\n \"manualShutterSeconds\"\n );\n\n validateSettingAgainstGrid(\n manualAperture,\n input.capabilities.aperture\n .widestAvailableFNumber,\n input.capabilities.aperture\n .narrowestAvailableFNumber,\n input.capabilities.aperture\n .settingGrid,\n \"manualAperture\"\n );\n validateSettingAgainstGrid(\n manualShutterSeconds,\n input.capabilities.shutter\n .minimumSeconds,\n input.capabilities.shutter\n .maximumSeconds,\n input.capabilities.shutter\n .settingGrid,\n \"manualShutterSeconds\"\n );\n\n const base:\n ManualExposureResolutionBase = {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"manual\",\n axisOwnership: {\n aperture: \"manual\",\n shutter: \"manual\",\n iso:\n input.isoControl.kind ===\n \"manual\"\n ? \"manual\"\n : \"automatic\"\n },\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n capabilityProfiles: {\n bodyProfileId:\n input.capabilities\n .bodyProfile.profileId,\n bodyProfileVersion:\n input.capabilities\n .bodyProfile.profileVersion,\n lensProfileId:\n input.capabilities\n .lensProfile.profileId,\n lensProfileVersion:\n input.capabilities\n .lensProfile.profileVersion\n },\n selectedFocalLengthMm:\n input.capabilities\n .selectedFocalLengthMm,\n referenceExposure,\n manualAperture,\n manualShutterSeconds,\n apertureMutatedByResolver: false,\n shutterMutatedByResolver: false,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n isoNoiseOrGainTopologyInferred:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n\n const opticalFactor =\n opticalExposureFactor(\n manualAperture,\n manualShutterSeconds,\n referenceExposure\n );\n\n if (\n input.isoControl.kind !==\n \"manual\" &&\n input.isoControl.kind !==\n \"automatic\"\n ) {\n throw new InvalidConfigurationError(\n \"isoControl.kind is invalid.\"\n );\n }\n if (\n input.isoControl.kind ===\n \"automatic\" &&\n input.isoControl\n .quantizationPolicy !==\n \"nearest-log2-lower-on-tie\"\n ) {\n throw new InvalidConfigurationError(\n 'isoControl.quantizationPolicy must be \"nearest-log2-lower-on-tie\".'\n );\n }\n const autoBounds =\n input.isoControl.kind ===\n \"automatic\"\n ? autoIsoBounds(\n input.capabilities,\n input.isoControl\n .autoIsoLimits,\n \"isoControl.autoIsoLimits\"\n )\n : undefined;\n\n if (\n input.isoControl.kind ===\n \"manual\"\n ) {\n const manualIso =\n requirePositiveFinite(\n input.isoControl.iso,\n \"isoControl.iso\"\n );\n validateSettingAgainstGrid(\n manualIso,\n input.capabilities.iso.minimum,\n input.capabilities.iso.maximum,\n input.capabilities.iso.settingGrid,\n \"isoControl.iso\"\n );\n\n const achievedScale =\n opticalFactor *\n (manualIso /\n referenceExposure.iso);\n\n return {\n ...base,\n status: \"resolved\",\n isoControl: \"manual\",\n resolvedSettings: {\n aperture:\n manualAperture,\n shutterSeconds:\n manualShutterSeconds,\n iso: manualIso\n },\n idealIsoBeforeConstraints:\n null,\n isoResolution: {\n kind:\n \"manual-preserved\",\n quantized: false,\n clamped: false\n },\n targetResidual:\n targetResidual(\n target,\n achievedScale,\n \"none\"\n )\n };\n }\n\n const availability =\n input.capabilities.iso\n .autoIsoAvailability;\n if (\n availability !== \"supported\"\n ) {\n return {\n ...base,\n status: \"blocked\",\n isoControl: \"automatic\",\n resolvedSettings: {\n aperture:\n manualAperture,\n shutterSeconds:\n manualShutterSeconds\n },\n idealIsoBeforeConstraints:\n null,\n blocker:\n availability ===\n \"unknown\"\n ? \"auto-iso-unknown\"\n : \"auto-iso-unsupported\",\n targetResidual: {\n status:\n \"target-unresolved\",\n state:\n \"target-unresolved\",\n reason:\n \"auto-iso-unavailable\"\n }\n };\n }\n\n if (target.status === \"no-signal\") {\n return {\n ...base,\n status: \"blocked\",\n isoControl: \"automatic\",\n resolvedSettings: {\n aperture:\n manualAperture,\n shutterSeconds:\n manualShutterSeconds\n },\n idealIsoBeforeConstraints:\n null,\n blocker:\n \"target-no-signal\",\n targetResidual: {\n status:\n \"target-unresolved\",\n state:\n \"target-unresolved\",\n reason: \"no-signal-target\"\n }\n };\n }\n\n const idealIso =\n referenceExposure.iso *\n (target\n .requiredExposureScaleToTarget /\n opticalFactor);\n\n if (\n !Number.isFinite(idealIso) ||\n idealIso <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Ideal Auto ISO must remain finite and greater than zero.\"\n );\n }\n\n const automatic =\n resolveAutomaticIso(\n idealIso,\n input.capabilities,\n autoBounds!\n );\n\n const achievedScale =\n opticalFactor *\n (automatic.iso /\n referenceExposure.iso);\n const residual =\n targetResidual(\n target,\n achievedScale,\n automatic\n .limitingConstraint\n );\n\n return {\n ...base,\n status: \"resolved\",\n isoControl: \"automatic\",\n resolvedSettings: {\n aperture:\n manualAperture,\n shutterSeconds:\n manualShutterSeconds,\n iso: automatic.iso\n },\n idealIsoBeforeConstraints:\n idealIso,\n isoResolution: {\n kind: automatic.kind,\n quantizationPolicy:\n input.isoControl\n .quantizationPolicy,\n quantized:\n automatic.quantized,\n clamped:\n automatic.clamped\n },\n targetResidual: residual\n };\n}\n\n/**\n * Resolves Aperture Priority with manual ISO.\n *\n * The caller sets aperture and ISO. Only the shutter is automatic. The target\n * and reference use the same relative exposure model as Manual + Auto ISO; no\n * new exposure equation is added for this mode.\n */\nexport function resolveAperturePriorityExposureMode(\n input:\n ResolveAperturePriorityExposureModeInput\n): AperturePriorityExposureModeResolution {\n requireInputKeys(input, \"resolveAperturePriorityExposureMode\", [\"target\", \"capabilities\", \"referenceExposure\", \"manualAperture\", \"manualIso\", \"shutterQuantizationPolicy\"]);\n const target =\n validateTarget(input.target);\n validateCapabilities(\n input.capabilities\n );\n\n const referenceExposure =\n validateReferenceExposure(\n input.referenceExposure,\n input.capabilities\n );\n\n const manualAperture =\n requirePositiveFinite(\n input.manualAperture,\n \"manualAperture\"\n );\n const manualIso =\n requirePositiveFinite(\n input.manualIso,\n \"manualIso\"\n );\n\n validateSettingAgainstGrid(\n manualAperture,\n input.capabilities.aperture\n .widestAvailableFNumber,\n input.capabilities.aperture\n .narrowestAvailableFNumber,\n input.capabilities.aperture\n .settingGrid,\n \"manualAperture\"\n );\n validateSettingAgainstGrid(\n manualIso,\n input.capabilities.iso.minimum,\n input.capabilities.iso.maximum,\n input.capabilities.iso.settingGrid,\n \"manualIso\"\n );\n\n if (\n input.shutterQuantizationPolicy !==\n \"nearest-log2-shorter-on-tie\"\n ) {\n throw new InvalidConfigurationError(\n 'shutterQuantizationPolicy must be \"nearest-log2-shorter-on-tie\".'\n );\n }\n\n const base:\n AperturePriorityExposureResolutionBase = {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"aperture-priority\",\n axisOwnership: {\n aperture: \"manual\",\n shutter: \"automatic\",\n iso: \"manual\"\n },\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n capabilityProfiles: {\n bodyProfileId:\n input.capabilities\n .bodyProfile.profileId,\n bodyProfileVersion:\n input.capabilities\n .bodyProfile.profileVersion,\n lensProfileId:\n input.capabilities\n .lensProfile.profileId,\n lensProfileVersion:\n input.capabilities\n .lensProfile.profileVersion\n },\n selectedFocalLengthMm:\n input.capabilities\n .selectedFocalLengthMm,\n referenceExposure,\n manualAperture,\n manualIso,\n apertureMutatedByResolver: false,\n isoMutatedByResolver: false,\n shutterResolvedByResolver: true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n isoNoiseOrGainTopologyInferred:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n\n if (target.status === \"no-signal\") {\n return {\n ...base,\n status: \"blocked\",\n resolvedSettings: {\n aperture:\n manualAperture,\n iso: manualIso\n },\n idealShutterSecondsBeforeConstraints:\n null,\n blocker: \"target-no-signal\",\n targetResidual: {\n status:\n \"target-unresolved\",\n state:\n \"target-unresolved\",\n reason: \"no-signal-target\"\n }\n };\n }\n\n const fixedAxisFactorAtReferenceShutter =\n opticalExposureFactor(\n manualAperture,\n referenceExposure\n .shutterSeconds,\n referenceExposure\n ) *\n (manualIso /\n referenceExposure.iso);\n\n if (\n !Number.isFinite(\n fixedAxisFactorAtReferenceShutter\n ) ||\n fixedAxisFactorAtReferenceShutter <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Aperture Priority fixed-axis exposure factor must remain finite and greater than zero.\"\n );\n }\n\n const idealShutterSeconds =\n referenceExposure\n .shutterSeconds *\n (target\n .requiredExposureScaleToTarget /\n fixedAxisFactorAtReferenceShutter);\n\n if (\n !Number.isFinite(\n idealShutterSeconds\n ) ||\n idealShutterSeconds <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Ideal automatic shutter duration must remain finite and greater than zero.\"\n );\n }\n\n const automatic =\n resolveAutomaticShutter(\n idealShutterSeconds,\n input.capabilities\n );\n\n const achievedScale =\n opticalExposureFactor(\n manualAperture,\n automatic.shutterSeconds,\n referenceExposure\n ) *\n (manualIso /\n referenceExposure.iso);\n\n const residual =\n targetResidual(\n target,\n achievedScale,\n automatic\n .limitingConstraint\n );\n\n return {\n ...base,\n status: \"resolved\",\n resolvedSettings: {\n aperture: manualAperture,\n shutterSeconds:\n automatic.shutterSeconds,\n iso: manualIso\n },\n idealShutterSecondsBeforeConstraints:\n idealShutterSeconds,\n shutterResolution: {\n kind: automatic.kind,\n quantizationPolicy:\n input\n .shutterQuantizationPolicy,\n quantized:\n automatic.quantized,\n clamped:\n automatic.clamped\n },\n targetResidual: residual\n };\n}\n\nfunction validateAutoIsoAvailability(\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): \"supported\" | \"unsupported\" | \"unknown\" {\n return capabilities.iso.autoIsoAvailability;\n}\n\nfunction buildPriorityAutoIsoBlocked<\n Mode extends\n | \"aperture-priority\"\n | \"shutter-priority\",\n Settings extends\n Record<string, number>\n>(\n mode: Mode,\n target: ExposureMeterTarget,\n referenceExposure:\n RelativeExposureControlAnchor,\n reason:\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n | \"target-no-signal\",\n resolvedSettings: Settings\n): {\n resolverVersion:\n typeof EXPOSURE_MODE_RESOLVER_VERSION;\n mode: Mode;\n status: \"blocked\";\n targetId: string;\n targetSourceMeterSnapshot:\n ExposureMeterTarget[\"sourceMeterSnapshot\"];\n referenceExposure:\n RelativeExposureControlAnchor;\n resolvedSettings: Settings;\n blocker:\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n | \"target-no-signal\";\n targetResidual: {\n status: \"target-unresolved\";\n state: \"target-unresolved\";\n reason:\n | \"auto-iso-unavailable\"\n | \"no-signal-target\";\n };\n} {\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode,\n status: \"blocked\",\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n resolvedSettings,\n blocker: reason,\n targetResidual: {\n status: \"target-unresolved\",\n state: \"target-unresolved\",\n reason:\n reason === \"target-no-signal\"\n ? \"no-signal-target\"\n : \"auto-iso-unavailable\"\n }\n };\n}\n\n/**\n * Aperture Priority with Auto ISO. Keeps the aperture fixed, follows the declared minimum-shutter\n * policy, and uses Auto ISO (within its limits) to make up the rest of the exposure.\n *\n * Every exposure mode applies its control policy to one shared relative exposure equation, with an\n * explicit reference anchor. Exposure compensation is already part of the frozen meter target. Manual\n * settings are never changed. Automatic settings snap to the declared setting grids, and the result\n * reports the signed leftover (residual) stops and any limits hit. A target with zero signal cannot\n * be used to make up an exposure.\n * @param input - ResolveAperturePriorityAutoIsoExposureModeInput. See that type for coordinates, units and profile binding.\n * @returns AperturePriorityAutoIsoExposureModeResolution. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function resolveAperturePriorityAutoIsoExposureMode(\n input:\n ResolveAperturePriorityAutoIsoExposureModeInput\n): AperturePriorityAutoIsoExposureModeResolution {\n requireInputKeys(input, \"resolveAperturePriorityAutoIsoExposureMode\", [\"target\", \"capabilities\", \"referenceExposure\", \"manualAperture\", \"policy\"]);\n requireRecord(input.policy, \"policy\");\n const target = validateTarget(input.target);\n validateCapabilities(input.capabilities);\n const referenceExposure =\n validateReferenceExposure(\n input.referenceExposure,\n input.capabilities\n );\n const manualAperture =\n requirePositiveFinite(\n input.manualAperture,\n \"manualAperture\"\n );\n validateSettingAgainstGrid(\n manualAperture,\n input.capabilities.aperture\n .widestAvailableFNumber,\n input.capabilities.aperture\n .narrowestAvailableFNumber,\n input.capabilities.aperture\n .settingGrid,\n \"manualAperture\"\n );\n\n const policy = input.policy;\n if (\n policy.kind !==\n \"minimum-iso-until-slowest-preferred-shutter\" ||\n policy.isoBaseline !==\n \"minimum-selectable\" ||\n policy.isoQuantizationPolicy !==\n \"nearest-log2-lower-on-tie\" ||\n policy.shutterSelectionPolicy !==\n \"not-longer-than-target\" ||\n (policy.afterMaximumIso !==\n \"allow-slower-shutter\" &&\n policy.afterMaximumIso !==\n \"hold-preferred-shutter\")\n ) {\n throw new InvalidConfigurationError(\n \"Aperture Priority Auto ISO policy is invalid.\"\n );\n }\n\n const slowestPreferred =\n requirePositiveFinite(\n policy.slowestPreferredShutterSeconds,\n \"policy.slowestPreferredShutterSeconds\"\n );\n if (\n slowestPreferred <\n input.capabilities.shutter\n .minimumSeconds ||\n slowestPreferred >\n input.capabilities.shutter\n .maximumSeconds\n ) {\n throw new InvalidScientificInputError(\n \"policy.slowestPreferredShutterSeconds lies outside the resolved shutter capability range.\"\n );\n }\n const autoBounds =\n autoIsoBounds(\n input.capabilities,\n policy.autoIsoLimits,\n \"policy.autoIsoLimits\"\n );\n\n const availability =\n validateAutoIsoAvailability(\n input.capabilities\n );\n const commonBlocked = (\n blocker:\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n | \"target-no-signal\"\n ): AperturePriorityAutoIsoExposureModeResolution => {\n const raw = buildPriorityAutoIsoBlocked(\n \"aperture-priority\",\n target,\n referenceExposure,\n blocker,\n { aperture: manualAperture }\n );\n return {\n ...raw,\n axisOwnership: {\n aperture: \"manual\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n manualAperture,\n policy,\n apertureMutatedByResolver: false,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n };\n\n if (availability !== \"supported\") {\n return commonBlocked(\n availability === \"unknown\"\n ? \"auto-iso-unknown\"\n : \"auto-iso-unsupported\"\n );\n }\n if (target.status === \"no-signal\") {\n return commonBlocked(\n \"target-no-signal\"\n );\n }\n\n const baselineIso =\n minimumSelectableIso(\n input.capabilities,\n autoBounds\n );\n const factorAtReferenceShutter =\n opticalExposureFactor(\n manualAperture,\n referenceExposure\n .shutterSeconds,\n referenceExposure\n ) *\n (baselineIso /\n referenceExposure.iso);\n const idealAtBaseline =\n referenceExposure\n .shutterSeconds *\n (target\n .requiredExposureScaleToTarget /\n factorAtReferenceShutter);\n if (\n !Number.isFinite(idealAtBaseline) ||\n idealAtBaseline <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Ideal Aperture Priority shutter duration at baseline ISO must remain finite and greater than zero.\"\n );\n }\n\n const desiredPreferred =\n Math.min(\n idealAtBaseline,\n slowestPreferred\n );\n let shutter =\n selectShutterNotLongerThanTarget(\n desiredPreferred,\n input.capabilities\n );\n\n const isoPass =\n resolveManualExposureMode({\n target,\n capabilities:\n input.capabilities,\n referenceExposure,\n manualAperture,\n manualShutterSeconds:\n shutter.shutterSeconds,\n isoControl: {\n kind: \"automatic\",\n quantizationPolicy:\n policy.isoQuantizationPolicy,\n ...(policy.autoIsoLimits ===\n undefined\n ? {}\n : {\n autoIsoLimits:\n policy.autoIsoLimits\n })\n }\n });\n\n if (\n isoPass.status !== \"resolved\" ||\n isoPass.isoControl !== \"automatic\"\n ) {\n throw new InvalidScientificInputError(\n \"Aperture Priority Auto ISO could not resolve its ISO pass.\"\n );\n }\n\n let fallbackUsed = false;\n let shutterSelectionPolicy:\n | \"not-longer-than-target\"\n | \"nearest-log2-shorter-on-tie\" =\n \"not-longer-than-target\";\n\n if (\n isoPass.isoResolution.clamped ===\n \"maximum\" &&\n isoPass.targetResidual.state ===\n \"under-target\" &&\n policy.afterMaximumIso ===\n \"allow-slower-shutter\"\n ) {\n const maxIso =\n isoPass.resolvedSettings.iso;\n const fixedAtReference =\n opticalExposureFactor(\n manualAperture,\n referenceExposure\n .shutterSeconds,\n referenceExposure\n ) *\n (maxIso /\n referenceExposure.iso);\n const fallbackIdeal =\n referenceExposure\n .shutterSeconds *\n (target\n .requiredExposureScaleToTarget /\n fixedAtReference);\n shutter =\n resolveAutomaticShutter(\n fallbackIdeal,\n input.capabilities\n );\n fallbackUsed = true;\n shutterSelectionPolicy =\n \"nearest-log2-shorter-on-tie\";\n const achievedScale =\n opticalExposureFactor(\n manualAperture,\n shutter.shutterSeconds,\n referenceExposure\n ) *\n (maxIso /\n referenceExposure.iso);\n const residual =\n targetResidual(\n target,\n achievedScale,\n shutter.limitingConstraint\n );\n\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"aperture-priority\",\n status: \"resolved\",\n axisOwnership: {\n aperture: \"manual\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n manualAperture,\n policy,\n baselineIso,\n idealShutterAtBaselineIsoSeconds:\n idealAtBaseline,\n preferredShutterSeconds:\n desiredPreferred,\n afterMaximumIsoFallbackUsed:\n fallbackUsed,\n resolvedSettings: {\n aperture: manualAperture,\n shutterSeconds:\n shutter.shutterSeconds,\n iso: maxIso\n },\n shutterResolution: {\n kind: shutter.kind,\n quantized:\n shutter.quantized,\n clamped:\n shutter.clamped,\n selectionPolicy:\n shutterSelectionPolicy\n },\n idealIsoBeforeConstraints:\n isoPass\n .idealIsoBeforeConstraints,\n isoResolution:\n isoPass.isoResolution,\n targetResidual: residual,\n apertureMutatedByResolver: false,\n shutterResolvedByResolver: true,\n isoResolvedByResolver: true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n }\n\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"aperture-priority\",\n status: \"resolved\",\n axisOwnership: {\n aperture: \"manual\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n manualAperture,\n policy,\n baselineIso,\n idealShutterAtBaselineIsoSeconds:\n idealAtBaseline,\n preferredShutterSeconds:\n desiredPreferred,\n afterMaximumIsoFallbackUsed:\n fallbackUsed,\n resolvedSettings:\n isoPass.resolvedSettings,\n shutterResolution: {\n kind: shutter.kind,\n quantized:\n shutter.quantized,\n clamped:\n shutter.clamped,\n selectionPolicy:\n shutterSelectionPolicy\n },\n idealIsoBeforeConstraints:\n isoPass\n .idealIsoBeforeConstraints,\n isoResolution:\n isoPass.isoResolution,\n targetResidual:\n isoPass.targetResidual,\n apertureMutatedByResolver: false,\n shutterResolvedByResolver: true,\n isoResolvedByResolver: true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n}\n\n/**\n * Shutter Priority. Keeps the shutter fixed and chooses the aperture, plus optional Auto ISO, within\n * exactly what the equipment can do.\n *\n * Every exposure mode applies its control policy to one shared relative exposure equation, with an\n * explicit reference anchor. Exposure compensation is already part of the frozen meter target. Manual\n * settings are never changed. Automatic settings snap to the declared setting grids, and the result\n * reports the signed leftover (residual) stops and any limits hit. A target with zero signal cannot\n * be used to make up an exposure.\n * @param input - ResolveShutterPriorityExposureModeInput. See that type for coordinates, units and profile binding.\n * @returns ShutterPriorityExposureModeResolution. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function resolveShutterPriorityExposureMode(\n input:\n ResolveShutterPriorityExposureModeInput\n): ShutterPriorityExposureModeResolution {\n requireInputKeys(input, \"resolveShutterPriorityExposureMode\", [\"target\", \"capabilities\", \"referenceExposure\", \"manualShutterSeconds\", \"isoControl\"]);\n requireRecord(input.isoControl, \"isoControl\");\n const target = validateTarget(input.target);\n validateCapabilities(input.capabilities);\n const referenceExposure =\n validateReferenceExposure(\n input.referenceExposure,\n input.capabilities\n );\n const manualShutterSeconds =\n requirePositiveFinite(\n input.manualShutterSeconds,\n \"manualShutterSeconds\"\n );\n validateSettingAgainstGrid(\n manualShutterSeconds,\n input.capabilities.shutter\n .minimumSeconds,\n input.capabilities.shutter\n .maximumSeconds,\n input.capabilities.shutter\n .settingGrid,\n \"manualShutterSeconds\"\n );\n\n const base: ShutterPriorityResolutionBase = {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"shutter-priority\",\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n manualShutterSeconds,\n shutterMutatedByResolver: false,\n apertureResolvedByResolver: true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n\n if (input.isoControl.kind === \"manual\") {\n const manualIso =\n requirePositiveFinite(\n input.isoControl.iso,\n \"isoControl.iso\"\n );\n validateSettingAgainstGrid(\n manualIso,\n input.capabilities.iso.minimum,\n input.capabilities.iso.maximum,\n input.capabilities.iso.settingGrid,\n \"isoControl.iso\"\n );\n if (\n input.isoControl\n .apertureQuantizationPolicy !==\n \"nearest-log2-narrower-on-tie\"\n ) {\n throw new InvalidConfigurationError(\n 'isoControl.apertureQuantizationPolicy must be \"nearest-log2-narrower-on-tie\".'\n );\n }\n if (target.status === \"no-signal\") {\n return {\n ...base,\n status: \"blocked\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"manual\",\n iso: \"manual\"\n },\n isoControl: \"manual\",\n resolvedSettings: {\n shutterSeconds:\n manualShutterSeconds\n },\n blocker: \"target-no-signal\",\n targetResidual: {\n status: \"target-unresolved\",\n state: \"target-unresolved\",\n reason: \"no-signal-target\"\n }\n };\n }\n\n const idealAperture =\n idealApertureForTarget(\n target\n .requiredExposureScaleToTarget,\n manualShutterSeconds,\n manualIso,\n referenceExposure\n );\n const aperture =\n resolveAutomaticAperture(\n idealAperture,\n input.capabilities\n );\n const achievedScale =\n opticalExposureFactor(\n aperture.aperture,\n manualShutterSeconds,\n referenceExposure\n ) *\n (manualIso /\n referenceExposure.iso);\n\n return {\n ...base,\n status: \"resolved\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"manual\",\n iso: \"manual\"\n },\n isoControl: \"manual\",\n manualIso,\n idealApertureBeforeConstraints:\n idealAperture,\n resolvedSettings: {\n aperture:\n aperture.aperture,\n shutterSeconds:\n manualShutterSeconds,\n iso: manualIso\n },\n apertureResolution: {\n kind: aperture.kind,\n quantizationPolicy:\n input.isoControl\n .apertureQuantizationPolicy,\n quantized:\n aperture.quantized,\n clamped:\n aperture.clamped\n },\n targetResidual:\n targetResidual(\n target,\n achievedScale,\n aperture\n .limitingConstraint\n )\n };\n }\n\n if (\n input.isoControl.kind !==\n \"automatic\"\n ) {\n throw new InvalidConfigurationError(\n \"isoControl.kind is invalid for Shutter Priority.\"\n );\n }\n\n const policy =\n input.isoControl.policy;\n requireRecord(policy, \"isoControl.policy\");\n if (\n policy.kind !==\n \"minimum-iso-aperture-first\" ||\n policy.isoBaseline !==\n \"minimum-selectable\" ||\n policy.isoQuantizationPolicy !==\n \"nearest-log2-lower-on-tie\" ||\n policy.apertureSelectionPolicy !==\n \"not-wider-than-target\"\n ) {\n throw new InvalidConfigurationError(\n \"Shutter Priority Auto ISO policy is invalid.\"\n );\n }\n const autoBounds =\n autoIsoBounds(\n input.capabilities,\n policy.autoIsoLimits,\n \"isoControl.policy.autoIsoLimits\"\n );\n\n const availability =\n validateAutoIsoAvailability(\n input.capabilities\n );\n if (\n availability !== \"supported\"\n ) {\n const raw = buildPriorityAutoIsoBlocked(\n \"shutter-priority\",\n target,\n referenceExposure,\n availability === \"unknown\"\n ? \"auto-iso-unknown\"\n : \"auto-iso-unsupported\",\n {\n shutterSeconds:\n manualShutterSeconds\n }\n );\n return {\n ...base,\n ...raw,\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"manual\",\n iso: \"automatic\"\n },\n isoControl: \"automatic\"\n };\n }\n if (target.status === \"no-signal\") {\n return {\n ...base,\n status: \"blocked\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"manual\",\n iso: \"automatic\"\n },\n isoControl: \"automatic\",\n resolvedSettings: {\n shutterSeconds:\n manualShutterSeconds\n },\n blocker: \"target-no-signal\",\n targetResidual: {\n status: \"target-unresolved\",\n state: \"target-unresolved\",\n reason: \"no-signal-target\"\n }\n };\n }\n\n const baselineIso =\n minimumSelectableIso(\n input.capabilities,\n autoBounds\n );\n const idealAtBaseline =\n idealApertureForTarget(\n target\n .requiredExposureScaleToTarget,\n manualShutterSeconds,\n baselineIso,\n referenceExposure\n );\n const aperture =\n selectApertureNotWiderThanTarget(\n idealAtBaseline,\n input.capabilities\n );\n const isoPass =\n resolveManualExposureMode({\n target,\n capabilities:\n input.capabilities,\n referenceExposure,\n manualAperture:\n aperture.aperture,\n manualShutterSeconds,\n isoControl: {\n kind: \"automatic\",\n quantizationPolicy:\n policy.isoQuantizationPolicy,\n ...(policy.autoIsoLimits ===\n undefined\n ? {}\n : {\n autoIsoLimits:\n policy.autoIsoLimits\n })\n }\n });\n\n if (\n isoPass.status !== \"resolved\" ||\n isoPass.isoControl !== \"automatic\"\n ) {\n throw new InvalidScientificInputError(\n \"Shutter Priority Auto ISO could not resolve its ISO pass.\"\n );\n }\n\n return {\n ...base,\n status: \"resolved\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"manual\",\n iso: \"automatic\"\n },\n isoControl: \"automatic\",\n policy,\n baselineIso,\n idealApertureAtBaselineIso:\n idealAtBaseline,\n resolvedSettings:\n isoPass.resolvedSettings,\n apertureResolution: {\n kind: aperture.kind,\n quantized:\n aperture.quantized,\n clamped:\n aperture.clamped,\n selectionPolicy:\n policy.apertureSelectionPolicy\n },\n idealIsoBeforeConstraints:\n isoPass\n .idealIsoBeforeConstraints,\n isoResolution:\n isoPass.isoResolution,\n targetResidual:\n isoPass.targetResidual\n };\n}\n\n/**\n * Program auto exposure. Follows the declared generic program line in log2 exposure space, snaps\n * aperture and shutter to their grids, and can use Auto ISO for any exposure left over.\n *\n * Every exposure mode applies its control policy to one shared relative exposure equation, with an\n * explicit reference anchor. Exposure compensation is already part of the frozen meter target. Manual\n * settings are never changed. Automatic settings snap to the declared setting grids, and the result\n * reports the signed leftover (residual) stops and any limits hit. A target with zero signal cannot\n * be used to make up an exposure.\n * @param input - ResolveProgramAutoExposureModeInput. See that type for coordinates, units and profile binding.\n * @returns ProgramAutoExposureModeResolution. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function resolveProgramAutoExposureMode(\n input:\n ResolveProgramAutoExposureModeInput\n): ProgramAutoExposureModeResolution {\n requireInputKeys(input, \"resolveProgramAutoExposureMode\", [\"target\", \"capabilities\", \"referenceExposure\", \"programLine\", \"isoControl\"]);\n requireRecord(input.isoControl, \"isoControl\");\n const target =\n validateTarget(input.target);\n validateCapabilities(\n input.capabilities\n );\n const referenceExposure =\n validateReferenceExposure(\n input.referenceExposure,\n input.capabilities\n );\n const programLine =\n validateProgramLineForResolution(\n input.programLine,\n referenceExposure,\n input.capabilities\n );\n\n if (\n input.isoControl.kind !==\n \"manual\" &&\n input.isoControl.kind !==\n \"automatic\"\n ) {\n throw new InvalidConfigurationError(\n \"isoControl.kind is invalid for Program Auto.\"\n );\n }\n\n if (target.status === \"no-signal\") {\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"program-auto\",\n status: \"blocked\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"automatic\",\n iso:\n input.isoControl.kind ===\n \"manual\"\n ? \"manual\"\n : \"automatic\"\n },\n isoControl:\n input.isoControl.kind,\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n blocker: \"target-no-signal\",\n targetResidual: {\n status: \"target-unresolved\",\n state: \"target-unresolved\",\n reason: \"no-signal-target\"\n },\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n }\n\n if (\n input.isoControl.kind ===\n \"manual\"\n ) {\n const manualIso =\n requirePositiveFinite(\n input.isoControl.iso,\n \"isoControl.iso\"\n );\n validateSettingAgainstGrid(\n manualIso,\n input.capabilities.iso.minimum,\n input.capabilities.iso.maximum,\n input.capabilities.iso.settingGrid,\n \"isoControl.iso\"\n );\n\n const requestedOpticalStops =\n target\n .exposureOffsetStopsToTarget -\n Math.log2(\n manualIso /\n referenceExposure.iso\n );\n const selection =\n selectProgramLineSettings(\n requestedOpticalStops,\n programLine,\n input.capabilities\n );\n const achievedScale =\n opticalExposureFactor(\n selection.resolvedAperture,\n selection\n .resolvedShutterSeconds,\n referenceExposure\n ) *\n (manualIso /\n referenceExposure.iso);\n\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"program-auto\",\n status: \"resolved\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"automatic\",\n iso: \"manual\"\n },\n isoControl: \"manual\",\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n programLineSelection:\n selection,\n apertureResolvedByResolver:\n true,\n shutterResolvedByResolver:\n true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false,\n manualIso,\n resolvedSettings: {\n aperture:\n selection\n .resolvedAperture,\n shutterSeconds:\n selection\n .resolvedShutterSeconds,\n iso: manualIso\n },\n targetResidual:\n targetResidual(\n target,\n achievedScale,\n programLineResidualConstraint(\n selection\n )\n )\n };\n }\n\n if (\n input.isoControl\n .isoBaseline !==\n \"minimum-selectable\" ||\n input.isoControl\n .isoQuantizationPolicy !==\n \"nearest-log2-lower-on-tie\"\n ) {\n throw new InvalidConfigurationError(\n \"Program Auto ISO policy is invalid.\"\n );\n }\n const autoBounds =\n autoIsoBounds(\n input.capabilities,\n input.isoControl\n .autoIsoLimits,\n \"isoControl.autoIsoLimits\"\n );\n const holdPolicy =\n validateProgramSlowestPreferredShutter(\n input.isoControl\n .slowestPreferredShutter,\n input.capabilities\n );\n\n const availability =\n validateAutoIsoAvailability(\n input.capabilities\n );\n if (availability !== \"supported\") {\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"program-auto\",\n status: \"blocked\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n isoControl: \"automatic\",\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n blocker:\n availability === \"unknown\"\n ? \"auto-iso-unknown\"\n : \"auto-iso-unsupported\",\n targetResidual: {\n status: \"target-unresolved\",\n state: \"target-unresolved\",\n reason:\n \"auto-iso-unavailable\"\n },\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false\n };\n }\n\n const baselineIso =\n minimumSelectableIso(\n input.capabilities,\n autoBounds\n );\n const requestedOpticalStops =\n target\n .exposureOffsetStopsToTarget -\n Math.log2(\n baselineIso /\n referenceExposure.iso\n );\n const selection =\n selectProgramLineSettings(\n requestedOpticalStops,\n programLine,\n input.capabilities\n );\n const isoControl =\n input.isoControl;\n const autoIsoPass = (\n shutterSeconds: number\n ): Extract<\n ManualExposureModeResolution,\n { status: \"resolved\"; isoControl: \"automatic\" }\n > => {\n const pass =\n resolveManualExposureMode({\n target,\n capabilities:\n input.capabilities,\n referenceExposure,\n manualAperture:\n selection.resolvedAperture,\n manualShutterSeconds:\n shutterSeconds,\n isoControl: {\n kind: \"automatic\",\n quantizationPolicy:\n isoControl\n .isoQuantizationPolicy,\n ...(isoControl\n .autoIsoLimits ===\n undefined\n ? {}\n : {\n autoIsoLimits:\n isoControl\n .autoIsoLimits\n })\n }\n });\n if (\n pass.status !== \"resolved\" ||\n pass.isoControl !== \"automatic\"\n ) {\n throw new InvalidScientificInputError(\n \"Program Auto could not resolve its Auto ISO pass.\"\n );\n }\n return pass;\n };\n\n // #504: hold the line's shutter at or faster than the slowest preferred shutter before the ISO rises.\n const lineShutterSeconds =\n selection\n .resolvedShutterSeconds;\n const holdApplied =\n holdPolicy !== undefined &&\n lineShutterSeconds >\n holdPolicy\n .slowestPreferredShutterSeconds &&\n !settingEquals(\n lineShutterSeconds,\n holdPolicy\n .slowestPreferredShutterSeconds\n );\n const heldShutterSeconds =\n holdApplied\n ? selectShutterNotLongerThanTarget(\n holdPolicy!\n .slowestPreferredShutterSeconds,\n input.capabilities\n ).shutterSeconds\n : lineShutterSeconds;\n const isoPass =\n autoIsoPass(\n heldShutterSeconds\n );\n let resolvedSettings =\n isoPass.resolvedSettings;\n let residual =\n isoPass.targetResidual;\n let fallbackUsed = false;\n if (\n holdApplied &&\n holdPolicy!.afterMaximumIso ===\n \"allow-slower-shutter\" &&\n isoPass.isoResolution.clamped ===\n \"maximum\" &&\n isoPass.targetResidual.state ===\n \"under-target\"\n ) {\n // At the Auto ISO maximum the shutter may lengthen toward the target, but not past the line's own shutter.\n const maxIso =\n isoPass.resolvedSettings.iso;\n const atReference =\n opticalExposureFactor(\n selection.resolvedAperture,\n referenceExposure\n .shutterSeconds,\n referenceExposure\n ) *\n (maxIso /\n referenceExposure.iso);\n const idealShutter =\n referenceExposure\n .shutterSeconds *\n (target\n .requiredExposureScaleToTarget /\n atReference);\n const beyondLine =\n idealShutter >=\n lineShutterSeconds;\n const shutter =\n beyondLine\n ? {\n shutterSeconds:\n lineShutterSeconds,\n limitingConstraint:\n isoPass.targetResidual\n .limitingConstraint\n }\n : resolveAutomaticShutter(\n idealShutter,\n input.capabilities\n );\n fallbackUsed = true;\n resolvedSettings = {\n aperture:\n selection.resolvedAperture,\n shutterSeconds:\n shutter.shutterSeconds,\n iso: maxIso\n };\n residual =\n targetResidual(\n target,\n opticalExposureFactor(\n selection.resolvedAperture,\n shutter.shutterSeconds,\n referenceExposure\n ) *\n (maxIso /\n referenceExposure.iso),\n shutter.limitingConstraint\n );\n }\n\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode: \"program-auto\",\n status: \"resolved\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n isoControl: \"automatic\",\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n programLineSelection:\n selection,\n apertureResolvedByResolver: true,\n shutterResolvedByResolver: true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver: false,\n flashPolicyApplied: false,\n safetyShiftApplied: false,\n baselineIso,\n idealIsoBeforeConstraints:\n isoPass\n .idealIsoBeforeConstraints,\n isoResolution:\n isoPass.isoResolution,\n resolvedSettings,\n targetResidual: residual,\n ...(holdPolicy === undefined\n ? {}\n : {\n slowestPreferredShutter: {\n ...holdPolicy,\n applied: holdApplied,\n afterMaximumIsoFallbackUsed:\n fallbackUsed\n }\n })\n };\n}\n\nfunction validateProgramSlowestPreferredShutter(\n value: unknown,\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities\n): ProgramSlowestPreferredShutterPolicy | undefined {\n if (value === undefined) {\n return undefined;\n }\n const record = requireRecord(\n value,\n \"isoControl.slowestPreferredShutter\"\n );\n rejectUnknownFields(\n record,\n [\"slowestPreferredShutterSeconds\", \"afterMaximumIso\"],\n \"isoControl.slowestPreferredShutter\"\n );\n if (\n record.afterMaximumIso !==\n \"allow-slower-shutter\" &&\n record.afterMaximumIso !==\n \"hold-preferred-shutter\"\n ) {\n throw new InvalidConfigurationError(\n 'isoControl.slowestPreferredShutter.afterMaximumIso must be \"allow-slower-shutter\" or \"hold-preferred-shutter\".'\n );\n }\n const seconds =\n requirePositiveFinite(\n record.slowestPreferredShutterSeconds,\n \"isoControl.slowestPreferredShutter.slowestPreferredShutterSeconds\"\n );\n if (\n seconds <\n capabilities.shutter\n .minimumSeconds ||\n seconds >\n capabilities.shutter\n .maximumSeconds\n ) {\n throw new InvalidScientificInputError(\n \"isoControl.slowestPreferredShutter.slowestPreferredShutterSeconds lies outside the resolved shutter capability range.\"\n );\n }\n return {\n slowestPreferredShutterSeconds:\n seconds,\n afterMaximumIso:\n record.afterMaximumIso\n };\n}\n\n/**\n * Full Auto. Chooses aperture, shutter and ISO under an explicit generic Full Auto exposure policy.\n * Autofocus, white balance (WB), flash, drive mode and scene recognition are not resolved.\n *\n * Every exposure mode applies its control policy to one shared relative exposure equation, with an\n * explicit reference anchor. Exposure compensation is already part of the frozen meter target. Manual\n * settings are never changed. Automatic settings snap to the declared setting grids, and the result\n * reports the signed leftover (residual) stops and any limits hit. A target with zero signal cannot\n * be used to make up an exposure.\n * @param input - ResolveFullAutoExposureModeInput. See that type for coordinates, units and profile binding.\n * @returns FullAutoExposureModeResolution. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function resolveFullAutoExposureMode(\n input:\n ResolveFullAutoExposureModeInput\n): FullAutoExposureModeResolution {\n requireInputKeys(input, \"resolveFullAutoExposureMode\", [\"target\", \"capabilities\", \"referenceExposure\", \"policy\"]);\n requireRecord(input.policy, \"policy\");\n const target =\n validateTarget(input.target);\n validateCapabilities(\n input.capabilities\n );\n const referenceExposure =\n validateReferenceExposure(\n input.referenceExposure,\n input.capabilities\n );\n\n if (\n input.policy.kind !==\n \"generic-program-line-minimum-iso\" ||\n input.policy.isoBaseline !==\n \"minimum-selectable\" ||\n input.policy\n .isoQuantizationPolicy !==\n \"nearest-log2-lower-on-tie\"\n ) {\n throw new InvalidConfigurationError(\n \"Full Auto exposure policy is invalid.\"\n );\n }\n const autoBounds =\n autoIsoBounds(\n input.capabilities,\n input.policy.autoIsoLimits,\n \"policy.autoIsoLimits\"\n );\n\n const programLine =\n validateProgramLineForResolution(\n input.policy.programLine,\n referenceExposure,\n input.capabilities\n );\n\n const blocked = (\n blocker:\n | \"target-no-signal\"\n | \"auto-iso-unsupported\"\n | \"auto-iso-unknown\"\n ): FullAutoExposureModeResolution => ({\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode:\n \"full-auto-exposure\",\n status: \"blocked\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n policy: input.policy,\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n blocker,\n targetResidual: {\n status: \"target-unresolved\",\n state: \"target-unresolved\",\n reason:\n blocker ===\n \"target-no-signal\"\n ? \"no-signal-target\"\n : \"auto-iso-unavailable\"\n },\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false,\n autofocusResolved: false,\n whiteBalanceResolved: false,\n flashResolved: false,\n driveResolved: false,\n sceneRecognitionResolved:\n false,\n stabilizationPolicyResolved:\n false\n });\n\n if (target.status === \"no-signal\") {\n return blocked(\n \"target-no-signal\"\n );\n }\n\n const availability =\n validateAutoIsoAvailability(\n input.capabilities\n );\n if (availability !== \"supported\") {\n return blocked(\n availability === \"unknown\"\n ? \"auto-iso-unknown\"\n : \"auto-iso-unsupported\"\n );\n }\n\n const baselineIso =\n minimumSelectableIso(\n input.capabilities,\n autoBounds\n );\n const requestedOpticalStops =\n target\n .exposureOffsetStopsToTarget -\n Math.log2(\n baselineIso /\n referenceExposure.iso\n );\n const selection =\n selectProgramLineSettings(\n requestedOpticalStops,\n programLine,\n input.capabilities\n );\n const isoPass =\n resolveManualExposureMode({\n target,\n capabilities:\n input.capabilities,\n referenceExposure,\n manualAperture:\n selection.resolvedAperture,\n manualShutterSeconds:\n selection\n .resolvedShutterSeconds,\n isoControl: {\n kind: \"automatic\",\n quantizationPolicy:\n input.policy\n .isoQuantizationPolicy,\n ...(input.policy\n .autoIsoLimits ===\n undefined\n ? {}\n : {\n autoIsoLimits:\n input.policy\n .autoIsoLimits\n })\n }\n });\n\n if (\n isoPass.status !== \"resolved\" ||\n isoPass.isoControl !== \"automatic\"\n ) {\n throw new InvalidScientificInputError(\n \"Full Auto exposure could not resolve its Auto ISO pass.\"\n );\n }\n\n return {\n resolverVersion:\n EXPOSURE_MODE_RESOLVER_VERSION,\n mode:\n \"full-auto-exposure\",\n status: \"resolved\",\n axisOwnership: {\n aperture: \"automatic\",\n shutter: \"automatic\",\n iso: \"automatic\"\n },\n policy: input.policy,\n targetId: target.targetId,\n targetSourceMeterSnapshot:\n target.sourceMeterSnapshot,\n referenceExposure,\n programLineSelection:\n selection,\n apertureResolvedByResolver: true,\n shutterResolvedByResolver: true,\n exposureCompensationAppliedByResolver:\n false,\n meterRecomputedByResolver:\n false,\n flashPolicyApplied: false,\n safetyShiftApplied: false,\n baselineIso,\n idealIsoBeforeConstraints:\n isoPass\n .idealIsoBeforeConstraints,\n isoResolution:\n isoPass.isoResolution,\n resolvedSettings:\n isoPass.resolvedSettings,\n targetResidual:\n isoPass.targetResidual,\n autofocusResolved: false,\n whiteBalanceResolved: false,\n flashResolved: false,\n driveResolved: false,\n sceneRecognitionResolved:\n false,\n stabilizationPolicyResolved:\n false\n };\n}\n\n"]}