@photivra/engine 1.4.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +401 -6
- package/CITATION.cff +1 -1
- package/NODE_SUPPORT.md +64 -12
- package/README.md +301 -182
- package/SECURITY.md +37 -28
- package/THIRD_PARTY.md +148 -4
- package/dist/camera/equivalent-focal-length.d.ts +13 -14
- package/dist/camera/equivalent-focal-length.js +15 -13
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +30 -19
- package/dist/camera/field-of-view.js +67 -18
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/lens-projection.d.ts +170 -0
- package/dist/camera/lens-projection.js +444 -0
- package/dist/camera/lens-projection.js.map +1 -0
- package/dist/camera/projected-object-size.d.ts +10 -11
- package/dist/camera/projected-object-size.js +12 -10
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +9 -10
- package/dist/capture/capture-export-metadata.js +8 -5
- package/dist/capture/capture-export-metadata.js.map +1 -1
- package/dist/capture/dng-import.d.ts +91 -0
- package/dist/capture/dng-import.js +343 -0
- package/dist/capture/dng-import.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +37 -17
- package/dist/capture/environment-raw-producer.js +43 -19
- package/dist/capture/environment-raw-producer.js.map +1 -1
- package/dist/capture/export-jpeg.d.ts +35 -4
- package/dist/capture/export-jpeg.js +133 -47
- package/dist/capture/export-jpeg.js.map +1 -1
- package/dist/capture/export-tiff.d.ts +48 -24
- package/dist/capture/export-tiff.js +91 -31
- package/dist/capture/export-tiff.js.map +1 -1
- package/dist/capture/focus-control.d.ts +42 -65
- package/dist/capture/focus-control.js +56 -75
- package/dist/capture/focus-control.js.map +1 -1
- package/dist/capture/host-yield-cadence.d.ts +25 -0
- package/dist/capture/host-yield-cadence.js +25 -0
- package/dist/capture/host-yield-cadence.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +14 -12
- package/dist/capture/linear-encoding.js +14 -13
- package/dist/capture/linear-encoding.js.map +1 -1
- package/dist/capture/lossless-jpeg.d.ts +27 -0
- package/dist/capture/lossless-jpeg.js +237 -0
- package/dist/capture/lossless-jpeg.js.map +1 -0
- package/dist/capture/native-environment-lean.d.ts +227 -0
- package/dist/capture/native-environment-lean.js +974 -0
- package/dist/capture/native-environment-lean.js.map +1 -0
- package/dist/capture/native-environment-optical-stage.d.ts +97 -0
- package/dist/capture/native-environment-optical-stage.js +340 -0
- package/dist/capture/native-environment-optical-stage.js.map +1 -0
- package/dist/capture/native-environment-raw.d.ts +140 -6
- package/dist/capture/native-environment-raw.js +435 -34
- package/dist/capture/native-environment-raw.js.map +1 -1
- package/dist/capture/native-raw-development.d.ts +118 -5
- package/dist/capture/native-raw-development.js +224 -59
- package/dist/capture/native-raw-development.js.map +1 -1
- package/dist/capture/native-raw-dng.d.ts +60 -0
- package/dist/capture/native-raw-dng.js +167 -0
- package/dist/capture/native-raw-dng.js.map +1 -0
- package/dist/capture/native-raw.d.ts +67 -10
- package/dist/capture/native-raw.js +90 -24
- package/dist/capture/native-raw.js.map +1 -1
- package/dist/capture/packed-sensor-raw.d.ts +160 -0
- package/dist/capture/packed-sensor-raw.js +221 -0
- package/dist/capture/packed-sensor-raw.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +58 -35
- package/dist/capture/photographic-export.js +177 -70
- package/dist/capture/photographic-export.js.map +1 -1
- package/dist/capture/raw-development-kernel.d.ts +52 -0
- package/dist/capture/raw-development-kernel.js +88 -0
- package/dist/capture/raw-development-kernel.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +7 -7
- package/dist/capture/raw-frame-limits.js +7 -6
- package/dist/capture/raw-frame-limits.js.map +1 -1
- package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
- package/dist/capture/raw-frame-reconstruction.js +9 -8
- package/dist/capture/raw-frame-reconstruction.js.map +1 -1
- package/dist/capture/raw-white-level.d.ts +55 -0
- package/dist/capture/raw-white-level.js +165 -0
- package/dist/capture/raw-white-level.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +5 -7
- package/dist/capture/release-sequence.js +15 -13
- package/dist/capture/release-sequence.js.map +1 -1
- package/dist/capture/sensor-raw-frame.d.ts +5 -6
- package/dist/capture/sensor-raw-frame.js +26 -9
- package/dist/capture/sensor-raw-frame.js.map +1 -1
- package/dist/capture/sensor-raw-producer.d.ts +21 -13
- package/dist/capture/sensor-raw-producer.js +86 -25
- package/dist/capture/sensor-raw-producer.js.map +1 -1
- package/dist/capture/simulated-capture.d.ts +15 -16
- package/dist/capture/simulated-capture.js +22 -12
- package/dist/capture/simulated-capture.js.map +1 -1
- package/dist/color/camera-color-matrix.d.ts +69 -0
- package/dist/color/camera-color-matrix.js +132 -0
- package/dist/color/camera-color-matrix.js.map +1 -0
- package/dist/color/capture-color.d.ts +17 -10
- package/dist/color/capture-color.js +50 -17
- package/dist/color/capture-color.js.map +1 -1
- package/dist/color/chromatic-adaptation.d.ts +63 -0
- package/dist/color/chromatic-adaptation.js +91 -0
- package/dist/color/chromatic-adaptation.js.map +1 -0
- package/dist/color/color-difference.d.ts +104 -0
- package/dist/color/color-difference.js +205 -0
- package/dist/color/color-difference.js.map +1 -0
- package/dist/color/color-matching-functions.d.ts +168 -0
- package/dist/color/color-matching-functions.js +309 -0
- package/dist/color/color-matching-functions.js.map +1 -0
- package/dist/color/colorimetry-math.d.ts +52 -0
- package/dist/color/colorimetry-math.js +144 -0
- package/dist/color/colorimetry-math.js.map +1 -0
- package/dist/color/gamut-mapping.d.ts +54 -0
- package/dist/color/gamut-mapping.js +107 -0
- package/dist/color/gamut-mapping.js.map +1 -0
- package/dist/color/illuminants.d.ts +182 -0
- package/dist/color/illuminants.js +434 -0
- package/dist/color/illuminants.js.map +1 -0
- package/dist/color/rgb-color-spaces.d.ts +79 -0
- package/dist/color/rgb-color-spaces.js +115 -0
- package/dist/color/rgb-color-spaces.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +33 -11
- package/dist/color/sensor-color-development.js +104 -30
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/color/srgb-icc.d.ts +9 -2
- package/dist/color/srgb-icc.js +16 -5
- package/dist/color/srgb-icc.js.map +1 -1
- package/dist/color/srgb-transfer.d.ts +1 -2
- package/dist/color/srgb-transfer.js +1 -1
- package/dist/color/srgb-transfer.js.map +1 -1
- package/dist/color/white-balance.d.ts +68 -19
- package/dist/color/white-balance.js +168 -35
- package/dist/color/white-balance.js.map +1 -1
- package/dist/composition/image-formation-plan.d.ts +152 -128
- package/dist/composition/image-formation-plan.js +292 -138
- package/dist/composition/image-formation-plan.js.map +1 -1
- package/dist/composition/plan-consumer.d.ts +6 -7
- package/dist/composition/plan-consumer.js +14 -11
- package/dist/composition/plan-consumer.js.map +1 -1
- package/dist/core/calculation-result.d.ts +21 -14
- package/dist/core/calculation-result.js +209 -11
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +13 -8
- package/dist/core/canonical-json.js +34 -15
- package/dist/core/canonical-json.js.map +1 -1
- package/dist/core/configuration-error.d.ts +5 -4
- package/dist/core/configuration-error.js +5 -3
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +12 -12
- package/dist/core/evidence-provenance.js +10 -9
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +11 -10
- package/dist/core/image-formation.js +11 -9
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +9 -17
- package/dist/core/owned-data.js +9 -16
- package/dist/core/owned-data.js.map +1 -1
- package/dist/core/portable-math.d.ts +15 -0
- package/dist/core/portable-math.js +56 -0
- package/dist/core/portable-math.js.map +1 -0
- package/dist/core/record-validation.d.ts +48 -9
- package/dist/core/record-validation.js +93 -19
- package/dist/core/record-validation.js.map +1 -1
- package/dist/core/scientific-assurance.d.ts +16 -14
- package/dist/core/scientific-assurance.js +22 -18
- package/dist/core/scientific-assurance.js.map +1 -1
- package/dist/core/spectral-composition.d.ts +13 -14
- package/dist/core/spectral-composition.js +30 -27
- package/dist/core/spectral-composition.js.map +1 -1
- package/dist/core/spectral.d.ts +5 -6
- package/dist/core/spectral.js +9 -7
- package/dist/core/spectral.js.map +1 -1
- package/dist/core/validation.d.ts +3 -6
- package/dist/core/validation.js +3 -5
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +6 -6
- package/dist/core/version.js +6 -5
- package/dist/core/version.js.map +1 -1
- package/dist/equipment/exposure-capabilities.d.ts +10 -10
- package/dist/equipment/exposure-capabilities.js +40 -30
- package/dist/equipment/exposure-capabilities.js.map +1 -1
- package/dist/equipment/generic-tier-assets.d.ts +13 -6
- package/dist/equipment/generic-tier-assets.js +34 -15
- package/dist/equipment/generic-tier-assets.js.map +1 -1
- package/dist/equipment/generic-tier-presets.d.ts +5 -6
- package/dist/equipment/generic-tier-presets.js +15 -13
- package/dist/equipment/generic-tier-presets.js.map +1 -1
- package/dist/equipment/iso-capabilities.d.ts +21 -22
- package/dist/equipment/iso-capabilities.js +49 -44
- package/dist/equipment/iso-capabilities.js.map +1 -1
- package/dist/equipment/metering-capabilities.d.ts +5 -6
- package/dist/equipment/metering-capabilities.js +22 -19
- package/dist/equipment/metering-capabilities.js.map +1 -1
- package/dist/equipment/release-capabilities.d.ts +3 -4
- package/dist/equipment/release-capabilities.js +18 -14
- package/dist/equipment/release-capabilities.js.map +1 -1
- package/dist/exposure/exposure-duration-control.d.ts +19 -17
- package/dist/exposure/exposure-duration-control.js +27 -23
- package/dist/exposure/exposure-duration-control.js.map +1 -1
- package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
- package/dist/exposure/exposure-mode-resolver.js +127 -82
- package/dist/exposure/exposure-mode-resolver.js.map +1 -1
- package/dist/exposure/exposure.d.ts +17 -16
- package/dist/exposure/exposure.js +22 -15
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash-ttl.d.ts +135 -0
- package/dist/exposure/flash-ttl.js +193 -0
- package/dist/exposure/flash-ttl.js.map +1 -0
- package/dist/exposure/flash.d.ts +144 -36
- package/dist/exposure/flash.js +259 -59
- package/dist/exposure/flash.js.map +1 -1
- package/dist/exposure/metering-scene-radiance.d.ts +10 -10
- package/dist/exposure/metering-scene-radiance.js +42 -23
- package/dist/exposure/metering-scene-radiance.js.map +1 -1
- package/dist/exposure/metering-target.d.ts +8 -8
- package/dist/exposure/metering-target.js +30 -20
- package/dist/exposure/metering-target.js.map +1 -1
- package/dist/exposure/metering-temporal.d.ts +16 -15
- package/dist/exposure/metering-temporal.js +41 -19
- package/dist/exposure/metering-temporal.js.map +1 -1
- package/dist/exposure/metering.d.ts +64 -17
- package/dist/exposure/metering.js +159 -30
- package/dist/exposure/metering.js.map +1 -1
- package/dist/exposure/program-line.d.ts +5 -5
- package/dist/exposure/program-line.js +20 -13
- package/dist/exposure/program-line.js.map +1 -1
- package/dist/facade/camera-preset.d.ts +8 -0
- package/dist/facade/camera-preset.js +102 -0
- package/dist/facade/camera-preset.js.map +1 -0
- package/dist/facade/chart-radiance-batch.d.ts +57 -0
- package/dist/facade/chart-radiance-batch.js +121 -0
- package/dist/facade/chart-radiance-batch.js.map +1 -0
- package/dist/facade/chart-scenes.d.ts +177 -0
- package/dist/facade/chart-scenes.js +232 -0
- package/dist/facade/chart-scenes.js.map +1 -0
- package/dist/facade/host-yield.d.ts +7 -0
- package/dist/facade/host-yield.js +23 -0
- package/dist/facade/host-yield.js.map +1 -0
- package/dist/facade/scene-radiance.d.ts +117 -0
- package/dist/facade/scene-radiance.js +205 -0
- package/dist/facade/scene-radiance.js.map +1 -0
- package/dist/facade/simulate-capture.d.ts +284 -0
- package/dist/facade/simulate-capture.js +1026 -0
- package/dist/facade/simulate-capture.js.map +1 -0
- package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
- package/dist/gpu/chart-radiance-gpu.js +176 -0
- package/dist/gpu/chart-radiance-gpu.js.map +1 -0
- package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
- package/dist/gpu/image-kernel-accelerator.js +720 -0
- package/dist/gpu/image-kernel-accelerator.js.map +1 -0
- package/dist/gpu/image-kernel-execution.d.ts +92 -0
- package/dist/gpu/image-kernel-execution.js +84 -0
- package/dist/gpu/image-kernel-execution.js.map +1 -0
- package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
- package/dist/gpu/sensor-stage-gpu.js +317 -0
- package/dist/gpu/sensor-stage-gpu.js.map +1 -0
- package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
- package/dist/gpu/temporal-sum-gpu.js +150 -0
- package/dist/gpu/temporal-sum-gpu.js.map +1 -0
- package/dist/gpu/webgpu-runtime.d.ts +63 -0
- package/dist/gpu/webgpu-runtime.js +215 -0
- package/dist/gpu/webgpu-runtime.js.map +1 -0
- package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
- package/dist/gpu/wgsl-chart-kernel.js +165 -0
- package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
- package/dist/gpu/wgsl-kernels.d.ts +53 -0
- package/dist/gpu/wgsl-kernels.js +365 -0
- package/dist/gpu/wgsl-kernels.js.map +1 -0
- package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
- package/dist/gpu/wgsl-sensor-kernel.js +409 -0
- package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
- package/dist/index.d.ts +89 -25
- package/dist/index.js +59 -15
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +92 -40
- package/dist/motion/camera-rotation.js +84 -47
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
- package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
- package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
- package/dist/motion/capture-rotation-trajectory.js +36 -26
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
- package/dist/motion/extended-object-projection.d.ts +19 -16
- package/dist/motion/extended-object-projection.js +38 -18
- package/dist/motion/extended-object-projection.js.map +1 -1
- package/dist/motion/projected-motion.d.ts +18 -17
- package/dist/motion/projected-motion.js +25 -17
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/motion/temporal-exposure-sum.d.ts +55 -0
- package/dist/motion/temporal-exposure-sum.js +141 -0
- package/dist/motion/temporal-exposure-sum.js.map +1 -0
- package/dist/motion/video-sequence.d.ts +111 -0
- package/dist/motion/video-sequence.js +179 -0
- package/dist/motion/video-sequence.js.map +1 -0
- package/dist/optics/aperture.d.ts +14 -15
- package/dist/optics/aperture.js +13 -11
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/atmospheric-haze.d.ts +83 -0
- package/dist/optics/atmospheric-haze.js +113 -0
- package/dist/optics/atmospheric-haze.js.map +1 -0
- package/dist/optics/brown-conrady-distortion.d.ts +116 -0
- package/dist/optics/brown-conrady-distortion.js +291 -0
- package/dist/optics/brown-conrady-distortion.js.map +1 -0
- package/dist/optics/circle-of-confusion.d.ts +10 -10
- package/dist/optics/circle-of-confusion.js +15 -11
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +64 -33
- package/dist/optics/complex-pupil-psf.js +190 -98
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/optics/depth-of-field.d.ts +25 -15
- package/dist/optics/depth-of-field.js +67 -27
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +14 -13
- package/dist/optics/diffraction.js +14 -10
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +88 -27
- package/dist/optics/focus-breathing.js +114 -23
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +18 -18
- package/dist/optics/focus-state.js +21 -15
- package/dist/optics/focus-state.js.map +1 -1
- package/dist/optics/front-of-lens-filter.d.ts +45 -14
- package/dist/optics/front-of-lens-filter.js +259 -88
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/illumination-vignetting.d.ts +16 -17
- package/dist/optics/illumination-vignetting.js +40 -17
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/irradiance-convolution.d.ts +59 -0
- package/dist/optics/irradiance-convolution.js +138 -0
- package/dist/optics/irradiance-convolution.js.map +1 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
- package/dist/optics/lateral-chromatic-aberration.js +33 -23
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-kernels.d.ts +89 -0
- package/dist/optics/lens-psf-kernels.js +175 -0
- package/dist/optics/lens-psf-kernels.js.map +1 -0
- package/dist/optics/lens-psf-profile.d.ts +78 -46
- package/dist/optics/lens-psf-profile.js +335 -124
- package/dist/optics/lens-psf-profile.js.map +1 -1
- package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
- package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
- package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +80 -23
- package/dist/optics/polygon-diffraction.js +130 -25
- package/dist/optics/polygon-diffraction.js.map +1 -1
- package/dist/optics/profile-contract.d.ts +5 -6
- package/dist/optics/profile-contract.js +14 -11
- package/dist/optics/profile-contract.js.map +1 -1
- package/dist/optics/psf-foundation.d.ts +23 -23
- package/dist/optics/psf-foundation.js +24 -21
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/pupil-vignetting.d.ts +118 -0
- package/dist/optics/pupil-vignetting.js +264 -0
- package/dist/optics/pupil-vignetting.js.map +1 -0
- package/dist/optics/radial-distortion.d.ts +34 -33
- package/dist/optics/radial-distortion.js +37 -30
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
- package/dist/optics/scene-to-sensor-irradiance.js +73 -45
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
- package/dist/optics/scene-to-sensor-quadrature.js +16 -11
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
- package/dist/optics/sensor-aperture-rays.d.ts +20 -4
- package/dist/optics/sensor-aperture-rays.js +32 -14
- package/dist/optics/sensor-aperture-rays.js.map +1 -1
- package/dist/optics/sensor-environment-query.d.ts +81 -16
- package/dist/optics/sensor-environment-query.js +145 -12
- package/dist/optics/sensor-environment-query.js.map +1 -1
- package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
- package/dist/optics/sensor-psf-quadrature.js +18 -11
- package/dist/optics/sensor-psf-quadrature.js.map +1 -1
- package/dist/optics/sensor-psf-support.d.ts +8 -6
- package/dist/optics/sensor-psf-support.js +8 -5
- package/dist/optics/sensor-psf-support.js.map +1 -1
- package/dist/optics/stray-light.d.ts +22 -19
- package/dist/optics/stray-light.js +18 -12
- package/dist/optics/stray-light.js.map +1 -1
- package/dist/optics/thin-lens.d.ts +10 -9
- package/dist/optics/thin-lens.js +12 -8
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/optics/zernike-wavefront.d.ts +154 -0
- package/dist/optics/zernike-wavefront.js +352 -0
- package/dist/optics/zernike-wavefront.js.map +1 -0
- package/dist/output/capture-corrected-sdr.d.ts +16 -8
- package/dist/output/capture-corrected-sdr.js +16 -8
- package/dist/output/capture-corrected-sdr.js.map +1 -1
- package/dist/output/capture-geometry.d.ts +34 -36
- package/dist/output/capture-geometry.js +52 -32
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +7 -6
- package/dist/output/capture-sdr.js +11 -8
- package/dist/output/capture-sdr.js.map +1 -1
- package/dist/output/crop.d.ts +22 -6
- package/dist/output/crop.js +40 -6
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +60 -23
- package/dist/output/geometric-transforms.js +111 -24
- package/dist/output/geometric-transforms.js.map +1 -1
- package/dist/output/lens-corrections.d.ts +27 -19
- package/dist/output/lens-corrections.js +29 -13
- package/dist/output/lens-corrections.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +71 -16
- package/dist/output/native-capture-sdr.js +190 -33
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/png-encoder.d.ts +65 -0
- package/dist/output/png-encoder.js +461 -0
- package/dist/output/png-encoder.js.map +1 -0
- package/dist/output/print-contrast-reference.d.ts +10 -9
- package/dist/output/print-contrast-reference.js +10 -8
- package/dist/output/print-contrast-reference.js.map +1 -1
- package/dist/output/print-detail.d.ts +18 -17
- package/dist/output/print-detail.js +12 -10
- package/dist/output/print-detail.js.map +1 -1
- package/dist/output/print-jpeg.d.ts +26 -5
- package/dist/output/print-jpeg.js +117 -50
- package/dist/output/print-jpeg.js.map +1 -1
- package/dist/output/print-plan.d.ts +19 -19
- package/dist/output/print-plan.js +11 -10
- package/dist/output/print-plan.js.map +1 -1
- package/dist/output/print-region-statistics.d.ts +14 -15
- package/dist/output/print-region-statistics.js +11 -11
- package/dist/output/print-region-statistics.js.map +1 -1
- package/dist/output/sdr-rendering.d.ts +48 -10
- package/dist/output/sdr-rendering.js +114 -25
- package/dist/output/sdr-rendering.js.map +1 -1
- package/dist/output/subject-framing-crop.d.ts +6 -10
- package/dist/output/subject-framing-crop.js +23 -13
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/processing/demosaic.d.ts +90 -0
- package/dist/processing/demosaic.js +275 -0
- package/dist/processing/demosaic.js.map +1 -0
- package/dist/processing/denoise.d.ts +68 -0
- package/dist/processing/denoise.js +214 -0
- package/dist/processing/denoise.js.map +1 -0
- package/dist/processing/focus-stacking.d.ts +17 -0
- package/dist/processing/focus-stacking.js +80 -0
- package/dist/processing/focus-stacking.js.map +1 -0
- package/dist/processing/hdr.d.ts +54 -0
- package/dist/processing/hdr.js +172 -0
- package/dist/processing/hdr.js.map +1 -0
- package/dist/processing/image-ops.d.ts +66 -0
- package/dist/processing/image-ops.js +192 -0
- package/dist/processing/image-ops.js.map +1 -0
- package/dist/processing/panorama.d.ts +51 -0
- package/dist/processing/panorama.js +305 -0
- package/dist/processing/panorama.js.map +1 -0
- package/dist/processing/processing-task.d.ts +85 -0
- package/dist/processing/processing-task.js +164 -0
- package/dist/processing/processing-task.js.map +1 -0
- package/dist/processing/tone-mapping.d.ts +69 -0
- package/dist/processing/tone-mapping.js +310 -0
- package/dist/processing/tone-mapping.js.map +1 -0
- package/dist/schema/camera.d.ts +5 -4
- package/dist/schema/illumination-spectral.d.ts +13 -19
- package/dist/schema/illumination-spectral.js +23 -19
- package/dist/schema/illumination-spectral.js.map +1 -1
- package/dist/schema/illumination-temporal.d.ts +12 -15
- package/dist/schema/illumination-temporal.js +43 -28
- package/dist/schema/illumination-temporal.js.map +1 -1
- package/dist/schema/illumination.d.ts +5 -4
- package/dist/schema/illumination.js +55 -20
- package/dist/schema/illumination.js.map +1 -1
- package/dist/schema/scene-radiance-temporal.d.ts +9 -11
- package/dist/schema/scene-radiance-temporal.js +26 -23
- package/dist/schema/scene-radiance-temporal.js.map +1 -1
- package/dist/schema/scene-radiance.d.ts +17 -17
- package/dist/schema/scene-radiance.js +56 -34
- package/dist/schema/scene-radiance.js.map +1 -1
- package/dist/schema/scene.d.ts +14 -13
- package/dist/schema/validation.d.ts +0 -1
- package/dist/schema/validation.js +17 -15
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +45 -64
- package/dist/sensor/accumulated-charge.js +41 -47
- package/dist/sensor/accumulated-charge.js.map +1 -1
- package/dist/sensor/architecture.d.ts +22 -25
- package/dist/sensor/architecture.js +17 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
- package/dist/sensor/camera-saturation-capacity.js +36 -34
- package/dist/sensor/camera-saturation-capacity.js.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
- package/dist/sensor/capture-color-sampling-binding.js +39 -41
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +8 -9
- package/dist/sensor/capture-mode-timing.js +24 -21
- package/dist/sensor/capture-mode-timing.js.map +1 -1
- package/dist/sensor/capture-mode.d.ts +28 -30
- package/dist/sensor/capture-mode.js +33 -31
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts +30 -33
- package/dist/sensor/color-sampling.js +32 -37
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
- package/dist/sensor/constant-rate-temporal-integration.js +28 -26
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
- package/dist/sensor/dark-current.d.ts +53 -49
- package/dist/sensor/dark-current.js +87 -46
- package/dist/sensor/dark-current.js.map +1 -1
- package/dist/sensor/environment-photo-signal.d.ts +71 -30
- package/dist/sensor/environment-photo-signal.js +127 -46
- package/dist/sensor/environment-photo-signal.js.map +1 -1
- package/dist/sensor/eqe-electron-rate.d.ts +14 -13
- package/dist/sensor/eqe-electron-rate.js +34 -14
- package/dist/sensor/eqe-electron-rate.js.map +1 -1
- package/dist/sensor/eqe-local-exposure.d.ts +24 -24
- package/dist/sensor/eqe-local-exposure.js +15 -11
- package/dist/sensor/eqe-local-exposure.js.map +1 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
- package/dist/sensor/eqe-temporal-exposure.js +15 -10
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/exposure-window.d.ts +48 -34
- package/dist/sensor/exposure-window.js +77 -36
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
- package/dist/sensor/fixed-pattern-noise.js +166 -0
- package/dist/sensor/fixed-pattern-noise.js.map +1 -0
- package/dist/sensor/iso-gain.d.ts +44 -0
- package/dist/sensor/iso-gain.js +119 -0
- package/dist/sensor/iso-gain.js.map +1 -0
- package/dist/sensor/iso-signal-chain.d.ts +25 -48
- package/dist/sensor/iso-signal-chain.js +52 -66
- package/dist/sensor/iso-signal-chain.js.map +1 -1
- package/dist/sensor/local-exposure-binding.d.ts +21 -21
- package/dist/sensor/local-exposure-binding.js +22 -18
- package/dist/sensor/local-exposure-binding.js.map +1 -1
- package/dist/sensor/optical-stack.d.ts +36 -40
- package/dist/sensor/optical-stack.js +34 -37
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +22 -28
- package/dist/sensor/photon-energy.js +42 -34
- package/dist/sensor/photon-energy.js.map +1 -1
- package/dist/sensor/physical-charge-capacity.d.ts +20 -30
- package/dist/sensor/physical-charge-capacity.js +35 -36
- package/dist/sensor/physical-charge-capacity.js.map +1 -1
- package/dist/sensor/pixel-pitch.d.ts +2 -3
- package/dist/sensor/pixel-pitch.js +4 -2
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +13 -15
- package/dist/sensor/radiometry-readiness.js +20 -17
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +173 -83
- package/dist/sensor/raw-readout.js +425 -160
- package/dist/sensor/raw-readout.js.map +1 -1
- package/dist/sensor/raw-reconstruction.d.ts +112 -44
- package/dist/sensor/raw-reconstruction.js +200 -47
- package/dist/sensor/raw-reconstruction.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
- package/dist/sensor/readout-exposure-linkage.js +125 -27
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +43 -44
- package/dist/sensor/readout-timing.js +38 -30
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +21 -28
- package/dist/sensor/response-application-compatibility.js +35 -34
- package/dist/sensor/response-application-compatibility.js.map +1 -1
- package/dist/sensor/response-operating-range.d.ts +26 -35
- package/dist/sensor/response-operating-range.js +40 -39
- package/dist/sensor/response-operating-range.js.map +1 -1
- package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
- package/dist/sensor/responsivity-photocurrent.js +57 -40
- package/dist/sensor/responsivity-photocurrent.js.map +1 -1
- package/dist/sensor/sampling-aperture.d.ts +21 -25
- package/dist/sensor/sampling-aperture.js +29 -28
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
- package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/sensor-geometry.d.ts +28 -32
- package/dist/sensor/sensor-geometry.js +35 -20
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +14 -16
- package/dist/sensor/signal-noise.js +15 -13
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
- package/dist/sensor/spatial-sample-reduction.js +39 -48
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
- package/dist/sensor/spatial-sampling-quadrature.js +31 -36
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
- package/dist/sensor/spatio-spectral-reduction.js +24 -29
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
- package/dist/sensor/spectral-coverage.d.ts +6 -9
- package/dist/sensor/spectral-coverage.js +9 -6
- package/dist/sensor/spectral-coverage.js.map +1 -1
- package/dist/sensor/spectral-quadrature.d.ts +46 -60
- package/dist/sensor/spectral-quadrature.js +38 -48
- package/dist/sensor/spectral-quadrature.js.map +1 -1
- package/dist/sensor/spectral-response.d.ts +53 -41
- package/dist/sensor/spectral-response.js +80 -47
- package/dist/sensor/spectral-response.js.map +1 -1
- package/dist/sensor/stochastic-seed.d.ts +50 -0
- package/dist/sensor/stochastic-seed.js +123 -0
- package/dist/sensor/stochastic-seed.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
- package/dist/sensor/temporal-eqe-sum.js +5 -6
- package/dist/sensor/temporal-eqe-sum.js.map +1 -1
- package/dist/sensor/temporal-photo-signal.d.ts +5 -6
- package/dist/sensor/temporal-photo-signal.js +11 -10
- package/dist/sensor/temporal-photo-signal.js.map +1 -1
- package/dist/sensor/temporal-sample-binding.d.ts +1 -2
- package/dist/sensor/temporal-sample-binding.js +3 -3
- package/dist/sensor/temporal-sample-binding.js.map +1 -1
- package/dist/simulation/poc-simulation.d.ts +16 -16
- package/dist/simulation/poc-simulation.js +20 -15
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +42 -18
- package/dist/stabilization/camera-shake.js +43 -20
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +44 -41
- package/dist/stabilization/system.js +196 -108
- package/dist/stabilization/system.js.map +1 -1
- package/docs/AGENT_GUIDE.md +183 -0
- package/docs/API_REFERENCE.md +761 -2
- package/docs/QUICK_START.md +495 -0
- package/docs/USAGE.md +1719 -714
- package/docs/api/camera-equivalent-focal-length.md +6 -7
- package/docs/api/camera-field-of-view.md +16 -8
- package/docs/api/camera-lens-projection.md +246 -0
- package/docs/api/camera-projected-object-size.md +6 -5
- package/docs/api/capture-capture-export-metadata.md +10 -10
- package/docs/api/capture-dng-import.md +134 -0
- package/docs/api/capture-environment-raw-producer.md +17 -11
- package/docs/api/capture-export-jpeg.md +16 -0
- package/docs/api/capture-focus-control.md +25 -47
- package/docs/api/capture-linear-encoding.md +21 -12
- package/docs/api/capture-lossless-jpeg.md +49 -0
- package/docs/api/capture-native-environment-optical-stage.md +75 -0
- package/docs/api/capture-native-environment-raw.md +161 -4
- package/docs/api/capture-native-raw-development.md +69 -4
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +23 -8
- package/docs/api/capture-packed-sensor-raw.md +156 -0
- package/docs/api/capture-photographic-export.md +69 -31
- package/docs/api/capture-raw-frame-reconstruction.md +8 -8
- package/docs/api/capture-raw-white-level.md +37 -0
- package/docs/api/capture-release-sequence.md +6 -7
- package/docs/api/capture-sensor-raw-frame.md +6 -6
- package/docs/api/capture-sensor-raw-producer.md +17 -11
- package/docs/api/capture-simulated-capture.md +15 -15
- package/docs/api/color-camera-color-matrix.md +103 -0
- package/docs/api/color-capture-color.md +22 -11
- package/docs/api/color-chromatic-adaptation.md +82 -0
- package/docs/api/color-color-difference.md +134 -0
- package/docs/api/color-color-matching-functions.md +259 -0
- package/docs/api/color-colorimetry-math.md +54 -0
- package/docs/api/color-gamut-mapping.md +72 -0
- package/docs/api/color-illuminants.md +280 -0
- package/docs/api/color-rgb-color-spaces.md +151 -0
- package/docs/api/color-sensor-color-development.md +27 -0
- package/docs/api/color-srgb-icc.md +2 -4
- package/docs/api/color-white-balance.md +95 -19
- package/docs/api/composition-image-formation-plan.md +124 -95
- package/docs/api/composition-plan-consumer.md +7 -7
- package/docs/api/core-calculation-result.md +18 -14
- package/docs/api/core-configuration-error.md +1 -1
- package/docs/api/core-image-formation.md +7 -7
- package/docs/api/core-scientific-assurance.md +12 -10
- package/docs/api/core-spectral-composition.md +14 -14
- package/docs/api/core-spectral.md +6 -6
- package/docs/api/core-validation.md +3 -3
- package/docs/api/core-version.md +7 -6
- package/docs/api/equipment-exposure-capabilities.md +11 -10
- package/docs/api/equipment-generic-tier-assets.md +7 -2
- package/docs/api/equipment-generic-tier-presets.md +6 -6
- package/docs/api/equipment-iso-capabilities.md +18 -18
- package/docs/api/equipment-metering-capabilities.md +6 -6
- package/docs/api/equipment-release-capabilities.md +4 -4
- package/docs/api/exports.json +2213 -8
- package/docs/api/exposure-exposure-duration-control.md +9 -9
- package/docs/api/exposure-exposure-mode-resolver.md +35 -31
- package/docs/api/exposure-exposure.md +10 -10
- package/docs/api/exposure-flash-ttl.md +182 -0
- package/docs/api/exposure-flash.md +183 -28
- package/docs/api/exposure-metering-scene-radiance.md +11 -10
- package/docs/api/exposure-metering-target.md +9 -8
- package/docs/api/exposure-metering-temporal.md +8 -8
- package/docs/api/exposure-metering.md +69 -9
- package/docs/api/exposure-program-line.md +6 -5
- package/docs/api/facade-chart-radiance-batch.md +96 -0
- package/docs/api/facade-chart-scenes.md +240 -0
- package/docs/api/facade-scene-radiance.md +122 -0
- package/docs/api/facade-simulate-capture.md +324 -0
- package/docs/api/gpu-image-kernel-accelerator.md +157 -0
- package/docs/api/gpu-image-kernel-execution.md +152 -0
- package/docs/api/motion-camera-rotation.md +43 -26
- package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
- package/docs/api/motion-capture-rotation-trajectory.md +15 -15
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
- package/docs/api/motion-extended-object-projection.md +10 -8
- package/docs/api/motion-projected-motion.md +8 -8
- package/docs/api/motion-temporal-exposure-sum.md +98 -0
- package/docs/api/motion-video-sequence.md +159 -0
- package/docs/api/optics-aperture.md +8 -8
- package/docs/api/optics-atmospheric-haze.md +104 -0
- package/docs/api/optics-brown-conrady-distortion.md +123 -0
- package/docs/api/optics-circle-of-confusion.md +5 -4
- package/docs/api/optics-complex-pupil-psf.md +57 -16
- package/docs/api/optics-depth-of-field.md +12 -6
- package/docs/api/optics-diffraction.md +8 -7
- package/docs/api/optics-focus-breathing.md +104 -16
- package/docs/api/optics-focus-state.md +9 -10
- package/docs/api/optics-front-of-lens-filter.md +72 -14
- package/docs/api/optics-illumination-vignetting.md +10 -10
- package/docs/api/optics-irradiance-convolution.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
- package/docs/api/optics-lens-psf-kernels.md +72 -0
- package/docs/api/optics-lens-psf-profile.md +48 -26
- package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
- package/docs/api/optics-polygon-diffraction.md +78 -13
- package/docs/api/optics-profile-contract.md +4 -4
- package/docs/api/optics-psf-foundation.md +12 -12
- package/docs/api/optics-pupil-vignetting.md +132 -0
- package/docs/api/optics-radial-distortion.md +12 -12
- package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
- package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
- package/docs/api/optics-sensor-aperture-rays.md +3 -2
- package/docs/api/optics-sensor-environment-query.md +52 -9
- package/docs/api/optics-sensor-psf-quadrature.md +13 -10
- package/docs/api/optics-stray-light.md +12 -11
- package/docs/api/optics-thin-lens.md +4 -3
- package/docs/api/optics-zernike-wavefront.md +229 -0
- package/docs/api/output-capture-corrected-sdr.md +10 -7
- package/docs/api/output-capture-geometry.md +35 -36
- package/docs/api/output-capture-sdr.md +4 -4
- package/docs/api/output-crop.md +7 -4
- package/docs/api/output-geometric-transforms.md +65 -19
- package/docs/api/output-lens-corrections.md +17 -15
- package/docs/api/output-native-capture-sdr.md +26 -13
- package/docs/api/output-png-encoder.md +105 -0
- package/docs/api/output-print-contrast-reference.md +8 -8
- package/docs/api/output-print-detail.md +14 -14
- package/docs/api/output-print-jpeg.md +22 -5
- package/docs/api/output-print-plan.md +18 -18
- package/docs/api/output-print-region-statistics.md +14 -14
- package/docs/api/output-sdr-rendering.md +52 -10
- package/docs/api/output-subject-framing-crop.md +5 -6
- package/docs/api/processing-demosaic.md +120 -0
- package/docs/api/processing-denoise.md +148 -0
- package/docs/api/processing-focus-stacking.md +41 -0
- package/docs/api/processing-hdr.md +113 -0
- package/docs/api/processing-panorama.md +82 -0
- package/docs/api/processing-processing-task.md +107 -0
- package/docs/api/processing-tone-mapping.md +142 -0
- package/docs/api/schema-camera.md +6 -4
- package/docs/api/schema-illumination-spectral.md +10 -11
- package/docs/api/schema-illumination-temporal.md +13 -15
- package/docs/api/schema-illumination.md +4 -4
- package/docs/api/schema-scene-radiance-temporal.md +10 -11
- package/docs/api/schema-scene-radiance.md +18 -17
- package/docs/api/schema-scene.md +9 -9
- package/docs/api/schema-validation.md +1 -1
- package/docs/api/sensor-accumulated-charge.md +12 -20
- package/docs/api/sensor-architecture.md +15 -16
- package/docs/api/sensor-camera-saturation-capacity.md +9 -11
- package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
- package/docs/api/sensor-capture-mode-timing.md +9 -9
- package/docs/api/sensor-capture-mode.md +29 -30
- package/docs/api/sensor-color-sampling.md +31 -33
- package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
- package/docs/api/sensor-dark-current.md +30 -14
- package/docs/api/sensor-environment-photo-signal.md +13 -6
- package/docs/api/sensor-eqe-electron-rate.md +9 -8
- package/docs/api/sensor-eqe-local-exposure.md +18 -17
- package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
- package/docs/api/sensor-exposure-window.md +24 -24
- package/docs/api/sensor-fixed-pattern-noise.md +104 -0
- package/docs/api/sensor-iso-gain.md +63 -0
- package/docs/api/sensor-iso-signal-chain.md +13 -22
- package/docs/api/sensor-local-exposure-binding.md +12 -13
- package/docs/api/sensor-optical-stack.md +37 -40
- package/docs/api/sensor-photon-energy.md +10 -11
- package/docs/api/sensor-physical-charge-capacity.md +8 -13
- package/docs/api/sensor-pixel-pitch.md +1 -1
- package/docs/api/sensor-radiometry-readiness.md +9 -9
- package/docs/api/sensor-raw-readout.md +118 -52
- package/docs/api/sensor-raw-reconstruction.md +97 -20
- package/docs/api/sensor-readout-exposure-linkage.md +120 -24
- package/docs/api/sensor-readout-timing.md +33 -35
- package/docs/api/sensor-response-application-compatibility.md +9 -11
- package/docs/api/sensor-response-operating-range.md +14 -18
- package/docs/api/sensor-responsivity-photocurrent.md +9 -12
- package/docs/api/sensor-sampling-aperture.md +22 -25
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
- package/docs/api/sensor-sensor-geometry.md +23 -24
- package/docs/api/sensor-signal-noise.md +10 -10
- package/docs/api/sensor-spatial-sample-reduction.md +27 -30
- package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
- package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
- package/docs/api/sensor-spectral-coverage.md +5 -5
- package/docs/api/sensor-spectral-quadrature.md +33 -35
- package/docs/api/sensor-spectral-response.md +28 -16
- package/docs/api/sensor-temporal-photo-signal.md +6 -6
- package/docs/api/simulation-poc-simulation.md +17 -16
- package/docs/api/stabilization-camera-shake.md +29 -10
- package/docs/api/stabilization-system.md +25 -21
- package/docs/examples/production-request.json +3821 -2157
- package/docs/examples/simulate-capture.mjs +14 -0
- package/llms.txt +35 -0
- package/package.json +32 -12
- package/AGENTS.md +0 -674
- package/CONTRIBUTING.md +0 -76
- package/DCO +0 -33
- package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
- package/dist/camera/field-of-view.d.ts.map +0 -1
- package/dist/camera/projected-object-size.d.ts.map +0 -1
- package/dist/capture/capture-export-metadata.d.ts.map +0 -1
- package/dist/capture/environment-raw-producer.d.ts.map +0 -1
- package/dist/capture/export-jpeg.d.ts.map +0 -1
- package/dist/capture/export-tiff.d.ts.map +0 -1
- package/dist/capture/focus-control.d.ts.map +0 -1
- package/dist/capture/linear-encoding.d.ts.map +0 -1
- package/dist/capture/native-environment-raw.d.ts.map +0 -1
- package/dist/capture/native-raw-development.d.ts.map +0 -1
- package/dist/capture/native-raw.d.ts.map +0 -1
- package/dist/capture/photographic-export.d.ts.map +0 -1
- package/dist/capture/raw-frame-limits.d.ts.map +0 -1
- package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
- package/dist/capture/release-sequence.d.ts.map +0 -1
- package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
- package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
- package/dist/capture/simulated-capture.d.ts.map +0 -1
- package/dist/color/capture-color.d.ts.map +0 -1
- package/dist/color/sensor-color-development.d.ts.map +0 -1
- package/dist/color/srgb-icc.d.ts.map +0 -1
- package/dist/color/srgb-transfer.d.ts.map +0 -1
- package/dist/color/white-balance.d.ts.map +0 -1
- package/dist/composition/image-formation-plan.d.ts.map +0 -1
- package/dist/composition/plan-consumer.d.ts.map +0 -1
- package/dist/core/calculation-result.d.ts.map +0 -1
- package/dist/core/canonical-json.d.ts.map +0 -1
- package/dist/core/configuration-error.d.ts.map +0 -1
- package/dist/core/evidence-provenance.d.ts.map +0 -1
- package/dist/core/image-formation.d.ts.map +0 -1
- package/dist/core/owned-data.d.ts.map +0 -1
- package/dist/core/record-validation.d.ts.map +0 -1
- package/dist/core/scientific-assurance.d.ts.map +0 -1
- package/dist/core/spectral-composition.d.ts.map +0 -1
- package/dist/core/spectral.d.ts.map +0 -1
- package/dist/core/validation.d.ts.map +0 -1
- package/dist/core/version.d.ts.map +0 -1
- package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
- package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
- package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
- package/dist/equipment/iso-capabilities.d.ts.map +0 -1
- package/dist/equipment/metering-capabilities.d.ts.map +0 -1
- package/dist/equipment/release-capabilities.d.ts.map +0 -1
- package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
- package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
- package/dist/exposure/exposure.d.ts.map +0 -1
- package/dist/exposure/flash.d.ts.map +0 -1
- package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
- package/dist/exposure/metering-target.d.ts.map +0 -1
- package/dist/exposure/metering-temporal.d.ts.map +0 -1
- package/dist/exposure/metering.d.ts.map +0 -1
- package/dist/exposure/program-line.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/motion/camera-rotation.d.ts.map +0 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/extended-object-projection.d.ts.map +0 -1
- package/dist/motion/projected-motion.d.ts.map +0 -1
- package/dist/optics/aperture.d.ts.map +0 -1
- package/dist/optics/circle-of-confusion.d.ts.map +0 -1
- package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
- package/dist/optics/depth-of-field.d.ts.map +0 -1
- package/dist/optics/diffraction.d.ts.map +0 -1
- package/dist/optics/focus-breathing.d.ts.map +0 -1
- package/dist/optics/focus-state.d.ts.map +0 -1
- package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
- package/dist/optics/illumination-vignetting.d.ts.map +0 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
- package/dist/optics/lens-psf-profile.d.ts.map +0 -1
- package/dist/optics/polygon-diffraction.d.ts.map +0 -1
- package/dist/optics/profile-contract.d.ts.map +0 -1
- package/dist/optics/psf-foundation.d.ts.map +0 -1
- package/dist/optics/radial-distortion.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
- package/dist/optics/sensor-environment-query.d.ts.map +0 -1
- package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-psf-support.d.ts.map +0 -1
- package/dist/optics/stray-light.d.ts.map +0 -1
- package/dist/optics/thin-lens.d.ts.map +0 -1
- package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
- package/dist/output/capture-geometry.d.ts.map +0 -1
- package/dist/output/capture-sdr.d.ts.map +0 -1
- package/dist/output/crop.d.ts.map +0 -1
- package/dist/output/geometric-transforms.d.ts.map +0 -1
- package/dist/output/lens-corrections.d.ts.map +0 -1
- package/dist/output/native-capture-sdr.d.ts.map +0 -1
- package/dist/output/print-contrast-reference.d.ts.map +0 -1
- package/dist/output/print-detail.d.ts.map +0 -1
- package/dist/output/print-jpeg.d.ts.map +0 -1
- package/dist/output/print-plan.d.ts.map +0 -1
- package/dist/output/print-region-statistics.d.ts.map +0 -1
- package/dist/output/sdr-rendering.d.ts.map +0 -1
- package/dist/output/subject-framing-crop.d.ts.map +0 -1
- package/dist/schema/camera.d.ts.map +0 -1
- package/dist/schema/camera.js +0 -3
- package/dist/schema/camera.js.map +0 -1
- package/dist/schema/illumination-spectral.d.ts.map +0 -1
- package/dist/schema/illumination-temporal.d.ts.map +0 -1
- package/dist/schema/illumination.d.ts.map +0 -1
- package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
- package/dist/schema/scene-radiance.d.ts.map +0 -1
- package/dist/schema/scene.d.ts.map +0 -1
- package/dist/schema/scene.js +0 -3
- package/dist/schema/scene.js.map +0 -1
- package/dist/schema/validation.d.ts.map +0 -1
- package/dist/sensor/accumulated-charge.d.ts.map +0 -1
- package/dist/sensor/architecture.d.ts.map +0 -1
- package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
- package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
- package/dist/sensor/capture-mode.d.ts.map +0 -1
- package/dist/sensor/color-sampling.d.ts.map +0 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
- package/dist/sensor/dark-current.d.ts.map +0 -1
- package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
- package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
- package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/exposure-window.d.ts.map +0 -1
- package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
- package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
- package/dist/sensor/optical-stack.d.ts.map +0 -1
- package/dist/sensor/photon-energy.d.ts.map +0 -1
- package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
- package/dist/sensor/pixel-pitch.d.ts.map +0 -1
- package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
- package/dist/sensor/raw-readout.d.ts.map +0 -1
- package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
- package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
- package/dist/sensor/readout-timing.d.ts.map +0 -1
- package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
- package/dist/sensor/response-operating-range.d.ts.map +0 -1
- package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
- package/dist/sensor/sampling-aperture.d.ts.map +0 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/sensor-geometry.d.ts.map +0 -1
- package/dist/sensor/signal-noise.d.ts.map +0 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
- package/dist/sensor/spectral-coverage.d.ts.map +0 -1
- package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
- package/dist/sensor/spectral-response.d.ts.map +0 -1
- package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
- package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
- package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
- package/dist/simulation/poc-simulation.d.ts.map +0 -1
- package/dist/stabilization/camera-shake.d.ts.map +0 -1
- package/dist/stabilization/system.d.ts.map +0 -1
- package/docs/API_STYLE.md +0 -235
- package/docs/ARCHITECTURE.md +0 -356
- package/docs/AUTOMATION_COORDINATION.md +0 -190
- package/docs/CAPTURE_COLOR.md +0 -25
- package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
- package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
- package/docs/CAPTURE_SDR.md +0 -22
- package/docs/DEVELOPERS.md +0 -68
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
- package/docs/EXPORT_ACCEPTANCE.md +0 -133
- package/docs/GENERIC_TIER_PRESETS.md +0 -269
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
- package/docs/IMAGE_FORMATION.md +0 -247
- package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
- package/docs/MOTION_AND_SIGNAL.md +0 -250
- package/docs/NATIVE_CAPTURE_SDR.md +0 -70
- package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
- package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
- package/docs/NATIVE_RAW_AND_PRINT.md +0 -47
- package/docs/NUMERICAL_CORRECTNESS.md +0 -191
- package/docs/PERFORMANCE_BASELINE.md +0 -56
- package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
- package/docs/PHYSICS_FOUNDATION.md +0 -426
- package/docs/POC_API.md +0 -278
- package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
- package/docs/POC_PROJECTION_REUSE.md +0 -124
- package/docs/PRINT_195_196_REVIEW.md +0 -93
- package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
- package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
- package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
- package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
- package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
- package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
- package/docs/PRINT_PLANNING.md +0 -75
- package/docs/PRINT_REGION_STATISTICS.md +0 -38
- package/docs/PROCESSED_OUTPUT.md +0 -157
- package/docs/PRODUCTION_COMPOSITION.md +0 -373
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
- package/docs/PROVENANCE.md +0 -115
- package/docs/PSF_FOUNDATION.md +0 -165
- package/docs/RAW_FRAME_ENVELOPE.md +0 -56
- package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
- package/docs/RELEASE_1_0.md +0 -66
- package/docs/RELEASE_1_0_1.md +0 -61
- package/docs/RELEASE_1_1_0.md +0 -25
- package/docs/RELEASE_1_2_0.md +0 -51
- package/docs/RELEASE_1_3_0.md +0 -15
- package/docs/RELEASE_1_4_0.md +0 -23
- package/docs/RELEASE_AUDIT.md +0 -39
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
- package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
- package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
- package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
- package/docs/SDR_RENDERING.md +0 -33
- package/docs/SENSOR_APERTURE_RAYS.md +0 -23
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
- package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
- package/docs/SENSOR_RAW_FRAME.md +0 -20
- package/docs/SENSOR_RAW_PRODUCER.md +0 -77
- package/docs/SIGNAL_CONFORMANCE.md +0 -23
- package/docs/SIMULATED_CAPTURE.md +0 -65
- package/docs/STABILIZATION.md +0 -234
- package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
- package/docs/TIER_ACCEPTANCE.md +0 -129
- package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
- package/docs/V1_COMPOSITION_MAP.md +0 -123
- package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
- package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
- package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
- package/docs/licenses/castleCSF-MIT.txt +0 -21
- package/docs/validation/documentation-fragments.json +0 -212
- package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
- package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
- package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
- package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
- package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
- package/docs/validation/print-196-candidate-capabilities.json +0 -28
- package/docs/validation/print-196-candidate-evidence.json +0 -356
- package/docs/validation/print-196-engine-acceptance.json +0 -81
- package/docs/validation/print-detail-capabilities.json +0 -103
- package/docs/validation/print-detail-jpeg-evidence.json +0 -116
- package/docs/validation/print-detail-sdr-evidence.json +0 -81
- package/docs/validation/release-audit-inventory.json +0 -1306
- package/docs/validation/tier-acceptance-report-v1.json +0 -2538
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-environment-lean.js","sourceRoot":"","sources":["../../src/capture/native-environment-lean.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * A faster (\"lean\") per-site optical executor for createNativeEnvironmentRawTask, added in 2.0 for\n * performance. It skips only per-site re-validation and result-envelope building that can be proven\n * redundant, and nothing else:\n *\n * - A site whose environment is strictly equal (plain data, same keys in the same order, Object.is leaves) to\n * an earlier fully validated \"template\" site except for the two index-bound fields (temporalIntegrationId and\n * sensor.spatialSampling.site), and whose colour-sampling site has the same CFA phase, passes every\n * site-independent check exactly as the template did. Only the site-dependent work is recomputed: aperture\n * geometry and its bounds, the local exposure window, field throughput, aperture rays, query projection and\n * provider requests, with the same arithmetic in the same order as the full planner.\n * - Execution replays the same callbacks with the same frozen requests, validates every provider result with\n * the same parser, and evaluates the photon/charge-rate arithmetic of the full chain (scene-to-sensor\n * acceptance, spatio-spectral reduction, operating range, EQE electron rate, Kahan sums, temporal midpoint\n * sums) in the same floating-point operation order.\n * - Every data-dependent check of the full chain is still evaluated. When one fails, or anything is unexpected,\n * the lean path hands the exact same inputs to the full engine function, which then throws its own error (or\n * returns its own value). Planning falls back before any callback. Execution falls back at the step whose check\n * failed. So callbacks, errors and their order are unchanged.\n * - Each template verifies itself: its own site is planned by both planners and executed by the full executor,\n * and the lean results must be bit-identical (Object.is) before any other site uses the template. A mismatch\n * disables the template and its sites run the full path.\n *\n * Sampled PSFs (point-spread functions) and lens field mappings are covered as well (2.0). A sampled-PSF site\n * resolves its kernels with the full resolver's own code (resolveLensSampledPsfKernel), places the taps with the\n * shared sensorPsfSourcePoint and sums each node's taps in kernel order, as calculateSensorPsfIrradianceQuadrature\n * does. Its per-instant checks run after that instant's callbacks; when one fails, the full quadrature runs on the\n * site's full plan and decides. A lens-mapped site builds each query with calculateMappedSensorEnvironmentRadianceQuery\n * itself and applies the distortion area factor once, after the tap's pupil sum.\n * @see docs/NATIVE_RAW_AND_PRINT.md for the invariance argument and limits.\n */\n\nimport type { SimulateEnvironmentSensorRawFrameInput } from \"./environment-raw-producer.js\";\nimport type { planEnvironmentSensorPhotoSignal, executeEnvironmentSensorPhotoSignal, EnvironmentRadianceEvaluator,\n EnvironmentApertureRadianceEvaluator } from \"../sensor/environment-photo-signal.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { apertureRadianceQuery } from \"../sensor/environment-photo-signal.js\";\nimport type { SensorEqeTemporalPhotoSignal } from \"../sensor/temporal-photo-signal.js\";\nimport { createSensorEqeTemporalPhotoSignal } from \"../sensor/temporal-photo-signal.js\";\nimport { parseSceneRadianceEvaluationResult, validateSceneRadianceEvaluationBindings,\n type SceneRadianceEvaluationRequest } from \"../schema/scene-radiance.js\";\nimport { calculateSceneRadianceToSensorIrradiance } from \"../optics/scene-to-sensor-irradiance.js\";\nimport { calculateMappedSensorEnvironmentRadianceQuery, prepareEnvironmentLensFieldMapping,\n type PreparedEnvironmentLensFieldMapping } from \"../optics/sensor-environment-query.js\";\nimport { calculateSensorPsfIrradianceQuadrature } from \"../optics/sensor-psf-quadrature.js\";\nimport { sensorPsfSourcePoint } from \"../optics/sensor-psf-support.js\";\nimport { resolveLensSampledPsf, resolveLensSampledPsfKernel, type ResolveLensSampledPsfInput } from \"../optics/lens-psf-profile.js\";\nimport { sensorApertureRayValues, type IdealCircularPupil, type SensorApertureRay } from \"../optics/sensor-aperture-rays.js\";\nimport { parseFocusPlane } from \"../optics/focus-state.js\";\nimport { calculateIlluminationVignetting } from \"../optics/illumination-vignetting.js\";\nimport { applyPhysicalCameraRotation, resolveProjectionDistanceMm } from \"../motion/camera-rotation.js\";\nimport { prepareCaptureExposureWindowSampler } from \"../sensor/exposure-window.js\";\nimport { isPublicOpaqueId } from \"../core/record-validation.js\";\nimport { freezeOwnedData } from \"../core/owned-data.js\";\nimport { composeNativeEnvironmentSensorSite } from \"./native-environment-optical-stage.js\";\nimport { calculateNativeRawSite, parseNativeRawProducerSite, type NativeRawProducerFrameContext,\n type SensorRawProducerSiteInput } from \"./sensor-raw-producer.js\";\nimport type { NativeRawLeanOutput, NativeRawLeanSensorHook } from \"./native-raw.js\";\nimport { calculateSiteEffectiveSaturationCode } from \"./raw-white-level.js\";\nimport { adcTransfer, resolveSensorReadoutRegime, samplePoisson, type ResolvedSensorReadoutRegime } from \"../sensor/raw-readout.js\";\nimport { createDeterministicUniformStream, deriveNativeSiteStreamSeedUint32, sampleDeterministicStandardNormal,\n NATIVE_SITE_CHARGE_STREAM_ID, NATIVE_SITE_READ_NOISE_STREAM_ID } from \"../sensor/stochastic-seed.js\";\nimport { evaluateParsedFixedPatternSite, type SensorFixedPatternNoiseProfile } from \"../sensor/fixed-pattern-noise.js\";\n\ntype Site = SimulateEnvironmentSensorRawFrameInput[\"sites\"][number];\ntype Env = Site[\"environment\"];\ntype FullPlan = ReturnType<typeof planEnvironmentSensorPhotoSignal>;\ntype FullResult = ReturnType<typeof executeEnvironmentSensorPhotoSignal>;\ntype Rec = Record<string, unknown>;\ntype FieldThroughput = FullPlan[\"instants\"][number][\"groups\"][number][\"taps\"][number][\"fieldThroughput\"];\n\n/** Most distinct templates kept for one capture event. Any further distinct sites just run the full path. */\nconst MAXIMUM_TEMPLATES = 64;\nconst SQUARE_MICROMETERS_TO_SQUARE_METERS = 1e-12;\nconst REDUCTION_TOLERANCE = 1e-10;\n\n/** Disables the lean executor process-wide (internal; tests compare both paths). */\nlet leanDisabled = false;\n/** Internal counters of lean work (tests assert the lean path actually runs). Not exported from the package. */\nexport const nativeEnvironmentLeanStatistics = { plannedSites: 0, executedSites: 0, sensorSites: 0, psfFallbacks: 0 };\nexport function setNativeEnvironmentLeanExecutionEnabled(enabled: boolean): void { leanDisabled = !enabled; }\n\nfunction isPlainRecord(value: object): boolean {\n const prototype = Object.getPrototypeOf(value) as unknown;\n return prototype === Object.prototype || prototype === null;\n}\n/**\n * Strict structural equality of engine-owned structured-clone output: Object.is leaves (0 and -0 differ), plain\n * records with the same own keys in the same order, dense arrays without extra properties. Anything else is equal\n * only by reference. `memo` remembers subtrees already proven equal (both sides are engine-owned and unmutated).\n */\nfunction sameData(a: unknown, b: unknown, memo: WeakMap<object, object>): boolean {\n if (Object.is(a, b)) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\" || a === null || b === null) return false;\n if (memo.get(a) === b) return true;\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || Object.getPrototypeOf(a) !== Array.prototype || Object.getPrototypeOf(b) !== Array.prototype) return false;\n const length = a.length;\n if (length !== b.length) return false;\n for (let i = 0; i < length; i++) if (!(i in a) || !(i in b) || !sameData(a[i], b[i], memo)) return false;\n if (Object.keys(a).length !== length || Object.keys(b).length !== length) return false;\n } else {\n if (Array.isArray(b) || !isPlainRecord(a) || !isPlainRecord(b) || Object.getPrototypeOf(a) !== Object.getPrototypeOf(b)) return false;\n if (!sameKeysExcept(a as Rec, b as Rec, undefined, memo)) return false;\n }\n memo.set(a, b);\n return true;\n}\n/** Same own keys in the same order and equal values, except `skip` (compared by the caller). */\nfunction sameKeysExcept(a: Rec, b: Rec, skip: string | undefined, memo: WeakMap<object, object>): boolean {\n const ak = Object.keys(a), bk = Object.keys(b);\n if (ak.length !== bk.length || Object.getOwnPropertySymbols(a).length !== 0 || Object.getOwnPropertySymbols(b).length !== 0) return false;\n for (let i = 0; i < ak.length; i++) if (ak[i] !== bk[i]) return false;\n for (let i = 0; i < ak.length; i++) {\n const key = ak[i]!;\n if (key !== skip && !sameData(a[key], b[key], memo)) return false;\n }\n return true;\n}\nfunction plainChild(value: unknown, key: string): Rec | undefined {\n const child = typeof value === \"object\" && value !== null ? (value as Rec)[key] : undefined;\n return typeof child === \"object\" && child !== null && !Array.isArray(child) && isPlainRecord(child) ? child as Rec : undefined;\n}\n/** Environment equality except temporalIntegrationId and sensor.spatialSampling.site (index-bound, checked per site). */\nfunction environmentMatches(e: Env, t: Env, memo: WeakMap<object, object>): boolean {\n const er = e as unknown as Rec, tr = t as unknown as Rec;\n if (typeof er !== \"object\" || er === null || !isPlainRecord(er)) return false;\n const es = plainChild(er, \"sensor\"), ts = plainChild(tr, \"sensor\"), ess = plainChild(es, \"spatialSampling\"), tss = plainChild(ts, \"spatialSampling\");\n if (!es || !ts || !ess || !tss) return false;\n return environmentShallow(er, tr, memo);\n}\n/** Top level and sensor compared key by key so only the two index-bound fields are skipped. */\nfunction environmentShallow(er: Rec, tr: Rec, memo: WeakMap<object, object>): boolean {\n const ek = Object.keys(er), tk = Object.keys(tr);\n if (ek.length !== tk.length || Object.getOwnPropertySymbols(er).length !== 0) return false;\n for (let i = 0; i < ek.length; i++) if (ek[i] !== tk[i]) return false;\n for (const key of ek) {\n if (key === \"temporalIntegrationId\") continue;\n if (key === \"sensor\") {\n const es = er.sensor as Rec, ts = tr.sensor as Rec, sk = Object.keys(es), tsk = Object.keys(ts);\n if (sk.length !== tsk.length || Object.getOwnPropertySymbols(es).length !== 0) return false;\n for (let i = 0; i < sk.length; i++) if (sk[i] !== tsk[i]) return false;\n for (const sensorKey of sk) {\n if (sensorKey === \"spatialSampling\") {\n if (!sameKeysExcept(es.spatialSampling as Rec, ts.spatialSampling as Rec, \"site\", memo)) return false;\n } else if (!sameData(es[sensorKey], ts[sensorKey], memo)) return false;\n }\n } else if (!sameData(er[key], tr[key], memo)) return false;\n }\n return true;\n}\n\ninterface SpatialNode { xPhase: number; yPhase: number; aaX: number; aaY: number }\ninterface ExecutionConstants {\n /** Per spatial node: combined normalized weight and geometric area measure in m². */\n weight: Float64Array; areaSquareMeters: Float64Array;\n /** Per spectral node: dλ (wavelength step), photon energy and effective EQE, exactly as the template's full chain used them. */\n measure: Float64Array; photonEnergy: Float64Array; eqe: Float64Array;\n /** Per spectral node: scene-to-sensor acceptance before field throughput. */\n acceptance: Float64Array;\n rangeKind: \"power\" | \"irradiance\"; rangeMinimum: number; rangeMaximum: number; perBin: boolean;\n photo: SensorEqeTemporalPhotoSignal;\n}\ninterface Template {\n environment: Env;\n phase: number;\n /** True until the template's plan constants are derived and self-checked. */\n disabled: boolean;\n consts?: PlanConstants;\n /** The lean plan of the template's own site, shown equal to its full plan. */\n selfPlan?: LeanEnvironmentPlan | undefined;\n execution?: ExecutionConstants;\n /** undefined until the template site executed through the full path. */\n executionVerified?: boolean;\n}\ninterface PlanConstants {\n spectralCount: number; spatialCount: number; temporalCount: number; pupilCount: number; count: number;\n /** Per group (spectral × spatial node): its number of taps (1 without a sampled PSF). */\n tapCounts: readonly number[];\n /** Start of each group in an instant's flat tap list, plus the total at the end. */\n tapOffsets: readonly number[];\n /** The template's sampled-PSF resolver input (its engine-owned, frozen profile), without wavelength and field point. */\n psf?: Omit<ResolveLensSampledPsfInput, \"wavelengthNm\" | \"fieldPointMm\">;\n /** The template's validated lens field mapping. */\n lensMapping?: PreparedEnvironmentLensFieldMapping;\n wavelengths: Float64Array;\n nodes: readonly FullPlan[\"instants\"][number][\"groups\"][number][\"node\"][];\n spatial: SpatialNode[];\n geometry: { firstX: number; firstY: number; pitchX: number; pitchY: number; offsetX: number; offsetY: number;\n widthUm: number; heightUm: number; imagingWidthMm: number; imagingHeightMm: number };\n sampler: ReturnType<typeof prepareCaptureExposureWindowSampler>;\n projectionDistanceMm: number;\n focus: FullPlan[\"focus\"];\n /** The focus plane as calculateSensorApertureRays parses it. */\n parsedFocus: ReturnType<typeof parseFocusPlane>;\n requestBase: { providerProfileId: string; sceneId: string; illuminationProfileId: string; materialResponseProfileId: string; wavelengthBasis: string };\n sceneBindings: FullPlan[\"sceneBindings\"];\n}\ninterface LeanTap {\n request: SceneRadianceEvaluationRequest;\n sourcePointImagePlaneMm: { x: number; y: number };\n fieldThroughput: FieldThroughput;\n fieldFactor: number;\n fieldValid: boolean;\n apertureRays?: readonly SensorApertureRay[];\n /** 1 / det(d distorted / d ideal), applied once after the tap's pupil sum. Present only with a lens field mapping. */\n distortionAreaFactor?: number;\n}\n/** A lean site plan. `owned` and `count` mirror the full plan fields the native task reads. */\nexport interface LeanEnvironmentPlan {\n readonly lean: true;\n readonly template: Template;\n readonly index: number;\n readonly owned: Env;\n readonly count: number;\n readonly site: { x: number; y: number };\n readonly start: number; readonly end: number; readonly duration: number;\n /**\n * Per instant, every tap in one flat list: group by group (spectral-major, spatial-minor), each group's taps in kernel\n * order. Group gi holds taps tapOffsets[gi] to tapOffsets[gi + 1] - 1 of its template's plan constants.\n */\n readonly instants: readonly { time: number; taps: readonly LeanTap[] }[];\n /** Per group: the resolved PSF kernel weights. Present only with a sampled PSF. */\n readonly kernels?: readonly (readonly number[])[];\n}\nexport function isLeanEnvironmentPlan(plan: unknown): plan is LeanEnvironmentPlan {\n return typeof plan === \"object\" && plan !== null && (plan as { lean?: unknown }).lean === true;\n}\n\nexport interface NativeEnvironmentLeanFrame {\n frameId: string;\n nativeWidth: number;\n nativeHeight: number;\n repeatWidth: number;\n repeatHeight: number;\n /** True only when native sites and colour-sampling sites map one to one, with the same top-left origin (identity mapping). */\n identityBinding: boolean;\n}\n\n/** Per-event lean executor state. Templates and memos live only for one native task. */\nexport interface NativeEnvironmentLeanExecutor {\n /**\n * Classifies a planned site. Returns a lean plan when it matches a verified template; \"candidate\" when it\n * should be planned in full with \"full\" retention and offered to admitCandidate; or undefined (plan it in\n * full, keeping only the photo signal).\n */\n plan(environment: Env, index: number): LeanEnvironmentPlan | \"candidate\" | undefined;\n /** Registers a fully planned (\"full\" retention) candidate; never throws. */\n admitCandidate(environment: Env, index: number, plan: FullPlan): void;\n /** True when this index is an accepted candidate. Its full execution must use \"full\" retention and be verified. */\n isCandidate(index: number): boolean;\n /** Verifies a candidate's full execution (full retention) against the lean arithmetic; never throws. */\n verifyCandidate(index: number, plan: FullPlan, result: FullResult): void;\n /**\n * Executes a lean plan. Returns the photo signal, or undefined when the template could not be verified; the\n * caller then plans and executes this site in full. `fullPlan` builds the site's full plan without callbacks;\n * it is called only when a sampled-PSF check fails and the full PSF quadrature must decide.\n */\n execute(plan: LeanEnvironmentPlan, evaluate: EnvironmentRadianceEvaluator,\n aperture: EnvironmentApertureRadianceEvaluator | undefined, fullPlan: () => FullPlan): SensorEqeTemporalPhotoSignal | undefined;\n}\n\nfunction siteOf(environment: Env): { x: unknown; y: unknown } | undefined {\n const site = plainChild(plainChild(plainChild(environment, \"sensor\"), \"spatialSampling\"), \"site\");\n return site as { x: unknown; y: unknown } | undefined;\n}\n\n/** Plans the site-dependent parts with the full planner's arithmetic. Returns undefined on any doubt, and the caller plans in full. */\nfunction geometry(t: Template, k: PlanConstants, frame: NativeEnvironmentLeanFrame, environment: Env, index: number): LeanEnvironmentPlan | undefined {\n try {\n const x = index % frame.nativeWidth, y = Math.floor(index / frame.nativeWidth), site = siteOf(environment);\n // Object.is: a -0 coordinate would flow into the full path's outputs, so it takes the full path.\n if (!site || !Object.is(site.x, x) || !Object.is(site.y, y) || !isPublicOpaqueId(environment.temporalIntegrationId)) return undefined;\n const g = k.geometry;\n // resolveSensorSamplingAperture: per-site aperture centre and bounds.\n const siteCenterFromTopLeftX = g.firstX + x * g.pitchX, siteCenterFromTopLeftY = g.firstY + y * g.pitchY;\n const apertureCenterFromTopLeftX = siteCenterFromTopLeftX + g.offsetX, apertureCenterFromTopLeftY = siteCenterFromTopLeftY + g.offsetY;\n const imagingWidthMicrometers = g.imagingWidthMm * 1000, imagingHeightMicrometers = g.imagingHeightMm * 1000;\n if (apertureCenterFromTopLeftX - g.widthUm / 2 < 0 || apertureCenterFromTopLeftY - g.heightUm / 2 < 0 ||\n apertureCenterFromTopLeftX + g.widthUm / 2 > imagingWidthMicrometers || apertureCenterFromTopLeftY + g.heightUm / 2 > imagingHeightMicrometers) return undefined;\n const centerX = -g.imagingWidthMm / 2 + apertureCenterFromTopLeftX / 1000, centerY = -g.imagingHeightMm / 2 + apertureCenterFromTopLeftY / 1000;\n // calculateSensorSpatialSamplingQuadrature: midpoint grid nodes minus the anti-aliasing (AA) offset.\n const widthMm = g.widthUm / 1000, heightMm = g.heightUm / 1000;\n const leftMm = centerX - widthMm / 2, topMm = centerY - heightMm / 2;\n const sources: { x: number; y: number }[] = [];\n for (const node of k.spatial) {\n const source = { x: (leftMm + node.xPhase * widthMm) - node.aaX, y: (topMm + node.yPhase * heightMm) - node.aaY };\n if (!Number.isFinite(source.x) || !Number.isFinite(source.y)) return undefined;\n sources.push(source);\n }\n const window = k.sampler({ x: x + .5, y: y + .5 });\n const start = window.startOffsetSecondsFromOpeningReference, end = window.endOffsetSecondsFromOpeningReference;\n const duration = window.localExposureDurationSeconds;\n const e = environment as unknown as Rec, optics = e.optics as Rec, motion = e.motion as Rec;\n const focalLengthMm = optics.focalLengthMm as number, nominalFNumber = optics.nominalFNumber as number;\n const omega = motion.angularVelocityRadPerSec as { pitch: number; yaw: number; roll: number };\n // The pupil, f-number and focus were validated by the template's full planning (they are site-independent); the ray\n // arithmetic and its rotation and forward-hemisphere checks run per site through calculateSensorApertureRays' own code.\n const pupil = e.pupil as IdealCircularPupil | undefined;\n if (pupil !== undefined && sensorApertureRayValues({ sourcePointNativeSensorMm: { x: 0, y: 0 }, focalLengthMm, nominalFNumber,\n angularVelocityRadPerSec: omega, timeSecondsFromOpeningReference: start }, pupil, k.parsedFocus).rays.length !== k.pupilCount) return undefined;\n // Field throughput at a planned point, as the full planner computes it.\n const field = e.fieldThroughput as Rec;\n const fieldAt = (point: { x: number; y: number }): { value: FieldThroughput; factor: number; valid: boolean } => {\n if (field.kind === \"unity\") return { value: { kind: \"unity\" }, factor: 1, valid: true };\n const result = calculateIlluminationVignetting({ imagePointMm: { x: point.x, y: -point.y },\n profile: field.profile as Parameters<typeof calculateIlluminationVignetting>[0][\"profile\"] }).value;\n const imagePoint = { x: point.x, y: -point.y };\n const scale = Math.max(1, Math.abs(imagePoint.x), Math.abs(imagePoint.y), Math.abs(result.imagePointMm.x), Math.abs(result.imagePointMm.y));\n const tolerance = Number.EPSILON * 64 * scale, factor = result.linearThroughputFactor;\n const valid = !(Math.abs(result.imagePointMm.x - imagePoint.x) > tolerance || Math.abs(result.imagePointMm.y - imagePoint.y) > tolerance) &&\n Number.isFinite(factor) && factor > 0 && factor <= 1;\n return { value: { kind: \"illumination-vignetting-result\", result }, factor, valid };\n };\n // Tap points per group (spectral-major, spatial-minor). Without a PSF a group has one tap at its destination\n // (one field throughput per spatial node, shared by its spectral nodes). With a sampled PSF the kernel is resolved\n // at the destination and the taps sit at sensorPsfSourcePoint offsets, as in the full planner.\n const S = k.spectralCount, P = k.spatialCount;\n const tapPoints: (readonly { x: number; y: number }[])[] = [], tapFields: (readonly ReturnType<typeof fieldAt>[])[] = [];\n const kernels: (readonly number[])[] = [];\n // Without a PSF, the single tap of group gi is the destination sources[gi % P] (no per-group arrays are built).\n const destinationFields = k.psf === undefined ? sources.map(fieldAt) : undefined;\n if (k.psf !== undefined) for (let s = 0; s < S; s++) for (let p = 0; p < P; p++) {\n const destination = sources[p]!, gi = s * P + p;\n const kernel = resolveLensSampledPsfKernel({ ...k.psf, wavelengthNm: k.wavelengths[s]!, fieldPointMm: { x: destination.x, y: -destination.y } });\n const n = kernel.widthSamples * kernel.heightSamples, weights = kernel.normalizedIntensity;\n if (n !== k.tapCounts[gi] || weights.length !== n) return undefined;\n const points: { x: number; y: number }[] = [];\n for (let i = 0; i < n; i++) {\n const point = sensorPsfSourcePoint(destination, kernel, i % kernel.widthSamples, Math.floor(i / kernel.widthSamples));\n // A non-finite kernel weight or tap point would fail the full planner's result checks: plan this site in full.\n if (!Number.isFinite(weights[i]!) || !Number.isFinite(point.x) || !Number.isFinite(point.y)) return undefined;\n points.push(point);\n }\n tapPoints.push(points);\n tapFields.push(points.map(fieldAt));\n kernels.push(weights);\n }\n const measure = duration / k.temporalCount;\n let previous = -Infinity;\n const instants: { time: number; taps: LeanTap[] }[] = [];\n const pd = k.projectionDistanceMm, base = k.requestBase, id = environment.temporalIntegrationId;\n for (let ti = 0; ti < k.temporalCount; ti++) {\n const time = start + (ti + .5) * measure;\n if (!(time > start && time > previous && time < end)) return undefined;\n previous = time;\n if (!Number.isFinite(time) || time < 0) return undefined;\n const displacement = { pitch: omega.pitch * time, yaw: omega.yaw * time, roll: omega.roll * time };\n const taps: LeanTap[] = [];\n for (let gi = 0; gi < S * P; gi++) {\n const s = Math.floor(gi / P), points = destinationFields === undefined ? tapPoints[gi]! : undefined;\n const tapCount = points === undefined ? 1 : points.length;\n for (let pi = 0; pi < tapCount; pi++) {\n const point = points === undefined ? sources[gi % P]! : points[pi]!, sampleId = `${id}-t${ti}-n${gi}-p${pi}`;\n const apertureRays = pupil === undefined ? undefined : sensorApertureRayValues({ sourcePointNativeSensorMm: point, focalLengthMm,\n nominalFNumber, angularVelocityRadPerSec: omega, timeSecondsFromOpeningReference: time }, pupil, k.parsedFocus).rays;\n let request: SceneRadianceEvaluationRequest, imagePointMm: { x: number; y: number }, distortionAreaFactor: number | undefined;\n if (k.lensMapping !== undefined) {\n // The full planner's own mapped query, with the same input; only its result envelope is not kept.\n const query = calculateMappedSensorEnvironmentRadianceQuery({ ...(motion as unknown as Pick<Parameters<typeof calculateMappedSensorEnvironmentRadianceQuery>[0],\n \"angularVelocityRadPerSec\" | \"timeReference\" | \"environmentDirectionConvention\">), sourcePointNativeSensorMm: point, focalLengthMm, focus: k.focus,\n timeSecondsFromOpeningReference: time, request: { schemaVersion: \"0.1.0\", sampleId, providerProfileId: base.providerProfileId, sceneId: base.sceneId,\n illuminationProfileId: base.illuminationProfileId, materialResponseProfileId: base.materialResponseProfileId, wavelengthNanometers: k.wavelengths[s]!,\n wavelengthBasis: base.wavelengthBasis as SceneRadianceEvaluationRequest[\"wavelengthBasis\"] } }, k.lensMapping).value;\n request = freezeOwnedData(query.request);\n imagePointMm = query.sourcePointImagePlaneMm;\n distortionAreaFactor = query.lensFieldMapping?.distortionAreaFactor;\n if (distortionAreaFactor === undefined) return undefined;\n } else {\n // calculateSensorEnvironmentRadianceQuery with calculateInverseCameraRotationImageMapping.\n imagePointMm = { x: point.x, y: -point.y };\n if (!Number.isFinite(imagePointMm.x) || !Number.isFinite(imagePointMm.y)) return undefined;\n const reference = applyPhysicalCameraRotation({ x: imagePointMm.x / pd, y: imagePointMm.y / pd, z: 1 }, displacement, \"camera-to-reference\");\n if (!Number.isFinite(reference.z) || reference.z <= 0) return undefined;\n const rx = pd * (reference.x / reference.z), ry = pd * (reference.y / reference.z);\n const length = Math.hypot(rx, ry, pd);\n const ray = { x: rx / length, y: ry / length, z: pd / length };\n // Build the parseSceneRadianceEvaluationRequest output directly. Every other field is a template constant already\n // parsed for the template site. The sample ID is a public opaque ID (trimming cannot change it) and the time is\n // checked above. So only parseUnitDirection's unit-direction check depends on this site.\n const direction = { x: -ray.x, y: -ray.y, z: -ray.z };\n if (!Number.isFinite(direction.x) || !Number.isFinite(direction.y) || !Number.isFinite(direction.z)) return undefined;\n const norm = Math.hypot(direction.x, direction.y, direction.z);\n if (!Number.isFinite(norm) || Math.abs(norm - 1) > 1e-9) return undefined;\n request = Object.freeze({ schemaVersion: \"0.1.0\" as const, sampleId, providerProfileId: base.providerProfileId,\n sceneId: base.sceneId, illuminationProfileId: base.illuminationProfileId, materialResponseProfileId: base.materialResponseProfileId,\n target: Object.freeze({ kind: \"environment-direction\" as const, outgoingDirectionUnitVector: Object.freeze(direction) }),\n timeSecondsFromExposureStart: time, wavelengthNanometers: k.wavelengths[s]!,\n wavelengthBasis: base.wavelengthBasis as SceneRadianceEvaluationRequest[\"wavelengthBasis\"] });\n }\n const f = destinationFields === undefined ? tapFields[gi]![pi]! : destinationFields[gi % P]!;\n // Built without object spread (cheaper per tap); optional fields are added only when present.\n const leanTap: LeanTap = { request, sourcePointImagePlaneMm: imagePointMm, fieldThroughput: f.value, fieldFactor: f.factor, fieldValid: f.valid };\n if (apertureRays !== undefined) leanTap.apertureRays = apertureRays;\n if (distortionAreaFactor !== undefined) leanTap.distortionAreaFactor = distortionAreaFactor;\n taps.push(leanTap);\n }\n }\n instants.push({ time, taps });\n }\n return { lean: true, template: t, index, owned: environment, count: k.count, site: { x, y }, start, end, duration, instants,\n ...(k.psf === undefined ? {} : { kernels }) };\n } catch {\n return undefined;\n }\n}\n\n/** Lean photo-signal arithmetic over values[ti][s*P+p]. Returns undefined when any data-dependent check fails. */\nfunction photo(k: PlanConstants, c: ExecutionConstants, values: readonly Float64Array[], environment: Env, site: { x: number; y: number },\n start: number, end: number, duration: number, times: readonly number[]): SensorEqeTemporalPhotoSignal | undefined {\n const S = k.spectralCount, P = k.spatialCount, T = k.temporalCount;\n const photonRates = new Float64Array(T), electronRates = new Float64Array(T);\n const flux = new Float64Array(S), contribution = new Float64Array(S), averageContribution = new Float64Array(S);\n for (let ti = 0; ti < T; ti++) {\n const v = values[ti]!;\n // reduceSensorSpatioSpectralIrradiance\n let integratedAverage = 0, integratedFlux = 0;\n for (let s = 0; s < S; s++) {\n let average = 0, geometric = 0;\n for (let p = 0; p < P; p++) {\n const value = v[s * P + p]!;\n average += value * c.weight[p]!;\n geometric += value * c.areaSquareMeters[p]!;\n if (!Number.isFinite(average) || !Number.isFinite(geometric)) return undefined;\n }\n const averageTerm = average * c.measure[s]!, fluxTerm = geometric * c.measure[s]!;\n integratedAverage += averageTerm; integratedFlux += fluxTerm;\n if (!Number.isFinite(integratedAverage) || !Number.isFinite(integratedFlux)) return undefined;\n flux[s] = geometric; contribution[s] = fluxTerm; averageContribution[s] = averageTerm;\n }\n // assessSensorResponseOperatingRange: selected metric and per-bin values inside the calibrated range.\n const metric = c.rangeKind === \"power\" ? integratedFlux : integratedAverage;\n if (!Number.isFinite(metric) || metric < 0 || metric < c.rangeMinimum || metric > c.rangeMaximum) return undefined;\n if (c.perBin) for (let s = 0; s < S; s++) {\n const value = c.rangeKind === \"power\" ? contribution[s]! : averageContribution[s]!;\n if (!Number.isFinite(value) || value < 0 || value < c.rangeMinimum || value > c.rangeMaximum) return undefined;\n }\n // calculateSensorEqeElectronRate: reduction node checks, compensated power, then per-node rates.\n let powerSum = 0, powerCorrection = 0;\n for (let s = 0; s < S; s++) {\n const expected = flux[s]! * c.measure[s]!;\n if (!Number.isFinite(flux[s]!) || flux[s]! < 0 || !Number.isFinite(contribution[s]!) || contribution[s]! < 0 ||\n !Number.isFinite(expected) || !approximatelyEqual(contribution[s]!, expected)) return undefined;\n const adjusted = contribution[s]! - powerCorrection, next = powerSum + adjusted;\n powerCorrection = (next - powerSum) - adjusted; powerSum = next;\n }\n if (!(Number.isFinite(integratedFlux) && integratedFlux >= 0) || !approximatelyEqual(powerSum, integratedFlux)) return undefined;\n let photonSum = 0, photonCorrection = 0, electronSum = 0, electronCorrection = 0;\n for (let s = 0; s < S; s++) {\n const radiantPower = flux[s]! * c.measure[s]!;\n const photonRate = radiantPower / c.photonEnergy[s]!;\n const electronRate = photonRate * c.eqe[s]!;\n if (!Number.isFinite(radiantPower) || !Number.isFinite(photonRate) || !Number.isFinite(electronRate)) return undefined;\n const adjustedPhotons = photonRate - photonCorrection, nextPhotons = photonSum + adjustedPhotons;\n photonCorrection = (nextPhotons - photonSum) - adjustedPhotons; photonSum = nextPhotons;\n const adjustedElectrons = electronRate - electronCorrection, nextElectrons = electronSum + adjustedElectrons;\n electronCorrection = (nextElectrons - electronSum) - adjustedElectrons; electronSum = nextElectrons;\n }\n if (!Number.isFinite(photonSum) || !Number.isFinite(electronSum)) return undefined;\n photonRates[ti] = photonSum; electronRates[ti] = electronSum;\n }\n // sumTemporalEqeRateExpectations with the binding's seconds-valued measure.\n const measure = duration / T;\n let photons = 0, electrons = 0, photonCorrection = 0, electronCorrection = 0;\n for (let ti = 0; ti < T; ti++) {\n const p = photonRates[ti]! * measure, e = electronRates[ti]! * measure;\n const ap = p - photonCorrection, np = photons + ap; photonCorrection = (np - photons) - ap; photons = np;\n const ae = e - electronCorrection, ne = electrons + ae; electronCorrection = (ne - electrons) - ae; electrons = ne;\n }\n // parseSensorEqeTemporalPhotoSignal: finite non-negative rates, EQE domain and finite counts.\n for (let ti = 0; ti < T; ti++) {\n const pr = photonRates[ti]!, er = electronRates[ti]!;\n if (!Number.isFinite(pr) || pr < 0 || !Number.isFinite(er) || er < 0 || er > pr) return undefined;\n }\n if (!Number.isFinite(photons) || photons < 0 || !Number.isFinite(electrons) || electrons < 0) return undefined;\n const temporalSamples: object[] = [];\n for (let ti = 0; ti < T; ti++) temporalSamples.push(Object.freeze({ timeSecondsFromOpeningReference: times[ti]!,\n incidentPhotonRatePerSecond: photonRates[ti]!, expectedGeneratedElectronRatePerSecond: electronRates[ti]! }));\n return Object.freeze({ ...c.photo, temporalIntegrationId: environment.temporalIntegrationId, site: Object.freeze({ x: site.x, y: site.y }),\n startOffsetSecondsFromOpeningReference: start, endOffsetSecondsFromOpeningReference: end, localExposureDurationSeconds: duration,\n expectedIncidentPhotonCount: photons, expectedGeneratedElectronCount: electrons, temporalSamples: Object.freeze(temporalSamples) }) as SensorEqeTemporalPhotoSignal;\n}\n\n/** The temporal photo-signal input the full executor builds from these irradiance values (a PSF quadrature's nodes are equal plain data). */\nfunction fullPhotoInput(k: PlanConstants, values: readonly Float64Array[], environment: Env, times: readonly number[]): Parameters<typeof createSensorEqeTemporalPhotoSignal>[0] {\n return { temporalIntegrationId: environment.temporalIntegrationId, exposure: { ...environment.sensor, samples: values.map((v, ti) => ({\n temporalSampleIndex: ti, timeSecondsFromOpeningReference: times[ti]!,\n irradianceSamples: k.nodes.map((node, gi) => ({ node: structuredClone(node), spectralIrradianceWattsPerSquareMeterPerNanometer: v[gi]! })) })) } };\n}\n\n/** Derives a template's plan constants from its full plan; throws when anything is outside the lean scope. */\nfunction planConstants(environment: Env, plan: FullPlan): PlanConstants {\n const e = environment as unknown as Rec, sensor = e.sensor as Rec, spatial = sensor.spatialSampling as Rec;\n const apertureProfile = spatial.samplingApertureProfile as Rec;\n const aperture = apertureProfile.geometricSensitiveAperture as Rec, lattice = apertureProfile.siteCenterLattice as Rec;\n const first = lattice.firstSiteCenterFromImagingAreaTopLeftMicrometers as { x: number; y: number };\n const offset = aperture.centerOffsetFromSiteCenterMicrometers as { x: number; y: number };\n const imaging = spatial.imagingArea as { widthMm: number; heightMm: number };\n const spatialNodes = plan.spatialQuadrature.nodes, spectralNodes = plan.spectralQuadrature.nodes;\n const countX = spatial.spatialSampleCountX as number, countY = spatial.spatialSampleCountY as number;\n const S = spectralNodes.length, P = spatialNodes.length, T = plan.instants.length, groups = plan.instants[0]!.groups;\n const tapCounts = groups.map(group => group.taps.length), taps = tapCounts.reduce((sum, n) => sum + n, 0);\n const pupilCount = plan.count / (taps * T);\n const psf = e.psf as Rec, sampled = psf.kind === \"sampled-local\";\n if (!Number.isSafeInteger(pupilCount) || pupilCount < 1 || groups.length !== S * P || (!sampled && psf.kind !== \"not-applied\") ||\n (sampled && pupilCount !== 1) || (!sampled && tapCounts.some(n => n !== 1)) ||\n plan.instants.some(i => i.groups.length !== S * P || i.groups.some((g, gi) => g.taps.length !== tapCounts[gi]))) {\n throw new Error(\"outside lean scope\");\n }\n const configuration = sampled ? (psf.configuration as Rec).psf as Omit<ResolveLensSampledPsfInput, \"wavelengthNm\" | \"fieldPointMm\"> : undefined;\n return {\n spectralCount: S, spatialCount: P, temporalCount: T, pupilCount, count: plan.count, tapCounts,\n tapOffsets: tapCounts.reduce((offsets: number[], n) => { offsets.push(offsets[offsets.length - 1]! + n); return offsets; }, [0]),\n ...(configuration === undefined ? {} : { psf: { profile: configuration.profile, focalLengthMm: configuration.focalLengthMm, focus: configuration.focus,\n apertureFNumber: configuration.apertureFNumber, signedDefocusImagePlaneMicrometers: configuration.signedDefocusImagePlaneMicrometers } }),\n ...(\"lensFieldMapping\" in e ? { lensMapping: prepareEnvironmentLensFieldMapping(e.lensFieldMapping) } : {}),\n wavelengths: Float64Array.from(spectralNodes, n => n.wavelengthNanometers),\n nodes: groups.map(group => freezeOwnedData(structuredClone(group.node))),\n spatial: spatialNodes.map(n => ({ xPhase: (n.apertureSampleXIndex + 0.5) / countX, yPhase: (n.apertureSampleYIndex + 0.5) / countY,\n aaX: n.antiAliasingOffsetMicrometers.x / 1000, aaY: n.antiAliasingOffsetMicrometers.y / 1000 })),\n geometry: { firstX: first.x, firstY: first.y, pitchX: lattice.pitchXMicrometers as number, pitchY: lattice.pitchYMicrometers as number,\n offsetX: offset.x, offsetY: offset.y, widthUm: aperture.widthMicrometers as number, heightUm: aperture.heightMicrometers as number,\n imagingWidthMm: imaging.widthMm, imagingHeightMm: imaging.heightMm },\n sampler: prepareCaptureExposureWindowSampler((sensor.localExposure as Rec).exposureWindowInput as Parameters<typeof prepareCaptureExposureWindowSampler>[0]),\n projectionDistanceMm: resolveProjectionDistanceMm((e.optics as Rec).focalLengthMm as number,\n plan.focus.kind === \"finite\" ? plan.focus.distanceM : undefined).projectionDistanceMm,\n focus: plan.focus,\n parsedFocus: parseFocusPlane(plan.focus),\n requestBase: { providerProfileId: plan.sceneBindings.providerProfile.profileId, sceneId: plan.sceneBindings.providerProfile.sceneId,\n illuminationProfileId: plan.sceneBindings.illuminationProfile.profileId, materialResponseProfileId: plan.sceneBindings.materialResponseProfile.profileId,\n wavelengthBasis: plan.spectralQuadrature.wavelengthBasis },\n sceneBindings: plan.sceneBindings\n };\n}\n\n/** The lean planner must reproduce the template site's full plan bit for bit, including each resolved PSF kernel. */\nfunction planReproduced(lean: LeanEnvironmentPlan | undefined, plan: FullPlan, k: PlanConstants): boolean {\n if (!lean || lean.count !== plan.count || lean.instants.length !== plan.instants.length || (lean.kernels !== undefined) !== (k.psf !== undefined)) return false;\n const check = new WeakMap<object, object>();\n for (let ti = 0; ti < plan.instants.length; ti++) {\n const full = plan.instants[ti]!, mine = lean.instants[ti]!;\n if (!Object.is(full.time, mine.time) || full.temporalSampleIndex !== ti || full.groups.length !== k.tapCounts.length ||\n mine.taps.length !== k.tapOffsets[k.tapCounts.length]) return false;\n for (let gi = 0; gi < full.groups.length; gi++) {\n const fullTaps = full.groups[gi]!.taps, first = k.tapOffsets[gi]!;\n if (fullTaps.length !== k.tapCounts[gi] || !sameData(full.groups[gi]!.node, k.nodes[gi], check)) return false;\n for (let pi = 0; pi < fullTaps.length; pi++) {\n const fullTap = fullTaps[pi]!, tap = mine.taps[first + pi]!;\n if (!Object.isFrozen(fullTap.request) || !Object.isFrozen(tap.request) || !sameData(fullTap.request, tap.request, check) ||\n !sameData(fullTap.sourcePointImagePlaneMm, tap.sourcePointImagePlaneMm, check) ||\n !sameData(fullTap.fieldThroughput, tap.fieldThroughput, check) || !sameData(fullTap.apertureRays, tap.apertureRays, check) ||\n !Object.is(fullTap.distortionAreaFactor, tap.distortionAreaFactor)) return false;\n }\n }\n }\n if (k.psf !== undefined) {\n // Each kernel must equal the public resolver's kernel for the template site's destination and wavelength.\n const S = k.spectralCount, P = k.spatialCount;\n for (let gi = 0; gi < S * P; gi++) {\n const destination = plan.spatialQuadrature.nodes[gi % P]!.preAntiAliasingSourcePointMm;\n const kernel = resolveLensSampledPsf({ ...k.psf, wavelengthNm: k.wavelengths[Math.floor(gi / P)]!,\n fieldPointMm: { x: destination.x, y: -destination.y } }).value.kernel;\n if (!sameData(kernel.normalizedIntensity, lean.kernels![gi], check)) return false;\n }\n }\n return true;\n}\n\n/** Sum of a PSF group's taps in kernel order, the same expression calculateSensorPsfIrradianceQuadrature reduces. */\nfunction psfSum(kernel: readonly number[], values: Float64Array): number {\n let sum = 0;\n for (let i = 0; i < values.length; i++) sum = sum + kernel[i]! * values[i]!;\n return sum;\n}\n\n/**\n * True when every data-dependent check calculateSensorPsfIrradianceQuadrature makes on one instant passes: finite,\n * non-negative tap irradiances, finite weighted sums, and the finite partial sums of its spatio-spectral reduction\n * (in the reduction's node order). When false, the full quadrature runs and decides.\n */\nfunction psfChecksPass(k: PlanConstants, c: ExecutionConstants, taps: readonly Float64Array[], v: Float64Array): boolean {\n for (const values of taps) for (let i = 0; i < values.length; i++) if (!Number.isFinite(values[i]!) || values[i]! < 0) return false;\n const S = k.spectralCount, P = k.spatialCount;\n let integratedAverage = 0, integratedFlux = 0;\n for (let s = 0; s < S; s++) {\n let average = 0, geometric = 0;\n for (let p = 0; p < P; p++) {\n const value = v[s * P + p]!;\n if (!Number.isFinite(value) || value < 0) return false;\n average += value * c.weight[p]!;\n geometric += value * c.areaSquareMeters[p]!;\n if (!Number.isFinite(average) || !Number.isFinite(geometric)) return false;\n }\n integratedAverage += average * c.measure[s]!; integratedFlux += geometric * c.measure[s]!;\n if (!Number.isFinite(integratedAverage) || !Number.isFinite(integratedFlux)) return false;\n }\n return true;\n}\n\n/** The full executor's PSF quadrature for one instant of a site's full plan, with the given tap irradiances. Throws its own errors. */\nfunction fullPsfInstant(plan: FullPlan, ti: number, taps: readonly Float64Array[]): Float64Array {\n nativeEnvironmentLeanStatistics.psfFallbacks++;\n const instant = plan.instants[ti]!, owned = plan.owned;\n if (owned.psf.kind !== \"sampled-local\") throw new InvalidConfigurationError(\"Lean PSF fallback requires a sampled-PSF plan.\");\n const psf = calculateSensorPsfIrradianceQuadrature({ ...owned.psf.configuration, spatialQuadrature: plan.spatialQuadrature,\n spectralQuadrature: plan.spectralQuadrature, timeSecondsFromOpeningReference: instant.time,\n inputMeaning: \"pre-psf-pre-sensor-stack-pre-aa-spectral-irradiance\", samples: instant.groups.map((group, gi) => ({ node: group.node,\n sourceSamples: group.taps.map((tap, pi) => ({ kernelSampleX: tap.kernelSampleX, kernelSampleY: tap.kernelSampleY, sourcePointNativeSensorMm: tap.point,\n timeSecondsFromOpeningReference: instant.time, spectralIrradianceWattsPerSquareMeterPerNanometer: taps[gi]![pi]! })) })) });\n return Float64Array.from(psf.value.irradianceSamples, sample => sample.spectralIrradianceWattsPerSquareMeterPerNanometer);\n}\n\n/** Derives execution constants from the template site's full execution (\"full\" retention) and checks them. Returns undefined on a mismatch. */\nfunction executionConstants(k: PlanConstants, environment: Env, plan: FullPlan, result: FullResult, self: LeanEnvironmentPlan): ExecutionConstants | undefined {\n const S = k.spectralCount, P = k.spatialCount, T = k.temporalCount;\n const value = result.value, stages = value.photo.value.exposure.value.samples[0]!.stages;\n const spatial = stages.spatialQuadrature.value.nodes, spectral = stages.spectralQuadrature.value.nodes;\n const rate = stages.electronRate.value.perWavelength, range = stages.operatingRange.value;\n if (spatial.length !== P || spectral.length !== S || rate.length !== S || value.instants.length !== T) return undefined;\n for (let s = 0; s < S; s++) if (rate[s]!.spectralSampleIndex !== s || spectral[s]!.spectralSampleIndex !== s) return undefined;\n const c: ExecutionConstants = {\n weight: Float64Array.from(spatial, n => n.combinedNormalizedSpatialWeight),\n areaSquareMeters: Float64Array.from(spatial, n => n.combinedAreaMeasureSquareMicrometers * SQUARE_MICROMETERS_TO_SQUARE_METERS),\n measure: Float64Array.from(spectral, n => n.wavelengthMeasureNanometers),\n photonEnergy: Float64Array.from(rate, n => n.photonEnergyJoules), eqe: Float64Array.from(rate, n => n.effectiveExternalQuantumEfficiency),\n acceptance: new Float64Array(S).fill(NaN),\n rangeKind: range.inputRange.kind === \"wavelength-integrated-geometric-aperture-radiant-power\" ? \"power\" : \"irradiance\",\n rangeMinimum: range.inputRange.minimumInclusive, rangeMaximum: range.inputRange.maximumInclusive,\n perBin: range.spectralInputModel.kind === \"per-spectral-bin\", photo: value.photo.value.photoSignal\n };\n // Acceptance before field throughput per wavelength, and every evaluation's irradiance, must reproduce exactly.\n // With a PSF, each group's kernel-weighted sum must equal the full quadrature's node irradiance.\n const values: Float64Array[] = [];\n const check = new WeakMap<object, object>();\n for (let ti = 0; ti < T; ti++) {\n const evaluations = value.instants[ti]!.evaluations, v = new Float64Array(S * P), psf = value.instants[ti]!.psf;\n if ((psf !== null) !== (k.psf !== undefined)) return undefined;\n let next = 0;\n for (let gi = 0; gi < S * P; gi++) {\n const s = Math.floor(gi / P), taps = plan.instants[ti]!.groups[gi]!.taps, tapValues = new Float64Array(taps.length);\n for (let pi = 0; pi < taps.length; pi++) {\n const request = taps[pi]!.request;\n let integrated = 0;\n for (let r = 0; r < k.pupilCount; r++) {\n const evaluation = evaluations[next++];\n if (!evaluation) return undefined;\n const o = evaluation.optics.value;\n let a = o.transmissionPath === \"spectral-transmission\" ? o.paraxialGeometricAcceptanceSolidAngleSteradians * (o.spectralTransmissionFactor as number)\n : Math.PI / (4 * (o.effectiveWorkingTStop as number) * (o.effectiveWorkingTStop as number));\n a *= o.frontOfLensFilterTransmissionFactor;\n if (Number.isNaN(c.acceptance[s]!)) c.acceptance[s] = a; else if (!Object.is(c.acceptance[s], a)) return undefined;\n const acceptance = c.acceptance[s]! * o.fieldThroughputFactor;\n const irradiance = evaluation.result.spectralRadianceWattsPerSquareMeterSteradianNanometer * acceptance;\n if (!Object.is(acceptance, o.effectiveAcceptanceAfterTransmissionAndFieldSteradians) ||\n !Object.is(irradiance, o.sensorPlaneSpectralIrradianceWattsPerSquareMeterNanometer) ||\n evaluation.result.sampleId !== request.sampleId + (evaluation.apertureRay ? \"-a\" + evaluation.apertureRay.pupilSampleIndex : \"\")) return undefined;\n integrated += irradiance * (evaluation.apertureRay?.weight ?? 1);\n }\n const factor = taps[pi]!.distortionAreaFactor;\n if (factor !== undefined) integrated *= factor;\n tapValues[pi] = integrated;\n }\n if (psf === null) v[gi] = tapValues[0]!;\n else {\n const sample = psf.value.irradianceSamples[gi];\n v[gi] = psfSum(self.kernels![gi]!, tapValues);\n if (!sample || !Object.is(v[gi], sample.spectralIrradianceWattsPerSquareMeterPerNanometer) || !sameData(sample.node, k.nodes[gi], check)) return undefined;\n }\n }\n if (next !== evaluations.length) return undefined;\n values.push(v);\n }\n if (c.acceptance.some(Number.isNaN)) return undefined;\n const full = value.photo.value.photoSignal;\n const mine = photo(k, c, values, environment, full.site, full.startOffsetSecondsFromOpeningReference,\n full.endOffsetSecondsFromOpeningReference, full.localExposureDurationSeconds, plan.instants.map(i => i.time));\n return mine && sameData(mine, full, new WeakMap()) ? c : undefined;\n}\n\nexport function createNativeEnvironmentLeanExecutor(frame: NativeEnvironmentLeanFrame): NativeEnvironmentLeanExecutor {\n const templates: Template[] = [];\n const candidates = new Map<number, Template>();\n const memo = new WeakMap<object, object>();\n const enabled = !leanDisabled && frame.identityBinding && frame.repeatWidth > 0 && frame.repeatHeight > 0;\n const phaseOf = (index: number): number => {\n const x = index % frame.nativeWidth, y = Math.floor(index / frame.nativeWidth);\n return (y % frame.repeatHeight) * frame.repeatWidth + (x % frame.repeatWidth);\n };\n return {\n plan(environment, index): LeanEnvironmentPlan | \"candidate\" | undefined {\n if (!enabled) return undefined;\n const phase = phaseOf(index);\n let t: Template | undefined;\n try {\n for (const template of templates) if (template.phase === phase && environmentMatches(environment, template.environment, memo)) { t = template; break; }\n } catch {\n return undefined;\n }\n if (!t) return templates.length < MAXIMUM_TEMPLATES ? \"candidate\" : undefined;\n if (t.disabled || !t.consts || t.executionVerified === false) return undefined;\n const leanPlan = geometry(t, t.consts, frame, environment, index);\n if (leanPlan) nativeEnvironmentLeanStatistics.plannedSites++;\n return leanPlan;\n },\n admitCandidate(environment, index, plan): void {\n const template: Template = { environment, phase: phaseOf(index), disabled: true };\n templates.push(template);\n candidates.set(index, template);\n try {\n const k = planConstants(environment, plan), self = geometry(template, k, frame, environment, index);\n if (!planReproduced(self, plan, k)) return;\n template.consts = k;\n template.selfPlan = self!;\n template.disabled = false;\n } catch {\n // An ineligible template leaves its sites on the full path.\n }\n },\n isCandidate(index): boolean { return candidates.has(index); },\n verifyCandidate(index, plan, result): void {\n const t = candidates.get(index);\n if (!t) return;\n candidates.delete(index);\n t.executionVerified = false;\n try {\n if (t.disabled || !t.consts || !t.selfPlan) return;\n const c = executionConstants(t.consts, t.environment, plan, result, t.selfPlan);\n t.selfPlan = undefined;\n if (!c) return;\n t.execution = c;\n t.executionVerified = true;\n } catch {\n // Unverified: sites of this template run the full path.\n }\n },\n execute(plan, evaluate, aperture, fullPlan): SensorEqeTemporalPhotoSignal | undefined {\n const t = plan.template, c = t.execution, k = t.consts;\n if (t.executionVerified !== true || !c || !k) return undefined;\n const environment = plan.owned, optics = (environment as unknown as Rec).optics;\n const S = k.spectralCount, P = k.spatialCount, kernels = plan.kernels;\n /** One tap: its callbacks in order, each result validated, the pupil sum, then the distortion area factor once. */\n const tapIrradiance = (tap: LeanTap, s: number): number => {\n let integrated = 0;\n const support: readonly (SensorApertureRay | undefined)[] = tap.apertureRays ?? [undefined];\n for (const ray of support) {\n const query = ray === undefined ? undefined : apertureRadianceQuery(tap.request, ray);\n const request = query === undefined ? tap.request : query.request, apertureRay = query?.apertureRay;\n const result = parseSceneRadianceEvaluationResult(apertureRay === undefined ? evaluate(request) : aperture!(request, apertureRay));\n if (result.sampleId !== request.sampleId || result.providerProfileId !== request.providerProfileId || result.sceneId !== request.sceneId ||\n result.wavelengthNanometers !== request.wavelengthNanometers || result.wavelengthBasis !== request.wavelengthBasis) {\n validateSceneRadianceEvaluationBindings({ ...k.sceneBindings, request, result });\n }\n let irradiance = result.spectralRadianceWattsPerSquareMeterSteradianNanometer * (c.acceptance[s]! * tap.fieldFactor);\n if (!tap.fieldValid || !Number.isFinite(irradiance) || irradiance < 0) {\n irradiance = calculateSceneRadianceToSensorIrradiance({ ...(optics as Parameters<typeof calculateSceneRadianceToSensorIrradiance>[0]),\n sceneRadianceRequest: request, sceneRadianceResult: result, imagePointMm: tap.sourcePointImagePlaneMm,\n fieldThroughput: tap.fieldThroughput }).value.sensorPlaneSpectralIrradianceWattsPerSquareMeterNanometer;\n }\n integrated += irradiance * (ray?.weight ?? 1);\n }\n // Distortion squeezes or stretches the ideal image; irradiance scales by 1/det once, as in the full executor.\n if (tap.distortionAreaFactor !== undefined) integrated *= tap.distortionAreaFactor;\n return integrated;\n };\n const values: Float64Array[] = [], times: number[] = [];\n let full: FullPlan | undefined;\n for (let ti = 0; ti < plan.instants.length; ti++) {\n const instant = plan.instants[ti]!;\n let v: Float64Array = new Float64Array(S * P);\n if (kernels === undefined) {\n // One tap per group, so the flat list is indexed by group.\n for (let gi = 0; gi < S * P; gi++) v[gi] = tapIrradiance(instant.taps[gi]!, Math.floor(gi / P));\n } else {\n const tapValues: Float64Array[] = [];\n for (let gi = 0; gi < S * P; gi++) {\n const first = k.tapOffsets[gi]!, s = Math.floor(gi / P), groupValues = new Float64Array(k.tapOffsets[gi + 1]! - first);\n for (let pi = 0; pi < groupValues.length; pi++) groupValues[pi] = tapIrradiance(instant.taps[first + pi]!, s);\n tapValues.push(groupValues);\n v[gi] = psfSum(kernels[gi]!, groupValues);\n }\n // The full executor runs its PSF quadrature (and its checks) here, after this instant's callbacks. When a check\n // fails, run that quadrature on the site's full plan (built without callbacks): it throws its own error or decides.\n if (!psfChecksPass(k, c, tapValues, v)) v = fullPsfInstant(full ??= fullPlan(), ti, tapValues);\n }\n values.push(v);\n times.push(instant.time);\n }\n nativeEnvironmentLeanStatistics.executedSites++;\n return photo(k, c, values, environment, plan.site, plan.start, plan.end, plan.duration, times) ??\n createSensorEqeTemporalPhotoSignal(fullPhotoInput(k, values, environment, times)).value.photoSignal;\n }\n };\n}\n\nfunction approximatelyEqual(actual: number, expected: number): boolean {\n const scale = Math.max(1, Math.abs(actual), Math.abs(expected));\n return Math.abs(actual - expected) <= REDUCTION_TOLERANCE * scale;\n}\n\n/** Photo-signal fields that vary per site; every other field is template-level. */\nconst PHOTO_SITE_FIELDS: ReadonlySet<string> = new Set([\"temporalIntegrationId\", \"site\", \"startOffsetSecondsFromOpeningReference\",\n \"endOffsetSecondsFromOpeningReference\", \"localExposureDurationSeconds\", \"expectedIncidentPhotonCount\", \"expectedGeneratedElectronCount\", \"temporalSamples\"]);\nconst SITE_ONLY: ReadonlySet<string> = new Set([\"site\"]);\nconst SITE_APPLICABILITY: ReadonlySet<string> = new Set([\"siteApplicability\"]);\nconst COMPLETENESS: ReadonlySet<string> = new Set([\"completenessProfile\"]);\nconst CAPACITY: ReadonlySet<string> = new Set([\"capacityProfile\"]);\nconst COMPLETENESS_SITE_FIELDS: ReadonlySet<string> = new Set([\"site\", \"startOffsetSecondsFromOpeningReference\", \"endOffsetSecondsFromOpeningReference\"]);\n\n/** Same own keys in the same order; values strictly equal except `skip` keys (compared by the caller). */\nfunction sameRecordExcept(a: unknown, b: unknown, skip: ReadonlySet<string>, memo: WeakMap<object, object>): boolean {\n if (typeof a !== \"object\" || typeof b !== \"object\" || a === null || b === null || Array.isArray(a) || Array.isArray(b) ||\n !isPlainRecord(a) || !isPlainRecord(b)) return false;\n const ar = a as Rec, br = b as Rec, ak = Object.keys(ar), bk = Object.keys(br);\n if (ak.length !== bk.length || Object.getOwnPropertySymbols(ar).length !== 0 || Object.getOwnPropertySymbols(br).length !== 0) return false;\n for (let i = 0; i < ak.length; i++) if (ak[i] !== bk[i]) return false;\n for (const key of ak) if (!skip.has(key) && !sameData(ar[key], br[key], memo)) return false;\n return true;\n}\n/** A plain {x, y} record equal (Object.is) to the given coordinates. */\nfunction siteSlot(value: unknown, x: number, y: number): boolean {\n if (typeof value !== \"object\" || value === null || Array.isArray(value) || !isPlainRecord(value)) return false;\n const keys = Object.keys(value), r = value as Rec;\n return keys.length === 2 && keys[0] === \"x\" && keys[1] === \"y\" && Object.is(r.x, x) && Object.is(r.y, y) && Object.getOwnPropertySymbols(value).length === 0;\n}\n/** A record whose optional `site` key (the only one skipped) holds each side's own coordinates. */\nfunction sameWithSiteSlot(a: unknown, b: unknown, ax: number, ay: number, bx: number, by: number, memo: WeakMap<object, object>): boolean {\n if (!sameRecordExcept(a, b, SITE_ONLY, memo)) return false;\n const ar = a as Rec, br = b as Rec;\n return !(\"site\" in ar) || (siteSlot(ar.site, ax, ay) && siteSlot(br.site, bx, by));\n}\n\ninterface SensorTemplate {\n site: Site;\n photo: SensorEqeTemporalPhotoSignal;\n phase: number; x: number; y: number;\n verified: boolean;\n darkRate: number;\n capacity: number;\n readout: ResolvedSensorReadoutRegime;\n pattern: SensorFixedPatternNoiseProfile | undefined;\n whiteCode: number;\n}\ninterface SensorHandle {\n template: SensorTemplate; site: Site; photo: SensorEqeTemporalPhotoSignal; x: number; y: number; darkE: number; total: number;\n}\n\n/** Sensor-site equality except the index-bound site slots and the per-site photo numbers. */\nfunction sensorMatches(site: Site, photo: SensorEqeTemporalPhotoSignal, x: number, y: number, t: SensorTemplate, memo: WeakMap<object, object>): boolean {\n const a = site as unknown as Rec, b = t.site as unknown as Rec;\n if (typeof a !== \"object\" || a === null || !isPlainRecord(a)) return false;\n const ak = Object.keys(a), bk = Object.keys(b);\n if (ak.length !== bk.length || Object.getOwnPropertySymbols(a).length !== 0) return false;\n for (let i = 0; i < ak.length; i++) if (ak[i] !== bk[i]) return false;\n for (const key of ak) {\n if (key === \"environment\") continue;\n if (key === \"darkCurrentProfile\") {\n const ad = a.darkCurrentProfile as Rec, bd = b.darkCurrentProfile as Rec;\n if (!sameRecordExcept(ad, bd, SITE_APPLICABILITY, memo) ||\n !sameWithSiteSlot(ad.siteApplicability, bd.siteApplicability, x, y, t.x, t.y, memo)) return false;\n } else if (key === \"charge\") {\n const ac = a.charge as Rec, bc = b.charge as Rec;\n if (!sameRecordExcept(ac, bc, COMPLETENESS, memo) || \"additionalChargeComponents\" in ac) return false;\n const ap = ac.completenessProfile as Rec, bp = bc.completenessProfile as Rec;\n if (!sameRecordExcept(ap, bp, COMPLETENESS_SITE_FIELDS, memo) || !siteSlot(ap.site, x, y) || !siteSlot(bp.site, t.x, t.y) ||\n ap.startOffsetSecondsFromOpeningReference !== photo.startOffsetSecondsFromOpeningReference ||\n ap.endOffsetSecondsFromOpeningReference !== photo.endOffsetSecondsFromOpeningReference) return false;\n } else if (key === \"readout\") {\n const ar = a.readout as Rec, br = b.readout as Rec;\n if (!sameRecordExcept(ar, br, CAPACITY, memo)) return false;\n const ac = ar.capacityProfile as Rec, bc = br.capacityProfile as Rec;\n if (!sameRecordExcept(ac, bc, SITE_APPLICABILITY, memo) ||\n !sameWithSiteSlot(ac.siteApplicability, bc.siteApplicability, x, y, t.x, t.y, memo)) return false;\n } else if (!sameData(a[key], b[key], memo)) return false;\n }\n return sameRecordExcept(photo, t.photo, PHOTO_SITE_FIELDS, memo) && siteSlot(photo.site, x, y) &&\n photo.temporalSamples.length === t.photo.temporalSamples.length;\n}\n\n/** The sensor stage of calculateNativeRawSite, in the same operation order. Returns undefined when one of its checks would throw. */\nfunction leanSensorSite(t: SensorTemplate, h: Pick<SensorHandle, \"photo\" | \"darkE\" | \"total\" | \"x\" | \"y\">, index: number, seed: number):\n (NativeRawLeanOutput & { photoRealized: number; darkRealized: number }) | undefined {\n const ratio = h.total / t.capacity, headroom = t.capacity - h.total;\n if (!Number.isFinite(ratio) || !Number.isFinite(headroom)) return undefined;\n const pattern = t.pattern === undefined ? null : evaluateParsedFixedPatternSite(t.pattern, { x: h.x, y: h.y });\n const photoE = h.photo.expectedGeneratedElectronCount;\n const photoMean = pattern === null ? photoE : photoE * pattern.photoResponseGainFactor;\n const darkMean = pattern === null ? h.darkE : h.darkE * pattern.darkCurrentFactor;\n if (!Number.isFinite(photoMean) || photoMean < 0 || !Number.isFinite(darkMean) || darkMean < 0) return undefined;\n const random = createDeterministicUniformStream(deriveNativeSiteStreamSeedUint32(seed, index, NATIVE_SITE_CHARGE_STREAM_ID));\n const photoRealized = samplePoisson(photoMean, random), darkRealized = samplePoisson(darkMean, random);\n const realized = photoRealized + darkRealized + 0;\n if (!Number.isFinite(realized) || realized < 0) return undefined;\n const readRandom = createDeterministicUniformStream(deriveNativeSiteStreamSeedUint32(seed, index, NATIVE_SITE_READ_NOISE_STREAM_ID));\n const regime = t.readout.regime, capacity = t.capacity;\n const afterPhysical = Math.min(realized, capacity), physicalSaturation = afterPhysical < realized;\n const sampled = regime.readNoiseComponents.map(component => component.rmsElectrons.value === 0 ? 0 :\n sampleDeterministicStandardNormal(readRandom) * component.rmsElectrons.value);\n let totalReadNoise = 0;\n for (const value of sampled) totalReadNoise = totalReadNoise + value;\n const afterReadNoise = afterPhysical + totalReadNoise + (pattern === null ? 0 : pattern.readoutOffsetElectrons);\n const threshold = regime.preAdcSaturationElectronEquivalent.value;\n const afterPreAdc = Math.min(afterReadNoise, threshold), preAdcSaturation = afterReadNoise > threshold;\n const quantized = adcTransfer(regime, t.readout.adcMaximumCode, afterPreAdc).quantized;\n const digitalSaturationCode = regime.adc.digitalSaturationCode;\n return { rawCode: Math.max(0, Math.min(quantized, digitalSaturationCode)), blackLevelCode: regime.adc.blackLevelCode, digitalSaturationCode,\n flags: Number(physicalSaturation) | Number(preAdcSaturation) << 1 | Number(quantized >= digitalSaturationCode) << 2,\n whiteCode: t.whiteCode, photoRealized, darkRealized };\n}\n\n/** The Kahan (compensated) total that composeSensorAccumulatedCharge computes, for photo and dark charge only. */\nfunction chargeTotal(photoE: number, darkE: number): number {\n let sum = 0, correction = 0;\n for (const value of [photoE, darkE]) {\n const adjusted = value - correction, next = sum + adjusted;\n correction = (next - sum) - adjusted; sum = next;\n }\n return sum;\n}\n\n/**\n * Lean sensor stage for createNativeEnvironmentRawTask.\n *\n * claim() runs in the environment task, at the point where the full path composes the site (dark charge), and\n * evaluates every parse-phase check there. compute() runs in the native RAW task's compute phase. If any\n * compute-phase check fails, it falls back to the full parse and calculateNativeRawSite.\n */\nexport interface NativeEnvironmentSensorLean {\n readonly hook: NativeRawLeanSensorHook;\n /** Starts a tile: fully composed sites of the previous tile are forgotten. */\n beginTile(): void;\n /** A lean tile entry for a site matching a verified template, or undefined (compose it in full and remember it). */\n claim(site: Site, photo: SensorEqeTemporalPhotoSignal, index: number): object | undefined;\n /** Remembers a fully composed site so its full computation can become a template. */\n remember(index: number, site: Site, photo: SensorEqeTemporalPhotoSignal): void;\n}\n\nexport function createNativeEnvironmentSensorLean(frame: NativeEnvironmentLeanFrame, producerFrame: NativeRawProducerFrameContext,\n nativeWindow: ((point: { x: number; y: number }) => { startOffsetSecondsFromOpeningReference: number; endOffsetSecondsFromOpeningReference: number;\n localExposureDurationSeconds: number }) | undefined): NativeEnvironmentSensorLean {\n const enabled = !leanDisabled && nativeWindow !== undefined && frame.identityBinding && frame.repeatWidth > 0 && frame.repeatHeight > 0;\n const templates: SensorTemplate[] = [], handles = new WeakMap<object, SensorHandle>(), memo = new WeakMap<object, object>();\n let pending = new Map<number, { site: Site; photo: SensorEqeTemporalPhotoSignal }>();\n const coordinates = (index: number): { x: number; y: number; phase: number } => {\n const x = index % frame.nativeWidth, y = Math.floor(index / frame.nativeWidth);\n return { x, y, phase: (y % frame.repeatHeight) * frame.repeatWidth + (x % frame.repeatWidth) };\n };\n const find = (site: Site, photo: SensorEqeTemporalPhotoSignal, x: number, y: number, phase: number): SensorTemplate | undefined => {\n for (const t of templates) if (t.phase === phase && sensorMatches(site, photo, x, y, t, memo)) return t;\n return undefined;\n };\n return {\n beginTile(): void { pending = new Map(); },\n claim(site, photo, index): object | undefined {\n if (!enabled) return undefined;\n try {\n const { x, y, phase } = coordinates(index), t = find(site, photo, x, y, phase);\n if (!t || !t.verified) return undefined;\n // Parse-phase predicates of the full path: EQE domain, dark and total charge, and the committed local window.\n const photoE = photo.expectedGeneratedElectronCount, duration = photo.localExposureDurationSeconds;\n if (!(photoE <= photo.expectedIncidentPhotonCount)) return undefined;\n const darkE = t.darkRate * duration;\n if (!Number.isFinite(darkE) || darkE < 0) return undefined;\n const total = chargeTotal(photoE, darkE);\n if (!Number.isFinite(total) || total < 0) return undefined;\n const window = nativeWindow!({ x: x + .5, y: y + .5 });\n if (photo.startOffsetSecondsFromOpeningReference !== window.startOffsetSecondsFromOpeningReference ||\n photo.endOffsetSecondsFromOpeningReference !== window.endOffsetSecondsFromOpeningReference ||\n duration !== window.localExposureDurationSeconds) return undefined;\n const marker = Object.freeze({});\n handles.set(marker, { template: t, site, photo, x, y, darkE, total });\n return marker;\n } catch {\n return undefined;\n }\n },\n remember(index, site, photo): void { if (enabled) pending.set(index, { site, photo }); },\n hook: {\n claim(site: unknown): object | undefined {\n return typeof site === \"object\" && site !== null && handles.has(site) ? site : undefined;\n },\n compute(handle, index, seed, timing): NativeRawLeanOutput {\n const h = handles.get(handle)!, out = leanSensorSite(h.template, h, index, seed);\n if (out) nativeEnvironmentLeanStatistics.sensorSites++;\n if (out) return { rawCode: out.rawCode, blackLevelCode: out.blackLevelCode, digitalSaturationCode: out.digitalSaturationCode, flags: out.flags, whiteCode: out.whiteCode };\n // A compute-phase check failed: the full path computes (and throws) exactly as it would have.\n const parsed = parseNativeRawProducerSite(composeNativeEnvironmentSensorSite(h.site, h.photo), index, producerFrame, timing);\n const r = calculateNativeRawSite(parsed, seed, index).readout.value;\n return { rawCode: r.rawCode, blackLevelCode: r.blackLevelCode, digitalSaturationCode: r.digitalSaturationCode,\n flags: Number(r.physicalScalarSaturationApplied) | Number(r.preAdcSaturationApplied) << 1 | Number(r.digitalSaturationApplied) << 2,\n whiteCode: calculateSiteEffectiveSaturationCode(r, parsed.readoutProfile, parsed.regimeId) };\n },\n observe(index: number, parsed: SensorRawProducerSiteInput, result: ReturnType<typeof calculateNativeRawSite>, whiteCode: number, seed: number): void {\n const entry = pending.get(index);\n pending.delete(index);\n if (!entry || templates.length >= MAXIMUM_TEMPLATES) return;\n try {\n const { x, y, phase } = coordinates(index), { site, photo } = entry;\n if (find(site, photo, x, y, phase) !== undefined) return;\n const readout = resolveSensorReadoutRegime({ profile: parsed.readoutProfile, regimeId: parsed.regimeId });\n const t: SensorTemplate = { site, photo, phase, x, y, verified: false, darkRate: parsed.charge.darkCharge.darkCurrentElectronsPerSecond,\n capacity: result.capacity.value.physicalChargeCapacityElectrons, readout, pattern: parsed.fixedPatternNoise, whiteCode };\n templates.push(t);\n // Self-check: the template matches itself and the lean arithmetic reproduces its full computation bit for bit.\n if (!sensorMatches(site, photo, x, y, t, new WeakMap())) return;\n const darkE = t.darkRate * photo.localExposureDurationSeconds, total = chargeTotal(photo.expectedGeneratedElectronCount, darkE);\n const r = result.readout.value, realization = result.realization.value;\n const out = leanSensorSite(t, { photo, darkE, total, x, y }, index, seed);\n if (!out || !Object.is(darkE, parsed.charge.darkCharge.expectedDarkElectronCount) ||\n !Object.is(total, result.accumulatedCharge.value.totalExpectedStoredElectronCount) ||\n !Object.is(out.photoRealized, realization.photoRealizedElectronCount) || !Object.is(out.darkRealized, realization.darkRealizedElectronCount) ||\n realization.additionalComponents.length !== 0 || out.rawCode !== r.rawCode || out.blackLevelCode !== r.blackLevelCode ||\n out.digitalSaturationCode !== r.digitalSaturationCode || out.flags !== (Number(r.physicalScalarSaturationApplied) |\n Number(r.preAdcSaturationApplied) << 1 | Number(r.digitalSaturationApplied) << 2)) return;\n t.verified = true;\n } catch {\n // An unverified template leaves its sites on the full path.\n }\n }\n }\n };\n}\n"]}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keeps (retains) the result of the optical stage of a native environment capture, so the sensor stage
|
|
3
|
+
* can be re-run with new post-optics settings without calling the radiance callbacks again.
|
|
4
|
+
*
|
|
5
|
+
* Optical stage: scene radiance → optics, PSF (point-spread function) and pupil → expected photo signal
|
|
6
|
+
* via EQE (external quantum efficiency). Sensor stage: dark charge → charge realization → readout.
|
|
7
|
+
*
|
|
8
|
+
* Reuse is exact, not approximate: the sensor stage receives a photo signal whose every number is the
|
|
9
|
+
* float64 value the optical stage produced, and the same charge/noise/ADC code runs on it. Reuse is
|
|
10
|
+
* refused unless the capture's optical binding and every site's environment input are strictly equal
|
|
11
|
+
* to those the stage was produced from.
|
|
12
|
+
* @see docs/NATIVE_RAW_AND_PRINT.md for the invariance analysis, memory bound and limits.
|
|
13
|
+
*/
|
|
14
|
+
import { createNativeRawTask, type NativeRawInput, type NativeRawPlan, type NativeRawTileRequest } from "./native-raw.js";
|
|
15
|
+
import type { SimulateEnvironmentSensorRawFrameInput } from "./environment-raw-producer.js";
|
|
16
|
+
import type { SensorRawProducerSiteInput } from "./sensor-raw-producer.js";
|
|
17
|
+
import { type SensorEqeTemporalPhotoSignal } from "../sensor/temporal-photo-signal.js";
|
|
18
|
+
type EnvironmentSite = SimulateEnvironmentSensorRawFrameInput["sites"][number];
|
|
19
|
+
type SiteEnvironment = EnvironmentSite["environment"];
|
|
20
|
+
/**
|
|
21
|
+
* Fixed retention limits. The per-site footprint of a retained optical stage is
|
|
22
|
+
* `fixedBytesPerSite + bytesPerTemporalSamplePerSite × temporalSampleCount` bytes of typed-array storage;
|
|
23
|
+
* distinct environment and photo templates (each about one site's input size) are capped separately.
|
|
24
|
+
*/
|
|
25
|
+
export declare const NATIVE_ENVIRONMENT_OPTICAL_STAGE_LIMITS: Readonly<{
|
|
26
|
+
/** Two one-byte template indices plus seven float64 values (site x/y, window start/end/duration, photon/electron counts). */
|
|
27
|
+
fixedBytesPerSite: 58;
|
|
28
|
+
/** Three float64 values per temporal midpoint: time, incident-photon rate, generated-electron rate. */
|
|
29
|
+
bytesPerTemporalSamplePerSite: 24;
|
|
30
|
+
/** Distinct per-site environment inputs once the site index and integration ID are removed. */
|
|
31
|
+
maximumEnvironmentTemplates: 256;
|
|
32
|
+
/** Distinct photo-signal identity/evidence records once per-site numbers are removed. */
|
|
33
|
+
maximumPhotoTemplates: 256;
|
|
34
|
+
}>;
|
|
35
|
+
/** Optional request on NativeEnvironmentRawInput to keep the optical stage. The byte budget covers the typed-array storage described by the limits. */
|
|
36
|
+
export interface NativeEnvironmentOpticalStageRetention {
|
|
37
|
+
maximumRetainedBytes: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Opaque, engine-owned optical-stage result. It is valid only for captures whose optical binding and every
|
|
41
|
+
* site's environment input are strictly equal to those that produced it. dispose() zeroes and releases the
|
|
42
|
+
* storage; a disposed stage refuses every later use.
|
|
43
|
+
*/
|
|
44
|
+
export interface NativeEnvironmentOpticalStage {
|
|
45
|
+
readonly kind: "native-environment-optical-stage";
|
|
46
|
+
readonly pixelCount: number;
|
|
47
|
+
readonly temporalSampleCount: number;
|
|
48
|
+
/** Typed-array bytes held: pixelCount × (fixedBytesPerSite + bytesPerTemporalSamplePerSite × temporalSampleCount). */
|
|
49
|
+
readonly retainedBytes: number;
|
|
50
|
+
/** Radiance callbacks the producing task executed; reuse executes none. */
|
|
51
|
+
readonly providerEvaluationCount: number;
|
|
52
|
+
readonly disposed: boolean;
|
|
53
|
+
dispose(): void;
|
|
54
|
+
}
|
|
55
|
+
/** Input for a post-optics re-run. `raw` may differ from the original capture only in post-optics fields. */
|
|
56
|
+
export interface NativeEnvironmentSensorStageInput {
|
|
57
|
+
raw: NativeRawInput;
|
|
58
|
+
sceneBinding: SimulateEnvironmentSensorRawFrameInput["sceneBinding"];
|
|
59
|
+
}
|
|
60
|
+
/** Supplies the same physical site inputs as the original capture. Environments must equal the retained ones exactly. */
|
|
61
|
+
export interface NativeEnvironmentSensorStageProvider {
|
|
62
|
+
readTile(request: Readonly<NativeRawTileRequest>, signal: AbortSignal): Promise<{
|
|
63
|
+
captureId: string;
|
|
64
|
+
frameId: string;
|
|
65
|
+
x: number;
|
|
66
|
+
y: number;
|
|
67
|
+
width: number;
|
|
68
|
+
height: number;
|
|
69
|
+
sites: SimulateEnvironmentSensorRawFrameInput["sites"];
|
|
70
|
+
}>;
|
|
71
|
+
yieldControl(signal: AbortSignal): Promise<void>;
|
|
72
|
+
}
|
|
73
|
+
/** Shared by full acquisition and reuse so the sensor stage receives an identical site record either way. */
|
|
74
|
+
export declare function composeNativeEnvironmentSensorSite(site: Omit<EnvironmentSite, "environment">, photoSignal: SensorEqeTemporalPhotoSignal): SensorRawProducerSiteInput;
|
|
75
|
+
/** Validates the optional retention request before any provider work. */
|
|
76
|
+
export declare function parseNativeEnvironmentOpticalStageRetention(value: unknown): NativeEnvironmentOpticalStageRetention;
|
|
77
|
+
/** Internal recorder used by createNativeEnvironmentRawTask when retention is requested. */
|
|
78
|
+
export interface NativeEnvironmentOpticalStageRecorder {
|
|
79
|
+
/** Interns one planned site before any radiance callback; throws if a limit or the byte budget would be exceeded. */
|
|
80
|
+
admit(index: number, environment: SiteEnvironment, sharedCanonical: string): void;
|
|
81
|
+
record(index: number, photoSignal: SensorEqeTemporalPhotoSignal): void;
|
|
82
|
+
finish(providerEvaluationCount: number): NativeEnvironmentOpticalStage;
|
|
83
|
+
discard(): void;
|
|
84
|
+
}
|
|
85
|
+
export declare function createNativeEnvironmentOpticalStageRecorder(plan: NativeRawPlan, sceneBinding: unknown, retention: NativeEnvironmentOpticalStageRetention): NativeEnvironmentOpticalStageRecorder;
|
|
86
|
+
/**
|
|
87
|
+
* Internal: re-runs only the sensor stage (dark charge, charge realization, capacity, seeded noise and ADC) from a retained
|
|
88
|
+
* optical stage. The capture may change post-optics settings only: noise seed/realization, ISO metadata, readout
|
|
89
|
+
* regime/gain, charge sampling/capacity/completeness, dark-current profile and temperature, white-balance intent,
|
|
90
|
+
* capture identity and tile width. Every optical input must be strictly equal, otherwise this refuses before
|
|
91
|
+
* output: the capture binding is checked here, each site's environment as its tile is read.
|
|
92
|
+
*/
|
|
93
|
+
export declare function createSensorStageRawTask<B>(input: NativeEnvironmentSensorStageInput, opticalStage: NativeEnvironmentOpticalStage, provider: NativeEnvironmentSensorStageProvider, parseSceneBinding: (value: unknown) => B): {
|
|
94
|
+
task: ReturnType<typeof createNativeRawTask>;
|
|
95
|
+
sceneBinding: B;
|
|
96
|
+
};
|
|
97
|
+
export {};
|