@photivra/engine 1.5.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +393 -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/host-yield.d.ts +7 -0
- package/dist/facade/host-yield.js +23 -0
- package/dist/facade/host-yield.js.map +1 -0
- package/dist/facade/scene-radiance.d.ts +117 -0
- package/dist/facade/scene-radiance.js +205 -0
- package/dist/facade/scene-radiance.js.map +1 -0
- package/dist/facade/simulate-capture.d.ts +284 -0
- package/dist/facade/simulate-capture.js +1026 -0
- package/dist/facade/simulate-capture.js.map +1 -0
- package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
- package/dist/gpu/chart-radiance-gpu.js +176 -0
- package/dist/gpu/chart-radiance-gpu.js.map +1 -0
- package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
- package/dist/gpu/image-kernel-accelerator.js +720 -0
- package/dist/gpu/image-kernel-accelerator.js.map +1 -0
- package/dist/gpu/image-kernel-execution.d.ts +92 -0
- package/dist/gpu/image-kernel-execution.js +84 -0
- package/dist/gpu/image-kernel-execution.js.map +1 -0
- package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
- package/dist/gpu/sensor-stage-gpu.js +317 -0
- package/dist/gpu/sensor-stage-gpu.js.map +1 -0
- package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
- package/dist/gpu/temporal-sum-gpu.js +150 -0
- package/dist/gpu/temporal-sum-gpu.js.map +1 -0
- package/dist/gpu/webgpu-runtime.d.ts +63 -0
- package/dist/gpu/webgpu-runtime.js +215 -0
- package/dist/gpu/webgpu-runtime.js.map +1 -0
- package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
- package/dist/gpu/wgsl-chart-kernel.js +165 -0
- package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
- package/dist/gpu/wgsl-kernels.d.ts +53 -0
- package/dist/gpu/wgsl-kernels.js +365 -0
- package/dist/gpu/wgsl-kernels.js.map +1 -0
- package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
- package/dist/gpu/wgsl-sensor-kernel.js +409 -0
- package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
- package/dist/index.d.ts +89 -25
- package/dist/index.js +59 -15
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +92 -40
- package/dist/motion/camera-rotation.js +84 -47
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
- package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
- package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
- package/dist/motion/capture-rotation-trajectory.js +36 -26
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
- package/dist/motion/extended-object-projection.d.ts +19 -16
- package/dist/motion/extended-object-projection.js +38 -18
- package/dist/motion/extended-object-projection.js.map +1 -1
- package/dist/motion/projected-motion.d.ts +18 -17
- package/dist/motion/projected-motion.js +25 -17
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/motion/temporal-exposure-sum.d.ts +55 -0
- package/dist/motion/temporal-exposure-sum.js +141 -0
- package/dist/motion/temporal-exposure-sum.js.map +1 -0
- package/dist/motion/video-sequence.d.ts +111 -0
- package/dist/motion/video-sequence.js +179 -0
- package/dist/motion/video-sequence.js.map +1 -0
- package/dist/optics/aperture.d.ts +14 -15
- package/dist/optics/aperture.js +13 -11
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/atmospheric-haze.d.ts +83 -0
- package/dist/optics/atmospheric-haze.js +113 -0
- package/dist/optics/atmospheric-haze.js.map +1 -0
- package/dist/optics/brown-conrady-distortion.d.ts +116 -0
- package/dist/optics/brown-conrady-distortion.js +291 -0
- package/dist/optics/brown-conrady-distortion.js.map +1 -0
- package/dist/optics/circle-of-confusion.d.ts +10 -10
- package/dist/optics/circle-of-confusion.js +15 -11
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +64 -33
- package/dist/optics/complex-pupil-psf.js +190 -98
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/optics/depth-of-field.d.ts +25 -15
- package/dist/optics/depth-of-field.js +67 -27
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +14 -13
- package/dist/optics/diffraction.js +14 -10
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +88 -27
- package/dist/optics/focus-breathing.js +114 -23
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +18 -18
- package/dist/optics/focus-state.js +21 -15
- package/dist/optics/focus-state.js.map +1 -1
- package/dist/optics/front-of-lens-filter.d.ts +45 -14
- package/dist/optics/front-of-lens-filter.js +259 -88
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/illumination-vignetting.d.ts +16 -17
- package/dist/optics/illumination-vignetting.js +40 -17
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/irradiance-convolution.d.ts +59 -0
- package/dist/optics/irradiance-convolution.js +138 -0
- package/dist/optics/irradiance-convolution.js.map +1 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
- package/dist/optics/lateral-chromatic-aberration.js +33 -23
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-kernels.d.ts +89 -0
- package/dist/optics/lens-psf-kernels.js +175 -0
- package/dist/optics/lens-psf-kernels.js.map +1 -0
- package/dist/optics/lens-psf-profile.d.ts +78 -46
- package/dist/optics/lens-psf-profile.js +335 -124
- package/dist/optics/lens-psf-profile.js.map +1 -1
- package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
- package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
- package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +80 -23
- package/dist/optics/polygon-diffraction.js +130 -25
- package/dist/optics/polygon-diffraction.js.map +1 -1
- package/dist/optics/profile-contract.d.ts +5 -6
- package/dist/optics/profile-contract.js +14 -11
- package/dist/optics/profile-contract.js.map +1 -1
- package/dist/optics/psf-foundation.d.ts +23 -23
- package/dist/optics/psf-foundation.js +24 -21
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/pupil-vignetting.d.ts +118 -0
- package/dist/optics/pupil-vignetting.js +264 -0
- package/dist/optics/pupil-vignetting.js.map +1 -0
- package/dist/optics/radial-distortion.d.ts +34 -33
- package/dist/optics/radial-distortion.js +37 -30
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
- package/dist/optics/scene-to-sensor-irradiance.js +73 -45
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
- package/dist/optics/scene-to-sensor-quadrature.js +16 -11
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
- package/dist/optics/sensor-aperture-rays.d.ts +20 -4
- package/dist/optics/sensor-aperture-rays.js +32 -14
- package/dist/optics/sensor-aperture-rays.js.map +1 -1
- package/dist/optics/sensor-environment-query.d.ts +81 -16
- package/dist/optics/sensor-environment-query.js +145 -12
- package/dist/optics/sensor-environment-query.js.map +1 -1
- package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
- package/dist/optics/sensor-psf-quadrature.js +18 -11
- package/dist/optics/sensor-psf-quadrature.js.map +1 -1
- package/dist/optics/sensor-psf-support.d.ts +8 -6
- package/dist/optics/sensor-psf-support.js +8 -5
- package/dist/optics/sensor-psf-support.js.map +1 -1
- package/dist/optics/stray-light.d.ts +22 -19
- package/dist/optics/stray-light.js +18 -12
- package/dist/optics/stray-light.js.map +1 -1
- package/dist/optics/thin-lens.d.ts +10 -9
- package/dist/optics/thin-lens.js +12 -8
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/optics/zernike-wavefront.d.ts +154 -0
- package/dist/optics/zernike-wavefront.js +352 -0
- package/dist/optics/zernike-wavefront.js.map +1 -0
- package/dist/output/capture-corrected-sdr.d.ts +16 -8
- package/dist/output/capture-corrected-sdr.js +16 -8
- package/dist/output/capture-corrected-sdr.js.map +1 -1
- package/dist/output/capture-geometry.d.ts +34 -36
- package/dist/output/capture-geometry.js +52 -32
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +7 -6
- package/dist/output/capture-sdr.js +11 -8
- package/dist/output/capture-sdr.js.map +1 -1
- package/dist/output/crop.d.ts +22 -6
- package/dist/output/crop.js +40 -6
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +60 -23
- package/dist/output/geometric-transforms.js +111 -24
- package/dist/output/geometric-transforms.js.map +1 -1
- package/dist/output/lens-corrections.d.ts +27 -19
- package/dist/output/lens-corrections.js +29 -13
- package/dist/output/lens-corrections.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +71 -16
- package/dist/output/native-capture-sdr.js +190 -33
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/png-encoder.d.ts +65 -0
- package/dist/output/png-encoder.js +461 -0
- package/dist/output/png-encoder.js.map +1 -0
- package/dist/output/print-contrast-reference.d.ts +10 -9
- package/dist/output/print-contrast-reference.js +10 -8
- package/dist/output/print-contrast-reference.js.map +1 -1
- package/dist/output/print-detail.d.ts +18 -17
- package/dist/output/print-detail.js +12 -10
- package/dist/output/print-detail.js.map +1 -1
- package/dist/output/print-jpeg.d.ts +26 -5
- package/dist/output/print-jpeg.js +117 -50
- package/dist/output/print-jpeg.js.map +1 -1
- package/dist/output/print-plan.d.ts +19 -19
- package/dist/output/print-plan.js +11 -10
- package/dist/output/print-plan.js.map +1 -1
- package/dist/output/print-region-statistics.d.ts +14 -15
- package/dist/output/print-region-statistics.js +11 -11
- package/dist/output/print-region-statistics.js.map +1 -1
- package/dist/output/sdr-rendering.d.ts +48 -10
- package/dist/output/sdr-rendering.js +114 -25
- package/dist/output/sdr-rendering.js.map +1 -1
- package/dist/output/subject-framing-crop.d.ts +6 -10
- package/dist/output/subject-framing-crop.js +23 -13
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/processing/demosaic.d.ts +90 -0
- package/dist/processing/demosaic.js +275 -0
- package/dist/processing/demosaic.js.map +1 -0
- package/dist/processing/denoise.d.ts +68 -0
- package/dist/processing/denoise.js +214 -0
- package/dist/processing/denoise.js.map +1 -0
- package/dist/processing/focus-stacking.d.ts +17 -0
- package/dist/processing/focus-stacking.js +80 -0
- package/dist/processing/focus-stacking.js.map +1 -0
- package/dist/processing/hdr.d.ts +54 -0
- package/dist/processing/hdr.js +172 -0
- package/dist/processing/hdr.js.map +1 -0
- package/dist/processing/image-ops.d.ts +66 -0
- package/dist/processing/image-ops.js +192 -0
- package/dist/processing/image-ops.js.map +1 -0
- package/dist/processing/panorama.d.ts +51 -0
- package/dist/processing/panorama.js +305 -0
- package/dist/processing/panorama.js.map +1 -0
- package/dist/processing/processing-task.d.ts +85 -0
- package/dist/processing/processing-task.js +164 -0
- package/dist/processing/processing-task.js.map +1 -0
- package/dist/processing/tone-mapping.d.ts +69 -0
- package/dist/processing/tone-mapping.js +310 -0
- package/dist/processing/tone-mapping.js.map +1 -0
- package/dist/schema/camera.d.ts +5 -4
- package/dist/schema/illumination-spectral.d.ts +13 -19
- package/dist/schema/illumination-spectral.js +23 -19
- package/dist/schema/illumination-spectral.js.map +1 -1
- package/dist/schema/illumination-temporal.d.ts +12 -15
- package/dist/schema/illumination-temporal.js +43 -28
- package/dist/schema/illumination-temporal.js.map +1 -1
- package/dist/schema/illumination.d.ts +5 -4
- package/dist/schema/illumination.js +55 -20
- package/dist/schema/illumination.js.map +1 -1
- package/dist/schema/scene-radiance-temporal.d.ts +9 -11
- package/dist/schema/scene-radiance-temporal.js +26 -23
- package/dist/schema/scene-radiance-temporal.js.map +1 -1
- package/dist/schema/scene-radiance.d.ts +17 -17
- package/dist/schema/scene-radiance.js +56 -34
- package/dist/schema/scene-radiance.js.map +1 -1
- package/dist/schema/scene.d.ts +14 -13
- package/dist/schema/validation.d.ts +0 -1
- package/dist/schema/validation.js +17 -15
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +45 -64
- package/dist/sensor/accumulated-charge.js +41 -47
- package/dist/sensor/accumulated-charge.js.map +1 -1
- package/dist/sensor/architecture.d.ts +22 -25
- package/dist/sensor/architecture.js +17 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
- package/dist/sensor/camera-saturation-capacity.js +36 -34
- package/dist/sensor/camera-saturation-capacity.js.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
- package/dist/sensor/capture-color-sampling-binding.js +39 -41
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +8 -9
- package/dist/sensor/capture-mode-timing.js +24 -21
- package/dist/sensor/capture-mode-timing.js.map +1 -1
- package/dist/sensor/capture-mode.d.ts +28 -30
- package/dist/sensor/capture-mode.js +33 -31
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts +30 -33
- package/dist/sensor/color-sampling.js +32 -37
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
- package/dist/sensor/constant-rate-temporal-integration.js +28 -26
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
- package/dist/sensor/dark-current.d.ts +53 -49
- package/dist/sensor/dark-current.js +87 -46
- package/dist/sensor/dark-current.js.map +1 -1
- package/dist/sensor/environment-photo-signal.d.ts +71 -30
- package/dist/sensor/environment-photo-signal.js +127 -46
- package/dist/sensor/environment-photo-signal.js.map +1 -1
- package/dist/sensor/eqe-electron-rate.d.ts +14 -13
- package/dist/sensor/eqe-electron-rate.js +34 -14
- package/dist/sensor/eqe-electron-rate.js.map +1 -1
- package/dist/sensor/eqe-local-exposure.d.ts +24 -24
- package/dist/sensor/eqe-local-exposure.js +15 -11
- package/dist/sensor/eqe-local-exposure.js.map +1 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
- package/dist/sensor/eqe-temporal-exposure.js +15 -10
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/exposure-window.d.ts +48 -34
- package/dist/sensor/exposure-window.js +77 -36
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
- package/dist/sensor/fixed-pattern-noise.js +166 -0
- package/dist/sensor/fixed-pattern-noise.js.map +1 -0
- package/dist/sensor/iso-gain.d.ts +44 -0
- package/dist/sensor/iso-gain.js +119 -0
- package/dist/sensor/iso-gain.js.map +1 -0
- package/dist/sensor/iso-signal-chain.d.ts +25 -48
- package/dist/sensor/iso-signal-chain.js +52 -66
- package/dist/sensor/iso-signal-chain.js.map +1 -1
- package/dist/sensor/local-exposure-binding.d.ts +21 -21
- package/dist/sensor/local-exposure-binding.js +22 -18
- package/dist/sensor/local-exposure-binding.js.map +1 -1
- package/dist/sensor/optical-stack.d.ts +36 -40
- package/dist/sensor/optical-stack.js +34 -37
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +22 -28
- package/dist/sensor/photon-energy.js +42 -34
- package/dist/sensor/photon-energy.js.map +1 -1
- package/dist/sensor/physical-charge-capacity.d.ts +20 -30
- package/dist/sensor/physical-charge-capacity.js +35 -36
- package/dist/sensor/physical-charge-capacity.js.map +1 -1
- package/dist/sensor/pixel-pitch.d.ts +2 -3
- package/dist/sensor/pixel-pitch.js +4 -2
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +13 -15
- package/dist/sensor/radiometry-readiness.js +20 -17
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +173 -83
- package/dist/sensor/raw-readout.js +425 -160
- package/dist/sensor/raw-readout.js.map +1 -1
- package/dist/sensor/raw-reconstruction.d.ts +112 -44
- package/dist/sensor/raw-reconstruction.js +200 -47
- package/dist/sensor/raw-reconstruction.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
- package/dist/sensor/readout-exposure-linkage.js +125 -27
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +43 -44
- package/dist/sensor/readout-timing.js +38 -30
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +21 -28
- package/dist/sensor/response-application-compatibility.js +35 -34
- package/dist/sensor/response-application-compatibility.js.map +1 -1
- package/dist/sensor/response-operating-range.d.ts +26 -35
- package/dist/sensor/response-operating-range.js +40 -39
- package/dist/sensor/response-operating-range.js.map +1 -1
- package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
- package/dist/sensor/responsivity-photocurrent.js +57 -40
- package/dist/sensor/responsivity-photocurrent.js.map +1 -1
- package/dist/sensor/sampling-aperture.d.ts +21 -25
- package/dist/sensor/sampling-aperture.js +29 -28
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
- package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/sensor-geometry.d.ts +28 -32
- package/dist/sensor/sensor-geometry.js +35 -20
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +14 -16
- package/dist/sensor/signal-noise.js +15 -13
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
- package/dist/sensor/spatial-sample-reduction.js +39 -48
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
- package/dist/sensor/spatial-sampling-quadrature.js +31 -36
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
- package/dist/sensor/spatio-spectral-reduction.js +24 -29
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
- package/dist/sensor/spectral-coverage.d.ts +6 -9
- package/dist/sensor/spectral-coverage.js +9 -6
- package/dist/sensor/spectral-coverage.js.map +1 -1
- package/dist/sensor/spectral-quadrature.d.ts +46 -60
- package/dist/sensor/spectral-quadrature.js +38 -48
- package/dist/sensor/spectral-quadrature.js.map +1 -1
- package/dist/sensor/spectral-response.d.ts +53 -41
- package/dist/sensor/spectral-response.js +80 -47
- package/dist/sensor/spectral-response.js.map +1 -1
- package/dist/sensor/stochastic-seed.d.ts +50 -0
- package/dist/sensor/stochastic-seed.js +123 -0
- package/dist/sensor/stochastic-seed.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
- package/dist/sensor/temporal-eqe-sum.js +5 -6
- package/dist/sensor/temporal-eqe-sum.js.map +1 -1
- package/dist/sensor/temporal-photo-signal.d.ts +5 -6
- package/dist/sensor/temporal-photo-signal.js +11 -10
- package/dist/sensor/temporal-photo-signal.js.map +1 -1
- package/dist/sensor/temporal-sample-binding.d.ts +1 -2
- package/dist/sensor/temporal-sample-binding.js +3 -3
- package/dist/sensor/temporal-sample-binding.js.map +1 -1
- package/dist/simulation/poc-simulation.d.ts +16 -16
- package/dist/simulation/poc-simulation.js +20 -15
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +42 -18
- package/dist/stabilization/camera-shake.js +43 -20
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +44 -41
- package/dist/stabilization/system.js +196 -108
- package/dist/stabilization/system.js.map +1 -1
- package/docs/AGENT_GUIDE.md +183 -0
- package/docs/API_REFERENCE.md +761 -2
- package/docs/QUICK_START.md +495 -0
- package/docs/USAGE.md +1719 -714
- package/docs/api/camera-equivalent-focal-length.md +6 -7
- package/docs/api/camera-field-of-view.md +16 -8
- package/docs/api/camera-lens-projection.md +246 -0
- package/docs/api/camera-projected-object-size.md +6 -5
- package/docs/api/capture-capture-export-metadata.md +10 -10
- package/docs/api/capture-dng-import.md +134 -0
- package/docs/api/capture-environment-raw-producer.md +17 -11
- package/docs/api/capture-export-jpeg.md +16 -0
- package/docs/api/capture-focus-control.md +25 -47
- package/docs/api/capture-linear-encoding.md +21 -12
- package/docs/api/capture-lossless-jpeg.md +49 -0
- package/docs/api/capture-native-environment-optical-stage.md +75 -0
- package/docs/api/capture-native-environment-raw.md +161 -4
- package/docs/api/capture-native-raw-development.md +69 -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 +2213 -8
- package/docs/api/exposure-exposure-duration-control.md +9 -9
- package/docs/api/exposure-exposure-mode-resolver.md +35 -31
- package/docs/api/exposure-exposure.md +10 -10
- package/docs/api/exposure-flash-ttl.md +182 -0
- package/docs/api/exposure-flash.md +183 -28
- package/docs/api/exposure-metering-scene-radiance.md +11 -10
- package/docs/api/exposure-metering-target.md +9 -8
- package/docs/api/exposure-metering-temporal.md +8 -8
- package/docs/api/exposure-metering.md +69 -9
- package/docs/api/exposure-program-line.md +6 -5
- package/docs/api/facade-chart-radiance-batch.md +96 -0
- package/docs/api/facade-chart-scenes.md +240 -0
- package/docs/api/facade-scene-radiance.md +122 -0
- package/docs/api/facade-simulate-capture.md +324 -0
- package/docs/api/gpu-image-kernel-accelerator.md +157 -0
- package/docs/api/gpu-image-kernel-execution.md +152 -0
- package/docs/api/motion-camera-rotation.md +43 -26
- package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
- package/docs/api/motion-capture-rotation-trajectory.md +15 -15
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
- package/docs/api/motion-extended-object-projection.md +10 -8
- package/docs/api/motion-projected-motion.md +8 -8
- package/docs/api/motion-temporal-exposure-sum.md +98 -0
- package/docs/api/motion-video-sequence.md +159 -0
- package/docs/api/optics-aperture.md +8 -8
- package/docs/api/optics-atmospheric-haze.md +104 -0
- package/docs/api/optics-brown-conrady-distortion.md +123 -0
- package/docs/api/optics-circle-of-confusion.md +5 -4
- package/docs/api/optics-complex-pupil-psf.md +57 -16
- package/docs/api/optics-depth-of-field.md +12 -6
- package/docs/api/optics-diffraction.md +8 -7
- package/docs/api/optics-focus-breathing.md +104 -16
- package/docs/api/optics-focus-state.md +9 -10
- package/docs/api/optics-front-of-lens-filter.md +72 -14
- package/docs/api/optics-illumination-vignetting.md +10 -10
- package/docs/api/optics-irradiance-convolution.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
- package/docs/api/optics-lens-psf-kernels.md +72 -0
- package/docs/api/optics-lens-psf-profile.md +48 -26
- package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
- package/docs/api/optics-polygon-diffraction.md +78 -13
- package/docs/api/optics-profile-contract.md +4 -4
- package/docs/api/optics-psf-foundation.md +12 -12
- package/docs/api/optics-pupil-vignetting.md +132 -0
- package/docs/api/optics-radial-distortion.md +12 -12
- package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
- package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
- package/docs/api/optics-sensor-aperture-rays.md +3 -2
- package/docs/api/optics-sensor-environment-query.md +52 -9
- package/docs/api/optics-sensor-psf-quadrature.md +13 -10
- package/docs/api/optics-stray-light.md +12 -11
- package/docs/api/optics-thin-lens.md +4 -3
- package/docs/api/optics-zernike-wavefront.md +229 -0
- package/docs/api/output-capture-corrected-sdr.md +10 -7
- package/docs/api/output-capture-geometry.md +35 -36
- package/docs/api/output-capture-sdr.md +4 -4
- package/docs/api/output-crop.md +7 -4
- package/docs/api/output-geometric-transforms.md +65 -19
- package/docs/api/output-lens-corrections.md +17 -15
- package/docs/api/output-native-capture-sdr.md +26 -13
- package/docs/api/output-png-encoder.md +105 -0
- package/docs/api/output-print-contrast-reference.md +8 -8
- package/docs/api/output-print-detail.md +14 -14
- package/docs/api/output-print-jpeg.md +22 -5
- package/docs/api/output-print-plan.md +18 -18
- package/docs/api/output-print-region-statistics.md +14 -14
- package/docs/api/output-sdr-rendering.md +52 -10
- package/docs/api/output-subject-framing-crop.md +5 -6
- package/docs/api/processing-demosaic.md +120 -0
- package/docs/api/processing-denoise.md +148 -0
- package/docs/api/processing-focus-stacking.md +41 -0
- package/docs/api/processing-hdr.md +113 -0
- package/docs/api/processing-panorama.md +82 -0
- package/docs/api/processing-processing-task.md +107 -0
- package/docs/api/processing-tone-mapping.md +142 -0
- package/docs/api/schema-camera.md +6 -4
- package/docs/api/schema-illumination-spectral.md +10 -11
- package/docs/api/schema-illumination-temporal.md +13 -15
- package/docs/api/schema-illumination.md +4 -4
- package/docs/api/schema-scene-radiance-temporal.md +10 -11
- package/docs/api/schema-scene-radiance.md +18 -17
- package/docs/api/schema-scene.md +9 -9
- package/docs/api/schema-validation.md +1 -1
- package/docs/api/sensor-accumulated-charge.md +12 -20
- package/docs/api/sensor-architecture.md +15 -16
- package/docs/api/sensor-camera-saturation-capacity.md +9 -11
- package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
- package/docs/api/sensor-capture-mode-timing.md +9 -9
- package/docs/api/sensor-capture-mode.md +29 -30
- package/docs/api/sensor-color-sampling.md +31 -33
- package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
- package/docs/api/sensor-dark-current.md +30 -14
- package/docs/api/sensor-environment-photo-signal.md +13 -6
- package/docs/api/sensor-eqe-electron-rate.md +9 -8
- package/docs/api/sensor-eqe-local-exposure.md +18 -17
- package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
- package/docs/api/sensor-exposure-window.md +24 -24
- package/docs/api/sensor-fixed-pattern-noise.md +104 -0
- package/docs/api/sensor-iso-gain.md +63 -0
- package/docs/api/sensor-iso-signal-chain.md +13 -22
- package/docs/api/sensor-local-exposure-binding.md +12 -13
- package/docs/api/sensor-optical-stack.md +37 -40
- package/docs/api/sensor-photon-energy.md +10 -11
- package/docs/api/sensor-physical-charge-capacity.md +8 -13
- package/docs/api/sensor-pixel-pitch.md +1 -1
- package/docs/api/sensor-radiometry-readiness.md +9 -9
- package/docs/api/sensor-raw-readout.md +118 -52
- package/docs/api/sensor-raw-reconstruction.md +97 -20
- package/docs/api/sensor-readout-exposure-linkage.md +120 -24
- package/docs/api/sensor-readout-timing.md +33 -35
- package/docs/api/sensor-response-application-compatibility.md +9 -11
- package/docs/api/sensor-response-operating-range.md +14 -18
- package/docs/api/sensor-responsivity-photocurrent.md +9 -12
- package/docs/api/sensor-sampling-aperture.md +22 -25
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
- package/docs/api/sensor-sensor-geometry.md +23 -24
- package/docs/api/sensor-signal-noise.md +10 -10
- package/docs/api/sensor-spatial-sample-reduction.md +27 -30
- package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
- package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
- package/docs/api/sensor-spectral-coverage.md +5 -5
- package/docs/api/sensor-spectral-quadrature.md +33 -35
- package/docs/api/sensor-spectral-response.md +28 -16
- package/docs/api/sensor-temporal-photo-signal.md +6 -6
- package/docs/api/simulation-poc-simulation.md +17 -16
- package/docs/api/stabilization-camera-shake.md +29 -10
- package/docs/api/stabilization-system.md +25 -21
- package/docs/examples/production-request.json +3821 -2157
- package/docs/examples/simulate-capture.mjs +14 -0
- package/llms.txt +35 -0
- package/package.json +32 -12
- package/AGENTS.md +0 -674
- package/CONTRIBUTING.md +0 -76
- package/DCO +0 -33
- package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
- package/dist/camera/field-of-view.d.ts.map +0 -1
- package/dist/camera/projected-object-size.d.ts.map +0 -1
- package/dist/capture/capture-export-metadata.d.ts.map +0 -1
- package/dist/capture/environment-raw-producer.d.ts.map +0 -1
- package/dist/capture/export-jpeg.d.ts.map +0 -1
- package/dist/capture/export-tiff.d.ts.map +0 -1
- package/dist/capture/focus-control.d.ts.map +0 -1
- package/dist/capture/linear-encoding.d.ts.map +0 -1
- package/dist/capture/native-environment-raw.d.ts.map +0 -1
- package/dist/capture/native-raw-development.d.ts.map +0 -1
- package/dist/capture/native-raw.d.ts.map +0 -1
- package/dist/capture/photographic-export.d.ts.map +0 -1
- package/dist/capture/raw-frame-limits.d.ts.map +0 -1
- package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
- package/dist/capture/release-sequence.d.ts.map +0 -1
- package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
- package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
- package/dist/capture/simulated-capture.d.ts.map +0 -1
- package/dist/color/capture-color.d.ts.map +0 -1
- package/dist/color/sensor-color-development.d.ts.map +0 -1
- package/dist/color/srgb-icc.d.ts.map +0 -1
- package/dist/color/srgb-transfer.d.ts.map +0 -1
- package/dist/color/white-balance.d.ts.map +0 -1
- package/dist/composition/image-formation-plan.d.ts.map +0 -1
- package/dist/composition/plan-consumer.d.ts.map +0 -1
- package/dist/core/calculation-result.d.ts.map +0 -1
- package/dist/core/canonical-json.d.ts.map +0 -1
- package/dist/core/configuration-error.d.ts.map +0 -1
- package/dist/core/evidence-provenance.d.ts.map +0 -1
- package/dist/core/image-formation.d.ts.map +0 -1
- package/dist/core/owned-data.d.ts.map +0 -1
- package/dist/core/record-validation.d.ts.map +0 -1
- package/dist/core/scientific-assurance.d.ts.map +0 -1
- package/dist/core/spectral-composition.d.ts.map +0 -1
- package/dist/core/spectral.d.ts.map +0 -1
- package/dist/core/validation.d.ts.map +0 -1
- package/dist/core/version.d.ts.map +0 -1
- package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
- package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
- package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
- package/dist/equipment/iso-capabilities.d.ts.map +0 -1
- package/dist/equipment/metering-capabilities.d.ts.map +0 -1
- package/dist/equipment/release-capabilities.d.ts.map +0 -1
- package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
- package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
- package/dist/exposure/exposure.d.ts.map +0 -1
- package/dist/exposure/flash.d.ts.map +0 -1
- package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
- package/dist/exposure/metering-target.d.ts.map +0 -1
- package/dist/exposure/metering-temporal.d.ts.map +0 -1
- package/dist/exposure/metering.d.ts.map +0 -1
- package/dist/exposure/program-line.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/motion/camera-rotation.d.ts.map +0 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/extended-object-projection.d.ts.map +0 -1
- package/dist/motion/projected-motion.d.ts.map +0 -1
- package/dist/optics/aperture.d.ts.map +0 -1
- package/dist/optics/circle-of-confusion.d.ts.map +0 -1
- package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
- package/dist/optics/depth-of-field.d.ts.map +0 -1
- package/dist/optics/diffraction.d.ts.map +0 -1
- package/dist/optics/focus-breathing.d.ts.map +0 -1
- package/dist/optics/focus-state.d.ts.map +0 -1
- package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
- package/dist/optics/illumination-vignetting.d.ts.map +0 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
- package/dist/optics/lens-psf-profile.d.ts.map +0 -1
- package/dist/optics/polygon-diffraction.d.ts.map +0 -1
- package/dist/optics/profile-contract.d.ts.map +0 -1
- package/dist/optics/psf-foundation.d.ts.map +0 -1
- package/dist/optics/radial-distortion.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
- package/dist/optics/sensor-environment-query.d.ts.map +0 -1
- package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-psf-support.d.ts.map +0 -1
- package/dist/optics/stray-light.d.ts.map +0 -1
- package/dist/optics/thin-lens.d.ts.map +0 -1
- package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
- package/dist/output/capture-geometry.d.ts.map +0 -1
- package/dist/output/capture-sdr.d.ts.map +0 -1
- package/dist/output/crop.d.ts.map +0 -1
- package/dist/output/geometric-transforms.d.ts.map +0 -1
- package/dist/output/lens-corrections.d.ts.map +0 -1
- package/dist/output/native-capture-sdr.d.ts.map +0 -1
- package/dist/output/print-contrast-reference.d.ts.map +0 -1
- package/dist/output/print-detail.d.ts.map +0 -1
- package/dist/output/print-jpeg.d.ts.map +0 -1
- package/dist/output/print-plan.d.ts.map +0 -1
- package/dist/output/print-region-statistics.d.ts.map +0 -1
- package/dist/output/sdr-rendering.d.ts.map +0 -1
- package/dist/output/subject-framing-crop.d.ts.map +0 -1
- package/dist/schema/camera.d.ts.map +0 -1
- package/dist/schema/camera.js +0 -3
- package/dist/schema/camera.js.map +0 -1
- package/dist/schema/illumination-spectral.d.ts.map +0 -1
- package/dist/schema/illumination-temporal.d.ts.map +0 -1
- package/dist/schema/illumination.d.ts.map +0 -1
- package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
- package/dist/schema/scene-radiance.d.ts.map +0 -1
- package/dist/schema/scene.d.ts.map +0 -1
- package/dist/schema/scene.js +0 -3
- package/dist/schema/scene.js.map +0 -1
- package/dist/schema/validation.d.ts.map +0 -1
- package/dist/sensor/accumulated-charge.d.ts.map +0 -1
- package/dist/sensor/architecture.d.ts.map +0 -1
- package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
- package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
- package/dist/sensor/capture-mode.d.ts.map +0 -1
- package/dist/sensor/color-sampling.d.ts.map +0 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
- package/dist/sensor/dark-current.d.ts.map +0 -1
- package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
- package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
- package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/exposure-window.d.ts.map +0 -1
- package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
- package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
- package/dist/sensor/optical-stack.d.ts.map +0 -1
- package/dist/sensor/photon-energy.d.ts.map +0 -1
- package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
- package/dist/sensor/pixel-pitch.d.ts.map +0 -1
- package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
- package/dist/sensor/raw-readout.d.ts.map +0 -1
- package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
- package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
- package/dist/sensor/readout-timing.d.ts.map +0 -1
- package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
- package/dist/sensor/response-operating-range.d.ts.map +0 -1
- package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
- package/dist/sensor/sampling-aperture.d.ts.map +0 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/sensor-geometry.d.ts.map +0 -1
- package/dist/sensor/signal-noise.d.ts.map +0 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
- package/dist/sensor/spectral-coverage.d.ts.map +0 -1
- package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
- package/dist/sensor/spectral-response.d.ts.map +0 -1
- package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
- package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
- package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
- package/dist/simulation/poc-simulation.d.ts.map +0 -1
- package/dist/stabilization/camera-shake.d.ts.map +0 -1
- package/dist/stabilization/system.d.ts.map +0 -1
- package/docs/API_STYLE.md +0 -235
- package/docs/ARCHITECTURE.md +0 -356
- package/docs/AUTOMATION_COORDINATION.md +0 -190
- package/docs/CAPTURE_COLOR.md +0 -25
- package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
- package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
- package/docs/CAPTURE_SDR.md +0 -22
- package/docs/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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spectral-response.js","sourceRoot":"","sources":["../../src/sensor/spectral-response.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EACL,iBAAiB,EAElB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EACL,4BAA4B,EAG7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,+BAA+B,EAEhC,MAAM,qBAAqB,CAAC;AAsM7B,SAAS,aAAa,CACpB,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACpB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,qBAAqB,CAC7B,CAAC;IACJ,CAAC;IACD,OAAO,KAAsB,CAAC;AAChC,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACzB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,8BAA8B,CACtC,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CACpB,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EACvB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,2BAA2B,CACnC,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,6BAA6B,CACrC,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACtB,KAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,8CAA8C,CACjD,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CACnC,KAAc,EACd,IAAY;IAEZ,MAAM,QAAQ,GAAG,iBAAiB,CAChC,KAAK,EACL,IAAI,CACL,CAAC;IAEF,IACE,CAAC,QAAQ,CAAC,IAAI,CACZ,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,WAAW;QACf,eAAe;QACjB,KAAK,CAAC,WAAW;YACf,gBAAgB,CACrB,EACD,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,0GAA0G,CAC7G,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE1C,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,aAAa,CAC5B,MAAM,CAAC,QAAQ,EACf,IAAI,GAAG,WAAW,CACnB,CAAC;QACF,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,kDAAkD,CACrD,CAAC;QACJ,CAAC;QACD,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,QAAQ;YACR,KAAK,EAAE,qBAAqB,CAC1B,MAAM,CAAC,KAAK,EACZ,IAAI,GAAG,QAAQ,CAChB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,UAAU,EAAE,qBAAqB,CAC/B,MAAM,CAAC,UAAU,EACjB,IAAI,GAAG,aAAa,CACrB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,mBAAmB,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,YAAY,GAChB,MAAM,CAAC,YAAY,KAAK,SAAS;QAC/B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,aAAa,CACX,MAAM,CAAC,YAAY,EACnB,IAAI,GAAG,eAAe,CACvB,CAAC;IACR,MAAM,+BAA+B,GACnC,MAAM,CAAC,+BAA+B;QACtC,SAAS;QACP,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,aAAa,CACX,MAAM,CAAC,+BAA+B,EACtC,IAAI;YACF,kCAAkC,CACrC,CAAC;IAER,IACE,+BAA+B;QAC7B,SAAS;QACX,CAAC,+BAA+B,GAAG,CAAC;YAClC,+BAA+B,GAAG,EAAE,CAAC,EACvC,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,qEAAqE,CACxE,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAChB,MAAM,CAAC,YAAY,CAAC;IACtB,IACE,YAAY,KAAK,SAAS;QAC1B,YAAY,KAAK,aAAa;QAC9B,YAAY,KAAK,aAAa,EAC9B,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,2BAA2B,CACnC,CAAC;IACJ,CAAC;IAED,IACE,YAAY,KAAK,SAAS;QAC1B,+BAA+B;YAC7B,SAAS;QACX,YAAY,KAAK,SAAS,EAC1B,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,iDAAiD,CACpD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,CAAC,YAAY,KAAK,SAAS;YAC5B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;QACrB,GAAG,CAAC,+BAA+B;YACnC,SAAS;YACP,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,+BAA+B;aAChC,CAAC;QACN,GAAG,CAAC,YAAY,KAAK,SAAS;YAC5B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,MAAqB,EACrB,IAAY;IAEZ,IAAI,MAAM,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,+BAA+B,CAClC,CAAC;IACJ,CAAC;IACD,IACE,MAAM,CAAC,aAAa;QACpB,kBAAkB,EAClB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,4CAA4C,CAC/C,CAAC;IACJ,CAAC;IACD,IACE,MAAM,CAAC,oBAAoB;QAC3B,aAAa,EACb,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,8CAA8C,CACjD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,cAAc,EAAE,IAAI;QACpB,eAAe,EACb,4BAA4B,CAC1B,MAAM,CAAC,eAAe,EACtB,IAAI,GAAG,kBAAkB,CAC1B;QACH,aAAa,EAAE,kBAAkB;QACjC,oBAAoB,EAAE,aAAa;QACnC,QAAQ,EACN,4BAA4B,CAC1B,MAAM,CAAC,QAAQ,EACf,IAAI,GAAG,WAAW,CACnB;KACJ,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAc,EACd,IAAY;IAEZ,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,MAAM,GAAG,CAAC,EAChB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,gDAAgD,CACnD,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB,GACpB,MAAM,CAAC,iBAAiB,CAAC;IAE3B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,aAAa,CAC1B,KAAK,EACL,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CACzB,CAAC;QACF,MAAM,oBAAoB,GACxB,qBAAqB,CACnB,MAAM,CAAC,oBAAoB,EAC3B,IAAI;YACF,GAAG;YACH,KAAK;YACL,wBAAwB,CAC3B,CAAC;QAEJ,IACE,oBAAoB;YACpB,kBAAkB,EAClB,CAAC;YACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,2CAA2C,CAC9C,CAAC;QACJ,CAAC;QACD,kBAAkB;YAChB,oBAAoB,CAAC;QAEvB,OAAO;YACL,oBAAoB;YACpB,KAAK,EAAE,eAAe,CACpB,MAAM,CAAC,KAAK,EACZ,IAAI;gBACF,GAAG;gBACH,KAAK;gBACL,SAAS,CACZ;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAc,EACd,IAAY;IAEZ,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,MAAM,GAAG,CAAC,EAChB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,gDAAgD,CACnD,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB,GACpB,MAAM,CAAC,iBAAiB,CAAC;IAE3B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,aAAa,CAC1B,KAAK,EACL,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CACzB,CAAC;QACF,MAAM,oBAAoB,GACxB,qBAAqB,CACnB,MAAM,CAAC,oBAAoB,EAC3B,IAAI;YACF,GAAG;YACH,KAAK;YACL,wBAAwB,CAC3B,CAAC;QAEJ,IACE,oBAAoB;YACpB,kBAAkB,EAClB,CAAC;YACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,2CAA2C,CAC9C,CAAC;QACJ,CAAC;QACD,kBAAkB;YAChB,oBAAoB,CAAC;QAEvB,MAAM,cAAc,GAClB,aAAa,CACX,MAAM,CAAC,cAAc,EACrB,IAAI;YACF,GAAG;YACH,KAAK;YACL,kBAAkB,CACrB,CAAC;QACJ,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,GAAG;gBACH,KAAK;gBACL,yDAAyD,CAC5D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,oBAAoB;YACpB,cAAc;SACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAG,aAAa,CAC1B,KAAK,EACL,IAAI,CACL,CAAC;IACF,OAAO;QACL,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;QAC/B,OAAO,EAAE,oBAAoB,CAC3B,MAAM,CAAC,OAAO,EACd,IAAI,GAAG,UAAU,CAClB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAG,aAAa,CAC1B,KAAK,EACL,IAAI,CACL,CAAC;IACF,OAAO;QACL,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;QAC/B,OAAO,EAAE,wBAAwB,CAC/B,MAAM,CAAC,OAAO,EACd,IAAI,GAAG,UAAU,CAClB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAc,EACd,IAAY;IAEZ,IACE,KAAK,KAAK,YAAY;QACtB,KAAK,KAAK,eAAe,EACzB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,cAAc,CACtB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iCAAiC,CACxC,gBACwC,EACxC,MAGG,EACH,IAAY;IAEZ,IACE,gBAAgB,KAAK,YAAY;QACjC,MAAM,CAAC,IAAI,CACT,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,eAAe;YACrB,aAAa,CAChB,EACD,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,uEAAuE,CAC1E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,MAGG;IAKH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,GAAG,MAAM,CAAC,GAAG,CACX,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,OAAO,CAAC,CAAC,CAAE;SACd,oBAAoB,CAC1B,CACF,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,GAAG,MAAM,CAAC,GAAG,CACX,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,OAAO,CACX,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CACxB,CAAC,oBAAoB,CAC1B,CACF,CAAC;IAEF,IAAI,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,yBAAyB,CACjC,qGAAqG,CACtG,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAG,aAAa,CAC1B,KAAK,EACL,IAAI,CACL,CAAC;IACF,MAAM,SAAS,GACb,qBAAqB,CACnB,MAAM,CAAC,SAAS,EAChB,IAAI,GAAG,YAAY,CACpB,CAAC;IACJ,MAAM,gBAAgB,GACpB,qBAAqB,CACnB,MAAM,CAAC,gBAAgB,EACvB,IAAI,GAAG,mBAAmB,CAC3B,CAAC;IACJ,MAAM,WAAW,GACf,gBAAgB,CACd,MAAM,CAAC,WAAW,EAClB,IAAI,GAAG,cAAc,CACtB,CAAC;IACJ,MAAM,QAAQ,GACZ,iBAAiB,CACf,MAAM,CAAC,QAAQ,EACf,IAAI,GAAG,WAAW,CACnB,CAAC;IACJ,MAAM,mBAAmB,GACvB,MAAM,CAAC,mBAAmB;QAC1B,SAAS;QACP,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,wBAAwB,CACtB,MAAM,CAAC,mBAAmB,EAC1B,IAAI,GAAG,sBAAsB,CAC9B,CAAC;IAER,IACE,MAAM,CAAC,mBAAmB;QAC1B,aAAa,EACb,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,6CAA6C,CAChD,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG;QACb,SAAS;QACT,gBAAgB;QAChB,WAAW;QACX,QAAQ;QACR,GAAG,CAAC,mBAAmB,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC;QAC5B,mBAAmB,EACjB,aAAsB;KACzB,CAAC;IAEF,IACE,MAAM,CAAC,IAAI;QACX,uCAAuC,EACvC,CAAC;QACD,IACE,MAAM,CAAC,aAAa;YAClB,0CAA0C;YAC5C,MAAM,CAAC,aAAa;gBAClB,oDAAoD,EACtD,CAAC;YACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,4BAA4B,CAC/B,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,kBAAkB,CAC9B,MAAM,CAAC,yBAAyB,EAChC,IAAI;YACF,4BAA4B,CAC/B,CAAC;QACF,iCAAiC,CAC/B,gBAAgB,EAChB,CAAC,KAAK,CAAC,EACP,IAAI,CACL,CAAC;QACF,OAAO;YACL,GAAG,MAAM;YACT,IAAI,EACF,uCAAuC;YACzC,aAAa,EACX,MAAM,CAAC,aAAa;YACtB,yBAAyB,EACvB,KAAK;SACR,CAAC;IACJ,CAAC;IAED,IACE,MAAM,CAAC,IAAI;QACX,iCAAiC,EACjC,CAAC;QACD,IACE,MAAM,CAAC,aAAa;YAClB,0CAA0C;YAC5C,MAAM,CAAC,aAAa;gBAClB,oDAAoD,EACtD,CAAC;YACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,4BAA4B,CAC/B,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GACT,sBAAsB,CACpB,MAAM,CAAC,oBAAoB,EAC3B,IAAI;YACF,uBAAuB,CAC1B,CAAC;QACJ,iCAAiC,CAC/B,gBAAgB,EAChB,CAAC,KAAK,CAAC,EACP,IAAI,CACL,CAAC;QACF,OAAO;YACL,GAAG,MAAM;YACT,IAAI,EACF,iCAAiC;YACnC,aAAa,EACX,MAAM,CAAC,aAAa;YACtB,oBAAoB,EAAE,KAAK;SAC5B,CAAC;IACJ,CAAC;IAED,IACE,MAAM,CAAC,IAAI;QACX,2CAA2C,EAC3C,CAAC;QACD,IACE,MAAM,CAAC,aAAa;YACpB,iDAAiD,EACjD,CAAC;YACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,4BAA4B,CAC/B,CAAC;QACJ,CAAC;QACD,IACE,MAAM,CAAC,eAAe;YACtB,UAAU,EACV,CAAC;YACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,sCAAsC,CACzC,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GACf,kBAAkB,CAChB,MAAM,CAAC,0BAA0B,EACjC,IAAI;YACF,6BAA6B,CAChC,CAAC;QACJ,MAAM,aAAa,GACjB,kBAAkB,CAChB,MAAM,CAAC,iCAAiC,EACxC,IAAI;YACF,oCAAoC,CACvC,CAAC;QAEJ,IACE,WAAW,CAAC,eAAe;YAC3B,aAAa,CAAC,eAAe,EAC7B,CAAC;YACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,uDAAuD,CAC1D,CAAC;QACJ,CAAC;QAED,WAAW,CAAC;YACV,WAAW;YACX,aAAa;SACd,CAAC,CAAC;QACH,iCAAiC,CAC/B,gBAAgB,EAChB;YACE,WAAW;YACX,aAAa;SACd,EACD,IAAI,CACL,CAAC;QAEF,OAAO;YACL,GAAG,MAAM;YACT,IAAI,EACF,2CAA2C;YAC7C,aAAa,EACX,iDAAiD;YACnD,eAAe,EAAE,UAAU;YAC3B,0BAA0B,EACxB,WAAW;YACb,iCAAiC,EAC/B,aAAa;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,mBAAmB,CAC3B,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kCAAkC,CAChD,KAAc;IAEd,MAAM,OAAO,GAAG,aAAa,CAC3B,KAAK,EACL,wBAAwB,CACzB,CAAC;IAEF,IACE,OAAO,CAAC,aAAa,KAAK,OAAO,EACjC,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,uDAAuD,CACxD,CAAC;IACJ,CAAC;IAED,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAC7B,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ,CAAC,GAAG,CAClB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,oBAAoB,CAClB,KAAK,EACL,kCAAkC;QAChC,KAAK;QACL,GAAG,CACN,CACJ,CAAC;IAEJ,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAC7B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAC3B,CAAC;IACF,IACE,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI;QACxB,UAAU,CAAC,MAAM,EACjB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,qBAAqB,CAC9B,OAAO,CAAC,SAAS,EACjB,kCAAkC,CACnC;QACD,sBAAsB,EACpB,qBAAqB,CACnB,OAAO,CAAC,sBAAsB,EAC9B,+CAA+C,CAChD;QACH,QAAQ,EAAE,iBAAiB,CACzB,OAAO,CAAC,QAAQ,EAChB,iCAAiC,CAClC;QACD,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,0CAA0C,CACxD,QAAuC;IAEvC,OAAO;QACL,MAAM,EACJ,sDAAsD;QACxD,aAAa,EACX,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,OAAmC;IAEnC,IACE,OAAO,CAAC,MAAM,CAAC,IAAI;QACnB,SAAS,EACT,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,4IAA4I,CAC7I,CAAC;IACJ,CAAC;IAED,IACE,OAAO,CAAC,MAAM,CAAC,IAAI;QACnB,YAAY,EACZ,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,OAAO;QACL,GAAG,IAAI,GAAG,CACR,OAAO,CAAC,MAAM,CAAC,cAAc,CAC9B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAA4B,EAC5B,oBAA4B;IAK5B,OAAO,gBAAgB,CACrB,KAAK,CAAC,OAAO,EACb,oBAAoB,EACpB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CACzB,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAgC,EAChC,oBAA4B;IAK5B,OAAO,gBAAgB,CACrB,KAAK,CAAC,OAAO,EACb,oBAAoB,EACpB,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,cAAc,CACxB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAGvB,OAAqB,EACrB,oBAA4B,EAC5B,OAA8B;IAK9B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IAC1B,MAAM,IAAI,GACR,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IAE/B,IACE,oBAAoB;QAClB,KAAK,CAAC,oBAAoB;QAC5B,oBAAoB;YAClB,IAAI,CAAC,oBAAoB,EAC3B,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,iHAAiH,CAClH,CAAC;IACJ,CAAC;IAED,KACE,IAAI,KAAK,GAAG,CAAC,EACb,KAAK,GAAG,OAAO,CAAC,MAAM,EACtB,KAAK,IAAI,CAAC,EACV,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAE,CAAC;QAC/B,IACE,oBAAoB;YACpB,MAAM,CAAC,oBAAoB,EAC3B,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;gBACtB,iBAAiB,EAAE,KAAK;aACzB,CAAC;QACJ,CAAC;QAED,IACE,oBAAoB;YACpB,MAAM,CAAC,oBAAoB,EAC3B,CAAC;YACD,MAAM,QAAQ,GACZ,OAAO,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;YACtB,MAAM,KAAK,GACT,CAAC,oBAAoB;gBACnB,QAAQ,CAAC,oBAAoB,CAAC;gBAChC,CAAC,MAAM,CAAC,oBAAoB;oBAC1B,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YACnC,OAAO;gBACL,KAAK,EACH,OAAO,CAAC,QAAQ,CAAC;oBACjB,KAAK;wBACH,CAAC,OAAO,CAAC,MAAM,CAAC;4BACd,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACxB,iBAAiB,EAAE,IAAI;aACxB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC;QACpB,iBAAiB,EAAE,KAAK;KACzB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,+CAA+C,CAC7D,KACgD;IAEhD,MAAM,YAAY,GAChB,KAAK,CAAC,oBAAoB,CAAC;IAC7B,MAAM,eAAe,GACnB,KAAK,CAAC,uBAAuB,CAAC;IAEhC,IACE,eAAe;SACZ,sBAAsB;QACzB,YAAY,CAAC,SAAS,EACtB,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GACnB,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACnC,MAAM,QAAQ,GACZ,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IAE3B,KACE,MAAM,QAAQ,IACd,eAAe,CAAC,QAAQ,EACxB,CAAC;QACD,IACE,CAAC,QAAQ,CAAC,GAAG,CACX,QAAQ,CAAC,SAAS,CACnB,EACD,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,4GAA4G,CAC7G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IACE,OAAO,KAAK,CAAC,SAAS;QACpB,QAAQ;QACV,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM;YAC3B,CAAC,EACH,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,uCAAuC,CACxC,CAAC;IACJ,CAAC;IACD,IACE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAC9B,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,iEAAiE,CAClE,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GACZ,eAAe,CAAC,QAAQ,CAAC,IAAI,CAC3B,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,SAAS;QACf,KAAK,CAAC,SAAS,CAClB,CAAC;IACJ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,2BAA2B,CACnC,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,IACE,OAAO,KAAK,CAAC,oBAAoB;QAC/B,QAAQ;QACV,CAAC,MAAM,CAAC,QAAQ,CACd,KAAK,CAAC,oBAAoB,CAC3B;QACD,KAAK,CAAC,oBAAoB,IAAI,CAAC,EAC/B,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,IACE,KAAK,CAAC,eAAe;QACnB,KAAK;QACP,KAAK,CAAC,eAAe;YACnB,QAAQ;QACV,KAAK,CAAC,eAAe;YACnB,aAAa,EACf,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,6BAA6B,CAC9B,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAIJ,EAAE,CAAC;IAEX,IAAI,aACiC,CAAC;IACtC,IAAI,iBAA0B,CAAC;IAC/B,IAAI,eACqB,CAAC;IAE1B,IACE,QAAQ,CAAC,IAAI;QACb,uCAAuC,EACvC,CAAC;QACD,MAAM,KAAK,GACT,QAAQ,CAAC,yBAAyB,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,eAAe;YACb,KAAK,CAAC,eAAe,CAAC;QAExB,IACE,KAAK,CAAC,eAAe;YACrB,eAAe,EACf,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,sJAAsJ,CACvJ,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GACZ,mBAAmB,CACjB,KAAK,EACL,KAAK,CAAC,oBAAoB,CAC3B,CAAC;QACJ,iBAAiB;YACf,QAAQ,CAAC,iBAAiB,CAAC;QAC7B,aAAa,GAAG;YACd,IAAI,EACF,uCAAuC;YACzC,yBAAyB,EACvB,QAAQ,CAAC,KAAK;YAChB,WAAW,EACT,2BAA2B;SAC9B,CAAC;IACJ,CAAC;SAAM,IACL,QAAQ,CAAC,IAAI;QACb,iCAAiC,EACjC,CAAC;QACD,MAAM,KAAK,GACT,QAAQ,CAAC,oBAAoB,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,eAAe;YACb,KAAK,CAAC,eAAe,CAAC;QAExB,IACE,KAAK,CAAC,eAAe;YACrB,eAAe,EACf,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,sJAAsJ,CACvJ,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GACZ,uBAAuB,CACrB,KAAK,EACL,KAAK,CAAC,oBAAoB,CAC3B,CAAC;QACJ,iBAAiB;YACf,QAAQ,CAAC,iBAAiB,CAAC;QAC7B,aAAa,GAAG;YACd,IAAI,EACF,iCAAiC;YACnC,cAAc,EACZ,QAAQ,CAAC,KAAK;YAChB,WAAW,EACT,2BAA2B;SAC9B,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,WAAW,GACf,QAAQ;aACL,0BAA0B,CAAC;QAChC,MAAM,aAAa,GACjB,QAAQ;aACL,iCAAiC,CAAC;QACvC,MAAM,CAAC,IAAI,CACT,WAAW,EACX,aAAa,CACd,CAAC;QACF,eAAe;YACb,WAAW,CAAC,eAAe,CAAC;QAE9B,IACE,KAAK,CAAC,eAAe;YACrB,eAAe,EACf,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,6EAA6E,CAC9E,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GACV,mBAAmB,CACjB,WAAW,EACX,KAAK,CAAC,oBAAoB,CAC3B,CAAC;QACJ,MAAM,QAAQ,GACZ,mBAAmB,CACjB,aAAa,EACb,KAAK,CAAC,oBAAoB,CAC3B,CAAC;QAEJ,iBAAiB;YACf,MAAM,CAAC,iBAAiB;gBACxB,QAAQ,CAAC,iBAAiB,CAAC;QAE7B,aAAa,GAAG;YACd,IAAI,EACF,uCAAuC;YACzC,yBAAyB,EACvB,MAAM,CAAC,KAAK;gBACZ,QAAQ,CAAC,KAAK;YAChB,WAAW,EACT,iDAAiD;YACnD,0BAA0B,EACxB,MAAM,CAAC,KAAK;YACd,iCAAiC,EAC/B,QAAQ,CAAC,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAElC,OAAO,gBAAgB,CACrB;QACE,SAAS,EACP,eAAe,CAAC,SAAS;QAC3B,sBAAsB,EACpB,eAAe;aACZ,sBAAsB;QAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,kBAAkB,EAChB,QAAQ,CAAC,IAAI;QACf,aAAa,EACX,QAAQ,CAAC,aAAa;QACxB,gBAAgB,EACd,QAAQ,CAAC,gBAAgB;QAC3B,WAAW,EACT,QAAQ,CAAC,WAAW;QACtB,oBAAoB,EAClB,KAAK,CAAC,oBAAoB;QAC5B,eAAe;QACf,uBAAuB,EACrB,eAAe;YACf,aAAa;QACf,iCAAiC,EAC/B,KAAK;QACP,aAAa,EACX,kBAAkB;QACpB,iBAAiB;QACjB,oBAAoB,EAClB,aAAa;QACf,QAAQ,EAAE,aAAa;QACvB,GAAG,CAAC,QAAQ,CAAC,mBAAmB;YAChC,SAAS;YACP,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,mBAAmB,EACjB,QAAQ,CAAC,mBAAmB;aAC/B,CAAC;QACN,0BAA0B,EACxB,KAAK;QACP,2BAA2B,EACzB,KAAK;QACP,4BAA4B,EAC1B,KAAK;QACP,6BAA6B,EAC3B,KAAK;QACP,4BAA4B,EAC1B,KAAK;QACP,8BAA8B,EAC5B,KAAK;QACP,iCAAiC,EAC/B,KAAK;QACP,iBAAiB,EAAE,KAAK;QACxB,mBAAmB,EAAE,KAAK;QAC1B,oBAAoB,EAAE,KAAK;QAC3B,iBAAiB,EAAE;YACjB,OAAO,EACL,eAAe,CAAC,QAAQ;YAC1B,OAAO,EAAE,QAAQ,CAAC,QAAQ;YAC1B,MAAM,EAAE,MAAM,CAAC,GAAG,CAChB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAC1B;SACF;KACF,EACD,iCAAiC,EACjC,OAAO,EACP;QACE,2HAA2H;QAC3H,+IAA+I;QAC/I,8EAA8E;QAC9E,uJAAuJ;QACvJ,0HAA0H;QAC1H,0GAA0G;QAC1G,+HAA+H;KAChI,CACF,CAAC;AACJ,CAAC;AAGD;;;;;;GAMG;AACH,MAAM,UAAU,yCAAyC,CACvD,KACgD;IAEhD,MAAM,YAAY,GAChB,+BAA+B,CAC7B,KAAK,CAAC,oBAAoB,CAC3B,CAAC;IACJ,MAAM,eAAe,GACnB,kCAAkC,CAChC,KAAK,CAAC,uBAAuB,CAC9B,CAAC;IAEJ,OAAO,+CAA+C,CAAC;QACrD,GAAG,KAAK;QACR,oBAAoB,EAClB,YAAY;QACd,uBAAuB,EACrB,eAAe;KAClB,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"spectral-response.js","sourceRoot":"","sources":["../../src/sensor/spectral-response.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Sensor spectral response: how strongly each sensor channel responds at each wavelength, as an EQE\n * (external quantum efficiency) curve, an A/W responsivity curve, or a colour-filter curve times a\n * detector EQE curve.\n *\n * Responses are never guessed from channel names (such as \"red\") or the CFA type, and are never\n * extrapolated outside the sampled range. A numeric curve can be embedded only with evidence that the\n * data is reusable or owned by Photivra; a public reference without reuse permission can support\n * metadata but does not by itself allow copying its numbers into the engine.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport {\n calculatedResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport { stringifyCanonicalJson } from \"../core/canonical-json.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport {\n parseSpectralWavelengthBasis,\n type SpectralWavelengthBasis,\n type SpectralWavelengthSample\n} from \"../core/spectral.js\";\nexport type { SpectralWavelengthBasis } from \"../core/spectral.js\";\nimport {\n parseSensorColorSamplingProfile,\n type SensorColorSamplingProfile\n} from \"./color-sampling.js\";\nimport { requireInputKeys, rejectUnknownFields, rejectUnknownVariantFields, UNCERTAINTY_VARIANT_FIELDS } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport type SensorSpectralResponseScientificStatus =\n | \"calibrated\"\n | \"approximation\";\n\nexport type SensorSpectralResponseUncertainty =\n | {\n kind: \"relative\";\n fraction: number;\n basis: string;\n }\n | {\n kind: \"not-quantified\";\n limitation: string;\n };\n\nexport interface SensorSpectralReferenceConditions {\n temperatureC?: number;\n incidenceAngleDegreesFromNormal?: number;\n polarization?:\n | \"unpolarized\"\n | \"unspecified\";\n}\n\nexport interface SpectralFractionSample\n extends SpectralWavelengthSample {\n value: number;\n}\n\nexport interface SpectralResponsivitySample\n extends SpectralWavelengthSample {\n amperesPerWatt: number;\n}\n\ninterface SpectralCurveBase {\n wavelengthUnit: \"nm\";\n wavelengthBasis: SpectralWavelengthBasis;\n interpolation: \"piecewise-linear\";\n outsideRangeBehavior: \"fail-closed\";\n evidence: readonly EvidenceProvenance[];\n}\n\nexport interface SpectralFractionCurve\n extends SpectralCurveBase {\n samples: readonly SpectralFractionSample[];\n}\n\nexport interface SpectralResponsivityCurve\n extends SpectralCurveBase {\n samples: readonly SpectralResponsivitySample[];\n}\n\ninterface SensorSpectralChannelResponseBase {\n channelId: string;\n scientificStatus:\n SensorSpectralResponseScientificStatus;\n uncertainty:\n SensorSpectralResponseUncertainty;\n evidence: readonly EvidenceProvenance[];\n referenceConditions?:\n SensorSpectralReferenceConditions;\n conditionDependence:\n \"not-modeled\";\n}\n\nexport type EffectiveSensorResponseScope =\n | \"site-incident-effective-channel-response\"\n | \"sensor-package-incident-effective-channel-response\";\n\nexport type SensorSpectralChannelResponse =\n | (SensorSpectralChannelResponseBase & {\n kind:\n \"effective-external-quantum-efficiency\";\n responseScope:\n EffectiveSensorResponseScope;\n externalQuantumEfficiency:\n SpectralFractionCurve;\n })\n | (SensorSpectralChannelResponseBase & {\n kind:\n \"effective-spectral-responsivity\";\n responseScope:\n EffectiveSensorResponseScope;\n spectralResponsivity:\n SpectralResponsivityCurve;\n })\n | (SensorSpectralChannelResponseBase & {\n kind:\n \"separable-channel-filter-and-detector-eqe\";\n responseScope:\n \"site-incident-channel-filter-times-detector-eqe\";\n combinationRule: \"multiply\";\n channelFilterTransmittance:\n SpectralFractionCurve;\n detectorExternalQuantumEfficiency:\n SpectralFractionCurve;\n });\n\n/**\n * Current channel-binding format. v2 (package 2.0.0) serializes the parsed channel with sorted keys.\n * v1 (package 1.5.0 and earlier) used the unparsed channel's JSON in insertion order; it is rejected\n * with an explicit version error instead of being compared.\n */\nexport const SENSOR_SPECTRAL_RESPONSE_CHANNEL_BINDING_FORMAT =\n \"photivra-spectral-channel-response-canonical-json-v2\" as const;\n\nexport interface SensorSpectralResponseChannelBinding {\n format:\n typeof SENSOR_SPECTRAL_RESPONSE_CHANNEL_BINDING_FORMAT;\n canonicalJson: string;\n}\n\n/**\n * Versioned response data for the channels of one exact colour-sampling profile.\n * Each channel declares an effective EQE, an effective A/W response, or separate\n * filter and detector EQE curves, with its sampled range, interpolation and an\n * explicit wavelength basis (air or vacuum). Reference conditions, evidence and\n * uncertainty each keep their own validity. Names such as red, green or blue\n * never fill in a missing curve or justify extrapolation.\n */\nexport interface SensorSpectralResponseProfile {\n schemaVersion: \"0.1.0\";\n profileId: string;\n colorSamplingProfileId: string;\n evidence: readonly EvidenceProvenance[];\n channels:\n readonly SensorSpectralChannelResponse[];\n}\n\nexport interface ResolveSensorSpectralResponseAtWavelengthInput {\n colorSamplingProfile:\n SensorColorSamplingProfile;\n spectralResponseProfile:\n SensorSpectralResponseProfile;\n channelId: string;\n wavelengthNanometers: number;\n wavelengthBasis: SpectralWavelengthBasis;\n}\n\nexport type ResolvedSensorSpectralResponseValue =\n | {\n kind:\n \"effective-external-quantum-efficiency\";\n externalQuantumEfficiency: number;\n composition:\n | \"direct-effective-response\"\n | \"channel-filter-transmittance-times-detector-eqe\";\n channelFilterTransmittance?: number;\n detectorExternalQuantumEfficiency?: number;\n }\n | {\n kind:\n \"effective-spectral-responsivity\";\n amperesPerWatt: number;\n composition:\n \"direct-effective-response\";\n };\n\nexport interface ResolvedSensorSpectralResponse {\n profileId: string;\n colorSamplingProfileId: string;\n channelId: string;\n sourceResponseKind:\n SensorSpectralChannelResponse[\"kind\"];\n responseScope:\n SensorSpectralChannelResponse[\"responseScope\"];\n scientificStatus:\n SensorSpectralResponseScientificStatus;\n uncertainty:\n SensorSpectralResponseUncertainty;\n wavelengthNanometers: number;\n wavelengthBasis: SpectralWavelengthBasis;\n wavelengthBasisResolved: boolean;\n declaredWavelengthRangeNanometers: {\n minimum: number;\n maximum: number;\n };\n interpolation:\n \"piecewise-linear\";\n interpolationUsed: boolean;\n outsideRangeBehavior:\n \"fail-closed\";\n response:\n ResolvedSensorSpectralResponseValue;\n referenceConditions?:\n SensorSpectralReferenceConditions;\n conditionDependenceModeled: false;\n fieldAngleDependenceModeled: false;\n temperatureDependenceModeled: false;\n polarizationDependenceModeled: false;\n spectralIrradianceIntegrated: false;\n wavelengthIntegrationPerformed: false;\n qeResponsivityConversionPerformed: false;\n photonsCalculated: false;\n electronsCalculated: false;\n rawCodeValueProduced: false;\n componentEvidence: {\n profile: readonly EvidenceProvenance[];\n channel: readonly EvidenceProvenance[];\n curves:\n readonly (readonly EvidenceProvenance[])[];\n };\n}\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value;\n}\n\nfunction requireFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a finite number.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n const number = requireFinite(value, path);\n if (number <= 0) {\n throw new InvalidConfigurationError(\n path + \" must be greater than zero.\"\n );\n }\n return number;\n}\n\nfunction requireFraction(\n value: unknown,\n path: string\n): number {\n const number = requireFinite(value, path);\n if (number < 0 || number > 1) {\n throw new InvalidConfigurationError(\n path +\n \" must be a finite fraction from 0 through 1.\"\n );\n }\n return number;\n}\n\nfunction requireReusableCurveEvidence(\n value: unknown,\n path: string\n): readonly EvidenceProvenance[] {\n const evidence = parseEvidenceList(\n value,\n path\n );\n\n if (\n !evidence.some(\n (entry) =>\n entry.reuseStatus ===\n \"reusable-data\" ||\n entry.reuseStatus ===\n \"photivra-owned\"\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must contain reusable-data or photivra-owned evidence because the curve contains reusable numeric data.\"\n );\n }\n\n return evidence;\n}\n\nfunction parseUncertainty(\n value: unknown,\n path: string\n): SensorSpectralResponseUncertainty {\n const record = requireRecord(value, path, null);\n rejectUnknownVariantFields(record, \"kind\", UNCERTAINTY_VARIANT_FIELDS, path);\n\n if (record.kind === \"relative\") {\n const fraction = requireFinite(\n record.fraction,\n path + \".fraction\"\n );\n if (fraction < 0) {\n throw new InvalidConfigurationError(\n path +\n \".fraction must be greater than or equal to zero.\"\n );\n }\n return {\n kind: \"relative\",\n fraction,\n basis: requireNonEmptyString(\n record.basis,\n path + \".basis\"\n )\n };\n }\n\n if (record.kind === \"not-quantified\") {\n return {\n kind: \"not-quantified\",\n limitation: requireNonEmptyString(\n record.limitation,\n path + \".limitation\"\n )\n };\n }\n\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n}\n\nfunction parseReferenceConditions(\n value: unknown,\n path: string\n): SensorSpectralReferenceConditions {\n const record = requireRecord(value, path, [\"temperatureC\", \"incidenceAngleDegreesFromNormal\", \"polarization\"]);\n const temperatureC =\n record.temperatureC === undefined\n ? undefined\n : requireFinite(\n record.temperatureC,\n path + \".temperatureC\"\n );\n const incidenceAngleDegreesFromNormal =\n record.incidenceAngleDegreesFromNormal ===\n undefined\n ? undefined\n : requireFinite(\n record.incidenceAngleDegreesFromNormal,\n path +\n \".incidenceAngleDegreesFromNormal\"\n );\n\n if (\n incidenceAngleDegreesFromNormal !==\n undefined &&\n (incidenceAngleDegreesFromNormal < 0 ||\n incidenceAngleDegreesFromNormal > 90)\n ) {\n throw new InvalidConfigurationError(\n path +\n \".incidenceAngleDegreesFromNormal must be from 0 through 90 degrees.\"\n );\n }\n\n const polarization =\n record.polarization;\n if (\n polarization !== undefined &&\n polarization !== \"unpolarized\" &&\n polarization !== \"unspecified\"\n ) {\n throw new InvalidConfigurationError(\n path + \".polarization is invalid.\"\n );\n }\n\n if (\n temperatureC === undefined &&\n incidenceAngleDegreesFromNormal ===\n undefined &&\n polarization === undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must declare at least one reference condition.\"\n );\n }\n\n return {\n ...(temperatureC === undefined\n ? {}\n : { temperatureC }),\n ...(incidenceAngleDegreesFromNormal ===\n undefined\n ? {}\n : {\n incidenceAngleDegreesFromNormal\n }),\n ...(polarization === undefined\n ? {}\n : { polarization })\n };\n}\n\nfunction parseCurveBase(\n record: UnknownRecord,\n path: string\n): SpectralCurveBase {\n if (record.wavelengthUnit !== \"nm\") {\n throw new InvalidConfigurationError(\n path +\n '.wavelengthUnit must be \"nm\".'\n );\n }\n if (\n record.interpolation !==\n \"piecewise-linear\"\n ) {\n throw new InvalidConfigurationError(\n path +\n '.interpolation must be \"piecewise-linear\".'\n );\n }\n if (\n record.outsideRangeBehavior !==\n \"fail-closed\"\n ) {\n throw new InvalidConfigurationError(\n path +\n '.outsideRangeBehavior must be \"fail-closed\".'\n );\n }\n\n return {\n wavelengthUnit: \"nm\",\n wavelengthBasis:\n parseSpectralWavelengthBasis(\n record.wavelengthBasis,\n path + \".wavelengthBasis\"\n ),\n interpolation: \"piecewise-linear\",\n outsideRangeBehavior: \"fail-closed\",\n evidence:\n requireReusableCurveEvidence(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseFractionSamples(\n value: unknown,\n path: string\n): readonly SpectralFractionSample[] {\n if (\n !Array.isArray(value) ||\n value.length < 2\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must contain at least two wavelength samples.\"\n );\n }\n\n let previousWavelength =\n Number.NEGATIVE_INFINITY;\n\n return value.map((entry, index) => {\n const record = requireRecord(\n entry,\n path + \"[\" + index + \"]\", [\"wavelengthNanometers\", \"value\"]\n );\n const wavelengthNanometers =\n requirePositiveFinite(\n record.wavelengthNanometers,\n path +\n \"[\" +\n index +\n \"].wavelengthNanometers\"\n );\n\n if (\n wavelengthNanometers <=\n previousWavelength\n ) {\n throw new InvalidConfigurationError(\n path +\n \" wavelengths must be strictly increasing.\"\n );\n }\n previousWavelength =\n wavelengthNanometers;\n\n return {\n wavelengthNanometers,\n value: requireFraction(\n record.value,\n path +\n \"[\" +\n index +\n \"].value\"\n )\n };\n });\n}\n\nfunction parseResponsivitySamples(\n value: unknown,\n path: string\n): readonly SpectralResponsivitySample[] {\n if (\n !Array.isArray(value) ||\n value.length < 2\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must contain at least two wavelength samples.\"\n );\n }\n\n let previousWavelength =\n Number.NEGATIVE_INFINITY;\n\n return value.map((entry, index) => {\n const record = requireRecord(\n entry,\n path + \"[\" + index + \"]\", [\"wavelengthNanometers\", \"amperesPerWatt\"]\n );\n const wavelengthNanometers =\n requirePositiveFinite(\n record.wavelengthNanometers,\n path +\n \"[\" +\n index +\n \"].wavelengthNanometers\"\n );\n\n if (\n wavelengthNanometers <=\n previousWavelength\n ) {\n throw new InvalidConfigurationError(\n path +\n \" wavelengths must be strictly increasing.\"\n );\n }\n previousWavelength =\n wavelengthNanometers;\n\n const amperesPerWatt =\n requireFinite(\n record.amperesPerWatt,\n path +\n \"[\" +\n index +\n \"].amperesPerWatt\"\n );\n if (amperesPerWatt < 0) {\n throw new InvalidConfigurationError(\n path +\n \"[\" +\n index +\n \"].amperesPerWatt must be greater than or equal to zero.\"\n );\n }\n\n return {\n wavelengthNanometers,\n amperesPerWatt\n };\n });\n}\n\nfunction parseFractionCurve(\n value: unknown,\n path: string\n): SpectralFractionCurve {\n const record = requireRecord(\n value,\n path, [\"wavelengthUnit\", \"interpolation\", \"outsideRangeBehavior\", \"wavelengthBasis\", \"evidence\", \"samples\"]\n );\n return {\n ...parseCurveBase(record, path),\n samples: parseFractionSamples(\n record.samples,\n path + \".samples\"\n )\n };\n}\n\nfunction parseResponsivityCurve(\n value: unknown,\n path: string\n): SpectralResponsivityCurve {\n const record = requireRecord(\n value,\n path, [\"wavelengthUnit\", \"interpolation\", \"outsideRangeBehavior\", \"wavelengthBasis\", \"evidence\", \"samples\"]\n );\n return {\n ...parseCurveBase(record, path),\n samples: parseResponsivitySamples(\n record.samples,\n path + \".samples\"\n )\n };\n}\n\nfunction parseScientificStatus(\n value: unknown,\n path: string\n): SensorSpectralResponseScientificStatus {\n if (\n value !== \"calibrated\" &&\n value !== \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n path + \" is invalid.\"\n );\n }\n return value;\n}\n\nfunction validateCalibratedWavelengthBasis(\n scientificStatus:\n SensorSpectralResponseScientificStatus,\n curves: readonly (\n | SpectralFractionCurve\n | SpectralResponsivityCurve\n )[],\n path: string\n): void {\n if (\n scientificStatus === \"calibrated\" &&\n curves.some(\n (curve) =>\n curve.wavelengthBasis ===\n \"unspecified\"\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n ' calibrated responses must declare wavelengthBasis \"air\" or \"vacuum\".'\n );\n }\n}\n\nfunction usableRange(\n curves: readonly (\n | SpectralFractionCurve\n | SpectralResponsivityCurve\n )[]\n): {\n minimum: number;\n maximum: number;\n} {\n const minimum = Math.max(\n ...curves.map(\n (curve) =>\n curve.samples[0]!\n .wavelengthNanometers\n )\n );\n const maximum = Math.min(\n ...curves.map(\n (curve) =>\n curve.samples[\n curve.samples.length - 1\n ]!.wavelengthNanometers\n )\n );\n\n if (!(minimum < maximum)) {\n throw new InvalidConfigurationError(\n \"Separable spectral-response component curves must have a non-empty overlapping wavelength interval.\"\n );\n }\n\n return { minimum, maximum };\n}\n\nfunction parseChannelResponse(\n value: unknown,\n path: string\n): SensorSpectralChannelResponse {\n const record = requireRecord(\n value,\n path, [\"channelId\", \"scientificStatus\", \"uncertainty\", \"evidence\", \"referenceConditions\", \"conditionDependence\", \"kind\", \"responseScope\", \"externalQuantumEfficiency\", \"spectralResponsivity\", \"combinationRule\", \"channelFilterTransmittance\", \"detectorExternalQuantumEfficiency\"]\n );\n const channelId =\n requireNonEmptyString(\n record.channelId,\n path + \".channelId\"\n );\n const scientificStatus =\n parseScientificStatus(\n record.scientificStatus,\n path + \".scientificStatus\"\n );\n const uncertainty =\n parseUncertainty(\n record.uncertainty,\n path + \".uncertainty\"\n );\n const evidence =\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n );\n const referenceConditions =\n record.referenceConditions ===\n undefined\n ? undefined\n : parseReferenceConditions(\n record.referenceConditions,\n path + \".referenceConditions\"\n );\n\n if (\n record.conditionDependence !==\n \"not-modeled\"\n ) {\n throw new InvalidConfigurationError(\n path +\n '.conditionDependence must be \"not-modeled\".'\n );\n }\n\n const common = {\n channelId,\n scientificStatus,\n uncertainty,\n evidence,\n ...(referenceConditions === undefined\n ? {}\n : { referenceConditions }),\n conditionDependence:\n \"not-modeled\" as const\n };\n\n if (\n record.kind ===\n \"effective-external-quantum-efficiency\"\n ) {\n if (\n record.responseScope !==\n \"site-incident-effective-channel-response\" &&\n record.responseScope !==\n \"sensor-package-incident-effective-channel-response\"\n ) {\n throw new InvalidConfigurationError(\n path +\n \".responseScope is invalid.\"\n );\n }\n const curve = parseFractionCurve(\n record.externalQuantumEfficiency,\n path +\n \".externalQuantumEfficiency\"\n );\n validateCalibratedWavelengthBasis(\n scientificStatus,\n [curve],\n path\n );\n return {\n ...common,\n kind:\n \"effective-external-quantum-efficiency\",\n responseScope:\n record.responseScope,\n externalQuantumEfficiency:\n curve\n };\n }\n\n if (\n record.kind ===\n \"effective-spectral-responsivity\"\n ) {\n if (\n record.responseScope !==\n \"site-incident-effective-channel-response\" &&\n record.responseScope !==\n \"sensor-package-incident-effective-channel-response\"\n ) {\n throw new InvalidConfigurationError(\n path +\n \".responseScope is invalid.\"\n );\n }\n const curve =\n parseResponsivityCurve(\n record.spectralResponsivity,\n path +\n \".spectralResponsivity\"\n );\n validateCalibratedWavelengthBasis(\n scientificStatus,\n [curve],\n path\n );\n return {\n ...common,\n kind:\n \"effective-spectral-responsivity\",\n responseScope:\n record.responseScope,\n spectralResponsivity: curve\n };\n }\n\n if (\n record.kind ===\n \"separable-channel-filter-and-detector-eqe\"\n ) {\n if (\n record.responseScope !==\n \"site-incident-channel-filter-times-detector-eqe\"\n ) {\n throw new InvalidConfigurationError(\n path +\n \".responseScope is invalid.\"\n );\n }\n if (\n record.combinationRule !==\n \"multiply\"\n ) {\n throw new InvalidConfigurationError(\n path +\n '.combinationRule must be \"multiply\".'\n );\n }\n\n const filterCurve =\n parseFractionCurve(\n record.channelFilterTransmittance,\n path +\n \".channelFilterTransmittance\"\n );\n const detectorCurve =\n parseFractionCurve(\n record.detectorExternalQuantumEfficiency,\n path +\n \".detectorExternalQuantumEfficiency\"\n );\n\n if (\n filterCurve.wavelengthBasis !==\n detectorCurve.wavelengthBasis\n ) {\n throw new InvalidConfigurationError(\n path +\n \" separable curves must use the same wavelength basis.\"\n );\n }\n\n usableRange([\n filterCurve,\n detectorCurve\n ]);\n validateCalibratedWavelengthBasis(\n scientificStatus,\n [\n filterCurve,\n detectorCurve\n ],\n path\n );\n\n return {\n ...common,\n kind:\n \"separable-channel-filter-and-detector-eqe\",\n responseScope:\n \"site-incident-channel-filter-times-detector-eqe\",\n combinationRule: \"multiply\",\n channelFilterTransmittance:\n filterCurve,\n detectorExternalQuantumEfficiency:\n detectorCurve\n };\n }\n\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n}\n\n/**\n * Parses wavelength-dependent response data for sensor channels. Responses are\n * never guessed from channel names or the CFA type.\n *\n * An embedded multi-point curve needs evidence that the data is reusable or\n * owned by Photivra. A public reference without reuse permission can support\n * metadata, but does not by itself allow copying numeric curve data into the engine.\n */\nexport function parseSensorSpectralResponseProfile(\n value: unknown\n): SensorSpectralResponseProfile {\n const profile = requireRecord(\n value,\n \"sensorSpectralResponse\", [\"schemaVersion\", \"channels\", \"profileId\", \"colorSamplingProfileId\", \"evidence\"]\n );\n\n if (\n profile.schemaVersion !== \"0.1.0\"\n ) {\n throw new InvalidConfigurationError(\n 'sensorSpectralResponse.schemaVersion must be \"0.1.0\".'\n );\n }\n\n if (\n !Array.isArray(profile.channels) ||\n profile.channels.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"sensorSpectralResponse.channels must be a non-empty array.\"\n );\n }\n\n const channels =\n profile.channels.map(\n (entry, index) =>\n parseChannelResponse(\n entry,\n \"sensorSpectralResponse.channels[\" +\n index +\n \"]\"\n )\n );\n\n const channelIds = channels.map(\n (entry) => entry.channelId\n );\n if (\n new Set(channelIds).size !==\n channelIds.length\n ) {\n throw new InvalidConfigurationError(\n \"sensorSpectralResponse.channels must not contain duplicate channel IDs.\"\n );\n }\n\n return {\n schemaVersion: \"0.1.0\",\n profileId: requireNonEmptyString(\n profile.profileId,\n \"sensorSpectralResponse.profileId\"\n ),\n colorSamplingProfileId:\n requireNonEmptyString(\n profile.colorSamplingProfileId,\n \"sensorSpectralResponse.colorSamplingProfileId\"\n ),\n evidence: parseEvidenceList(\n profile.evidence,\n \"sensorSpectralResponse.evidence\"\n ),\n channels\n };\n}\n\n/**\n * Creates an exact binding to one parsed response channel's data, so a swapped numeric curve cannot\n * hide behind an unchanged profile ID.\n *\n * The binding includes the channel's EQE or A/W curve (or its separately evidenced filter × detector\n * EQE curves), its range, interpolation and wavelength basis, and the exact canonical channel data.\n * The channel is parsed first and serialized with sorted object keys, so property order never changes\n * the binding and a malformed channel throws.\n * @param response - The input; see `SensorSpectralChannelResponse` for its fields, units and coordinates.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function createSensorSpectralResponseChannelBinding(\n response: SensorSpectralChannelResponse\n): SensorSpectralResponseChannelBinding {\n return {\n format:\n SENSOR_SPECTRAL_RESPONSE_CHANNEL_BINDING_FORMAT,\n // Parse first so the binding never repeats unvalidated input, then sort keys\n // so channels with the same content bind identically whatever their key order.\n canonicalJson:\n stringifyCanonicalJson(\n parseChannelResponse(\n response,\n \"sensorSpectralResponseChannel\"\n ),\n {\n undefinedObjectProperties: \"omit\",\n nonFiniteNumberMessage:\n \"sensorSpectralResponseChannel must contain finite numbers.\",\n unsupportedValueMessage:\n \"sensorSpectralResponseChannel must be plain JSON data.\"\n }\n )\n };\n}\n\n/**\n * Rejects a channel binding stored in a reduction unless it uses the current format. A v1 binding from\n * package 1.5.0 or earlier fails with an explicit version error: a different serializer produced it, so\n * comparing it would report a misleading data mismatch. Recompute the spectral quadrature and reduction\n * with this release to get a v2 binding.\n * Internal to the repository; not exported from the package.\n */\nexport function requireCurrentSensorSpectralResponseChannelBinding(\n binding: unknown\n): void {\n const format =\n typeof binding === \"object\" && binding !== null\n ? (binding as { format?: unknown }).format\n : undefined;\n if (format === SENSOR_SPECTRAL_RESPONSE_CHANNEL_BINDING_FORMAT) return;\n throw new InvalidConfigurationError(\n format === \"photivra-spectral-channel-response-canonical-json-v1\"\n ? \"Response-channel binding format v1 (package 1.5.0 and earlier) is not supported; recompute the spectral quadrature and reduction to obtain a v2 binding.\"\n : \"Response-channel binding has an unsupported format; expected \" + SENSOR_SPECTRAL_RESPONSE_CHANNEL_BINDING_FORMAT + \".\"\n );\n}\n\nfunction topologyChannelIds(\n profile: SensorColorSamplingProfile\n): readonly string[] {\n if (\n profile.layout.kind ===\n \"layered\"\n ) {\n throw new InvalidScientificInputError(\n \"Layered color sampling remains spatially unresolved; schema 0.1.0 spectral response cannot yet be composed into per-site layered sampling.\"\n );\n }\n\n if (\n profile.layout.kind ===\n \"monochrome\"\n ) {\n return [profile.layout.channelId];\n }\n\n return [\n ...new Set(\n profile.layout.siteChannelIds\n )\n ];\n}\n\nfunction interpolateFraction(\n curve: SpectralFractionCurve,\n wavelengthNanometers: number\n): {\n value: number;\n interpolationUsed: boolean;\n} {\n return interpolateCurve(\n curve.samples,\n wavelengthNanometers,\n (sample) => sample.value\n );\n}\n\nfunction interpolateResponsivity(\n curve: SpectralResponsivityCurve,\n wavelengthNanometers: number\n): {\n value: number;\n interpolationUsed: boolean;\n} {\n return interpolateCurve(\n curve.samples,\n wavelengthNanometers,\n (sample) =>\n sample.amperesPerWatt\n );\n}\n\nfunction interpolateCurve<T extends {\n wavelengthNanometers: number;\n}>(\n samples: readonly T[],\n wavelengthNanometers: number,\n valueOf: (sample: T) => number\n): {\n value: number;\n interpolationUsed: boolean;\n} {\n const first = samples[0]!;\n const last =\n samples[samples.length - 1]!;\n\n if (\n wavelengthNanometers <\n first.wavelengthNanometers ||\n wavelengthNanometers >\n last.wavelengthNanometers\n ) {\n throw new InvalidScientificInputError(\n \"Requested wavelength is outside the declared spectral-response range; extrapolation/zero-fill is not permitted.\"\n );\n }\n\n for (\n let index = 0;\n index < samples.length;\n index += 1\n ) {\n const sample = samples[index]!;\n if (\n wavelengthNanometers ===\n sample.wavelengthNanometers\n ) {\n return {\n value: valueOf(sample),\n interpolationUsed: false\n };\n }\n\n if (\n wavelengthNanometers <\n sample.wavelengthNanometers\n ) {\n const previous =\n samples[index - 1]!;\n const phase =\n (wavelengthNanometers -\n previous.wavelengthNanometers) /\n (sample.wavelengthNanometers -\n previous.wavelengthNanometers);\n return {\n value:\n valueOf(previous) +\n phase *\n (valueOf(sample) -\n valueOf(previous)),\n interpolationUsed: true\n };\n }\n }\n\n return {\n value: valueOf(last),\n interpolationUsed: false\n };\n}\n\n/**\n * Returns one sensor channel's response at one wavelength.\n *\n * It checks the response profile against the exact colour-sampling profile,\n * rejects layered layouts whose sampling is not defined, uses only the declared\n * piecewise-linear interpolation, and never extrapolates.\n *\n * Both a direct effective response and separate filter × detector QE curves are\n * supported. QE and A/W responsivity are different physical quantities; this\n * API does not convert between them.\n */\nexport function resolveParsedSensorSpectralResponseAtWavelength(\n input:\n ResolveSensorSpectralResponseAtWavelengthInput\n): CalculationResult<ResolvedSensorSpectralResponse> {\n const colorProfile =\n input.colorSamplingProfile;\n const responseProfile =\n input.spectralResponseProfile;\n\n if (\n responseProfile\n .colorSamplingProfileId !==\n colorProfile.profileId\n ) {\n throw new InvalidScientificInputError(\n \"Spectral-response colorSamplingProfileId must match the supplied color-sampling profile.\"\n );\n }\n\n const knownChannelIds =\n topologyChannelIds(colorProfile);\n const knownSet =\n new Set(knownChannelIds);\n\n for (\n const response of\n responseProfile.channels\n ) {\n if (\n !knownSet.has(\n response.channelId\n )\n ) {\n throw new InvalidScientificInputError(\n \"Spectral-response profile declares a channel ID that is not present in the linked color-sampling topology.\"\n );\n }\n }\n\n if (\n typeof input.channelId !==\n \"string\" ||\n input.channelId.trim().length ===\n 0\n ) {\n throw new InvalidConfigurationError(\n \"channelId must be a non-empty string.\"\n );\n }\n if (\n !knownSet.has(input.channelId)\n ) {\n throw new InvalidScientificInputError(\n \"channelId is not present in the linked color-sampling topology.\"\n );\n }\n\n const response =\n responseProfile.channels.find(\n (entry) =>\n entry.channelId ===\n input.channelId\n );\n if (response === undefined) {\n throw new InvalidScientificInputError(\n \"No spectral response is declared for the requested channelId.\"\n );\n }\n\n if (\n typeof input.wavelengthNanometers !==\n \"number\" ||\n !Number.isFinite(\n input.wavelengthNanometers\n ) ||\n input.wavelengthNanometers <= 0\n ) {\n throw new InvalidScientificInputError(\n \"wavelengthNanometers must be finite and greater than zero.\"\n );\n }\n\n if (\n input.wavelengthBasis !==\n \"air\" &&\n input.wavelengthBasis !==\n \"vacuum\" &&\n input.wavelengthBasis !==\n \"unspecified\"\n ) {\n throw new InvalidConfigurationError(\n \"wavelengthBasis is invalid.\"\n );\n }\n\n const curves:\n (\n | SpectralFractionCurve\n | SpectralResponsivityCurve\n )[] = [];\n\n let resolvedValue:\n ResolvedSensorSpectralResponseValue;\n let interpolationUsed: boolean;\n let wavelengthBasis:\n SpectralWavelengthBasis;\n\n if (\n response.kind ===\n \"effective-external-quantum-efficiency\"\n ) {\n const curve =\n response.externalQuantumEfficiency;\n curves.push(curve);\n wavelengthBasis =\n curve.wavelengthBasis;\n\n if (\n input.wavelengthBasis !==\n wavelengthBasis\n ) {\n throw new InvalidScientificInputError(\n \"Requested wavelengthBasis must exactly match the response curve; Photivra does not convert air/vacuum/unspecified wavelength coordinates implicitly.\"\n );\n }\n\n const resolved =\n interpolateFraction(\n curve,\n input.wavelengthNanometers\n );\n interpolationUsed =\n resolved.interpolationUsed;\n resolvedValue = {\n kind:\n \"effective-external-quantum-efficiency\",\n externalQuantumEfficiency:\n resolved.value,\n composition:\n \"direct-effective-response\"\n };\n } else if (\n response.kind ===\n \"effective-spectral-responsivity\"\n ) {\n const curve =\n response.spectralResponsivity;\n curves.push(curve);\n wavelengthBasis =\n curve.wavelengthBasis;\n\n if (\n input.wavelengthBasis !==\n wavelengthBasis\n ) {\n throw new InvalidScientificInputError(\n \"Requested wavelengthBasis must exactly match the response curve; Photivra does not convert air/vacuum/unspecified wavelength coordinates implicitly.\"\n );\n }\n\n const resolved =\n interpolateResponsivity(\n curve,\n input.wavelengthNanometers\n );\n interpolationUsed =\n resolved.interpolationUsed;\n resolvedValue = {\n kind:\n \"effective-spectral-responsivity\",\n amperesPerWatt:\n resolved.value,\n composition:\n \"direct-effective-response\"\n };\n } else {\n const filterCurve =\n response\n .channelFilterTransmittance;\n const detectorCurve =\n response\n .detectorExternalQuantumEfficiency;\n curves.push(\n filterCurve,\n detectorCurve\n );\n wavelengthBasis =\n filterCurve.wavelengthBasis;\n\n if (\n input.wavelengthBasis !==\n wavelengthBasis\n ) {\n throw new InvalidScientificInputError(\n \"Requested wavelengthBasis must exactly match the separable response curves.\"\n );\n }\n\n const filter =\n interpolateFraction(\n filterCurve,\n input.wavelengthNanometers\n );\n const detector =\n interpolateFraction(\n detectorCurve,\n input.wavelengthNanometers\n );\n\n interpolationUsed =\n filter.interpolationUsed ||\n detector.interpolationUsed;\n\n resolvedValue = {\n kind:\n \"effective-external-quantum-efficiency\",\n externalQuantumEfficiency:\n filter.value *\n detector.value,\n composition:\n \"channel-filter-transmittance-times-detector-eqe\",\n channelFilterTransmittance:\n filter.value,\n detectorExternalQuantumEfficiency:\n detector.value\n };\n }\n\n const range = usableRange(curves);\n\n return calculatedResult(\n {\n profileId:\n responseProfile.profileId,\n colorSamplingProfileId:\n responseProfile\n .colorSamplingProfileId,\n channelId: response.channelId,\n sourceResponseKind:\n response.kind,\n responseScope:\n response.responseScope,\n scientificStatus:\n response.scientificStatus,\n uncertainty:\n response.uncertainty,\n wavelengthNanometers:\n input.wavelengthNanometers,\n wavelengthBasis,\n wavelengthBasisResolved:\n wavelengthBasis !==\n \"unspecified\",\n declaredWavelengthRangeNanometers:\n range,\n interpolation:\n \"piecewise-linear\",\n interpolationUsed,\n outsideRangeBehavior:\n \"fail-closed\",\n response: resolvedValue,\n ...(response.referenceConditions ===\n undefined\n ? {}\n : {\n referenceConditions:\n response.referenceConditions\n }),\n conditionDependenceModeled:\n false,\n fieldAngleDependenceModeled:\n false,\n temperatureDependenceModeled:\n false,\n polarizationDependenceModeled:\n false,\n spectralIrradianceIntegrated:\n false,\n wavelengthIntegrationPerformed:\n false,\n qeResponsivityConversionPerformed:\n false,\n photonsCalculated: false,\n electronsCalculated: false,\n rawCodeValueProduced: false,\n componentEvidence: {\n profile:\n responseProfile.evidence,\n channel: response.evidence,\n curves: curves.map(\n (curve) => curve.evidence\n )\n }\n },\n \"sensor-spectral-response-lookup\",\n \"1.0.0\",\n [\n \"Channel IDs are exact semantic identifiers from the linked color-sampling topology; names do not imply spectral behavior.\",\n \"Piecewise-linear interpolation is applied only inside the declared wavelength range; no extrapolation or implicit zero response is permitted.\",\n \"Air, vacuum and unspecified wavelength bases are never converted implicitly.\",\n \"Direct effective response is preserved when decomposition is not established; separable filter×detector-QE is composed only when explicitly declared.\",\n \"Spectral responsivity in A/W and external QE remain distinct physical representations and are not converted by this API.\",\n \"Reference-condition metadata does not create field-angle, temperature or polarization dependence models.\",\n \"Spectral irradiance integration, wavelength integration, photon/electron conversion and RAW-domain output remain future work.\"\n ]\n );\n}\n\n\n/**\n * Public spectral-response lookup for untrusted, unparsed profiles.\n *\n * The profiles are parsed here, once. Internal code that has already parsed\n * both profiles can call resolveParsedSensorSpectralResponseAtWavelength, to\n * avoid parsing them again for every wavelength node.\n */\nexport function resolveSensorSpectralResponseAtWavelength(\n input:\n ResolveSensorSpectralResponseAtWavelengthInput\n): CalculationResult<ResolvedSensorSpectralResponse> {\n requireInputKeys(input, \"resolveSensorSpectralResponseAtWavelength\", [\"colorSamplingProfile\", \"spectralResponseProfile\", \"channelId\", \"wavelengthNanometers\", \"wavelengthBasis\"]);\n const colorProfile =\n parseSensorColorSamplingProfile(\n input.colorSamplingProfile\n );\n const responseProfile =\n parseSensorSpectralResponseProfile(\n input.spectralResponseProfile\n );\n\n return resolveParsedSensorSpectralResponseAtWavelength({\n ...input,\n colorSamplingProfile:\n colorProfile,\n spectralResponseProfile:\n responseProfile\n });\n}\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** Stream IDs. Changing them changes every simulated RAW code. */
|
|
2
|
+
export declare const NATIVE_SITE_CHARGE_STREAM_ID: 0;
|
|
3
|
+
export declare const NATIVE_SITE_READ_NOISE_STREAM_ID: 1;
|
|
4
|
+
/** MurmurHash3 32-bit avalanche finalizer; a bijection on uint32 with fmix32(0) = 0. */
|
|
5
|
+
export declare function fmix32(value: number): number;
|
|
6
|
+
/**
|
|
7
|
+
* Returns the uint32 seed of one random stream for one absolute native site.
|
|
8
|
+
* All inputs must be uint32 integers. The site index is the full-frame native row-major
|
|
9
|
+
* index, never relative to a tile or chunk, so how the work is split cannot change it.
|
|
10
|
+
*/
|
|
11
|
+
export declare function deriveNativeSiteStreamSeedUint32(captureSeedUint32: number, nativeSiteIndex: number, streamId: number): number;
|
|
12
|
+
/** One deterministic stream of uniforms strictly inside (0,1). */
|
|
13
|
+
export interface DeterministicUniformStream {
|
|
14
|
+
next(): number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Creates the deterministic, non-cryptographic xorshift32 random stream for one charge, read-noise
|
|
18
|
+
* or fixed-pattern identity.
|
|
19
|
+
*
|
|
20
|
+
* The seed is first scrambled by the MurmurHash3 `fmix32` avalanche finalizer. xorshift32 is linear
|
|
21
|
+
* over GF(2), so an unscrambled seed would give nearby seeds almost identical first draws, and noise
|
|
22
|
+
* that is correlated across the sensor with too little variance (issue #270). The nonzero fallback
|
|
23
|
+
* avoids the zero state, which xorshift can never leave. Adding 0.5 before dividing gives values
|
|
24
|
+
* strictly inside (0,1), so the logarithms in the Poisson and normal transforms never see 0 or 1.
|
|
25
|
+
* Changing any of this changes simulated RAW output and needs a model and replay review.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createDeterministicUniformStream(seedUint32: number): DeterministicUniformStream;
|
|
28
|
+
/**
|
|
29
|
+
* Box–Muller transform of two uniform values in (0,1) (Box & Muller 1958). Each call uses two values
|
|
30
|
+
* and returns one standard normal sample. The second possible sample is not cached, so the order of
|
|
31
|
+
* draws from the stream never shifts.
|
|
32
|
+
*/
|
|
33
|
+
export declare function sampleDeterministicStandardNormal(random: DeterministicUniformStream): number;
|
|
34
|
+
/**
|
|
35
|
+
* Fixed-pattern stream IDs. They seed spatial patterns that belong to one physical sensor, never
|
|
36
|
+
* per-capture noise, and are hashed with the sensor-instance seed instead of the capture seed.
|
|
37
|
+
*/
|
|
38
|
+
export declare const SENSOR_FIXED_PATTERN_PRNU_STREAM_ID: 16;
|
|
39
|
+
export declare const SENSOR_FIXED_PATTERN_DSNU_STREAM_ID: 17;
|
|
40
|
+
export declare const SENSOR_FIXED_PATTERN_HOT_PIXEL_STREAM_ID: 18;
|
|
41
|
+
export declare const SENSOR_FIXED_PATTERN_ROW_STREAM_ID: 19;
|
|
42
|
+
export declare const SENSOR_FIXED_PATTERN_COLUMN_STREAM_ID: 20;
|
|
43
|
+
/**
|
|
44
|
+
* Returns the uint32 seed of one fixed-pattern stream for one physical colour-sampling site: the
|
|
45
|
+
* MurmurHash3_x86_32 hash (hash seed 0) of the 16-byte little-endian message
|
|
46
|
+
* `[sensorInstanceSeed, siteX, siteY, streamId]`. Site coordinates are absolute indices in the
|
|
47
|
+
* colour-sampling grid, so the pattern belongs to the physical sensor and does not change with crop,
|
|
48
|
+
* tiling or the per-capture seed. Deterministic and not cryptographic.
|
|
49
|
+
*/
|
|
50
|
+
export declare function deriveSensorFixedPatternSeedUint32(sensorInstanceSeedUint32: number, siteX: number, siteY: number, streamId: number): number;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Seeds for the random-number streams behind simulated sensor noise. The same inputs always give
|
|
4
|
+
* the same noise.
|
|
5
|
+
*
|
|
6
|
+
* Each per-site stream seed is a strong 32-bit hash of the capture seed, the absolute native
|
|
7
|
+
* row-major site index and a fixed stream ID. The hash is MurmurHash3_x86_32 (Austin Appleby,
|
|
8
|
+
* placed in the public domain) of the 12-byte little-endian message `[captureSeed, siteIndex,
|
|
9
|
+
* streamId]` with hash seed 0. Its avalanche finalizer (`fmix32`) makes a one-bit input change flip
|
|
10
|
+
* each output bit with probability close to 1/2. So neighbouring sites, the two streams of one site
|
|
11
|
+
* and captures with nearby seeds get unrelated seeds. A linear schedule such as `seed + 2*index` fed
|
|
12
|
+
* into a linear generator (xorshift) lacks this property, and produced correlated noise with too
|
|
13
|
+
* little variance (issue #270).
|
|
14
|
+
*
|
|
15
|
+
* This is deterministic and not cryptographic; it does not claim unpredictability. The moment and
|
|
16
|
+
* correlation tests, not this hash alone, show that the resulting noise is statistically acceptable.
|
|
17
|
+
*/
|
|
18
|
+
import { InvalidScientificInputError } from "../core/validation.js";
|
|
19
|
+
/** Stream IDs. Changing them changes every simulated RAW code. */
|
|
20
|
+
export const NATIVE_SITE_CHARGE_STREAM_ID = 0;
|
|
21
|
+
export const NATIVE_SITE_READ_NOISE_STREAM_ID = 1;
|
|
22
|
+
const MURMUR3_C1 = 0xcc9e2d51;
|
|
23
|
+
const MURMUR3_C2 = 0x1b873593;
|
|
24
|
+
/** MurmurHash3 32-bit avalanche finalizer; a bijection on uint32 with fmix32(0) = 0. */
|
|
25
|
+
export function fmix32(value) {
|
|
26
|
+
let h = value >>> 0;
|
|
27
|
+
h ^= h >>> 16;
|
|
28
|
+
h = Math.imul(h, 0x85ebca6b);
|
|
29
|
+
h ^= h >>> 13;
|
|
30
|
+
h = Math.imul(h, 0xc2b2ae35);
|
|
31
|
+
h ^= h >>> 16;
|
|
32
|
+
return h >>> 0;
|
|
33
|
+
}
|
|
34
|
+
function mixBlock(hash, block) {
|
|
35
|
+
let k = Math.imul(block >>> 0, MURMUR3_C1);
|
|
36
|
+
k = (k << 15) | (k >>> 17);
|
|
37
|
+
k = Math.imul(k, MURMUR3_C2);
|
|
38
|
+
let h = (hash ^ k) >>> 0;
|
|
39
|
+
h = (h << 13) | (h >>> 19);
|
|
40
|
+
return (Math.imul(h, 5) + 0xe6546b64) >>> 0;
|
|
41
|
+
}
|
|
42
|
+
function isUint32(value) {
|
|
43
|
+
return Number.isInteger(value) && value >= 0 && value <= 0xffffffff;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Returns the uint32 seed of one random stream for one absolute native site.
|
|
47
|
+
* All inputs must be uint32 integers. The site index is the full-frame native row-major
|
|
48
|
+
* index, never relative to a tile or chunk, so how the work is split cannot change it.
|
|
49
|
+
*/
|
|
50
|
+
export function deriveNativeSiteStreamSeedUint32(captureSeedUint32, nativeSiteIndex, streamId) {
|
|
51
|
+
if (!isUint32(captureSeedUint32) || !isUint32(nativeSiteIndex) || !isUint32(streamId)) {
|
|
52
|
+
throw new InvalidScientificInputError("Stochastic stream seed inputs must be uint32 integers.");
|
|
53
|
+
}
|
|
54
|
+
let h = 0;
|
|
55
|
+
h = mixBlock(h, captureSeedUint32);
|
|
56
|
+
h = mixBlock(h, nativeSiteIndex);
|
|
57
|
+
h = mixBlock(h, streamId);
|
|
58
|
+
return fmix32(h ^ 12);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Creates the deterministic, non-cryptographic xorshift32 random stream for one charge, read-noise
|
|
62
|
+
* or fixed-pattern identity.
|
|
63
|
+
*
|
|
64
|
+
* The seed is first scrambled by the MurmurHash3 `fmix32` avalanche finalizer. xorshift32 is linear
|
|
65
|
+
* over GF(2), so an unscrambled seed would give nearby seeds almost identical first draws, and noise
|
|
66
|
+
* that is correlated across the sensor with too little variance (issue #270). The nonzero fallback
|
|
67
|
+
* avoids the zero state, which xorshift can never leave. Adding 0.5 before dividing gives values
|
|
68
|
+
* strictly inside (0,1), so the logarithms in the Poisson and normal transforms never see 0 or 1.
|
|
69
|
+
* Changing any of this changes simulated RAW output and needs a model and replay review.
|
|
70
|
+
*/
|
|
71
|
+
export function createDeterministicUniformStream(seedUint32) {
|
|
72
|
+
let state = fmix32((seedUint32 ^ 0x9e3779b9) >>> 0);
|
|
73
|
+
if (state === 0) {
|
|
74
|
+
state = 0x6d2b79f5;
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
next() {
|
|
78
|
+
state ^= state << 13;
|
|
79
|
+
state ^= state >>> 17;
|
|
80
|
+
state ^= state << 5;
|
|
81
|
+
state >>>= 0;
|
|
82
|
+
return (state + 0.5) / 0x1_0000_0000;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Box–Muller transform of two uniform values in (0,1) (Box & Muller 1958). Each call uses two values
|
|
88
|
+
* and returns one standard normal sample. The second possible sample is not cached, so the order of
|
|
89
|
+
* draws from the stream never shifts.
|
|
90
|
+
*/
|
|
91
|
+
export function sampleDeterministicStandardNormal(random) {
|
|
92
|
+
const u1 = random.next();
|
|
93
|
+
const u2 = random.next();
|
|
94
|
+
return Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Fixed-pattern stream IDs. They seed spatial patterns that belong to one physical sensor, never
|
|
98
|
+
* per-capture noise, and are hashed with the sensor-instance seed instead of the capture seed.
|
|
99
|
+
*/
|
|
100
|
+
export const SENSOR_FIXED_PATTERN_PRNU_STREAM_ID = 16;
|
|
101
|
+
export const SENSOR_FIXED_PATTERN_DSNU_STREAM_ID = 17;
|
|
102
|
+
export const SENSOR_FIXED_PATTERN_HOT_PIXEL_STREAM_ID = 18;
|
|
103
|
+
export const SENSOR_FIXED_PATTERN_ROW_STREAM_ID = 19;
|
|
104
|
+
export const SENSOR_FIXED_PATTERN_COLUMN_STREAM_ID = 20;
|
|
105
|
+
/**
|
|
106
|
+
* Returns the uint32 seed of one fixed-pattern stream for one physical colour-sampling site: the
|
|
107
|
+
* MurmurHash3_x86_32 hash (hash seed 0) of the 16-byte little-endian message
|
|
108
|
+
* `[sensorInstanceSeed, siteX, siteY, streamId]`. Site coordinates are absolute indices in the
|
|
109
|
+
* colour-sampling grid, so the pattern belongs to the physical sensor and does not change with crop,
|
|
110
|
+
* tiling or the per-capture seed. Deterministic and not cryptographic.
|
|
111
|
+
*/
|
|
112
|
+
export function deriveSensorFixedPatternSeedUint32(sensorInstanceSeedUint32, siteX, siteY, streamId) {
|
|
113
|
+
if (!isUint32(sensorInstanceSeedUint32) || !isUint32(siteX) || !isUint32(siteY) || !isUint32(streamId)) {
|
|
114
|
+
throw new InvalidScientificInputError("Fixed-pattern seed inputs must be uint32 integers.");
|
|
115
|
+
}
|
|
116
|
+
let h = 0;
|
|
117
|
+
h = mixBlock(h, sensorInstanceSeedUint32);
|
|
118
|
+
h = mixBlock(h, siteX);
|
|
119
|
+
h = mixBlock(h, siteY);
|
|
120
|
+
h = mixBlock(h, streamId);
|
|
121
|
+
return fmix32(h ^ 16);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=stochastic-seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stochastic-seed.js","sourceRoot":"","sources":["../../src/sensor/stochastic-seed.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Seeds for the random-number streams behind simulated sensor noise. The same inputs always give\n * the same noise.\n *\n * Each per-site stream seed is a strong 32-bit hash of the capture seed, the absolute native\n * row-major site index and a fixed stream ID. The hash is MurmurHash3_x86_32 (Austin Appleby,\n * placed in the public domain) of the 12-byte little-endian message `[captureSeed, siteIndex,\n * streamId]` with hash seed 0. Its avalanche finalizer (`fmix32`) makes a one-bit input change flip\n * each output bit with probability close to 1/2. So neighbouring sites, the two streams of one site\n * and captures with nearby seeds get unrelated seeds. A linear schedule such as `seed + 2*index` fed\n * into a linear generator (xorshift) lacks this property, and produced correlated noise with too\n * little variance (issue #270).\n *\n * This is deterministic and not cryptographic; it does not claim unpredictability. The moment and\n * correlation tests, not this hash alone, show that the resulting noise is statistically acceptable.\n */\n\nimport { InvalidScientificInputError } from \"../core/validation.js\";\n\n/** Stream IDs. Changing them changes every simulated RAW code. */\nexport const NATIVE_SITE_CHARGE_STREAM_ID = 0 as const;\nexport const NATIVE_SITE_READ_NOISE_STREAM_ID = 1 as const;\n\nconst MURMUR3_C1 = 0xcc9e2d51;\nconst MURMUR3_C2 = 0x1b873593;\n\n/** MurmurHash3 32-bit avalanche finalizer; a bijection on uint32 with fmix32(0) = 0. */\nexport function fmix32(value: number): number {\n let h = value >>> 0;\n h ^= h >>> 16;\n h = Math.imul(h, 0x85ebca6b);\n h ^= h >>> 13;\n h = Math.imul(h, 0xc2b2ae35);\n h ^= h >>> 16;\n return h >>> 0;\n}\n\nfunction mixBlock(hash: number, block: number): number {\n let k = Math.imul(block >>> 0, MURMUR3_C1);\n k = (k << 15) | (k >>> 17);\n k = Math.imul(k, MURMUR3_C2);\n let h = (hash ^ k) >>> 0;\n h = (h << 13) | (h >>> 19);\n return (Math.imul(h, 5) + 0xe6546b64) >>> 0;\n}\n\nfunction isUint32(value: number): boolean {\n return Number.isInteger(value) && value >= 0 && value <= 0xffffffff;\n}\n\n/**\n * Returns the uint32 seed of one random stream for one absolute native site.\n * All inputs must be uint32 integers. The site index is the full-frame native row-major\n * index, never relative to a tile or chunk, so how the work is split cannot change it.\n */\nexport function deriveNativeSiteStreamSeedUint32(\n captureSeedUint32: number,\n nativeSiteIndex: number,\n streamId: number\n): number {\n if (!isUint32(captureSeedUint32) || !isUint32(nativeSiteIndex) || !isUint32(streamId)) {\n throw new InvalidScientificInputError(\"Stochastic stream seed inputs must be uint32 integers.\");\n }\n let h = 0;\n h = mixBlock(h, captureSeedUint32);\n h = mixBlock(h, nativeSiteIndex);\n h = mixBlock(h, streamId);\n return fmix32(h ^ 12);\n}\n\n/** One deterministic stream of uniforms strictly inside (0,1). */\nexport interface DeterministicUniformStream {\n next(): number;\n}\n\n/**\n * Creates the deterministic, non-cryptographic xorshift32 random stream for one charge, read-noise\n * or fixed-pattern identity.\n *\n * The seed is first scrambled by the MurmurHash3 `fmix32` avalanche finalizer. xorshift32 is linear\n * over GF(2), so an unscrambled seed would give nearby seeds almost identical first draws, and noise\n * that is correlated across the sensor with too little variance (issue #270). The nonzero fallback\n * avoids the zero state, which xorshift can never leave. Adding 0.5 before dividing gives values\n * strictly inside (0,1), so the logarithms in the Poisson and normal transforms never see 0 or 1.\n * Changing any of this changes simulated RAW output and needs a model and replay review.\n */\nexport function createDeterministicUniformStream(seedUint32: number): DeterministicUniformStream {\n let state = fmix32((seedUint32 ^ 0x9e3779b9) >>> 0);\n if (state === 0) {\n state = 0x6d2b79f5;\n }\n return {\n next(): number {\n state ^= state << 13;\n state ^= state >>> 17;\n state ^= state << 5;\n state >>>= 0;\n return (state + 0.5) / 0x1_0000_0000;\n }\n };\n}\n\n/**\n * Box–Muller transform of two uniform values in (0,1) (Box & Muller 1958). Each call uses two values\n * and returns one standard normal sample. The second possible sample is not cached, so the order of\n * draws from the stream never shifts.\n */\nexport function sampleDeterministicStandardNormal(random: DeterministicUniformStream): number {\n const u1 = random.next();\n const u2 = random.next();\n return Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);\n}\n\n/**\n * Fixed-pattern stream IDs. They seed spatial patterns that belong to one physical sensor, never\n * per-capture noise, and are hashed with the sensor-instance seed instead of the capture seed.\n */\nexport const SENSOR_FIXED_PATTERN_PRNU_STREAM_ID = 16 as const;\nexport const SENSOR_FIXED_PATTERN_DSNU_STREAM_ID = 17 as const;\nexport const SENSOR_FIXED_PATTERN_HOT_PIXEL_STREAM_ID = 18 as const;\nexport const SENSOR_FIXED_PATTERN_ROW_STREAM_ID = 19 as const;\nexport const SENSOR_FIXED_PATTERN_COLUMN_STREAM_ID = 20 as const;\n\n/**\n * Returns the uint32 seed of one fixed-pattern stream for one physical colour-sampling site: the\n * MurmurHash3_x86_32 hash (hash seed 0) of the 16-byte little-endian message\n * `[sensorInstanceSeed, siteX, siteY, streamId]`. Site coordinates are absolute indices in the\n * colour-sampling grid, so the pattern belongs to the physical sensor and does not change with crop,\n * tiling or the per-capture seed. Deterministic and not cryptographic.\n */\nexport function deriveSensorFixedPatternSeedUint32(\n sensorInstanceSeedUint32: number,\n siteX: number,\n siteY: number,\n streamId: number\n): number {\n if (!isUint32(sensorInstanceSeedUint32) || !isUint32(siteX) || !isUint32(siteY) || !isUint32(streamId)) {\n throw new InvalidScientificInputError(\"Fixed-pattern seed inputs must be uint32 integers.\");\n }\n let h = 0;\n h = mixBlock(h, sensorInstanceSeedUint32);\n h = mixBlock(h, siteX);\n h = mixBlock(h, siteY);\n h = mixBlock(h, streamId);\n return fmix32(h ^ 16);\n}\n"]}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Internal shared count accumulation; time measures are seconds, never normalized weights.
|
|
2
|
+
* Internal: sums rate × time step over time samples to get expected photon and electron counts.
|
|
4
3
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
5
4
|
* limits.
|
|
6
5
|
*/
|
|
7
|
-
/** Internal
|
|
6
|
+
/** Internal: sums expected counts over time samples. Time steps are in seconds, never normalized weights. */
|
|
8
7
|
export declare function sumTemporalEqeRateExpectations(samples: readonly {
|
|
9
8
|
incidentPhotonRatePerSecond: number;
|
|
10
9
|
expectedGeneratedElectronRatePerSecond: number;
|
|
@@ -12,4 +11,3 @@ export declare function sumTemporalEqeRateExpectations(samples: readonly {
|
|
|
12
11
|
photonCount: number;
|
|
13
12
|
electronCount: number;
|
|
14
13
|
};
|
|
15
|
-
//# sourceMappingURL=temporal-eqe-sum.d.ts.map
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* Internal shared count accumulation; time measures are seconds, never normalized weights.
|
|
3
|
+
* Internal: sums rate × time step over time samples to get expected photon and electron counts.
|
|
5
4
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
6
5
|
* limits.
|
|
7
6
|
*/
|
|
8
|
-
/** Internal
|
|
7
|
+
/** Internal: sums expected counts over time samples. Time steps are in seconds, never normalized weights. */
|
|
9
8
|
export function sumTemporalEqeRateExpectations(samples, integrationMeasureSeconds) {
|
|
10
9
|
let photonCount = 0, electronCount = 0, photonCorrection = 0, electronCorrection = 0;
|
|
11
10
|
/**
|
|
12
|
-
* Separate compensated sums
|
|
13
|
-
* large
|
|
14
|
-
* average weight
|
|
11
|
+
* Separate compensated sums keep small photon and electron contributions from being
|
|
12
|
+
* lost next to large ones. Multiply rates by the time step in seconds, never by a
|
|
13
|
+
* normalized time-average weight, which is a different quantity.
|
|
15
14
|
*/
|
|
16
15
|
for (const sample of samples) {
|
|
17
16
|
const photons = sample.incidentPhotonRatePerSecond * integrationMeasureSeconds;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temporal-eqe-sum.js","sourceRoot":"","sources":["../../src/sensor/temporal-eqe-sum.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC
|
|
1
|
+
{"version":3,"file":"temporal-eqe-sum.js","sourceRoot":"","sources":["../../src/sensor/temporal-eqe-sum.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;GAIG;AAEH,6GAA6G;AAC7G,MAAM,UAAU,8BAA8B,CAAC,OAG5C,EAAE,yBAAiC;IACpC,IAAI,WAAW,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,EAAE,gBAAgB,GAAG,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC;IACvF;;;;OAIG;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,2BAA2B,GAAG,yBAAyB,CAAC;QAC/E,MAAM,SAAS,GAAG,MAAM,CAAC,sCAAsC,GAAG,yBAAyB,CAAC;QAC5F,MAAM,eAAe,GAAG,OAAO,GAAG,gBAAgB,CAAC;QACnD,MAAM,WAAW,GAAG,WAAW,GAAG,eAAe,CAAC;QAClD,gBAAgB,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,eAAe,CAAC;QACjE,WAAW,GAAG,WAAW,CAAC;QAC1B,MAAM,iBAAiB,GAAG,SAAS,GAAG,kBAAkB,CAAC;QACzD,MAAM,aAAa,GAAG,aAAa,GAAG,iBAAiB,CAAC;QACxD,kBAAkB,GAAG,CAAC,aAAa,GAAG,aAAa,CAAC,GAAG,iBAAiB,CAAC;QACzE,aAAa,GAAG,aAAa,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AACxC,CAAC","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Internal: sums rate × time step over time samples to get expected photon and electron counts.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\n/** Internal: sums expected counts over time samples. Time steps are in seconds, never normalized weights. */\nexport function sumTemporalEqeRateExpectations(samples: readonly {\n incidentPhotonRatePerSecond: number;\n expectedGeneratedElectronRatePerSecond: number;\n}[], integrationMeasureSeconds: number): { photonCount: number; electronCount: number } {\n let photonCount = 0, electronCount = 0, photonCorrection = 0, electronCorrection = 0;\n/**\n * Separate compensated sums keep small photon and electron contributions from being\n * lost next to large ones. Multiply rates by the time step in seconds, never by a\n * normalized time-average weight, which is a different quantity.\n */\n for (const sample of samples) {\n const photons = sample.incidentPhotonRatePerSecond * integrationMeasureSeconds;\n const electrons = sample.expectedGeneratedElectronRatePerSecond * integrationMeasureSeconds;\n const adjustedPhotons = photons - photonCorrection;\n const nextPhotons = photonCount + adjustedPhotons;\n photonCorrection = (nextPhotons - photonCount) - adjustedPhotons;\n photonCount = nextPhotons;\n const adjustedElectrons = electrons - electronCorrection;\n const nextElectrons = electronCount + adjustedElectrons;\n electronCorrection = (nextElectrons - electronCount) - adjustedElectrons;\n electronCount = nextElectrons;\n }\n return { photonCount, electronCount };\n}\n"]}
|
|
@@ -2,7 +2,7 @@ import { type CalculationResult } from "../core/calculation-result.js";
|
|
|
2
2
|
import { type EvidenceProvenance } from "../core/evidence-provenance.js";
|
|
3
3
|
import type { SensorEqeExposureIntegration } from "./constant-rate-temporal-integration.js";
|
|
4
4
|
import { calculateSensorEqeTemporalExposure, type CalculateSensorEqeTemporalExposureInput } from "./eqe-temporal-exposure.js";
|
|
5
|
-
/** Compact
|
|
5
|
+
/** Compact expected photo signal, before any processing. Being tied to a time window is not evidence that the light was constant. */
|
|
6
6
|
export interface SensorEqeTemporalPhotoSignal extends Omit<SensorEqeExposureIntegration, "kind" | "stationarityProfileId" | "stationarityStatus" | "integrationMethod" | "timeStationarityEstablished" | "timeVaryingSignalIntegrated" | "incidentPhotonRatePerSecond" | "expectedGeneratedElectronRatePerSecond" | "componentEvidence"> {
|
|
7
7
|
kind: "eqe-temporal-photo-signal";
|
|
8
8
|
temporalIntegrationId: string;
|
|
@@ -21,12 +21,12 @@ export interface SensorEqeTemporalPhotoSignal extends Omit<SensorEqeExposureInte
|
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
export type SensorEqePhotoExposure = SensorEqeExposureIntegration | SensorEqeTemporalPhotoSignal;
|
|
24
|
-
/**
|
|
24
|
+
/** Parses a time-resolved photo signal and recomputes its midpoint sums exactly. Declarations do not prove the source is correct. */
|
|
25
25
|
export declare function parseSensorEqeTemporalPhotoSignal(value: unknown): SensorEqeTemporalPhotoSignal;
|
|
26
26
|
/**
|
|
27
|
-
* Re-
|
|
28
|
-
*
|
|
29
|
-
* exposure diagnostics. This does not
|
|
27
|
+
* Re-evaluates the physical input at every time, then commits a compact photo
|
|
28
|
+
* signal. Detailed per-step evidence and uncertainty stay in the returned
|
|
29
|
+
* exposure diagnostics. This does not show that a renderer or source actually ran.
|
|
30
30
|
*/
|
|
31
31
|
export declare function createSensorEqeTemporalPhotoSignal(input: {
|
|
32
32
|
temporalIntegrationId: string;
|
|
@@ -35,4 +35,3 @@ export declare function createSensorEqeTemporalPhotoSignal(input: {
|
|
|
35
35
|
photoSignal: SensorEqeTemporalPhotoSignal;
|
|
36
36
|
exposure: ReturnType<typeof calculateSensorEqeTemporalExposure>;
|
|
37
37
|
}>;
|
|
38
|
-
//# sourceMappingURL=temporal-photo-signal.d.ts.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
3
|
+
* Time-resolved photo signal: a compact record of the expected photon and electron counts for one site
|
|
4
|
+
* over one exposure, with the rate at each midpoint time.
|
|
5
|
+
*
|
|
6
|
+
* Creating it re-evaluates the physical input at every time. Parsing it recomputes the midpoint sums
|
|
7
|
+
* exactly. Neither proves the light source is correct.
|
|
8
8
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
9
9
|
* limits.
|
|
10
10
|
*/
|
|
11
|
-
import { requireAllowlistedRecord, requirePublicOpaqueId } from "../core/record-validation.js";
|
|
11
|
+
import { requireAllowlistedRecord, requirePublicOpaqueId, requireInputKeys } from "../core/record-validation.js";
|
|
12
12
|
import { sumTemporalEqeRateExpectations } from "./temporal-eqe-sum.js";
|
|
13
13
|
import { approximationResult } from "../core/calculation-result.js";
|
|
14
14
|
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
@@ -32,7 +32,7 @@ function finite(value, nonnegative = true) {
|
|
|
32
32
|
}
|
|
33
33
|
return value;
|
|
34
34
|
}
|
|
35
|
-
/**
|
|
35
|
+
/** Parses a time-resolved photo signal and recomputes its midpoint sums exactly. Declarations do not prove the source is correct. */
|
|
36
36
|
export function parseSensorEqeTemporalPhotoSignal(value) {
|
|
37
37
|
const r = record(value, [...trueFields, ...falseFields, "kind", "temporalIntegrationId", "colorSamplingProfileId", "channelId", "site",
|
|
38
38
|
"bindingId", "timeReference", "startOffsetSecondsFromOpeningReference", "endOffsetSecondsFromOpeningReference",
|
|
@@ -82,11 +82,12 @@ export function parseSensorEqeTemporalPhotoSignal(value) {
|
|
|
82
82
|
} } };
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
|
-
* Re-
|
|
86
|
-
*
|
|
87
|
-
* exposure diagnostics. This does not
|
|
85
|
+
* Re-evaluates the physical input at every time, then commits a compact photo
|
|
86
|
+
* signal. Detailed per-step evidence and uncertainty stay in the returned
|
|
87
|
+
* exposure diagnostics. This does not show that a renderer or source actually ran.
|
|
88
88
|
*/
|
|
89
89
|
export function createSensorEqeTemporalPhotoSignal(input) {
|
|
90
|
+
requireInputKeys(input, "createSensorEqeTemporalPhotoSignal", ["temporalIntegrationId", "exposure"]);
|
|
90
91
|
identity(input.temporalIntegrationId);
|
|
91
92
|
const exposure = calculateSensorEqeTemporalExposure(input.exposure), v = exposure.value;
|
|
92
93
|
const p = { kind: "eqe-temporal-photo-signal", temporalIntegrationId: input.temporalIntegrationId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temporal-photo-signal.js","sourceRoot":"","sources":["../../src/sensor/temporal-photo-signal.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"temporal-photo-signal.js","sourceRoot":"","sources":["../../src/sensor/temporal-photo-signal.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Time-resolved photo signal: a compact record of the expected photon and electron counts for one site\n * over one exposure, with the rate at each midpoint time.\n *\n * Creating it re-evaluates the physical input at every time. Parsing it recomputes the midpoint sums\n * exactly. Neither proves the light source is correct.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { requireAllowlistedRecord, requirePublicOpaqueId, requireInputKeys } from \"../core/record-validation.js\";\nimport { sumTemporalEqeRateExpectations } from \"./temporal-eqe-sum.js\";\nimport { approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { parseEvidenceList, type EvidenceProvenance } from \"../core/evidence-provenance.js\";\nimport { freezeOwnedData } from \"../core/owned-data.js\";\nimport type { SensorEqeExposureIntegration } from \"./constant-rate-temporal-integration.js\";\nimport { calculateSensorEqeTemporalExposure, type CalculateSensorEqeTemporalExposureInput } from \"./eqe-temporal-exposure.js\";\n\n/** Compact expected photo signal, before any processing. Being tied to a time window is not evidence that the light was constant. */\nexport interface SensorEqeTemporalPhotoSignal extends Omit<SensorEqeExposureIntegration,\n \"kind\" | \"stationarityProfileId\" | \"stationarityStatus\" | \"integrationMethod\" | \"timeStationarityEstablished\" |\n \"timeVaryingSignalIntegrated\" | \"incidentPhotonRatePerSecond\" | \"expectedGeneratedElectronRatePerSecond\" | \"componentEvidence\"> {\n kind: \"eqe-temporal-photo-signal\";\n temporalIntegrationId: string;\n stationarityProfileId?: never;\n integrationMethod: \"uniform-midpoint-rate-quadrature\";\n timeStationarityEstablished: false;\n timeVaryingSignalIntegrated: true;\n temporalSamples: readonly {\n timeSecondsFromOpeningReference: number;\n incidentPhotonRatePerSecond: number;\n expectedGeneratedElectronRatePerSecond: number;\n }[];\n componentEvidence: {\n temporalResponse: readonly EvidenceProvenance[];\n exposureBinding: SensorEqeExposureIntegration[\"componentEvidence\"][\"exposureBinding\"];\n };\n}\n\nexport type SensorEqePhotoExposure = SensorEqeExposureIntegration | SensorEqeTemporalPhotoSignal;\n\nconst trueFields = [\"temporalIntegrationApplied\", \"exposureDurationApplied\", \"countsAreExpectationValues\"] as const;\nconst falseFields = [\"timeStationarityEstablished\", \"multiFrameSequenceIntegrated\", \"darkChargeIncluded\", \"otherChargeIncluded\",\n \"physicalFullWellAssessmentAuthorized\", \"cameraSaturationAssessmentAuthorized\", \"saturationAssessed\", \"shotNoiseApplied\",\n \"readNoiseApplied\", \"adcQuantizationApplied\", \"rawCodeValueProduced\", \"integerPhotonCountSampled\", \"integerElectronCountSampled\",\n \"chargeCalculated\", \"currentCalculated\"] as const;\nfunction record(value: unknown, keys: readonly string[]): Record<string, unknown> {\n return requireAllowlistedRecord(value, keys, \"Invalid temporal photo-signal fields.\");\n}\nfunction identity(value: unknown): string {\n return requirePublicOpaqueId(value, \"Temporal photo signal requires public identities.\");\n}\nfunction finite(value: unknown, nonnegative = true): number {\n if (typeof value !== \"number\" || !Number.isFinite(value) || (nonnegative && value < 0)) {\n throw new InvalidConfigurationError(\"Temporal photo-signal numeric quantity is invalid.\");\n }\n return value;\n}\n/** Parses a time-resolved photo signal and recomputes its midpoint sums exactly. Declarations do not prove the source is correct. */\nexport function parseSensorEqeTemporalPhotoSignal(value: unknown): SensorEqeTemporalPhotoSignal {\n const r = record(value, [...trueFields, ...falseFields, \"kind\", \"temporalIntegrationId\", \"colorSamplingProfileId\", \"channelId\", \"site\",\n \"bindingId\", \"timeReference\", \"startOffsetSecondsFromOpeningReference\", \"endOffsetSecondsFromOpeningReference\",\n \"localExposureDurationSeconds\", \"integrationMethod\", \"timeVaryingSignalIntegrated\", \"accumulatedSignalCompleteness\",\n \"expectedIncidentPhotonCount\", \"expectedGeneratedElectronCount\", \"temporalSamples\", \"componentEvidence\"]);\n if (r.kind !== \"eqe-temporal-photo-signal\" || r.integrationMethod !== \"uniform-midpoint-rate-quadrature\" ||\n r.timeReference !== \"first-opening-boundary-phase\" || r.timeVaryingSignalIntegrated !== true ||\n r.accumulatedSignalCompleteness !== \"photo-signal-only\" || trueFields.some(k => r[k] !== true) || falseFields.some(k => r[k] !== false)) {\n throw new InvalidConfigurationError(\"Temporal photo signal requires untreated midpoint-integrated EQE expectations.\");\n }\n const site = record(r.site, [\"x\", \"y\"]);\n for (const v of [site.x, site.y]) if (!Number.isSafeInteger(v) || (v as number) < 0) throw new InvalidConfigurationError(\"Invalid temporal photo site.\");\n const start = finite(r.startOffsetSecondsFromOpeningReference), end = finite(r.endOffsetSecondsFromOpeningReference);\n const duration = finite(r.localExposureDurationSeconds);\n if (!(end > start) || duration !== end-start) throw new InvalidConfigurationError(\"Temporal photo signal requires exact local duration.\");\n if (!Array.isArray(r.temporalSamples) || r.temporalSamples.length < 1 || r.temporalSamples.length > 256) {\n throw new InvalidConfigurationError(\"Temporal photo signal requires 1 through 256 dense midpoint samples.\");\n }\n const measure = duration / r.temporalSamples.length;\n let previous = -Infinity;\n const temporalSamples = Array.from(r.temporalSamples, (v, i) => {\n const s = record(v, [\"timeSecondsFromOpeningReference\", \"incidentPhotonRatePerSecond\", \"expectedGeneratedElectronRatePerSecond\"]);\n const time = finite(s.timeSecondsFromOpeningReference), pr = finite(s.incidentPhotonRatePerSecond), er = finite(s.expectedGeneratedElectronRatePerSecond);\n if (time !== start + (i+0.5)*measure || !(time > start && time > previous && time < end) || er > pr) {\n throw new InvalidConfigurationError(\"Temporal photo midpoint time or EQE rate domain is invalid.\");\n }\n previous = time;\n return { timeSecondsFromOpeningReference: time, incidentPhotonRatePerSecond: pr, expectedGeneratedElectronRatePerSecond: er };\n });\n const { photonCount: photons, electronCount: electrons } = sumTemporalEqeRateExpectations(temporalSamples, measure);\n if (!Number.isFinite(photons) || !Number.isFinite(electrons) ||\n finite(r.expectedIncidentPhotonCount) !== photons || finite(r.expectedGeneratedElectronCount) !== electrons) {\n throw new InvalidConfigurationError(\"Temporal photo counts do not match the exact midpoint rate integral.\");\n }\n const e = record(r.componentEvidence, [\"temporalResponse\", \"exposureBinding\"]);\n const b = record(e.exposureBinding, [\"binding\", \"colorSamplingProfile\", \"nominalExposureDuration\", \"openingBoundary\", \"closingBoundary\"]);\n const optional = (v: unknown): readonly EvidenceProvenance[] => Array.isArray(v) && v.length === 0 ? [] : parseEvidenceList(v, \"temporalExposureEvidence\");\n return { ...r, colorSamplingProfileId: identity(r.colorSamplingProfileId), channelId: identity(r.channelId),\n bindingId: identity(r.bindingId), temporalIntegrationId: identity(r.temporalIntegrationId), site: { x: site.x as number, y: site.y as number }, temporalSamples,\n componentEvidence: { temporalResponse: parseEvidenceList(e.temporalResponse, \"temporalResponse\"), exposureBinding: {\n binding: parseEvidenceList(b.binding, \"binding\"), colorSamplingProfile: parseEvidenceList(b.colorSamplingProfile, \"colorSamplingProfile\"),\n nominalExposureDuration: parseEvidenceList(b.nominalExposureDuration, \"nominalExposureDuration\"),\n openingBoundary: optional(b.openingBoundary), closingBoundary: optional(b.closingBoundary) } }\n } as unknown as SensorEqeTemporalPhotoSignal;\n}\n\n/**\n * Re-evaluates the physical input at every time, then commits a compact photo\n * signal. Detailed per-step evidence and uncertainty stay in the returned\n * exposure diagnostics. This does not show that a renderer or source actually ran.\n */\nexport function createSensorEqeTemporalPhotoSignal(input: {\n temporalIntegrationId: string;\n exposure: CalculateSensorEqeTemporalExposureInput;\n}): CalculationResult<{ photoSignal: SensorEqeTemporalPhotoSignal; exposure: ReturnType<typeof calculateSensorEqeTemporalExposure> }> {\n requireInputKeys(input, \"createSensorEqeTemporalPhotoSignal\", [\"temporalIntegrationId\", \"exposure\"]);\n identity(input.temporalIntegrationId);\n const exposure = calculateSensorEqeTemporalExposure(input.exposure), v = exposure.value;\n const p = { kind: \"eqe-temporal-photo-signal\", temporalIntegrationId: input.temporalIntegrationId,\n colorSamplingProfileId: v.colorSamplingProfileId, channelId: v.channelId, site: v.site, bindingId: v.bindingId,\n timeReference: v.timeReference, startOffsetSecondsFromOpeningReference: v.startOffsetSecondsFromOpeningReference,\n endOffsetSecondsFromOpeningReference: v.endOffsetSecondsFromOpeningReference, localExposureDurationSeconds: v.localExposureDurationSeconds,\n expectedIncidentPhotonCount: v.expectedIncidentPhotonCount, expectedGeneratedElectronCount: v.expectedGeneratedElectronCount,\n integrationMethod: v.integrationMethod, timeVaryingSignalIntegrated: true, accumulatedSignalCompleteness: \"photo-signal-only\",\n temporalSamples: v.samples.map(s => ({ timeSecondsFromOpeningReference: s.timeSecondsFromOpeningReference,\n incidentPhotonRatePerSecond: s.stages.electronRate.value.incidentPhotonRatePerSecond,\n expectedGeneratedElectronRatePerSecond: s.stages.electronRate.value.expectedGeneratedElectronRatePerSecond })),\n componentEvidence: { temporalResponse: v.samples[0]!.stages.spectralQuadrature.value.componentEvidence.profile,\n exposureBinding: v.samples[0]!.stages.exposureBinding.value.componentEvidence },\n ...Object.fromEntries(trueFields.map(k => [k, true])), ...Object.fromEntries(falseFields.map(k => [k, false])) };\n const photoSignal = freezeOwnedData(parseSensorEqeTemporalPhotoSignal(p));\n return approximationResult({ photoSignal, exposure }, \"sensor-eqe-temporal-photo-signal\", \"0.1.0\", [\n \"Photo signal commits explicit midpoint EQE rate expectations, not stationarity or source-truth evidence.\",\n \"Child diagnostics retain separate validity, evidence and uncombined uncertainty; no convergence bound is inferred.\"\n ]);\n}\n"]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
/** Internal
|
|
1
|
+
/** Internal: checks time-sample identities and total work up front. Shared by optical and irradiance inputs. */
|
|
2
2
|
export declare function bindSensorTemporalSamples<T extends {
|
|
3
3
|
temporalSampleIndex: number;
|
|
4
4
|
timeSecondsFromOpeningReference: number;
|
|
5
5
|
}>(samples: readonly T[], nodes: (sample: T) => readonly unknown[]): readonly T[];
|
|
6
|
-
//# sourceMappingURL=temporal-sample-binding.d.ts.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Internal: checks time-sample identities and the total amount of work before any calculation.
|
|
4
|
+
* Shared by the optical and irradiance inputs.
|
|
5
5
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
6
6
|
* limits.
|
|
7
7
|
*/
|
|
8
8
|
import { InvalidScientificInputError } from "../core/validation.js";
|
|
9
|
-
/** Internal
|
|
9
|
+
/** Internal: checks time-sample identities and total work up front. Shared by optical and irradiance inputs. */
|
|
10
10
|
export function bindSensorTemporalSamples(samples, nodes) {
|
|
11
11
|
const count = samples?.length;
|
|
12
12
|
if (!Array.isArray(samples) || !Number.isSafeInteger(count) || count < 1 || count > 256) {
|