@photivra/engine 1.5.0 → 2.1.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 +414 -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 +116 -9
- package/dist/capture/native-raw-development.js +221 -62
- 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 +65 -12
- package/dist/capture/native-raw.js +81 -19
- 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/diffraction-provider.d.ts +30 -0
- package/dist/facade/diffraction-provider.js +127 -0
- package/dist/facade/diffraction-provider.js.map +1 -0
- package/dist/facade/host-yield.d.ts +7 -0
- package/dist/facade/host-yield.js +19 -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 +363 -0
- package/dist/facade/simulate-capture.js +1281 -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 +91 -25
- package/dist/index.js +60 -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-psf-profile.d.ts +118 -0
- package/dist/optics/diffraction-psf-profile.js +252 -0
- package/dist/optics/diffraction-psf-profile.js.map +1 -0
- 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 +777 -2
- package/docs/QUICK_START.md +663 -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 -8
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +21 -10
- 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 +2253 -3
- 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 +397 -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-psf-profile.md +96 -0
- 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 -11
- 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/DENSE_PUPIL_QUALIFICATION.md +0 -121
- 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 -54
- 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_1_5_0.md +0 -105
- 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/SEPARABLE_EMISSION_DRAFT.md +0 -103
- 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/dense-pupil-2026-10-06/pilot.jsonl +0 -6
- 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
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Sensor RAW frames: native CFA (colour filter array) samples attached to a committed capture.
|
|
4
|
+
*
|
|
5
|
+
* The parser checks that every native site has exactly one sample, within size limits, and that CFA,
|
|
6
|
+
* capture mode, site and code identities match exactly. Committing a frame stores the samples and
|
|
7
|
+
* capture metadata only: no demosaicing, white balance (WB), tone mapping or file packing.
|
|
6
8
|
* @see docs/SENSOR_RAW_FRAME.md for equations, coordinate/unit conventions, blockers and support
|
|
7
9
|
* limits.
|
|
8
10
|
*/
|
|
@@ -34,7 +36,8 @@ function point(value) {
|
|
|
34
36
|
}
|
|
35
37
|
const sampleKeys = ["version", "captureModeId", "modeSampleCoordinateSystem", "modeSampleIndexFullFrame",
|
|
36
38
|
"colorSamplingProfileId", "colorSamplingSite", "channelId", "rawCode", "blackLevelCode", "digitalSaturationCode",
|
|
37
|
-
"blackSubtractedNormalizedCode", "
|
|
39
|
+
"blackSubtractedNormalizedCode", "effectiveSaturationCode", "systemConversionGainElectronsPerCode",
|
|
40
|
+
"readNoiseRmsElectrons", "readoutProfileId", "readoutRegimeId", "sourceChargeSeedUint32",
|
|
38
41
|
"sourceReadNoiseSeedUint32", "physicalScalarSaturationApplied", "digitalSaturationApplied",
|
|
39
42
|
"cfaPhasePreservedInNativeCoordinates", "physicalOrientationApplied", "outputRotationApplied",
|
|
40
43
|
"groupedModeCombinationApplied", "reconstructionApplied", "aliasingModeled", "moireModeled"];
|
|
@@ -44,7 +47,7 @@ function sample(value) {
|
|
|
44
47
|
s.cfaPhasePreservedInNativeCoordinates !== true || ["physicalOrientationApplied", "outputRotationApplied",
|
|
45
48
|
"groupedModeCombinationApplied", "reconstructionApplied", "aliasingModeled", "moireModeled"].some((key) => s[key] !== false) ||
|
|
46
49
|
typeof s.physicalScalarSaturationApplied !== "boolean" || typeof s.digitalSaturationApplied !== "boolean") {
|
|
47
|
-
throw new InvalidConfigurationError("RAW-frame requires native unreconstructed
|
|
50
|
+
throw new InvalidConfigurationError("RAW-frame requires native unreconstructed sensor-pipeline samples with explicit flags.");
|
|
48
51
|
}
|
|
49
52
|
const rawCode = integer(s.rawCode, 65535), blackLevelCode = integer(s.blackLevelCode, 65535), digitalSaturationCode = integer(s.digitalSaturationCode, 65535);
|
|
50
53
|
if (digitalSaturationCode <= blackLevelCode || rawCode > digitalSaturationCode ||
|
|
@@ -53,17 +56,23 @@ function sample(value) {
|
|
|
53
56
|
s.blackSubtractedNormalizedCode !== (rawCode - blackLevelCode) / (digitalSaturationCode - blackLevelCode)) {
|
|
54
57
|
throw new InvalidConfigurationError("RAW-frame code/black/white/normalization mismatch.");
|
|
55
58
|
}
|
|
59
|
+
const effectiveSaturationCode = integer(s.effectiveSaturationCode, 65535), gain = s.systemConversionGainElectronsPerCode, readNoise = s.readNoiseRmsElectrons;
|
|
60
|
+
if (effectiveSaturationCode <= blackLevelCode || effectiveSaturationCode > digitalSaturationCode ||
|
|
61
|
+
typeof gain !== "number" || !Number.isFinite(gain) || gain <= 0 || typeof readNoise !== "number" || !Number.isFinite(readNoise) || readNoise < 0) {
|
|
62
|
+
throw new InvalidConfigurationError("RAW-frame effective white level, conversion gain or read noise is invalid.");
|
|
63
|
+
}
|
|
56
64
|
return { version: "0.1.0", captureModeId: id(s.captureModeId), modeSampleCoordinateSystem: s.modeSampleCoordinateSystem,
|
|
57
65
|
modeSampleIndexFullFrame: point(s.modeSampleIndexFullFrame), colorSamplingProfileId: id(s.colorSamplingProfileId),
|
|
58
66
|
colorSamplingSite: point(s.colorSamplingSite), channelId: id(s.channelId), rawCode, blackLevelCode, digitalSaturationCode,
|
|
59
|
-
blackSubtractedNormalizedCode: s.blackSubtractedNormalizedCode,
|
|
67
|
+
blackSubtractedNormalizedCode: s.blackSubtractedNormalizedCode, effectiveSaturationCode,
|
|
68
|
+
systemConversionGainElectronsPerCode: gain, readNoiseRmsElectrons: Object.is(readNoise, -0) ? 0 : readNoise, readoutProfileId: id(s.readoutProfileId),
|
|
60
69
|
readoutRegimeId: id(s.readoutRegimeId), sourceChargeSeedUint32: integer(s.sourceChargeSeedUint32, 0xffffffff),
|
|
61
70
|
sourceReadNoiseSeedUint32: integer(s.sourceReadNoiseSeedUint32, 0xffffffff),
|
|
62
71
|
physicalScalarSaturationApplied: s.physicalScalarSaturationApplied, digitalSaturationApplied: s.digitalSaturationApplied,
|
|
63
72
|
cfaPhasePreservedInNativeCoordinates: true, physicalOrientationApplied: false, outputRotationApplied: false,
|
|
64
73
|
groupedModeCombinationApplied: false, reconstructionApplied: false, aliasingModeled: false, moireModeled: false };
|
|
65
74
|
}
|
|
66
|
-
/**
|
|
75
|
+
/** Checks that every native site has one sample, within limits, and that CFA, mode, site and code identities match exactly. No I/O. */
|
|
67
76
|
export function parseSensorRawFrameInput(value) {
|
|
68
77
|
const r = object(value, ["frameId", "capture", "modeId", "captureModeProfile", "colorSamplingProfile",
|
|
69
78
|
"bindingProfile", "containerBitDepth", "samples"]);
|
|
@@ -77,7 +86,15 @@ export function parseSensorRawFrameInput(value) {
|
|
|
77
86
|
mode.perFrameSampling.kind !== "native-effective-raster" || (mode.reconstructionStages?.length ?? 0) !== 0) {
|
|
78
87
|
throw new InvalidConfigurationError("RAW-frame requires bounded single-frame native periodic CFA coverage and uint16 storage.");
|
|
79
88
|
}
|
|
80
|
-
const samples = r.samples.map(sample);
|
|
89
|
+
const samples = r.samples.map(sample), layout = colorSamplingProfile.layout, phaseSample = [];
|
|
90
|
+
for (let i = 0; i < samples.length; i++) {
|
|
91
|
+
// Readout constants are per CFA phase: one white level, gain and read noise for every site of a phase.
|
|
92
|
+
const s = samples[i], phase = (Math.floor(i / native.pixelWidth) % layout.repeatHeightSites) * layout.repeatWidthSites + (i % native.pixelWidth) % layout.repeatWidthSites;
|
|
93
|
+
const first = phaseSample[phase] ??= s;
|
|
94
|
+
if (first.effectiveSaturationCode !== s.effectiveSaturationCode || first.systemConversionGainElectronsPerCode !== s.systemConversionGainElectronsPerCode ||
|
|
95
|
+
first.readNoiseRmsElectrons !== s.readNoiseRmsElectrons)
|
|
96
|
+
throw new InvalidConfigurationError("RAW-frame readout white level, gain and read noise must be constant per CFA phase.");
|
|
97
|
+
}
|
|
81
98
|
for (let i = 0; i < samples.length; i++) {
|
|
82
99
|
const s = samples[i], x = i % native.pixelWidth, y = Math.floor(i / native.pixelWidth);
|
|
83
100
|
const c = resolveCaptureModeColorSamplingContributors({ nativeRaster: native, captureModeProfile, modeId,
|
|
@@ -93,7 +110,7 @@ export function parseSensorRawFrameInput(value) {
|
|
|
93
110
|
}
|
|
94
111
|
return { frameId, capture, modeId, captureModeProfile, colorSamplingProfile, bindingProfile, containerBitDepth: 16, samples };
|
|
95
112
|
}
|
|
96
|
-
/** Commits native RAW samples and capture metadata
|
|
113
|
+
/** Commits native RAW samples and capture metadata. No demosaicing, WB, tone mapping or file packing. */
|
|
97
114
|
export function createSensorRawFrame(input) {
|
|
98
115
|
const value = parseSensorRawFrameInput(input);
|
|
99
116
|
const frame = { ...value, schemaVersion: SENSOR_RAW_FRAME_SCHEMA_VERSION, sampleDomain: "native-cfa-raw-code",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sensor-raw-frame.js","sourceRoot":"","sources":["../../src/capture/sensor-raw-frame.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sensor-raw-frame.js","sourceRoot":"","sources":["../../src/capture/sensor-raw-frame.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Sensor RAW frames: native CFA (colour filter array) samples attached to a committed capture.\n *\n * The parser checks that every native site has exactly one sample, within size limits, and that CFA,\n * capture mode, site and code identities match exactly. Committing a frame stores the samples and\n * capture metadata only: no demosaicing, white balance (WB), tone mapping or file packing.\n * @see docs/SENSOR_RAW_FRAME.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { requireAllowlistedRecord, requirePublicOpaqueId } from \"../core/record-validation.js\";\nimport { RAW_ATTACHMENT_MAX_NATIVE_SITES } from \"./raw-frame-limits.js\";\n\nimport { freezeOwnedData } from \"../core/owned-data.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { parseSimulatedCapture, type SimulatedCapture } from \"./simulated-capture.js\";\nimport { parseSensorColorSamplingProfile, type SensorColorSamplingProfile } from \"../sensor/color-sampling.js\";\nimport { parseCaptureModeProfile, type CaptureModeProfile } from \"../sensor/capture-mode.js\";\nimport { parseNativeEffectiveRasterColorSamplingBindingProfile, resolveCaptureModeColorSamplingContributors,\n type NativeEffectiveRasterColorSamplingBindingProfile } from \"../sensor/capture-color-sampling-binding.js\";\nimport { type SensorRawCaptureSample } from \"../sensor/raw-reconstruction.js\";\n\nexport const SENSOR_RAW_FRAME_SCHEMA_VERSION = \"0.1.0\" as const;\n/** Declares that native CFA samples from the sensor model belong to a committed photographic capture. */\nexport interface SensorRawFrameInput {\n frameId: string;\n capture: SimulatedCapture;\n modeId: string;\n captureModeProfile: CaptureModeProfile;\n colorSamplingProfile: SensorColorSamplingProfile;\n bindingProfile: NativeEffectiveRasterColorSamplingBindingProfile;\n containerBitDepth: 16;\n /** Exactly one sample per native site, row-major. Not processed RGB with a mask applied. */\n samples: readonly SensorRawCaptureSample[];\n}\n/** Immutable attached RAW frame. Passing the structural checks does not prove the producer was correct or that the data is DNG-compatible. */\nexport interface SensorRawFrame extends SensorRawFrameInput {\n schemaVersion: typeof SENSOR_RAW_FRAME_SCHEMA_VERSION;\n sampleDomain: \"native-cfa-raw-code\";\n sampleOrder: \"native-row-major\";\n producerBinding: \"caller-declared-capture-attachment\";\n reconstructionApplied: false;\n renderingApplied: false;\n nativePixelWidth: number;\n nativePixelHeight: number;\n}\nfunction object(value: unknown, keys: readonly string[]): Record<string, unknown> {\n return requireAllowlistedRecord(value, keys, \"Invalid RAW-frame fields.\");\n}\nfunction id(value: unknown): string {\n return requirePublicOpaqueId(value, \"Invalid public RAW-frame ID.\");\n}\nfunction integer(value: unknown, maximum: number): number {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 0 || value > maximum) {\n throw new InvalidConfigurationError(\"Invalid RAW-frame integer.\");\n }\n return Object.is(value, -0) ? 0 : value;\n}\nfunction point(value: unknown): { x: number; y: number } {\n const r = object(value, [\"x\", \"y\"]); return { x: integer(r.x, 65535), y: integer(r.y, 65535) };\n}\nconst sampleKeys = [\"version\", \"captureModeId\", \"modeSampleCoordinateSystem\", \"modeSampleIndexFullFrame\",\n \"colorSamplingProfileId\", \"colorSamplingSite\", \"channelId\", \"rawCode\", \"blackLevelCode\", \"digitalSaturationCode\",\n \"blackSubtractedNormalizedCode\", \"effectiveSaturationCode\", \"systemConversionGainElectronsPerCode\",\n \"readNoiseRmsElectrons\", \"readoutProfileId\", \"readoutRegimeId\", \"sourceChargeSeedUint32\",\n \"sourceReadNoiseSeedUint32\", \"physicalScalarSaturationApplied\", \"digitalSaturationApplied\",\n \"cfaPhasePreservedInNativeCoordinates\", \"physicalOrientationApplied\", \"outputRotationApplied\",\n \"groupedModeCombinationApplied\", \"reconstructionApplied\", \"aliasingModeled\", \"moireModeled\"] as const;\nfunction sample(value: unknown): SensorRawCaptureSample {\n const s = object(value, sampleKeys);\n if (s.version !== \"0.1.0\" || s.modeSampleCoordinateSystem !== \"capture-mode-full-frame-effective-sample-index\" ||\n s.cfaPhasePreservedInNativeCoordinates !== true || [\"physicalOrientationApplied\", \"outputRotationApplied\",\n \"groupedModeCombinationApplied\", \"reconstructionApplied\", \"aliasingModeled\", \"moireModeled\"].some((key) => s[key] !== false) ||\n typeof s.physicalScalarSaturationApplied !== \"boolean\" || typeof s.digitalSaturationApplied !== \"boolean\") {\n throw new InvalidConfigurationError(\"RAW-frame requires native unreconstructed sensor-pipeline samples with explicit flags.\");\n }\n const rawCode = integer(s.rawCode, 65535), blackLevelCode = integer(s.blackLevelCode, 65535),\n digitalSaturationCode = integer(s.digitalSaturationCode, 65535);\n if (digitalSaturationCode <= blackLevelCode || rawCode > digitalSaturationCode ||\n (s.digitalSaturationApplied && rawCode !== digitalSaturationCode) ||\n typeof s.blackSubtractedNormalizedCode !== \"number\" ||\n s.blackSubtractedNormalizedCode !== (rawCode-blackLevelCode)/(digitalSaturationCode-blackLevelCode)) {\n throw new InvalidConfigurationError(\"RAW-frame code/black/white/normalization mismatch.\");\n }\n const effectiveSaturationCode = integer(s.effectiveSaturationCode, 65535), gain = s.systemConversionGainElectronsPerCode, readNoise = s.readNoiseRmsElectrons;\n if (effectiveSaturationCode <= blackLevelCode || effectiveSaturationCode > digitalSaturationCode ||\n typeof gain !== \"number\" || !Number.isFinite(gain) || gain <= 0 || typeof readNoise !== \"number\" || !Number.isFinite(readNoise) || readNoise < 0) {\n throw new InvalidConfigurationError(\"RAW-frame effective white level, conversion gain or read noise is invalid.\");\n }\n return { version: \"0.1.0\", captureModeId: id(s.captureModeId), modeSampleCoordinateSystem: s.modeSampleCoordinateSystem,\n modeSampleIndexFullFrame: point(s.modeSampleIndexFullFrame), colorSamplingProfileId: id(s.colorSamplingProfileId),\n colorSamplingSite: point(s.colorSamplingSite), channelId: id(s.channelId), rawCode, blackLevelCode, digitalSaturationCode,\n blackSubtractedNormalizedCode: s.blackSubtractedNormalizedCode, effectiveSaturationCode,\n systemConversionGainElectronsPerCode: gain, readNoiseRmsElectrons: Object.is(readNoise, -0) ? 0 : readNoise, readoutProfileId: id(s.readoutProfileId),\n readoutRegimeId: id(s.readoutRegimeId), sourceChargeSeedUint32: integer(s.sourceChargeSeedUint32, 0xffffffff),\n sourceReadNoiseSeedUint32: integer(s.sourceReadNoiseSeedUint32, 0xffffffff),\n physicalScalarSaturationApplied: s.physicalScalarSaturationApplied, digitalSaturationApplied: s.digitalSaturationApplied,\n cfaPhasePreservedInNativeCoordinates: true, physicalOrientationApplied: false, outputRotationApplied: false,\n groupedModeCombinationApplied: false, reconstructionApplied: false, aliasingModeled: false, moireModeled: false };\n}\n/** Checks that every native site has one sample, within limits, and that CFA, mode, site and code identities match exactly. No I/O. */\nexport function parseSensorRawFrameInput(value: unknown): SensorRawFrameInput {\n const r = object(value, [\"frameId\", \"capture\", \"modeId\", \"captureModeProfile\", \"colorSamplingProfile\",\n \"bindingProfile\", \"containerBitDepth\", \"samples\"]);\n const capture = parseSimulatedCapture(r.capture), modeId = id(r.modeId), frameId = id(r.frameId);\n const captureModeProfile = parseCaptureModeProfile(r.captureModeProfile),\n colorSamplingProfile = parseSensorColorSamplingProfile(r.colorSamplingProfile),\n bindingProfile = parseNativeEffectiveRasterColorSamplingBindingProfile(r.bindingProfile);\n const native = capture.geometry.nativeRaster, count = native.pixelWidth*native.pixelHeight;\n const mode = captureModeProfile.modes.find((m) => m.modeId === modeId);\n if (r.containerBitDepth !== 16 || count > RAW_ATTACHMENT_MAX_NATIVE_SITES || !Array.isArray(r.samples) || r.samples.length !== count ||\n Array.from({ length: count }, (_, i) => i in (r.samples as unknown[])).includes(false) ||\n colorSamplingProfile.layout.kind !== \"periodic-mosaic\" || !mode || mode.acquisition.kind !== \"single-frame\" ||\n mode.perFrameSampling.kind !== \"native-effective-raster\" || (mode.reconstructionStages?.length ?? 0) !== 0) {\n throw new InvalidConfigurationError(\"RAW-frame requires bounded single-frame native periodic CFA coverage and uint16 storage.\");\n }\n const samples = r.samples.map(sample), layout = colorSamplingProfile.layout, phaseSample: (SensorRawCaptureSample | undefined)[] = [];\n for (let i = 0; i < samples.length; i++) {\n // Readout constants are per CFA phase: one white level, gain and read noise for every site of a phase.\n const s = samples[i]!, phase = (Math.floor(i/native.pixelWidth)%layout.repeatHeightSites)*layout.repeatWidthSites + (i%native.pixelWidth)%layout.repeatWidthSites;\n const first = phaseSample[phase] ??= s;\n if (first.effectiveSaturationCode !== s.effectiveSaturationCode || first.systemConversionGainElectronsPerCode !== s.systemConversionGainElectronsPerCode ||\n first.readNoiseRmsElectrons !== s.readNoiseRmsElectrons) throw new InvalidConfigurationError(\"RAW-frame readout white level, gain and read noise must be constant per CFA phase.\");\n }\n for (let i = 0; i < samples.length; i++) {\n const s = samples[i]!, x = i%native.pixelWidth, y = Math.floor(i/native.pixelWidth);\n const c = resolveCaptureModeColorSamplingContributors({ nativeRaster: native, captureModeProfile, modeId,\n colorSamplingProfile, bindingProfile, modeSampleIndexFullFrame: { x, y } });\n if (c.totalContributorSites !== 1 || c.channelComposition.kind !== \"single-channel\" ||\n s.captureModeId !== modeId || s.colorSamplingProfileId !== colorSamplingProfile.profileId ||\n s.modeSampleIndexFullFrame.x !== x || s.modeSampleIndexFullFrame.y !== y ||\n s.colorSamplingSite.x !== c.colorSamplingSiteRect.x || s.colorSamplingSite.y !== c.colorSamplingSiteRect.y ||\n s.channelId !== c.channelComposition.channelId || s.readoutProfileId !== samples[0]!.readoutProfileId ||\n s.readoutRegimeId !== samples[0]!.readoutRegimeId) {\n throw new InvalidConfigurationError(\"RAW-frame site/phase/channel/readout binding mismatch.\");\n }\n }\n return { frameId, capture, modeId, captureModeProfile, colorSamplingProfile, bindingProfile, containerBitDepth: 16, samples };\n}\n/** Commits native RAW samples and capture metadata. No demosaicing, WB, tone mapping or file packing. */\nexport function createSensorRawFrame(input: SensorRawFrameInput): SensorRawFrame {\n const value = parseSensorRawFrameInput(input);\n const frame: SensorRawFrame = { ...value, schemaVersion: SENSOR_RAW_FRAME_SCHEMA_VERSION, sampleDomain: \"native-cfa-raw-code\",\n sampleOrder: \"native-row-major\", producerBinding: \"caller-declared-capture-attachment\", reconstructionApplied: false,\n renderingApplied: false, nativePixelWidth: value.capture.geometry.nativeRaster.pixelWidth,\n nativePixelHeight: value.capture.geometry.nativeRaster.pixelHeight };\n // Copy all profile/evidence arrays before freezing; never freeze caller-owned inputs.\n return freezeOwnedData(JSON.parse(JSON.stringify(frame)) as SensorRawFrame);\n}\n"]}
|
|
@@ -3,14 +3,21 @@ import { type SensorRawFrameInput, type SensorRawFrame } from "./sensor-raw-fram
|
|
|
3
3
|
import { composeSensorAccumulatedCharge, type ComposeSensorPhotoAccumulatedChargeInput as ComposeSensorAccumulatedChargeInput } from "../sensor/accumulated-charge.js";
|
|
4
4
|
import { assessSensorPhysicalChargeCapacity, type SensorPhysicalChargeCapacityProfile } from "../sensor/physical-charge-capacity.js";
|
|
5
5
|
import { simulateSensorChargeRealization, simulateSensorRawCode, type SensorChargeSamplingProfile, type SensorReadoutConversionProfile } from "../sensor/raw-readout.js";
|
|
6
|
+
import { type SensorFixedPatternNoiseProfile } from "../sensor/fixed-pattern-noise.js";
|
|
6
7
|
import { type CalculateCaptureExposureWindowsInput, type CaptureExposureWindows } from "../sensor/exposure-window.js";
|
|
7
8
|
export declare const SENSOR_RAW_PRODUCER_SCHEMA_VERSION: "0.3.0";
|
|
8
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Version of the capture noise model. It fixes the hashed per-site seed schedule and the signed electronic
|
|
11
|
+
* readout behaviour.
|
|
12
|
+
*
|
|
13
|
+
* 0.4.0: exact ADC rounding with ties up, normal-approximation Poisson draws for means of 1e9 and above,
|
|
14
|
+
* optional post-ADC digital gain and INL (integral non-linearity), and optional per-sensor fixed-pattern noise.
|
|
15
|
+
*/
|
|
9
16
|
export declare const SENSOR_RAW_PRODUCER_NOISE_MODEL: Readonly<{
|
|
10
17
|
readonly id: "photivra-native-raw-noise";
|
|
11
|
-
readonly version: "0.
|
|
18
|
+
readonly version: "0.4.0";
|
|
12
19
|
}>;
|
|
13
|
-
/**
|
|
20
|
+
/** For each native site: one declared exposure event (EQE photo signal, dark signal, charge completeness) and its readout state. */
|
|
14
21
|
export interface SensorRawProducerSiteInput {
|
|
15
22
|
charge: ComposeSensorAccumulatedChargeInput;
|
|
16
23
|
samplingProfile: SensorChargeSamplingProfile;
|
|
@@ -18,23 +25,25 @@ export interface SensorRawProducerSiteInput {
|
|
|
18
25
|
operatingStateId: string;
|
|
19
26
|
readoutProfile: SensorReadoutConversionProfile;
|
|
20
27
|
regimeId: string;
|
|
28
|
+
/** Optional fixed-pattern noise (FPN) for this sensor; one profile for the whole frame. Omit it to disable FPN. */
|
|
29
|
+
fixedPatternNoise?: SensorFixedPatternNoiseProfile;
|
|
21
30
|
}
|
|
22
|
-
/**
|
|
31
|
+
/** Exposure schedule for the full sensor. The producer owns the sampling coordinates. */
|
|
23
32
|
export type SensorRawProducerExposureWindowInput = Omit<CalculateCaptureExposureWindowsInput, "nativeRaster" | "activeCaptureRect" | "samplePointsNative">;
|
|
24
|
-
/**
|
|
33
|
+
/** Input for one bounded frame. It is never a conversion from separate RGB pixels. */
|
|
25
34
|
export interface SensorRawProducerInput {
|
|
26
35
|
frame: Omit<SensorRawFrameInput, "samples">;
|
|
27
36
|
sites: readonly SensorRawProducerSiteInput[];
|
|
28
|
-
/**
|
|
37
|
+
/** If omitted, every event uses the existing global window 0..shutterSeconds. */
|
|
29
38
|
exposureWindow?: SensorRawProducerExposureWindowInput;
|
|
30
39
|
}
|
|
31
|
-
/**
|
|
40
|
+
/** Codes produced by the engine, with per-step diagnostics. The upstream radiance and response are as declared, not verified. */
|
|
32
41
|
export interface SensorRawProducerResult {
|
|
33
42
|
schemaVersion: typeof SENSOR_RAW_PRODUCER_SCHEMA_VERSION;
|
|
34
43
|
codeProducer: "engine-charge-capacity-noise-adc";
|
|
35
44
|
upstreamOrigin: "declared-eqe-and-dark-exposure-results";
|
|
36
45
|
upstreamRadiometryVerified: false;
|
|
37
|
-
seedSchedule: "capture-seed-
|
|
46
|
+
seedSchedule: "murmur3-capture-seed-native-index-stream-v2";
|
|
38
47
|
frame: SensorRawFrame;
|
|
39
48
|
localExposureWindows?: CalculationResult<CaptureExposureWindows>;
|
|
40
49
|
sites: readonly {
|
|
@@ -44,16 +53,15 @@ export interface SensorRawProducerResult {
|
|
|
44
53
|
readout: ReturnType<typeof simulateSensorRawCode>;
|
|
45
54
|
}[];
|
|
46
55
|
}
|
|
47
|
-
/** Internal
|
|
56
|
+
/** Internal: per-site validation shared by the reference path and bounded packed execution. */
|
|
48
57
|
export type NativeRawProducerFrameContext = Omit<SensorRawProducerInput["frame"], "capture"> & {
|
|
49
58
|
capture: Pick<SensorRawProducerInput["frame"]["capture"], "geometry" | "exposure" | "noise" | "focus" | "sceneStateId" | "sceneTimeSeconds">;
|
|
50
59
|
};
|
|
51
60
|
export declare function parseNativeRawProducerSite(site: unknown, i: number, frame: NativeRawProducerFrameContext, window?: CaptureExposureWindows["samples"][number]): SensorRawProducerSiteInput;
|
|
52
61
|
export declare function validateNativeRawReadoutIdentity(s: SensorRawProducerSiteInput, first: SensorRawProducerSiteInput): void;
|
|
53
|
-
/** The shared
|
|
62
|
+
/** The shared per-site pipeline holds all the charge, capacity, random-noise and ADC equations. `i` is the absolute native row-major index. */
|
|
54
63
|
export declare function calculateNativeRawSite(s: SensorRawProducerSiteInput, seed: number, i: number): SensorRawProducerResult["sites"][number];
|
|
55
|
-
/** Validates complete
|
|
64
|
+
/** Validates the complete per-site exposure inputs. Charge, noise or RAW codes are never accepted as a shortcut. */
|
|
56
65
|
export declare function parseSensorRawProducerInput(value: unknown): SensorRawProducerInput;
|
|
57
|
-
/**
|
|
66
|
+
/** Runs accumulated charge → capacity → Poisson noise → read noise and ADC → native sample → immutable frame. */
|
|
58
67
|
export declare function simulateSensorRawFrame(input: SensorRawProducerInput): CalculationResult<SensorRawProducerResult>;
|
|
59
|
-
//# sourceMappingURL=sensor-raw-producer.d.ts.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* Produces a sensor RAW frame from per-site exposure inputs, using the existing sensor steps:
|
|
4
|
+
* accumulated charge → capacity → Poisson (shot) noise → read noise and ADC → native sample →
|
|
5
|
+
* immutable frame.
|
|
6
|
+
*
|
|
7
|
+
* Inputs must be complete. Charge, noise or RAW codes cannot be passed in as a shortcut.
|
|
7
8
|
* @see docs/SIMULATED_CAPTURE.md for equations, coordinate/unit conventions, blockers and support
|
|
8
9
|
* limits.
|
|
9
10
|
*/
|
|
@@ -19,28 +20,70 @@ import { composeSensorAccumulatedCharge, parseSensorAccumulatedChargeCompletenes
|
|
|
19
20
|
import { assessSensorPhysicalChargeCapacity, parseSensorPhysicalChargeCapacityProfile } from "../sensor/physical-charge-capacity.js";
|
|
20
21
|
import { simulateSensorChargeRealization, simulateSensorRawCode, parseSensorChargeSamplingProfile, parseSensorReadoutConversionProfile, resolveSensorReadoutRegime } from "../sensor/raw-readout.js";
|
|
21
22
|
import { createSensorRawCaptureSample } from "../sensor/raw-reconstruction.js";
|
|
23
|
+
import { parseSensorFixedPatternNoiseProfile } from "../sensor/fixed-pattern-noise.js";
|
|
24
|
+
import { deriveNativeSiteStreamSeedUint32, NATIVE_SITE_CHARGE_STREAM_ID, NATIVE_SITE_READ_NOISE_STREAM_ID } from "../sensor/stochastic-seed.js";
|
|
22
25
|
import { parseSensorColorSamplingProfile } from "../sensor/color-sampling.js";
|
|
23
26
|
import { parseCaptureModeProfile } from "../sensor/capture-mode.js";
|
|
24
27
|
import { parseNativeEffectiveRasterColorSamplingBindingProfile, resolveCaptureModeColorSamplingContributors } from "../sensor/capture-color-sampling-binding.js";
|
|
25
28
|
import { calculateCaptureExposureWindows } from "../sensor/exposure-window.js";
|
|
26
29
|
export const SENSOR_RAW_PRODUCER_SCHEMA_VERSION = "0.3.0";
|
|
27
|
-
/**
|
|
28
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Version of the capture noise model. It fixes the hashed per-site seed schedule and the signed electronic
|
|
32
|
+
* readout behaviour.
|
|
33
|
+
*
|
|
34
|
+
* 0.4.0: exact ADC rounding with ties up, normal-approximation Poisson draws for means of 1e9 and above,
|
|
35
|
+
* optional post-ADC digital gain and INL (integral non-linearity), and optional per-sensor fixed-pattern noise.
|
|
36
|
+
*/
|
|
37
|
+
export const SENSOR_RAW_PRODUCER_NOISE_MODEL = Object.freeze({ id: "photivra-native-raw-noise", version: "0.4.0" });
|
|
29
38
|
function fields(value, allowed) {
|
|
30
39
|
return requireAllowlistedRecord(value, allowed, "Invalid sensor RAW producer fields.");
|
|
31
40
|
}
|
|
32
41
|
function publicId(value) {
|
|
33
42
|
return requirePublicOpaqueId(value, "Expected public producer identity.");
|
|
34
43
|
}
|
|
44
|
+
const KEY_RECURSE = 0, KEY_IDENTITY = 1, KEY_IDENTITY_LIST = 2;
|
|
45
|
+
/** Bounded cache of how the identity check classifies each property name (it depends only on the name). */
|
|
46
|
+
const IDENTITY_KEY_KINDS = new Map();
|
|
47
|
+
/** Bounded cache of strings already known to be valid public IDs (validity depends only on the string). */
|
|
48
|
+
const VALID_PUBLIC_IDS = new Set();
|
|
49
|
+
const IDENTITY_WALK_MEMO_LIMIT = 4096;
|
|
50
|
+
function identityKeyKind(key) {
|
|
51
|
+
// Array indices and other names ending in a digit match neither suffix.
|
|
52
|
+
const last = key.charCodeAt(key.length - 1);
|
|
53
|
+
if (last >= 48 && last <= 57)
|
|
54
|
+
return KEY_RECURSE;
|
|
55
|
+
let kind = IDENTITY_KEY_KINDS.get(key);
|
|
56
|
+
if (kind === undefined) {
|
|
57
|
+
kind = /(?:Id|Version)$/.test(key) ? KEY_IDENTITY : /Ids$/.test(key) ? KEY_IDENTITY_LIST : KEY_RECURSE;
|
|
58
|
+
if (IDENTITY_KEY_KINDS.size < IDENTITY_WALK_MEMO_LIMIT)
|
|
59
|
+
IDENTITY_KEY_KINDS.set(key, kind);
|
|
60
|
+
}
|
|
61
|
+
return kind;
|
|
62
|
+
}
|
|
63
|
+
function memoizedPublicId(value) {
|
|
64
|
+
if (typeof value === "string" && VALID_PUBLIC_IDS.has(value))
|
|
65
|
+
return;
|
|
66
|
+
publicId(value);
|
|
67
|
+
if (VALID_PUBLIC_IDS.size < IDENTITY_WALK_MEMO_LIMIT)
|
|
68
|
+
VALID_PUBLIC_IDS.add(value);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* At any depth, every property whose name ends in Id or Version must hold a public ID, and every property
|
|
72
|
+
* ending in Ids a bounded dense list of them. Order, keys and errors are the same as the earlier
|
|
73
|
+
* Object.entries walk. Key classification and already-valid IDs are cached, because each depends only on
|
|
74
|
+
* its string.
|
|
75
|
+
*/
|
|
35
76
|
function publicIdentities(value) {
|
|
36
77
|
if (value === null || typeof value !== "object")
|
|
37
78
|
return;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
else
|
|
79
|
+
const record = value, keys = Object.keys(record);
|
|
80
|
+
for (let index = 0; index < keys.length; index++) {
|
|
81
|
+
const key = keys[index], kind = identityKeyKind(key), child = record[key];
|
|
82
|
+
if (kind === KEY_IDENTITY)
|
|
83
|
+
memoizedPublicId(child);
|
|
84
|
+
else if (kind === KEY_IDENTITY_LIST)
|
|
85
|
+
dense(child, 256).forEach(memoizedPublicId);
|
|
86
|
+
else if (child !== null && typeof child === "object")
|
|
44
87
|
publicIdentities(child);
|
|
45
88
|
}
|
|
46
89
|
}
|
|
@@ -85,7 +128,8 @@ function chargeInput(value) {
|
|
|
85
128
|
photoTrue.some((k) => p[k] !== true) || photoFalse.some((k) => p[k] !== false))) || darkFalse.some((k) => d[k] !== false) ||
|
|
86
129
|
d.expectationValueOnly !== true || d.countMeaning !== "expected-thermally-generated-electrons" ||
|
|
87
130
|
typeof d.spatialDarkCurrentNonuniformityModeled !== "boolean" || typeof d.temperatureInterpolationUsed !== "boolean" ||
|
|
88
|
-
(d.temperatureModel !== "fixed-reference-temperature" && d.temperatureModel !== "piecewise-linear-temperature-table"
|
|
131
|
+
(d.temperatureModel !== "fixed-reference-temperature" && d.temperatureModel !== "piecewise-linear-temperature-table" &&
|
|
132
|
+
d.temperatureModel !== "log-linear-temperature-table")) {
|
|
89
133
|
throw new InvalidConfigurationError("Producer requires untreated EQE/dark exposure expectations, not sampled, clipped or A/W charge.");
|
|
90
134
|
}
|
|
91
135
|
if (d.temperatureModel === "fixed-reference-temperature" && d.temperatureInterpolationUsed !== false) {
|
|
@@ -119,7 +163,7 @@ function chargeInput(value) {
|
|
|
119
163
|
siteApproximation: optionalEvidence(e.siteApproximation), exposure: exposureEvidence(e.exposure, temporal ? p : undefined) } },
|
|
120
164
|
completenessProfile: parseSensorAccumulatedChargeCompletenessProfile(r.completenessProfile),
|
|
121
165
|
...(r.additionalChargeComponents === undefined ? {} : { additionalChargeComponents: dense(r.additionalChargeComponents, 32).map(parseSensorAdditionalStoredChargeComponent) }) };
|
|
122
|
-
//
|
|
166
|
+
// The existing charge composition checks that photo, dark, additional and completeness events agree exactly.
|
|
123
167
|
composeSensorAccumulatedCharge(charge);
|
|
124
168
|
return charge;
|
|
125
169
|
}
|
|
@@ -154,7 +198,7 @@ function sourceBoundary(schedule) {
|
|
|
154
198
|
}
|
|
155
199
|
export function parseNativeRawProducerSite(site, i, frame, window) {
|
|
156
200
|
const native = frame.capture.geometry.nativeRaster;
|
|
157
|
-
const s = fields(site, ["charge", "samplingProfile", "capacityProfile", "operatingStateId", "readoutProfile", "regimeId"]);
|
|
201
|
+
const s = fields(site, ["charge", "samplingProfile", "capacityProfile", "operatingStateId", "readoutProfile", "regimeId", "fixedPatternNoise"]);
|
|
158
202
|
const charge = chargeInput(s.charge), p = charge.photoSignal;
|
|
159
203
|
const contributors = resolveCaptureModeColorSamplingContributors({ nativeRaster: native, captureModeProfile: frame.captureModeProfile,
|
|
160
204
|
modeId: frame.modeId, colorSamplingProfile: frame.colorSamplingProfile, bindingProfile: frame.bindingProfile,
|
|
@@ -167,8 +211,14 @@ export function parseNativeRawProducerSite(site, i, frame, window) {
|
|
|
167
211
|
p.localExposureDurationSeconds !== (window?.localExposureDurationSeconds ?? frame.capture.exposure.shutterSeconds)) {
|
|
168
212
|
throw new InvalidConfigurationError("Charge site/channel/binding/local exposure differs from committed capture.");
|
|
169
213
|
}
|
|
214
|
+
const readoutProfile = parseSensorReadoutConversionProfile(s.readoutProfile);
|
|
215
|
+
const isoGain = readoutProfile.regimes.find((regime) => regime.regimeId === s.regimeId)?.exposureIndexGain;
|
|
216
|
+
if (isoGain !== undefined && isoGain.exposureIndex !== frame.capture.exposure.iso) {
|
|
217
|
+
throw new InvalidConfigurationError("Readout regime ISO gain differs from the committed capture ISO.");
|
|
218
|
+
}
|
|
170
219
|
return { charge, samplingProfile: parseSensorChargeSamplingProfile(s.samplingProfile), capacityProfile: parseSensorPhysicalChargeCapacityProfile(s.capacityProfile),
|
|
171
|
-
operatingStateId: publicId(s.operatingStateId), readoutProfile
|
|
220
|
+
operatingStateId: publicId(s.operatingStateId), readoutProfile, regimeId: publicId(s.regimeId),
|
|
221
|
+
...(s.fixedPatternNoise === undefined ? {} : { fixedPatternNoise: parseSensorFixedPatternNoiseProfile(s.fixedPatternNoise) }) };
|
|
172
222
|
}
|
|
173
223
|
export function validateNativeRawReadoutIdentity(s, first) {
|
|
174
224
|
publicIdentities(s);
|
|
@@ -176,22 +226,31 @@ export function validateNativeRawReadoutIdentity(s, first) {
|
|
|
176
226
|
if (s.readoutProfile.profileId !== first.readoutProfile.profileId || s.regimeId !== first.regimeId ||
|
|
177
227
|
readout.regime.adc.bitDepth > 16 || readout.regime.adc.digitalSaturationCode <= readout.regime.adc.blackLevelCode ||
|
|
178
228
|
s.readoutProfile.colorSamplingProfileId !== s.charge.photoSignal.colorSamplingProfileId ||
|
|
179
|
-
s.readoutProfile.channelId !== s.charge.photoSignal.channelId || s.samplingProfile.completenessProfileId !== s.charge.completenessProfile.profileId
|
|
180
|
-
|
|
229
|
+
s.readoutProfile.channelId !== s.charge.photoSignal.channelId || s.samplingProfile.completenessProfileId !== s.charge.completenessProfile.profileId ||
|
|
230
|
+
s.fixedPatternNoise?.profileId !== first.fixedPatternNoise?.profileId ||
|
|
231
|
+
s.fixedPatternNoise?.sensorInstanceSeedUint32 !== first.fixedPatternNoise?.sensorInstanceSeedUint32) {
|
|
232
|
+
throw new InvalidConfigurationError("Frame requires one readout identity/regime, one fixed-pattern identity and a positive uint16 RAW code span.");
|
|
181
233
|
}
|
|
182
234
|
}
|
|
183
|
-
/** The shared
|
|
235
|
+
/** The shared per-site pipeline holds all the charge, capacity, random-noise and ADC equations. `i` is the absolute native row-major index. */
|
|
184
236
|
export function calculateNativeRawSite(s, seed, i) {
|
|
185
237
|
const accumulatedCharge = composeSensorAccumulatedCharge(s.charge);
|
|
186
238
|
const capacity = assessSensorPhysicalChargeCapacity({ accumulatedCharge: accumulatedCharge.value, capacityProfile: s.capacityProfile,
|
|
187
239
|
operatingStateId: s.operatingStateId, operatingTemperatureC: s.charge.darkCharge.operatingTemperatureC });
|
|
240
|
+
const pattern = s.fixedPatternNoise === undefined ? {} : { fixedPatternNoise: s.fixedPatternNoise };
|
|
188
241
|
const realization = simulateSensorChargeRealization({ accumulatedCharge: accumulatedCharge.value, samplingProfile: s.samplingProfile,
|
|
189
|
-
seedUint32: (seed
|
|
242
|
+
seedUint32: deriveNativeSiteStreamSeedUint32(seed, i, NATIVE_SITE_CHARGE_STREAM_ID), ...pattern });
|
|
190
243
|
const readout = simulateSensorRawCode({ chargeRealization: realization.value, physicalCapacityAssessment: capacity.value,
|
|
191
|
-
readoutProfile: s.readoutProfile, regimeId: s.regimeId,
|
|
244
|
+
readoutProfile: s.readoutProfile, regimeId: s.regimeId,
|
|
245
|
+
readNoiseSeedUint32: deriveNativeSiteStreamSeedUint32(seed, i, NATIVE_SITE_READ_NOISE_STREAM_ID), ...pattern });
|
|
192
246
|
return { accumulatedCharge, capacity, realization, readout };
|
|
193
247
|
}
|
|
194
|
-
/**
|
|
248
|
+
/** The selected regime's declared INL, which the effective white level needs at saturation. */
|
|
249
|
+
function regimeInl(site) {
|
|
250
|
+
const inl = site.readoutProfile.regimes.find((r) => r.regimeId === site.regimeId)?.adc.integralNonLinearity;
|
|
251
|
+
return inl === undefined ? {} : { adcIntegralNonLinearity: inl };
|
|
252
|
+
}
|
|
253
|
+
/** Validates the complete per-site exposure inputs. Charge, noise or RAW codes are never accepted as a shortcut. */
|
|
195
254
|
export function parseSensorRawProducerInput(value) {
|
|
196
255
|
const r = fields(value, ["frame", "sites", "exposureWindow"]), f = fields(r.frame, ["frameId", "capture", "modeId", "captureModeProfile", "colorSamplingProfile", "bindingProfile", "containerBitDepth"]);
|
|
197
256
|
const capture = parseSimulatedCapture(f.capture), native = capture.geometry.nativeRaster, count = native.pixelWidth * native.pixelHeight;
|
|
@@ -217,22 +276,24 @@ export function parseSensorRawProducerInput(value) {
|
|
|
217
276
|
opening: sourceBoundary(timing.value.opening.schedule), closing: sourceBoundary(timing.value.closing.schedule)
|
|
218
277
|
} }) };
|
|
219
278
|
}
|
|
220
|
-
/**
|
|
279
|
+
/** Runs accumulated charge → capacity → Poisson noise → read noise and ADC → native sample → immutable frame. */
|
|
221
280
|
export function simulateSensorRawFrame(input) {
|
|
222
281
|
const v = parseSensorRawProducerInput(input), seed = v.frame.capture.noise.seedUint32;
|
|
223
282
|
const sites = v.sites.map((s, i) => calculateNativeRawSite(s, seed, i));
|
|
224
283
|
const native = v.frame.capture.geometry.nativeRaster;
|
|
225
284
|
const samples = sites.map((s, i) => createSensorRawCaptureSample({ rawCode: s.readout.value,
|
|
285
|
+
...regimeInl(v.sites[i]),
|
|
226
286
|
contributors: resolveCaptureModeColorSamplingContributors({ nativeRaster: native, captureModeProfile: v.frame.captureModeProfile,
|
|
227
287
|
modeId: v.frame.modeId, colorSamplingProfile: v.frame.colorSamplingProfile, bindingProfile: v.frame.bindingProfile,
|
|
228
288
|
modeSampleIndexFullFrame: { x: i % native.pixelWidth, y: Math.floor(i / native.pixelWidth) } }) }));
|
|
229
289
|
return approximationResult({ schemaVersion: SENSOR_RAW_PRODUCER_SCHEMA_VERSION, codeProducer: "engine-charge-capacity-noise-adc",
|
|
230
290
|
upstreamOrigin: "declared-eqe-and-dark-exposure-results", upstreamRadiometryVerified: false,
|
|
231
|
-
seedSchedule: "capture-seed-
|
|
291
|
+
seedSchedule: "murmur3-capture-seed-native-index-stream-v2", frame: createSensorRawFrame({ ...v.frame, samples }), sites,
|
|
232
292
|
...(v.exposureWindow === undefined ? {} : { localExposureWindows: localWindows(v.frame, v.exposureWindow) }) }, "native-sensor-raw-frame-producer", SENSOR_RAW_PRODUCER_SCHEMA_VERSION, [
|
|
233
293
|
"Untreated EQE/dark exposure results and completeness evidence are upstream declarations; source radiometry is not independently verified",
|
|
234
|
-
"Native row-major site seeds are capture seed
|
|
294
|
+
"Native row-major site seeds are MurmurHash3_x86_32 of (capture seed, absolute native index, stream 0 charge / 1 read noise); deterministic and non-cryptographic",
|
|
235
295
|
"Existing scalar capacity/noise/readout approximations retain distinct physical/pre-ADC/digital saturation diagnostics; no blooming",
|
|
296
|
+
"Optional fixed-pattern noise is deterministic per sensor instance (its own seed and absolute colour-sampling site), independent of the capture seed",
|
|
236
297
|
"Stationarity applies separately to every exact local window; no time-varying radiance integration, multi-frame acquisition, RGB-to-RAW conversion or production-stage activation",
|
|
237
298
|
"Stored capture float planes remain independent; same-RAW export must use the returned frame's reconstruction handoff"
|
|
238
299
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sensor-raw-producer.js","sourceRoot":"","sources":["../../src/capture/sensor-raw-producer.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;GAOG;AAEH,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE/F,OAAO,EAAE,iCAAiC,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAA0B,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAiD,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EAAE,8BAA8B,EAAE,+CAA+C,EAAE,0CAA0C,EAC5C,MAAM,iCAAiC,CAAC;AAChI,OAAO,EAAE,kCAAkC,EAAE,wCAAwC,EACzC,MAAM,uCAAuC,CAAC;AAC1F,OAAO,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,gCAAgC,EAC/F,mCAAmC,EAAE,0BAA0B,EAAyE,MAAM,0BAA0B,CAAC;AAC3K,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,qDAAqD,EAAE,2CAA2C,EAAE,MAAM,6CAA6C,CAAC;AACjK,OAAO,EAAE,+BAA+B,EAA0E,MAAM,8BAA8B,CAAC;AAEvJ,MAAM,CAAC,MAAM,kCAAkC,GAAG,OAAgB,CAAC;AACnE,mGAAmG;AACnG,MAAM,CAAC,MAAM,+BAA+B,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,2BAA2B,EAAE,OAAO,EAAE,OAAO,EAAW,CAAC,CAAC;AAoC7H,SAAS,MAAM,CAAC,KAAc,EAAE,OAA0B;IACxD,OAAO,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,qCAAqC,CAAC,CAAC;AACzF,CAAC;AACD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,qBAAqB,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAC;AAC5E,CAAC;AACD,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO;IACxD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;;YAC1D,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AACD,SAAS,KAAK,CAAC,KAAc,EAAE,OAAe;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClI,MAAM,IAAI,yBAAyB,CAAC,wCAAwC,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AACD,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;AACpG,CAAC;AACD,SAAS,gBAAgB,CAAC,KAAc,EAAE,aAAuC;IAC/E,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,iCAAiC,CAAC,EAAE,GAAG,aAAa,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC,iBAAiB,CAAC;IAC5I,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC1I,OAAO,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,eAAe,EAAE;YACzF,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;YACzI,uBAAuB,EAAE,iBAAiB,CAAC,CAAC,CAAC,uBAAuB,EAAE,yBAAyB,CAAC;YAChG,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC;SAAE,EAAE,CAAC;AACnH,CAAC;AACD,MAAM,MAAM,GAAG,CAAC,wBAAwB,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,uBAAuB,EAAE,eAAe;IAClH,wCAAwC,EAAE,sCAAsC,EAAE,8BAA8B,EAAE,mBAAmB,CAAC,CAAC;AACzI,MAAM,SAAS,GAAG,CAAC,6BAA6B,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,4BAA4B,CAAC,CAAC;AACzI,MAAM,UAAU,GAAG,CAAC,6BAA6B,EAAE,8BAA8B,EAAE,oBAAoB,EAAE,qBAAqB;IAC5H,sCAAsC,EAAE,sCAAsC,EAAE,oBAAoB,EAAE,kBAAkB;IACxH,kBAAkB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;AAC7K,SAAS,WAAW,CAAC,KAAc;IACjC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,4BAA4B,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAC5G,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;QACzE,CAAC,CAAC,WAAuC,CAAC,IAAI,KAAK,2BAA2B,CAAC;IAClF,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,WAAW,CAAuC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,mBAAmB;QAC5N,+BAA+B,EAAE,6BAA6B,EAAE,wCAAwC,EAAE,6BAA6B,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAC9K,MAAM,SAAS,GAAG,CAAC,iCAAiC,EAAE,sBAAsB,EAAE,gCAAgC,EAAE,qBAAqB;QACnI,qBAAqB,EAAE,sCAAsC,EAAE,oBAAoB,CAAC,CAAC;IACvF,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,kBAAkB;QAC1H,8BAA8B,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,2BAA2B,EAAE,cAAc,EAAE,sBAAsB,EAAE,wCAAwC,CAAC,CAAC,CAAC;IAC5M,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,IAAI,CAAC,CAAC,iBAAiB,KAAK,6CAA6C;QACxH,CAAC,CAAC,6BAA6B,KAAK,mBAAmB,IAAI,CAAC,CAAC,CAAC,kBAAkB,KAAK,aAAa,IAAI,CAAC,CAAC,kBAAkB,KAAK,eAAe,CAAC;QAC/I,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;QACzH,CAAC,CAAC,oBAAoB,KAAK,IAAI,IAAI,CAAC,CAAC,YAAY,KAAK,wCAAwC;QAC9F,OAAO,CAAC,CAAC,sCAAsC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,4BAA4B,KAAK,SAAS;QACpH,CAAC,CAAC,CAAC,gBAAgB,KAAK,6BAA6B,IAAI,CAAC,CAAC,gBAAgB,KAAK,oCAAoC,CAAC,EAAE,CAAC;QAC1H,MAAM,IAAI,yBAAyB,CAAC,iGAAiG,CAAC,CAAC;IACzI,CAAC;IACD,IAAI,CAAC,CAAC,gBAAgB,KAAK,6BAA6B,IAAI,CAAC,CAAC,4BAA4B,KAAK,KAAK,EAAE,CAAC;QACrG,MAAM,IAAI,yBAAyB,CAAC,uEAAuE,CAAC,CAAC;IAC/G,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAAC;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxJ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,IAAI,MAAM,CAAC,aAAa,KAAK,8BAA8B;YAAE,MAAM,IAAI,yBAAyB,CAAC,mCAAmC,CAAC,CAAC;IACxI,CAAC;IACD,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,6BAA6B,EAAE,wCAAwC,EAAE,6BAA6B,EAAE,gCAAgC,CAAC,CAAC;QAC3K,CAAC,CAAC,EAAE,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CAAC,CAAU,EAAE,CAAC;QAChF,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAAE,MAAM,IAAI,yBAAyB,CAAC,gCAAgC,CAAC,CAAC;IACjP,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,CAAC,4BAA4B,CAAC;IAChD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;QAC3E,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,2BAA2B,KAAM,CAAC,CAAC,2BAAsC,GAAC,QAAQ;YACnG,CAAC,CAAC,8BAA8B,KAAM,CAAC,CAAC,sCAAiD,GAAC,QAAQ,CAAC,CAAC;QACpG,CAAC,CAAC,yBAAyB,KAAM,CAAC,CAAC,6BAAwC,GAAC,QAAQ;QACnF,CAAC,CAAC,8BAAyC,GAAI,CAAC,CAAC,2BAAsC,EAAE,CAAC;QAC7F,MAAM,IAAI,yBAAyB,CAAC,0GAA0G,CAAC,CAAC;IAClJ,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,aAAa,EAAE,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;QACxH,UAAU,EAAE,EAAE,GAAG,CAAC,EAAE,iBAAiB,EAAE,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC;gBACnG,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE;QAChI,mBAAmB,EAAE,+CAA+C,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC3F,GAAG,CAAC,CAAC,CAAC,0BAA0B,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,0BAA0B,EAChF,KAAK,CAAC,CAAC,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,0CAA0C,CAAC,EAAE,CAAC,EAAoD,CAAC;IACnJ,wFAAwF;IACxF,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAS,YAAY,CAAC,KAAsC,EAAE,KAAc;IAC1E,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,kBAAkB,EAAE,gCAAgC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IACtG,MAAM,CAAC,CAAC,CAAC,8BAA8B,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IACxE,KAAK,MAAM,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,CAAC,eAAe,KAAK,SAAS;YAAE,MAAM,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,CAAC,wBAAwB,KAAK,SAAS;YAAE,MAAM,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAClH,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IACnD,MAAM,MAAM,GAAG,+BAA+B,CAAC;QAC7C,GAAG,CAAoD;QACvD,YAAY,EAAE,MAAM;QACpB,kBAAkB,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,GAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1F,CAAC,EAAE,CAAC,GAAC,MAAM,CAAC,UAAU,GAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAC,MAAM,CAAC,UAAU,CAAC,GAAC,GAAG;SACnE,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAChG,MAAM,IAAI,yBAAyB,CAAC,oEAAoE,CAAC,CAAC;IAC5G,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAS,cAAc,CAAC,QAAuD;IAC7E,OAAO,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,EAAE,4BAA4B,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe;QAC7E,wBAAwB,EAAE,QAAQ,CAAC,wBAAwB;KAC5D,CAAC;AACJ,CAAC;AAKD,MAAM,UAAU,0BAA0B,CAAC,IAAa,EAAE,CAAS,EAAE,KAAoC,EACvG,MAAkD;IAClD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IACjD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3H,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;IAC7D,MAAM,YAAY,GAAG,2CAA2C,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QACnI,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc;QAC5G,wBAAwB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IAE9F,IAAI,YAAY,CAAC,qBAAqB,KAAK,CAAC,IAAI,YAAY,CAAC,kBAAkB,CAAC,IAAI,KAAK,gBAAgB;QACrG,CAAC,CAAC,sBAAsB,KAAK,KAAK,CAAC,oBAAoB,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,YAAY,CAAC,kBAAkB,CAAC,SAAS;QAC9H,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,YAAY,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,YAAY,CAAC,qBAAqB,CAAC,CAAC;QACtG,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,cAAc,CAAC,SAAS,IAAI,CAAC,CAAC,sCAAsC,KAAK,CAAC,MAAM,EAAE,sCAAsC,IAAI,CAAC,CAAC;QACpJ,CAAC,CAAC,oCAAoC,KAAK,CAAC,MAAM,EAAE,oCAAoC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;QAClI,CAAC,CAAC,4BAA4B,KAAK,CAAC,MAAM,EAAE,4BAA4B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACvH,MAAM,IAAI,yBAAyB,CAAC,4EAA4E,CAAC,CAAC;IACpH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,gCAAgC,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,eAAe,EAAE,wCAAwC,CAAC,CAAC,CAAC,eAAe,CAAC;QACjK,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,cAAc,EAAE,mCAAmC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC9J,CAAC;AACD,MAAM,UAAU,gCAAgC,CAAC,CAA6B,EAAE,KAAiC;IAC7G,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,OAAO,GAAG,0BAA0B,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChG,IAAI,CAAC,CAAC,cAAc,CAAC,SAAS,KAAK,KAAK,CAAC,cAAc,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;QAC9F,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc;QACjH,CAAC,CAAC,cAAc,CAAC,sBAAsB,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,sBAAsB;QACvF,CAAC,CAAC,cAAc,CAAC,SAAS,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,CAAC,eAAe,CAAC,qBAAqB,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC;QACxJ,MAAM,IAAI,yBAAyB,CAAC,iFAAiF,CAAC,CAAC;IACzH,CAAC;AACL,CAAC;AACD,0FAA0F;AAC1F,MAAM,UAAU,sBAAsB,CAAC,CAA6B,EAAE,IAAY,EAAE,CAAS;IAC3F,MAAM,iBAAiB,GAAG,8BAA8B,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,kCAAkC,CAAC,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe;QAClI,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5G,MAAM,WAAW,GAAG,+BAA+B,CAAC,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe;QAClI,UAAU,EAAE,CAAC,IAAI,GAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,iBAAiB,EAAE,WAAW,CAAC,KAAK,EAAE,0BAA0B,EAAE,QAAQ,CAAC,KAAK;QACtH,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAC,IAAI,GAAC,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrG,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAC/D,CAAC;AACD,qGAAqG;AACrG,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC1M,MAAM,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,GAAG,MAAM,CAAC,UAAU,GAAC,MAAM,CAAC,WAAW,CAAC;IACvI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,iBAAiB,EAAE,EAAW;QAC/G,kBAAkB,EAAE,uBAAuB,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,oBAAoB,EAAE,+BAA+B,CAAC,CAAC,CAAC,oBAAoB,CAAC;QAChJ,cAAc,EAAE,qDAAqD,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC;IAC5F,MAAM,IAAI,GAAG,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;IACnF,IAAI,CAAC,CAAC,iBAAiB,KAAK,EAAE,IAAI,KAAK,GAAG,8BAA8B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK;QAC9F,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,+BAA+B,CAAC,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,+BAA+B,CAAC,OAAO;QACxI,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,KAAK,iBAAiB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,cAAc;QACjH,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,yBAAyB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/G,MAAM,IAAI,yBAAyB,CAAC,sFAAsF,CAAC,CAAC;IAC9H,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IAClG,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5G,KAAK,MAAM,IAAI,IAAI,MAAM;QAAE,gCAAgC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC;IAC9E,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE;gBAC/E,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,gBAAgB;gBAC/C,8BAA8B,EAAE,MAAM,CAAC,KAAK,CAAC,8BAA8B;gBAC3E,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;aAC/G,EAAE,CAAC,EAAE,CAAC;AACT,CAAC;AACD,8HAA8H;AAC9H,MAAM,UAAU,sBAAsB,CAAC,KAA6B;IAClE,MAAM,CAAC,GAAG,2BAA2B,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;IACtF,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IACrD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK;QACzF,YAAY,EAAE,2CAA2C,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB;YAC9H,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,EAAE,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc;YAClH,wBAAwB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpG,OAAO,mBAAmB,CAAC,EAAE,aAAa,EAAE,kCAAkC,EAAE,YAAY,EAAE,kCAAkC;QAC9H,cAAc,EAAE,wCAAwC,EAAE,0BAA0B,EAAE,KAAK;QAC3F,YAAY,EAAE,sDAAsD,EAAE,KAAK,EAAE,oBAAoB,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK;QACjI,GAAG,CAAC,CAAC,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,EAChH,kCAAkC,EAAE,kCAAkC,EAAE;QACtE,0IAA0I;QAC1I,mIAAmI;QACnI,oIAAoI;QACpI,kLAAkL;QAClL,sHAAsH;KAAC,CAAC,CAAC;AAC7H,CAAC"}
|
|
1
|
+
{"version":3,"file":"sensor-raw-producer.js","sourceRoot":"","sources":["../../src/capture/sensor-raw-producer.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Produces a sensor RAW frame from per-site exposure inputs, using the existing sensor steps:\n * accumulated charge → capacity → Poisson (shot) noise → read noise and ADC → native sample →\n * immutable frame.\n *\n * Inputs must be complete. Charge, noise or RAW codes cannot be passed in as a shortcut.\n * @see docs/SIMULATED_CAPTURE.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { requireAllowlistedRecord, requirePublicOpaqueId } from \"../core/record-validation.js\";\n\nimport { parseSensorEqeTemporalPhotoSignal } from \"../sensor/temporal-photo-signal.js\";\nimport { RAW_REFERENCE_MAX_NATIVE_SITES } from \"./raw-frame-limits.js\";\n\nimport { approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { parseEvidenceList } from \"../core/evidence-provenance.js\";\nimport { parseSimulatedCapture } from \"./simulated-capture.js\";\nimport { createSensorRawFrame, type SensorRawFrameInput, type SensorRawFrame } from \"./sensor-raw-frame.js\";\nimport { composeSensorAccumulatedCharge, parseSensorAccumulatedChargeCompletenessProfile, parseSensorAdditionalStoredChargeComponent,\n type ComposeSensorPhotoAccumulatedChargeInput as ComposeSensorAccumulatedChargeInput } from \"../sensor/accumulated-charge.js\";\nimport { assessSensorPhysicalChargeCapacity, parseSensorPhysicalChargeCapacityProfile,\n type SensorPhysicalChargeCapacityProfile } from \"../sensor/physical-charge-capacity.js\";\nimport { simulateSensorChargeRealization, simulateSensorRawCode, parseSensorChargeSamplingProfile,\n parseSensorReadoutConversionProfile, resolveSensorReadoutRegime, type SensorChargeSamplingProfile, type SensorReadoutConversionProfile } from \"../sensor/raw-readout.js\";\nimport { createSensorRawCaptureSample } from \"../sensor/raw-reconstruction.js\";\nimport { parseSensorFixedPatternNoiseProfile, type SensorFixedPatternNoiseProfile } from \"../sensor/fixed-pattern-noise.js\";\nimport { deriveNativeSiteStreamSeedUint32, NATIVE_SITE_CHARGE_STREAM_ID, NATIVE_SITE_READ_NOISE_STREAM_ID } from \"../sensor/stochastic-seed.js\";\nimport { parseSensorColorSamplingProfile } from \"../sensor/color-sampling.js\";\nimport { parseCaptureModeProfile } from \"../sensor/capture-mode.js\";\nimport { parseNativeEffectiveRasterColorSamplingBindingProfile, resolveCaptureModeColorSamplingContributors } from \"../sensor/capture-color-sampling-binding.js\";\nimport { calculateCaptureExposureWindows, type CalculateCaptureExposureWindowsInput, type CaptureExposureWindows } from \"../sensor/exposure-window.js\";\n\nexport const SENSOR_RAW_PRODUCER_SCHEMA_VERSION = \"0.3.0\" as const;\n/**\n * Version of the capture noise model. It fixes the hashed per-site seed schedule and the signed electronic\n * readout behaviour.\n *\n * 0.4.0: exact ADC rounding with ties up, normal-approximation Poisson draws for means of 1e9 and above,\n * optional post-ADC digital gain and INL (integral non-linearity), and optional per-sensor fixed-pattern noise.\n */\nexport const SENSOR_RAW_PRODUCER_NOISE_MODEL = Object.freeze({ id: \"photivra-native-raw-noise\", version: \"0.4.0\" } as const);\n/** For each native site: one declared exposure event (EQE photo signal, dark signal, charge completeness) and its readout state. */\nexport interface SensorRawProducerSiteInput {\n charge: ComposeSensorAccumulatedChargeInput;\n samplingProfile: SensorChargeSamplingProfile;\n capacityProfile: SensorPhysicalChargeCapacityProfile;\n operatingStateId: string;\n readoutProfile: SensorReadoutConversionProfile;\n regimeId: string;\n /** Optional fixed-pattern noise (FPN) for this sensor; one profile for the whole frame. Omit it to disable FPN. */\n fixedPatternNoise?: SensorFixedPatternNoiseProfile;\n}\n/** Exposure schedule for the full sensor. The producer owns the sampling coordinates. */\nexport type SensorRawProducerExposureWindowInput = Omit<CalculateCaptureExposureWindowsInput,\n \"nativeRaster\" | \"activeCaptureRect\" | \"samplePointsNative\">;\n/** Input for one bounded frame. It is never a conversion from separate RGB pixels. */\nexport interface SensorRawProducerInput {\n frame: Omit<SensorRawFrameInput, \"samples\">;\n sites: readonly SensorRawProducerSiteInput[];\n /** If omitted, every event uses the existing global window 0..shutterSeconds. */\n exposureWindow?: SensorRawProducerExposureWindowInput;\n}\n/** Codes produced by the engine, with per-step diagnostics. The upstream radiance and response are as declared, not verified. */\nexport interface SensorRawProducerResult {\n schemaVersion: typeof SENSOR_RAW_PRODUCER_SCHEMA_VERSION;\n codeProducer: \"engine-charge-capacity-noise-adc\";\n upstreamOrigin: \"declared-eqe-and-dark-exposure-results\";\n upstreamRadiometryVerified: false;\n seedSchedule: \"murmur3-capture-seed-native-index-stream-v2\";\n frame: SensorRawFrame;\n localExposureWindows?: CalculationResult<CaptureExposureWindows>;\n sites: readonly {\n accumulatedCharge: ReturnType<typeof composeSensorAccumulatedCharge>;\n capacity: ReturnType<typeof assessSensorPhysicalChargeCapacity>;\n realization: ReturnType<typeof simulateSensorChargeRealization>;\n readout: ReturnType<typeof simulateSensorRawCode>;\n }[];\n}\nfunction fields(value: unknown, allowed: readonly string[]): Record<string, unknown> {\n return requireAllowlistedRecord(value, allowed, \"Invalid sensor RAW producer fields.\");\n}\nfunction publicId(value: unknown): string {\n return requirePublicOpaqueId(value, \"Expected public producer identity.\");\n}\nconst KEY_RECURSE = 0, KEY_IDENTITY = 1, KEY_IDENTITY_LIST = 2;\n/** Bounded cache of how the identity check classifies each property name (it depends only on the name). */\nconst IDENTITY_KEY_KINDS = new Map<string, number>();\n/** Bounded cache of strings already known to be valid public IDs (validity depends only on the string). */\nconst VALID_PUBLIC_IDS = new Set<string>();\nconst IDENTITY_WALK_MEMO_LIMIT = 4096;\nfunction identityKeyKind(key: string): number {\n // Array indices and other names ending in a digit match neither suffix.\n const last = key.charCodeAt(key.length - 1);\n if (last >= 48 && last <= 57) return KEY_RECURSE;\n let kind = IDENTITY_KEY_KINDS.get(key);\n if (kind === undefined) {\n kind = /(?:Id|Version)$/.test(key) ? KEY_IDENTITY : /Ids$/.test(key) ? KEY_IDENTITY_LIST : KEY_RECURSE;\n if (IDENTITY_KEY_KINDS.size < IDENTITY_WALK_MEMO_LIMIT) IDENTITY_KEY_KINDS.set(key, kind);\n }\n return kind;\n}\nfunction memoizedPublicId(value: unknown): void {\n if (typeof value === \"string\" && VALID_PUBLIC_IDS.has(value)) return;\n publicId(value);\n if (VALID_PUBLIC_IDS.size < IDENTITY_WALK_MEMO_LIMIT) VALID_PUBLIC_IDS.add(value as string);\n}\n/**\n * At any depth, every property whose name ends in Id or Version must hold a public ID, and every property\n * ending in Ids a bounded dense list of them. Order, keys and errors are the same as the earlier\n * Object.entries walk. Key classification and already-valid IDs are cached, because each depends only on\n * its string.\n */\nfunction publicIdentities(value: unknown): void {\n if (value === null || typeof value !== \"object\") return;\n const record = value as Record<string, unknown>, keys = Object.keys(record);\n for (let index = 0; index < keys.length; index++) {\n const key = keys[index]!, kind = identityKeyKind(key), child = record[key];\n if (kind === KEY_IDENTITY) memoizedPublicId(child);\n else if (kind === KEY_IDENTITY_LIST) dense(child, 256).forEach(memoizedPublicId);\n else if (child !== null && typeof child === \"object\") publicIdentities(child);\n }\n}\nfunction dense(value: unknown, maximum: number): unknown[] {\n if (!Array.isArray(value) || value.length > maximum || Array.from({ length: value.length }, (_, i) => i in value).includes(false)) {\n throw new InvalidConfigurationError(\"Expected bounded dense producer array.\");\n }\n return value;\n}\nfunction optionalEvidence(value: unknown): ReturnType<typeof parseEvidenceList> {\n return dense(value, 256).length === 0 ? [] : parseEvidenceList(value, \"optionalExposureEvidence\");\n}\nfunction exposureEvidence(value: unknown, temporalPhoto?: Record<string, unknown>): ComposeSensorAccumulatedChargeInput[\"photoSignal\"][\"componentEvidence\"] {\n if (temporalPhoto !== undefined) return parseSensorEqeTemporalPhotoSignal({ ...temporalPhoto, componentEvidence: value }).componentEvidence;\n const r = fields(value, [\"stationarity\", \"exposureBinding\"]);\n const b = fields(r.exposureBinding, [\"binding\", \"colorSamplingProfile\", \"nominalExposureDuration\", \"openingBoundary\", \"closingBoundary\"]);\n return { stationarity: parseEvidenceList(r.stationarity, \"stationarity\"), exposureBinding: {\n binding: parseEvidenceList(b.binding, \"binding\"), colorSamplingProfile: parseEvidenceList(b.colorSamplingProfile, \"colorSamplingProfile\"),\n nominalExposureDuration: parseEvidenceList(b.nominalExposureDuration, \"nominalExposureDuration\"),\n openingBoundary: optionalEvidence(b.openingBoundary), closingBoundary: optionalEvidence(b.closingBoundary) } };\n}\nconst common = [\"colorSamplingProfileId\", \"channelId\", \"site\", \"bindingId\", \"stationarityProfileId\", \"timeReference\",\n \"startOffsetSecondsFromOpeningReference\", \"endOffsetSecondsFromOpeningReference\", \"localExposureDurationSeconds\", \"componentEvidence\"];\nconst photoTrue = [\"timeStationarityEstablished\", \"temporalIntegrationApplied\", \"exposureDurationApplied\", \"countsAreExpectationValues\"];\nconst photoFalse = [\"timeVaryingSignalIntegrated\", \"multiFrameSequenceIntegrated\", \"darkChargeIncluded\", \"otherChargeIncluded\",\n \"physicalFullWellAssessmentAuthorized\", \"cameraSaturationAssessmentAuthorized\", \"saturationAssessed\", \"shotNoiseApplied\",\n \"readNoiseApplied\", \"adcQuantizationApplied\", \"rawCodeValueProduced\", \"integerPhotonCountSampled\", \"integerElectronCountSampled\", \"chargeCalculated\", \"currentCalculated\"];\nfunction chargeInput(value: unknown): ComposeSensorAccumulatedChargeInput {\n const r = fields(value, [\"photoSignal\", \"darkCharge\", \"additionalChargeComponents\", \"completenessProfile\"]);\n const temporal = r.photoSignal !== null && typeof r.photoSignal === \"object\" &&\n (r.photoSignal as Record<string, unknown>).kind === \"eqe-temporal-photo-signal\";\n const p = temporal ? parseSensorEqeTemporalPhotoSignal(r.photoSignal) as unknown as Record<string, unknown> : fields(r.photoSignal, [...common, ...photoTrue, ...photoFalse, \"kind\", \"stationarityStatus\", \"integrationMethod\",\n \"accumulatedSignalCompleteness\", \"incidentPhotonRatePerSecond\", \"expectedGeneratedElectronRatePerSecond\", \"expectedIncidentPhotonCount\", \"expectedGeneratedElectronCount\"]);\n const darkFalse = [\"integerDarkElectronCountSampled\", \"darkShotNoiseApplied\", \"darkCurrentCompensationApplied\", \"photoSignalIncluded\",\n \"otherChargeIncluded\", \"physicalFullWellAssessmentAuthorized\", \"saturationAssessed\"];\n const d = fields(r.darkCharge, [...common, ...darkFalse, \"darkCurrentProfileId\", \"operatingTemperatureC\", \"temperatureModel\",\n \"temperatureInterpolationUsed\", \"temporalIntegrationId\", \"darkCurrentElectronsPerSecond\", \"expectedDarkElectronCount\", \"countMeaning\", \"expectationValueOnly\", \"spatialDarkCurrentNonuniformityModeled\"]);\n if ((!temporal && (p.kind !== \"eqe-expected-counts\" || p.integrationMethod !== \"constant-rate-times-local-exposure-duration\" ||\n p.accumulatedSignalCompleteness !== \"photo-signal-only\" || (p.stationarityStatus !== \"established\" && p.stationarityStatus !== \"approximation\") ||\n photoTrue.some((k) => p[k] !== true) || photoFalse.some((k) => p[k] !== false))) || darkFalse.some((k) => d[k] !== false) ||\n d.expectationValueOnly !== true || d.countMeaning !== \"expected-thermally-generated-electrons\" ||\n typeof d.spatialDarkCurrentNonuniformityModeled !== \"boolean\" || typeof d.temperatureInterpolationUsed !== \"boolean\" ||\n (d.temperatureModel !== \"fixed-reference-temperature\" && d.temperatureModel !== \"piecewise-linear-temperature-table\" &&\n d.temperatureModel !== \"log-linear-temperature-table\")) {\n throw new InvalidConfigurationError(\"Producer requires untreated EQE/dark exposure expectations, not sampled, clipped or A/W charge.\");\n }\n if (d.temperatureModel === \"fixed-reference-temperature\" && d.temperatureInterpolationUsed !== false) {\n throw new InvalidConfigurationError(\"Fixed-temperature dark result cannot claim temperature interpolation.\");\n }\n for (const record of [p, d]) {\n for (const k of [\"colorSamplingProfileId\", \"channelId\", \"bindingId\", temporal ? \"temporalIntegrationId\" : \"stationarityProfileId\"]) publicId(record[k]);\n fields(record.site, [\"x\", \"y\"]);\n if (record.timeReference !== \"first-opening-boundary-phase\") throw new InvalidConfigurationError(\"Unsupported producer time origin.\");\n }\n publicId(d.darkCurrentProfileId);\n for (const [record, keys] of [[p, [\"incidentPhotonRatePerSecond\", \"expectedGeneratedElectronRatePerSecond\", \"expectedIncidentPhotonCount\", \"expectedGeneratedElectronCount\"]],\n [d, [\"darkCurrentElectronsPerSecond\", \"expectedDarkElectronCount\"]]] as const) {\n for (const k of keys) if (!(temporal && record === p && k.endsWith(\"RatePerSecond\")) && (typeof record[k] !== \"number\" || !Number.isFinite(record[k]) || record[k] < 0)) throw new InvalidConfigurationError(\"Invalid expected rates/counts.\");\n }\n const duration = p.localExposureDurationSeconds;\n if (typeof duration !== \"number\" || !Number.isFinite(duration) || duration <= 0 ||\n (!temporal && (p.expectedIncidentPhotonCount !== (p.incidentPhotonRatePerSecond as number)*duration ||\n p.expectedGeneratedElectronCount !== (p.expectedGeneratedElectronRatePerSecond as number)*duration)) ||\n d.expectedDarkElectronCount !== (d.darkCurrentElectronsPerSecond as number)*duration ||\n (p.expectedGeneratedElectronCount as number) > (p.expectedIncidentPhotonCount as number)) {\n throw new InvalidConfigurationError(\"Exposure expectations must match their exact temporal integral or constant-rate products and EQE domain.\");\n }\n const e = fields(d.componentEvidence, [\"darkCurrent\", \"siteApproximation\", \"exposure\"]);\n const charge = { photoSignal: { ...p, componentEvidence: exposureEvidence(p.componentEvidence, temporal ? p : undefined) },\n darkCharge: { ...d, componentEvidence: { darkCurrent: parseEvidenceList(e.darkCurrent, \"darkCurrent\"),\n siteApproximation: optionalEvidence(e.siteApproximation), exposure: exposureEvidence(e.exposure, temporal ? p : undefined) } },\n completenessProfile: parseSensorAccumulatedChargeCompletenessProfile(r.completenessProfile),\n ...(r.additionalChargeComponents === undefined ? {} : { additionalChargeComponents:\n dense(r.additionalChargeComponents, 32).map(parseSensorAdditionalStoredChargeComponent) }) } as unknown as ComposeSensorAccumulatedChargeInput;\n // The existing charge composition checks that photo, dark, additional and completeness events agree exactly.\n composeSensorAccumulatedCharge(charge);\n return charge;\n}\nfunction localWindows(frame: SensorRawProducerInput[\"frame\"], value: unknown): CalculationResult<CaptureExposureWindows> {\n const r = fields(value, [\"shutterMechanism\", \"nominalExposureDurationSeconds\", \"opening\", \"closing\"]);\n fields(r.nominalExposureDurationSeconds, [\"value\", \"unit\", \"evidence\"]);\n for (const boundary of [r.opening, r.closing]) {\n const b = fields(boundary, [\"kind\", \"directionNative\", \"traversalDurationSeconds\"]);\n if (b.directionNative !== undefined) fields(b.directionNative, [\"value\", \"evidence\"]);\n if (b.traversalDurationSeconds !== undefined) fields(b.traversalDurationSeconds, [\"value\", \"unit\", \"evidence\"]);\n }\n const native = frame.capture.geometry.nativeRaster;\n const timing = calculateCaptureExposureWindows({\n ...r as unknown as SensorRawProducerExposureWindowInput,\n nativeRaster: native,\n samplePointsNative: Array.from({ length: native.pixelWidth*native.pixelHeight }, (_, i) => ({\n x: i%native.pixelWidth+0.5, y: Math.floor(i/native.pixelWidth)+0.5\n }))\n });\n if (timing.value.nominalExposureDurationSeconds.value !== frame.capture.exposure.shutterSeconds) {\n throw new InvalidConfigurationError(\"Exposure schedule nominal duration differs from committed capture.\");\n }\n return timing;\n}\nfunction sourceBoundary(schedule: CaptureExposureWindows[\"opening\"][\"schedule\"]): SensorRawProducerExposureWindowInput[\"opening\"] {\n return schedule.kind === \"simultaneous\" ? { kind: \"simultaneous\" } : {\n kind: \"uniform-linear-native-scan\", directionNative: schedule.directionNative,\n traversalDurationSeconds: schedule.traversalDurationSeconds\n };\n}\n/** Internal: per-site validation shared by the reference path and bounded packed execution. */\nexport type NativeRawProducerFrameContext = Omit<SensorRawProducerInput[\"frame\"], \"capture\"> & {\n capture: Pick<SensorRawProducerInput[\"frame\"][\"capture\"], \"geometry\" | \"exposure\" | \"noise\" | \"focus\" | \"sceneStateId\" | \"sceneTimeSeconds\">;\n};\nexport function parseNativeRawProducerSite(site: unknown, i: number, frame: NativeRawProducerFrameContext,\n window?: CaptureExposureWindows[\"samples\"][number]): SensorRawProducerSiteInput {\n const native = frame.capture.geometry.nativeRaster;\n const s = fields(site, [\"charge\", \"samplingProfile\", \"capacityProfile\", \"operatingStateId\", \"readoutProfile\", \"regimeId\", \"fixedPatternNoise\"]);\n const charge = chargeInput(s.charge), p = charge.photoSignal;\n const contributors = resolveCaptureModeColorSamplingContributors({ nativeRaster: native, captureModeProfile: frame.captureModeProfile,\n modeId: frame.modeId, colorSamplingProfile: frame.colorSamplingProfile, bindingProfile: frame.bindingProfile,\n modeSampleIndexFullFrame: { x: i%native.pixelWidth, y: Math.floor(i/native.pixelWidth) } });\n\n if (contributors.totalContributorSites !== 1 || contributors.channelComposition.kind !== \"single-channel\" ||\n p.colorSamplingProfileId !== frame.colorSamplingProfile.profileId || p.channelId !== contributors.channelComposition.channelId ||\n p.site.x !== contributors.colorSamplingSiteRect.x || p.site.y !== contributors.colorSamplingSiteRect.y ||\n p.bindingId !== frame.bindingProfile.bindingId || p.startOffsetSecondsFromOpeningReference !== (window?.startOffsetSecondsFromOpeningReference ?? 0) ||\n p.endOffsetSecondsFromOpeningReference !== (window?.endOffsetSecondsFromOpeningReference ?? frame.capture.exposure.shutterSeconds) ||\n p.localExposureDurationSeconds !== (window?.localExposureDurationSeconds ?? frame.capture.exposure.shutterSeconds)) {\n throw new InvalidConfigurationError(\"Charge site/channel/binding/local exposure differs from committed capture.\");\n }\n const readoutProfile = parseSensorReadoutConversionProfile(s.readoutProfile);\n const isoGain = readoutProfile.regimes.find((regime) => regime.regimeId === s.regimeId)?.exposureIndexGain;\n if (isoGain !== undefined && isoGain.exposureIndex !== frame.capture.exposure.iso) {\n throw new InvalidConfigurationError(\"Readout regime ISO gain differs from the committed capture ISO.\");\n }\n return { charge, samplingProfile: parseSensorChargeSamplingProfile(s.samplingProfile), capacityProfile: parseSensorPhysicalChargeCapacityProfile(s.capacityProfile),\n operatingStateId: publicId(s.operatingStateId), readoutProfile, regimeId: publicId(s.regimeId),\n ...(s.fixedPatternNoise === undefined ? {} : { fixedPatternNoise: parseSensorFixedPatternNoiseProfile(s.fixedPatternNoise) }) };\n}\nexport function validateNativeRawReadoutIdentity(s: SensorRawProducerSiteInput, first: SensorRawProducerSiteInput): void {\n publicIdentities(s);\n const readout = resolveSensorReadoutRegime({ profile: s.readoutProfile, regimeId: s.regimeId });\n if (s.readoutProfile.profileId !== first.readoutProfile.profileId || s.regimeId !== first.regimeId ||\n readout.regime.adc.bitDepth > 16 || readout.regime.adc.digitalSaturationCode <= readout.regime.adc.blackLevelCode ||\n s.readoutProfile.colorSamplingProfileId !== s.charge.photoSignal.colorSamplingProfileId ||\n s.readoutProfile.channelId !== s.charge.photoSignal.channelId || s.samplingProfile.completenessProfileId !== s.charge.completenessProfile.profileId ||\n s.fixedPatternNoise?.profileId !== first.fixedPatternNoise?.profileId ||\n s.fixedPatternNoise?.sensorInstanceSeedUint32 !== first.fixedPatternNoise?.sensorInstanceSeedUint32) {\n throw new InvalidConfigurationError(\"Frame requires one readout identity/regime, one fixed-pattern identity and a positive uint16 RAW code span.\");\n }\n}\n/** The shared per-site pipeline holds all the charge, capacity, random-noise and ADC equations. `i` is the absolute native row-major index. */\nexport function calculateNativeRawSite(s: SensorRawProducerSiteInput, seed: number, i: number): SensorRawProducerResult[\"sites\"][number] {\n const accumulatedCharge = composeSensorAccumulatedCharge(s.charge);\n const capacity = assessSensorPhysicalChargeCapacity({ accumulatedCharge: accumulatedCharge.value, capacityProfile: s.capacityProfile,\n operatingStateId: s.operatingStateId, operatingTemperatureC: s.charge.darkCharge.operatingTemperatureC });\n const pattern = s.fixedPatternNoise === undefined ? {} : { fixedPatternNoise: s.fixedPatternNoise };\n const realization = simulateSensorChargeRealization({ accumulatedCharge: accumulatedCharge.value, samplingProfile: s.samplingProfile,\n seedUint32: deriveNativeSiteStreamSeedUint32(seed, i, NATIVE_SITE_CHARGE_STREAM_ID), ...pattern });\n const readout = simulateSensorRawCode({ chargeRealization: realization.value, physicalCapacityAssessment: capacity.value,\n readoutProfile: s.readoutProfile, regimeId: s.regimeId,\n readNoiseSeedUint32: deriveNativeSiteStreamSeedUint32(seed, i, NATIVE_SITE_READ_NOISE_STREAM_ID), ...pattern });\n return { accumulatedCharge, capacity, realization, readout };\n}\n/** The selected regime's declared INL, which the effective white level needs at saturation. */\nfunction regimeInl(site: SensorRawProducerSiteInput): { adcIntegralNonLinearity?: NonNullable<SensorReadoutConversionProfile[\"regimes\"][number][\"adc\"][\"integralNonLinearity\"]> } {\n const inl = site.readoutProfile.regimes.find((r) => r.regimeId === site.regimeId)?.adc.integralNonLinearity;\n return inl === undefined ? {} : { adcIntegralNonLinearity: inl };\n}\n/** Validates the complete per-site exposure inputs. Charge, noise or RAW codes are never accepted as a shortcut. */\nexport function parseSensorRawProducerInput(value: unknown): SensorRawProducerInput {\n const r = fields(value, [\"frame\", \"sites\", \"exposureWindow\"]), f = fields(r.frame, [\"frameId\", \"capture\", \"modeId\", \"captureModeProfile\", \"colorSamplingProfile\", \"bindingProfile\", \"containerBitDepth\"]);\n const capture = parseSimulatedCapture(f.capture), native = capture.geometry.nativeRaster, count = native.pixelWidth*native.pixelHeight;\n const sites = dense(r.sites, RAW_REFERENCE_MAX_NATIVE_SITES);\n const frame = { frameId: publicId(f.frameId), capture, modeId: publicId(f.modeId), containerBitDepth: 16 as const,\n captureModeProfile: parseCaptureModeProfile(f.captureModeProfile), colorSamplingProfile: parseSensorColorSamplingProfile(f.colorSamplingProfile),\n bindingProfile: parseNativeEffectiveRasterColorSamplingBindingProfile(f.bindingProfile) };\n const mode = frame.captureModeProfile.modes.find((m) => m.modeId === frame.modeId);\n if (f.containerBitDepth !== 16 || count > RAW_REFERENCE_MAX_NATIVE_SITES || sites.length !== count ||\n capture.noise.model.id !== SENSOR_RAW_PRODUCER_NOISE_MODEL.id || capture.noise.model.version !== SENSOR_RAW_PRODUCER_NOISE_MODEL.version ||\n frame.colorSamplingProfile.layout.kind !== \"periodic-mosaic\" || !mode || mode.acquisition.kind !== \"single-frame\" ||\n mode.perFrameSampling.kind !== \"native-effective-raster\" || (mode.reconstructionStages?.length ?? 0) !== 0) {\n throw new InvalidConfigurationError(\"Producer requires exact noise identity and bounded single-frame native CFA coverage.\");\n }\n const timing = r.exposureWindow === undefined ? undefined : localWindows(frame, r.exposureWindow);\n const parsed = sites.map((site, i) => parseNativeRawProducerSite(site, i, frame, timing?.value.samples[i]));\n for (const site of parsed) validateNativeRawReadoutIdentity(site, parsed[0]!);\n publicIdentities(frame);\n return { frame, sites: parsed, ...(timing === undefined ? {} : { exposureWindow: {\n shutterMechanism: timing.value.shutterMechanism,\n nominalExposureDurationSeconds: timing.value.nominalExposureDurationSeconds,\n opening: sourceBoundary(timing.value.opening.schedule), closing: sourceBoundary(timing.value.closing.schedule)\n } }) };\n}\n/** Runs accumulated charge → capacity → Poisson noise → read noise and ADC → native sample → immutable frame. */\nexport function simulateSensorRawFrame(input: SensorRawProducerInput): CalculationResult<SensorRawProducerResult> {\n const v = parseSensorRawProducerInput(input), seed = v.frame.capture.noise.seedUint32;\n const sites = v.sites.map((s, i) => calculateNativeRawSite(s, seed, i));\n const native = v.frame.capture.geometry.nativeRaster;\n const samples = sites.map((s, i) => createSensorRawCaptureSample({ rawCode: s.readout.value,\n ...regimeInl(v.sites[i]!),\n contributors: resolveCaptureModeColorSamplingContributors({ nativeRaster: native, captureModeProfile: v.frame.captureModeProfile,\n modeId: v.frame.modeId, colorSamplingProfile: v.frame.colorSamplingProfile, bindingProfile: v.frame.bindingProfile,\n modeSampleIndexFullFrame: { x: i%native.pixelWidth, y: Math.floor(i/native.pixelWidth) } }) }));\n return approximationResult({ schemaVersion: SENSOR_RAW_PRODUCER_SCHEMA_VERSION, codeProducer: \"engine-charge-capacity-noise-adc\",\n upstreamOrigin: \"declared-eqe-and-dark-exposure-results\", upstreamRadiometryVerified: false,\n seedSchedule: \"murmur3-capture-seed-native-index-stream-v2\", frame: createSensorRawFrame({ ...v.frame, samples }), sites,\n ...(v.exposureWindow === undefined ? {} : { localExposureWindows: localWindows(v.frame, v.exposureWindow) }) },\n \"native-sensor-raw-frame-producer\", SENSOR_RAW_PRODUCER_SCHEMA_VERSION, [\n \"Untreated EQE/dark exposure results and completeness evidence are upstream declarations; source radiometry is not independently verified\",\n \"Native row-major site seeds are MurmurHash3_x86_32 of (capture seed, absolute native index, stream 0 charge / 1 read noise); deterministic and non-cryptographic\",\n \"Existing scalar capacity/noise/readout approximations retain distinct physical/pre-ADC/digital saturation diagnostics; no blooming\",\n \"Optional fixed-pattern noise is deterministic per sensor instance (its own seed and absolute colour-sampling site), independent of the capture seed\",\n \"Stationarity applies separately to every exact local window; no time-varying radiance integration, multi-frame acquisition, RGB-to-RAW conversion or production-stage activation\",\n \"Stored capture float planes remain independent; same-RAW export must use the returned frame's reconstruction handoff\"]);\n}\n"]}
|