@photivra/engine 1.5.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +414 -6
- package/CITATION.cff +1 -1
- package/NODE_SUPPORT.md +64 -12
- package/README.md +301 -182
- package/SECURITY.md +37 -28
- package/THIRD_PARTY.md +148 -4
- package/dist/camera/equivalent-focal-length.d.ts +13 -14
- package/dist/camera/equivalent-focal-length.js +15 -13
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +30 -19
- package/dist/camera/field-of-view.js +67 -18
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/lens-projection.d.ts +170 -0
- package/dist/camera/lens-projection.js +444 -0
- package/dist/camera/lens-projection.js.map +1 -0
- package/dist/camera/projected-object-size.d.ts +10 -11
- package/dist/camera/projected-object-size.js +12 -10
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +9 -10
- package/dist/capture/capture-export-metadata.js +8 -5
- package/dist/capture/capture-export-metadata.js.map +1 -1
- package/dist/capture/dng-import.d.ts +91 -0
- package/dist/capture/dng-import.js +343 -0
- package/dist/capture/dng-import.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +37 -17
- package/dist/capture/environment-raw-producer.js +43 -19
- package/dist/capture/environment-raw-producer.js.map +1 -1
- package/dist/capture/export-jpeg.d.ts +35 -4
- package/dist/capture/export-jpeg.js +133 -47
- package/dist/capture/export-jpeg.js.map +1 -1
- package/dist/capture/export-tiff.d.ts +48 -24
- package/dist/capture/export-tiff.js +91 -31
- package/dist/capture/export-tiff.js.map +1 -1
- package/dist/capture/focus-control.d.ts +42 -65
- package/dist/capture/focus-control.js +56 -75
- package/dist/capture/focus-control.js.map +1 -1
- package/dist/capture/host-yield-cadence.d.ts +25 -0
- package/dist/capture/host-yield-cadence.js +25 -0
- package/dist/capture/host-yield-cadence.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +14 -12
- package/dist/capture/linear-encoding.js +14 -13
- package/dist/capture/linear-encoding.js.map +1 -1
- package/dist/capture/lossless-jpeg.d.ts +27 -0
- package/dist/capture/lossless-jpeg.js +237 -0
- package/dist/capture/lossless-jpeg.js.map +1 -0
- package/dist/capture/native-environment-lean.d.ts +227 -0
- package/dist/capture/native-environment-lean.js +974 -0
- package/dist/capture/native-environment-lean.js.map +1 -0
- package/dist/capture/native-environment-optical-stage.d.ts +97 -0
- package/dist/capture/native-environment-optical-stage.js +340 -0
- package/dist/capture/native-environment-optical-stage.js.map +1 -0
- package/dist/capture/native-environment-raw.d.ts +140 -6
- package/dist/capture/native-environment-raw.js +435 -34
- package/dist/capture/native-environment-raw.js.map +1 -1
- package/dist/capture/native-raw-development.d.ts +116 -9
- package/dist/capture/native-raw-development.js +221 -62
- package/dist/capture/native-raw-development.js.map +1 -1
- package/dist/capture/native-raw-dng.d.ts +60 -0
- package/dist/capture/native-raw-dng.js +167 -0
- package/dist/capture/native-raw-dng.js.map +1 -0
- package/dist/capture/native-raw.d.ts +65 -12
- package/dist/capture/native-raw.js +81 -19
- package/dist/capture/native-raw.js.map +1 -1
- package/dist/capture/packed-sensor-raw.d.ts +160 -0
- package/dist/capture/packed-sensor-raw.js +221 -0
- package/dist/capture/packed-sensor-raw.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +58 -35
- package/dist/capture/photographic-export.js +177 -70
- package/dist/capture/photographic-export.js.map +1 -1
- package/dist/capture/raw-development-kernel.d.ts +52 -0
- package/dist/capture/raw-development-kernel.js +88 -0
- package/dist/capture/raw-development-kernel.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +7 -7
- package/dist/capture/raw-frame-limits.js +7 -6
- package/dist/capture/raw-frame-limits.js.map +1 -1
- package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
- package/dist/capture/raw-frame-reconstruction.js +9 -8
- package/dist/capture/raw-frame-reconstruction.js.map +1 -1
- package/dist/capture/raw-white-level.d.ts +55 -0
- package/dist/capture/raw-white-level.js +165 -0
- package/dist/capture/raw-white-level.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +5 -7
- package/dist/capture/release-sequence.js +15 -13
- package/dist/capture/release-sequence.js.map +1 -1
- package/dist/capture/sensor-raw-frame.d.ts +5 -6
- package/dist/capture/sensor-raw-frame.js +26 -9
- package/dist/capture/sensor-raw-frame.js.map +1 -1
- package/dist/capture/sensor-raw-producer.d.ts +21 -13
- package/dist/capture/sensor-raw-producer.js +86 -25
- package/dist/capture/sensor-raw-producer.js.map +1 -1
- package/dist/capture/simulated-capture.d.ts +15 -16
- package/dist/capture/simulated-capture.js +22 -12
- package/dist/capture/simulated-capture.js.map +1 -1
- package/dist/color/camera-color-matrix.d.ts +69 -0
- package/dist/color/camera-color-matrix.js +132 -0
- package/dist/color/camera-color-matrix.js.map +1 -0
- package/dist/color/capture-color.d.ts +17 -10
- package/dist/color/capture-color.js +50 -17
- package/dist/color/capture-color.js.map +1 -1
- package/dist/color/chromatic-adaptation.d.ts +63 -0
- package/dist/color/chromatic-adaptation.js +91 -0
- package/dist/color/chromatic-adaptation.js.map +1 -0
- package/dist/color/color-difference.d.ts +104 -0
- package/dist/color/color-difference.js +205 -0
- package/dist/color/color-difference.js.map +1 -0
- package/dist/color/color-matching-functions.d.ts +168 -0
- package/dist/color/color-matching-functions.js +309 -0
- package/dist/color/color-matching-functions.js.map +1 -0
- package/dist/color/colorimetry-math.d.ts +52 -0
- package/dist/color/colorimetry-math.js +144 -0
- package/dist/color/colorimetry-math.js.map +1 -0
- package/dist/color/gamut-mapping.d.ts +54 -0
- package/dist/color/gamut-mapping.js +107 -0
- package/dist/color/gamut-mapping.js.map +1 -0
- package/dist/color/illuminants.d.ts +182 -0
- package/dist/color/illuminants.js +434 -0
- package/dist/color/illuminants.js.map +1 -0
- package/dist/color/rgb-color-spaces.d.ts +79 -0
- package/dist/color/rgb-color-spaces.js +115 -0
- package/dist/color/rgb-color-spaces.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +33 -11
- package/dist/color/sensor-color-development.js +104 -30
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/color/srgb-icc.d.ts +9 -2
- package/dist/color/srgb-icc.js +16 -5
- package/dist/color/srgb-icc.js.map +1 -1
- package/dist/color/srgb-transfer.d.ts +1 -2
- package/dist/color/srgb-transfer.js +1 -1
- package/dist/color/srgb-transfer.js.map +1 -1
- package/dist/color/white-balance.d.ts +68 -19
- package/dist/color/white-balance.js +168 -35
- package/dist/color/white-balance.js.map +1 -1
- package/dist/composition/image-formation-plan.d.ts +152 -128
- package/dist/composition/image-formation-plan.js +292 -138
- package/dist/composition/image-formation-plan.js.map +1 -1
- package/dist/composition/plan-consumer.d.ts +6 -7
- package/dist/composition/plan-consumer.js +14 -11
- package/dist/composition/plan-consumer.js.map +1 -1
- package/dist/core/calculation-result.d.ts +21 -14
- package/dist/core/calculation-result.js +209 -11
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +13 -8
- package/dist/core/canonical-json.js +34 -15
- package/dist/core/canonical-json.js.map +1 -1
- package/dist/core/configuration-error.d.ts +5 -4
- package/dist/core/configuration-error.js +5 -3
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +12 -12
- package/dist/core/evidence-provenance.js +10 -9
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +11 -10
- package/dist/core/image-formation.js +11 -9
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +9 -17
- package/dist/core/owned-data.js +9 -16
- package/dist/core/owned-data.js.map +1 -1
- package/dist/core/portable-math.d.ts +15 -0
- package/dist/core/portable-math.js +56 -0
- package/dist/core/portable-math.js.map +1 -0
- package/dist/core/record-validation.d.ts +48 -9
- package/dist/core/record-validation.js +93 -19
- package/dist/core/record-validation.js.map +1 -1
- package/dist/core/scientific-assurance.d.ts +16 -14
- package/dist/core/scientific-assurance.js +22 -18
- package/dist/core/scientific-assurance.js.map +1 -1
- package/dist/core/spectral-composition.d.ts +13 -14
- package/dist/core/spectral-composition.js +30 -27
- package/dist/core/spectral-composition.js.map +1 -1
- package/dist/core/spectral.d.ts +5 -6
- package/dist/core/spectral.js +9 -7
- package/dist/core/spectral.js.map +1 -1
- package/dist/core/validation.d.ts +3 -6
- package/dist/core/validation.js +3 -5
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +6 -6
- package/dist/core/version.js +6 -5
- package/dist/core/version.js.map +1 -1
- package/dist/equipment/exposure-capabilities.d.ts +10 -10
- package/dist/equipment/exposure-capabilities.js +40 -30
- package/dist/equipment/exposure-capabilities.js.map +1 -1
- package/dist/equipment/generic-tier-assets.d.ts +13 -6
- package/dist/equipment/generic-tier-assets.js +34 -15
- package/dist/equipment/generic-tier-assets.js.map +1 -1
- package/dist/equipment/generic-tier-presets.d.ts +5 -6
- package/dist/equipment/generic-tier-presets.js +15 -13
- package/dist/equipment/generic-tier-presets.js.map +1 -1
- package/dist/equipment/iso-capabilities.d.ts +21 -22
- package/dist/equipment/iso-capabilities.js +49 -44
- package/dist/equipment/iso-capabilities.js.map +1 -1
- package/dist/equipment/metering-capabilities.d.ts +5 -6
- package/dist/equipment/metering-capabilities.js +22 -19
- package/dist/equipment/metering-capabilities.js.map +1 -1
- package/dist/equipment/release-capabilities.d.ts +3 -4
- package/dist/equipment/release-capabilities.js +18 -14
- package/dist/equipment/release-capabilities.js.map +1 -1
- package/dist/exposure/exposure-duration-control.d.ts +19 -17
- package/dist/exposure/exposure-duration-control.js +27 -23
- package/dist/exposure/exposure-duration-control.js.map +1 -1
- package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
- package/dist/exposure/exposure-mode-resolver.js +127 -82
- package/dist/exposure/exposure-mode-resolver.js.map +1 -1
- package/dist/exposure/exposure.d.ts +17 -16
- package/dist/exposure/exposure.js +22 -15
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash-ttl.d.ts +135 -0
- package/dist/exposure/flash-ttl.js +193 -0
- package/dist/exposure/flash-ttl.js.map +1 -0
- package/dist/exposure/flash.d.ts +144 -36
- package/dist/exposure/flash.js +259 -59
- package/dist/exposure/flash.js.map +1 -1
- package/dist/exposure/metering-scene-radiance.d.ts +10 -10
- package/dist/exposure/metering-scene-radiance.js +42 -23
- package/dist/exposure/metering-scene-radiance.js.map +1 -1
- package/dist/exposure/metering-target.d.ts +8 -8
- package/dist/exposure/metering-target.js +30 -20
- package/dist/exposure/metering-target.js.map +1 -1
- package/dist/exposure/metering-temporal.d.ts +16 -15
- package/dist/exposure/metering-temporal.js +41 -19
- package/dist/exposure/metering-temporal.js.map +1 -1
- package/dist/exposure/metering.d.ts +64 -17
- package/dist/exposure/metering.js +159 -30
- package/dist/exposure/metering.js.map +1 -1
- package/dist/exposure/program-line.d.ts +5 -5
- package/dist/exposure/program-line.js +20 -13
- package/dist/exposure/program-line.js.map +1 -1
- package/dist/facade/camera-preset.d.ts +8 -0
- package/dist/facade/camera-preset.js +102 -0
- package/dist/facade/camera-preset.js.map +1 -0
- package/dist/facade/chart-radiance-batch.d.ts +57 -0
- package/dist/facade/chart-radiance-batch.js +121 -0
- package/dist/facade/chart-radiance-batch.js.map +1 -0
- package/dist/facade/chart-scenes.d.ts +177 -0
- package/dist/facade/chart-scenes.js +232 -0
- package/dist/facade/chart-scenes.js.map +1 -0
- package/dist/facade/diffraction-provider.d.ts +30 -0
- package/dist/facade/diffraction-provider.js +127 -0
- package/dist/facade/diffraction-provider.js.map +1 -0
- package/dist/facade/host-yield.d.ts +7 -0
- package/dist/facade/host-yield.js +19 -0
- package/dist/facade/host-yield.js.map +1 -0
- package/dist/facade/scene-radiance.d.ts +117 -0
- package/dist/facade/scene-radiance.js +205 -0
- package/dist/facade/scene-radiance.js.map +1 -0
- package/dist/facade/simulate-capture.d.ts +363 -0
- package/dist/facade/simulate-capture.js +1281 -0
- package/dist/facade/simulate-capture.js.map +1 -0
- package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
- package/dist/gpu/chart-radiance-gpu.js +176 -0
- package/dist/gpu/chart-radiance-gpu.js.map +1 -0
- package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
- package/dist/gpu/image-kernel-accelerator.js +720 -0
- package/dist/gpu/image-kernel-accelerator.js.map +1 -0
- package/dist/gpu/image-kernel-execution.d.ts +92 -0
- package/dist/gpu/image-kernel-execution.js +84 -0
- package/dist/gpu/image-kernel-execution.js.map +1 -0
- package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
- package/dist/gpu/sensor-stage-gpu.js +317 -0
- package/dist/gpu/sensor-stage-gpu.js.map +1 -0
- package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
- package/dist/gpu/temporal-sum-gpu.js +150 -0
- package/dist/gpu/temporal-sum-gpu.js.map +1 -0
- package/dist/gpu/webgpu-runtime.d.ts +63 -0
- package/dist/gpu/webgpu-runtime.js +215 -0
- package/dist/gpu/webgpu-runtime.js.map +1 -0
- package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
- package/dist/gpu/wgsl-chart-kernel.js +165 -0
- package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
- package/dist/gpu/wgsl-kernels.d.ts +53 -0
- package/dist/gpu/wgsl-kernels.js +365 -0
- package/dist/gpu/wgsl-kernels.js.map +1 -0
- package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
- package/dist/gpu/wgsl-sensor-kernel.js +409 -0
- package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
- package/dist/index.d.ts +91 -25
- package/dist/index.js +60 -15
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +92 -40
- package/dist/motion/camera-rotation.js +84 -47
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
- package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
- package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
- package/dist/motion/capture-rotation-trajectory.js +36 -26
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
- package/dist/motion/extended-object-projection.d.ts +19 -16
- package/dist/motion/extended-object-projection.js +38 -18
- package/dist/motion/extended-object-projection.js.map +1 -1
- package/dist/motion/projected-motion.d.ts +18 -17
- package/dist/motion/projected-motion.js +25 -17
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/motion/temporal-exposure-sum.d.ts +55 -0
- package/dist/motion/temporal-exposure-sum.js +141 -0
- package/dist/motion/temporal-exposure-sum.js.map +1 -0
- package/dist/motion/video-sequence.d.ts +111 -0
- package/dist/motion/video-sequence.js +179 -0
- package/dist/motion/video-sequence.js.map +1 -0
- package/dist/optics/aperture.d.ts +14 -15
- package/dist/optics/aperture.js +13 -11
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/atmospheric-haze.d.ts +83 -0
- package/dist/optics/atmospheric-haze.js +113 -0
- package/dist/optics/atmospheric-haze.js.map +1 -0
- package/dist/optics/brown-conrady-distortion.d.ts +116 -0
- package/dist/optics/brown-conrady-distortion.js +291 -0
- package/dist/optics/brown-conrady-distortion.js.map +1 -0
- package/dist/optics/circle-of-confusion.d.ts +10 -10
- package/dist/optics/circle-of-confusion.js +15 -11
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +64 -33
- package/dist/optics/complex-pupil-psf.js +190 -98
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/optics/depth-of-field.d.ts +25 -15
- package/dist/optics/depth-of-field.js +67 -27
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction-psf-profile.d.ts +118 -0
- package/dist/optics/diffraction-psf-profile.js +252 -0
- package/dist/optics/diffraction-psf-profile.js.map +1 -0
- package/dist/optics/diffraction.d.ts +14 -13
- package/dist/optics/diffraction.js +14 -10
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +88 -27
- package/dist/optics/focus-breathing.js +114 -23
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +18 -18
- package/dist/optics/focus-state.js +21 -15
- package/dist/optics/focus-state.js.map +1 -1
- package/dist/optics/front-of-lens-filter.d.ts +45 -14
- package/dist/optics/front-of-lens-filter.js +259 -88
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/illumination-vignetting.d.ts +16 -17
- package/dist/optics/illumination-vignetting.js +40 -17
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/irradiance-convolution.d.ts +59 -0
- package/dist/optics/irradiance-convolution.js +138 -0
- package/dist/optics/irradiance-convolution.js.map +1 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
- package/dist/optics/lateral-chromatic-aberration.js +33 -23
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-kernels.d.ts +89 -0
- package/dist/optics/lens-psf-kernels.js +175 -0
- package/dist/optics/lens-psf-kernels.js.map +1 -0
- package/dist/optics/lens-psf-profile.d.ts +78 -46
- package/dist/optics/lens-psf-profile.js +335 -124
- package/dist/optics/lens-psf-profile.js.map +1 -1
- package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
- package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
- package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +80 -23
- package/dist/optics/polygon-diffraction.js +130 -25
- package/dist/optics/polygon-diffraction.js.map +1 -1
- package/dist/optics/profile-contract.d.ts +5 -6
- package/dist/optics/profile-contract.js +14 -11
- package/dist/optics/profile-contract.js.map +1 -1
- package/dist/optics/psf-foundation.d.ts +23 -23
- package/dist/optics/psf-foundation.js +24 -21
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/pupil-vignetting.d.ts +118 -0
- package/dist/optics/pupil-vignetting.js +264 -0
- package/dist/optics/pupil-vignetting.js.map +1 -0
- package/dist/optics/radial-distortion.d.ts +34 -33
- package/dist/optics/radial-distortion.js +37 -30
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
- package/dist/optics/scene-to-sensor-irradiance.js +73 -45
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
- package/dist/optics/scene-to-sensor-quadrature.js +16 -11
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
- package/dist/optics/sensor-aperture-rays.d.ts +20 -4
- package/dist/optics/sensor-aperture-rays.js +32 -14
- package/dist/optics/sensor-aperture-rays.js.map +1 -1
- package/dist/optics/sensor-environment-query.d.ts +81 -16
- package/dist/optics/sensor-environment-query.js +145 -12
- package/dist/optics/sensor-environment-query.js.map +1 -1
- package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
- package/dist/optics/sensor-psf-quadrature.js +18 -11
- package/dist/optics/sensor-psf-quadrature.js.map +1 -1
- package/dist/optics/sensor-psf-support.d.ts +8 -6
- package/dist/optics/sensor-psf-support.js +8 -5
- package/dist/optics/sensor-psf-support.js.map +1 -1
- package/dist/optics/stray-light.d.ts +22 -19
- package/dist/optics/stray-light.js +18 -12
- package/dist/optics/stray-light.js.map +1 -1
- package/dist/optics/thin-lens.d.ts +10 -9
- package/dist/optics/thin-lens.js +12 -8
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/optics/zernike-wavefront.d.ts +154 -0
- package/dist/optics/zernike-wavefront.js +352 -0
- package/dist/optics/zernike-wavefront.js.map +1 -0
- package/dist/output/capture-corrected-sdr.d.ts +16 -8
- package/dist/output/capture-corrected-sdr.js +16 -8
- package/dist/output/capture-corrected-sdr.js.map +1 -1
- package/dist/output/capture-geometry.d.ts +34 -36
- package/dist/output/capture-geometry.js +52 -32
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +7 -6
- package/dist/output/capture-sdr.js +11 -8
- package/dist/output/capture-sdr.js.map +1 -1
- package/dist/output/crop.d.ts +22 -6
- package/dist/output/crop.js +40 -6
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +60 -23
- package/dist/output/geometric-transforms.js +111 -24
- package/dist/output/geometric-transforms.js.map +1 -1
- package/dist/output/lens-corrections.d.ts +27 -19
- package/dist/output/lens-corrections.js +29 -13
- package/dist/output/lens-corrections.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +71 -16
- package/dist/output/native-capture-sdr.js +190 -33
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/png-encoder.d.ts +65 -0
- package/dist/output/png-encoder.js +461 -0
- package/dist/output/png-encoder.js.map +1 -0
- package/dist/output/print-contrast-reference.d.ts +10 -9
- package/dist/output/print-contrast-reference.js +10 -8
- package/dist/output/print-contrast-reference.js.map +1 -1
- package/dist/output/print-detail.d.ts +18 -17
- package/dist/output/print-detail.js +12 -10
- package/dist/output/print-detail.js.map +1 -1
- package/dist/output/print-jpeg.d.ts +26 -5
- package/dist/output/print-jpeg.js +117 -50
- package/dist/output/print-jpeg.js.map +1 -1
- package/dist/output/print-plan.d.ts +19 -19
- package/dist/output/print-plan.js +11 -10
- package/dist/output/print-plan.js.map +1 -1
- package/dist/output/print-region-statistics.d.ts +14 -15
- package/dist/output/print-region-statistics.js +11 -11
- package/dist/output/print-region-statistics.js.map +1 -1
- package/dist/output/sdr-rendering.d.ts +48 -10
- package/dist/output/sdr-rendering.js +114 -25
- package/dist/output/sdr-rendering.js.map +1 -1
- package/dist/output/subject-framing-crop.d.ts +6 -10
- package/dist/output/subject-framing-crop.js +23 -13
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/processing/demosaic.d.ts +90 -0
- package/dist/processing/demosaic.js +275 -0
- package/dist/processing/demosaic.js.map +1 -0
- package/dist/processing/denoise.d.ts +68 -0
- package/dist/processing/denoise.js +214 -0
- package/dist/processing/denoise.js.map +1 -0
- package/dist/processing/focus-stacking.d.ts +17 -0
- package/dist/processing/focus-stacking.js +80 -0
- package/dist/processing/focus-stacking.js.map +1 -0
- package/dist/processing/hdr.d.ts +54 -0
- package/dist/processing/hdr.js +172 -0
- package/dist/processing/hdr.js.map +1 -0
- package/dist/processing/image-ops.d.ts +66 -0
- package/dist/processing/image-ops.js +192 -0
- package/dist/processing/image-ops.js.map +1 -0
- package/dist/processing/panorama.d.ts +51 -0
- package/dist/processing/panorama.js +305 -0
- package/dist/processing/panorama.js.map +1 -0
- package/dist/processing/processing-task.d.ts +85 -0
- package/dist/processing/processing-task.js +164 -0
- package/dist/processing/processing-task.js.map +1 -0
- package/dist/processing/tone-mapping.d.ts +69 -0
- package/dist/processing/tone-mapping.js +310 -0
- package/dist/processing/tone-mapping.js.map +1 -0
- package/dist/schema/camera.d.ts +5 -4
- package/dist/schema/illumination-spectral.d.ts +13 -19
- package/dist/schema/illumination-spectral.js +23 -19
- package/dist/schema/illumination-spectral.js.map +1 -1
- package/dist/schema/illumination-temporal.d.ts +12 -15
- package/dist/schema/illumination-temporal.js +43 -28
- package/dist/schema/illumination-temporal.js.map +1 -1
- package/dist/schema/illumination.d.ts +5 -4
- package/dist/schema/illumination.js +55 -20
- package/dist/schema/illumination.js.map +1 -1
- package/dist/schema/scene-radiance-temporal.d.ts +9 -11
- package/dist/schema/scene-radiance-temporal.js +26 -23
- package/dist/schema/scene-radiance-temporal.js.map +1 -1
- package/dist/schema/scene-radiance.d.ts +17 -17
- package/dist/schema/scene-radiance.js +56 -34
- package/dist/schema/scene-radiance.js.map +1 -1
- package/dist/schema/scene.d.ts +14 -13
- package/dist/schema/validation.d.ts +0 -1
- package/dist/schema/validation.js +17 -15
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +45 -64
- package/dist/sensor/accumulated-charge.js +41 -47
- package/dist/sensor/accumulated-charge.js.map +1 -1
- package/dist/sensor/architecture.d.ts +22 -25
- package/dist/sensor/architecture.js +17 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
- package/dist/sensor/camera-saturation-capacity.js +36 -34
- package/dist/sensor/camera-saturation-capacity.js.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
- package/dist/sensor/capture-color-sampling-binding.js +39 -41
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +8 -9
- package/dist/sensor/capture-mode-timing.js +24 -21
- package/dist/sensor/capture-mode-timing.js.map +1 -1
- package/dist/sensor/capture-mode.d.ts +28 -30
- package/dist/sensor/capture-mode.js +33 -31
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts +30 -33
- package/dist/sensor/color-sampling.js +32 -37
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
- package/dist/sensor/constant-rate-temporal-integration.js +28 -26
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
- package/dist/sensor/dark-current.d.ts +53 -49
- package/dist/sensor/dark-current.js +87 -46
- package/dist/sensor/dark-current.js.map +1 -1
- package/dist/sensor/environment-photo-signal.d.ts +71 -30
- package/dist/sensor/environment-photo-signal.js +127 -46
- package/dist/sensor/environment-photo-signal.js.map +1 -1
- package/dist/sensor/eqe-electron-rate.d.ts +14 -13
- package/dist/sensor/eqe-electron-rate.js +34 -14
- package/dist/sensor/eqe-electron-rate.js.map +1 -1
- package/dist/sensor/eqe-local-exposure.d.ts +24 -24
- package/dist/sensor/eqe-local-exposure.js +15 -11
- package/dist/sensor/eqe-local-exposure.js.map +1 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
- package/dist/sensor/eqe-temporal-exposure.js +15 -10
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/exposure-window.d.ts +48 -34
- package/dist/sensor/exposure-window.js +77 -36
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
- package/dist/sensor/fixed-pattern-noise.js +166 -0
- package/dist/sensor/fixed-pattern-noise.js.map +1 -0
- package/dist/sensor/iso-gain.d.ts +44 -0
- package/dist/sensor/iso-gain.js +119 -0
- package/dist/sensor/iso-gain.js.map +1 -0
- package/dist/sensor/iso-signal-chain.d.ts +25 -48
- package/dist/sensor/iso-signal-chain.js +52 -66
- package/dist/sensor/iso-signal-chain.js.map +1 -1
- package/dist/sensor/local-exposure-binding.d.ts +21 -21
- package/dist/sensor/local-exposure-binding.js +22 -18
- package/dist/sensor/local-exposure-binding.js.map +1 -1
- package/dist/sensor/optical-stack.d.ts +36 -40
- package/dist/sensor/optical-stack.js +34 -37
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +22 -28
- package/dist/sensor/photon-energy.js +42 -34
- package/dist/sensor/photon-energy.js.map +1 -1
- package/dist/sensor/physical-charge-capacity.d.ts +20 -30
- package/dist/sensor/physical-charge-capacity.js +35 -36
- package/dist/sensor/physical-charge-capacity.js.map +1 -1
- package/dist/sensor/pixel-pitch.d.ts +2 -3
- package/dist/sensor/pixel-pitch.js +4 -2
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +13 -15
- package/dist/sensor/radiometry-readiness.js +20 -17
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +173 -83
- package/dist/sensor/raw-readout.js +425 -160
- package/dist/sensor/raw-readout.js.map +1 -1
- package/dist/sensor/raw-reconstruction.d.ts +112 -44
- package/dist/sensor/raw-reconstruction.js +200 -47
- package/dist/sensor/raw-reconstruction.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
- package/dist/sensor/readout-exposure-linkage.js +125 -27
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +43 -44
- package/dist/sensor/readout-timing.js +38 -30
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +21 -28
- package/dist/sensor/response-application-compatibility.js +35 -34
- package/dist/sensor/response-application-compatibility.js.map +1 -1
- package/dist/sensor/response-operating-range.d.ts +26 -35
- package/dist/sensor/response-operating-range.js +40 -39
- package/dist/sensor/response-operating-range.js.map +1 -1
- package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
- package/dist/sensor/responsivity-photocurrent.js +57 -40
- package/dist/sensor/responsivity-photocurrent.js.map +1 -1
- package/dist/sensor/sampling-aperture.d.ts +21 -25
- package/dist/sensor/sampling-aperture.js +29 -28
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
- package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/sensor-geometry.d.ts +28 -32
- package/dist/sensor/sensor-geometry.js +35 -20
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +14 -16
- package/dist/sensor/signal-noise.js +15 -13
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
- package/dist/sensor/spatial-sample-reduction.js +39 -48
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
- package/dist/sensor/spatial-sampling-quadrature.js +31 -36
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
- package/dist/sensor/spatio-spectral-reduction.js +24 -29
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
- package/dist/sensor/spectral-coverage.d.ts +6 -9
- package/dist/sensor/spectral-coverage.js +9 -6
- package/dist/sensor/spectral-coverage.js.map +1 -1
- package/dist/sensor/spectral-quadrature.d.ts +46 -60
- package/dist/sensor/spectral-quadrature.js +38 -48
- package/dist/sensor/spectral-quadrature.js.map +1 -1
- package/dist/sensor/spectral-response.d.ts +53 -41
- package/dist/sensor/spectral-response.js +80 -47
- package/dist/sensor/spectral-response.js.map +1 -1
- package/dist/sensor/stochastic-seed.d.ts +50 -0
- package/dist/sensor/stochastic-seed.js +123 -0
- package/dist/sensor/stochastic-seed.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
- package/dist/sensor/temporal-eqe-sum.js +5 -6
- package/dist/sensor/temporal-eqe-sum.js.map +1 -1
- package/dist/sensor/temporal-photo-signal.d.ts +5 -6
- package/dist/sensor/temporal-photo-signal.js +11 -10
- package/dist/sensor/temporal-photo-signal.js.map +1 -1
- package/dist/sensor/temporal-sample-binding.d.ts +1 -2
- package/dist/sensor/temporal-sample-binding.js +3 -3
- package/dist/sensor/temporal-sample-binding.js.map +1 -1
- package/dist/simulation/poc-simulation.d.ts +16 -16
- package/dist/simulation/poc-simulation.js +20 -15
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +42 -18
- package/dist/stabilization/camera-shake.js +43 -20
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +44 -41
- package/dist/stabilization/system.js +196 -108
- package/dist/stabilization/system.js.map +1 -1
- package/docs/AGENT_GUIDE.md +183 -0
- package/docs/API_REFERENCE.md +777 -2
- package/docs/QUICK_START.md +663 -0
- package/docs/USAGE.md +1719 -714
- package/docs/api/camera-equivalent-focal-length.md +6 -7
- package/docs/api/camera-field-of-view.md +16 -8
- package/docs/api/camera-lens-projection.md +246 -0
- package/docs/api/camera-projected-object-size.md +6 -5
- package/docs/api/capture-capture-export-metadata.md +10 -10
- package/docs/api/capture-dng-import.md +134 -0
- package/docs/api/capture-environment-raw-producer.md +17 -11
- package/docs/api/capture-export-jpeg.md +16 -0
- package/docs/api/capture-focus-control.md +25 -47
- package/docs/api/capture-linear-encoding.md +21 -12
- package/docs/api/capture-lossless-jpeg.md +49 -0
- package/docs/api/capture-native-environment-optical-stage.md +75 -0
- package/docs/api/capture-native-environment-raw.md +161 -4
- package/docs/api/capture-native-raw-development.md +69 -8
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +21 -10
- package/docs/api/capture-packed-sensor-raw.md +156 -0
- package/docs/api/capture-photographic-export.md +69 -31
- package/docs/api/capture-raw-frame-reconstruction.md +8 -8
- package/docs/api/capture-raw-white-level.md +37 -0
- package/docs/api/capture-release-sequence.md +6 -7
- package/docs/api/capture-sensor-raw-frame.md +6 -6
- package/docs/api/capture-sensor-raw-producer.md +17 -11
- package/docs/api/capture-simulated-capture.md +15 -15
- package/docs/api/color-camera-color-matrix.md +103 -0
- package/docs/api/color-capture-color.md +22 -11
- package/docs/api/color-chromatic-adaptation.md +82 -0
- package/docs/api/color-color-difference.md +134 -0
- package/docs/api/color-color-matching-functions.md +259 -0
- package/docs/api/color-colorimetry-math.md +54 -0
- package/docs/api/color-gamut-mapping.md +72 -0
- package/docs/api/color-illuminants.md +280 -0
- package/docs/api/color-rgb-color-spaces.md +151 -0
- package/docs/api/color-sensor-color-development.md +27 -0
- package/docs/api/color-srgb-icc.md +2 -4
- package/docs/api/color-white-balance.md +95 -19
- package/docs/api/composition-image-formation-plan.md +124 -95
- package/docs/api/composition-plan-consumer.md +7 -7
- package/docs/api/core-calculation-result.md +18 -14
- package/docs/api/core-configuration-error.md +1 -1
- package/docs/api/core-image-formation.md +7 -7
- package/docs/api/core-scientific-assurance.md +12 -10
- package/docs/api/core-spectral-composition.md +14 -14
- package/docs/api/core-spectral.md +6 -6
- package/docs/api/core-validation.md +3 -3
- package/docs/api/core-version.md +7 -6
- package/docs/api/equipment-exposure-capabilities.md +11 -10
- package/docs/api/equipment-generic-tier-assets.md +7 -2
- package/docs/api/equipment-generic-tier-presets.md +6 -6
- package/docs/api/equipment-iso-capabilities.md +18 -18
- package/docs/api/equipment-metering-capabilities.md +6 -6
- package/docs/api/equipment-release-capabilities.md +4 -4
- package/docs/api/exports.json +2253 -3
- package/docs/api/exposure-exposure-duration-control.md +9 -9
- package/docs/api/exposure-exposure-mode-resolver.md +35 -31
- package/docs/api/exposure-exposure.md +10 -10
- package/docs/api/exposure-flash-ttl.md +182 -0
- package/docs/api/exposure-flash.md +183 -28
- package/docs/api/exposure-metering-scene-radiance.md +11 -10
- package/docs/api/exposure-metering-target.md +9 -8
- package/docs/api/exposure-metering-temporal.md +8 -8
- package/docs/api/exposure-metering.md +69 -9
- package/docs/api/exposure-program-line.md +6 -5
- package/docs/api/facade-chart-radiance-batch.md +96 -0
- package/docs/api/facade-chart-scenes.md +240 -0
- package/docs/api/facade-scene-radiance.md +122 -0
- package/docs/api/facade-simulate-capture.md +397 -0
- package/docs/api/gpu-image-kernel-accelerator.md +157 -0
- package/docs/api/gpu-image-kernel-execution.md +152 -0
- package/docs/api/motion-camera-rotation.md +43 -26
- package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
- package/docs/api/motion-capture-rotation-trajectory.md +15 -15
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
- package/docs/api/motion-extended-object-projection.md +10 -8
- package/docs/api/motion-projected-motion.md +8 -8
- package/docs/api/motion-temporal-exposure-sum.md +98 -0
- package/docs/api/motion-video-sequence.md +159 -0
- package/docs/api/optics-aperture.md +8 -8
- package/docs/api/optics-atmospheric-haze.md +104 -0
- package/docs/api/optics-brown-conrady-distortion.md +123 -0
- package/docs/api/optics-circle-of-confusion.md +5 -4
- package/docs/api/optics-complex-pupil-psf.md +57 -16
- package/docs/api/optics-depth-of-field.md +12 -6
- package/docs/api/optics-diffraction-psf-profile.md +96 -0
- package/docs/api/optics-diffraction.md +8 -7
- package/docs/api/optics-focus-breathing.md +104 -16
- package/docs/api/optics-focus-state.md +9 -10
- package/docs/api/optics-front-of-lens-filter.md +72 -14
- package/docs/api/optics-illumination-vignetting.md +10 -10
- package/docs/api/optics-irradiance-convolution.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
- package/docs/api/optics-lens-psf-kernels.md +72 -0
- package/docs/api/optics-lens-psf-profile.md +48 -26
- package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
- package/docs/api/optics-polygon-diffraction.md +78 -13
- package/docs/api/optics-profile-contract.md +4 -4
- package/docs/api/optics-psf-foundation.md +12 -12
- package/docs/api/optics-pupil-vignetting.md +132 -0
- package/docs/api/optics-radial-distortion.md +12 -12
- package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
- package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
- package/docs/api/optics-sensor-aperture-rays.md +3 -2
- package/docs/api/optics-sensor-environment-query.md +52 -9
- package/docs/api/optics-sensor-psf-quadrature.md +13 -10
- package/docs/api/optics-stray-light.md +12 -11
- package/docs/api/optics-thin-lens.md +4 -3
- package/docs/api/optics-zernike-wavefront.md +229 -0
- package/docs/api/output-capture-corrected-sdr.md +10 -7
- package/docs/api/output-capture-geometry.md +35 -36
- package/docs/api/output-capture-sdr.md +4 -4
- package/docs/api/output-crop.md +7 -4
- package/docs/api/output-geometric-transforms.md +65 -19
- package/docs/api/output-lens-corrections.md +17 -15
- package/docs/api/output-native-capture-sdr.md +26 -13
- package/docs/api/output-png-encoder.md +105 -0
- package/docs/api/output-print-contrast-reference.md +8 -8
- package/docs/api/output-print-detail.md +14 -14
- package/docs/api/output-print-jpeg.md +22 -5
- package/docs/api/output-print-plan.md +18 -18
- package/docs/api/output-print-region-statistics.md +14 -14
- package/docs/api/output-sdr-rendering.md +52 -10
- package/docs/api/output-subject-framing-crop.md +5 -6
- package/docs/api/processing-demosaic.md +120 -0
- package/docs/api/processing-denoise.md +148 -0
- package/docs/api/processing-focus-stacking.md +41 -0
- package/docs/api/processing-hdr.md +113 -0
- package/docs/api/processing-panorama.md +82 -0
- package/docs/api/processing-processing-task.md +107 -0
- package/docs/api/processing-tone-mapping.md +142 -0
- package/docs/api/schema-camera.md +6 -4
- package/docs/api/schema-illumination-spectral.md +10 -11
- package/docs/api/schema-illumination-temporal.md +13 -15
- package/docs/api/schema-illumination.md +4 -4
- package/docs/api/schema-scene-radiance-temporal.md +10 -11
- package/docs/api/schema-scene-radiance.md +18 -17
- package/docs/api/schema-scene.md +9 -9
- package/docs/api/schema-validation.md +1 -1
- package/docs/api/sensor-accumulated-charge.md +12 -20
- package/docs/api/sensor-architecture.md +15 -16
- package/docs/api/sensor-camera-saturation-capacity.md +9 -11
- package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
- package/docs/api/sensor-capture-mode-timing.md +9 -9
- package/docs/api/sensor-capture-mode.md +29 -30
- package/docs/api/sensor-color-sampling.md +31 -33
- package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
- package/docs/api/sensor-dark-current.md +30 -14
- package/docs/api/sensor-environment-photo-signal.md +13 -6
- package/docs/api/sensor-eqe-electron-rate.md +9 -8
- package/docs/api/sensor-eqe-local-exposure.md +18 -17
- package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
- package/docs/api/sensor-exposure-window.md +24 -24
- package/docs/api/sensor-fixed-pattern-noise.md +104 -0
- package/docs/api/sensor-iso-gain.md +63 -0
- package/docs/api/sensor-iso-signal-chain.md +13 -22
- package/docs/api/sensor-local-exposure-binding.md +12 -13
- package/docs/api/sensor-optical-stack.md +37 -40
- package/docs/api/sensor-photon-energy.md +10 -11
- package/docs/api/sensor-physical-charge-capacity.md +8 -13
- package/docs/api/sensor-pixel-pitch.md +1 -1
- package/docs/api/sensor-radiometry-readiness.md +9 -9
- package/docs/api/sensor-raw-readout.md +118 -52
- package/docs/api/sensor-raw-reconstruction.md +97 -20
- package/docs/api/sensor-readout-exposure-linkage.md +120 -24
- package/docs/api/sensor-readout-timing.md +33 -35
- package/docs/api/sensor-response-application-compatibility.md +9 -11
- package/docs/api/sensor-response-operating-range.md +14 -18
- package/docs/api/sensor-responsivity-photocurrent.md +9 -12
- package/docs/api/sensor-sampling-aperture.md +22 -25
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
- package/docs/api/sensor-sensor-geometry.md +23 -24
- package/docs/api/sensor-signal-noise.md +10 -10
- package/docs/api/sensor-spatial-sample-reduction.md +27 -30
- package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
- package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
- package/docs/api/sensor-spectral-coverage.md +5 -5
- package/docs/api/sensor-spectral-quadrature.md +33 -35
- package/docs/api/sensor-spectral-response.md +28 -16
- package/docs/api/sensor-temporal-photo-signal.md +6 -6
- package/docs/api/simulation-poc-simulation.md +17 -16
- package/docs/api/stabilization-camera-shake.md +29 -10
- package/docs/api/stabilization-system.md +25 -21
- package/docs/examples/production-request.json +3821 -2157
- package/docs/examples/simulate-capture.mjs +14 -0
- package/llms.txt +35 -0
- package/package.json +32 -11
- package/AGENTS.md +0 -674
- package/CONTRIBUTING.md +0 -76
- package/DCO +0 -33
- package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
- package/dist/camera/field-of-view.d.ts.map +0 -1
- package/dist/camera/projected-object-size.d.ts.map +0 -1
- package/dist/capture/capture-export-metadata.d.ts.map +0 -1
- package/dist/capture/environment-raw-producer.d.ts.map +0 -1
- package/dist/capture/export-jpeg.d.ts.map +0 -1
- package/dist/capture/export-tiff.d.ts.map +0 -1
- package/dist/capture/focus-control.d.ts.map +0 -1
- package/dist/capture/linear-encoding.d.ts.map +0 -1
- package/dist/capture/native-environment-raw.d.ts.map +0 -1
- package/dist/capture/native-raw-development.d.ts.map +0 -1
- package/dist/capture/native-raw.d.ts.map +0 -1
- package/dist/capture/photographic-export.d.ts.map +0 -1
- package/dist/capture/raw-frame-limits.d.ts.map +0 -1
- package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
- package/dist/capture/release-sequence.d.ts.map +0 -1
- package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
- package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
- package/dist/capture/simulated-capture.d.ts.map +0 -1
- package/dist/color/capture-color.d.ts.map +0 -1
- package/dist/color/sensor-color-development.d.ts.map +0 -1
- package/dist/color/srgb-icc.d.ts.map +0 -1
- package/dist/color/srgb-transfer.d.ts.map +0 -1
- package/dist/color/white-balance.d.ts.map +0 -1
- package/dist/composition/image-formation-plan.d.ts.map +0 -1
- package/dist/composition/plan-consumer.d.ts.map +0 -1
- package/dist/core/calculation-result.d.ts.map +0 -1
- package/dist/core/canonical-json.d.ts.map +0 -1
- package/dist/core/configuration-error.d.ts.map +0 -1
- package/dist/core/evidence-provenance.d.ts.map +0 -1
- package/dist/core/image-formation.d.ts.map +0 -1
- package/dist/core/owned-data.d.ts.map +0 -1
- package/dist/core/record-validation.d.ts.map +0 -1
- package/dist/core/scientific-assurance.d.ts.map +0 -1
- package/dist/core/spectral-composition.d.ts.map +0 -1
- package/dist/core/spectral.d.ts.map +0 -1
- package/dist/core/validation.d.ts.map +0 -1
- package/dist/core/version.d.ts.map +0 -1
- package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
- package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
- package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
- package/dist/equipment/iso-capabilities.d.ts.map +0 -1
- package/dist/equipment/metering-capabilities.d.ts.map +0 -1
- package/dist/equipment/release-capabilities.d.ts.map +0 -1
- package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
- package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
- package/dist/exposure/exposure.d.ts.map +0 -1
- package/dist/exposure/flash.d.ts.map +0 -1
- package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
- package/dist/exposure/metering-target.d.ts.map +0 -1
- package/dist/exposure/metering-temporal.d.ts.map +0 -1
- package/dist/exposure/metering.d.ts.map +0 -1
- package/dist/exposure/program-line.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/motion/camera-rotation.d.ts.map +0 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/extended-object-projection.d.ts.map +0 -1
- package/dist/motion/projected-motion.d.ts.map +0 -1
- package/dist/optics/aperture.d.ts.map +0 -1
- package/dist/optics/circle-of-confusion.d.ts.map +0 -1
- package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
- package/dist/optics/depth-of-field.d.ts.map +0 -1
- package/dist/optics/diffraction.d.ts.map +0 -1
- package/dist/optics/focus-breathing.d.ts.map +0 -1
- package/dist/optics/focus-state.d.ts.map +0 -1
- package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
- package/dist/optics/illumination-vignetting.d.ts.map +0 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
- package/dist/optics/lens-psf-profile.d.ts.map +0 -1
- package/dist/optics/polygon-diffraction.d.ts.map +0 -1
- package/dist/optics/profile-contract.d.ts.map +0 -1
- package/dist/optics/psf-foundation.d.ts.map +0 -1
- package/dist/optics/radial-distortion.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
- package/dist/optics/sensor-environment-query.d.ts.map +0 -1
- package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-psf-support.d.ts.map +0 -1
- package/dist/optics/stray-light.d.ts.map +0 -1
- package/dist/optics/thin-lens.d.ts.map +0 -1
- package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
- package/dist/output/capture-geometry.d.ts.map +0 -1
- package/dist/output/capture-sdr.d.ts.map +0 -1
- package/dist/output/crop.d.ts.map +0 -1
- package/dist/output/geometric-transforms.d.ts.map +0 -1
- package/dist/output/lens-corrections.d.ts.map +0 -1
- package/dist/output/native-capture-sdr.d.ts.map +0 -1
- package/dist/output/print-contrast-reference.d.ts.map +0 -1
- package/dist/output/print-detail.d.ts.map +0 -1
- package/dist/output/print-jpeg.d.ts.map +0 -1
- package/dist/output/print-plan.d.ts.map +0 -1
- package/dist/output/print-region-statistics.d.ts.map +0 -1
- package/dist/output/sdr-rendering.d.ts.map +0 -1
- package/dist/output/subject-framing-crop.d.ts.map +0 -1
- package/dist/schema/camera.d.ts.map +0 -1
- package/dist/schema/camera.js +0 -3
- package/dist/schema/camera.js.map +0 -1
- package/dist/schema/illumination-spectral.d.ts.map +0 -1
- package/dist/schema/illumination-temporal.d.ts.map +0 -1
- package/dist/schema/illumination.d.ts.map +0 -1
- package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
- package/dist/schema/scene-radiance.d.ts.map +0 -1
- package/dist/schema/scene.d.ts.map +0 -1
- package/dist/schema/scene.js +0 -3
- package/dist/schema/scene.js.map +0 -1
- package/dist/schema/validation.d.ts.map +0 -1
- package/dist/sensor/accumulated-charge.d.ts.map +0 -1
- package/dist/sensor/architecture.d.ts.map +0 -1
- package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
- package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
- package/dist/sensor/capture-mode.d.ts.map +0 -1
- package/dist/sensor/color-sampling.d.ts.map +0 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
- package/dist/sensor/dark-current.d.ts.map +0 -1
- package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
- package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
- package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/exposure-window.d.ts.map +0 -1
- package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
- package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
- package/dist/sensor/optical-stack.d.ts.map +0 -1
- package/dist/sensor/photon-energy.d.ts.map +0 -1
- package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
- package/dist/sensor/pixel-pitch.d.ts.map +0 -1
- package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
- package/dist/sensor/raw-readout.d.ts.map +0 -1
- package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
- package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
- package/dist/sensor/readout-timing.d.ts.map +0 -1
- package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
- package/dist/sensor/response-operating-range.d.ts.map +0 -1
- package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
- package/dist/sensor/sampling-aperture.d.ts.map +0 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/sensor-geometry.d.ts.map +0 -1
- package/dist/sensor/signal-noise.d.ts.map +0 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
- package/dist/sensor/spectral-coverage.d.ts.map +0 -1
- package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
- package/dist/sensor/spectral-response.d.ts.map +0 -1
- package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
- package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
- package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
- package/dist/simulation/poc-simulation.d.ts.map +0 -1
- package/dist/stabilization/camera-shake.d.ts.map +0 -1
- package/dist/stabilization/system.d.ts.map +0 -1
- package/docs/API_STYLE.md +0 -235
- package/docs/ARCHITECTURE.md +0 -356
- package/docs/AUTOMATION_COORDINATION.md +0 -190
- package/docs/CAPTURE_COLOR.md +0 -25
- package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
- package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
- package/docs/CAPTURE_SDR.md +0 -22
- package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
- package/docs/DEVELOPERS.md +0 -68
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
- package/docs/EXPORT_ACCEPTANCE.md +0 -133
- package/docs/GENERIC_TIER_PRESETS.md +0 -269
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
- package/docs/IMAGE_FORMATION.md +0 -247
- package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
- package/docs/MOTION_AND_SIGNAL.md +0 -250
- package/docs/NATIVE_CAPTURE_SDR.md +0 -70
- package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
- package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
- package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
- package/docs/NUMERICAL_CORRECTNESS.md +0 -191
- package/docs/PERFORMANCE_BASELINE.md +0 -56
- package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
- package/docs/PHYSICS_FOUNDATION.md +0 -426
- package/docs/POC_API.md +0 -278
- package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
- package/docs/POC_PROJECTION_REUSE.md +0 -124
- package/docs/PRINT_195_196_REVIEW.md +0 -93
- package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
- package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
- package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
- package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
- package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
- package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
- package/docs/PRINT_PLANNING.md +0 -75
- package/docs/PRINT_REGION_STATISTICS.md +0 -38
- package/docs/PROCESSED_OUTPUT.md +0 -157
- package/docs/PRODUCTION_COMPOSITION.md +0 -373
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
- package/docs/PROVENANCE.md +0 -115
- package/docs/PSF_FOUNDATION.md +0 -165
- package/docs/RAW_FRAME_ENVELOPE.md +0 -56
- package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
- package/docs/RELEASE_1_0.md +0 -66
- package/docs/RELEASE_1_0_1.md +0 -61
- package/docs/RELEASE_1_1_0.md +0 -25
- package/docs/RELEASE_1_2_0.md +0 -51
- package/docs/RELEASE_1_3_0.md +0 -15
- package/docs/RELEASE_1_4_0.md +0 -23
- package/docs/RELEASE_1_5_0.md +0 -105
- package/docs/RELEASE_AUDIT.md +0 -39
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
- package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
- package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
- package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
- package/docs/SDR_RENDERING.md +0 -33
- package/docs/SENSOR_APERTURE_RAYS.md +0 -23
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
- package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
- package/docs/SENSOR_RAW_FRAME.md +0 -20
- package/docs/SENSOR_RAW_PRODUCER.md +0 -77
- package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
- package/docs/SIGNAL_CONFORMANCE.md +0 -23
- package/docs/SIMULATED_CAPTURE.md +0 -65
- package/docs/STABILIZATION.md +0 -234
- package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
- package/docs/TIER_ACCEPTANCE.md +0 -129
- package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
- package/docs/V1_COMPOSITION_MAP.md +0 -123
- package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
- package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
- package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
- package/docs/licenses/castleCSF-MIT.txt +0 -21
- package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
- package/docs/validation/documentation-fragments.json +0 -212
- package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
- package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
- package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
- package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
- package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
- package/docs/validation/print-196-candidate-capabilities.json +0 -28
- package/docs/validation/print-196-candidate-evidence.json +0 -356
- package/docs/validation/print-196-engine-acceptance.json +0 -81
- package/docs/validation/print-detail-capabilities.json +0 -103
- package/docs/validation/print-detail-jpeg-evidence.json +0 -116
- package/docs/validation/print-detail-sdr-evidence.json +0 -81
- package/docs/validation/release-audit-inventory.json +0 -1306
- package/docs/validation/tier-acceptance-report-v1.json +0 -2538
|
@@ -25,7 +25,7 @@ export interface ProductionPlanConsumerManifest {
|
|
|
25
25
|
modelVersion?: string;
|
|
26
26
|
}[];
|
|
27
27
|
blockers: readonly ProductionImageFormationBlocker[];
|
|
28
|
-
/**
|
|
28
|
+
/** The same immutable RAW and output results that ran. A consumer cannot re-render from a different source. */
|
|
29
29
|
environmentCaptureResult?: ProductionImageFormationPlan["environmentCaptureResult"];
|
|
30
30
|
processedOutputResult?: ProductionImageFormationPlan["processedOutputResult"];
|
|
31
31
|
physicalSceneToSensorResult: ProductionImageFormationPlan["physicalSceneToSensorResult"];
|
|
@@ -42,12 +42,11 @@ export interface ProductionPlanConsumerManifest {
|
|
|
42
42
|
consumerMayReduceCommittedTemporalSampleCount: false;
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
|
-
* Creates a deterministic
|
|
46
|
-
*
|
|
45
|
+
* Creates a deterministic view of one finished production plan, for a renderer
|
|
46
|
+
* or a reference consumer.
|
|
47
47
|
*
|
|
48
|
-
* The consumer role changes
|
|
49
|
-
* scientific
|
|
50
|
-
*
|
|
48
|
+
* The consumer role only changes who is responsible for executing. It does not
|
|
49
|
+
* change the scientific stages or effects, the number of time samples, the
|
|
50
|
+
* seeds or any physical result.
|
|
51
51
|
*/
|
|
52
52
|
export declare function createProductionPlanConsumerManifest(input: CreateProductionPlanConsumerManifestInput): ProductionPlanConsumerManifest;
|
|
53
|
-
//# sourceMappingURL=plan-consumer.d.ts.map
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* @see docs/PRODUCTION_COMPOSITION.md for equations, coordinate
|
|
8
|
-
* limits.
|
|
3
|
+
* A deterministic view of one finished production plan, for a renderer or a reference consumer.
|
|
4
|
+
*
|
|
5
|
+
* The consumer role only changes who is responsible for executing. It does not change the scientific
|
|
6
|
+
* stages or effects, the number of time samples, the seeds or any physical result.
|
|
7
|
+
* @see docs/PRODUCTION_COMPOSITION.md for the equations, units, coordinate conventions, known
|
|
8
|
+
* blockers and support limits.
|
|
9
9
|
*/
|
|
10
10
|
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
11
11
|
import { PRODUCTION_IMAGE_FORMATION_PLAN_VERSION } from "./image-formation-plan.js";
|
|
12
|
+
import { requireInputObject, requireInputKeys } from "../core/record-validation.js";
|
|
12
13
|
export const PRODUCTION_PLAN_CONSUMER_MANIFEST_VERSION = "0.2.0";
|
|
13
14
|
function requireConsumerKind(value) {
|
|
14
15
|
if (value !== "interactive-optimized" &&
|
|
@@ -18,6 +19,7 @@ function requireConsumerKind(value) {
|
|
|
18
19
|
return value;
|
|
19
20
|
}
|
|
20
21
|
function requirePlan(plan) {
|
|
22
|
+
requireInputObject(plan, "plan input");
|
|
21
23
|
if (plan.version !==
|
|
22
24
|
PRODUCTION_IMAGE_FORMATION_PLAN_VERSION) {
|
|
23
25
|
throw new InvalidConfigurationError('plan.version must be "' +
|
|
@@ -31,14 +33,15 @@ function requirePlan(plan) {
|
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
|
-
* Creates a deterministic
|
|
35
|
-
*
|
|
36
|
+
* Creates a deterministic view of one finished production plan, for a renderer
|
|
37
|
+
* or a reference consumer.
|
|
36
38
|
*
|
|
37
|
-
* The consumer role changes
|
|
38
|
-
* scientific
|
|
39
|
-
*
|
|
39
|
+
* The consumer role only changes who is responsible for executing. It does not
|
|
40
|
+
* change the scientific stages or effects, the number of time samples, the
|
|
41
|
+
* seeds or any physical result.
|
|
40
42
|
*/
|
|
41
43
|
export function createProductionPlanConsumerManifest(input) {
|
|
44
|
+
requireInputKeys(input, "createProductionPlanConsumerManifest", ["plan", "consumerKind"]);
|
|
42
45
|
requirePlan(input.plan);
|
|
43
46
|
const consumerKind = requireConsumerKind(input.consumerKind);
|
|
44
47
|
const activeOrModeledStages = input.plan.stagePlan
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-consumer.js","sourceRoot":"","sources":["../../src/composition/plan-consumer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plan-consumer.js","sourceRoot":"","sources":["../../src/composition/plan-consumer.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * A deterministic view of one finished production plan, for a renderer or a reference consumer.\n *\n * The consumer role only changes who is responsible for executing. It does not change the scientific\n * stages or effects, the number of time samples, the seeds or any physical result.\n * @see docs/PRODUCTION_COMPOSITION.md for the equations, units, coordinate conventions, known\n * blockers and support limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport type {\n ImageFormationEffectId,\n ImageFormationStageId\n} from \"../core/image-formation.js\";\nimport {\n PRODUCTION_IMAGE_FORMATION_PLAN_VERSION,\n type ProductionImageFormationBlocker,\n type ProductionImageFormationPlan,\n type RendererConsumerKind\n} from \"./image-formation-plan.js\";\nimport { requireInputObject, requireInputKeys } from \"../core/record-validation.js\";\n\nexport const PRODUCTION_PLAN_CONSUMER_MANIFEST_VERSION =\n \"0.2.0\" as const;\n\nexport interface CreateProductionPlanConsumerManifestInput {\n plan: ProductionImageFormationPlan;\n consumerKind: RendererConsumerKind;\n}\n\nexport interface ProductionPlanConsumerManifest {\n version:\n typeof PRODUCTION_PLAN_CONSUMER_MANIFEST_VERSION;\n consumerKind: RendererConsumerKind;\n planVersion:\n typeof PRODUCTION_IMAGE_FORMATION_PLAN_VERSION;\n planFingerprint: string;\n planStatus:\n ProductionImageFormationPlan[\"status\"];\n activeOrModeledStages:\n readonly {\n stageId: ImageFormationStageId;\n state: \"active\" | \"modeled-zero\";\n modelId?: string;\n modelVersion?: string;\n resultIdentity?: string;\n }[];\n activeOrModeledEffects:\n readonly {\n effectId: ImageFormationEffectId;\n state: \"active\" | \"modeled-zero\";\n modelId?: string;\n modelVersion?: string;\n }[];\n blockers:\n readonly ProductionImageFormationBlocker[];\n /** The same immutable RAW and output results that ran. A consumer cannot re-render from a different source. */\n environmentCaptureResult?: ProductionImageFormationPlan[\"environmentCaptureResult\"];\n processedOutputResult?: ProductionImageFormationPlan[\"processedOutputResult\"];\n physicalSceneToSensorResult:\n ProductionImageFormationPlan[\"physicalSceneToSensorResult\"];\n temporalCaptureResult:\n ProductionImageFormationPlan[\"temporalCaptureResult\"];\n scientificAssurance:\n ProductionImageFormationPlan[\"scientificAssurance\"];\n stochastic: {\n captureSeedUint32: number;\n consumerMayReplaceSeed: false;\n backendRandomnessMayRedefineScientificResult:\n false;\n };\n scientificSemanticsSharedAcrossConsumerKinds:\n true;\n consumerMayChangeScientificInputs:\n false;\n consumerMayReorderImageFormationStages:\n false;\n consumerMayReduceCommittedTemporalSampleCount:\n false;\n}\n\nfunction requireConsumerKind(\n value: unknown\n): RendererConsumerKind {\n if (\n value !== \"interactive-optimized\" &&\n value !== \"reference\"\n ) {\n throw new InvalidConfigurationError(\n \"consumerKind is invalid.\"\n );\n }\n return value;\n}\n\nfunction requirePlan(\n plan: ProductionImageFormationPlan\n): void {\n requireInputObject(plan, \"plan input\");\n if (\n plan.version !==\n PRODUCTION_IMAGE_FORMATION_PLAN_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'plan.version must be \"' +\n PRODUCTION_IMAGE_FORMATION_PLAN_VERSION +\n '\".'\n );\n }\n if (\n typeof plan.fingerprint?.value !==\n \"string\" ||\n plan.fingerprint.value.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"plan fingerprint must be present.\"\n );\n }\n}\n\n/**\n * Creates a deterministic view of one finished production plan, for a renderer\n * or a reference consumer.\n *\n * The consumer role only changes who is responsible for executing. It does not\n * change the scientific stages or effects, the number of time samples, the\n * seeds or any physical result.\n */\nexport function createProductionPlanConsumerManifest(\n input:\n CreateProductionPlanConsumerManifestInput\n): ProductionPlanConsumerManifest {\n requireInputKeys(input, \"createProductionPlanConsumerManifest\", [\"plan\", \"consumerKind\"]);\n requirePlan(input.plan);\n const consumerKind =\n requireConsumerKind(\n input.consumerKind\n );\n\n const activeOrModeledStages =\n input.plan.stagePlan\n .filter(\n (stage) =>\n stage.state ===\n \"active\" ||\n stage.state ===\n \"modeled-zero\"\n )\n .map((stage) => ({\n stageId: stage.stageId,\n state: stage.state as\n | \"active\"\n | \"modeled-zero\",\n ...(stage.modelId ===\n undefined\n ? {}\n : {\n modelId:\n stage.modelId\n }),\n ...(stage.modelVersion ===\n undefined\n ? {}\n : {\n modelVersion:\n stage.modelVersion\n }),\n ...(stage.resultIdentity ===\n undefined\n ? {}\n : {\n resultIdentity:\n stage.resultIdentity\n })\n }));\n\n const activeOrModeledEffects =\n input.plan.effectPlan\n .filter(\n (effect) =>\n effect.state ===\n \"active\" ||\n effect.state ===\n \"modeled-zero\"\n )\n .map((effect) => ({\n effectId: effect.effectId,\n state: effect.state as\n | \"active\"\n | \"modeled-zero\",\n ...(effect.modelId ===\n undefined\n ? {}\n : {\n modelId:\n effect.modelId\n }),\n ...(effect.modelVersion ===\n undefined\n ? {}\n : {\n modelVersion:\n effect.modelVersion\n })\n }));\n\n return {\n version:\n PRODUCTION_PLAN_CONSUMER_MANIFEST_VERSION,\n consumerKind,\n planVersion:\n PRODUCTION_IMAGE_FORMATION_PLAN_VERSION,\n planFingerprint:\n input.plan.fingerprint.value,\n planStatus:\n input.plan.status,\n activeOrModeledStages,\n activeOrModeledEffects,\n ...(input.plan.environmentCaptureResult === undefined ? {} : { environmentCaptureResult: input.plan.environmentCaptureResult }),\n ...(input.plan.processedOutputResult === undefined ? {} : { processedOutputResult: input.plan.processedOutputResult }),\n blockers:\n input.plan.blockers,\n physicalSceneToSensorResult:\n input.plan\n .physicalSceneToSensorResult,\n temporalCaptureResult:\n input.plan.temporalCaptureResult,\n scientificAssurance:\n input.plan.scientificAssurance,\n stochastic: {\n captureSeedUint32:\n input.plan.stochastic\n .captureSeedUint32,\n consumerMayReplaceSeed: false,\n backendRandomnessMayRedefineScientificResult:\n false\n },\n scientificSemanticsSharedAcrossConsumerKinds:\n true,\n consumerMayChangeScientificInputs:\n false,\n consumerMayReorderImageFormationStages:\n false,\n consumerMayReduceCommittedTemporalSampleCount:\n false\n };\n}\n"]}
|
|
@@ -22,8 +22,8 @@ export type UncertaintySource = "measurement" | "model-approximation" | "calibra
|
|
|
22
22
|
/**
|
|
23
23
|
* Optional confidence metadata for a quantified uncertainty estimate.
|
|
24
24
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* Give a confidence level only when you can state its basis. Do not use it as a
|
|
26
|
+
* general, subjective confidence score.
|
|
27
27
|
*/
|
|
28
28
|
export interface UncertaintyConfidence {
|
|
29
29
|
/** Confidence/coverage level as a fraction in the interval (0, 1]. */
|
|
@@ -61,8 +61,8 @@ export interface RelativeUncertaintyEstimate extends UncertaintyEstimateBase {
|
|
|
61
61
|
}
|
|
62
62
|
export type UncertaintyEstimate = AbsoluteUncertaintyEstimate | RelativeUncertaintyEstimate;
|
|
63
63
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
64
|
+
* The documented parameter range in which a model or calibration is valid.
|
|
65
|
+
* It says where the model applies. It is not a statistical interval.
|
|
66
66
|
*/
|
|
67
67
|
export interface CalculationValidRange {
|
|
68
68
|
/** JSON-style input/model parameter path, e.g. input.focusDistanceM. */
|
|
@@ -76,10 +76,10 @@ export interface CalculationValidRange {
|
|
|
76
76
|
/**
|
|
77
77
|
* Optional quality metadata for a calculation result.
|
|
78
78
|
*
|
|
79
|
-
*
|
|
80
|
-
* quadrature
|
|
81
|
-
* scientifically justified
|
|
82
|
-
*
|
|
79
|
+
* Uncertainty components stay separate. Do not add them, combine them in
|
|
80
|
+
* quadrature (root-sum-of-squares) or merge them in any other way, unless you use
|
|
81
|
+
* a scientifically justified method that documents its independence and
|
|
82
|
+
* correlation assumptions.
|
|
83
83
|
*/
|
|
84
84
|
export interface CalculationQuality {
|
|
85
85
|
uncertainty?: readonly UncertaintyEstimate[];
|
|
@@ -89,15 +89,19 @@ export interface CalculationQuality {
|
|
|
89
89
|
/**
|
|
90
90
|
* Standard result envelope for public scientific calculations.
|
|
91
91
|
*
|
|
92
|
-
* Deterministic analytical results
|
|
93
|
-
* there is no defensible uncertainty
|
|
92
|
+
* Deterministic analytical results stay lightweight. They omit `quality` when
|
|
93
|
+
* there is no defensible uncertainty or accuracy metadata to report.
|
|
94
|
+
*
|
|
95
|
+
* Read-only from 2.0.0: the envelope, `provenance` and `quality` are frozen deeply and `value`
|
|
96
|
+
* at its top level. Copy a value before changing it. Typed arrays inside a value stay mutable.
|
|
97
|
+
* See docs/API_STYLE.md "Read-only results".
|
|
94
98
|
*
|
|
95
99
|
* @typeParam T Serializable value returned by the calculation.
|
|
96
100
|
*/
|
|
97
101
|
export interface CalculationResult<T> {
|
|
98
|
-
value: T;
|
|
99
|
-
provenance: CalculationProvenance;
|
|
100
|
-
quality?: CalculationQuality;
|
|
102
|
+
readonly value: T;
|
|
103
|
+
readonly provenance: CalculationProvenance;
|
|
104
|
+
readonly quality?: CalculationQuality;
|
|
101
105
|
}
|
|
102
106
|
/**
|
|
103
107
|
* Validates result-quality metadata before it enters a public result envelope.
|
|
@@ -105,6 +109,10 @@ export interface CalculationResult<T> {
|
|
|
105
109
|
* @param quality Optional calculation quality metadata.
|
|
106
110
|
*/
|
|
107
111
|
export declare function validateCalculationQuality(quality: CalculationQuality | undefined): void;
|
|
112
|
+
/** Internal: exact answer of containsNonFiniteNumber, using the memo-free pre-scan when it decides. */
|
|
113
|
+
export declare function calculationValueContainsNonFiniteNumber(value: unknown): boolean;
|
|
114
|
+
/** Internal: the exact visited-set scan, exposed for equivalence tests only. */
|
|
115
|
+
export declare function calculationValueContainsNonFiniteNumberExact(value: unknown): boolean;
|
|
108
116
|
/**
|
|
109
117
|
* Creates a deterministic calculated-result envelope.
|
|
110
118
|
*/
|
|
@@ -122,4 +130,3 @@ export declare function estimatedResult<T>(value: T, model: string, modelVersion
|
|
|
122
130
|
*/
|
|
123
131
|
export declare function calibratedResult<T>(value: T, model: string, modelVersion: string, assumptions: readonly string[], quality: CalculationQuality): CalculationResult<T>;
|
|
124
132
|
export {};
|
|
125
|
-
//# sourceMappingURL=calculation-result.d.ts.map
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* The standard result envelope that every public calculation returns.
|
|
4
|
+
*
|
|
5
|
+
* An envelope pairs a value with provenance (how it was produced) and, when it can be
|
|
6
|
+
* stated, quality metadata (uncertainty and validity range). This module defines those
|
|
7
|
+
* types, validates quality metadata, and provides one constructor per provenance kind.
|
|
6
8
|
* @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
7
9
|
*/
|
|
8
10
|
import { InvalidScientificResultError } from "./validation.js";
|
|
11
|
+
import { rejectUnknownFields, requireInputObject } from "./record-validation.js";
|
|
9
12
|
const UNCERTAINTY_SOURCES = new Set([
|
|
10
13
|
"measurement",
|
|
11
14
|
"model-approximation",
|
|
@@ -25,6 +28,8 @@ function validateConfidence(confidence, path) {
|
|
|
25
28
|
if (confidence === undefined) {
|
|
26
29
|
return;
|
|
27
30
|
}
|
|
31
|
+
requireInputObject(confidence, `Calculation quality field ${path}`);
|
|
32
|
+
rejectUnknownFields(confidence, ["level", "basis"], `calculationQuality.${path}`);
|
|
28
33
|
if (!Number.isFinite(confidence.level) ||
|
|
29
34
|
confidence.level <= 0 ||
|
|
30
35
|
confidence.level > 1) {
|
|
@@ -32,8 +37,15 @@ function validateConfidence(confidence, path) {
|
|
|
32
37
|
}
|
|
33
38
|
requireNonEmptyString(`${path}.basis`, confidence.basis);
|
|
34
39
|
}
|
|
40
|
+
const UNCERTAINTY_BASE_KEYS = ["kind", "quantityPath", "source", "confidence", "note"];
|
|
41
|
+
const ABSOLUTE_UNCERTAINTY_KEYS = [...UNCERTAINTY_BASE_KEYS, "plusMinus", "unit"];
|
|
42
|
+
const RELATIVE_UNCERTAINTY_KEYS = [...UNCERTAINTY_BASE_KEYS, "fraction"];
|
|
35
43
|
function validateUncertaintyEstimate(estimate, index) {
|
|
36
44
|
const path = `uncertainty[${index}]`;
|
|
45
|
+
requireInputObject(estimate, `Calculation quality field ${path}`);
|
|
46
|
+
if (estimate.kind === "absolute" || estimate.kind === "relative") {
|
|
47
|
+
rejectUnknownFields(estimate, estimate.kind === "absolute" ? ABSOLUTE_UNCERTAINTY_KEYS : RELATIVE_UNCERTAINTY_KEYS, `calculationQuality.${path}`);
|
|
48
|
+
}
|
|
37
49
|
requireNonEmptyString(`${path}.quantityPath`, estimate.quantityPath);
|
|
38
50
|
if (!UNCERTAINTY_SOURCES.has(estimate.source)) {
|
|
39
51
|
throw new InvalidScientificResultError(`Calculation quality field ${path}.source is invalid.`);
|
|
@@ -55,6 +67,8 @@ function validateUncertaintyEstimate(estimate, index) {
|
|
|
55
67
|
}
|
|
56
68
|
function validateValidRange(range, index) {
|
|
57
69
|
const path = `validRanges[${index}]`;
|
|
70
|
+
requireInputObject(range, `Calculation quality field ${path}`);
|
|
71
|
+
rejectUnknownFields(range, ["parameterPath", "unit", "minimum", "maximum", "note"], `calculationQuality.${path}`);
|
|
58
72
|
requireNonEmptyString(`${path}.parameterPath`, range.parameterPath);
|
|
59
73
|
requireNonEmptyString(`${path}.unit`, range.unit);
|
|
60
74
|
if (range.minimum === undefined && range.maximum === undefined) {
|
|
@@ -84,6 +98,8 @@ export function validateCalculationQuality(quality) {
|
|
|
84
98
|
if (quality === undefined) {
|
|
85
99
|
return;
|
|
86
100
|
}
|
|
101
|
+
requireInputObject(quality, "validateCalculationQuality input");
|
|
102
|
+
rejectUnknownFields(quality, ["uncertainty", "validRanges", "notes"], "calculationQuality");
|
|
87
103
|
if (quality.uncertainty !== undefined) {
|
|
88
104
|
if (quality.uncertainty.length === 0) {
|
|
89
105
|
throw new InvalidScientificResultError("Calculation quality uncertainty must be omitted rather than empty.");
|
|
@@ -134,17 +150,199 @@ function assertFiniteNumbers(value, path, seen) {
|
|
|
134
150
|
assertFiniteNumbers(entry, `${path}.${key}`, seen);
|
|
135
151
|
}
|
|
136
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Fast check for a non-finite number anywhere in a value tree. It builds no path strings.
|
|
155
|
+
*
|
|
156
|
+
* It walks the tree exactly as assertFiniteNumbers does: own enumerable string keys in
|
|
157
|
+
* Object.keys order (as Object.entries), array indices that are present (as forEach), and
|
|
158
|
+
* each object once. The slower diagnostic walk runs only when this finds a non-finite
|
|
159
|
+
* number, so the thrown error type and path message are unchanged.
|
|
160
|
+
*/
|
|
161
|
+
function containsNonFiniteNumber(value, seen) {
|
|
162
|
+
if (typeof value === "number") {
|
|
163
|
+
return !Number.isFinite(value);
|
|
164
|
+
}
|
|
165
|
+
if (typeof value !== "object" || value === null || seen.has(value)) {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
seen.add(value);
|
|
169
|
+
if (Array.isArray(value)) {
|
|
170
|
+
for (let index = 0; index < value.length; index++) {
|
|
171
|
+
if (index in value && containsNonFiniteNumber(value[index], seen)) {
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
const record = value;
|
|
178
|
+
const keys = Object.keys(record);
|
|
179
|
+
for (let index = 0; index < keys.length; index++) {
|
|
180
|
+
if (containsNonFiniteNumber(record[keys[index]], seen)) {
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
/** Object visits allowed to the memo-free pre-scan before it defers to the exact visited-set scan. */
|
|
187
|
+
const FAST_FINITE_SCAN_MAX_OBJECT_VISITS = 1 << 16;
|
|
188
|
+
/** Nesting allowed to the memo-free pre-scan; a cycle or very deep tree defers to the exact scan. */
|
|
189
|
+
const FAST_FINITE_SCAN_MAX_DEPTH = 64;
|
|
190
|
+
const FAST_SCAN_FINITE = 0, FAST_SCAN_NON_FINITE = 1, FAST_SCAN_UNDECIDED = 2;
|
|
191
|
+
/** Remaining object visits of the active pre-scan; saved and restored around nested scans. */
|
|
192
|
+
let fastFiniteScanBudget = 0;
|
|
193
|
+
/**
|
|
194
|
+
* Faster pre-scan that skips the visited-object WeakSet (a 2.0 performance change).
|
|
195
|
+
*
|
|
196
|
+
* It walks the tree like containsNonFiniteNumber (own enumerable string keys in Object.keys
|
|
197
|
+
* order, present array indices). Without a WeakSet it may visit a shared node more than once.
|
|
198
|
+
* So it gives up and returns UNDECIDED after FAST_FINITE_SCAN_MAX_OBJECT_VISITS objects or
|
|
199
|
+
* FAST_FINITE_SCAN_MAX_DEPTH levels of nesting. Any cycle hits the depth limit.
|
|
200
|
+
*
|
|
201
|
+
* Revisiting cannot change the answer, because the set of reachable numbers is the same
|
|
202
|
+
* either way. A non-finite number it finds is reachable, and a finished scan has seen every
|
|
203
|
+
* reachable number. So any decided answer equals the exact scan's answer. UNDECIDED falls
|
|
204
|
+
* back to the exact scan.
|
|
205
|
+
*/
|
|
206
|
+
function scanNonFiniteWithoutMemo(value, depth) {
|
|
207
|
+
if (typeof value === "number") {
|
|
208
|
+
return Number.isFinite(value) ? FAST_SCAN_FINITE : FAST_SCAN_NON_FINITE;
|
|
209
|
+
}
|
|
210
|
+
if (typeof value !== "object" || value === null) {
|
|
211
|
+
return FAST_SCAN_FINITE;
|
|
212
|
+
}
|
|
213
|
+
if (depth >= FAST_FINITE_SCAN_MAX_DEPTH || --fastFiniteScanBudget < 0) {
|
|
214
|
+
return FAST_SCAN_UNDECIDED;
|
|
215
|
+
}
|
|
216
|
+
if (Array.isArray(value)) {
|
|
217
|
+
for (let index = 0; index < value.length; index++) {
|
|
218
|
+
if (index in value) {
|
|
219
|
+
const entry = value[index];
|
|
220
|
+
if (typeof entry === "number") {
|
|
221
|
+
if (!Number.isFinite(entry))
|
|
222
|
+
return FAST_SCAN_NON_FINITE;
|
|
223
|
+
}
|
|
224
|
+
else if (typeof entry === "object" && entry !== null) {
|
|
225
|
+
const result = scanNonFiniteWithoutMemo(entry, depth + 1);
|
|
226
|
+
if (result !== FAST_SCAN_FINITE)
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return FAST_SCAN_FINITE;
|
|
232
|
+
}
|
|
233
|
+
const record = value;
|
|
234
|
+
const keys = Object.keys(record);
|
|
235
|
+
for (let index = 0; index < keys.length; index++) {
|
|
236
|
+
const entry = record[keys[index]];
|
|
237
|
+
if (typeof entry === "number") {
|
|
238
|
+
if (!Number.isFinite(entry))
|
|
239
|
+
return FAST_SCAN_NON_FINITE;
|
|
240
|
+
}
|
|
241
|
+
else if (typeof entry === "object" && entry !== null) {
|
|
242
|
+
const result = scanNonFiniteWithoutMemo(entry, depth + 1);
|
|
243
|
+
if (result !== FAST_SCAN_FINITE)
|
|
244
|
+
return result;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return FAST_SCAN_FINITE;
|
|
248
|
+
}
|
|
249
|
+
/** Internal: exact answer of containsNonFiniteNumber, using the memo-free pre-scan when it decides. */
|
|
250
|
+
export function calculationValueContainsNonFiniteNumber(value) {
|
|
251
|
+
const saved = fastFiniteScanBudget;
|
|
252
|
+
fastFiniteScanBudget = FAST_FINITE_SCAN_MAX_OBJECT_VISITS;
|
|
253
|
+
let result;
|
|
254
|
+
try {
|
|
255
|
+
result = scanNonFiniteWithoutMemo(value, 0);
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
fastFiniteScanBudget = saved;
|
|
259
|
+
}
|
|
260
|
+
return result === FAST_SCAN_UNDECIDED ? containsNonFiniteNumber(value, new WeakSet()) : result === FAST_SCAN_NON_FINITE;
|
|
261
|
+
}
|
|
262
|
+
/** Internal: the exact visited-set scan, exposed for equivalence tests only. */
|
|
263
|
+
export function calculationValueContainsNonFiniteNumberExact(value) {
|
|
264
|
+
return containsNonFiniteNumber(value, new WeakSet());
|
|
265
|
+
}
|
|
137
266
|
function assertFiniteCalculationValue(value) {
|
|
138
|
-
|
|
267
|
+
if (calculationValueContainsNonFiniteNumber(value)) {
|
|
268
|
+
assertFiniteNumbers(value, "value", new WeakSet());
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
function validateProvenanceIdentity(provenance) {
|
|
272
|
+
for (const field of ["model", "modelVersion"]) {
|
|
273
|
+
const entry = provenance[field];
|
|
274
|
+
if (typeof entry !== "string" || entry.trim().length === 0) {
|
|
275
|
+
throw new InvalidScientificResultError(`Calculation provenance ${field} must be a non-empty string.`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Estimated and calibrated results must carry quality metadata. The TypeScript
|
|
281
|
+
* signature alone cannot stop a JavaScript caller from leaving it out, so check at runtime.
|
|
282
|
+
*/
|
|
283
|
+
function requireQuality(quality, kind) {
|
|
284
|
+
if (quality === undefined || quality === null) {
|
|
285
|
+
throw new InvalidScientificResultError(`A ${kind} result requires calculation quality metadata.`);
|
|
286
|
+
}
|
|
287
|
+
return quality;
|
|
139
288
|
}
|
|
289
|
+
/** True for a plain record (prototype Object.prototype or null) or an array: the nodes a result freezes. */
|
|
290
|
+
function isFreezableResultNode(node) {
|
|
291
|
+
if (node === null || typeof node !== "object") {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
if (Array.isArray(node)) {
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
const prototype = Object.getPrototypeOf(node);
|
|
298
|
+
return prototype === Object.prototype || prototype === null;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Deep-freezes the plain records and arrays of provenance or quality metadata in place. A node
|
|
302
|
+
* that is already frozen is not walked again, which also ends any cycle.
|
|
303
|
+
*/
|
|
304
|
+
function freezeMetadataTree(node) {
|
|
305
|
+
if (!isFreezableResultNode(node) || Object.isFrozen(node)) {
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
Object.freeze(node);
|
|
309
|
+
for (const entry of Object.values(node)) {
|
|
310
|
+
freezeMetadataTree(entry);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Read-only result envelopes (from 2.0.0). The envelope, its provenance (with assumptions) and
|
|
315
|
+
* its quality metadata are frozen deeply. `value` is frozen at its top level only:
|
|
316
|
+
*
|
|
317
|
+
* - Every public calculation builds at least one envelope, many per call on hot paths. A generic
|
|
318
|
+
* deep walk of `value` made a small scalar call about 3× slower; this shallow freeze costs
|
|
319
|
+
* about 1.4× (measured, docs/API_STYLE.md "Read-only results").
|
|
320
|
+
* - A deep freeze would also freeze any caller-owned object that a value holds by reference.
|
|
321
|
+
* test/result-envelope-freeze.test.ts checks that a calculation leaves its input as it was.
|
|
322
|
+
* - Typed arrays, DataViews and ArrayBuffers cannot be frozen and stay mutable. Class
|
|
323
|
+
* instances, Maps and Sets are not frozen.
|
|
324
|
+
* - Domains that own their data still deep-freeze it (captures, RAW attachments, presets and
|
|
325
|
+
* export metadata use freezeOwnedData), so those values are read-only all the way down.
|
|
326
|
+
*/
|
|
140
327
|
function createResult(value, provenance, quality) {
|
|
328
|
+
validateProvenanceIdentity(provenance);
|
|
141
329
|
assertFiniteCalculationValue(value);
|
|
142
330
|
validateCalculationQuality(quality);
|
|
143
|
-
|
|
144
|
-
value
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
331
|
+
if (isFreezableResultNode(value)) {
|
|
332
|
+
Object.freeze(value);
|
|
333
|
+
}
|
|
334
|
+
// Provenance holds only strings and the assumptions array of strings, so freezing those two
|
|
335
|
+
// objects freezes it completely. This avoids a generic walk on every result (a measured hot
|
|
336
|
+
// path; see docs/API_STYLE.md "Read-only results").
|
|
337
|
+
Object.freeze(provenance);
|
|
338
|
+
const assumptions = provenance.assumptions;
|
|
339
|
+
if (assumptions !== undefined && !Object.isFrozen(assumptions)) {
|
|
340
|
+
Object.freeze(assumptions);
|
|
341
|
+
}
|
|
342
|
+
if (quality !== undefined) {
|
|
343
|
+
freezeMetadataTree(quality);
|
|
344
|
+
}
|
|
345
|
+
return Object.freeze(quality === undefined ? { value, provenance } : { value, provenance, quality });
|
|
148
346
|
}
|
|
149
347
|
/**
|
|
150
348
|
* Creates a deterministic calculated-result envelope.
|
|
@@ -177,7 +375,7 @@ export function estimatedResult(value, model, modelVersion, assumptions, quality
|
|
|
177
375
|
model,
|
|
178
376
|
modelVersion,
|
|
179
377
|
assumptions
|
|
180
|
-
}, quality);
|
|
378
|
+
}, requireQuality(quality, "estimated"));
|
|
181
379
|
}
|
|
182
380
|
/**
|
|
183
381
|
* Creates a calibrated-result envelope with explicit quality metadata.
|
|
@@ -188,6 +386,6 @@ export function calibratedResult(value, model, modelVersion, assumptions, qualit
|
|
|
188
386
|
model,
|
|
189
387
|
modelVersion,
|
|
190
388
|
assumptions
|
|
191
|
-
}, quality);
|
|
389
|
+
}, requireQuality(quality, "calibrated"));
|
|
192
390
|
}
|
|
193
391
|
//# sourceMappingURL=calculation-result.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculation-result.js","sourceRoot":"","sources":["../../src/core/calculation-result.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"calculation-result.js","sourceRoot":"","sources":["../../src/core/calculation-result.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * The standard result envelope that every public calculation returns.\n *\n * An envelope pairs a value with provenance (how it was produced) and, when it can be\n * stated, quality metadata (uncertainty and validity range). This module defines those\n * types, validates quality metadata, and provides one constructor per provenance kind.\n * @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.\n */\n\nimport { InvalidScientificResultError } from \"./validation.js\";\nimport { rejectUnknownFields, requireInputObject } from \"./record-validation.js\";\n\n/**\n * Scientific provenance labels used throughout the public API.\n */\nexport type ProvenanceKind =\n | \"calculated\"\n | \"calibrated\"\n | \"estimated\"\n | \"approximation\";\n\n/**\n * Metadata describing how a numerical result was produced.\n */\nexport interface CalculationProvenance {\n /** Classification of the result's scientific origin. */\n kind: ProvenanceKind;\n /** Stable identifier for the model or equation set. */\n model: string;\n /** Version of the model, independent of the package version. */\n modelVersion: string;\n /** Concise assumptions that materially affect interpretation. */\n assumptions?: readonly string[];\n}\n\n/**\n * Source category for a quantified uncertainty estimate.\n */\nexport type UncertaintySource =\n | \"measurement\"\n | \"model-approximation\"\n | \"calibration\";\n\n/**\n * Optional confidence metadata for a quantified uncertainty estimate.\n *\n * Give a confidence level only when you can state its basis. Do not use it as a\n * general, subjective confidence score.\n */\nexport interface UncertaintyConfidence {\n /** Confidence/coverage level as a fraction in the interval (0, 1]. */\n level: number;\n /** Concise description of the statistical/empirical basis. */\n basis: string;\n}\n\ninterface UncertaintyEstimateBase {\n /** JSON-style path to the affected result quantity, e.g. value.distanceM. */\n quantityPath: string;\n /** Physical/statistical origin of this uncertainty component. */\n source: UncertaintySource;\n /** Optional confidence/coverage metadata when scientifically meaningful. */\n confidence?: UncertaintyConfidence;\n /** Concise interpretation note, if needed. */\n note?: string;\n}\n\n/**\n * Absolute symmetric uncertainty around a result quantity.\n */\nexport interface AbsoluteUncertaintyEstimate extends UncertaintyEstimateBase {\n kind: \"absolute\";\n /** Symmetric ± magnitude in the explicitly named unit. */\n plusMinus: number;\n /** Explicit unit such as mm, m, px, or \"1\" for dimensionless values. */\n unit: string;\n}\n\n/**\n * Relative symmetric uncertainty around a result quantity.\n */\nexport interface RelativeUncertaintyEstimate extends UncertaintyEstimateBase {\n kind: \"relative\";\n /** Symmetric ± fractional magnitude; 0.05 means ±5%. */\n fraction: number;\n}\n\nexport type UncertaintyEstimate =\n | AbsoluteUncertaintyEstimate\n | RelativeUncertaintyEstimate;\n\n/**\n * The documented parameter range in which a model or calibration is valid.\n * It says where the model applies. It is not a statistical interval.\n */\nexport interface CalculationValidRange {\n /** JSON-style input/model parameter path, e.g. input.focusDistanceM. */\n parameterPath: string;\n /** Explicit unit such as m, mm, ISO, or \"1\" for dimensionless values. */\n unit: string;\n minimum?: number;\n maximum?: number;\n note?: string;\n}\n\n/**\n * Optional quality metadata for a calculation result.\n *\n * Uncertainty components stay separate. Do not add them, combine them in\n * quadrature (root-sum-of-squares) or merge them in any other way, unless you use\n * a scientifically justified method that documents its independence and\n * correlation assumptions.\n */\nexport interface CalculationQuality {\n uncertainty?: readonly UncertaintyEstimate[];\n validRanges?: readonly CalculationValidRange[];\n notes?: readonly string[];\n}\n\n/**\n * Standard result envelope for public scientific calculations.\n *\n * Deterministic analytical results stay lightweight. They omit `quality` when\n * there is no defensible uncertainty or accuracy metadata to report.\n *\n * Read-only from 2.0.0: the envelope, `provenance` and `quality` are frozen deeply and `value`\n * at its top level. Copy a value before changing it. Typed arrays inside a value stay mutable.\n * See docs/API_STYLE.md \"Read-only results\".\n *\n * @typeParam T Serializable value returned by the calculation.\n */\nexport interface CalculationResult<T> {\n readonly value: T;\n readonly provenance: CalculationProvenance;\n readonly quality?: CalculationQuality;\n}\n\nconst UNCERTAINTY_SOURCES = new Set<UncertaintySource>([\n \"measurement\",\n \"model-approximation\",\n \"calibration\"\n]);\n\nfunction requireNonEmptyString(path: string, value: unknown): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path} must not be empty.`\n );\n }\n}\n\nfunction requireNonNegativeFinite(path: string, value: number): void {\n if (!Number.isFinite(value) || value < 0) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path} must be finite and greater than or equal to zero.`\n );\n }\n}\n\nfunction validateConfidence(\n confidence: UncertaintyConfidence | undefined,\n path: string\n): void {\n if (confidence === undefined) {\n return;\n }\n requireInputObject(confidence, `Calculation quality field ${path}`);\n rejectUnknownFields(confidence, [\"level\", \"basis\"], `calculationQuality.${path}`);\n\n if (\n !Number.isFinite(confidence.level) ||\n confidence.level <= 0 ||\n confidence.level > 1\n ) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path}.level must be in (0, 1].`\n );\n }\n requireNonEmptyString(`${path}.basis`, confidence.basis);\n}\n\nconst UNCERTAINTY_BASE_KEYS = [\"kind\", \"quantityPath\", \"source\", \"confidence\", \"note\"] as const;\nconst ABSOLUTE_UNCERTAINTY_KEYS: readonly string[] = [...UNCERTAINTY_BASE_KEYS, \"plusMinus\", \"unit\"];\nconst RELATIVE_UNCERTAINTY_KEYS: readonly string[] = [...UNCERTAINTY_BASE_KEYS, \"fraction\"];\n\nfunction validateUncertaintyEstimate(\n estimate: UncertaintyEstimate,\n index: number\n): void {\n const path = `uncertainty[${index}]`;\n requireInputObject(estimate, `Calculation quality field ${path}`);\n if (estimate.kind === \"absolute\" || estimate.kind === \"relative\") {\n rejectUnknownFields(estimate, estimate.kind === \"absolute\" ? ABSOLUTE_UNCERTAINTY_KEYS : RELATIVE_UNCERTAINTY_KEYS,\n `calculationQuality.${path}`);\n }\n requireNonEmptyString(`${path}.quantityPath`, estimate.quantityPath);\n if (!UNCERTAINTY_SOURCES.has(estimate.source as UncertaintySource)) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path}.source is invalid.`\n );\n }\n validateConfidence(estimate.confidence, `${path}.confidence`);\n\n if (estimate.note !== undefined) {\n requireNonEmptyString(`${path}.note`, estimate.note);\n }\n\n if (estimate.kind === \"absolute\") {\n requireNonNegativeFinite(`${path}.plusMinus`, estimate.plusMinus);\n requireNonEmptyString(`${path}.unit`, estimate.unit);\n return;\n }\n\n if (estimate.kind === \"relative\") {\n requireNonNegativeFinite(`${path}.fraction`, estimate.fraction);\n return;\n }\n\n throw new InvalidScientificResultError(\n `Calculation quality field ${path}.kind is invalid.`\n );\n}\n\nfunction validateValidRange(\n range: CalculationValidRange,\n index: number\n): void {\n const path = `validRanges[${index}]`;\n requireInputObject(range, `Calculation quality field ${path}`);\n rejectUnknownFields(range, [\"parameterPath\", \"unit\", \"minimum\", \"maximum\", \"note\"], `calculationQuality.${path}`);\n requireNonEmptyString(`${path}.parameterPath`, range.parameterPath);\n requireNonEmptyString(`${path}.unit`, range.unit);\n\n if (range.minimum === undefined && range.maximum === undefined) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path} must include minimum or maximum.`\n );\n }\n\n if (range.minimum !== undefined && !Number.isFinite(range.minimum)) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path}.minimum must be finite.`\n );\n }\n if (range.maximum !== undefined && !Number.isFinite(range.maximum)) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path}.maximum must be finite.`\n );\n }\n if (\n range.minimum !== undefined &&\n range.maximum !== undefined &&\n range.minimum > range.maximum\n ) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path} minimum must not exceed maximum.`\n );\n }\n if (range.note !== undefined) {\n requireNonEmptyString(`${path}.note`, range.note);\n }\n}\n\n/**\n * Validates result-quality metadata before it enters a public result envelope.\n *\n * @param quality Optional calculation quality metadata.\n */\nexport function validateCalculationQuality(\n quality: CalculationQuality | undefined\n): void {\n if (quality === undefined) {\n return;\n }\n requireInputObject(quality, \"validateCalculationQuality input\");\n rejectUnknownFields(quality, [\"uncertainty\", \"validRanges\", \"notes\"], \"calculationQuality\");\n\n if (quality.uncertainty !== undefined) {\n if (quality.uncertainty.length === 0) {\n throw new InvalidScientificResultError(\n \"Calculation quality uncertainty must be omitted rather than empty.\"\n );\n }\n quality.uncertainty.forEach(validateUncertaintyEstimate);\n }\n\n if (quality.validRanges !== undefined) {\n if (quality.validRanges.length === 0) {\n throw new InvalidScientificResultError(\n \"Calculation quality validRanges must be omitted rather than empty.\"\n );\n }\n quality.validRanges.forEach(validateValidRange);\n }\n\n if (quality.notes !== undefined) {\n if (quality.notes.length === 0) {\n throw new InvalidScientificResultError(\n \"Calculation quality notes must be omitted rather than empty.\"\n );\n }\n quality.notes.forEach((note, index) => {\n requireNonEmptyString(`notes[${index}]`, note);\n });\n }\n\n if (\n quality.uncertainty === undefined &&\n quality.validRanges === undefined &&\n quality.notes === undefined\n ) {\n throw new InvalidScientificResultError(\n \"Calculation quality must contain uncertainty, validRanges, or notes.\"\n );\n }\n}\n\nfunction assertFiniteNumbers(\n value: unknown,\n path: string,\n seen: WeakSet<object>\n): void {\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new InvalidScientificResultError(\n `Calculation produced a non-finite number at ${path}.`\n );\n }\n return;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return;\n }\n\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n\n if (Array.isArray(value)) {\n value.forEach((entry, index) => {\n assertFiniteNumbers(entry, `${path}[${index}]`, seen);\n });\n return;\n }\n\n for (const [key, entry] of Object.entries(value)) {\n assertFiniteNumbers(entry, `${path}.${key}`, seen);\n }\n}\n\n/**\n * Fast check for a non-finite number anywhere in a value tree. It builds no path strings.\n *\n * It walks the tree exactly as assertFiniteNumbers does: own enumerable string keys in\n * Object.keys order (as Object.entries), array indices that are present (as forEach), and\n * each object once. The slower diagnostic walk runs only when this finds a non-finite\n * number, so the thrown error type and path message are unchanged.\n */\nfunction containsNonFiniteNumber(value: unknown, seen: WeakSet<object>): boolean {\n if (typeof value === \"number\") {\n return !Number.isFinite(value);\n }\n if (typeof value !== \"object\" || value === null || seen.has(value)) {\n return false;\n }\n seen.add(value);\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index++) {\n if (index in value && containsNonFiniteNumber(value[index], seen)) {\n return true;\n }\n }\n return false;\n }\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record);\n for (let index = 0; index < keys.length; index++) {\n if (containsNonFiniteNumber(record[keys[index]!], seen)) {\n return true;\n }\n }\n return false;\n}\n\n/** Object visits allowed to the memo-free pre-scan before it defers to the exact visited-set scan. */\nconst FAST_FINITE_SCAN_MAX_OBJECT_VISITS = 1 << 16;\n/** Nesting allowed to the memo-free pre-scan; a cycle or very deep tree defers to the exact scan. */\nconst FAST_FINITE_SCAN_MAX_DEPTH = 64;\nconst FAST_SCAN_FINITE = 0, FAST_SCAN_NON_FINITE = 1, FAST_SCAN_UNDECIDED = 2;\n/** Remaining object visits of the active pre-scan; saved and restored around nested scans. */\nlet fastFiniteScanBudget = 0;\n\n/**\n * Faster pre-scan that skips the visited-object WeakSet (a 2.0 performance change).\n *\n * It walks the tree like containsNonFiniteNumber (own enumerable string keys in Object.keys\n * order, present array indices). Without a WeakSet it may visit a shared node more than once.\n * So it gives up and returns UNDECIDED after FAST_FINITE_SCAN_MAX_OBJECT_VISITS objects or\n * FAST_FINITE_SCAN_MAX_DEPTH levels of nesting. Any cycle hits the depth limit.\n *\n * Revisiting cannot change the answer, because the set of reachable numbers is the same\n * either way. A non-finite number it finds is reachable, and a finished scan has seen every\n * reachable number. So any decided answer equals the exact scan's answer. UNDECIDED falls\n * back to the exact scan.\n */\nfunction scanNonFiniteWithoutMemo(value: unknown, depth: number): number {\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? FAST_SCAN_FINITE : FAST_SCAN_NON_FINITE;\n }\n if (typeof value !== \"object\" || value === null) {\n return FAST_SCAN_FINITE;\n }\n if (depth >= FAST_FINITE_SCAN_MAX_DEPTH || --fastFiniteScanBudget < 0) {\n return FAST_SCAN_UNDECIDED;\n }\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index++) {\n if (index in value) {\n const entry: unknown = value[index];\n if (typeof entry === \"number\") {\n if (!Number.isFinite(entry)) return FAST_SCAN_NON_FINITE;\n } else if (typeof entry === \"object\" && entry !== null) {\n const result = scanNonFiniteWithoutMemo(entry, depth + 1);\n if (result !== FAST_SCAN_FINITE) return result;\n }\n }\n }\n return FAST_SCAN_FINITE;\n }\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record);\n for (let index = 0; index < keys.length; index++) {\n const entry = record[keys[index]!];\n if (typeof entry === \"number\") {\n if (!Number.isFinite(entry)) return FAST_SCAN_NON_FINITE;\n } else if (typeof entry === \"object\" && entry !== null) {\n const result = scanNonFiniteWithoutMemo(entry, depth + 1);\n if (result !== FAST_SCAN_FINITE) return result;\n }\n }\n return FAST_SCAN_FINITE;\n}\n\n/** Internal: exact answer of containsNonFiniteNumber, using the memo-free pre-scan when it decides. */\nexport function calculationValueContainsNonFiniteNumber(value: unknown): boolean {\n const saved = fastFiniteScanBudget;\n fastFiniteScanBudget = FAST_FINITE_SCAN_MAX_OBJECT_VISITS;\n let result: number;\n try {\n result = scanNonFiniteWithoutMemo(value, 0);\n } finally {\n fastFiniteScanBudget = saved;\n }\n return result === FAST_SCAN_UNDECIDED ? containsNonFiniteNumber(value, new WeakSet<object>()) : result === FAST_SCAN_NON_FINITE;\n}\n\n/** Internal: the exact visited-set scan, exposed for equivalence tests only. */\nexport function calculationValueContainsNonFiniteNumberExact(value: unknown): boolean {\n return containsNonFiniteNumber(value, new WeakSet<object>());\n}\n\nfunction assertFiniteCalculationValue(value: unknown): void {\n if (calculationValueContainsNonFiniteNumber(value)) {\n assertFiniteNumbers(value, \"value\", new WeakSet<object>());\n }\n}\n\nfunction validateProvenanceIdentity(provenance: CalculationProvenance): void {\n for (const field of [\"model\", \"modelVersion\"] as const) {\n const entry: unknown = provenance[field];\n if (typeof entry !== \"string\" || entry.trim().length === 0) {\n throw new InvalidScientificResultError(\n `Calculation provenance ${field} must be a non-empty string.`\n );\n }\n }\n}\n\n/**\n * Estimated and calibrated results must carry quality metadata. The TypeScript\n * signature alone cannot stop a JavaScript caller from leaving it out, so check at runtime.\n */\nfunction requireQuality(\n quality: CalculationQuality | undefined,\n kind: \"estimated\" | \"calibrated\"\n): CalculationQuality {\n if (quality === undefined || quality === null) {\n throw new InvalidScientificResultError(\n `A ${kind} result requires calculation quality metadata.`\n );\n }\n return quality;\n}\n\n/** True for a plain record (prototype Object.prototype or null) or an array: the nodes a result freezes. */\nfunction isFreezableResultNode(node: unknown): node is object {\n if (node === null || typeof node !== \"object\") {\n return false;\n }\n if (Array.isArray(node)) {\n return true;\n }\n const prototype: unknown = Object.getPrototypeOf(node);\n return prototype === Object.prototype || prototype === null;\n}\n\n/**\n * Deep-freezes the plain records and arrays of provenance or quality metadata in place. A node\n * that is already frozen is not walked again, which also ends any cycle.\n */\nfunction freezeMetadataTree(node: unknown): void {\n if (!isFreezableResultNode(node) || Object.isFrozen(node)) {\n return;\n }\n Object.freeze(node);\n for (const entry of Object.values(node)) {\n freezeMetadataTree(entry);\n }\n}\n\n/**\n * Read-only result envelopes (from 2.0.0). The envelope, its provenance (with assumptions) and\n * its quality metadata are frozen deeply. `value` is frozen at its top level only:\n *\n * - Every public calculation builds at least one envelope, many per call on hot paths. A generic\n * deep walk of `value` made a small scalar call about 3× slower; this shallow freeze costs\n * about 1.4× (measured, docs/API_STYLE.md \"Read-only results\").\n * - A deep freeze would also freeze any caller-owned object that a value holds by reference.\n * test/result-envelope-freeze.test.ts checks that a calculation leaves its input as it was.\n * - Typed arrays, DataViews and ArrayBuffers cannot be frozen and stay mutable. Class\n * instances, Maps and Sets are not frozen.\n * - Domains that own their data still deep-freeze it (captures, RAW attachments, presets and\n * export metadata use freezeOwnedData), so those values are read-only all the way down.\n */\nfunction createResult<T>(\n value: T,\n provenance: CalculationProvenance,\n quality?: CalculationQuality\n): CalculationResult<T> {\n validateProvenanceIdentity(provenance);\n assertFiniteCalculationValue(value);\n validateCalculationQuality(quality);\n\n if (isFreezableResultNode(value)) {\n Object.freeze(value);\n }\n // Provenance holds only strings and the assumptions array of strings, so freezing those two\n // objects freezes it completely. This avoids a generic walk on every result (a measured hot\n // path; see docs/API_STYLE.md \"Read-only results\").\n Object.freeze(provenance);\n const assumptions = provenance.assumptions;\n if (assumptions !== undefined && !Object.isFrozen(assumptions)) {\n Object.freeze(assumptions);\n }\n if (quality !== undefined) {\n freezeMetadataTree(quality);\n }\n return Object.freeze(quality === undefined ? { value, provenance } : { value, provenance, quality });\n}\n\n/**\n * Creates a deterministic calculated-result envelope.\n */\nexport function calculatedResult<T>(\n value: T,\n model: string,\n modelVersion: string,\n assumptions?: readonly string[],\n quality?: CalculationQuality\n): CalculationResult<T> {\n return createResult(\n value,\n {\n kind: \"calculated\",\n model,\n modelVersion,\n ...(assumptions === undefined ? {} : { assumptions })\n },\n quality\n );\n}\n\n/**\n * Creates an approximation-result envelope.\n */\nexport function approximationResult<T>(\n value: T,\n model: string,\n modelVersion: string,\n assumptions: readonly string[],\n quality?: CalculationQuality\n): CalculationResult<T> {\n return createResult(\n value,\n {\n kind: \"approximation\",\n model,\n modelVersion,\n assumptions\n },\n quality\n );\n}\n\n/**\n * Creates an estimated-result envelope with explicit quality metadata.\n */\nexport function estimatedResult<T>(\n value: T,\n model: string,\n modelVersion: string,\n assumptions: readonly string[],\n quality: CalculationQuality\n): CalculationResult<T> {\n return createResult(\n value,\n {\n kind: \"estimated\",\n model,\n modelVersion,\n assumptions\n },\n requireQuality(quality, \"estimated\")\n );\n}\n\n/**\n * Creates a calibrated-result envelope with explicit quality metadata.\n */\nexport function calibratedResult<T>(\n value: T,\n model: string,\n modelVersion: string,\n assumptions: readonly string[],\n quality: CalculationQuality\n): CalculationResult<T> {\n return createResult(\n value,\n {\n kind: \"calibrated\",\n model,\n modelVersion,\n assumptions\n },\n requireQuality(quality, \"calibrated\")\n );\n}\n"]}
|
|
@@ -5,14 +5,19 @@ export interface CanonicalJsonPolicy {
|
|
|
5
5
|
unsupportedValueMessage: string;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
|
-
* Serializes a parsed, acyclic plain
|
|
9
|
-
* keys, original array order and finite JSON numbers. JSON escaping and negative
|
|
10
|
-
* zero representation follow JSON.stringify. The source is never mutated.
|
|
8
|
+
* Serializes a parsed, acyclic tree of plain data to JSON text.
|
|
11
9
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
10
|
+
* Object keys (enumerable) are sorted. Arrays keep their order. Numbers must be finite.
|
|
11
|
+
* String escaping and negative zero follow JSON.stringify. The input is never changed.
|
|
12
|
+
*
|
|
13
|
+
* The domain policy decides what happens to undefined object properties. These always
|
|
14
|
+
* fail with the policy's unsupported-value message:
|
|
15
|
+
* - undefined array entries and array holes;
|
|
16
|
+
* - non-plain objects (Map, Set, Date, typed arrays, class instances, or any prototype
|
|
17
|
+
* other than Object.prototype or null);
|
|
18
|
+
* - unsupported scalar types.
|
|
19
|
+
*
|
|
20
|
+
* The caller must rule out cycles first. This is serialization only. It is not a general
|
|
21
|
+
* input parser, a cryptographic hash or an implementation of a canonical-JSON standard.
|
|
16
22
|
*/
|
|
17
23
|
export declare function stringifyCanonicalJson(value: unknown, policy: CanonicalJsonPolicy): string;
|
|
18
|
-
//# sourceMappingURL=canonical-json.d.ts.map
|