@photivra/engine 0.6.0 → 1.0.1
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/AGENTS.md +674 -0
- package/CHANGELOG.md +191 -0
- package/CITATION.cff +1 -1
- package/CONTRIBUTING.md +76 -0
- package/DCO +33 -0
- package/NODE_SUPPORT.md +37 -0
- package/NOTICE +2 -0
- package/README.md +139 -72
- package/SECURITY.md +55 -0
- package/THIRD_PARTY.md +63 -0
- package/dist/camera/equivalent-focal-length.d.ts +9 -0
- package/dist/camera/equivalent-focal-length.d.ts.map +1 -1
- package/dist/camera/equivalent-focal-length.js +9 -0
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +13 -0
- package/dist/camera/field-of-view.d.ts.map +1 -1
- package/dist/camera/field-of-view.js +13 -0
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/projected-object-size.d.ts +8 -0
- package/dist/camera/projected-object-size.d.ts.map +1 -1
- package/dist/camera/projected-object-size.js +8 -0
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +60 -0
- package/dist/capture/capture-export-metadata.d.ts.map +1 -0
- package/dist/capture/capture-export-metadata.js +62 -0
- package/dist/capture/capture-export-metadata.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +55 -0
- package/dist/capture/environment-raw-producer.d.ts.map +1 -0
- package/dist/capture/environment-raw-producer.js +88 -0
- package/dist/capture/environment-raw-producer.js.map +1 -0
- package/dist/capture/export-jpeg.d.ts +12 -0
- package/dist/capture/export-jpeg.d.ts.map +1 -0
- package/dist/capture/export-jpeg.js +126 -0
- package/dist/capture/export-jpeg.js.map +1 -0
- package/dist/capture/export-tiff.d.ts +45 -0
- package/dist/capture/export-tiff.d.ts.map +1 -0
- package/dist/capture/export-tiff.js +129 -0
- package/dist/capture/export-tiff.js.map +1 -0
- package/dist/capture/focus-control.d.ts +210 -0
- package/dist/capture/focus-control.d.ts.map +1 -0
- package/dist/capture/focus-control.js +664 -0
- package/dist/capture/focus-control.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +59 -0
- package/dist/capture/linear-encoding.d.ts.map +1 -0
- package/dist/capture/linear-encoding.js +98 -0
- package/dist/capture/linear-encoding.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +135 -0
- package/dist/capture/photographic-export.d.ts.map +1 -0
- package/dist/capture/photographic-export.js +273 -0
- package/dist/capture/photographic-export.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +12 -0
- package/dist/capture/raw-frame-limits.d.ts.map +1 -0
- package/dist/capture/raw-frame-limits.js +13 -0
- package/dist/capture/raw-frame-limits.js.map +1 -0
- package/dist/capture/raw-frame-reconstruction.d.ts +48 -0
- package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -0
- package/dist/capture/raw-frame-reconstruction.js +146 -0
- package/dist/capture/raw-frame-reconstruction.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +120 -0
- package/dist/capture/release-sequence.d.ts.map +1 -0
- package/dist/capture/release-sequence.js +446 -0
- package/dist/capture/release-sequence.js.map +1 -0
- package/dist/capture/sensor-raw-frame.d.ts +34 -0
- package/dist/capture/sensor-raw-frame.d.ts.map +1 -0
- package/dist/capture/sensor-raw-frame.js +106 -0
- package/dist/capture/sensor-raw-frame.js.map +1 -0
- package/dist/capture/sensor-raw-producer.d.ts +51 -0
- package/dist/capture/sensor-raw-producer.d.ts.map +1 -0
- package/dist/capture/sensor-raw-producer.js +235 -0
- package/dist/capture/sensor-raw-producer.js.map +1 -0
- package/dist/capture/simulated-capture.d.ts +125 -0
- package/dist/capture/simulated-capture.d.ts.map +1 -0
- package/dist/capture/simulated-capture.js +248 -0
- package/dist/capture/simulated-capture.js.map +1 -0
- package/dist/color/capture-color.d.ts +73 -0
- package/dist/color/capture-color.d.ts.map +1 -0
- package/dist/color/capture-color.js +145 -0
- package/dist/color/capture-color.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +23 -0
- package/dist/color/sensor-color-development.d.ts.map +1 -0
- package/dist/color/sensor-color-development.js +56 -0
- package/dist/color/sensor-color-development.js.map +1 -0
- package/dist/color/white-balance.d.ts +175 -0
- package/dist/color/white-balance.d.ts.map +1 -0
- package/dist/color/white-balance.js +606 -0
- package/dist/color/white-balance.js.map +1 -0
- package/dist/composition/image-formation-plan.d.ts +481 -0
- package/dist/composition/image-formation-plan.d.ts.map +1 -0
- package/dist/composition/image-formation-plan.js +2499 -0
- package/dist/composition/image-formation-plan.js.map +1 -0
- package/dist/composition/plan-consumer.d.ts +53 -0
- package/dist/composition/plan-consumer.d.ts.map +1 -0
- package/dist/composition/plan-consumer.js +119 -0
- package/dist/composition/plan-consumer.js.map +1 -0
- package/dist/core/calculation-result.d.ts.map +1 -1
- package/dist/core/calculation-result.js +6 -0
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +18 -0
- package/dist/core/canonical-json.d.ts.map +1 -0
- package/dist/core/canonical-json.js +44 -0
- package/dist/core/canonical-json.js.map +1 -0
- package/dist/core/configuration-error.d.ts +6 -0
- package/dist/core/configuration-error.d.ts.map +1 -1
- package/dist/core/configuration-error.js +6 -0
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +6 -0
- package/dist/core/evidence-provenance.d.ts.map +1 -1
- package/dist/core/evidence-provenance.js +7 -0
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +9 -3
- package/dist/core/image-formation.d.ts.map +1 -1
- package/dist/core/image-formation.js +29 -5
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +25 -0
- package/dist/core/owned-data.d.ts.map +1 -0
- package/dist/core/owned-data.js +34 -0
- package/dist/core/owned-data.js.map +1 -0
- package/dist/core/record-validation.d.ts +17 -0
- package/dist/core/record-validation.d.ts.map +1 -0
- package/dist/core/record-validation.js +44 -0
- package/dist/core/record-validation.js.map +1 -0
- package/dist/core/scientific-assurance.d.ts +101 -0
- package/dist/core/scientific-assurance.d.ts.map +1 -0
- package/dist/core/scientific-assurance.js +301 -0
- package/dist/core/scientific-assurance.js.map +1 -0
- package/dist/core/spectral-composition.d.ts +106 -0
- package/dist/core/spectral-composition.d.ts.map +1 -0
- package/dist/core/spectral-composition.js +334 -0
- package/dist/core/spectral-composition.js.map +1 -0
- package/dist/core/spectral.d.ts +34 -0
- package/dist/core/spectral.d.ts.map +1 -0
- package/dist/core/spectral.js +57 -0
- package/dist/core/spectral.js.map +1 -0
- package/dist/core/validation.d.ts +6 -0
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +6 -0
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +9 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +10 -0
- package/dist/core/version.js.map +1 -0
- package/dist/equipment/exposure-capabilities.d.ts +125 -0
- package/dist/equipment/exposure-capabilities.d.ts.map +1 -0
- package/dist/equipment/exposure-capabilities.js +391 -0
- package/dist/equipment/exposure-capabilities.js.map +1 -0
- package/dist/equipment/generic-tier-assets.d.ts +82 -0
- package/dist/equipment/generic-tier-assets.d.ts.map +1 -0
- package/dist/equipment/generic-tier-assets.js +119 -0
- package/dist/equipment/generic-tier-assets.js.map +1 -0
- package/dist/equipment/generic-tier-presets.d.ts +57 -0
- package/dist/equipment/generic-tier-presets.d.ts.map +1 -0
- package/dist/equipment/generic-tier-presets.js +122 -0
- package/dist/equipment/generic-tier-presets.js.map +1 -0
- package/dist/equipment/iso-capabilities.d.ts +143 -0
- package/dist/equipment/iso-capabilities.d.ts.map +1 -0
- package/dist/equipment/iso-capabilities.js +578 -0
- package/dist/equipment/iso-capabilities.js.map +1 -0
- package/dist/equipment/metering-capabilities.d.ts +58 -0
- package/dist/equipment/metering-capabilities.d.ts.map +1 -0
- package/dist/equipment/metering-capabilities.js +151 -0
- package/dist/equipment/metering-capabilities.js.map +1 -0
- package/dist/equipment/release-capabilities.d.ts +33 -0
- package/dist/equipment/release-capabilities.d.ts.map +1 -0
- package/dist/equipment/release-capabilities.js +176 -0
- package/dist/equipment/release-capabilities.js.map +1 -0
- package/dist/exposure/exposure-duration-control.d.ts +72 -0
- package/dist/exposure/exposure-duration-control.d.ts.map +1 -0
- package/dist/exposure/exposure-duration-control.js +161 -0
- package/dist/exposure/exposure-duration-control.js.map +1 -0
- package/dist/exposure/exposure-mode-resolver.d.ts +637 -0
- package/dist/exposure/exposure-mode-resolver.d.ts.map +1 -0
- package/dist/exposure/exposure-mode-resolver.js +1905 -0
- package/dist/exposure/exposure-mode-resolver.js.map +1 -0
- package/dist/exposure/exposure.d.ts +8 -0
- package/dist/exposure/exposure.d.ts.map +1 -1
- package/dist/exposure/exposure.js +8 -0
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash.d.ts +179 -0
- package/dist/exposure/flash.d.ts.map +1 -0
- package/dist/exposure/flash.js +644 -0
- package/dist/exposure/flash.js.map +1 -0
- package/dist/exposure/metering-scene-radiance.d.ts +72 -0
- package/dist/exposure/metering-scene-radiance.d.ts.map +1 -0
- package/dist/exposure/metering-scene-radiance.js +222 -0
- package/dist/exposure/metering-scene-radiance.js.map +1 -0
- package/dist/exposure/metering-target.d.ts +67 -0
- package/dist/exposure/metering-target.d.ts.map +1 -0
- package/dist/exposure/metering-target.js +265 -0
- package/dist/exposure/metering-target.js.map +1 -0
- package/dist/exposure/metering-temporal.d.ts +76 -0
- package/dist/exposure/metering-temporal.d.ts.map +1 -0
- package/dist/exposure/metering-temporal.js +210 -0
- package/dist/exposure/metering-temporal.js.map +1 -0
- package/dist/exposure/metering.d.ts +124 -0
- package/dist/exposure/metering.d.ts.map +1 -0
- package/dist/exposure/metering.js +422 -0
- package/dist/exposure/metering.js.map +1 -0
- package/dist/exposure/program-line.d.ts +29 -0
- package/dist/exposure/program-line.d.ts.map +1 -0
- package/dist/exposure/program-line.js +126 -0
- package/dist/exposure/program-line.js.map +1 -0
- package/dist/index.d.ts +87 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +85 -6
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +16 -0
- package/dist/motion/camera-rotation.d.ts.map +1 -1
- package/dist/motion/camera-rotation.js +16 -0
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +13 -0
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.js +13 -0
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +15 -0
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.js +15 -0
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +15 -0
- package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -1
- package/dist/motion/capture-rotation-trajectory.js +15 -0
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +119 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +1 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +263 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -0
- package/dist/motion/extended-object-projection.d.ts +175 -0
- package/dist/motion/extended-object-projection.d.ts.map +1 -0
- package/dist/motion/extended-object-projection.js +402 -0
- package/dist/motion/extended-object-projection.js.map +1 -0
- package/dist/motion/projected-motion.d.ts +11 -0
- package/dist/motion/projected-motion.d.ts.map +1 -1
- package/dist/motion/projected-motion.js +11 -0
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/optics/aperture.d.ts +9 -0
- package/dist/optics/aperture.d.ts.map +1 -1
- package/dist/optics/aperture.js +9 -0
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/circle-of-confusion.d.ts +8 -0
- package/dist/optics/circle-of-confusion.d.ts.map +1 -1
- package/dist/optics/circle-of-confusion.js +8 -0
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +128 -0
- package/dist/optics/complex-pupil-psf.d.ts.map +1 -0
- package/dist/optics/complex-pupil-psf.js +462 -0
- package/dist/optics/complex-pupil-psf.js.map +1 -0
- package/dist/optics/depth-of-field.d.ts +18 -0
- package/dist/optics/depth-of-field.d.ts.map +1 -1
- package/dist/optics/depth-of-field.js +29 -4
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +8 -0
- package/dist/optics/diffraction.d.ts.map +1 -1
- package/dist/optics/diffraction.js +8 -0
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +13 -0
- package/dist/optics/focus-breathing.d.ts.map +1 -1
- package/dist/optics/focus-breathing.js +13 -0
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +47 -0
- package/dist/optics/focus-state.d.ts.map +1 -0
- package/dist/optics/focus-state.js +78 -0
- package/dist/optics/focus-state.js.map +1 -0
- package/dist/optics/front-of-lens-filter.d.ts +114 -0
- package/dist/optics/front-of-lens-filter.d.ts.map +1 -0
- package/dist/optics/front-of-lens-filter.js +468 -0
- package/dist/optics/front-of-lens-filter.js.map +1 -0
- package/dist/optics/illumination-vignetting.d.ts +9 -0
- package/dist/optics/illumination-vignetting.d.ts.map +1 -1
- package/dist/optics/illumination-vignetting.js +9 -0
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts +11 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
- package/dist/optics/lateral-chromatic-aberration.js +11 -0
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-profile.d.ts +217 -0
- package/dist/optics/lens-psf-profile.d.ts.map +1 -0
- package/dist/optics/lens-psf-profile.js +823 -0
- package/dist/optics/lens-psf-profile.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +67 -0
- package/dist/optics/polygon-diffraction.d.ts.map +1 -0
- package/dist/optics/polygon-diffraction.js +145 -0
- package/dist/optics/polygon-diffraction.js.map +1 -0
- package/dist/optics/profile-contract.d.ts +42 -0
- package/dist/optics/profile-contract.d.ts.map +1 -0
- package/dist/optics/profile-contract.js +92 -0
- package/dist/optics/profile-contract.js.map +1 -0
- package/dist/optics/psf-foundation.d.ts +16 -3
- package/dist/optics/psf-foundation.d.ts.map +1 -1
- package/dist/optics/psf-foundation.js +28 -15
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/radial-distortion.d.ts +18 -0
- package/dist/optics/radial-distortion.d.ts.map +1 -1
- package/dist/optics/radial-distortion.js +18 -0
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +213 -0
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +1 -0
- package/dist/optics/scene-to-sensor-irradiance.js +662 -0
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -0
- package/dist/optics/scene-to-sensor-quadrature.d.ts +63 -0
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +1 -0
- package/dist/optics/scene-to-sensor-quadrature.js +82 -0
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -0
- package/dist/optics/sensor-environment-query.d.ts +60 -0
- package/dist/optics/sensor-environment-query.d.ts.map +1 -0
- package/dist/optics/sensor-environment-query.js +50 -0
- package/dist/optics/sensor-environment-query.js.map +1 -0
- package/dist/optics/sensor-psf-quadrature.d.ts +70 -0
- package/dist/optics/sensor-psf-quadrature.d.ts.map +1 -0
- package/dist/optics/sensor-psf-quadrature.js +101 -0
- package/dist/optics/sensor-psf-quadrature.js.map +1 -0
- package/dist/optics/sensor-psf-support.d.ts +20 -0
- package/dist/optics/sensor-psf-support.d.ts.map +1 -0
- package/dist/optics/sensor-psf-support.js +13 -0
- package/dist/optics/sensor-psf-support.js.map +1 -0
- package/dist/optics/stray-light.d.ts +91 -0
- package/dist/optics/stray-light.d.ts.map +1 -0
- package/dist/optics/stray-light.js +110 -0
- package/dist/optics/stray-light.js.map +1 -0
- package/dist/optics/thin-lens.d.ts +8 -0
- package/dist/optics/thin-lens.d.ts.map +1 -1
- package/dist/optics/thin-lens.js +8 -0
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/output/capture-corrected-sdr.d.ts +49 -0
- package/dist/output/capture-corrected-sdr.d.ts.map +1 -0
- package/dist/output/capture-corrected-sdr.js +149 -0
- package/dist/output/capture-corrected-sdr.js.map +1 -0
- package/dist/output/capture-geometry.d.ts.map +1 -1
- package/dist/output/capture-geometry.js +8 -0
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +49 -0
- package/dist/output/capture-sdr.d.ts.map +1 -0
- package/dist/output/capture-sdr.js +90 -0
- package/dist/output/capture-sdr.js.map +1 -0
- package/dist/output/crop.d.ts +6 -0
- package/dist/output/crop.d.ts.map +1 -1
- package/dist/output/crop.js +6 -0
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +137 -0
- package/dist/output/geometric-transforms.d.ts.map +1 -0
- package/dist/output/geometric-transforms.js +225 -0
- package/dist/output/geometric-transforms.js.map +1 -0
- package/dist/output/lens-corrections.d.ts +121 -0
- package/dist/output/lens-corrections.d.ts.map +1 -0
- package/dist/output/lens-corrections.js +210 -0
- package/dist/output/lens-corrections.js.map +1 -0
- package/dist/output/sdr-rendering.d.ts +81 -0
- package/dist/output/sdr-rendering.d.ts.map +1 -0
- package/dist/output/sdr-rendering.js +106 -0
- package/dist/output/sdr-rendering.js.map +1 -0
- package/dist/output/subject-framing-crop.d.ts +8 -0
- package/dist/output/subject-framing-crop.d.ts.map +1 -1
- package/dist/output/subject-framing-crop.js +8 -0
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/schema/camera.d.ts +6 -0
- package/dist/schema/camera.d.ts.map +1 -1
- package/dist/schema/illumination-spectral.d.ts +51 -0
- package/dist/schema/illumination-spectral.d.ts.map +1 -0
- package/dist/schema/illumination-spectral.js +132 -0
- package/dist/schema/illumination-spectral.js.map +1 -0
- package/dist/schema/illumination-temporal.d.ts +156 -0
- package/dist/schema/illumination-temporal.d.ts.map +1 -0
- package/dist/schema/illumination-temporal.js +554 -0
- package/dist/schema/illumination-temporal.js.map +1 -0
- package/dist/schema/illumination.d.ts +138 -0
- package/dist/schema/illumination.d.ts.map +1 -0
- package/dist/schema/illumination.js +483 -0
- package/dist/schema/illumination.js.map +1 -0
- package/dist/schema/scene-radiance-temporal.d.ts +107 -0
- package/dist/schema/scene-radiance-temporal.d.ts.map +1 -0
- package/dist/schema/scene-radiance-temporal.js +259 -0
- package/dist/schema/scene-radiance-temporal.js.map +1 -0
- package/dist/schema/scene-radiance.d.ts +185 -0
- package/dist/schema/scene-radiance.d.ts.map +1 -0
- package/dist/schema/scene-radiance.js +535 -0
- package/dist/schema/scene-radiance.js.map +1 -0
- package/dist/schema/scene.d.ts +7 -0
- package/dist/schema/scene.d.ts.map +1 -1
- package/dist/schema/validation.d.ts.map +1 -1
- package/dist/schema/validation.js +7 -0
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +199 -0
- package/dist/sensor/accumulated-charge.d.ts.map +1 -0
- package/dist/sensor/accumulated-charge.js +450 -0
- package/dist/sensor/accumulated-charge.js.map +1 -0
- package/dist/sensor/architecture.d.ts +48 -13
- package/dist/sensor/architecture.d.ts.map +1 -1
- package/dist/sensor/architecture.js +58 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +138 -0
- package/dist/sensor/camera-saturation-capacity.d.ts.map +1 -0
- package/dist/sensor/camera-saturation-capacity.js +356 -0
- package/dist/sensor/camera-saturation-capacity.js.map +1 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts +1 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.js +14 -0
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +63 -0
- package/dist/sensor/capture-mode-timing.d.ts.map +1 -0
- package/dist/sensor/capture-mode-timing.js +270 -0
- package/dist/sensor/capture-mode-timing.js.map +1 -0
- package/dist/sensor/capture-mode.d.ts.map +1 -1
- package/dist/sensor/capture-mode.js +13 -0
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts.map +1 -1
- package/dist/sensor/color-sampling.js +19 -0
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
- package/dist/sensor/constant-rate-temporal-integration.js +382 -0
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
- package/dist/sensor/dark-current.d.ts +169 -0
- package/dist/sensor/dark-current.d.ts.map +1 -0
- package/dist/sensor/dark-current.js +427 -0
- package/dist/sensor/dark-current.js.map +1 -0
- package/dist/sensor/environment-photo-signal.d.ts +123 -0
- package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
- package/dist/sensor/environment-photo-signal.js +186 -0
- package/dist/sensor/environment-photo-signal.js.map +1 -0
- package/dist/sensor/eqe-electron-rate.d.ts +107 -0
- package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
- package/dist/sensor/eqe-electron-rate.js +561 -0
- package/dist/sensor/eqe-electron-rate.js.map +1 -0
- package/dist/sensor/eqe-local-exposure.d.ts +65 -0
- package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
- package/dist/sensor/eqe-local-exposure.js +84 -0
- package/dist/sensor/eqe-local-exposure.js.map +1 -0
- package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
- package/dist/sensor/eqe-temporal-exposure.js +62 -0
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
- package/dist/sensor/exposure-window.d.ts +14 -0
- package/dist/sensor/exposure-window.d.ts.map +1 -1
- package/dist/sensor/exposure-window.js +14 -0
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/iso-signal-chain.d.ts +148 -0
- package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
- package/dist/sensor/iso-signal-chain.js +411 -0
- package/dist/sensor/iso-signal-chain.js.map +1 -0
- package/dist/sensor/local-exposure-binding.d.ts +87 -0
- package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
- package/dist/sensor/local-exposure-binding.js +214 -0
- package/dist/sensor/local-exposure-binding.js.map +1 -0
- package/dist/sensor/optical-stack.d.ts.map +1 -1
- package/dist/sensor/optical-stack.js +17 -0
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +97 -0
- package/dist/sensor/photon-energy.d.ts.map +1 -0
- package/dist/sensor/photon-energy.js +390 -0
- package/dist/sensor/photon-energy.js.map +1 -0
- package/dist/sensor/physical-charge-capacity.d.ts +130 -0
- package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
- package/dist/sensor/physical-charge-capacity.js +345 -0
- package/dist/sensor/physical-charge-capacity.js.map +1 -0
- package/dist/sensor/pixel-pitch.d.ts +6 -0
- package/dist/sensor/pixel-pitch.d.ts.map +1 -1
- package/dist/sensor/pixel-pitch.js +6 -0
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +10 -0
- package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
- package/dist/sensor/radiometry-readiness.js +10 -0
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +314 -0
- package/dist/sensor/raw-readout.d.ts.map +1 -0
- package/dist/sensor/raw-readout.js +914 -0
- package/dist/sensor/raw-readout.js.map +1 -0
- package/dist/sensor/raw-reconstruction.d.ts +170 -0
- package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
- package/dist/sensor/raw-reconstruction.js +424 -0
- package/dist/sensor/raw-reconstruction.js.map +1 -0
- package/dist/sensor/readout-exposure-linkage.d.ts +12 -0
- package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -1
- package/dist/sensor/readout-exposure-linkage.js +12 -0
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +13 -0
- package/dist/sensor/readout-timing.d.ts.map +1 -1
- package/dist/sensor/readout-timing.js +13 -0
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +136 -0
- package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
- package/dist/sensor/response-application-compatibility.js +408 -0
- package/dist/sensor/response-application-compatibility.js.map +1 -0
- package/dist/sensor/response-operating-range.d.ts +173 -0
- package/dist/sensor/response-operating-range.d.ts.map +1 -0
- package/dist/sensor/response-operating-range.js +672 -0
- package/dist/sensor/response-operating-range.js.map +1 -0
- package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
- package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
- package/dist/sensor/responsivity-photocurrent.js +644 -0
- package/dist/sensor/responsivity-photocurrent.js.map +1 -0
- package/dist/sensor/sampling-aperture.d.ts.map +1 -1
- package/dist/sensor/sampling-aperture.js +14 -0
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
- package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
- package/dist/sensor/sensor-geometry.d.ts +12 -0
- package/dist/sensor/sensor-geometry.d.ts.map +1 -1
- package/dist/sensor/sensor-geometry.js +12 -0
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +10 -0
- package/dist/sensor/signal-noise.d.ts.map +1 -1
- package/dist/sensor/signal-noise.js +10 -0
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +44 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -1
- package/dist/sensor/spatial-sample-reduction.js +51 -5
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +24 -0
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.js +27 -0
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
- package/dist/sensor/spatio-spectral-reduction.js +373 -0
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
- package/dist/sensor/spectral-coverage.d.ts +24 -0
- package/dist/sensor/spectral-coverage.d.ts.map +1 -0
- package/dist/sensor/spectral-coverage.js +86 -0
- package/dist/sensor/spectral-coverage.js.map +1 -0
- package/dist/sensor/spectral-quadrature.d.ts +169 -0
- package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
- package/dist/sensor/spectral-quadrature.js +542 -0
- package/dist/sensor/spectral-quadrature.js.map +1 -0
- package/dist/sensor/spectral-response.d.ts +192 -0
- package/dist/sensor/spectral-response.d.ts.map +1 -0
- package/dist/sensor/spectral-response.js +664 -0
- package/dist/sensor/spectral-response.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
- package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
- package/dist/sensor/temporal-eqe-sum.js +30 -0
- package/dist/sensor/temporal-eqe-sum.js.map +1 -0
- package/dist/sensor/temporal-photo-signal.d.ts +38 -0
- package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
- package/dist/sensor/temporal-photo-signal.js +110 -0
- package/dist/sensor/temporal-photo-signal.js.map +1 -0
- package/dist/sensor/temporal-sample-binding.d.ts +6 -0
- package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
- package/dist/sensor/temporal-sample-binding.js +32 -0
- package/dist/sensor/temporal-sample-binding.js.map +1 -0
- package/dist/simulation/poc-simulation.d.ts.map +1 -1
- package/dist/simulation/poc-simulation.js +34 -11
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +11 -0
- package/dist/stabilization/camera-shake.d.ts.map +1 -1
- package/dist/stabilization/camera-shake.js +11 -0
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +218 -0
- package/dist/stabilization/system.d.ts.map +1 -0
- package/dist/stabilization/system.js +695 -0
- package/dist/stabilization/system.js.map +1 -0
- package/docs/API_REFERENCE.md +2017 -0
- package/docs/API_STYLE.md +139 -3
- package/docs/ARCHITECTURE.md +134 -24
- package/docs/AUTOMATION_COORDINATION.md +2 -0
- package/docs/CAPTURE_COLOR.md +25 -0
- package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
- package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
- package/docs/CAPTURE_SDR.md +20 -0
- package/docs/DEVELOPERS.md +60 -0
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
- package/docs/EXPORT_ACCEPTANCE.md +133 -0
- package/docs/GENERIC_TIER_PRESETS.md +269 -0
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
- package/docs/IMAGE_FORMATION.md +80 -10
- package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
- package/docs/MOTION_AND_SIGNAL.md +5 -3
- package/docs/NUMERICAL_CORRECTNESS.md +191 -0
- package/docs/PERFORMANCE_BASELINE.md +56 -0
- package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
- package/docs/PHYSICS_FOUNDATION.md +152 -5
- package/docs/POC_API.md +2 -0
- package/docs/POC_PROJECTION_REUSE.md +124 -0
- package/docs/PROCESSED_OUTPUT.md +157 -0
- package/docs/PRODUCTION_COMPOSITION.md +373 -0
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
- package/docs/PROVENANCE.md +4 -0
- package/docs/PSF_FOUNDATION.md +110 -88
- package/docs/RAW_FRAME_ENVELOPE.md +56 -0
- package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
- package/docs/RELEASE_1_0.md +66 -0
- package/docs/RELEASE_1_0_1.md +61 -0
- package/docs/RELEASE_AUDIT.md +39 -0
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
- package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
- package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
- package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
- package/docs/SDR_RENDERING.md +33 -0
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
- package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
- package/docs/SENSOR_RAW_FRAME.md +20 -0
- package/docs/SENSOR_RAW_PRODUCER.md +77 -0
- package/docs/SIGNAL_CONFORMANCE.md +23 -0
- package/docs/SIMULATED_CAPTURE.md +65 -0
- package/docs/STABILIZATION.md +160 -17
- package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
- package/docs/TIER_ACCEPTANCE.md +129 -0
- package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
- package/docs/USAGE.md +5050 -1047
- package/docs/V1_COMPOSITION_MAP.md +123 -0
- package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
- package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
- package/docs/api/camera-equivalent-focal-length.md +53 -0
- package/docs/api/camera-field-of-view.md +119 -0
- package/docs/api/camera-projected-object-size.md +54 -0
- package/docs/api/capture-capture-export-metadata.md +107 -0
- package/docs/api/capture-environment-raw-producer.md +56 -0
- package/docs/api/capture-focus-control.md +419 -0
- package/docs/api/capture-linear-encoding.md +99 -0
- package/docs/api/capture-photographic-export.md +172 -0
- package/docs/api/capture-raw-frame-reconstruction.md +87 -0
- package/docs/api/capture-release-sequence.md +252 -0
- package/docs/api/capture-sensor-raw-frame.md +66 -0
- package/docs/api/capture-sensor-raw-producer.md +98 -0
- package/docs/api/capture-simulated-capture.md +179 -0
- package/docs/api/color-capture-color.md +122 -0
- package/docs/api/color-white-balance.md +386 -0
- package/docs/api/composition-image-formation-plan.md +825 -0
- package/docs/api/composition-plan-consumer.md +98 -0
- package/docs/api/core-calculation-result.md +220 -0
- package/docs/api/core-configuration-error.md +19 -0
- package/docs/api/core-image-formation.md +204 -0
- package/docs/api/core-scientific-assurance.md +214 -0
- package/docs/api/core-spectral-composition.md +268 -0
- package/docs/api/core-spectral.md +78 -0
- package/docs/api/core-validation.md +34 -0
- package/docs/api/core-version.md +14 -0
- package/docs/api/equipment-exposure-capabilities.md +270 -0
- package/docs/api/equipment-generic-tier-assets.md +82 -0
- package/docs/api/equipment-generic-tier-presets.md +103 -0
- package/docs/api/equipment-iso-capabilities.md +295 -0
- package/docs/api/equipment-metering-capabilities.md +126 -0
- package/docs/api/equipment-release-capabilities.md +91 -0
- package/docs/api/exports.json +5656 -0
- package/docs/api/exposure-exposure-duration-control.md +115 -0
- package/docs/api/exposure-exposure-mode-resolver.md +966 -0
- package/docs/api/exposure-exposure.md +150 -0
- package/docs/api/exposure-flash.md +327 -0
- package/docs/api/exposure-metering-scene-radiance.md +154 -0
- package/docs/api/exposure-metering-target.md +134 -0
- package/docs/api/exposure-metering-temporal.md +77 -0
- package/docs/api/exposure-metering.md +172 -0
- package/docs/api/exposure-program-line.md +64 -0
- package/docs/api/motion-camera-rotation.md +215 -0
- package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
- package/docs/api/motion-capture-rotation-trajectory.md +132 -0
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
- package/docs/api/motion-extended-object-projection.md +312 -0
- package/docs/api/motion-projected-motion.md +60 -0
- package/docs/api/optics-aperture.md +69 -0
- package/docs/api/optics-circle-of-confusion.md +46 -0
- package/docs/api/optics-complex-pupil-psf.md +193 -0
- package/docs/api/optics-depth-of-field.md +92 -0
- package/docs/api/optics-diffraction.md +46 -0
- package/docs/api/optics-focus-breathing.md +119 -0
- package/docs/api/optics-focus-state.md +64 -0
- package/docs/api/optics-front-of-lens-filter.md +263 -0
- package/docs/api/optics-illumination-vignetting.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
- package/docs/api/optics-lens-psf-profile.md +380 -0
- package/docs/api/optics-polygon-diffraction.md +68 -0
- package/docs/api/optics-profile-contract.md +47 -0
- package/docs/api/optics-psf-foundation.md +181 -0
- package/docs/api/optics-radial-distortion.md +194 -0
- package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
- package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
- package/docs/api/optics-sensor-environment-query.md +58 -0
- package/docs/api/optics-sensor-psf-quadrature.md +81 -0
- package/docs/api/optics-stray-light.md +109 -0
- package/docs/api/optics-thin-lens.md +53 -0
- package/docs/api/output-capture-corrected-sdr.md +71 -0
- package/docs/api/output-capture-geometry.md +500 -0
- package/docs/api/output-capture-sdr.md +69 -0
- package/docs/api/output-crop.md +47 -0
- package/docs/api/output-geometric-transforms.md +199 -0
- package/docs/api/output-lens-corrections.md +162 -0
- package/docs/api/output-sdr-rendering.md +122 -0
- package/docs/api/output-subject-framing-crop.md +59 -0
- package/docs/api/schema-camera.md +84 -0
- package/docs/api/schema-illumination-spectral.md +77 -0
- package/docs/api/schema-illumination-temporal.md +289 -0
- package/docs/api/schema-illumination.md +246 -0
- package/docs/api/schema-scene-radiance-temporal.md +215 -0
- package/docs/api/schema-scene-radiance.md +415 -0
- package/docs/api/schema-scene.md +105 -0
- package/docs/api/schema-validation.md +25 -0
- package/docs/api/sensor-accumulated-charge.md +273 -0
- package/docs/api/sensor-architecture.md +155 -0
- package/docs/api/sensor-camera-saturation-capacity.md +215 -0
- package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
- package/docs/api/sensor-capture-mode-timing.md +123 -0
- package/docs/api/sensor-capture-mode.md +321 -0
- package/docs/api/sensor-color-sampling.md +228 -0
- package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
- package/docs/api/sensor-dark-current.md +227 -0
- package/docs/api/sensor-environment-photo-signal.md +77 -0
- package/docs/api/sensor-eqe-electron-rate.md +166 -0
- package/docs/api/sensor-eqe-local-exposure.md +68 -0
- package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
- package/docs/api/sensor-exposure-window.md +183 -0
- package/docs/api/sensor-iso-signal-chain.md +264 -0
- package/docs/api/sensor-local-exposure-binding.md +126 -0
- package/docs/api/sensor-optical-stack.md +211 -0
- package/docs/api/sensor-photon-energy.md +149 -0
- package/docs/api/sensor-physical-charge-capacity.md +196 -0
- package/docs/api/sensor-pixel-pitch.md +41 -0
- package/docs/api/sensor-radiometry-readiness.md +240 -0
- package/docs/api/sensor-raw-readout.md +499 -0
- package/docs/api/sensor-raw-reconstruction.md +260 -0
- package/docs/api/sensor-readout-exposure-linkage.md +172 -0
- package/docs/api/sensor-readout-timing.md +209 -0
- package/docs/api/sensor-response-application-compatibility.md +256 -0
- package/docs/api/sensor-response-operating-range.md +293 -0
- package/docs/api/sensor-responsivity-photocurrent.md +245 -0
- package/docs/api/sensor-sampling-aperture.md +221 -0
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
- package/docs/api/sensor-sensor-geometry.md +143 -0
- package/docs/api/sensor-signal-noise.md +75 -0
- package/docs/api/sensor-spatial-sample-reduction.md +186 -0
- package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
- package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
- package/docs/api/sensor-spectral-coverage.md +33 -0
- package/docs/api/sensor-spectral-quadrature.md +183 -0
- package/docs/api/sensor-spectral-response.md +291 -0
- package/docs/api/sensor-temporal-photo-signal.md +62 -0
- package/docs/api/simulation-poc-simulation.md +364 -0
- package/docs/api/stabilization-camera-shake.md +71 -0
- package/docs/api/stabilization-system.md +442 -0
- package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
- package/docs/examples/production-capture.mjs +34 -0
- package/docs/examples/production-request.json +4613 -0
- package/docs/examples/quick-start.mjs +12 -0
- package/docs/validation/documentation-fragments.json +212 -0
- package/docs/validation/release-audit-inventory.json +1306 -0
- package/docs/validation/tier-acceptance-report-v1.json +2538 -0
- package/package.json +15 -3
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Returns the public image-formation ownership/order contract. The result is descriptive metadata, not
|
|
5
|
+
* a renderer implementation or an assertion that every reserved stage is currently available.
|
|
6
|
+
* @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
7
|
+
*/
|
|
2
8
|
/**
|
|
3
9
|
* Version of the public image-formation ordering contract.
|
|
4
10
|
*
|
|
@@ -6,9 +12,10 @@
|
|
|
6
12
|
* versions. It describes semantic ownership/order only; it does not imply that
|
|
7
13
|
* every reserved stage is implemented.
|
|
8
14
|
*/
|
|
9
|
-
export const IMAGE_FORMATION_CONTRACT_VERSION = "0.
|
|
15
|
+
export const IMAGE_FORMATION_CONTRACT_VERSION = "0.4.0";
|
|
10
16
|
const DOMAINS = [
|
|
11
17
|
"scene-ray-geometry",
|
|
18
|
+
"scene-radiance-formation",
|
|
12
19
|
"lens-pupil-throughput",
|
|
13
20
|
"field-wavelength-psf",
|
|
14
21
|
"temporal-exposure-readout",
|
|
@@ -72,17 +79,32 @@ const STAGES = [
|
|
|
72
79
|
status: "existing-foundation",
|
|
73
80
|
coordinateSpaces: ["scene-metric", "image-plane-metric"],
|
|
74
81
|
requiredUpstreamStages: [],
|
|
75
|
-
coupledStages: [
|
|
82
|
+
coupledStages: [
|
|
83
|
+
"scene-radiance-evaluation",
|
|
84
|
+
"temporal-exposure-readout"
|
|
85
|
+
],
|
|
76
86
|
purpose: "Project scene geometry into the optical image plane while preserving explicit metric geometry and focus-aware projection."
|
|
77
87
|
},
|
|
88
|
+
{
|
|
89
|
+
id: "scene-radiance-evaluation",
|
|
90
|
+
domain: "scene-radiance-formation",
|
|
91
|
+
status: "partial-foundation",
|
|
92
|
+
coordinateSpaces: ["scene-metric"],
|
|
93
|
+
requiredUpstreamStages: ["scene-ray-projection"],
|
|
94
|
+
coupledStages: ["temporal-exposure-readout"],
|
|
95
|
+
purpose: "Own outgoing scene spectral-radiance formation from illumination, scene geometry/visibility, material optical response, emission, indirect transport, and time. The current foundation establishes ownership and illumination-source metadata only; it does not calculate scene radiance."
|
|
96
|
+
},
|
|
78
97
|
{
|
|
79
98
|
id: "lens-field-pupil-evaluation",
|
|
80
99
|
domain: "lens-pupil-throughput",
|
|
81
100
|
status: "partial-foundation",
|
|
82
101
|
coordinateSpaces: ["image-plane-metric", "native-sensor-physical"],
|
|
83
|
-
requiredUpstreamStages: [
|
|
102
|
+
requiredUpstreamStages: [
|
|
103
|
+
"scene-ray-projection",
|
|
104
|
+
"scene-radiance-evaluation"
|
|
105
|
+
],
|
|
84
106
|
coupledStages: ["field-wavelength-psf"],
|
|
85
|
-
purpose: "Own focus-dependent framing, geometric field mapping,
|
|
107
|
+
purpose: "Own focus-dependent framing, geometric field mapping, pupil/acceptance geometry, spectral optical transmission, field throughput, and the primary intended bridge from outgoing scene spectral radiance to pre-sensor-stack sensor-plane spectral irradiance. PSF redistribution remains separately owned downstream."
|
|
86
108
|
},
|
|
87
109
|
{
|
|
88
110
|
id: "field-wavelength-psf",
|
|
@@ -304,7 +326,9 @@ const NOTES = [
|
|
|
304
326
|
"This contract defines scientific ownership, coordinate semantics, and dependency/coupling boundaries. It does not claim that reserved stages are implemented.",
|
|
305
327
|
"The stage graph is a dependency/ownership graph, not a claim that every physical interaction can be evaluated as one independent serial post-process.",
|
|
306
328
|
"Independent effects may be combined computationally only when the implementation documents mathematical equivalence and preserves the public stage/effect semantics.",
|
|
307
|
-
"Generic/parametric virtual-lens models must remain explicitly generic until defensible calibrated data with compatible reuse rights exists."
|
|
329
|
+
"Generic/parametric virtual-lens models must remain explicitly generic until defensible calibrated data with compatible reuse rights exists.",
|
|
330
|
+
"Scene radiance is distinct from source illumination metadata, photometric luminance anchors, sensor-plane irradiance, and RGB preview values. A later renderer/provider must explicitly evaluate outgoing spectral radiance before optics/sensor composition.",
|
|
331
|
+
"The primary lens-throughput bridge converts validated outgoing spectral radiance to pre-sensor-stack spectral irradiance through declared pupil acceptance, exactly one optical-transmission path, and at most one declared field-throughput term. It does not apply sensor optical-stack/CFA/QE response, PSF energy redistribution, stray light, or an implicit distortion brightness correction."
|
|
308
332
|
];
|
|
309
333
|
/**
|
|
310
334
|
* Returns the public image-formation ownership/order contract.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-formation.js","sourceRoot":"","sources":["../../src/core/image-formation.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,OAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"image-formation.js","sourceRoot":"","sources":["../../src/core/image-formation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Freezes an engine-owned, acyclic tree of plain records and arrays in place, visiting enumerable
|
|
4
|
+
* child values before their parent. Returns the same value. This internal helper does not validate or
|
|
5
|
+
* clone data. Callers must first parse their domain contract and copy any caller-owned references that
|
|
6
|
+
* need to remain mutable. Primitives pass through unchanged. Already-frozen parents are still
|
|
7
|
+
* traversed because a shallow freeze does not establish descendant immutability. Accessors, cyclic
|
|
8
|
+
* graphs, Maps, Sets and typed-array storage are outside this helper's contract. Do not use it as a
|
|
9
|
+
* general-purpose untrusted-input boundary.
|
|
10
|
+
* @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Freezes an engine-owned, acyclic tree of plain records and arrays in place,
|
|
14
|
+
* visiting enumerable child values before their parent. Returns the same value.
|
|
15
|
+
*
|
|
16
|
+
* This internal helper does not validate or clone data. Callers must first parse
|
|
17
|
+
* their domain contract and copy any caller-owned references that need to remain
|
|
18
|
+
* mutable. Primitives pass through unchanged. Already-frozen parents are still
|
|
19
|
+
* traversed because a shallow freeze does not establish descendant immutability.
|
|
20
|
+
*
|
|
21
|
+
* Accessors, cyclic graphs, Maps, Sets and typed-array storage are outside this
|
|
22
|
+
* helper's contract. Do not use it as a general-purpose untrusted-input boundary.
|
|
23
|
+
*/
|
|
24
|
+
export declare function freezeOwnedData<T>(value: T): T;
|
|
25
|
+
//# sourceMappingURL=owned-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owned-data.d.ts","sourceRoot":"","sources":["../../src/core/owned-data.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAQ9C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Freezes an engine-owned, acyclic tree of plain records and arrays in place, visiting enumerable
|
|
5
|
+
* child values before their parent. Returns the same value. This internal helper does not validate or
|
|
6
|
+
* clone data. Callers must first parse their domain contract and copy any caller-owned references that
|
|
7
|
+
* need to remain mutable. Primitives pass through unchanged. Already-frozen parents are still
|
|
8
|
+
* traversed because a shallow freeze does not establish descendant immutability. Accessors, cyclic
|
|
9
|
+
* graphs, Maps, Sets and typed-array storage are outside this helper's contract. Do not use it as a
|
|
10
|
+
* general-purpose untrusted-input boundary.
|
|
11
|
+
* @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Freezes an engine-owned, acyclic tree of plain records and arrays in place,
|
|
15
|
+
* visiting enumerable child values before their parent. Returns the same value.
|
|
16
|
+
*
|
|
17
|
+
* This internal helper does not validate or clone data. Callers must first parse
|
|
18
|
+
* their domain contract and copy any caller-owned references that need to remain
|
|
19
|
+
* mutable. Primitives pass through unchanged. Already-frozen parents are still
|
|
20
|
+
* traversed because a shallow freeze does not establish descendant immutability.
|
|
21
|
+
*
|
|
22
|
+
* Accessors, cyclic graphs, Maps, Sets and typed-array storage are outside this
|
|
23
|
+
* helper's contract. Do not use it as a general-purpose untrusted-input boundary.
|
|
24
|
+
*/
|
|
25
|
+
export function freezeOwnedData(value) {
|
|
26
|
+
if (value !== null && typeof value === "object") {
|
|
27
|
+
for (const child of Object.values(value)) {
|
|
28
|
+
freezeOwnedData(child);
|
|
29
|
+
}
|
|
30
|
+
Object.freeze(value);
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=owned-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owned-data.js","sourceRoot":"","sources":["../../src/core/owned-data.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAI,KAAQ;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,eAAe,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate the shared record/allowlist mechanics without choosing a domain's
|
|
3
|
+
* schema or diagnostics. Returns the original record; does not clone, freeze,
|
|
4
|
+
* strip fields, require missing fields, or validate child values. As with the
|
|
5
|
+
* existing domain parsers, the allowlist covers own enumerable string keys.
|
|
6
|
+
*/
|
|
7
|
+
export declare function requireAllowlistedRecord(value: unknown, allowedKeys: readonly string[], message: string): Record<string, unknown>;
|
|
8
|
+
/**
|
|
9
|
+
* Shared opaque public identity grammar: 1–128 ASCII characters, starting with
|
|
10
|
+
* an alphanumeric character, followed by alphanumerics, dot, underscore, colon
|
|
11
|
+
* or hyphen. No trimming, case conversion or path/URL interpretation occurs.
|
|
12
|
+
* A domain retains the meaning of the identity and its exact error message.
|
|
13
|
+
*/
|
|
14
|
+
export declare function requirePublicOpaqueId(value: unknown, message: string): string;
|
|
15
|
+
/** Same grammar for domains that combine ID rejection with other field checks. */
|
|
16
|
+
export declare function isPublicOpaqueId(value: unknown): value is string;
|
|
17
|
+
//# sourceMappingURL=record-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-validation.d.ts","sourceRoot":"","sources":["../../src/core/record-validation.ts"],"names":[],"mappings":"AAiBA;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAC9D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAK7E;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEhE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Validate the shared record/allowlist mechanics without choosing a domain's schema or diagnostics.
|
|
5
|
+
* Returns the original record; does not clone, freeze, strip fields, require missing fields, or
|
|
6
|
+
* validate child values. As with the existing domain parsers, the allowlist covers own enumerable
|
|
7
|
+
* string keys.
|
|
8
|
+
* Shared opaque public identity grammar: 1–128 ASCII characters, starting with an alphanumeric
|
|
9
|
+
* character, followed by alphanumerics, dot, underscore, colon or hyphen. No trimming, case conversion
|
|
10
|
+
* or path/URL interpretation occurs. A domain retains the meaning of the identity and its exact error
|
|
11
|
+
* message.
|
|
12
|
+
* @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
13
|
+
*/
|
|
14
|
+
import { InvalidConfigurationError } from "./configuration-error.js";
|
|
15
|
+
/**
|
|
16
|
+
* Validate the shared record/allowlist mechanics without choosing a domain's
|
|
17
|
+
* schema or diagnostics. Returns the original record; does not clone, freeze,
|
|
18
|
+
* strip fields, require missing fields, or validate child values. As with the
|
|
19
|
+
* existing domain parsers, the allowlist covers own enumerable string keys.
|
|
20
|
+
*/
|
|
21
|
+
export function requireAllowlistedRecord(value, allowedKeys, message) {
|
|
22
|
+
if (value === null || typeof value !== "object" || Array.isArray(value) ||
|
|
23
|
+
Object.keys(value).some(key => !allowedKeys.includes(key))) {
|
|
24
|
+
throw new InvalidConfigurationError(message);
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Shared opaque public identity grammar: 1–128 ASCII characters, starting with
|
|
30
|
+
* an alphanumeric character, followed by alphanumerics, dot, underscore, colon
|
|
31
|
+
* or hyphen. No trimming, case conversion or path/URL interpretation occurs.
|
|
32
|
+
* A domain retains the meaning of the identity and its exact error message.
|
|
33
|
+
*/
|
|
34
|
+
export function requirePublicOpaqueId(value, message) {
|
|
35
|
+
if (!isPublicOpaqueId(value)) {
|
|
36
|
+
throw new InvalidConfigurationError(message);
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
/** Same grammar for domains that combine ID rejection with other field checks. */
|
|
41
|
+
export function isPublicOpaqueId(value) {
|
|
42
|
+
return typeof value === "string" && /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(value);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=record-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-validation.js","sourceRoot":"","sources":["../../src/core/record-validation.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAc,EAAE,WAA8B,EAAE,OAAe;IAE/D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc,EAAE,OAAe;IACnE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Composes scientific-status, evidence and uncertainty semantics without inventing a numeric aggregate
|
|
4
|
+
* uncertainty. Required downstream status is bounded by the weakest required input. Component
|
|
5
|
+
* evidence/uncertainty is preserved verbatim after validation.
|
|
6
|
+
* @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
7
|
+
*/
|
|
8
|
+
import { type CalculationQuality } from "./calculation-result.js";
|
|
9
|
+
import { type EvidenceProvenance } from "./evidence-provenance.js";
|
|
10
|
+
export declare const SCIENTIFIC_ASSURANCE_CONTRACT_VERSION: "0.1.0";
|
|
11
|
+
export type ScientificAssuranceStatus = "calibrated" | "approximation" | "unknown";
|
|
12
|
+
export type ScientificAssuranceBasisKind = "evidence-backed-fact" | "photivra-model-assumption" | "not-applicable";
|
|
13
|
+
export type ScientificAssuranceSourceKind = "profile" | "result" | "model" | "fixture";
|
|
14
|
+
export interface ScientificAssuranceSourceIdentity {
|
|
15
|
+
kind: ScientificAssuranceSourceKind;
|
|
16
|
+
id: string;
|
|
17
|
+
version?: string;
|
|
18
|
+
}
|
|
19
|
+
export type ScientificAssuranceComponentUncertainty = {
|
|
20
|
+
kind: "relative";
|
|
21
|
+
fraction: number;
|
|
22
|
+
basis: string;
|
|
23
|
+
} | {
|
|
24
|
+
kind: "absolute";
|
|
25
|
+
plusMinus: number;
|
|
26
|
+
unit: string;
|
|
27
|
+
basis?: string;
|
|
28
|
+
} | {
|
|
29
|
+
kind: "calculation-quality";
|
|
30
|
+
quality: CalculationQuality;
|
|
31
|
+
} | {
|
|
32
|
+
kind: "not-quantified";
|
|
33
|
+
limitation: string;
|
|
34
|
+
} | {
|
|
35
|
+
kind: "unknown";
|
|
36
|
+
limitation: string;
|
|
37
|
+
} | {
|
|
38
|
+
kind: "not-applicable";
|
|
39
|
+
reason: string;
|
|
40
|
+
};
|
|
41
|
+
export interface ScientificAssuranceComponent {
|
|
42
|
+
componentId: string;
|
|
43
|
+
role: string;
|
|
44
|
+
required: boolean;
|
|
45
|
+
sourceIdentity: ScientificAssuranceSourceIdentity;
|
|
46
|
+
basisKind: ScientificAssuranceBasisKind;
|
|
47
|
+
scientificStatus: ScientificAssuranceStatus;
|
|
48
|
+
evidenceRequirement: "required" | "not-required";
|
|
49
|
+
evidence: readonly EvidenceProvenance[];
|
|
50
|
+
uncertainty: ScientificAssuranceComponentUncertainty;
|
|
51
|
+
limitations: readonly string[];
|
|
52
|
+
}
|
|
53
|
+
export type ComposedScientificUncertaintyStatus = {
|
|
54
|
+
kind: "unknown";
|
|
55
|
+
componentIds: readonly string[];
|
|
56
|
+
limitation: string;
|
|
57
|
+
} | {
|
|
58
|
+
kind: "not-quantified";
|
|
59
|
+
componentIds: readonly string[];
|
|
60
|
+
limitation: string;
|
|
61
|
+
} | {
|
|
62
|
+
kind: "not-propagated";
|
|
63
|
+
componentIds: readonly string[];
|
|
64
|
+
limitation: string;
|
|
65
|
+
} | {
|
|
66
|
+
kind: "not-applicable";
|
|
67
|
+
componentIds: readonly string[];
|
|
68
|
+
limitation: string;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Cross-stage status and retained evidence for one declared scientific result.
|
|
72
|
+
* Required incomplete/approximate children constrain the aggregate; deterministic
|
|
73
|
+
* processing cannot upgrade approximation to calibration. Uncertainty components
|
|
74
|
+
* remain independently identified unless an explicit mathematical propagation model
|
|
75
|
+
* justifies a combination. A count of successful stages is not an accuracy bound.
|
|
76
|
+
*/
|
|
77
|
+
export interface ComposedScientificAssurance {
|
|
78
|
+
version: typeof SCIENTIFIC_ASSURANCE_CONTRACT_VERSION;
|
|
79
|
+
scientificStatus: ScientificAssuranceStatus;
|
|
80
|
+
weakestRequiredComponentIds: readonly string[];
|
|
81
|
+
evidenceStatus: "complete" | "missing-required-evidence";
|
|
82
|
+
missingRequiredEvidenceComponentIds: readonly string[];
|
|
83
|
+
uncertainty: ComposedScientificUncertaintyStatus;
|
|
84
|
+
components: readonly ScientificAssuranceComponent[];
|
|
85
|
+
componentEvidencePreserved: true;
|
|
86
|
+
componentUncertaintyPreserved: true;
|
|
87
|
+
aggregateNumericUncertaintyFabricated: false;
|
|
88
|
+
downstreamStatusPromotedAboveInputs: false;
|
|
89
|
+
}
|
|
90
|
+
export interface ComposeScientificAssuranceInput {
|
|
91
|
+
components: readonly ScientificAssuranceComponent[];
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Composes scientific-status, evidence and uncertainty semantics without
|
|
95
|
+
* inventing a numeric aggregate uncertainty.
|
|
96
|
+
*
|
|
97
|
+
* Required downstream status is bounded by the weakest required input.
|
|
98
|
+
* Component evidence/uncertainty is preserved verbatim after validation.
|
|
99
|
+
*/
|
|
100
|
+
export declare function composeScientificAssurance(input: ComposeScientificAssuranceInput): ComposedScientificAssurance;
|
|
101
|
+
//# sourceMappingURL=scientific-assurance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scientific-assurance.d.ts","sourceRoot":"","sources":["../../src/core/scientific-assurance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Composes scientific-status, evidence and uncertainty semantics without inventing a numeric aggregate
|
|
5
|
+
* uncertainty. Required downstream status is bounded by the weakest required input. Component
|
|
6
|
+
* evidence/uncertainty is preserved verbatim after validation.
|
|
7
|
+
* @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
8
|
+
*/
|
|
9
|
+
import { validateCalculationQuality } from "./calculation-result.js";
|
|
10
|
+
import { InvalidScientificInputError } from "./validation.js";
|
|
11
|
+
import { parseEvidenceProvenance } from "./evidence-provenance.js";
|
|
12
|
+
export const SCIENTIFIC_ASSURANCE_CONTRACT_VERSION = "0.1.0";
|
|
13
|
+
const SCIENTIFIC_STATUSES = new Set([
|
|
14
|
+
"calibrated",
|
|
15
|
+
"approximation",
|
|
16
|
+
"unknown"
|
|
17
|
+
]);
|
|
18
|
+
const BASIS_KINDS = new Set([
|
|
19
|
+
"evidence-backed-fact",
|
|
20
|
+
"photivra-model-assumption",
|
|
21
|
+
"not-applicable"
|
|
22
|
+
]);
|
|
23
|
+
const SOURCE_KINDS = new Set([
|
|
24
|
+
"profile",
|
|
25
|
+
"result",
|
|
26
|
+
"model",
|
|
27
|
+
"fixture"
|
|
28
|
+
]);
|
|
29
|
+
function requireNonEmptyString(value, path) {
|
|
30
|
+
if (typeof value !== "string" ||
|
|
31
|
+
value.trim().length === 0) {
|
|
32
|
+
throw new InvalidScientificInputError(path +
|
|
33
|
+
" must be a non-empty string.");
|
|
34
|
+
}
|
|
35
|
+
return value.trim();
|
|
36
|
+
}
|
|
37
|
+
function requireNonNegativeFinite(value, path) {
|
|
38
|
+
if (typeof value !== "number" ||
|
|
39
|
+
!Number.isFinite(value) ||
|
|
40
|
+
value < 0) {
|
|
41
|
+
throw new InvalidScientificInputError(path +
|
|
42
|
+
" must be finite and greater than or equal to zero.");
|
|
43
|
+
}
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
function validateSourceIdentity(value, path) {
|
|
47
|
+
if (!SOURCE_KINDS.has(value.kind)) {
|
|
48
|
+
throw new InvalidScientificInputError(path + ".kind is invalid.");
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
kind: value.kind,
|
|
52
|
+
id: requireNonEmptyString(value.id, path + ".id"),
|
|
53
|
+
...(value.version === undefined
|
|
54
|
+
? {}
|
|
55
|
+
: {
|
|
56
|
+
version: requireNonEmptyString(value.version, path + ".version")
|
|
57
|
+
})
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function validateUncertainty(value, path) {
|
|
61
|
+
if (value.kind === "relative") {
|
|
62
|
+
const fraction = requireNonNegativeFinite(value.fraction, path + ".fraction");
|
|
63
|
+
if (fraction > 1) {
|
|
64
|
+
throw new InvalidScientificInputError(path +
|
|
65
|
+
".fraction must be less than or equal to one.");
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
kind: "relative",
|
|
69
|
+
fraction,
|
|
70
|
+
basis: requireNonEmptyString(value.basis, path + ".basis")
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (value.kind === "absolute") {
|
|
74
|
+
return {
|
|
75
|
+
kind: "absolute",
|
|
76
|
+
plusMinus: requireNonNegativeFinite(value.plusMinus, path + ".plusMinus"),
|
|
77
|
+
unit: requireNonEmptyString(value.unit, path + ".unit"),
|
|
78
|
+
...(value.basis === undefined
|
|
79
|
+
? {}
|
|
80
|
+
: {
|
|
81
|
+
basis: requireNonEmptyString(value.basis, path + ".basis")
|
|
82
|
+
})
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (value.kind ===
|
|
86
|
+
"calculation-quality") {
|
|
87
|
+
validateCalculationQuality(value.quality);
|
|
88
|
+
if (value.quality
|
|
89
|
+
.uncertainty ===
|
|
90
|
+
undefined ||
|
|
91
|
+
value.quality
|
|
92
|
+
.uncertainty.length ===
|
|
93
|
+
0) {
|
|
94
|
+
throw new InvalidScientificInputError(path +
|
|
95
|
+
".quality must include quantified uncertainty components; use another semantic uncertainty state otherwise.");
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
kind: "calculation-quality",
|
|
99
|
+
quality: value.quality
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (value.kind ===
|
|
103
|
+
"not-quantified") {
|
|
104
|
+
return {
|
|
105
|
+
kind: "not-quantified",
|
|
106
|
+
limitation: requireNonEmptyString(value.limitation, path + ".limitation")
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (value.kind === "unknown") {
|
|
110
|
+
return {
|
|
111
|
+
kind: "unknown",
|
|
112
|
+
limitation: requireNonEmptyString(value.limitation, path + ".limitation")
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (value.kind ===
|
|
116
|
+
"not-applicable") {
|
|
117
|
+
return {
|
|
118
|
+
kind: "not-applicable",
|
|
119
|
+
reason: requireNonEmptyString(value.reason, path + ".reason")
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
throw new InvalidScientificInputError(path + ".kind is invalid.");
|
|
123
|
+
}
|
|
124
|
+
function validateLimitations(value, path) {
|
|
125
|
+
if (!Array.isArray(value)) {
|
|
126
|
+
throw new InvalidScientificInputError(path + " must be an array.");
|
|
127
|
+
}
|
|
128
|
+
const parsed = value.map((entry, index) => requireNonEmptyString(entry, path +
|
|
129
|
+
"[" +
|
|
130
|
+
index +
|
|
131
|
+
"]"));
|
|
132
|
+
if (new Set(parsed).size !==
|
|
133
|
+
parsed.length) {
|
|
134
|
+
throw new InvalidScientificInputError(path +
|
|
135
|
+
" must not contain duplicates.");
|
|
136
|
+
}
|
|
137
|
+
return parsed;
|
|
138
|
+
}
|
|
139
|
+
function validateComponent(value, index) {
|
|
140
|
+
const path = "components[" +
|
|
141
|
+
index +
|
|
142
|
+
"]";
|
|
143
|
+
if (typeof value.required !==
|
|
144
|
+
"boolean") {
|
|
145
|
+
throw new InvalidScientificInputError(path +
|
|
146
|
+
".required must be boolean.");
|
|
147
|
+
}
|
|
148
|
+
if (!BASIS_KINDS.has(value.basisKind)) {
|
|
149
|
+
throw new InvalidScientificInputError(path +
|
|
150
|
+
".basisKind is invalid.");
|
|
151
|
+
}
|
|
152
|
+
if (!SCIENTIFIC_STATUSES.has(value.scientificStatus)) {
|
|
153
|
+
throw new InvalidScientificInputError(path +
|
|
154
|
+
".scientificStatus is invalid.");
|
|
155
|
+
}
|
|
156
|
+
if (value.basisKind ===
|
|
157
|
+
"evidence-backed-fact" &&
|
|
158
|
+
value.evidenceRequirement !==
|
|
159
|
+
"required") {
|
|
160
|
+
throw new InvalidScientificInputError(path +
|
|
161
|
+
'.basisKind "evidence-backed-fact" requires evidenceRequirement "required".');
|
|
162
|
+
}
|
|
163
|
+
if (value.evidenceRequirement !==
|
|
164
|
+
"required" &&
|
|
165
|
+
value.evidenceRequirement !==
|
|
166
|
+
"not-required") {
|
|
167
|
+
throw new InvalidScientificInputError(path +
|
|
168
|
+
".evidenceRequirement is invalid.");
|
|
169
|
+
}
|
|
170
|
+
if (!Array.isArray(value.evidence)) {
|
|
171
|
+
throw new InvalidScientificInputError(path +
|
|
172
|
+
".evidence must be an array.");
|
|
173
|
+
}
|
|
174
|
+
const evidence = value.evidence.map((entry, evidenceIndex) => parseEvidenceProvenance(entry, path +
|
|
175
|
+
".evidence[" +
|
|
176
|
+
evidenceIndex +
|
|
177
|
+
"]"));
|
|
178
|
+
return {
|
|
179
|
+
componentId: requireNonEmptyString(value.componentId, path + ".componentId"),
|
|
180
|
+
role: requireNonEmptyString(value.role, path + ".role"),
|
|
181
|
+
required: value.required,
|
|
182
|
+
sourceIdentity: validateSourceIdentity(value.sourceIdentity, path +
|
|
183
|
+
".sourceIdentity"),
|
|
184
|
+
basisKind: value.basisKind,
|
|
185
|
+
scientificStatus: value.scientificStatus,
|
|
186
|
+
evidenceRequirement: value.evidenceRequirement,
|
|
187
|
+
evidence,
|
|
188
|
+
uncertainty: validateUncertainty(value.uncertainty, path + ".uncertainty"),
|
|
189
|
+
limitations: validateLimitations(value.limitations, path + ".limitations")
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
function statusRank(value) {
|
|
193
|
+
if (value === "unknown") {
|
|
194
|
+
return 0;
|
|
195
|
+
}
|
|
196
|
+
if (value === "approximation") {
|
|
197
|
+
return 1;
|
|
198
|
+
}
|
|
199
|
+
return 2;
|
|
200
|
+
}
|
|
201
|
+
function composedUncertainty(required) {
|
|
202
|
+
const unknown = required.filter((component) => component.uncertainty.kind ===
|
|
203
|
+
"unknown");
|
|
204
|
+
if (unknown.length > 0) {
|
|
205
|
+
return {
|
|
206
|
+
kind: "unknown",
|
|
207
|
+
componentIds: unknown.map((component) => component.componentId),
|
|
208
|
+
limitation: "At least one required component has unknown uncertainty; no aggregate numeric uncertainty is claimed."
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
const unquantified = required.filter((component) => component.uncertainty.kind ===
|
|
212
|
+
"not-quantified");
|
|
213
|
+
if (unquantified.length > 0) {
|
|
214
|
+
return {
|
|
215
|
+
kind: "not-quantified",
|
|
216
|
+
componentIds: unquantified.map((component) => component.componentId),
|
|
217
|
+
limitation: "At least one required component has unquantified uncertainty; absence of a numeric bound is not zero uncertainty."
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
const quantified = required.filter((component) => component.uncertainty.kind ===
|
|
221
|
+
"relative" ||
|
|
222
|
+
component.uncertainty.kind ===
|
|
223
|
+
"absolute" ||
|
|
224
|
+
component.uncertainty.kind ===
|
|
225
|
+
"calculation-quality");
|
|
226
|
+
if (quantified.length > 0) {
|
|
227
|
+
return {
|
|
228
|
+
kind: "not-propagated",
|
|
229
|
+
componentIds: quantified.map((component) => component.componentId),
|
|
230
|
+
limitation: "Quantified component uncertainties are preserved but are not numerically combined without an explicit propagation model and correlation assumptions."
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
kind: "not-applicable",
|
|
235
|
+
componentIds: required.map((component) => component.componentId),
|
|
236
|
+
limitation: "No required component declares a quantitative uncertainty applicable to this composition."
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Composes scientific-status, evidence and uncertainty semantics without
|
|
241
|
+
* inventing a numeric aggregate uncertainty.
|
|
242
|
+
*
|
|
243
|
+
* Required downstream status is bounded by the weakest required input.
|
|
244
|
+
* Component evidence/uncertainty is preserved verbatim after validation.
|
|
245
|
+
*/
|
|
246
|
+
export function composeScientificAssurance(input) {
|
|
247
|
+
if (!Array.isArray(input.components) ||
|
|
248
|
+
input.components.length === 0) {
|
|
249
|
+
throw new InvalidScientificInputError("components must be a non-empty array.");
|
|
250
|
+
}
|
|
251
|
+
const components = input.components.map(validateComponent);
|
|
252
|
+
const ids = components.map((component) => component.componentId);
|
|
253
|
+
if (new Set(ids).size !==
|
|
254
|
+
ids.length) {
|
|
255
|
+
throw new InvalidScientificInputError("components must not contain duplicate componentId values.");
|
|
256
|
+
}
|
|
257
|
+
const required = components.filter((component) => component.required);
|
|
258
|
+
if (required.length === 0) {
|
|
259
|
+
throw new InvalidScientificInputError("At least one scientific-assurance component must be required.");
|
|
260
|
+
}
|
|
261
|
+
let weakestRank = Number.POSITIVE_INFINITY;
|
|
262
|
+
for (const component of required) {
|
|
263
|
+
weakestRank =
|
|
264
|
+
Math.min(weakestRank, statusRank(component.scientificStatus));
|
|
265
|
+
}
|
|
266
|
+
const weakest = required.filter((component) => statusRank(component.scientificStatus) === weakestRank);
|
|
267
|
+
const statusFromInputs = weakestRank === 0
|
|
268
|
+
? "unknown"
|
|
269
|
+
: weakestRank === 1
|
|
270
|
+
? "approximation"
|
|
271
|
+
: "calibrated";
|
|
272
|
+
const missingRequiredEvidence = required.filter((component) => component
|
|
273
|
+
.evidenceRequirement ===
|
|
274
|
+
"required" &&
|
|
275
|
+
component.evidence.length === 0);
|
|
276
|
+
const scientificStatus = missingRequiredEvidence.length >
|
|
277
|
+
0
|
|
278
|
+
? "unknown"
|
|
279
|
+
: statusFromInputs;
|
|
280
|
+
const weakestRequiredComponentIds = missingRequiredEvidence.length >
|
|
281
|
+
0
|
|
282
|
+
? missingRequiredEvidence.map((component) => component.componentId)
|
|
283
|
+
: weakest.map((component) => component.componentId);
|
|
284
|
+
return {
|
|
285
|
+
version: SCIENTIFIC_ASSURANCE_CONTRACT_VERSION,
|
|
286
|
+
scientificStatus,
|
|
287
|
+
weakestRequiredComponentIds,
|
|
288
|
+
evidenceStatus: missingRequiredEvidence
|
|
289
|
+
.length === 0
|
|
290
|
+
? "complete"
|
|
291
|
+
: "missing-required-evidence",
|
|
292
|
+
missingRequiredEvidenceComponentIds: missingRequiredEvidence.map((component) => component.componentId),
|
|
293
|
+
uncertainty: composedUncertainty(required),
|
|
294
|
+
components,
|
|
295
|
+
componentEvidencePreserved: true,
|
|
296
|
+
componentUncertaintyPreserved: true,
|
|
297
|
+
aggregateNumericUncertaintyFabricated: false,
|
|
298
|
+
downstreamStatusPromotedAboveInputs: false
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=scientific-assurance.js.map
|