@photivra/engine 1.1.0 → 1.3.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.
Files changed (244) hide show
  1. package/CHANGELOG.md +12 -1
  2. package/CITATION.cff +1 -1
  3. package/NOTICE +29 -0
  4. package/README.md +6 -6
  5. package/THIRD_PARTY.md +10 -0
  6. package/dist/composition/image-formation-plan.d.ts.map +1 -1
  7. package/dist/composition/image-formation-plan.js +17 -8
  8. package/dist/composition/image-formation-plan.js.map +1 -1
  9. package/dist/core/version.d.ts +1 -1
  10. package/dist/core/version.js +1 -1
  11. package/dist/index.d.ts +6 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +3 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/optics/complex-pupil-psf.d.ts +6 -0
  16. package/dist/optics/complex-pupil-psf.d.ts.map +1 -1
  17. package/dist/optics/complex-pupil-psf.js +10 -7
  18. package/dist/optics/complex-pupil-psf.js.map +1 -1
  19. package/dist/output/native-capture-sdr.d.ts +78 -0
  20. package/dist/output/native-capture-sdr.d.ts.map +1 -0
  21. package/dist/output/native-capture-sdr.js +171 -0
  22. package/dist/output/native-capture-sdr.js.map +1 -0
  23. package/dist/output/print-contrast-reference.d.ts +47 -0
  24. package/dist/output/print-contrast-reference.d.ts.map +1 -0
  25. package/dist/output/print-contrast-reference.js +95 -0
  26. package/dist/output/print-contrast-reference.js.map +1 -0
  27. package/dist/output/print-detail.d.ts +7 -0
  28. package/dist/output/print-detail.d.ts.map +1 -1
  29. package/dist/output/print-detail.js +20 -11
  30. package/dist/output/print-detail.js.map +1 -1
  31. package/dist/output/print-region-statistics.d.ts +92 -0
  32. package/dist/output/print-region-statistics.d.ts.map +1 -0
  33. package/dist/output/print-region-statistics.js +300 -0
  34. package/dist/output/print-region-statistics.js.map +1 -0
  35. package/dist/sensor/environment-photo-signal.d.ts +8 -1
  36. package/dist/sensor/environment-photo-signal.d.ts.map +1 -1
  37. package/dist/sensor/environment-photo-signal.js +16 -6
  38. package/dist/sensor/environment-photo-signal.js.map +1 -1
  39. package/docs/API_REFERENCE.md +52 -1
  40. package/docs/API_STYLE.md +1 -1
  41. package/docs/ARCHITECTURE.md +1 -1
  42. package/docs/AUTOMATION_COORDINATION.md +1 -1
  43. package/docs/CAPTURE_COLOR.md +1 -1
  44. package/docs/CAPTURE_CORRECTED_SDR.md +1 -1
  45. package/docs/CAPTURE_EXPORT_METADATA.md +1 -1
  46. package/docs/CAPTURE_SDR.md +3 -1
  47. package/docs/DEVELOPERS.md +6 -4
  48. package/docs/DIGITAL_OPTICS_FOUNDATION.md +1 -1
  49. package/docs/ENVIRONMENT_RAW_CAPTURE.md +23 -4
  50. package/docs/EXPORT_ACCEPTANCE.md +1 -1
  51. package/docs/GENERIC_TIER_PRESETS.md +1 -1
  52. package/docs/GEOMETRIC_PREPARATION_REUSE.md +1 -1
  53. package/docs/IMAGE_FORMATION.md +1 -1
  54. package/docs/LINEAR_CAPTURE_ENCODING.md +1 -1
  55. package/docs/MOTION_AND_SIGNAL.md +1 -1
  56. package/docs/NATIVE_CAPTURE_SDR.md +70 -0
  57. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +37 -0
  58. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +34 -0
  59. package/docs/NUMERICAL_CORRECTNESS.md +1 -1
  60. package/docs/PERFORMANCE_BASELINE.md +1 -1
  61. package/docs/PHOTOGRAPHIC_EXPORT.md +1 -1
  62. package/docs/PHYSICS_FOUNDATION.md +1 -1
  63. package/docs/POC_API.md +1 -1
  64. package/docs/POC_PROJECTION_REUSE.md +1 -1
  65. package/docs/PRINT_195_196_REVIEW.md +93 -0
  66. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +45 -0
  67. package/docs/PRINT_CONTRAST_REFERENCE.md +43 -0
  68. package/docs/PRINT_DETAIL_ASSESSMENT.md +1 -1
  69. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +36 -0
  70. package/docs/PRINT_DETAIL_VALIDATION.md +1 -1
  71. package/docs/PRINT_PLANNING.md +3 -1
  72. package/docs/PRINT_REGION_STATISTICS.md +38 -0
  73. package/docs/PROCESSED_OUTPUT.md +1 -1
  74. package/docs/PRODUCTION_COMPOSITION.md +1 -1
  75. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +1 -1
  76. package/docs/PROVENANCE.md +1 -1
  77. package/docs/PSF_FOUNDATION.md +11 -1
  78. package/docs/RAW_FRAME_ENVELOPE.md +1 -1
  79. package/docs/RAW_FRAME_RECONSTRUCTION.md +1 -1
  80. package/docs/RELEASE_1_2_0.md +51 -0
  81. package/docs/RELEASE_1_3_0.md +15 -0
  82. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +1 -1
  83. package/docs/SCENE_SENSOR_QUADRATURE.md +1 -1
  84. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +1 -1
  85. package/docs/SCIENTIFIC_ASSURANCE.md +1 -1
  86. package/docs/SCIENTIFIC_CONFORMANCE.md +1 -1
  87. package/docs/SDR_RENDERING.md +1 -1
  88. package/docs/SENSOR_ENVIRONMENT_QUERY.md +1 -1
  89. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +1 -1
  90. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +1 -1
  91. package/docs/SENSOR_PSF_QUADRATURE.md +1 -1
  92. package/docs/SENSOR_RAW_FRAME.md +1 -1
  93. package/docs/SENSOR_RAW_PRODUCER.md +1 -1
  94. package/docs/SIGNAL_CONFORMANCE.md +1 -1
  95. package/docs/SIMULATED_CAPTURE.md +1 -1
  96. package/docs/STABILIZATION.md +1 -1
  97. package/docs/TEMPORAL_PHOTO_RAW.md +1 -1
  98. package/docs/TIER_ACCEPTANCE.md +1 -1
  99. package/docs/TIER_PRESET_ACCEPTANCE.md +1 -1
  100. package/docs/USAGE.md +3 -1
  101. package/docs/V1_COMPOSITION_MAP.md +1 -1
  102. package/docs/V1_HELPER_REUSE_REVIEW.md +1 -1
  103. package/docs/V1_PERFORMANCE_DISPOSITION.md +1 -1
  104. package/docs/api/camera-equivalent-focal-length.md +1 -1
  105. package/docs/api/camera-field-of-view.md +1 -1
  106. package/docs/api/camera-projected-object-size.md +1 -1
  107. package/docs/api/capture-capture-export-metadata.md +1 -1
  108. package/docs/api/capture-environment-raw-producer.md +1 -1
  109. package/docs/api/capture-focus-control.md +1 -1
  110. package/docs/api/capture-linear-encoding.md +1 -1
  111. package/docs/api/capture-photographic-export.md +1 -1
  112. package/docs/api/capture-raw-frame-reconstruction.md +1 -1
  113. package/docs/api/capture-release-sequence.md +1 -1
  114. package/docs/api/capture-sensor-raw-frame.md +1 -1
  115. package/docs/api/capture-sensor-raw-producer.md +1 -1
  116. package/docs/api/capture-simulated-capture.md +1 -1
  117. package/docs/api/color-capture-color.md +1 -1
  118. package/docs/api/color-white-balance.md +1 -1
  119. package/docs/api/composition-image-formation-plan.md +1 -1
  120. package/docs/api/composition-plan-consumer.md +1 -1
  121. package/docs/api/core-calculation-result.md +1 -1
  122. package/docs/api/core-configuration-error.md +1 -1
  123. package/docs/api/core-image-formation.md +1 -1
  124. package/docs/api/core-scientific-assurance.md +1 -1
  125. package/docs/api/core-spectral-composition.md +1 -1
  126. package/docs/api/core-spectral.md +1 -1
  127. package/docs/api/core-validation.md +1 -1
  128. package/docs/api/core-version.md +2 -2
  129. package/docs/api/equipment-exposure-capabilities.md +1 -1
  130. package/docs/api/equipment-generic-tier-assets.md +1 -1
  131. package/docs/api/equipment-generic-tier-presets.md +1 -1
  132. package/docs/api/equipment-iso-capabilities.md +1 -1
  133. package/docs/api/equipment-metering-capabilities.md +1 -1
  134. package/docs/api/equipment-release-capabilities.md +1 -1
  135. package/docs/api/exports.json +152 -2
  136. package/docs/api/exposure-exposure-duration-control.md +1 -1
  137. package/docs/api/exposure-exposure-mode-resolver.md +1 -1
  138. package/docs/api/exposure-exposure.md +1 -1
  139. package/docs/api/exposure-flash.md +1 -1
  140. package/docs/api/exposure-metering-scene-radiance.md +1 -1
  141. package/docs/api/exposure-metering-target.md +1 -1
  142. package/docs/api/exposure-metering-temporal.md +1 -1
  143. package/docs/api/exposure-metering.md +1 -1
  144. package/docs/api/exposure-program-line.md +1 -1
  145. package/docs/api/motion-camera-rotation.md +1 -1
  146. package/docs/api/motion-capture-rotation-inverse-mapping.md +1 -1
  147. package/docs/api/motion-capture-rotation-temporal-quadrature.md +1 -1
  148. package/docs/api/motion-capture-rotation-trajectory.md +1 -1
  149. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +1 -1
  150. package/docs/api/motion-extended-object-projection.md +1 -1
  151. package/docs/api/motion-projected-motion.md +1 -1
  152. package/docs/api/optics-aperture.md +1 -1
  153. package/docs/api/optics-circle-of-confusion.md +1 -1
  154. package/docs/api/optics-complex-pupil-psf.md +7 -1
  155. package/docs/api/optics-depth-of-field.md +1 -1
  156. package/docs/api/optics-diffraction.md +1 -1
  157. package/docs/api/optics-focus-breathing.md +1 -1
  158. package/docs/api/optics-focus-state.md +1 -1
  159. package/docs/api/optics-front-of-lens-filter.md +1 -1
  160. package/docs/api/optics-illumination-vignetting.md +1 -1
  161. package/docs/api/optics-lateral-chromatic-aberration.md +1 -1
  162. package/docs/api/optics-lens-psf-profile.md +1 -1
  163. package/docs/api/optics-polygon-diffraction.md +1 -1
  164. package/docs/api/optics-profile-contract.md +1 -1
  165. package/docs/api/optics-psf-foundation.md +1 -1
  166. package/docs/api/optics-radial-distortion.md +1 -1
  167. package/docs/api/optics-scene-to-sensor-irradiance.md +1 -1
  168. package/docs/api/optics-scene-to-sensor-quadrature.md +1 -1
  169. package/docs/api/optics-sensor-environment-query.md +1 -1
  170. package/docs/api/optics-sensor-psf-quadrature.md +1 -1
  171. package/docs/api/optics-stray-light.md +1 -1
  172. package/docs/api/optics-thin-lens.md +1 -1
  173. package/docs/api/output-capture-corrected-sdr.md +1 -1
  174. package/docs/api/output-capture-geometry.md +1 -1
  175. package/docs/api/output-capture-sdr.md +1 -1
  176. package/docs/api/output-crop.md +1 -1
  177. package/docs/api/output-geometric-transforms.md +1 -1
  178. package/docs/api/output-lens-corrections.md +1 -1
  179. package/docs/api/output-native-capture-sdr.md +150 -0
  180. package/docs/api/output-print-contrast-reference.md +82 -0
  181. package/docs/api/output-print-detail.md +1 -1
  182. package/docs/api/output-print-plan.md +1 -1
  183. package/docs/api/output-print-region-statistics.md +165 -0
  184. package/docs/api/output-sdr-rendering.md +1 -1
  185. package/docs/api/output-subject-framing-crop.md +1 -1
  186. package/docs/api/schema-camera.md +1 -1
  187. package/docs/api/schema-illumination-spectral.md +1 -1
  188. package/docs/api/schema-illumination-temporal.md +1 -1
  189. package/docs/api/schema-illumination.md +1 -1
  190. package/docs/api/schema-scene-radiance-temporal.md +1 -1
  191. package/docs/api/schema-scene-radiance.md +1 -1
  192. package/docs/api/schema-scene.md +1 -1
  193. package/docs/api/schema-validation.md +1 -1
  194. package/docs/api/sensor-accumulated-charge.md +1 -1
  195. package/docs/api/sensor-architecture.md +1 -1
  196. package/docs/api/sensor-camera-saturation-capacity.md +1 -1
  197. package/docs/api/sensor-capture-color-sampling-binding.md +1 -1
  198. package/docs/api/sensor-capture-mode-timing.md +1 -1
  199. package/docs/api/sensor-capture-mode.md +1 -1
  200. package/docs/api/sensor-color-sampling.md +1 -1
  201. package/docs/api/sensor-constant-rate-temporal-integration.md +1 -1
  202. package/docs/api/sensor-dark-current.md +1 -1
  203. package/docs/api/sensor-environment-photo-signal.md +6 -3
  204. package/docs/api/sensor-eqe-electron-rate.md +1 -1
  205. package/docs/api/sensor-eqe-local-exposure.md +1 -1
  206. package/docs/api/sensor-eqe-temporal-exposure.md +1 -1
  207. package/docs/api/sensor-exposure-window.md +1 -1
  208. package/docs/api/sensor-iso-signal-chain.md +1 -1
  209. package/docs/api/sensor-local-exposure-binding.md +1 -1
  210. package/docs/api/sensor-optical-stack.md +1 -1
  211. package/docs/api/sensor-photon-energy.md +1 -1
  212. package/docs/api/sensor-physical-charge-capacity.md +1 -1
  213. package/docs/api/sensor-pixel-pitch.md +1 -1
  214. package/docs/api/sensor-radiometry-readiness.md +1 -1
  215. package/docs/api/sensor-raw-readout.md +1 -1
  216. package/docs/api/sensor-raw-reconstruction.md +1 -1
  217. package/docs/api/sensor-readout-exposure-linkage.md +1 -1
  218. package/docs/api/sensor-readout-timing.md +1 -1
  219. package/docs/api/sensor-response-application-compatibility.md +1 -1
  220. package/docs/api/sensor-response-operating-range.md +1 -1
  221. package/docs/api/sensor-responsivity-photocurrent.md +1 -1
  222. package/docs/api/sensor-sampling-aperture.md +1 -1
  223. package/docs/api/sensor-scene-eqe-temporal-exposure.md +1 -1
  224. package/docs/api/sensor-sensor-geometry.md +1 -1
  225. package/docs/api/sensor-signal-noise.md +1 -1
  226. package/docs/api/sensor-spatial-sample-reduction.md +1 -1
  227. package/docs/api/sensor-spatial-sampling-quadrature.md +1 -1
  228. package/docs/api/sensor-spatio-spectral-reduction.md +1 -1
  229. package/docs/api/sensor-spectral-coverage.md +1 -1
  230. package/docs/api/sensor-spectral-quadrature.md +1 -1
  231. package/docs/api/sensor-spectral-response.md +1 -1
  232. package/docs/api/sensor-temporal-photo-signal.md +1 -1
  233. package/docs/api/simulation-poc-simulation.md +1 -1
  234. package/docs/api/stabilization-camera-shake.md +1 -1
  235. package/docs/api/stabilization-system.md +1 -1
  236. package/docs/licenses/castleCSF-MIT.txt +21 -0
  237. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +4 -0
  238. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +3 -0
  239. package/docs/validation/print-196-candidate-capabilities.json +28 -0
  240. package/docs/validation/print-196-candidate-evidence.json +356 -0
  241. package/docs/validation/print-196-engine-acceptance.json +81 -0
  242. package/docs/validation/print-detail-capabilities.json +4 -1
  243. package/docs/validation/print-detail-jpeg-evidence.json +116 -0
  244. package/package.json +1 -1
@@ -0,0 +1,300 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /** Bounded linear-region processing differences and repeat-capture statistics.
3
+ * @see docs/PRINT_REGION_STATISTICS.md for the model, protocol and exclusions.
4
+ */
5
+ import { calculatedResult } from "../core/calculation-result.js";
6
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
7
+ import { freezeOwnedData } from "../core/owned-data.js";
8
+ import { requireAllowlistedRecord, requirePublicOpaqueId } from "../core/record-validation.js";
9
+ import { ENGINE_API_VERSION } from "../core/version.js";
10
+ import { parsePrintDetailSource, parsePrintDetailRegion, MAX_PRINT_DETAIL_REGION_SAMPLES } from "./print-detail.js";
11
+ import { resolveCaptureGeometry } from "./capture-geometry.js";
12
+ import { calculatePrintPlan, parsePrintPlanInput } from "./print-plan.js";
13
+ /** Independent of the root distribution and coherent-detail protocol. */
14
+ export const PRINT_REGION_STATISTICS_MODEL_VERSION = "0.1.0";
15
+ /** Maximum scalar samples across every frame/reference in one request. */
16
+ export const MAX_PRINT_REGION_STATISTICS_SAMPLES = MAX_PRINT_DETAIL_REGION_SAMPLES;
17
+ function record(v, keys) {
18
+ return requireAllowlistedRecord(v, keys, "Invalid or unknown Print region statistics fields.");
19
+ }
20
+ function id(v) { return requirePublicOpaqueId(v, "Invalid public Print region statistics identity."); }
21
+ function finite(v) {
22
+ if (typeof v !== "number" || !Number.isFinite(v))
23
+ throw new InvalidConfigurationError("Print region statistics require finite numbers.");
24
+ return v;
25
+ }
26
+ function choice(v, options) {
27
+ if (typeof v !== "string" || !options.includes(v))
28
+ throw new InvalidConfigurationError("Unknown Print region statistics enum.");
29
+ return v;
30
+ }
31
+ function parseRaster(v) {
32
+ const r = record(v, ["print", "source", "region", "samples"]), source = parsePrintDetailSource(r.source);
33
+ const { region, samples } = parsePrintDetailRegion(r.region, source, r.samples);
34
+ return { print: parsePrintPlanInput(r.print), source, region, samples };
35
+ }
36
+ /** Parse/copy an untrusted paired scalar ROI request. */
37
+ export function parsePrintRegionDifferenceInput(v) {
38
+ const r = record(v, ["assessmentId", "before", "after", "purpose", "realizationPolicy", "referenceRange"]);
39
+ const before = parseRaster(r.before), after = parseRaster(r.after);
40
+ if (before.samples.length + after.samples.length > MAX_PRINT_REGION_STATISTICS_SAMPLES)
41
+ throw new InvalidConfigurationError("Print paired ROI sample budget exceeded.");
42
+ let referenceRange = null;
43
+ if (r.referenceRange !== null) {
44
+ const range = record(r.referenceRange, ["lowerRelativeLuminance", "upperRelativeLuminance"]);
45
+ referenceRange = { lowerRelativeLuminance: finite(range.lowerRelativeLuminance), upperRelativeLuminance: finite(range.upperRelativeLuminance) };
46
+ if (referenceRange.lowerRelativeLuminance >= referenceRange.upperRelativeLuminance)
47
+ throw new InvalidConfigurationError("Reference range must be strictly increasing.");
48
+ }
49
+ return { assessmentId: id(r.assessmentId), before, after, referenceRange,
50
+ purpose: choice(r.purpose, ["processing-change", "decoded-file-change"]),
51
+ realizationPolicy: choice(r.realizationPolicy, ["same-noise-realization", "deterministic-reference"]) };
52
+ }
53
+ /** Parse/copy an untrusted repeat-capture ensemble with a total scalar work bound. */
54
+ export function parsePrintRegionNoiseInput(v) {
55
+ const r = record(v, ["assessmentId", "ensembleId", "stationarySceneId", "repeatPolicy", "frames"]);
56
+ if (!Array.isArray(r.frames) || r.frames.length < 2 || r.frames.length > 256)
57
+ throw new InvalidConfigurationError("Print noise statistics require 2 to 256 repeat frames.");
58
+ const frames = [];
59
+ let count = 0;
60
+ for (let i = 0; i < r.frames.length; i++) {
61
+ if (!Object.hasOwn(r.frames, i))
62
+ throw new InvalidConfigurationError("Sparse Print noise ensembles are unsupported.");
63
+ const frame = parseRaster(r.frames[i]);
64
+ count += frame.samples.length;
65
+ if (count > MAX_PRINT_REGION_STATISTICS_SAMPLES)
66
+ throw new InvalidConfigurationError("Print noise ensemble sample budget exceeded.");
67
+ frames.push(frame);
68
+ }
69
+ return { assessmentId: id(r.assessmentId), ensembleId: id(r.ensembleId), stationarySceneId: id(r.stationarySceneId),
70
+ repeatPolicy: choice(r.repeatPolicy, ["independent-stationary-captures"]), frames };
71
+ }
72
+ function applicability(frame) {
73
+ const reasons = [], p = calculatePrintPlan(frame.print).value;
74
+ if (frame.source.domain !== "relative-linear-luminance")
75
+ reasons.push("linear-luminance-domain-required");
76
+ if (frame.source.registration !== "oriented-retained-unwarped")
77
+ reasons.push("correction-warp-registration-unqualified");
78
+ if (frame.print.source.kind !== "native-retained")
79
+ return [...reasons, "missing-authoritative-native-geometry"];
80
+ if (frame.source.captureId !== frame.print.source.captureId)
81
+ reasons.push("capture-identity-mismatch");
82
+ if (p.status === "unsupported" || p.status === "crop-confirmation-required")
83
+ reasons.push("print-geometry-unavailable");
84
+ const geometry = resolveCaptureGeometry(frame.print.source.geometry).value, crop = geometry.output.cropRect, raster = frame.source.raster;
85
+ if (raster.pixelWidth > crop.width || raster.pixelHeight > crop.height)
86
+ reasons.push("represented-native-upscale-unsupported");
87
+ if (BigInt(raster.pixelWidth) * BigInt(crop.height) !== BigInt(raster.pixelHeight) * BigInt(crop.width))
88
+ reasons.push("represented-retained-aspect-mismatch");
89
+ if (frame.source.stage === "native-retained-linear" && (raster.pixelWidth !== crop.width || raster.pixelHeight !== crop.height))
90
+ reasons.push("native-representation-raster-mismatch");
91
+ return reasons;
92
+ }
93
+ // Parsed records have canonical field order; the comparison deliberately retains every
94
+ // geometry/region/print condition, while allowing acquisition/processing identities to differ.
95
+ function registrationKey(frame) {
96
+ return JSON.stringify({ geometry: frame.print.source.kind === "native-retained" ? frame.print.source.geometry : null,
97
+ print: { ...frame.print, source: null }, raster: frame.source.raster, region: frame.region });
98
+ }
99
+ function base(assessmentId, input, frame) {
100
+ return { assessmentId, engineApiVersion: ENGINE_API_VERSION, modelVersion: PRINT_REGION_STATISTICS_MODEL_VERSION,
101
+ input, status: "blocked", blockers: [], print: calculatePrintPlan(frame.print).value, measurement: null,
102
+ sourceArtifactVerification: "caller-declared-unverified", acquisitionQualification: "unassessed",
103
+ uncertainty: "not-quantified", overallPrintVerdict: "not-offered" };
104
+ }
105
+ function finish(result) {
106
+ return freezeOwnedData(calculatedResult(result, "regional-linear-print-statistics", PRINT_REGION_STATISTICS_MODEL_VERSION, ["Scalar linear samples, exact source identities and registration are caller declarations.",
107
+ "Repeat stationarity/independence and deterministic or shared realization policies need independent acquisition evidence.",
108
+ "No clipping mechanism, artifact visibility, physical sensor noise or overall print pass is inferred."]));
109
+ }
110
+ class Sum {
111
+ total = 0;
112
+ correction = 0;
113
+ add(v) {
114
+ const next = this.total + v;
115
+ this.correction += Math.abs(this.total) >= Math.abs(v) ? (this.total - next) + v : (v - next) + this.total;
116
+ this.total = next;
117
+ }
118
+ get value() { return this.total + this.correction; }
119
+ }
120
+ function finiteMean(values) {
121
+ let scale = 0, subnormalTerms = false;
122
+ const raw = new Sum(), normalized = new Sum();
123
+ for (const v of values)
124
+ scale = Math.max(scale, Math.abs(v));
125
+ if (scale === 0)
126
+ return 0;
127
+ for (const v of values) {
128
+ if (v !== 0 && v / scale === 0)
129
+ return null;
130
+ const term = v / values.length;
131
+ raw.add(term);
132
+ normalized.add(v / scale / values.length);
133
+ if (v !== 0 && Math.abs(term) < 2 ** -1022)
134
+ subnormalTerms = true;
135
+ }
136
+ const mean = subnormalTerms ? normalized.value * scale : raw.value;
137
+ return Number.isFinite(mean) ? mean : null;
138
+ }
139
+ /** Measure registered processing changes; residual is not automatically compression/noise. */
140
+ export function calculatePrintRegionDifference(value) {
141
+ const input = parsePrintRegionDifferenceInput(value), { before, after } = input;
142
+ const result = base(input.assessmentId, input, after);
143
+ result.blockers.push(...applicability(before), ...applicability(after));
144
+ if (registrationKey(before) !== registrationKey(after))
145
+ result.blockers.push("paired-site-registration-mismatch");
146
+ if (before.source.captureId !== after.source.captureId)
147
+ result.blockers.push("paired-capture-identity-mismatch");
148
+ if (before.source.representationId === after.source.representationId && (before.source.contentSha256 !== after.source.contentSha256 || before.source.stage !== after.source.stage || JSON.stringify(before.source.processing) !== JSON.stringify(after.source.processing)))
149
+ result.blockers.push("representation-identity-conflict");
150
+ if (input.realizationPolicy === "same-noise-realization" && (before.source.noiseRealizationId === null || before.source.noiseRealizationId !== after.source.noiseRealizationId))
151
+ result.blockers.push("same-noise-realization-required");
152
+ if (input.realizationPolicy === "deterministic-reference" && (before.source.noiseRealizationId !== null || after.source.noiseRealizationId !== null))
153
+ result.blockers.push("deterministic-reference-has-noise-realization");
154
+ if (input.purpose === "decoded-file-change" && (before.source.stage !== "post-resampling-linear" || after.source.stage !== "post-encoding-decoded-linear"))
155
+ result.blockers.push("exact-pre-encode-and-decoded-stages-required");
156
+ if (result.blockers.length)
157
+ return finish(result);
158
+ let scale = 0;
159
+ for (const samples of [before.samples, after.samples])
160
+ for (const v of samples)
161
+ scale = Math.max(scale, Math.abs(v));
162
+ const sum = new Sum(), rawMeanSum = new Sum(), count = before.samples.length;
163
+ let finiteDifferences = true, subnormalMeanTerms = false;
164
+ let norm = 0, maximum = 0;
165
+ for (let i = 0; i < count; i++) {
166
+ const raw = after.samples[i] - before.samples[i];
167
+ if (Number.isFinite(raw)) {
168
+ rawMeanSum.add(raw / count);
169
+ if (raw !== 0 && Math.abs(raw / count) < 2 ** -1022)
170
+ subnormalMeanTerms = true;
171
+ }
172
+ else
173
+ finiteDifferences = false;
174
+ const d = scale === 0 ? 0 : Number.isFinite(raw) ? raw / scale : after.samples[i] / scale - before.samples[i] / scale;
175
+ if (raw !== 0 && d === 0) {
176
+ result.status = "unsupported";
177
+ result.blockers.push("difference-dynamic-range-unsupported");
178
+ return finish(result);
179
+ }
180
+ sum.add(d / count);
181
+ norm = Math.hypot(norm, d);
182
+ maximum = Math.max(maximum, Math.abs(d));
183
+ }
184
+ const measurement = { meanSignedDifferenceRelativeLuminance: finiteDifferences && !subnormalMeanTerms ? rawMeanSum.value : sum.value * scale,
185
+ rmsDifferenceRelativeLuminance: norm / Math.sqrt(count) * scale, maximumAbsoluteDifferenceRelativeLuminance: maximum * scale, rangeExcursions: null };
186
+ if (input.referenceRange) {
187
+ const { lowerRelativeLuminance: lo, upperRelativeLuminance: hi } = input.referenceRange;
188
+ const excursions = (samples) => {
189
+ let below = 0, above = 0, under = 0, over = 0;
190
+ for (const v of samples) {
191
+ if (v < lo) {
192
+ below++;
193
+ under = Math.max(under, lo - v);
194
+ }
195
+ if (v > hi) {
196
+ above++;
197
+ over = Math.max(over, v - hi);
198
+ }
199
+ }
200
+ return { below, above, under, over };
201
+ };
202
+ const b = excursions(before.samples), a = excursions(after.samples);
203
+ measurement.rangeExcursions = { beforeBelowRangeCount: b.below, beforeAboveRangeCount: b.above, afterBelowRangeCount: a.below, afterAboveRangeCount: a.above,
204
+ beforeMaximumUndershootRelativeLuminance: b.under, beforeMaximumOvershootRelativeLuminance: b.over,
205
+ afterMaximumUndershootRelativeLuminance: a.under, afterMaximumOvershootRelativeLuminance: a.over };
206
+ }
207
+ if (![measurement.meanSignedDifferenceRelativeLuminance, measurement.rmsDifferenceRelativeLuminance, measurement.maximumAbsoluteDifferenceRelativeLuminance,
208
+ ...Object.values(measurement.rangeExcursions ?? {})].every(Number.isFinite) || (norm > 0 && measurement.rmsDifferenceRelativeLuminance === 0)) {
209
+ result.status = "unsupported";
210
+ result.blockers.push("difference-numeric-range-unsupported");
211
+ return finish(result);
212
+ }
213
+ result.status = "diagnostic-only";
214
+ result.measurement = measurement;
215
+ return finish(result);
216
+ }
217
+ /** Measure n-1 per-site temporal sample variance, independently of scene spatial texture. */
218
+ export function calculatePrintRegionNoise(value) {
219
+ const input = parsePrintRegionNoiseInput(value), first = input.frames[0];
220
+ const result = base(input.assessmentId, input, first);
221
+ const captureIds = new Set(), representations = new Set(), realizations = new Set();
222
+ for (const frame of input.frames) {
223
+ result.blockers.push(...applicability(frame));
224
+ if (registrationKey(frame) !== registrationKey(first) || frame.source.stage !== first.source.stage || JSON.stringify(frame.source.processing) !== JSON.stringify(first.source.processing))
225
+ result.blockers.push("repeat-acquisition-registration-or-processing-mismatch");
226
+ if (captureIds.has(frame.source.captureId) || representations.has(frame.source.representationId))
227
+ result.blockers.push("repeat-acquisition-identity-reused");
228
+ if (frame.source.noiseRealizationId === null || realizations.has(frame.source.noiseRealizationId))
229
+ result.blockers.push("distinct-repeat-noise-realizations-required");
230
+ captureIds.add(frame.source.captureId);
231
+ representations.add(frame.source.representationId);
232
+ if (frame.source.noiseRealizationId !== null)
233
+ realizations.add(frame.source.noiseRealizationId);
234
+ }
235
+ if (result.blockers.length)
236
+ return finish(result);
237
+ const frameCount = input.frames.length, siteCount = first.samples.length, means = [], variances = [];
238
+ let pooledRms = 0;
239
+ for (let site = 0; site < siteCount; site++) {
240
+ let scale = 0;
241
+ for (const frame of input.frames)
242
+ scale = Math.max(scale, Math.abs(frame.samples[site]));
243
+ const meanSum = new Sum(), rawMeanSum = new Sum(), normalizedMeanSum = new Sum(), anchor = first.samples[site], offsets = [];
244
+ let subnormalMeanTerms = false;
245
+ for (const frame of input.frames) {
246
+ const v = frame.samples[site];
247
+ rawMeanSum.add(v / frameCount);
248
+ if (v !== 0 && Math.abs(v / frameCount) < 2 ** -1022)
249
+ subnormalMeanTerms = true;
250
+ if (v !== 0 && v / scale === 0) {
251
+ result.status = "unsupported";
252
+ result.blockers.push("noise-dynamic-range-unsupported");
253
+ return finish(result);
254
+ }
255
+ normalizedMeanSum.add(scale === 0 ? 0 : v / scale / frameCount);
256
+ const raw = v - anchor;
257
+ const offset = scale === 0 ? 0 : Number.isFinite(raw) ? raw / scale : v / scale - anchor / scale;
258
+ if (raw !== 0 && offset === 0) {
259
+ result.status = "unsupported";
260
+ result.blockers.push("noise-dynamic-range-unsupported");
261
+ return finish(result);
262
+ }
263
+ offsets.push(offset);
264
+ meanSum.add(offset / frameCount);
265
+ }
266
+ // Center in the offset domain: rounding a restored large DC mean must not inflate
267
+ // variance when the mathematical mean lies between adjacent binary64 values.
268
+ const meanOffset = meanSum.value, mean = subnormalMeanTerms ? normalizedMeanSum.value * scale : rawMeanSum.value;
269
+ let norm = 0;
270
+ for (const offset of offsets)
271
+ norm = Math.hypot(norm, offset - meanOffset);
272
+ const rms = norm / Math.sqrt(frameCount - 1) * scale, variance = rms * rms;
273
+ if (![mean, rms, variance].every(Number.isFinite) || (norm > 0 && (rms === 0 || variance === 0))) {
274
+ result.status = "unsupported";
275
+ result.blockers.push("noise-numeric-range-unsupported");
276
+ return finish(result);
277
+ }
278
+ means.push(mean);
279
+ variances.push(variance);
280
+ pooledRms = Math.hypot(pooledRms, rms / Math.sqrt(siteCount));
281
+ }
282
+ const mean = finiteMean(means), variance = finiteMean(variances);
283
+ if (mean === null || variance === null || (pooledRms > 0 && variance === 0)) {
284
+ result.status = "unsupported";
285
+ result.blockers.push("noise-numeric-range-unsupported");
286
+ return finish(result);
287
+ }
288
+ const measurement = { frameCount, siteCount, meanRelativeLuminance: mean,
289
+ meanTemporalSampleVarianceRelativeLuminanceSquared: variance, temporalRmsRelativeLuminance: pooledRms,
290
+ perSiteMeansRelativeLuminance: means, perSiteSampleVariancesRelativeLuminanceSquared: variances };
291
+ if (![measurement.meanRelativeLuminance, measurement.meanTemporalSampleVarianceRelativeLuminanceSquared, pooledRms].every(Number.isFinite)) {
292
+ result.status = "unsupported";
293
+ result.blockers.push("noise-numeric-range-unsupported");
294
+ return finish(result);
295
+ }
296
+ result.status = "diagnostic-only";
297
+ result.measurement = measurement;
298
+ return finish(result);
299
+ }
300
+ //# sourceMappingURL=print-region-statistics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print-region-statistics.js","sourceRoot":"","sources":["../../src/output/print-region-statistics.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ import { validateSceneRadianceEvaluationBindings, type SceneRadianceEvaluationRe
17
17
  import { calculateSensorEnvironmentRadianceQuery, type CalculateSensorEnvironmentRadianceQueryInput } from "../optics/sensor-environment-query.js";
18
18
  import { calculateSceneRadianceToSensorIrradiance, type CalculateSceneRadianceToSensorIrradianceInput } from "../optics/scene-to-sensor-irradiance.js";
19
19
  import { calculateSensorPsfIrradianceQuadrature, type CalculateSensorPsfIrradianceQuadratureInput } from "../optics/sensor-psf-quadrature.js";
20
+ import { type IlluminationVignettingProfile } from "../optics/illumination-vignetting.js";
20
21
  import { calculateSensorSpatialSamplingQuadrature } from "./spatial-sampling-quadrature.js";
21
22
  import { calculateSensorSpectralQuadrature } from "./spectral-quadrature.js";
22
23
  import { createSensorEqeTemporalPhotoSignal } from "./temporal-photo-signal.js";
@@ -31,11 +32,16 @@ export interface CalculateEnvironmentSensorPhotoSignalInput {
31
32
  optics: Omit<CalculateSceneRadianceToSensorIrradianceInput, "sceneRadianceRequest" | "sceneRadianceResult" | "imagePointMm" | "fieldThroughput">;
32
33
  motion: Pick<CalculateSensorEnvironmentRadianceQueryInput, "angularVelocityRadPerSec" | "timeReference" | "environmentDirectionConvention">;
33
34
  temporalSampleCount: number;
34
- /** Explicit unity field throughput; spatial vignetting is not inferred or applied. */
35
+ /** Explicit source-field attenuation, applied once before PSF redistribution. */
35
36
  fieldThroughput: {
36
37
  kind: "unity";
37
38
  evidence: readonly EvidenceProvenance[];
38
39
  limitation: string;
40
+ } | {
41
+ kind: "radial-illumination-vignetting";
42
+ profile: IlluminationVignettingProfile;
43
+ evidence: readonly EvidenceProvenance[];
44
+ limitation: string;
39
45
  };
40
46
  psf: {
41
47
  kind: "not-applied";
@@ -97,6 +103,7 @@ interface EnvironmentPhotoPlan {
97
103
  y: number;
98
104
  };
99
105
  query: ReturnType<typeof calculateSensorEnvironmentRadianceQuery>;
106
+ fieldThroughput: CalculateSceneRadianceToSensorIrradianceInput["fieldThroughput"];
100
107
  }[];
101
108
  }[];
102
109
  }[];
@@ -1 +1 @@
1
- {"version":3,"file":"environment-photo-signal.d.ts","sourceRoot":"","sources":["../../src/sensor/environment-photo-signal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environment-photo-signal.d.ts","sourceRoot":"","sources":["../../src/sensor/environment-photo-signal.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ import { parseSceneMaterialResponseProfile, parseSceneRadianceProviderProfile, p
23
23
  import { calculateSensorEnvironmentRadianceQuery } from "../optics/sensor-environment-query.js";
24
24
  import { calculateSceneRadianceToSensorIrradiance } from "../optics/scene-to-sensor-irradiance.js";
25
25
  import { calculateSensorPsfIrradianceQuadrature } from "../optics/sensor-psf-quadrature.js";
26
+ import { calculateIlluminationVignetting } from "../optics/illumination-vignetting.js";
26
27
  import { sensorPsfSourcePoint } from "../optics/sensor-psf-support.js";
27
28
  import { resolveLensSampledPsf } from "../optics/lens-psf-profile.js";
28
29
  import { calculateSensorSpatialSamplingQuadrature } from "./spatial-sampling-quadrature.js";
@@ -48,8 +49,13 @@ export function planEnvironmentSensorPhotoSignal(input) {
48
49
  requirePublicOpaqueId(owned.temporalIntegrationId, "Environment integration requires a public identity.");
49
50
  if (!Number.isSafeInteger(owned.temporalSampleCount) || owned.temporalSampleCount < 1 || owned.temporalSampleCount > 256 ||
50
51
  owned.sensor.responseApplication.sourcePlane.value !== "sensor-package-incident" ||
51
- owned.fieldThroughput?.kind !== "unity" || typeof owned.fieldThroughput.limitation !== "string" || !owned.fieldThroughput.limitation.trim()) {
52
- throw new InvalidScientificInputError("Environment exposure requires package-incident response, 1..256 midpoints and explicit unity throughput.");
52
+ (owned.fieldThroughput?.kind !== "unity" && owned.fieldThroughput?.kind !== "radial-illumination-vignetting") || typeof owned.fieldThroughput.limitation !== "string" || !owned.fieldThroughput.limitation.trim()) {
53
+ throw new InvalidScientificInputError("Environment exposure requires package-incident response, 1..256 midpoints and explicit supported field throughput.");
54
+ }
55
+ if (owned.fieldThroughput.kind === "radial-illumination-vignetting" &&
56
+ (typeof owned.fieldThroughput.profile !== "object" || owned.fieldThroughput.profile === null ||
57
+ typeof owned.fieldThroughput.profile.coefficients !== "object" || owned.fieldThroughput.profile.coefficients === null)) {
58
+ throw new InvalidScientificInputError("Radial throughput requires a declared profile and coefficients.");
53
59
  }
54
60
  const fieldThroughputEvidence = parseEvidenceList(owned.fieldThroughput.evidence, "environmentFieldThroughput.evidence");
55
61
  const sceneBindings = { providerProfile: parseSceneRadianceProviderProfile(owned.sceneBindings.providerProfile),
@@ -109,7 +115,11 @@ export function planEnvironmentSensorPhotoSignal(input) {
109
115
  const points = Array.from({ length: taps }, (_, i) => ({ kernelSampleX: kernel ? i % kernel.widthSamples : 0,
110
116
  kernelSampleY: kernel ? Math.floor(i / kernel.widthSamples) : 0,
111
117
  point: kernel ? sensorPsfSourcePoint(destination, kernel, i % kernel.widthSamples, Math.floor(i / kernel.widthSamples)) : { ...destination } }));
112
- return { node, points };
118
+ return { node, points: points.map(p => ({ ...p, fieldThroughput: owned.fieldThroughput.kind === "unity"
119
+ ? { kind: "unity" }
120
+ : { kind: "illumination-vignetting-result", result: calculateIlluminationVignetting({
121
+ imagePointMm: { x: p.point.x, y: -p.point.y }, profile: owned.fieldThroughput.profile
122
+ }).value } })) };
113
123
  }));
114
124
  const measure = window.localExposureDurationSeconds / owned.temporalSampleCount;
115
125
  let previous = -Infinity;
@@ -150,7 +160,7 @@ export function executeEnvironmentSensorPhotoSignal(plan, evaluate) {
150
160
  const result = parseSceneRadianceEvaluationResult(evaluate(request));
151
161
  const bindings = validateSceneRadianceEvaluationBindings({ ...plan.sceneBindings, request, result });
152
162
  const optics = calculateSceneRadianceToSensorIrradiance({ ...owned.optics, sceneRadianceRequest: request,
153
- sceneRadianceResult: result, imagePointMm: tap.query.value.sourcePointImagePlaneMm, fieldThroughput: { kind: "unity" } });
163
+ sceneRadianceResult: result, imagePointMm: tap.query.value.sourcePointImagePlaneMm, fieldThroughput: tap.fieldThroughput });
154
164
  evaluations.push({ query: tap.query, result, bindings, optics });
155
165
  return { kernelSampleX: tap.kernelSampleX, kernelSampleY: tap.kernelSampleY, sourcePointNativeSensorMm: tap.point,
156
166
  timeSecondsFromOpeningReference: instant.time,
@@ -172,9 +182,9 @@ export function executeEnvironmentSensorPhotoSignal(plan, evaluate) {
172
182
  fieldThroughputLimitation: owned.fieldThroughput.limitation,
173
183
  psfOmission: owned.psf.kind === "not-applied" ? { evidence: parseEvidenceList(owned.psf.evidence, "psfOmission.evidence"), limitation: owned.psf.limitation } : null,
174
184
  psfRedistributionApplied: owned.psf.kind === "sampled-local", photo, instants
175
- }, "environment-sensor-photo-signal", "0.1.0", [
185
+ }, "environment-sensor-photo-signal", "0.2.0", [
176
186
  "Supplied synchronous provider code was invoked at each generated environment query; physical transport and visibility are not verified.",
177
- "Ideal focus-aware rotation/projection, explicit unity field throughput and optional destination-local sampled PSF are bounded approximations.",
187
+ "Ideal focus-aware rotation/projection, explicit evidence-bound field throughput and optional destination-local sampled PSF are bounded approximations.",
178
188
  "PSF pupil throughput is not applied; child uncertainty, finite-support and quadrature convergence are not combined or established."
179
189
  ]);
180
190
  }
@@ -1 +1 @@
1
- {"version":3,"file":"environment-photo-signal.js","sourceRoot":"","sources":["../../src/sensor/environment-photo-signal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environment-photo-signal.js","sourceRoot":"","sources":["../../src/sensor/environment-photo-signal.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  # Public API reference
2
2
 
3
- Generated from the exact root exports for **@photivra/engine 1.1.0 / root contract 1.1.0** by `node scripts/generate-api-reference.mjs`. No module deep import is supported.
3
+ Generated from the exact root exports for **@photivra/engine 1.3.0 / root contract 1.3.0** by `node scripts/generate-api-reference.mjs`. No module deep import is supported.
4
4
 
5
5
  Use [the developer guide](DEVELOPERS.md) for executable paths and scientific boundaries. Types are contracts, not runtime validation: parse untrusted data, preserve units/reference frames, read assessment blockers, and retain evidence/limitations. Optional properties do not imply a universal default. Model/schema IDs remain independent of the distribution.
6
6
 
@@ -1189,6 +1189,38 @@ Use [the developer guide](DEVELOPERS.md) for executable paths and scientific bou
1189
1189
  | [`ResolvedLensCorrectionPlan`](api/output-lens-corrections.md#resolvedlenscorrectionplan) | Type |
1190
1190
  | [`resolveLensCorrectionPlan`](api/output-lens-corrections.md#resolvelenscorrectionplan) | Runtime |
1191
1191
 
1192
+ ## output/native-capture-sdr.ts
1193
+
1194
+ [Detailed contracts](api/output-native-capture-sdr.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/output/native-capture-sdr.ts)
1195
+
1196
+ | Export | Kind |
1197
+ | --- | --- |
1198
+ | [`calculateNativeCaptureSdrPlan`](api/output-native-capture-sdr.md#calculatenativecapturesdrplan) | Runtime |
1199
+ | [`createNativeCaptureSdrTask`](api/output-native-capture-sdr.md#createnativecapturesdrtask) | Runtime |
1200
+ | [`NATIVE_CAPTURE_SDR_LIMITS`](api/output-native-capture-sdr.md#native_capture_sdr_limits) | Runtime |
1201
+ | [`NATIVE_CAPTURE_SDR_SCHEMA_VERSION`](api/output-native-capture-sdr.md#native_capture_sdr_schema_version) | Runtime |
1202
+ | [`NativeCaptureSdrInput`](api/output-native-capture-sdr.md#nativecapturesdrinput) | Type |
1203
+ | [`NativeCaptureSdrOutput`](api/output-native-capture-sdr.md#nativecapturesdroutput) | Type |
1204
+ | [`NativeCaptureSdrPlan`](api/output-native-capture-sdr.md#nativecapturesdrplan) | Type |
1205
+ | [`NativeCaptureSdrProvider`](api/output-native-capture-sdr.md#nativecapturesdrprovider) | Type |
1206
+ | [`NativeCaptureSdrTask`](api/output-native-capture-sdr.md#nativecapturesdrtask) | Type |
1207
+ | [`NativeCaptureSdrTaskState`](api/output-native-capture-sdr.md#nativecapturesdrtaskstate) | Type |
1208
+ | [`NativeCaptureSdrTile`](api/output-native-capture-sdr.md#nativecapturesdrtile) | Type |
1209
+ | [`NativeCaptureSdrTileRequest`](api/output-native-capture-sdr.md#nativecapturesdrtilerequest) | Type |
1210
+
1211
+ ## output/print-contrast-reference.ts
1212
+
1213
+ [Detailed contracts](api/output-print-contrast-reference.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/output/print-contrast-reference.ts)
1214
+
1215
+ | Export | Kind |
1216
+ | --- | --- |
1217
+ | [`calculatePrintContrastReference`](api/output-print-contrast-reference.md#calculateprintcontrastreference) | Runtime |
1218
+ | [`parsePrintContrastReferenceInput`](api/output-print-contrast-reference.md#parseprintcontrastreferenceinput) | Runtime |
1219
+ | [`PRINT_CONTRAST_REFERENCE_MODEL_VERSION`](api/output-print-contrast-reference.md#print_contrast_reference_model_version) | Runtime |
1220
+ | [`PRINT_CONTRAST_REFERENCE_UPSTREAM_REVISION`](api/output-print-contrast-reference.md#print_contrast_reference_upstream_revision) | Runtime |
1221
+ | [`PrintContrastReference`](api/output-print-contrast-reference.md#printcontrastreference) | Type |
1222
+ | [`PrintContrastReferenceInput`](api/output-print-contrast-reference.md#printcontrastreferenceinput) | Type |
1223
+
1192
1224
  ## output/print-detail.ts
1193
1225
 
1194
1226
  [Detailed contracts](api/output-print-detail.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/output/print-detail.ts)
@@ -1226,6 +1258,25 @@ Use [the developer guide](DEVELOPERS.md) for executable paths and scientific bou
1226
1258
  | [`PrintSizeLimit`](api/output-print-plan.md#printsizelimit) | Type |
1227
1259
  | [`PrintSizeLimitInput`](api/output-print-plan.md#printsizelimitinput) | Type |
1228
1260
 
1261
+ ## output/print-region-statistics.ts
1262
+
1263
+ [Detailed contracts](api/output-print-region-statistics.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/output/print-region-statistics.ts)
1264
+
1265
+ | Export | Kind |
1266
+ | --- | --- |
1267
+ | [`calculatePrintRegionDifference`](api/output-print-region-statistics.md#calculateprintregiondifference) | Runtime |
1268
+ | [`calculatePrintRegionNoise`](api/output-print-region-statistics.md#calculateprintregionnoise) | Runtime |
1269
+ | [`MAX_PRINT_REGION_STATISTICS_SAMPLES`](api/output-print-region-statistics.md#max_print_region_statistics_samples) | Runtime |
1270
+ | [`parsePrintRegionDifferenceInput`](api/output-print-region-statistics.md#parseprintregiondifferenceinput) | Runtime |
1271
+ | [`parsePrintRegionNoiseInput`](api/output-print-region-statistics.md#parseprintregionnoiseinput) | Runtime |
1272
+ | [`PRINT_REGION_STATISTICS_MODEL_VERSION`](api/output-print-region-statistics.md#print_region_statistics_model_version) | Runtime |
1273
+ | [`PrintRegionDifferenceInput`](api/output-print-region-statistics.md#printregiondifferenceinput) | Type |
1274
+ | [`PrintRegionDifferenceMeasurement`](api/output-print-region-statistics.md#printregiondifferencemeasurement) | Type |
1275
+ | [`PrintRegionNoiseInput`](api/output-print-region-statistics.md#printregionnoiseinput) | Type |
1276
+ | [`PrintRegionNoiseMeasurement`](api/output-print-region-statistics.md#printregionnoisemeasurement) | Type |
1277
+ | [`PrintRegionRaster`](api/output-print-region-statistics.md#printregionraster) | Type |
1278
+ | [`PrintRegionStatisticsAssessment`](api/output-print-region-statistics.md#printregionstatisticsassessment) | Type |
1279
+
1229
1280
  ## output/sdr-rendering.ts
1230
1281
 
1231
1282
  [Detailed contracts](api/output-sdr-rendering.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/output/sdr-rendering.ts)
package/docs/API_STYLE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Public API Style
2
2
 
3
- Release context: **package 1.1.0 candidate / root API 1.1.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_1_0.md).
3
+ Release context: **package 1.3.0 candidate / root API 1.3.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_3_0.md).
4
4
 
5
5
  The open engine should feel like one coherent library.
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Architecture
2
2
 
3
- Release context: **package 1.1.0 candidate / root API 1.1.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_1_0.md).
3
+ Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
4
4
 
5
5
  Photivra separates a reusable scientific core from optional composition and transport layers.
6
6
 
@@ -1,6 +1,6 @@
1
1
  # Public-engine automation coordination
2
2
 
3
- Release context: **package 1.1.0 candidate / root API 1.1.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_1_0.md).
3
+ Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
4
4
 
5
5
  This document coordinates the two recurring automation lanes that work only in the public
6
6
  `Photivra/photivra` repository. It is process guidance, not a scientific roadmap. Open issues and
@@ -1,6 +1,6 @@
1
1
  # Virtual-camera linear color: #15B
2
2
 
3
- Release context: **package 1.1.0 candidate / root API 1.1.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_1_0.md).
3
+ Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
4
4
 
5
5
  `resolveCaptureColorModel()` defines an ideal CIE 1931 2-degree colorimetric camera: co-sited red/green/blue channels are an invertible encoding of XYZ in the linear-sRGB primary basis, with D65 reference white. They are relative linear values, not electrons, spectral response measurements or commercial-camera RGB. Choosing this profile is an upstream producer assertion about sample meaning; naming arbitrary sensor data with its ID does not establish validity.
6
6