@photivra/engine 2.12.0 → 2.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +144 -1
- package/CITATION.cff +1 -1
- package/README.md +7 -7
- package/SECURITY.md +1 -1
- package/THIRD_PARTY.md +3 -0
- package/dist/camera/lens-projection.js +2 -1
- package/dist/camera/lens-projection.js.map +1 -1
- package/dist/capture/dng-import.js +1 -1
- package/dist/capture/dng-import.js.map +1 -1
- package/dist/capture/export-jpeg.d.ts +1 -1
- package/dist/capture/export-jpeg.js +6 -4
- package/dist/capture/export-jpeg.js.map +1 -1
- package/dist/capture/host-yield-cadence.js +1 -1
- package/dist/capture/host-yield-cadence.js.map +1 -1
- package/dist/capture/native-environment-optical-stage.js +1 -1
- package/dist/capture/native-environment-optical-stage.js.map +1 -1
- package/dist/capture/native-raw.js +1 -1
- package/dist/capture/native-raw.js.map +1 -1
- package/dist/capture/packed-sensor-raw.js +3 -3
- package/dist/capture/packed-sensor-raw.js.map +1 -1
- package/dist/capture/sensor-raw-producer.js +1 -1
- package/dist/capture/sensor-raw-producer.js.map +1 -1
- package/dist/color/capture-color.js +3 -3
- package/dist/color/capture-color.js.map +1 -1
- package/dist/color/chromatic-adaptation.js +2 -2
- package/dist/color/chromatic-adaptation.js.map +1 -1
- package/dist/color/color-matching-functions.js +1 -1
- package/dist/color/color-matching-functions.js.map +1 -1
- package/dist/color/colorimetry-math.js +2 -2
- package/dist/color/colorimetry-math.js.map +1 -1
- package/dist/color/illuminants.js +3 -3
- package/dist/color/illuminants.js.map +1 -1
- package/dist/color/rgb-color-spaces.js +1 -1
- package/dist/color/rgb-color-spaces.js.map +1 -1
- package/dist/color/sensor-color-development.js +1 -1
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/core/record-validation.js +3 -3
- package/dist/core/record-validation.js.map +1 -1
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/core/version.js.map +1 -1
- package/dist/equipment/generic-prime-lenses.js +3 -3
- package/dist/equipment/generic-prime-lenses.js.map +1 -1
- package/dist/equipment/generic-tier-assets.d.ts +23 -1
- package/dist/equipment/generic-tier-assets.js +58 -30
- package/dist/equipment/generic-tier-assets.js.map +1 -1
- package/dist/equipment/generic-tier-presets.d.ts +6 -3
- package/dist/equipment/generic-tier-presets.js +26 -13
- package/dist/equipment/generic-tier-presets.js.map +1 -1
- package/dist/exposure/auto-iso-slowest-shutter.d.ts +120 -0
- package/dist/exposure/auto-iso-slowest-shutter.js +217 -0
- package/dist/exposure/auto-iso-slowest-shutter.js.map +1 -0
- package/dist/exposure/exposure-mode-resolver.d.ts +57 -1
- package/dist/exposure/exposure-mode-resolver.js +238 -33
- package/dist/exposure/exposure-mode-resolver.js.map +1 -1
- package/dist/exposure/flash-ttl.js +1 -1
- package/dist/exposure/flash-ttl.js.map +1 -1
- package/dist/exposure/flash.js +1 -1
- package/dist/exposure/flash.js.map +1 -1
- package/dist/facade/chart-material-layers.js +2 -2
- package/dist/facade/chart-material-layers.js.map +1 -1
- package/dist/facade/chart-radiance-batch.js +1 -1
- package/dist/facade/chart-radiance-batch.js.map +1 -1
- package/dist/facade/chart-scenes.d.ts +45 -8
- package/dist/facade/chart-scenes.js +101 -44
- package/dist/facade/chart-scenes.js.map +1 -1
- package/dist/facade/color-patches.d.ts +129 -0
- package/dist/facade/color-patches.js +209 -0
- package/dist/facade/color-patches.js.map +1 -0
- package/dist/facade/diffraction-provider.js +12 -13
- package/dist/facade/diffraction-provider.js.map +1 -1
- package/dist/facade/display-view-gpu.js +1 -1
- package/dist/facade/display-view-gpu.js.map +1 -1
- package/dist/facade/display-view.d.ts +27 -0
- package/dist/facade/display-view.js +234 -65
- package/dist/facade/display-view.js.map +1 -1
- package/dist/facade/scene-radiance.js +2 -2
- package/dist/facade/scene-radiance.js.map +1 -1
- package/dist/facade/simulate-capture.d.ts +139 -12
- package/dist/facade/simulate-capture.js +209 -36
- package/dist/facade/simulate-capture.js.map +1 -1
- package/dist/facade/simulate-display-view.js +2 -2
- package/dist/facade/simulate-display-view.js.map +1 -1
- package/dist/gpu/chart-composite-gpu.js +2 -2
- package/dist/gpu/chart-composite-gpu.js.map +1 -1
- package/dist/gpu/display-view-composite-material-module.js +1 -1
- package/dist/gpu/display-view-composite-material-module.js.map +1 -1
- package/dist/gpu/display-view-quality-gpu.d.ts +2 -1
- package/dist/gpu/display-view-quality-gpu.js +24 -14
- package/dist/gpu/display-view-quality-gpu.js.map +1 -1
- package/dist/gpu/image-kernel-execution.js +2 -2
- package/dist/gpu/image-kernel-execution.js.map +1 -1
- package/dist/gpu/temporal-sum-gpu.js +23 -23
- package/dist/gpu/webgpu-runtime.js +1 -1
- package/dist/gpu/webgpu-runtime.js.map +1 -1
- package/dist/gpu/wgsl-chart-composite-kernel.js +318 -318
- package/dist/gpu/wgsl-chart-composite-kernel.js.map +1 -1
- package/dist/gpu/wgsl-chart-kernel.js +117 -117
- package/dist/gpu/wgsl-chart-kernel.js.map +1 -1
- package/dist/gpu/wgsl-display-view-quality-kernel.d.ts +13 -1
- package/dist/gpu/wgsl-display-view-quality-kernel.js +522 -488
- package/dist/gpu/wgsl-display-view-quality-kernel.js.map +1 -1
- package/dist/gpu/wgsl-display-view-speed-kernel.js +248 -248
- package/dist/gpu/wgsl-display-view-speed-kernel.js.map +1 -1
- package/dist/gpu/wgsl-kernels.js +203 -203
- package/dist/gpu/wgsl-kernels.js.map +1 -1
- package/dist/gpu/wgsl-sensor-kernel.js +302 -302
- package/dist/gpu/wgsl-sensor-kernel.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/motion/temporal-exposure-sum.js +1 -1
- package/dist/motion/temporal-exposure-sum.js.map +1 -1
- package/dist/optics/diffraction-psf-profile.js +4 -4
- package/dist/optics/diffraction-psf-profile.js.map +1 -1
- package/dist/optics/front-of-lens-filter.js +1 -1
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/irradiance-convolution.d.ts +10 -0
- package/dist/optics/irradiance-convolution.js +49 -14
- package/dist/optics/irradiance-convolution.js.map +1 -1
- package/dist/output/native-capture-sdr.js +1 -1
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/png-encoder.js +2 -2
- package/dist/output/png-encoder.js.map +1 -1
- package/dist/output/print-jpeg.js +13 -10
- package/dist/output/print-jpeg.js.map +1 -1
- package/dist/output/text-metadata.d.ts +22 -2
- package/dist/output/text-metadata.js +58 -9
- package/dist/output/text-metadata.js.map +1 -1
- package/dist/sensor/fixed-pattern-noise.js +1 -1
- package/dist/sensor/fixed-pattern-noise.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.js +1 -1
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/docs/API_REFERENCE.md +49 -1
- package/docs/QUICK_START.md +104 -9
- package/docs/USAGE.md +241 -2
- package/docs/api/core-version.md +1 -1
- package/docs/api/equipment-generic-tier-assets.md +41 -1
- package/docs/api/equipment-generic-tier-presets.md +11 -3
- package/docs/api/exports.json +172 -2
- package/docs/api/exposure-auto-iso-slowest-shutter.md +139 -0
- package/docs/api/exposure-exposure-mode-resolver.md +68 -0
- package/docs/api/facade-chart-scenes.md +36 -5
- package/docs/api/facade-color-patches.md +150 -0
- package/docs/api/facade-simulate-capture.md +140 -9
- package/docs/api/output-text-metadata.md +34 -0
- package/llms.txt +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display-view.js","sourceRoot":"","sources":["../../src/facade/display-view.ts"],"names":[],"mappings":"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,CAAC,GAAG,EAAE,CAAC;gBACxF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,CAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,CAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,CAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;gBACrI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,CAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,CAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,CAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;gBACrI,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;gBACnJ,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;gBACnJ,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;gBACnJ,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;gBACnJ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Display view (`simulateDisplayView`): the image that the real full-resolution capture of a `simulateCapture`\n * request would give after it is resized to a small display size by area averaging in linear light, computed\n * without rendering the full-resolution capture. Internal; the public entry point and the renderer that sets it up live in\n * `simulate-display-view.ts`, the option parsing in `simulate-capture.ts`. The design and its error analysis are in docs/DISPLAY_VIEW.md.\n *\n * Definition (the reference this module estimates): let L_j be the linear-light value of output pixel j of the\n * real capture (its sRGB samples decoded with the sRGB EOTF). Display pixel P covers the rectangle F_P of\n * real output pixels [P_x·s_x, (P_x + 1)·s_x) × [P_y·s_y, (P_y + 1)·s_y), s = frame size ÷ view size, and\n * D_P = Σ_j (w_j / A) · L_j,\n * w_j = the area of pixel j inside F_P, A = s_x·s_y (the \"area\" or box resampling filter). D_P is then\n * sRGB-encoded and rounded.\n *\n * Estimation, per display pixel:\n * 1. Expected value. The expectation E[D_P] = Σ_j (w_j/A)·E[L_j] is estimated by stratified Monte Carlo over the\n * footprint: K × K strata, one uniformly jittered point in each (deterministic, seeded by the capture seed and the\n * display pixel index); the real pixel containing the point is the sample. A point drawn uniformly in F_P lands in\n * pixel j with probability w_j/A, so the sample mean is unbiased for E[D_P]. For each sampled pixel the module\n * computes, at the real pitch, the exact expected electrons of the real sites its demosaic reads (the scene sampled\n * at those sites, through the declared pixel aperture, anti-aliasing filter and diffraction kernels, so the real\n * colour mosaic and its aliasing are kept), the moments of each site's normalized RAW value (shot, dark, read and\n * ADC noise; clipped at the white level), the demosaic's linear kernels, the development (white balance,\n * highlight clip, colour matrix) and the output rendering (tone curve, clip to [0, 1]). The non-linear steps act\n * on the pixel's own distribution, approximated as normal with the propagated mean and variance, so a clipped\n * noise floor or a clipped highlight moves the mean as it does in the real image.\n * 2. Noise. D_P − E[D_P] is a weighted sum of the independent site noises. Linearizing the non-linear steps with\n * their expected slopes (Stein's lemma), its covariance is A·Γ·diag(B_c·σ_c²)·Γᵀ·Aᵀ, where σ_c² is the site\n * variance of CFA channel c and B_c = Σ_k β_k² with β_k the total weight of site k in the display pixel after\n * demosaicing and averaging. B_c holds the demosaic correlation exactly for the linear kernels and is computed in\n * closed form from the footprint. The rest of each pixel's variance that the linearization misses (clipping) is\n * added as independent per-pixel variance, weighted by Σ_j (w_j/A)², as is the output quantization (Δ²/12).\n * One correlated normal draw per display pixel (the sum of hundreds of independent site noises) gives the noise.\n */\n\nimport { createDeterministicUniformStream, createPortableStandardNormalPairs, deriveNativeSiteStreamSeedUint32, fmix32, samplePortableStandardNormal } from \"../sensor/stochastic-seed.js\";\nimport { encodeSrgbComponentPortable } from \"../color/srgb-transfer.js\";\nimport { createPoissonSampler } from \"../sensor/raw-readout.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { portableCbrt, portableCosTwoPi, portableExp, portableExp2, portableLog2, portablePow } from \"../core/portable-math.js\";\n\n/** Stream IDs of the display view's two seeded streams, distinct from the native charge (0) and read-noise (1) streams. */\nexport const DISPLAY_VIEW_JITTER_STREAM_ID = 32 as const;\nexport const DISPLAY_VIEW_NOISE_STREAM_ID = 33 as const;\nexport const DISPLAY_VIEW_AHD_STREAM_ID = 34 as const;\n\nexport { createDisplayViewExpectedSignal, type DisplayViewExpectedSignal, type DisplayViewExpectedSignalInput, type DisplayViewQueryOffset,\n type DisplayViewScene } from \"./expected-signal.js\";\nimport type { DisplayViewExpectedSignal, DisplayViewExpectedSignalInput } from \"./expected-signal.js\";\nimport type { ResolvedChartScene } from \"./chart-scenes.js\";\nimport type { ResolvedChartMaterialLayers } from \"./chart-material-layers.js\";\n\n/**\n * #478: what a GPU renderer needs beyond the CPU setup, which reads the scene only through `signal`: the expected signal's\n * input (query offsets and points, the materials table, the channel responses) and the resolved chart (null for caller\n * scenes), from which it builds its material lookup. The CPU renderer ignores it.\n */\nexport interface DisplayViewGpuSetup {\n signalInput: DisplayViewExpectedSignalInput;\n /** The resolved chart (portable), or null for a caller scene or a declared `material-layers` scene. */\n chart: ResolvedChartScene | null;\n /** #491: the declared `material-layers` scene (its `chart` is the chart under the layers), or null. */\n layers?: ResolvedChartMaterialLayers | null;\n /**\n * #491: a fixed-size chart's placement (`chartSize`): chart-local frame units per frame unit (the metres per frame unit over the\n * chart's half width) and the chart's aspect; outside |cu| ≤ 1, |cv| ≤ aspect the material is the surround, the materials' last entry.\n */\n placement?: { chartUnitsPerFrameUnit: number; aspect: number } | null;\n /**\n * #492: the defocus disc's radius in sites when the expected signal's kernels carry it (`lens.defocus` out of focus); absent in\n * focus. The GPU Quality site pass then sums each site's taps in blocks (src/gpu/display-view-quality-gpu.ts).\n */\n defocusRadius?: number;\n}\n// ---------------------------------------------------------------------------------------------------------------\n// Normal-distribution helpers.\n/** Standard normal density. */\nfunction phi(z: number): number { return 0.3989422804014327 * portableExp(-0.5 * z * z); }\n/**\n * Standard normal distribution function, Φ(z) = 1 − Q(z), with Q from the rational approximation 26.2.17 of\n * Abramowitz & Stegun, Handbook of Mathematical Functions (NBS AMS 55, 1964; free, US government work):\n * absolute error below 7.5e-8.\n */\nfunction bigPhi(z: number): number {\n const x = Math.abs(z), t = 1 / (1 + 0.2316419 * x);\n const q = phi(x) * t * (0.319381530 + t * (-0.356563782 + t * (1.781477937 + t * (-1.821255978 + t * 1.330274429))));\n return z >= 0 ? 1 - q : q;\n}\n/** Beyond this many standard deviations from a clip level the clip changes the moments by less than 1e-15 of σ². */\nconst CLIP_REACH_SIGMA = 8.5;\n\n/**\n * Internal (exported for tests). Moments of min(Y, top) for Y ~ N(m, v): mean, variance and the slope d E/d m = P(Y < top). Exact for a normal Y:\n * E[min(Y,t)] = m − s·(φ(z) − z·(1 − Φ(z))), z = (t − m)/s.\n */\nexport function upperClip(m: number, v: number, top: number, out: Float64Array): void {\n if (!(v > 0)) { const c = m < top ? m : top; out[0] = c; out[1] = 0; out[2] = m < top ? 1 : 0; return; }\n const s = Math.sqrt(v), z = (top - m) / s;\n if (z > CLIP_REACH_SIGMA) { out[0] = m; out[1] = v; out[2] = 1; return; }\n if (z < -CLIP_REACH_SIGMA) { out[0] = top; out[1] = 0; out[2] = 0; return; }\n const P = bigPhi(z), d = phi(z);\n const mean = m - s * (d - z * (1 - P));\n // E[min(Y,t)²] = m²Φ − 2msφ + s²(Φ − zφ) + t²(1 − Φ).\n const second = m * m * P - 2 * m * s * d + v * (P - z * d) + top * top * (1 - P);\n out[0] = mean; out[1] = Math.max(0, second - mean * mean); out[2] = P;\n}\n/**\n * Internal (exported for tests). Moments of clip(Y, 0, 1) for Y with mean m, variance v and standardized skewness γ\n * (default 0: normal, closed form). The mean carries the first-order Edgeworth term of a skewed Y: for\n * E[(Y − t)₊] it adds s·γ·z·φ(z)/6 at z = (t − m)/s, so E[clip] gains (s·γ/6)·(a·φ(a) − b·φ(b)) with a = −m/s,\n * b = (1 − m)/s (docs/DISPLAY_VIEW.md, \"Readout\"). |γ| is limited to 1, where the first-order term is still a small part.\n */\nexport function unitClip(m: number, v: number, out: Float64Array, skewness = 0): void {\n if (!(v > 0)) { const c = m < 0 ? 0 : m > 1 ? 1 : m; out[0] = c; out[1] = 0; out[2] = m > 0 && m < 1 ? 1 : 0; return; }\n const s = Math.sqrt(v), a = -m / s, b = (1 - m) / s;\n if (a < -CLIP_REACH_SIGMA && b > CLIP_REACH_SIGMA) { out[0] = m; out[1] = v; out[2] = 1; return; }\n const Pa = a < -CLIP_REACH_SIGMA ? 0 : bigPhi(a), Pb = b > CLIP_REACH_SIGMA ? 1 : bigPhi(b), da = a < -CLIP_REACH_SIGMA ? 0 : phi(a), db = b > CLIP_REACH_SIGMA ? 0 : phi(b);\n const inside = Pb - Pa, gamma = skewness > 1 ? 1 : skewness < -1 ? -1 : skewness;\n const mean = m * inside + s * (da - db) + (1 - Pb) + (gamma === 0 ? 0 : s * gamma / 6 * ((a < -CLIP_REACH_SIGMA ? 0 : a * da) - (b > CLIP_REACH_SIGMA ? 0 : b * db)));\n // E[Y² 1(0<Y<1)] = (m² + s²)(Φb − Φa) + 2ms(φa − φb) + s²(aφa − bφb); plus P(Y ≥ 1).\n const aa = a < -CLIP_REACH_SIGMA ? 0 : a * da, bb = b > CLIP_REACH_SIGMA ? 0 : b * db;\n const second = (m * m + v) * inside + 2 * m * s * (da - db) + v * (aa - bb) + (1 - Pb);\n out[0] = mean; out[1] = Math.max(0, second - mean * mean); out[2] = inside;\n}\n/** Gauss–Legendre nodes and weights on [−1, 1], 16 points (computed once by Newton iteration on P_16 from cos(π(i + ¾)/(n + ½))). */\nconst GL = ((): { x: Float64Array; w: Float64Array } => {\n const n = 16, x = new Float64Array(n), w = new Float64Array(n);\n for (let i = 0; i < n; i++) {\n let z = portableCosTwoPi((i + 0.75) / (2 * n + 1)), dp = 0;\n for (let it = 0; it < 100; it++) {\n let p0 = 1, p1 = z;\n for (let k = 2; k <= n; k++) { const p2 = ((2 * k - 1) * z * p1 - (k - 1) * p0) / k; p0 = p1; p1 = p2; }\n dp = n * (z * p1 - p0) / (z * z - 1);\n const dz = p1 / dp;\n z -= dz;\n if (Math.abs(dz) < 1e-16) break;\n }\n x[i] = z; w[i] = 2 / ((1 - z * z) * dp * dp);\n }\n return { x, w };\n})();\n/** Internal (exported for tests). Positive Reinhard per channel then the clip to [0, 1]: h(x) = x/(1 + x) for x > 0, else 0 (its slope h' = 1/(1 + x)²). */\nexport function reinhardMoments(m: number, v: number, out: Float64Array): void {\n if (!(v > 0)) { out[0] = m > 0 ? m / (1 + m) : 0; out[1] = 0; out[2] = m > 0 ? 1 / ((1 + m) * (1 + m)) : 0; return; }\n const s = Math.sqrt(v), lo = Math.max(0, m - CLIP_REACH_SIGMA * s), hi = m + CLIP_REACH_SIGMA * s;\n if (!(hi > lo)) { out[0] = 0; out[1] = 0; out[2] = 0; return; }\n // Composite 16-point Gauss–Legendre over [lo, hi] in 4 panels; h is smooth there (the kink at 0 is an end point).\n let e1 = 0, e2 = 0, ed = 0;\n const panels = 4, width = (hi - lo) / panels;\n for (let p = 0; p < panels; p++) {\n const c = lo + (p + 0.5) * width, half = width / 2;\n for (let k = 0; k < 16; k++) {\n const x = c + half * GL.x[k]!, weight = half * GL.w[k]! * phi((x - m) / s) / s, h = x / (1 + x);\n e1 += weight * h; e2 += weight * h * h; ed += weight / ((1 + x) * (1 + x));\n }\n }\n out[0] = e1; out[1] = Math.max(0, e2 - e1 * e1); out[2] = ed;\n}\n\n// ---------------------------------------------------------------------------------------------------------------\n// The display view renderer.\n\n/** Per CFA channel: normalized RAW value = (code − black)/(white − black) of a site with e expected electrons. */\nexport interface DisplayViewChannelReadout {\n /** Normalized value per electron: digitalGain / (conversionGain·(white − black)). */\n perElectron: number;\n /** Mean dark electrons per site during the exposure. */\n darkElectrons: number;\n /** Variance of the normalized value not proportional to the electrons: read noise and ADC quantization. */\n constantVariance: number;\n}\n\nexport interface DisplayViewSetup {\n frameWidth: number;\n frameHeight: number;\n /** Native site of output pixel (0, 0). */\n margin: number;\n nativeWidth: number;\n nativeHeight: number;\n viewWidth: number;\n viewHeight: number;\n region: { x: number; y: number; width: number; height: number };\n /** Samples per axis in display pixels whose pilot finds detail; uniform ones use a quarter (at least 1). */\n samplesPerAxis: number;\n /** Sites beyond the footprint that can affect its pixels (demosaic, filter and kernel reach), for the pilot. */\n reachSites: number;\n bitDepth: 8 | 16;\n seed: number;\n signal: DisplayViewExpectedSignal;\n readout: readonly [DisplayViewChannelReadout, DisplayViewChannelReadout, DisplayViewChannelReadout];\n /** Bilinear demosaic kernels per absolute CFA phase (phaseY·2 + phaseX): for each output channel, (dx, dy, weight) triples. */\n demosaic: readonly (readonly (readonly DisplayViewKernelTap[])[])[];\n /**\n * The demosaic whose pixel statistics the view reproduces, per phase: one candidate (bilinear) or AHD's two directional\n * linear candidates (`ahdCandidateKernels`), each a kernel per output channel. Default: the bilinear kernels.\n */\n candidates?: readonly (readonly (readonly (readonly DisplayViewKernelTap[])[])[])[];\n /** White-balance gains applied to the normalized camera channels and the highlight clip level (the smallest gain). */\n gains: readonly [number, number, number];\n clipLevel: number;\n /** Camera channels (after WB and the highlight clip) → linear sRGB: rows are output components. */\n matrix: readonly (readonly number[])[];\n toneCurve: \"identity\" | \"positive-reinhard-per-channel\";\n /**\n * AHD only: the low-signal correction. `labMatrix` is the camera → XYZ matrix AHD measures homogeneity with (the profile's\n * matrix times the white-balance gains); samples whose pixel variance (linear light) exceeds `thresholdVariance` add the\n * correction of a flat neighbourhood with their channel means, estimated once per quantized state with `drawsPerState` draws.\n */\n ahdCorrection?: { labMatrix: readonly (readonly number[])[]; drawsPerState: number; thresholdVariance: number };\n /**\n * #447: a collect pass. The render adds to this set the grid key of every state its corrected samples interpolate between\n * (the corners `gridCorrection` would compute or read), computes and reads no state and leaves the cache untouched; its\n * corrections are zero, so its image is not a display view and is discarded by the caller.\n */\n ahdCollect?: Set<number>;\n yieldControl(): Promise<void>;\n checkAbort(): void;\n /** #478: the inputs a GPU renderer builds its scene lookup from (see {@link DisplayViewGpuSetup}); not read by `renderDisplayView`. */\n gpu?: DisplayViewGpuSetup;\n}\n\nexport interface DisplayViewRenderResult {\n samples: Uint8Array | Uint16Array;\n /** Mean linear-light value of each display pixel before the noise draw (diagnostics and validation). */\n expected: Float64Array;\n /** Noise standard deviation of each display pixel's components in linear light (square root of the covariance diagonal). */\n noiseStd: Float64Array;\n sampleCount: number;\n siteCount: number;\n /** Display pixels whose pilot found detail (full samples) and uniform ones (a quarter per axis). */\n detailPixelCount: number;\n uniformPixelCount: number;\n /** Display pixels whose expected value includes the AHD low-signal correction. */\n ahdCorrectedPixelCount: number;\n /**\n * 2.8 (#393): \"exact-area-mean\" when each display pixel averaged every real pixel of its footprint once, with its exact\n * overlap weight (views where a footprint holds at most K² real pixels); \"stratified-monte-carlo\" otherwise.\n */\n estimation: \"exact-area-mean\" | \"stratified-monte-carlo\";\n}\n\n/** One tap of a linear demosaic kernel: the site at (dx, dy) from the pixel, and its weight. */\nexport interface DisplayViewKernelTap { dx: number; dy: number; weight: number }\n\n/**\n * AHD's two directional candidates (`createAhdDemosaicTask`, after Hirakawa & Parks 2005) as linear kernels, for a pixel of\n * CFA phase (phaseX, phaseY) of an RGGB mosaic: green along the rows (or columns) with the 5-tap filter\n * [−1/4, 1/2, 1/2, 1/2, −1/4], then red and blue from bilinearly interpolated colour differences against that green. Each\n * candidate is linear in the mosaic, so its kernel is its response to a unit site; AHD then picks one candidate per pixel\n * by homogeneity, which is the only non-linear step. Returns [horizontal, vertical], each [red, green, blue] kernels.\n */\nexport function ahdCandidateKernels(phaseX: number, phaseY: number): DisplayViewKernelTap[][][] {\n const role = (dx: number, dy: number): number => { const x = (phaseX + dx) & 1, y = (phaseY + dy) & 1; return y === 0 ? (x === 0 ? 0 : 1) : (x === 0 ? 1 : 2); };\n const evaluate = (site: (dx: number, dy: number) => number, horizontal: boolean): number[] => {\n const green = (dx: number, dy: number): number => {\n const c = site(dx, dy);\n if (role(dx, dy) === 1) return c;\n return horizontal ? (site(dx - 1, dy) + site(dx + 1, dy)) / 2 + (2 * c - site(dx - 2, dy) - site(dx + 2, dy)) / 4\n : (site(dx, dy - 1) + site(dx, dy + 1)) / 2 + (2 * c - site(dx, dy - 2) - site(dx, dy + 2)) / 4;\n };\n const diff = (dx: number, dy: number): number => site(dx, dy) - green(dx, dy);\n const out = [0, 0, 0], own = role(0, 0), g = green(0, 0);\n out[1] = g;\n if (own === 1) {\n const hRole = role(1, 0), vRole = 2 - hRole;\n out[hRole] = g + (diff(-1, 0) + diff(1, 0)) / 2;\n out[vRole] = g + (diff(0, -1) + diff(0, 1)) / 2;\n } else {\n out[own] = site(0, 0);\n out[2 - own] = g + (diff(-1, -1) + diff(1, -1) + diff(-1, 1) + diff(1, 1)) / 4;\n }\n return out;\n };\n return [true, false].map((horizontal) => {\n const kernels: DisplayViewKernelTap[][] = [[], [], []];\n for (let dy = -3; dy <= 3; dy++) for (let dx = -3; dx <= 3; dx++) {\n const response = evaluate((x, y) => (x === dx && y === dy ? 1 : 0), horizontal);\n for (let c = 0; c < 3; c++) if (response[c] !== 0) kernels[c]!.push({ dx, dy, weight: response[c]! });\n }\n return kernels;\n });\n}\n\n/** 1-D overlaps of real output columns with one display column: first column index and the overlaps. */\nexport function overlaps(start: number, end: number, limit: number): { first: number; w: Float64Array } {\n const first = Math.floor(start), last = Math.min(limit - 1, Math.ceil(end) - 1), w = new Float64Array(last - first + 1);\n for (let k = first; k <= last; k++) w[k - first] = Math.min(end, k + 1) - Math.max(start, k);\n return { first, w };\n}\n/**\n * Internal (exported for tests). Footprint sums along one axis, for the closed-form B_c (docs/DISPLAY_VIEW.md, \"Demosaic correlation\"). Native\n * coordinate parity decides the CFA: red columns/rows are even, blue odd. With w(k) the overlap of real column k:\n * - b(k) = w(k) + ½(w(k − 1) + w(k + 1)), the bilinear red/blue spread; sums of b² over even and odd native k;\n * - p(k) = w(k), q(k) = ¼(w(k − 1) + w(k + 1)) for green: sums of p², q² and p·q over even and odd native k;\n * - Σ w².\n */\nexport interface AxisSums { bEven: number; bOdd: number; ppEven: number; ppOdd: number; qqEven: number; qqOdd: number; pqEven: number; pqOdd: number; ww: number }\nexport function axisSums(start: number, end: number, limit: number, margin: number): AxisSums {\n const { first, w } = overlaps(start, end, limit);\n const at = (k: number): number => (k >= first && k < first + w.length ? w[k - first]! : 0);\n const s: AxisSums = { bEven: 0, bOdd: 0, ppEven: 0, ppOdd: 0, qqEven: 0, qqOdd: 0, pqEven: 0, pqOdd: 0, ww: 0 };\n for (let k = first - 1; k <= first + w.length; k++) {\n const p = at(k), q = (at(k - 1) + at(k + 1)) / 4, b = p + 2 * q, even = ((k + margin) & 1) === 0;\n if (even) { s.bEven += b * b; s.ppEven += p * p; s.qqEven += q * q; s.pqEven += p * q; } else { s.bOdd += b * b; s.ppOdd += p * p; s.qqOdd += q * q; s.pqOdd += p * q; }\n s.ww += p * p;\n }\n return s;\n}\n/** Internal (exported for tests). B for red, green and blue (Σ β² over the channel's sites, β normalized to unit sum) and Σ (w/A)². */\nexport function footprintWeights(x: AxisSums, y: AxisSums, area: number, out: Float64Array): void {\n const a2 = area * area;\n const green = (xpp: number, xqq: number, xpq: number, ypp: number, yqq: number, ypq: number): number =>\n xpp * ypp + xqq * ypp + xpp * yqq + 2 * xpq * ypp + 2 * xpp * ypq + 2 * xpq * ypq;\n out[0] = x.bEven * y.bEven / a2;\n // Green sites: (odd x, even y) and (even x, odd y).\n out[1] = (green(x.ppOdd, x.qqOdd, x.pqOdd, y.ppEven, y.qqEven, y.pqEven) + green(x.ppEven, x.qqEven, x.pqEven, y.ppOdd, y.qqOdd, y.pqOdd)) / a2;\n out[2] = x.bOdd * y.bOdd / a2;\n out[3] = x.ww * y.ww / a2;\n}\n/** AHD's dependence reach in sites (directional green ±2, colour differences ±1, homogeneity 4-neighbours and 3 × 3 sum). */\nconst AHD_REACH = 5, AHD_SIDE = 2 * AHD_REACH + 1;\n/** Grid of flat-neighbourhood states for the AHD correction: steps per octave of the normalized channel mean, octaves below white (exported for the GPU display view, #479). */\nexport const AHD_KEY_STEPS = 8, AHD_KEY_OCTAVES = 12;\n/** CFA role (0 red, 1 green, 2 blue) of each patch site (dy + 5)·11 + dx + 5, per phase (phaseY·2 + phaseX) of the centre. */\nconst AHD_ROLES = [0, 1, 2, 3].map((phase) => {\n const roles = new Uint8Array(AHD_SIDE * AHD_SIDE), px = phase & 1, py = phase >> 1;\n for (let dy = -AHD_REACH; dy <= AHD_REACH; dy++) for (let dx = -AHD_REACH; dx <= AHD_REACH; dx++) {\n const xx = (px + dx) & 1, yy = (py + dy) & 1;\n roles[(dy + AHD_REACH) * AHD_SIDE + dx + AHD_REACH] = yy === 0 ? (xx === 0 ? 0 : 1) : (xx === 0 ? 1 : 2);\n }\n return roles;\n});\n/**\n * 1 for the patch sites the AHD steps read (directional greens within 3 sites read 2 further along their axis, the candidates\n * within 2 read 1 further): |dy| ≤ 3 or |dx| ≤ 3. The 16 sites with |dx| ≥ 4 and |dy| ≥ 4 are never read.\n */\nconst AHD_READ = Uint8Array.from({ length: AHD_SIDE * AHD_SIDE }, (_, p) => {\n const dx = (p % AHD_SIDE) - AHD_REACH, dy = Math.floor(p / AHD_SIDE) - AHD_REACH;\n return Math.abs(dx) <= 3 || Math.abs(dy) <= 3 ? 1 : 0;\n});\n/** x², as one correctly rounded product (`**` is implementation-approximated in ECMA-262). */\nfunction square(x: number): number { return x * x; }\n/** CIELAB's f(t) constants (CIE 15:2004): linear below (6/29)³ with slope (29/3)³/116. */\nconst LAB_EPSILON = 216 / 24389, LAB_KAPPA = 24389 / 27;\n/** A 32-bit hash of a correction key (MurmurHash3 finalizer of the three quantized means). */\nfunction fmixKey(a: number, b: number, c: number): number { return fmix32((Math.imul(a + 1, 0x9e3779b1) ^ Math.imul(b + 1, 0x85ebca77) ^ Math.imul(c + 1, 0xc2b2ae3d)) >>> 0); }\n/** Lowest grid level, 2^-AHD_KEY_OCTAVES of white (exact). */\nexport const AHD_KEY_FLOOR = 1 / 4096;\n/** Grid levels per channel (indices 0 to AHD_KEY_OCTAVES·AHD_KEY_STEPS). */\nexport const AHD_KEY_LEVELS = AHD_KEY_OCTAVES * AHD_KEY_STEPS + 1;\n/** Correction states kept per setup, and setups kept (least recently used first out); about 50 bytes per state. */\nconst AHD_STATE_LIMIT = 1 << 16, AHD_SETUP_LIMIT = 4;\n/** The correction states of one setup: the three values of state n at values[3·n …], found by its grid key. */\ninterface CorrectionStates { index: Map<number, number>; values: Float64Array }\nconst ahdStateCache = new Map<string, CorrectionStates>();\n/** Every input a correction state depends on besides its indices, as exact decimal text (JavaScript numbers round-trip). */\nfunction correctionKey(seed: number, correction: NonNullable<DisplayViewSetup[\"ahdCorrection\"]>, perElectron: ArrayLike<number> & Iterable<number>, constantVariance: ArrayLike<number> & Iterable<number>,\n gains: readonly number[], clipLevel: number, matrix: readonly (readonly number[])[], toneCurve: string): string {\n return [seed, correction.drawsPerState, ...perElectron, ...constantVariance, ...correction.labMatrix.flat(), ...gains, clipLevel, ...matrix.flat(), toneCurve].join(\",\");\n}\n/**\n * Internal (exported for tests, #442): the window offset of each slot, slot (dy + reach)·(2·reach + 1) + dx + reach, as\n * two integer tables: dx[slot] = (slot mod side) − reach and dy[slot] = ⌊slot / side⌋ − reach. The render loop reads them\n * instead of taking a modulo and a division per site read; they are the same integers.\n */\nexport function displayViewSlotOffsets(reach: number): { dx: Int32Array; dy: Int32Array } {\n const side = 2 * reach + 1, slotsCount = side * side;\n return { dx: Int32Array.from({ length: slotsCount }, (_, slot) => (slot % side) - reach), dy: Int32Array.from({ length: slotsCount }, (_, slot) => ((slot / side) | 0) - reach) };\n}\n/** The per-phase candidate tables of a render, flat (#442): index phase·2 + candidate, and ·3 + channel for the slots and weights. */\nexport interface DisplayViewCandidateTables {\n /** Candidates per phase: 1 (bilinear) or 2 (AHD), the same for every phase. */\n count: number;\n denseAt: Float64Array[];\n listAt: Int32Array[];\n slotsAt: Int32Array[];\n weightsAt: Float64Array[];\n}\n/**\n * Internal (exported for tests, #442): the nested per-phase tables [phase][candidate] (and [channel]) as flat arrays holding\n * the same typed arrays. Plain arrays of typed arrays with one element kind keep the render loop's keyed loads on one hidden\n * class each, where the nested arrays (arrays of arrays of typed arrays) made V8 deoptimize the render loop. Every phase must\n * have the same number of candidates, 1 or 2 (the record layout and the choice variance assume it), each with 3 channels.\n */\nexport function flatDisplayViewCandidateTables(slots: readonly (readonly (readonly Int32Array[])[])[], weights: readonly (readonly (readonly Float64Array[])[])[],\n dense: readonly (readonly Float64Array[])[], list: readonly (readonly Int32Array[])[]): DisplayViewCandidateTables {\n const count = slots[0]?.length ?? 0;\n if (slots.length !== 4 || (count !== 1 && count !== 2)) throw new InvalidConfigurationError(\"display view: each of the 4 CFA phases needs 1 or 2 demosaic candidates.\");\n const denseAt: Float64Array[] = [], listAt: Int32Array[] = [], slotsAt: Int32Array[] = [], weightsAt: Float64Array[] = [];\n for (let p = 0; p < 4; p++) {\n if (slots[p]!.length !== count || weights[p]?.length !== count || dense[p]?.length !== count || list[p]?.length !== count)\n throw new InvalidConfigurationError(\"display view: every CFA phase needs the same number of demosaic candidates.\");\n for (let d = 0; d < count; d++) {\n if (slots[p]![d]!.length !== 3 || weights[p]![d]!.length !== 3) throw new InvalidConfigurationError(\"display view: each demosaic candidate needs a kernel per camera channel.\");\n denseAt[p * 2 + d] = dense[p]![d]!; listAt[p * 2 + d] = list[p]![d]!;\n for (let c = 0; c < 3; c++) { slotsAt[(p * 2 + d) * 3 + c] = slots[p]![d]![c]!; weightsAt[(p * 2 + d) * 3 + c] = weights[p]![d]![c]!; }\n }\n }\n return { count, denseAt, listAt, slotsAt, weightsAt };\n}\n/** Internal (exported for tests): the correction states kept across calls, and clearing them. */\nexport function displayViewCorrectionStateCount(): number { let n = 0; for (const states of ahdStateCache.values()) n += states.index.size; return n; }\nexport function clearDisplayViewCorrectionStates(): void { ahdStateCache.clear(); }\n/** Number of grid keys: AHD_KEY_LEVELS³ (a grid key is (i0·AHD_KEY_LEVELS + i1)·AHD_KEY_LEVELS + i2). */\nconst AHD_GRID_KEY_COUNT = AHD_KEY_LEVELS * AHD_KEY_LEVELS * AHD_KEY_LEVELS;\n/**\n * 2.10 (#447): the AHD low-signal correction states of one setup, as a realm sends them to another. `key` is the setup's\n * correction key (`PreparedDisplayView.correctionKey()`), `gridKeys[i]` a state's grid key and `values[3·i …]` its three\n * values (28 bytes per state). Both arrays are transferable.\n */\nexport interface DisplayViewCorrectionStateSet { key: string; gridKeys: Int32Array; values: Float64Array }\n/** 2.10 (#447): the grid keys of the states a region needs (`PreparedDisplayView.collectCorrectionStates`), ascending. */\nexport interface DisplayViewCorrectionStateKeys { key: string; gridKeys: Int32Array }\n/** The inputs of one setup's correction states: the inputs of its correction key. */\nexport type DisplayViewCorrectionSetup = Pick<DisplayViewSetup, \"seed\" | \"readout\" | \"gains\" | \"clipLevel\" | \"matrix\" | \"toneCurve\"> &\n { ahdCorrection: NonNullable<DisplayViewSetup[\"ahdCorrection\"]> };\n/** Internal (#447): the correction key of a setup, or null without the AHD correction (the key `renderDisplayView` looks its states up with). */\nexport function displayViewCorrectionKey(setup: Pick<DisplayViewSetup, \"seed\" | \"readout\" | \"gains\" | \"clipLevel\" | \"matrix\" | \"toneCurve\" | \"ahdCorrection\">): string | null {\n if (!setup.ahdCorrection) return null;\n return correctionKey(setup.seed, setup.ahdCorrection, Float64Array.from(setup.readout, (r) => r.perElectron), Float64Array.from(setup.readout, (r) => r.constantVariance),\n setup.gains, setup.clipLevel, setup.matrix, setup.toneCurve);\n}\n/** True for a typed array of the named kind from any realm (a structured clone arrives as one of the receiving realm). */\nfunction isTypedArray(value: unknown, tag: \"Int32Array\" | \"Float64Array\"): boolean {\n return ArrayBuffer.isView(value) && Object.prototype.toString.call(value) === \"[object \" + tag + \"]\";\n}\n/** A grid-key list, checked: an Int32Array of keys in [0, AHD_KEY_LEVELS³). */\nfunction checkGridKeys(gridKeys: unknown, caller: string): Int32Array {\n if (!isTypedArray(gridKeys, \"Int32Array\")) throw new InvalidConfigurationError(caller + \": gridKeys must be an Int32Array.\");\n const keys = gridKeys as Int32Array;\n for (let i = 0; i < keys.length; i++) if (!(keys[i]! >= 0 && keys[i]! < AHD_GRID_KEY_COUNT))\n throw new InvalidConfigurationError(caller + \": gridKeys[\" + i + \"] (\" + keys[i] + \") is not a grid key, an integer in [0, \" + AHD_GRID_KEY_COUNT + \").\");\n return keys;\n}\n/**\n * 2.10 (#447): the AHD low-signal correction states this JavaScript realm holds (a Web Worker, a page), one entry per cached\n * setup, least recently used first, each state's grid key and three values copied out. Another realm adds them with\n * {@link bindDisplayViewCorrectionStates}; a render there then reads them instead of computing them, with the same bytes.\n */\nexport function serializeDisplayViewCorrectionStates(): DisplayViewCorrectionStateSet[] {\n const out: DisplayViewCorrectionStateSet[] = [];\n for (const [key, states] of ahdStateCache) {\n const gridKeys = new Int32Array(states.index.size), values = new Float64Array(3 * states.index.size);\n let i = 0;\n for (const [gridKey, n] of states.index) {\n gridKeys[i] = gridKey;\n values[3 * i] = states.values[3 * n]!; values[3 * i + 1] = states.values[3 * n + 1]!; values[3 * i + 2] = states.values[3 * n + 2]!;\n i++;\n }\n out.push({ key, gridKeys, values });\n }\n return out;\n}\n/**\n * 2.10 (#447): adds states another realm computed (an export, or `computeCorrectionStates` results) to this realm's cache and\n * returns the number of states added. For each entry, the grid keys its setup does not hold yet are appended; known ones are\n * left as they are (a state's values follow from its key, so they are equal). Every entry is checked before the cache is\n * touched: `key` a non-empty string, `gridKeys` an Int32Array of grid keys, `values` a Float64Array of 3 × `gridKeys.length`\n * finite numbers; otherwise it fails with an InvalidConfigurationError and the cache is unchanged. The cache's bounds apply as\n * in a render: an unknown key creates a setup and can evict the least recently used of the four kept, and a setup that\n * reaches 65 536 states is cleared before the next one is added. Import only keys a prepared view reported\n * (`correctionKey()`), so states a render here will read.\n */\nexport function bindDisplayViewCorrectionStates(entries: readonly DisplayViewCorrectionStateSet[]): number {\n const caller = \"bindDisplayViewCorrectionStates\";\n if (!Array.isArray(entries)) throw new InvalidConfigurationError(caller + \": entries must be an array of { key, gridKeys, values }.\");\n const checked: DisplayViewCorrectionStateSet[] = [];\n for (let e = 0; e < entries.length; e++) {\n const entry: unknown = entries[e], at = caller + \": entries[\" + e + \"]\";\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) throw new InvalidConfigurationError(at + \" must be an object { key, gridKeys, values }.\");\n for (const field of Object.keys(entry)) if (field !== \"key\" && field !== \"gridKeys\" && field !== \"values\") throw new InvalidConfigurationError(at + \" has unknown field \" + JSON.stringify(field) + \".\");\n const { key, gridKeys, values } = entry as Record<string, unknown>;\n if (typeof key !== \"string\" || key.length === 0) throw new InvalidConfigurationError(at + \".key must be a non-empty string (a prepared view's correctionKey()).\");\n const keys = checkGridKeys(gridKeys, at);\n if (!isTypedArray(values, \"Float64Array\")) throw new InvalidConfigurationError(at + \".values must be a Float64Array.\");\n const v = values as Float64Array;\n if (v.length !== 3 * keys.length) throw new InvalidConfigurationError(at + \".values must hold 3 values per grid key (\" + 3 * keys.length + \"), not \" + v.length + \".\");\n for (let i = 0; i < v.length; i++) if (!Number.isFinite(v[i])) throw new InvalidConfigurationError(at + \".values[\" + i + \"] (\" + v[i] + \") is not finite.\");\n checked.push({ key, gridKeys: keys, values: v });\n }\n let appended = 0;\n for (const entry of checked) {\n const states = correctionStates(entry.key);\n for (let i = 0; i < entry.gridKeys.length; i++) {\n const gridKey = entry.gridKeys[i]!;\n if (states.index.has(gridKey)) continue;\n // As gridCorrection stores a state.\n if (states.index.size >= AHD_STATE_LIMIT) states.index.clear();\n const n = states.index.size;\n if (states.values.length < 3 * (n + 1)) { const grown = new Float64Array(2 * states.values.length); grown.set(states.values); states.values = grown; }\n states.values[3 * n] = entry.values[3 * i]!; states.values[3 * n + 1] = entry.values[3 * i + 1]!; states.values[3 * n + 2] = entry.values[3 * i + 2]!;\n states.index.set(gridKey, n);\n appended++;\n }\n }\n return appended;\n}\n/**\n * Internal (#447, `PreparedDisplayView.computeCorrectionStates`): computes the states of the given grid keys for a setup (each\n * as a render computes it, read from the cache where it is held) and stores them in this realm's cache; returns each key's\n * three values in the order given. Yields to the host and checks for abort between states, as a render does.\n */\nexport async function computeDisplayViewCorrectionStates(setup: DisplayViewCorrectionSetup & Pick<DisplayViewSetup, \"yieldControl\" | \"checkAbort\">,\n gridKeys: Int32Array): Promise<DisplayViewCorrectionStateSet> {\n const keys = checkGridKeys(gridKeys, \"computeCorrectionStates\");\n setup.checkAbort();\n const key = displayViewCorrectionKey(setup)!, states = correctionStates(key), gridCorrection = createGridCorrection(setup, states);\n const outKeys = Int32Array.from(keys), values = new Float64Array(3 * keys.length);\n let lastYield = Date.now();\n for (let i = 0; i < keys.length; i++) {\n const gridKey = keys[i]!, i2 = gridKey % AHD_KEY_LEVELS, i1 = ((gridKey - i2) / AHD_KEY_LEVELS) % AHD_KEY_LEVELS, i0 = (gridKey - i1 * AHD_KEY_LEVELS - i2) / (AHD_KEY_LEVELS * AHD_KEY_LEVELS);\n const at = gridCorrection(i0, i1, i2);\n values[3 * i] = states.values[at]!; values[3 * i + 1] = states.values[at + 1]!; values[3 * i + 2] = states.values[at + 2]!;\n if (Date.now() - lastYield >= 8) { await setup.yieldControl(); setup.checkAbort(); lastYield = Date.now(); }\n }\n return { key, gridKeys: outKeys, values };\n}\n/** The state map of one setup (moved to the most recently used end). */\nfunction correctionStates(key: string): CorrectionStates {\n let states = ahdStateCache.get(key);\n if (states) ahdStateCache.delete(key);\n else {\n states = { index: new Map(), values: new Float64Array(3 * 256) };\n if (ahdStateCache.size >= AHD_SETUP_LIMIT) ahdStateCache.delete(ahdStateCache.keys().next().value!);\n }\n ahdStateCache.set(key, states);\n return states;\n}\n/**\n * Recorded terms of a one-material sample: [0, 3) the channel site variances csv; [3, 21) per candidate d and channel c the\n * linear slopes a (3 + (3d + c)·3); [21, 27) per candidate the residual terms; [27, 30) the expected-value sums; [30, 33) the\n * AHD choice terms; 33 a 1 when the AHD correction applies and [34, 37) its values.\n */\nconst MEMO_SIZE = 37;\n/** Most real pixels a display pixel's footprint may have for the per-real-pixel memo (#392); larger footprints rarely repeat a real pixel. */\nconst PIXEL_MEMO_LIMIT = 1 << 16;\n/**\n * Most real pixels a footprint may hold for the exact area mean (#393). Measured on 8-row strips of a 24 MP view (Siemens star\n * and dead leaves, one thread): the exact path matched the stratified estimator's time within run-to-run spread up to 25 real\n * pixels per display pixel and was slower above (1.2× at 36, 1.4–1.5× at 64, 1.5–2.4× at 144), because every real pixel is\n * evaluated while the stratified estimator takes a quarter of its samples per axis where the pilot finds no detail.\n */\nexport const EXACT_AREA_MEAN_MAX_PIXELS = 25;\n/** Most entries of the site ring (a native site's value, material and readout moments, kept across the display pixels of a render). */\nconst SITE_RING_LIMIT = 1 << 18;\n/** Pilot points per axis: about one per two sites of the footprint plus its reach, 4 to 16. */\nfunction pilotCount(span: number): number { return Math.max(4, Math.min(16, Math.ceil(span / 2))); }\n\n/**\n * The state computer of one setup's AHD correction (#447: shared by the render and `computeDisplayViewCorrectionStates`):\n * gridCorrection(i0, i1, i2) returns the offset of the grid state's three values in `states.values`, computing and storing\n * the state on first use. The code and its operations are those the render ran in place before.\n */\nfunction createGridCorrection(setup: DisplayViewCorrectionSetup, states: CorrectionStates): (i0: number, i1: number, i2: number) => number {\n const { seed, ahdCorrection } = setup;\n const k = Float64Array.from(setup.readout, (r) => r.perElectron), c0 = Float64Array.from(setup.readout, (r) => r.constantVariance);\n const M = setup.matrix, m00 = M[0]![0]!, m01 = M[0]![1]!, m02 = M[0]![2]!, m10 = M[1]![0]!, m11 = M[1]![1]!, m12 = M[1]![2]!, m20 = M[2]![0]!, m21 = M[2]![1]!, m22 = M[2]![2]!;\n const g0 = setup.gains[0], g1 = setup.gains[1], g2 = setup.gains[2], L = setup.clipLevel, reinhard = setup.toneCurve === \"positive-reinhard-per-channel\";\n const correction = new Float64Array(3), patch = new Float64Array(AHD_SIDE * AHD_SIDE);\n const readStd = Float64Array.from(c0, (v) => Math.sqrt(v));\n /** The offset of a grid state's three values in states.values (computed and stored on first use). */\n function gridCorrection(i0: number, i1: number, i2: number): number {\n const key = (i0 * AHD_KEY_LEVELS + i1) * AHD_KEY_LEVELS + i2, cached = states.index.get(key);\n if (cached !== undefined) return 3 * cached;\n const electrons = [i0, i1, i2].map((i, c) => portableExp2(i / AHD_KEY_STEPS - AHD_KEY_OCTAVES) / k[c]!);\n const random = createDeterministicUniformStream(deriveNativeSiteStreamSeedUint32(seed, fmixKey(i0, i1, i2), DISPLAY_VIEW_AHD_STREAM_ID));\n const sum = new Float64Array(3), draws = ahdCorrection.drawsPerState, poisson = electrons.map((e) => createPoissonSampler(e, true));\n const normal = createPortableStandardNormalPairs(random);\n for (let draw = 0; draw < draws; draw++) {\n const phase = draw & 3, roles = AHD_ROLES[phase]!;\n for (let p = 0; p < AHD_SIDE * AHD_SIDE; p++) {\n // The 16 sites the AHD steps never read are not drawn.\n if (AHD_READ[p] === 0) continue;\n const c = roles[p]!, value = k[c]! * poisson[c]!(random) + readStd[c]! * normal();\n patch[p] = value < 1 ? value : 1;\n }\n ahdDifference(phase, correction);\n for (let comp = 0; comp < 3; comp++) sum[comp] = sum[comp]! + correction[comp]! / draws;\n }\n if (states.index.size >= AHD_STATE_LIMIT) states.index.clear();\n const n = states.index.size;\n if (states.values.length < 3 * (n + 1)) { const grown = new Float64Array(2 * states.values.length); grown.set(states.values); states.values = grown; }\n states.values.set(sum, 3 * n);\n states.index.set(key, n);\n return 3 * n;\n }\n const lab = ahdCorrection.labMatrix, labWhite = Float64Array.from(lab, (row) => row[0]! + row[1]! + row[2]!);\n const l00 = lab[0]![0]!, l01 = lab[0]![1]!, l02 = lab[0]![2]!, l10 = lab[1]![0]!, l11 = lab[1]![1]!, l12 = lab[1]![2]!, l20 = lab[2]![0]!, l21 = lab[2]![1]!, l22 = lab[2]![2]!;\n const lw0 = labWhite[0]!, lw1 = labWhite[1]!, lw2 = labWhite[2]!;\n const gh = new Float64Array(49), gv = new Float64Array(49), cand = [new Float64Array(75), new Float64Array(75)], labs = [new Float64Array(75), new Float64Array(75)];\n const rgb = new Float64Array(3), rendered = new Float64Array(3), linear = new Float64Array(3);\n /** Develops one deterministic camera pixel and renders it: WB, highlight clip, colour matrix, tone curve, clip to [0, 1]. */\n function renderPixel(r: number, gr: number, b: number, out: Float64Array): void {\n const u0 = Math.min(L, g0 * r), u1 = Math.min(L, g1 * gr), u2 = Math.min(L, g2 * b);\n for (let comp = 0; comp < 3; comp++) {\n let v = comp === 0 ? m00 * u0 + m01 * u1 + m02 * u2 : comp === 1 ? m10 * u0 + m11 * u1 + m12 * u2 : m20 * u0 + m21 * u1 + m22 * u2;\n if (reinhard) v = v > 0 ? v / (1 + v) : v;\n out[comp] = v < 0 ? 0 : v > 1 ? 1 : v;\n }\n }\n /**\n * h(AHD) − ½(h(H) + h(V)) at the centre of the drawn neighbourhood (createAhdDemosaicTask's steps, centre pixel only). The\n * patch and the greens are read by flat index (patch (dy + 5)·11 + dx + 5, greens (dy + 3)·7 + dx + 3); every value is formed\n * with the same operations in the same order as the steps themselves, except that CIELAB's cube root is `portableCbrt`\n * (within 1 ulp of Math.cbrt) and squares are products, so the result has the same bits in every JavaScript engine.\n */\n function ahdDifference(phase: number, out: Float64Array): void {\n const roles = AHD_ROLES[phase]!;\n // 1. Directional greens within 3 sites.\n for (let dy = -3; dy <= 3; dy++) for (let dx = -3; dx <= 3; dx++) {\n const i = (dy + 3) * 7 + dx + 3, p = (dy + AHD_REACH) * AHD_SIDE + dx + AHD_REACH, c = patch[p]!;\n if (roles[p] === 1) { gh[i] = c; gv[i] = c; continue; }\n gh[i] = (patch[p - 1]! + patch[p + 1]!) / 2 + (2 * c - patch[p - 2]! - patch[p + 2]!) / 4;\n gv[i] = (patch[p - AHD_SIDE]! + patch[p + AHD_SIDE]!) / 2 + (2 * c - patch[p - 2 * AHD_SIDE]! - patch[p + 2 * AHD_SIDE]!) / 4;\n }\n // 2. Candidates within 2 sites; 3. their CIELAB. The four corners (±2, ±2) are not read by step 4 and are skipped.\n for (let d = 0; d < 2; d++) {\n const g = d === 0 ? gh : gv, o = cand[d]!, ol = labs[d]!;\n for (let dy = -2; dy <= 2; dy++) for (let dx = -2; dx <= 2; dx++) {\n if ((dx === -2 || dx === 2) && (dy === -2 || dy === 2)) continue;\n const i = (dy + 2) * 5 + dx + 2, p = (dy + AHD_REACH) * AHD_SIDE + dx + AHD_REACH, q = (dy + 3) * 7 + dx + 3, own = roles[p]!, gc = g[q]!;\n o[3 * i + 1] = gc;\n if (own === 1) {\n const hRole = roles[p + 1]!, vRole = 2 - hRole;\n o[3 * i + hRole] = gc + ((patch[p - 1]! - g[q - 1]!) + (patch[p + 1]! - g[q + 1]!)) / 2;\n o[3 * i + vRole] = gc + ((patch[p - AHD_SIDE]! - g[q - 7]!) + (patch[p + AHD_SIDE]! - g[q + 7]!)) / 2;\n } else {\n o[3 * i + own] = patch[p]!;\n o[3 * i + 2 - own] = gc + ((patch[p - AHD_SIDE - 1]! - g[q - 8]!) + (patch[p - AHD_SIDE + 1]! - g[q - 6]!) + (patch[p + AHD_SIDE - 1]! - g[q + 6]!) +\n (patch[p + AHD_SIDE + 1]! - g[q + 8]!)) / 4;\n }\n const R = o[3 * i]!, G = o[3 * i + 1]!, Bc = o[3 * i + 2]!;\n let tx = (l00 * R + l01 * G + l02 * Bc) / lw0, ty = (l10 * R + l11 * G + l12 * Bc) / lw1, tz = (l20 * R + l21 * G + l22 * Bc) / lw2;\n tx = tx > LAB_EPSILON ? portableCbrt(tx) : (LAB_KAPPA * tx + 16) / 116;\n ty = ty > LAB_EPSILON ? portableCbrt(ty) : (LAB_KAPPA * ty + 16) / 116;\n tz = tz > LAB_EPSILON ? portableCbrt(tz) : (LAB_KAPPA * tz + 16) / 116;\n ol[3 * i] = 116 * ty - 16; ol[3 * i + 1] = 500 * (tx - ty); ol[3 * i + 2] = 200 * (ty - tz);\n }\n }\n // 4. Homogeneity within 1 site, with the adaptive tolerances (neighbours left, right, up, down); 5. the 3 × 3 sum selects\n // the candidate.\n const h = labs[0]!, v = labs[1]!;\n let sh = 0, sv = 0;\n for (let dy = -1; dy <= 1; dy++) for (let dx = -1; dx <= 1; dx++) {\n const i = 3 * ((dy + 2) * 5 + dx + 2), j0 = i - 3, j1 = i + 3, j2 = i - 15, j3 = i + 15;\n const hL0 = Math.abs(h[i]! - h[j0]!), hL1 = Math.abs(h[i]! - h[j1]!), hL2 = Math.abs(h[i]! - h[j2]!), hL3 = Math.abs(h[i]! - h[j3]!);\n const vL0 = Math.abs(v[i]! - v[j0]!), vL1 = Math.abs(v[i]! - v[j1]!), vL2 = Math.abs(v[i]! - v[j2]!), vL3 = Math.abs(v[i]! - v[j3]!);\n const hC0 = square(h[i + 1]! - h[j0 + 1]!) + square(h[i + 2]! - h[j0 + 2]!), hC1 = square(h[i + 1]! - h[j1 + 1]!) + square(h[i + 2]! - h[j1 + 2]!);\n const hC2 = square(h[i + 1]! - h[j2 + 1]!) + square(h[i + 2]! - h[j2 + 2]!), hC3 = square(h[i + 1]! - h[j3 + 1]!) + square(h[i + 2]! - h[j3 + 2]!);\n const vC0 = square(v[i + 1]! - v[j0 + 1]!) + square(v[i + 2]! - v[j0 + 2]!), vC1 = square(v[i + 1]! - v[j1 + 1]!) + square(v[i + 2]! - v[j1 + 2]!);\n const vC2 = square(v[i + 1]! - v[j2 + 1]!) + square(v[i + 2]! - v[j2 + 2]!), vC3 = square(v[i + 1]! - v[j3 + 1]!) + square(v[i + 2]! - v[j3 + 2]!);\n const epsL = Math.min(Math.max(hL0, hL1), Math.max(vL2, vL3)), epsC = Math.min(Math.max(hC0, hC1), Math.max(vC2, vC3));\n sh += (hL0 <= epsL && hC0 <= epsC ? 1 : 0) + (hL1 <= epsL && hC1 <= epsC ? 1 : 0) + (hL2 <= epsL && hC2 <= epsC ? 1 : 0) + (hL3 <= epsL && hC3 <= epsC ? 1 : 0);\n sv += (vL0 <= epsL && vC0 <= epsC ? 1 : 0) + (vL1 <= epsL && vC1 <= epsC ? 1 : 0) + (vL2 <= epsL && vC2 <= epsC ? 1 : 0) + (vL3 <= epsL && vC3 <= epsC ? 1 : 0);\n }\n const centre = 12, a = cand[0]!, b = cand[1]!;\n for (let c = 0; c < 3; c++) rgb[c] = sh > sv ? a[3 * centre + c]! : sv > sh ? b[3 * centre + c]! : (a[3 * centre + c]! + b[3 * centre + c]!) / 2;\n renderPixel(rgb[0]!, rgb[1]!, rgb[2]!, rendered);\n renderPixel(a[3 * centre]!, a[3 * centre + 1]!, a[3 * centre + 2]!, linear);\n for (let c = 0; c < 3; c++) out[c] = rendered[c]! - linear[c]! / 2;\n renderPixel(b[3 * centre]!, b[3 * centre + 1]!, b[3 * centre + 2]!, linear);\n for (let c = 0; c < 3; c++) out[c] = out[c]! - linear[c]! / 2;\n }\n return gridCorrection;\n}\n\n/** Renders the display view (docs/DISPLAY_VIEW.md). */\nexport async function renderDisplayView(setup: DisplayViewSetup): Promise<DisplayViewRenderResult> {\n const { frameWidth, frameHeight, margin, nativeWidth, nativeHeight, viewWidth, viewHeight, region, seed, reachSites } = setup;\n const sx = frameWidth / viewWidth, sy = frameHeight / viewHeight, area = sx * sy, g = 2 / frameWidth;\n const fullK = setup.samplesPerAxis, uniformK = Math.max(1, Math.round(fullK / 4));\n // Exact area mean (#393): where a footprint holds at most EXACT_AREA_MEAN_MAX_PIXELS real pixels and at most K², every real\n // pixel it touches is evaluated once with its exact overlap weight a_j = w_j / A, so the expected value is D_P = Σ_j a_j·E[L_j]\n // with no sampling error at no more cost than sampling; coarser views keep the stratified estimator, whose cost does not\n // grow with the footprint.\n const exactView = area <= Math.min(EXACT_AREA_MEAN_MAX_PIXELS, fullK * fullK);\n const columnOverlaps = exactView ? Array.from({ length: region.width }, (_, i) => overlaps((region.x + i) * sx, (region.x + i + 1) * sx, frameWidth)) : [];\n // On the exact path a real pixel's recorded terms are shared by the 2–4 display pixels whose footprints touch it: they are\n // kept for the region's native columns in a ring of native rows (a power of two, at least twice a footprint's height plus\n // one), valid while a slot's stamp is its native row + 1.\n const exactX0 = Math.floor(region.x * sx) + margin, exactWidth = Math.min(frameWidth - 1, Math.ceil((region.x + region.width) * sx) - 1) + margin - exactX0 + 1;\n let exactRows = 1;\n while (exactRows < 2 * (Math.ceil(sy) + 1)) exactRows *= 2;\n const exactMemo = exactView && exactRows * exactWidth <= PIXEL_MEMO_LIMIT * 4;\n const exactStamp = new Int32Array(exactMemo ? exactRows * exactWidth : 0), exactRecords = new Float64Array(exactMemo ? exactRows * exactWidth * MEMO_SIZE : 0);\n const maximum = setup.bitDepth === 8 ? 255 : 65535, step = 1 / maximum;\n const pixelCount = region.width * region.height;\n const samples = setup.bitDepth === 8 ? new Uint8Array(pixelCount * 3) : new Uint16Array(pixelCount * 3);\n const expected = new Float64Array(pixelCount * 3), noiseStd = new Float64Array(pixelCount * 3);\n const columns = Array.from({ length: region.width }, (_, i) => axisSums((region.x + i) * sx, (region.x + i + 1) * sx, frameWidth, margin));\n const M = setup.matrix, m00 = M[0]![0]!, m01 = M[0]![1]!, m02 = M[0]![2]!, m10 = M[1]![0]!, m11 = M[1]![1]!, m12 = M[1]![2]!, m20 = M[2]![0]!, m21 = M[2]![1]!, m22 = M[2]![2]!;\n const g0 = setup.gains[0], g1 = setup.gains[1], g2 = setup.gains[2], L = setup.clipLevel, reinhard = setup.toneCurve === \"positive-reinhard-per-channel\";\n // Small per-render tables as Float64Arrays (#442): the same doubles as plain arrays, with one element kind for the keyed loads.\n const k = Float64Array.from(setup.readout, (r) => r.perElectron), dark = Float64Array.from(setup.readout, (r) => r.darkElectrons), c0 = Float64Array.from(setup.readout, (r) => r.constantVariance);\n // Site window: 3 × 3 for the bilinear kernels, 7 × 7 when AHD's candidates read up to 3 sites away. Slot (dy + r)·(2r + 1) + dx + r.\n const candidates = setup.candidates ?? setup.demosaic.map((phase) => [phase]);\n const reach = Math.max(1, ...candidates.flat(3).map((t) => Math.max(Math.abs(t.dx), Math.abs(t.dy)))), side = 2 * reach + 1, slotsCount = side * side;\n const slotOf = (t: DisplayViewKernelTap): number => (t.dy + reach) * side + t.dx + reach;\n const { dx: slotDx, dy: slotDy } = displayViewSlotOffsets(reach);\n // Per phase: the bilinear kernels (for the site variance of each channel), the candidates, and the slots they read.\n const phaseSlots: Int32Array[][] = [], phaseWeights: Float64Array[][] = [], phaseW2: Float64Array[] = [], phaseList: Int32Array[] = [];\n const candidateSlots: Int32Array[][][] = [], candidateWeights: Float64Array[][][] = [], candidateDense: Float64Array[][] = [], candidateList: Int32Array[][] = [];\n for (let p = 0; p < 4; p++) {\n const kernels = setup.demosaic[p]!;\n phaseSlots[p] = kernels.map((list) => Int32Array.from(list, slotOf));\n phaseWeights[p] = kernels.map((list) => Float64Array.from(list, (t) => t.weight));\n phaseW2[p] = Float64Array.from(kernels, (list) => list.reduce((sum, t) => sum + t.weight * t.weight, 0));\n candidateSlots[p] = candidates[p]!.map((candidate) => candidate.map((list) => Int32Array.from(list, slotOf)));\n candidateDense[p] = candidates[p]!.map((candidate) => { const dense = new Float64Array(3 * slotsCount); candidate.forEach((list, c) => { for (const t of list) { const i = c * slotsCount + slotOf(t); dense[i] = dense[i]! + t.weight; } }); return dense; });\n candidateWeights[p] = candidates[p]!.map((candidate) => candidate.map((list) => Float64Array.from(list, (t) => t.weight)));\n const used = new Set<number>([...phaseSlots[p]!.flatMap((a) => Array.from(a)), ...candidateSlots[p]!.flat().flatMap((a) => Array.from(a))]);\n phaseList[p] = Int32Array.from([...used].sort((a, b) => a - b));\n // The slots of phaseList (same order) where a candidate has a non-zero weight in some channel. A sum over phaseList adds\n // ±0 at the other slots, which leaves a sum that starts at +0 unchanged, so the sums below skip them.\n candidateList[p] = candidateDense[p]!.map((dense) => phaseList[p]!.filter((slot) => dense[slot] !== 0 || dense[slotsCount + slot] !== 0 || dense[2 * slotsCount + slot] !== 0));\n }\n // The same tables flat (phase·2 + candidate, ·3 + channel), read by the sample loop below.\n const { count: candidateCount, denseAt, listAt, slotsAt, weightsAt } = flatDisplayViewCandidateTables(candidateSlots, candidateWeights, candidateDense, candidateList);\n const siteElectrons = new Float64Array(slotsCount), siteMean = new Float64Array(slotsCount), siteVar = new Float64Array(slotsCount), siteThird = new Float64Array(slotsCount), siteChannel = new Int32Array(slotsCount), clip = new Float64Array(3), B = new Float64Array(4), C = new Float64Array(9);\n const cm = new Float64Array(3), cv = new Float64Array(3), csv = new Float64Array(3), bm = new Float64Array(3), bv = new Float64Array(3), bs = new Float64Array(3);\n const hm = new Float64Array(3), hv = new Float64Array(3), hs = new Float64Array(3), an = new Float64Array(9);\n const reach2 = CLIP_REACH_SIGMA * CLIP_REACH_SIGMA;\n // Site ring (#441, exact path with filled windows only): a native site's expected electrons, chart material and readout moments depend on the\n // site alone, so they are computed once per render and kept for the region's native columns (plus the reach) in a ring of\n // native rows, a power of two holding two display rows' footprints and their reach. An entry is valid while its stamp is\n // its row + 1 (negated when the window did not track materials, so a material read in one mode is never used in the other).\n // The ~27 (AHD) or ~7 (bilinear) sites a real pixel reads are copied from the ring instead of being read through the\n // signal and clipped again for each real pixel that shares them; the signal's window is still told which of its sites were\n // read (markReads), so its lookup count is the count reading them would give.\n const siteX0 = Math.max(0, Math.floor(region.x * sx) + margin - reach), siteX1 = Math.min(nativeWidth - 1, Math.ceil((region.x + region.width) * sx) - 1 + margin + reach), siteW = siteX1 - siteX0 + 1;\n let siteRows = 1;\n while (siteRows < 2 * Math.ceil(sy) + 2 + 2 * reach) siteRows *= 2;\n // Coarse (stratified) views read a few scattered real pixels per display pixel, where the ring measured slower; windows\n // without diffraction kernels read their sites from the signal's own direct ring, cheaply enough that the ring measured\n // 2–4 % slower there (Speed, #441). Both keep the per-read path below.\n const siteMask = siteRows - 1, ringCapacity = siteRows * siteW, ringUsable = exactView && ringCapacity <= SITE_RING_LIMIT;\n // Allocated at the first display pixel that uses the ring (a render whose windows never fill allocates nothing).\n let ringStamp = new Int32Array(0), ringStatStamp = ringStamp, ringMat = ringStamp, siteSlotQ = ringStamp, siteSlotStamp = ringStamp, markX = ringStamp, markY = ringStamp, markM = ringStamp;\n let ringV = new Float64Array(0), ringMean = ringV, ringVar = ringV, ringThird = ringV, markV = ringV;\n // (No closure assigns them, so they stay locals of the render loop.)\n // AHD low-signal correction: an 11 × 11 noisy neighbourhood (AHD reads up to 5 sites away) and the local AHD steps.\n const ahdCorrection = setup.ahdCorrection, windowReach = ahdCorrection ? Math.max(reach, AHD_REACH) : reach;\n const cmAverage = new Float64Array(3);\n let correctedPixels = 0;\n // The correction of a flat neighbourhood whose sites of channel c have normalized mean μ_c, on a logarithmic grid of states\n // (AHD_KEY_STEPS per octave from 2^-AHD_KEY_OCTAVES of white); each grid state is computed once with draws seeded by the state\n // alone, so it is the same in every display pixel and region, and a pixel interpolates trilinearly between the 8 states\n // around its own channel means.\n // Grid states are shared across display pixels and across calls: a state depends only on its indices and on the inputs in\n // `correctionKey` (the seed, the draws, the readout scale and noise, the homogeneity matrix and the development), so a cached\n // state is the same value the draws would give again.\n // A collect pass (#447) records the grid keys its corrected samples read instead of computing or reading states, and\n // leaves the cache untouched; its image is discarded.\n const collect = setup.ahdCollect;\n const states = ahdCorrection && !collect ? correctionStates(displayViewCorrectionKey(setup)!) : { index: new Map<number, number>(), values: new Float64Array(0) };\n const gridCorrection = ahdCorrection && !collect ? createGridCorrection(setup as DisplayViewCorrectionSetup, states) : (): number => 0;\n const interpolated = new Float64Array(3);\n const gridBase = new Float64Array(3), gridFrac = new Float64Array(3);\n function flatCorrection(m0: number, m1: number, m2: number): Float64Array {\n for (let i = 0; i < 3; i++) {\n const m = i === 0 ? m0 : i === 1 ? m1 : m2, g = (portableLog2(Math.min(1, Math.max(AHD_KEY_FLOOR, m))) + AHD_KEY_OCTAVES) * AHD_KEY_STEPS;\n const base = Math.min(Math.floor(g), AHD_KEY_OCTAVES * AHD_KEY_STEPS - 1);\n gridBase[i] = base; gridFrac[i] = g - base;\n }\n interpolated.fill(0);\n for (let corner = 0; corner < 8; corner++) {\n let weight = 1;\n for (let i = 0; i < 3; i++) weight *= (corner >> i) & 1 ? gridFrac[i]! : 1 - gridFrac[i]!;\n if (weight === 0) continue;\n const i0 = gridBase[0]! + (corner & 1), i1 = gridBase[1]! + ((corner >> 1) & 1), i2 = gridBase[2]! + ((corner >> 2) & 1);\n if (collect) { collect.add((i0 * AHD_KEY_LEVELS + i1) * AHD_KEY_LEVELS + i2); continue; }\n const at = gridCorrection(i0, i1, i2), value = states.values;\n for (let comp = 0; comp < 3; comp++) interpolated[comp] = interpolated[comp]! + weight * value[at + comp]!;\n }\n return interpolated;\n }\n /** Normalized site value of a slot: normal with mean k·e and variance k²·e + constant, clipped at the white level (1). */\n function siteStatistics(slot: number): void {\n // The channel and electrons are read from the slot arrays: a double passed to a call that is not inlined is boxed.\n const c = siteChannel[slot]!, e = siteElectrons[slot]!, kc = k[c]!, mean = kc * e, variance = kc * kc * e + c0[c]!, gap = 1 - mean;\n // Third cumulant of the normalized value: Poisson electrons have κ₃ = e (read and rounding noise add none).\n siteThird[slot] = kc * kc * kc * e;\n if (gap > 0 && gap * gap > reach2 * variance) { siteMean[slot] = mean; siteVar[slot] = variance; }\n else { upperClip(mean, variance, 1, clip); siteMean[slot] = clip[0]!; siteVar[slot] = clip[1]!; }\n }\n let siteCount = 0, sampleCount = 0, detail = 0, uniform = 0, lastYield = Date.now();\n /** Recorded terms of samples whose sites all read one chart material, by material·4 + CFA phase (layout: MEMO_SIZE). */\n const sampleMemo = new Map<number, Float64Array>(), recordScratch = new Float64Array(MEMO_SIZE);\n // Per-real-pixel memo (#392): a sample's recorded terms depend only on its real pixel (its sites' expected electrons and its\n // CFA phase), not on the display pixel or the sample, so a later sample of the same real pixel in the same display pixel\n // replays them (the same values added to the same sums in the same order, as the one-material memo does). Slots cover the\n // display pixel's footprint and are valid while their stamp equals the display pixel's generation. A replayed sample still\n // counts its sites; it is used only where every site lies in the window's site cache, where reading it again would have\n // cost no work and no scene lookup.\n let pixelStamp = new Int32Array(0), pixelRecords = new Float64Array(0), pixelGeneration = 0;\n // Pilot: the scene at a deterministic grid over each display pixel's footprint widened by the reach; a pixel is uniform when\n // every point returns the same value. Pixels next to a detailed pixel count as detailed too, so an edge that only clips a\n // footprint's corner (too thin for the grid) still gets the full samples. The grid is fixed, so the sample count is not\n // random and the estimate stays unbiased either way.\n const pilotUniform = (vx: number, vy: number): boolean => {\n const ax0 = vx * sx + margin - reachSites, ax1 = (vx + 1) * sx + margin + reachSites, ay0 = vy * sy + margin - reachSites, ay1 = (vy + 1) * sy + margin + reachSites;\n const px = pilotCount(ax1 - ax0), py = pilotCount(ay1 - ay0);\n let first = NaN;\n for (let j = 0; j < py; j++) {\n const v = -(ay0 + (j + 0.5) * (ay1 - ay0) / py - nativeHeight / 2) * g;\n for (let i = 0; i < px; i++) {\n const value = setup.signal.pilot((ax0 + (i + 0.5) * (ax1 - ax0) / px - nativeWidth / 2) * g, v);\n if (i === 0 && j === 0) first = value; else if (value !== first) return false;\n }\n }\n return true;\n };\n // Pilot flags for the region and a one-pixel ring (clipped to the view), three rows at a time.\n const ringWidth = region.width + 2, flagRows: Uint8Array[] = [];\n const pilotRow = (vy: number): Uint8Array => {\n const row = new Uint8Array(ringWidth);\n // The exact area mean needs no pilot: every pixel evaluates its whole footprint.\n if (exactView || vy < 0 || vy >= viewHeight) return row.fill(1);\n for (let i = 0; i < ringWidth; i++) { const vx = region.x - 1 + i; row[i] = vx < 0 || vx >= viewWidth ? 1 : pilotUniform(vx, vy) ? 1 : 0; }\n return row;\n };\n flagRows.push(pilotRow(region.y - 1), pilotRow(region.y));\n for (let ry = 0; ry < region.height; ry++) {\n const vy = region.y + ry, rows = axisSums(vy * sy, (vy + 1) * sy, frameHeight, margin), rowOverlaps = exactView ? overlaps(vy * sy, (vy + 1) * sy, frameHeight) : undefined;\n flagRows.push(pilotRow(vy + 1));\n if (flagRows.length > 3) flagRows.shift();\n for (let rx = 0; rx < region.width; rx++) {\n const vx = region.x + rx, index = vy * viewWidth + vx;\n footprintWeights(columns[rx]!, rows, area, B);\n let same = true;\n for (let j = 0; j < 3 && same; j++) for (let i = rx; i <= rx + 2; i++) if (flagRows[j]![i] === 0) { same = false; break; }\n const K = same ? uniformK : fullK, Q = K * K;\n // On the exact path every pixel counts as detailed (its whole footprint is evaluated).\n if (exactView) detail++; else if (same) uniform++; else detail++;\n const cols = exactView ? columnOverlaps[rx]! : undefined, nx = cols ? cols.w.length : 0, sampleTotal = exactView ? nx * rowOverlaps!.w.length : Q;\n const wx0 = Math.floor(vx * sx) + margin - windowReach, wy0 = Math.floor(vy * sy) + margin - windowReach;\n const wx1 = Math.ceil((vx + 1) * sx) + margin + windowReach, wy1 = Math.ceil((vy + 1) * sy) + margin + windowReach;\n setup.signal.window(wx0, wy0, wx1, wy1);\n // The jitter stream is only drawn from by the stratified estimator; the exact path reads no jitter.\n const jitter = exactView ? undefined : createDeterministicUniformStream(deriveNativeSiteStreamSeedUint32(seed, index, DISPLAY_VIEW_JITTER_STREAM_ID)), tracking = setup.signal.tracksMaterial;\n const ringOn = ringUsable && setup.signal.marksReads, ringSign = tracking ? 1 : -1;\n if (ringOn && ringStamp.length === 0) {\n ringStamp = new Int32Array(ringCapacity); ringStatStamp = new Int32Array(ringCapacity); ringMat = new Int32Array(ringCapacity);\n ringV = new Float64Array(ringCapacity); ringMean = new Float64Array(ringCapacity); ringVar = new Float64Array(ringCapacity); ringThird = new Float64Array(ringCapacity);\n siteSlotQ = new Int32Array(slotsCount); siteSlotStamp = new Int32Array(slotsCount);\n markX = new Int32Array(slotsCount); markY = new Int32Array(slotsCount); markV = new Float64Array(slotsCount); markM = new Int32Array(slotsCount);\n }\n const mx0 = Math.floor(vx * sx) + margin, my0 = Math.floor(vy * sy) + margin;\n const mw = Math.min(frameWidth - 1, Math.ceil((vx + 1) * sx)) + margin - mx0 + 1, mh = Math.min(frameHeight - 1, Math.ceil((vy + 1) * sy)) + margin - my0 + 1;\n const pixelMemo = !exactView && setup.signal.cachesSites && mw * mh <= PIXEL_MEMO_LIMIT;\n if (pixelMemo) {\n if (pixelStamp.length < mw * mh) { pixelStamp = new Int32Array(mw * mh); pixelRecords = new Float64Array(mw * mh * MEMO_SIZE); pixelGeneration = 0; }\n pixelGeneration++;\n }\n let s0 = 0, s1 = 0, s2 = 0, c00 = 0, c01 = 0, c02 = 0, c11 = 0, c12 = 0, c22 = 0, r0 = 0, r1 = 0, r2 = 0, pixelVariance = 0, corrected = false;\n for (let n = 0; n < sampleTotal; n++) {\n // A sample's weights: 1 for the stratified estimator (its sums are divided by Q below); a_j for the expected value and\n // linear covariance and a_j² for the independent residual on the exact path. Multiplying by 1 leaves every value's bits.\n let x: number, y: number, wE = 1, wR = 1;\n if (cols) {\n const i = n % nx, j = (n - i) / nx, aj = cols.w[i]! * rowOverlaps!.w[j]! / area;\n x = cols.first + i + margin; y = rowOverlaps!.first + j + margin; wE = aj; wR = aj * aj;\n } else {\n const a = n % K, b = (n - a) / K;\n const fx = (vx + (a + jitter!.next()) / K) * sx, fy = (vy + (b + jitter!.next()) / K) * sy;\n x = Math.min(frameWidth - 1, Math.floor(fx)) + margin; y = Math.min(frameHeight - 1, Math.floor(fy)) + margin;\n }\n const phase = (y & 1) * 2 + (x & 1), list = phaseList[phase]!;\n let material = -2, statistics = false;\n const px = x - mx0, py = y - my0;\n const inside = x >= reach && y >= reach && x + reach < nativeWidth && y + reach < nativeHeight;\n const stamps = exactMemo ? exactStamp : pixelStamp, records = exactMemo ? exactRecords : pixelRecords, stamp = exactMemo ? y + 1 : pixelGeneration;\n const pk = exactMemo ? (inside && x >= exactX0 && x - exactX0 < exactWidth ? (y & (exactRows - 1)) * exactWidth + x - exactX0 : -1)\n : pixelMemo && px >= 0 && py >= 0 && px < mw && py < mh && inside ? py * mw + px : -1;\n let memo: Float64Array | undefined, mo = 0;\n if (pk >= 0 && stamps[pk] === stamp) { memo = records; mo = pk * MEMO_SIZE; siteCount += list.length; }\n // The expected electrons of the sites the demosaic reads (sites outside the raster, at mirror borders, are read\n // reflect-101); where the signal tracks it, whether they all read one chart material, with the statistics below only\n // when the sample is not replayed; otherwise the statistics at once.\n if (!memo && ringOn) {\n let marks = 0;\n for (let li = 0; li < list.length; li++) {\n const slot = list[li]!;\n siteCount++;\n let sxs = x + slotDx[slot]!, sys = y + slotDy[slot]!;\n if (sxs < 0) sxs = -sxs; else if (sxs >= nativeWidth) sxs = 2 * nativeWidth - 2 - sxs;\n if (sys < 0) sys = -sys; else if (sys >= nativeHeight) sys = 2 * nativeHeight - 2 - sys;\n const c = (sys & 1) === 0 ? ((sxs & 1) === 0 ? 0 : 1) : ((sxs & 1) === 0 ? 1 : 2);\n siteChannel[slot] = c;\n // The site's ring entry, for a site inside the ring's columns and the signal's window (a site outside the window\n // is read through the signal, which counts it as it counts any read outside its window).\n const rowStamp = ringSign * (sys + 1), q = ringOn && sxs >= siteX0 && sxs <= siteX1 && sxs >= wx0 && sxs < wx1 && sys >= wy0 && sys < wy1 ? (sys & siteMask) * siteW + sxs - siteX0 : -1;\n siteSlotQ[slot] = q; siteSlotStamp[slot] = rowStamp;\n let e: number;\n if (q >= 0 && ringStamp[q] === rowStamp) {\n // The value and material the signal returned for this site; the window is told it was read (markReads below).\n const v = ringV[q]!, own = ringMat[q]!;\n e = v + dark[c]!;\n markX[marks] = sxs; markY[marks] = sys; markV[marks] = v; markM[marks] = own; marks++;\n if (tracking) { siteElectrons[slot] = e; material = material === -2 || material === own ? own : -1; continue; }\n } else {\n const v = setup.signal.site(sxs, sys), own = tracking ? setup.signal.uniformMaterial : -1;\n e = v + dark[c]!;\n if (q >= 0) { ringStamp[q] = rowStamp; ringV[q] = v; ringMat[q] = own; ringStatStamp[q] = 0; }\n if (tracking) { siteElectrons[slot] = e; material = material === -2 || material === own ? own : -1; continue; }\n }\n if (q >= 0 && ringStatStamp[q] === rowStamp) { siteMean[slot] = ringMean[q]!; siteVar[slot] = ringVar[q]!; siteThird[slot] = ringThird[q]!; continue; }\n // As siteStatistics, written out here for the untracked (Speed) path.\n const kc = k[c]!, mean = kc * e, variance = kc * kc * e + c0[c]!, gap = 1 - mean, third = kc * kc * kc * e;\n let sm: number, sv: number;\n if (gap > 0 && gap * gap > reach2 * variance) { sm = mean; sv = variance; }\n else { upperClip(mean, variance, 1, clip); sm = clip[0]!; sv = clip[1]!; }\n siteMean[slot] = sm; siteVar[slot] = sv; siteThird[slot] = third;\n if (q >= 0) { ringStatStamp[q] = rowStamp; ringMean[q] = sm; ringVar[q] = sv; ringThird[q] = third; }\n }\n if (marks > 0) setup.signal.markReads(markX, markY, markV, markM, marks);\n } else if (!memo) for (let li = 0; li < list.length; li++) {\n // Without the ring (coarse views, windows without diffraction kernels or with lazy caches): each site through the signal.\n const slot = list[li]!;\n siteCount++;\n let sxs = x + slotDx[slot]!, sys = y + slotDy[slot]!;\n if (sxs < 0) sxs = -sxs; else if (sxs >= nativeWidth) sxs = 2 * nativeWidth - 2 - sxs;\n if (sys < 0) sys = -sys; else if (sys >= nativeHeight) sys = 2 * nativeHeight - 2 - sys;\n const c = (sys & 1) === 0 ? ((sxs & 1) === 0 ? 0 : 1) : ((sxs & 1) === 0 ? 1 : 2);\n const e = setup.signal.site(sxs, sys) + dark[c]!;\n siteChannel[slot] = c;\n if (tracking && !statistics) {\n siteElectrons[slot] = e; const own = setup.signal.uniformMaterial; material = material === -2 || material === own ? own : -1;\n if (material >= 0) continue;\n // The first site of a second material: the sample is not replayed, so the statistics are taken now, for the earlier\n // sites and inline from this site on, instead of in a second pass (#444; each site's statistics depend on its own\n // slot only, so the order leaves every value's bits).\n statistics = true;\n for (let lj = 0; lj < li; lj++) siteStatistics(list[lj]!);\n }\n // As siteStatistics, written out here for the untracked (Speed) path.\n const kc = k[c]!, mean = kc * e, variance = kc * kc * e + c0[c]!, gap = 1 - mean;\n siteThird[slot] = kc * kc * kc * e;\n if (gap > 0 && gap * gap > reach2 * variance) { siteMean[slot] = mean; siteVar[slot] = variance; }\n else { upperClip(mean, variance, 1, clip); siteMean[slot] = clip[0]!; siteVar[slot] = clip[1]!; }\n }\n if (!tracking) material = -1;\n // A sample whose sites all read one chart material only has the statistics of every other such sample of that material\n // and CFA phase: replay its recorded terms (the same values added to the same sums in the same order).\n const memoKey = !memo && material >= 0 ? material * 4 + phase : -1;\n if (memoKey >= 0) {\n memo = sampleMemo.get(memoKey);\n if (memo && pk >= 0) { records.set(memo, pk * MEMO_SIZE); stamps[pk] = stamp; }\n }\n const count = candidateCount, share = 1 / count;\n if (memo) {\n for (let d = 0; d < count; d++) {\n for (let c = 0; c < 3; c++) {\n const o = mo + 3 + (d * 3 + c) * 3, a0 = memo[o]!, a1 = memo[o + 1]!, a2 = memo[o + 2]!, wgt = wE * share * B[c]! * memo[mo + c]!;\n c00 += wgt * a0 * a0; c01 += wgt * a0 * a1; c02 += wgt * a0 * a2; c11 += wgt * a1 * a1; c12 += wgt * a1 * a2; c22 += wgt * a2 * a2;\n }\n r0 += wR * memo[mo + 21 + d * 3]!; r1 += wR * memo[mo + 22 + d * 3]!; r2 += wR * memo[mo + 23 + d * 3]!;\n }\n s0 += wE * memo[mo + 27]!; s1 += wE * memo[mo + 28]!; s2 += wE * memo[mo + 29]!;\n if (count === 2) { r0 += wR * memo[mo + 30]!; r1 += wR * memo[mo + 31]!; r2 += wR * memo[mo + 32]!; }\n if (memo[mo + 33] === 1) { s0 += wE * memo[mo + 34]!; s1 += wE * memo[mo + 35]!; s2 += wE * memo[mo + 36]!; corrected = true; }\n continue;\n }\n // The terms are written where they are kept: the real pixel's memo slot, or (for the first sample of a one-material key)\n // a scratch buffer that is then copied; no typed-array view per sample.\n const rt = memoKey >= 0 ? recordScratch : pk >= 0 ? records : undefined, ro = memoKey < 0 && pk >= 0 ? pk * MEMO_SIZE : 0;\n // Every field of the record (MEMO_SIZE layout) that the propagation below does not write for this sample is zeroed, as a\n // fill of the whole record would leave it. Always written: [0, 3), [27, 30) and candidate 0's [3, 12) and [21, 24); with\n // two candidates also candidate 1's [12, 21) and [24, 27) and the choice terms [30, 33); [33, 37) only with the AHD\n // correction.\n if (rt) {\n if (count === 1) { for (let o = 12; o < 21; o++) rt[ro + o] = 0; rt[ro + 24] = 0; rt[ro + 25] = 0; rt[ro + 26] = 0; rt[ro + 30] = 0; rt[ro + 31] = 0; rt[ro + 32] = 0; }\n rt[ro + 33] = 0; rt[ro + 34] = 0; rt[ro + 35] = 0; rt[ro + 36] = 0;\n }\n if (tracking && !ringOn) { if (!statistics) for (let li = 0; li < list.length; li++) siteStatistics(list[li]!); }\n else if (tracking) for (let li = 0; li < list.length; li++) {\n const slot = list[li]!, q = siteSlotQ[slot]!, rowStamp = siteSlotStamp[slot]!;\n if (q >= 0 && ringStatStamp[q] === rowStamp) { siteMean[slot] = ringMean[q]!; siteVar[slot] = ringVar[q]!; siteThird[slot] = ringThird[q]!; continue; }\n siteStatistics(slot);\n if (q >= 0) { ringStatStamp[q] = rowStamp; ringMean[q] = siteMean[slot]!; ringVar[q] = siteVar[slot]!; ringThird[q] = siteThird[slot]!; }\n }\n // Site variance of each channel through the bilinear kernels (for B_c), then the demosaic's own pixel statistics: the\n // mean and covariance of its camera channels, averaged over its candidates (AHD picks one per pixel).\n const slots = phaseSlots[phase]!, weights = phaseWeights[phase]!, w2 = phaseW2[phase]!;\n for (let c = 0; c < 3; c++) {\n const sl = slots[c]!, wt = weights[c]!;\n let variance = 0;\n for (let t = 0; t < sl.length; t++) variance += wt[t]! * wt[t]! * siteVar[sl[t]!]!;\n csv[c] = variance / w2[c]!;\n }\n // Each candidate of the demosaic (one for bilinear; AHD's horizontal and vertical ones, of which AHD picks one per pixel)\n // is propagated on its own: camera-channel mean and covariance, white balance and highlight clip, colour matrix and\n // rendering; the pixel's statistics are their average.\n let e0 = 0, e1 = 0, e2 = 0;\n for (let d = 0; d < count; d++) {\n for (let c = 0; c < 3; c++) {\n const sl = slotsAt[(phase * 2 + d) * 3 + c]!, wt = weightsAt[(phase * 2 + d) * 3 + c]!;\n let mean = 0;\n for (let t = 0; t < sl.length; t++) mean += wt[t]! * siteMean[sl[t]!]!;\n cm[c] = mean;\n cmAverage[c] = (d === 0 ? 0 : cmAverage[c]!) + mean * share;\n }\n // Covariance of channels i, j: Σ over the sites of w_i·w_j·Var(site), with the kernels as dense weights over the window.\n const dense = denseAt[phase * 2 + d]!, list = listAt[phase * 2 + d]!;\n let v00 = 0, v01 = 0, v02 = 0, v11 = 0, v12 = 0, v22 = 0;\n for (let li = 0; li < list.length; li++) {\n const slot = list[li]!, v = siteVar[slot]!, w0 = dense[slot]!, w1 = dense[slotsCount + slot]!, w2 = dense[2 * slotsCount + slot]!;\n v00 += w0 * w0 * v; v01 += w0 * w1 * v; v02 += w0 * w2 * v; v11 += w1 * w1 * v; v12 += w1 * w2 * v; v22 += w2 * w2 * v;\n }\n C[0] = v00; C[1] = v01; C[2] = v02; C[3] = v01; C[4] = v11; C[5] = v12; C[6] = v02; C[7] = v12; C[8] = v22;\n // White balance and the highlight clip at the smallest gain (per channel; covariances scaled by the expected slopes).\n for (let c = 0; c < 3; c++) {\n const mean = cm[c]!, variance = C[c * 4]!;\n cv[c] = variance;\n const gc = c === 0 ? g0 : c === 1 ? g1 : g2, um = gc * mean, uv = gc * gc * variance, gap = L - um;\n if (gap > 0 && gap * gap > reach2 * uv) { bm[c] = um; bv[c] = uv; bs[c] = gc; }\n else { upperClip(um, uv, L, clip); bm[c] = clip[0]!; bv[c] = clip[1]!; bs[c] = gc * clip[2]!; }\n }\n // Colour matrix, then the rendering of each component (tone curve, clip to [0, 1]).\n for (let comp = 0; comp < 3; comp++) {\n const r0m = comp === 0 ? m00 : comp === 1 ? m10 : m20, r1m = comp === 0 ? m01 : comp === 1 ? m11 : m21, r2m = comp === 0 ? m02 : comp === 1 ? m12 : m22;\n const mean = r0m * bm[0]! + r1m * bm[1]! + r2m * bm[2]!;\n const variance = r0m * r0m * bv[0]! + r1m * r1m * bv[1]! + r2m * r2m * bv[2]! +\n 2 * (r0m * r1m * bs[0]! * bs[1]! * C[1]! + r0m * r2m * bs[0]! * bs[2]! * C[2]! + r1m * r2m * bs[1]! * bs[2]! * C[5]!);\n if (!reinhard && mean > 0 && mean < 1 && mean * mean > reach2 * variance && (1 - mean) * (1 - mean) > reach2 * variance) { hm[comp] = mean; hv[comp] = variance; hs[comp] = 1; }\n else if (reinhard) { reinhardMoments(mean, variance, clip); hm[comp] = clip[0]!; hv[comp] = clip[1]!; hs[comp] = clip[2]!; }\n else {\n // The component is a linear combination of the sites: κ₃ = Σ (Σ_c M·Γ_c·w_c,site)³·κ₃(site).\n const dense = denseAt[phase * 2 + d]!, list = listAt[phase * 2 + d]!;\n let third = 0;\n for (let li = 0; li < list.length; li++) {\n const slot = list[li]!, coefficient = r0m * bs[0]! * dense[slot]! + r1m * bs[1]! * dense[slotsCount + slot]! + r2m * bs[2]! * dense[2 * slotsCount + slot]!;\n third += coefficient * coefficient * coefficient * siteThird[slot]!;\n }\n unitClip(mean, variance, clip, variance > 0 ? third / (variance * Math.sqrt(variance)) : 0);\n hm[comp] = clip[0]!; hv[comp] = clip[1]!; hs[comp] = clip[2]!;\n }\n }\n e0 += share * hm[0]!; e1 += share * hm[1]!; e2 += share * hm[2]!;\n // Linear (Stein) part: a_c = J ∘ M[:, c]·Γ_c, accumulated with B_c·σ_c² (site variance of channel c); the pixel's own\n // linear variance (aᵀ·C·a, full channel covariance) for the residual.\n let l0 = 0, l1 = 0, l2 = 0;\n for (let c = 0; c < 3; c++) {\n const a0 = hs[0]! * (c === 0 ? m00 : c === 1 ? m01 : m02) * bs[c]!, a1 = hs[1]! * (c === 0 ? m10 : c === 1 ? m11 : m12) * bs[c]!, a2 = hs[2]! * (c === 0 ? m20 : c === 1 ? m21 : m22) * bs[c]!;\n const wgt = wE * share * B[c]! * csv[c]!;\n c00 += wgt * a0 * a0; c01 += wgt * a0 * a1; c02 += wgt * a0 * a2; c11 += wgt * a1 * a1; c12 += wgt * a1 * a2; c22 += wgt * a2 * a2;\n an[c] = a0; an[3 + c] = a1; an[6 + c] = a2;\n if (rt) { const o = 3 + (d * 3 + c) * 3; rt[ro + o] = a0; rt[ro + o + 1] = a1; rt[ro + o + 2] = a2; }\n }\n for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) { const cij = C[i * 3 + j]!; l0 += an[i]! * an[j]! * cij; l1 += an[3 + i]! * an[3 + j]! * cij; l2 += an[6 + i]! * an[6 + j]! * cij; }\n const t0 = share * Math.max(0, hv[0]! - l0), t1 = share * Math.max(0, hv[1]! - l1), t2 = share * Math.max(0, hv[2]! - l2);\n r0 += wR * t0; r1 += wR * t1; r2 += wR * t2;\n if (rt) { rt[ro + 21 + d * 3] = t0; rt[ro + 22 + d * 3] = t1; rt[ro + 23 + d * 3] = t2; }\n // Two-argument maxima (inlined; the same value as one four-argument Math.max, which V8 calls with boxed arguments).\n pixelVariance = Math.max(Math.max(pixelVariance, hv[0]!), Math.max(hv[1]!, hv[2]!));\n }\n s0 += wE * e0; s1 += wE * e1; s2 += wE * e2;\n if (rt) { rt[ro + 0] = csv[0]!; rt[ro + 1] = csv[1]!; rt[ro + 2] = csv[2]!; rt[ro + 27] = e0; rt[ro + 28] = e1; rt[ro + 29] = e2; }\n if (count === 2) {\n // AHD's per-pixel choice between the candidates adds independent variance: with a noise-driven choice each pixel\n // deviates from the candidates' average by ±½(H − V), variance ¼·Var(H − V) (linear in the sites, at the last\n // candidate's slopes).\n const dh = denseAt[phase * 2]!, dv = denseAt[phase * 2 + 1]!, list = phaseList[phase]!;\n let x0 = 0, x1 = 0, x2 = 0;\n for (let li = 0; li < list.length; li++) {\n const slot = list[li]!, d0 = bs[0]! * (dh[slot]! - dv[slot]!), d1 = bs[1]! * (dh[slotsCount + slot]! - dv[slotsCount + slot]!), d2 = bs[2]! * (dh[2 * slotsCount + slot]! - dv[2 * slotsCount + slot]!);\n const v = siteVar[slot]!, a = hs[0]! * (m00 * d0 + m01 * d1 + m02 * d2), b = hs[1]! * (m10 * d0 + m11 * d1 + m12 * d2), c = hs[2]! * (m20 * d0 + m21 * d1 + m22 * d2);\n x0 += a * a * v; x1 += b * b * v; x2 += c * c * v;\n }\n r0 += wR * (x0 / 4); r1 += wR * (x1 / 4); r2 += wR * (x2 / 4);\n if (rt) { rt[ro + 30] = x0 / 4; rt[ro + 31] = x1 / 4; rt[ro + 32] = x2 / 4; }\n }\n // AHD at low signal: its homogeneity choice reacts to the noise, which the linear candidates cannot express. A sample\n // whose pixel noise exceeds the threshold adds the correction of a flat neighbourhood with its channel means, from the\n // shared grid of states (flatCorrection): there AHD and the two linear candidates run on the same drawn neighbourhoods\n // and the difference of the rendered results is averaged, a control variate whose expectation is the AHD bias\n // (docs/DISPLAY_VIEW.md).\n if (ahdCorrection && pixelVariance > ahdCorrection.thresholdVariance) {\n const fix = flatCorrection(cmAverage[0]!, cmAverage[1]!, cmAverage[2]!);\n s0 += wE * fix[0]!; s1 += wE * fix[1]!; s2 += wE * fix[2]!; corrected = true;\n if (rt) { rt[ro + 33] = 1; rt[ro + 34] = fix[0]!; rt[ro + 35] = fix[1]!; rt[ro + 36] = fix[2]!; }\n }\n if (rt && memoKey >= 0) { sampleMemo.set(memoKey, rt.slice()); if (pk >= 0) records.set(rt, pk * MEMO_SIZE); }\n if (pk >= 0) stamps[pk] = stamp;\n pixelVariance = 0;\n }\n sampleCount += sampleTotal;\n if (corrected) correctedPixels++;\n // Stratified: means over Q samples. Exact: the weights already sum to 1 (Σ a_j = 1) and the residual carries Σ a_j²·r_j.\n const Qd = exactView ? 1 : Q, mean0 = s0 / Qd, mean1 = s1 / Qd, mean2 = s2 / Qd, pixels = B[3]!;\n // The real pixels' output rounding (Δ²/12 in the encoded domain), mapped to linear light at the mean.\n const q0 = quantizationVariance(mean0, step), q1 = quantizationVariance(mean1, step), q2 = quantizationVariance(mean2, step);\n // Covariance in linear light: the linear part plus the independent per-pixel residuals and rounding.\n const v00 = exactView ? c00 + r0 + pixels * q0 : c00 / Q + pixels * (r0 / Q + q0), v01 = c01 / Qd, v02 = c02 / Qd,\n v11 = exactView ? c11 + r1 + pixels * q1 : c11 / Q + pixels * (r1 / Q + q1), v12 = c12 / Qd, v22 = exactView ? c22 + r2 + pixels * q2 : c22 / Q + pixels * (r2 / Q + q2);\n const noise = createDeterministicUniformStream(deriveNativeSiteStreamSeedUint32(seed, index, DISPLAY_VIEW_NOISE_STREAM_ID));\n const z0 = samplePortableStandardNormal(noise), z1 = samplePortableStandardNormal(noise), z2 = samplePortableStandardNormal(noise);\n // Cholesky factor of the 3 × 3 covariance (positive semidefinite; tiny negative pivots are treated as 0).\n const l00 = Math.sqrt(Math.max(0, v00)), l10 = l00 > 0 ? v01 / l00 : 0, l20 = l00 > 0 ? v02 / l00 : 0;\n const l11 = Math.sqrt(Math.max(0, v11 - l10 * l10)), l21 = l11 > 0 ? (v12 - l20 * l10) / l11 : 0;\n const l22 = Math.sqrt(Math.max(0, v22 - l20 * l20 - l21 * l21));\n const o = (ry * region.width + rx) * 3;\n // The drawn value is clipped to [0, 1] like any light level; where the noise reaches a bound, the normal's centre is\n // moved so that the clipped draw keeps the expected value (the mean of real pixels in [0, 1] is in [0, 1] already).\n const n0 = clipCentre(mean0, v00) + l00 * z0, n1 = clipCentre(mean1, v11) + l10 * z0 + l11 * z1, n2 = clipCentre(mean2, v22) + l20 * z0 + l21 * z1 + l22 * z2;\n samples[o] = Math.round(encodeSrgbComponentPortable(n0 < 0 ? 0 : n0 > 1 ? 1 : n0) * maximum);\n samples[o + 1] = Math.round(encodeSrgbComponentPortable(n1 < 0 ? 0 : n1 > 1 ? 1 : n1) * maximum);\n samples[o + 2] = Math.round(encodeSrgbComponentPortable(n2 < 0 ? 0 : n2 > 1 ? 1 : n2) * maximum);\n expected[o] = mean0; expected[o + 1] = mean1; expected[o + 2] = mean2;\n noiseStd[o] = Math.sqrt(Math.max(0, v00)); noiseStd[o + 1] = Math.sqrt(Math.max(0, v11)); noiseStd[o + 2] = Math.sqrt(Math.max(0, v22));\n // The clock is read every 16 display pixels and at the end of each row (yield timing never changes the output).\n if (((rx & 15) === 15 || rx === region.width - 1) && Date.now() - lastYield >= 8) { await setup.yieldControl(); setup.checkAbort(); lastYield = Date.now(); }\n }\n }\n return { samples, expected, noiseStd, sampleCount, siteCount, detailPixelCount: detail, uniformPixelCount: uniform, ahdCorrectedPixelCount: correctedPixels,\n estimation: exactView ? \"exact-area-mean\" : \"stratified-monte-carlo\" };\n}\n\n/**\n * The centre c of a normal of variance v whose clip to [0, 1] has mean `target` (bisection; c = target when the noise does\n * not reach a bound, or when the target lies outside (0, 1)).\n */\nexport function clipCentre(target: number, v: number): number {\n if (!(v > 0) || !(target > 0 && target < 1)) return target;\n const s = Math.sqrt(v);\n if (target > 4 * s && 1 - target > 4 * s) return target;\n const moments = new Float64Array(3);\n let lo = target - 10 * s, hi = target + 10 * s;\n for (let i = 0; i < 60; i++) { const mid = (lo + hi) / 2; unitClip(mid, v, moments); if (moments[0]! < target) lo = mid; else hi = mid; }\n return (lo + hi) / 2;\n}\n/** Variance in linear light of rounding an sRGB-encoded value to steps of `step`: (dEOTF/de)²·step²/12 at the encoded mean. */\nexport function quantizationVariance(linear: number, step: number): number {\n const e = encodeSrgbComponentPortable(linear < 0 ? 0 : linear > 1 ? 1 : linear), slope = e <= 0.04045 ? 1 / 12.92 : 2.4 / 1.055 * portablePow((e + 0.055) / 1.055, 1.4);\n return slope * slope * step * step / 12;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"display-view.js","sourceRoot":"","sources":["../../src/facade/display-view.ts"],"names":[],"mappings":"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,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;gBACnJ,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;gBACnJ,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;gBACnJ,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;gBACnJ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gBACvH,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChK,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CA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CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;QACrK,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;QACnJ,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;QACnJ,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;QACnJ,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;QACnJ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACvH,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAA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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Display view (`simulateDisplayView`): the image that the real full-resolution capture of a `simulateCapture`\n * request would give after it is resized to a small display size by area averaging in linear light, computed\n * without rendering the full-resolution capture. Internal; the public entry point and the renderer that sets it up live in\n * `simulate-display-view.ts`, the option parsing in `simulate-capture.ts`. The design and its error analysis are in docs/DISPLAY_VIEW.md.\n *\n * Definition (the reference this module estimates): let L_j be the linear-light value of output pixel j of the\n * real capture (its sRGB samples decoded with the sRGB EOTF). Display pixel P covers the rectangle F_P of\n * real output pixels [P_x·s_x, (P_x + 1)·s_x) × [P_y·s_y, (P_y + 1)·s_y), s = frame size ÷ view size, and\n * D_P = Σ_j (w_j / A) · L_j,\n * w_j = the area of pixel j inside F_P, A = s_x·s_y (the \"area\" or box resampling filter). D_P is then\n * sRGB-encoded and rounded.\n *\n * Estimation, per display pixel:\n * 1. Expected value. The expectation E[D_P] = Σ_j (w_j/A)·E[L_j] is estimated by stratified Monte Carlo over the\n * footprint: K × K strata, one uniformly jittered point in each (deterministic, seeded by the capture seed and the\n * display pixel index); the real pixel containing the point is the sample. A point drawn uniformly in F_P lands in\n * pixel j with probability w_j/A, so the sample mean is unbiased for E[D_P]. For each sampled pixel the module\n * computes, at the real pitch, the exact expected electrons of the real sites its demosaic reads (the scene sampled\n * at those sites, through the declared pixel aperture, anti-aliasing filter and diffraction kernels, so the real\n * colour mosaic and its aliasing are kept), the moments of each site's normalized RAW value (shot, dark, read and\n * ADC noise; clipped at the white level), the demosaic's linear kernels, the development (white balance,\n * highlight clip, colour matrix) and the output rendering (tone curve, clip to [0, 1]). The non-linear steps act\n * on the pixel's own distribution, approximated as normal with the propagated mean and variance, so a clipped\n * noise floor or a clipped highlight moves the mean as it does in the real image.\n * 2. Noise. D_P − E[D_P] is a weighted sum of the independent site noises. Linearizing the non-linear steps with\n * their expected slopes (Stein's lemma), its covariance is A·Γ·diag(B_c·σ_c²)·Γᵀ·Aᵀ, where σ_c² is the site\n * variance of CFA channel c and B_c = Σ_k β_k² with β_k the total weight of site k in the display pixel after\n * demosaicing and averaging. B_c holds the demosaic correlation exactly for the linear kernels and is computed in\n * closed form from the footprint. The rest of each pixel's variance that the linearization misses (clipping) is\n * added as independent per-pixel variance, weighted by Σ_j (w_j/A)², as is the output quantization (Δ²/12).\n * One correlated normal draw per display pixel (the sum of hundreds of independent site noises) gives the noise.\n */\n\nimport { createDeterministicUniformStream, createPortableStandardNormalPairs, deriveNativeSiteStreamSeedUint32, fmix32, samplePortableStandardNormal } from \"../sensor/stochastic-seed.js\";\nimport { encodeSrgbComponentPortable } from \"../color/srgb-transfer.js\";\nimport { createPoissonSampler } from \"../sensor/raw-readout.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { portableCbrt, portableCosTwoPi, portableExp, portableExp2, portableLog2, portablePow } from \"../core/portable-math.js\";\n\n/** Stream IDs of the display view's two seeded streams, distinct from the native charge (0) and read-noise (1) streams. */\nexport const DISPLAY_VIEW_JITTER_STREAM_ID = 32 as const;\nexport const DISPLAY_VIEW_NOISE_STREAM_ID = 33 as const;\nexport const DISPLAY_VIEW_AHD_STREAM_ID = 34 as const;\n\nexport { createDisplayViewExpectedSignal, type DisplayViewExpectedSignal, type DisplayViewExpectedSignalInput, type DisplayViewQueryOffset,\n type DisplayViewScene } from \"./expected-signal.js\";\nimport type { DisplayViewExpectedSignal, DisplayViewExpectedSignalInput } from \"./expected-signal.js\";\nimport type { ResolvedChartScene } from \"./chart-scenes.js\";\nimport type { ResolvedChartMaterialLayers } from \"./chart-material-layers.js\";\n\n/**\n * #478: what a GPU renderer needs beyond the CPU setup, which reads the scene only through `signal`: the expected signal's\n * input (query offsets and points, the materials table, the channel responses) and the resolved chart (null for caller\n * scenes), from which it builds its material lookup. The CPU renderer ignores it.\n */\nexport interface DisplayViewGpuSetup {\n signalInput: DisplayViewExpectedSignalInput;\n /** The resolved chart (portable), or null for a caller scene or a declared `material-layers` scene. */\n chart: ResolvedChartScene | null;\n /** #491: the declared `material-layers` scene (its `chart` is the chart under the layers), or null. */\n layers?: ResolvedChartMaterialLayers | null;\n /**\n * #491: a fixed-size chart's placement (`chartSize`): chart-local frame units per frame unit (the metres per frame unit over the\n * chart's half width) and the chart's aspect; outside |cu| ≤ 1, |cv| ≤ aspect the material is the surround, the materials' last entry.\n */\n placement?: { chartUnitsPerFrameUnit: number; aspect: number } | null;\n /**\n * #492: the defocus disc's radius in sites when the expected signal's kernels carry it (`lens.defocus` out of focus); absent in\n * focus. The GPU Quality site pass then sums each site's taps in blocks (src/gpu/display-view-quality-gpu.ts).\n */\n defocusRadius?: number;\n}\n// ---------------------------------------------------------------------------------------------------------------\n// Normal-distribution helpers.\n/** Standard normal density. */\nfunction phi(z: number): number { return 0.3989422804014327 * portableExp(-0.5 * z * z); }\n/**\n * Standard normal distribution function, Φ(z) = 1 − Q(z), with Q from the rational approximation 26.2.17 of\n * Abramowitz & Stegun, Handbook of Mathematical Functions (NBS AMS 55, 1964; free, US government work):\n * absolute error below 7.5e-8.\n */\nfunction bigPhi(z: number): number {\n const x = Math.abs(z), t = 1 / (1 + 0.2316419 * x);\n const q = phi(x) * t * (0.319381530 + t * (-0.356563782 + t * (1.781477937 + t * (-1.821255978 + t * 1.330274429))));\n return z >= 0 ? 1 - q : q;\n}\n/** Beyond this many standard deviations from a clip level the clip changes the moments by less than 1e-15 of σ². */\nconst CLIP_REACH_SIGMA = 8.5;\n\n/**\n * Internal (exported for tests). Moments of min(Y, top) for Y ~ N(m, v): mean, variance and the slope d E/d m = P(Y < top). Exact for a normal Y:\n * E[min(Y,t)] = m − s·(φ(z) − z·(1 − Φ(z))), z = (t − m)/s.\n */\nexport function upperClip(m: number, v: number, top: number, out: Float64Array): void {\n if (!(v > 0)) { const c = m < top ? m : top; out[0] = c; out[1] = 0; out[2] = m < top ? 1 : 0; return; }\n const s = Math.sqrt(v), z = (top - m) / s;\n if (z > CLIP_REACH_SIGMA) { out[0] = m; out[1] = v; out[2] = 1; return; }\n if (z < -CLIP_REACH_SIGMA) { out[0] = top; out[1] = 0; out[2] = 0; return; }\n const P = bigPhi(z), d = phi(z);\n const mean = m - s * (d - z * (1 - P));\n // E[min(Y,t)²] = m²Φ − 2msφ + s²(Φ − zφ) + t²(1 − Φ).\n const second = m * m * P - 2 * m * s * d + v * (P - z * d) + top * top * (1 - P);\n out[0] = mean; out[1] = Math.max(0, second - mean * mean); out[2] = P;\n}\n/**\n * Internal (exported for tests). Moments of clip(Y, 0, 1) for Y with mean m, variance v and standardized skewness γ\n * (default 0: normal, closed form). The mean carries the first-order Edgeworth term of a skewed Y: for\n * E[(Y − t)₊] it adds s·γ·z·φ(z)/6 at z = (t − m)/s, so E[clip] gains (s·γ/6)·(a·φ(a) − b·φ(b)) with a = −m/s,\n * b = (1 − m)/s (docs/DISPLAY_VIEW.md, \"Readout\"). |γ| is limited to 1, where the first-order term is still a small part.\n */\nexport function unitClip(m: number, v: number, out: Float64Array, skewness = 0): void {\n if (!(v > 0)) { const c = m < 0 ? 0 : m > 1 ? 1 : m; out[0] = c; out[1] = 0; out[2] = m > 0 && m < 1 ? 1 : 0; return; }\n const s = Math.sqrt(v), a = -m / s, b = (1 - m) / s;\n if (a < -CLIP_REACH_SIGMA && b > CLIP_REACH_SIGMA) { out[0] = m; out[1] = v; out[2] = 1; return; }\n const Pa = a < -CLIP_REACH_SIGMA ? 0 : bigPhi(a), Pb = b > CLIP_REACH_SIGMA ? 1 : bigPhi(b), da = a < -CLIP_REACH_SIGMA ? 0 : phi(a), db = b > CLIP_REACH_SIGMA ? 0 : phi(b);\n const inside = Pb - Pa, gamma = skewness > 1 ? 1 : skewness < -1 ? -1 : skewness;\n const mean = m * inside + s * (da - db) + (1 - Pb) + (gamma === 0 ? 0 : s * gamma / 6 * ((a < -CLIP_REACH_SIGMA ? 0 : a * da) - (b > CLIP_REACH_SIGMA ? 0 : b * db)));\n // E[Y² 1(0<Y<1)] = (m² + s²)(Φb − Φa) + 2ms(φa − φb) + s²(aφa − bφb); plus P(Y ≥ 1).\n const aa = a < -CLIP_REACH_SIGMA ? 0 : a * da, bb = b > CLIP_REACH_SIGMA ? 0 : b * db;\n const second = (m * m + v) * inside + 2 * m * s * (da - db) + v * (aa - bb) + (1 - Pb);\n out[0] = mean; out[1] = Math.max(0, second - mean * mean); out[2] = inside;\n}\n/** Gauss–Legendre nodes and weights on [−1, 1], 16 points (computed once by Newton iteration on P_16 from cos(π(i + ¾)/(n + ½))). */\nconst GL = ((): { x: Float64Array; w: Float64Array } => {\n const n = 16, x = new Float64Array(n), w = new Float64Array(n);\n for (let i = 0; i < n; i++) {\n let z = portableCosTwoPi((i + 0.75) / (2 * n + 1)), dp = 0;\n for (let it = 0; it < 100; it++) {\n let p0 = 1, p1 = z;\n for (let k = 2; k <= n; k++) { const p2 = ((2 * k - 1) * z * p1 - (k - 1) * p0) / k; p0 = p1; p1 = p2; }\n dp = n * (z * p1 - p0) / (z * z - 1);\n const dz = p1 / dp;\n z -= dz;\n if (Math.abs(dz) < 1e-16) break;\n }\n x[i] = z; w[i] = 2 / ((1 - z * z) * dp * dp);\n }\n return { x, w };\n})();\n/** Internal (exported for tests). Positive Reinhard per channel then the clip to [0, 1]: h(x) = x/(1 + x) for x > 0, else 0 (its slope h' = 1/(1 + x)²). */\nexport function reinhardMoments(m: number, v: number, out: Float64Array): void {\n if (!(v > 0)) { out[0] = m > 0 ? m / (1 + m) : 0; out[1] = 0; out[2] = m > 0 ? 1 / ((1 + m) * (1 + m)) : 0; return; }\n const s = Math.sqrt(v), lo = Math.max(0, m - CLIP_REACH_SIGMA * s), hi = m + CLIP_REACH_SIGMA * s;\n if (!(hi > lo)) { out[0] = 0; out[1] = 0; out[2] = 0; return; }\n // Composite 16-point Gauss–Legendre over [lo, hi] in 4 panels; h is smooth there (the kink at 0 is an end point).\n let e1 = 0, e2 = 0, ed = 0;\n const panels = 4, width = (hi - lo) / panels;\n for (let p = 0; p < panels; p++) {\n const c = lo + (p + 0.5) * width, half = width / 2;\n for (let k = 0; k < 16; k++) {\n const x = c + half * GL.x[k]!, weight = half * GL.w[k]! * phi((x - m) / s) / s, h = x / (1 + x);\n e1 += weight * h; e2 += weight * h * h; ed += weight / ((1 + x) * (1 + x));\n }\n }\n out[0] = e1; out[1] = Math.max(0, e2 - e1 * e1); out[2] = ed;\n}\n\n// ---------------------------------------------------------------------------------------------------------------\n// The display view renderer.\n\n/** Per CFA channel: normalized RAW value = (code − black)/(white − black) of a site with e expected electrons. */\nexport interface DisplayViewChannelReadout {\n /** Normalized value per electron: digitalGain / (conversionGain·(white − black)). */\n perElectron: number;\n /** Mean dark electrons per site during the exposure. */\n darkElectrons: number;\n /** Variance of the normalized value not proportional to the electrons: read noise and ADC quantization. */\n constantVariance: number;\n}\n\nexport interface DisplayViewSetup {\n frameWidth: number;\n frameHeight: number;\n /** Native site of output pixel (0, 0). */\n margin: number;\n nativeWidth: number;\n nativeHeight: number;\n viewWidth: number;\n viewHeight: number;\n region: { x: number; y: number; width: number; height: number };\n /** Samples per axis in display pixels whose pilot finds detail; uniform ones use a quarter (at least 1). */\n samplesPerAxis: number;\n /** Sites beyond the footprint that can affect its pixels (demosaic, filter and kernel reach), for the pilot. */\n reachSites: number;\n bitDepth: 8 | 16;\n seed: number;\n signal: DisplayViewExpectedSignal;\n readout: readonly [DisplayViewChannelReadout, DisplayViewChannelReadout, DisplayViewChannelReadout];\n /** Bilinear demosaic kernels per absolute CFA phase (phaseY·2 + phaseX): for each output channel, (dx, dy, weight) triples. */\n demosaic: readonly (readonly (readonly DisplayViewKernelTap[])[])[];\n /**\n * The demosaic whose pixel statistics the view reproduces, per phase: one candidate (bilinear) or AHD's two directional\n * linear candidates (`ahdCandidateKernels`), each a kernel per output channel. Default: the bilinear kernels.\n */\n candidates?: readonly (readonly (readonly (readonly DisplayViewKernelTap[])[])[])[];\n /** White-balance gains applied to the normalized camera channels and the highlight clip level (the smallest gain). */\n gains: readonly [number, number, number];\n clipLevel: number;\n /** Camera channels (after WB and the highlight clip) → linear sRGB: rows are output components. */\n matrix: readonly (readonly number[])[];\n toneCurve: \"identity\" | \"positive-reinhard-per-channel\";\n /**\n * AHD only: the low-signal correction. `labMatrix` is the camera → XYZ matrix AHD measures homogeneity with (the profile's\n * matrix times the white-balance gains); samples whose pixel variance (linear light) exceeds `thresholdVariance` add the\n * correction of a flat neighbourhood with their channel means, estimated once per quantized state with `drawsPerState` draws.\n */\n ahdCorrection?: { labMatrix: readonly (readonly number[])[]; drawsPerState: number; thresholdVariance: number };\n /**\n * #447: a collect pass. The render adds to this set the grid key of every state its corrected samples interpolate between\n * (the corners `gridCorrection` would compute or read), computes and reads no state and leaves the cache untouched; its\n * corrections are zero, so its image is not a display view and is discarded by the caller.\n */\n ahdCollect?: Set<number>;\n yieldControl(): Promise<void>;\n checkAbort(): void;\n /** #478: the inputs a GPU renderer builds its scene lookup from (see {@link DisplayViewGpuSetup}); not read by `renderDisplayView`. */\n gpu?: DisplayViewGpuSetup;\n}\n\nexport interface DisplayViewRenderResult {\n samples: Uint8Array | Uint16Array;\n /** Mean linear-light value of each display pixel before the noise draw (diagnostics and validation). */\n expected: Float64Array;\n /** Noise standard deviation of each display pixel's components in linear light (square root of the covariance diagonal). */\n noiseStd: Float64Array;\n sampleCount: number;\n siteCount: number;\n /** Display pixels whose pilot found detail (full samples) and uniform ones (a quarter per axis). */\n detailPixelCount: number;\n uniformPixelCount: number;\n /** Display pixels whose expected value includes the AHD low-signal correction. */\n ahdCorrectedPixelCount: number;\n /**\n * 2.8 (#393): \"exact-area-mean\" when each display pixel averaged every real pixel of its footprint once, with its exact\n * overlap weight (views where a footprint holds at most K² real pixels); \"stratified-monte-carlo\" otherwise.\n */\n estimation: \"exact-area-mean\" | \"stratified-monte-carlo\";\n}\n\n/** One tap of a linear demosaic kernel: the site at (dx, dy) from the pixel, and its weight. */\nexport interface DisplayViewKernelTap { dx: number; dy: number; weight: number }\n\n/**\n * AHD's two directional candidates (`createAhdDemosaicTask`, after Hirakawa & Parks 2005) as linear kernels, for a pixel of\n * CFA phase (phaseX, phaseY) of an RGGB mosaic: green along the rows (or columns) with the 5-tap filter\n * [−1/4, 1/2, 1/2, 1/2, −1/4], then red and blue from bilinearly interpolated colour differences against that green. Each\n * candidate is linear in the mosaic, so its kernel is its response to a unit site; AHD then picks one candidate per pixel\n * by homogeneity, which is the only non-linear step. Returns [horizontal, vertical], each [red, green, blue] kernels.\n */\nexport function ahdCandidateKernels(phaseX: number, phaseY: number): DisplayViewKernelTap[][][] {\n const role = (dx: number, dy: number): number => { const x = (phaseX + dx) & 1, y = (phaseY + dy) & 1; return y === 0 ? (x === 0 ? 0 : 1) : (x === 0 ? 1 : 2); };\n const evaluate = (site: (dx: number, dy: number) => number, horizontal: boolean): number[] => {\n const green = (dx: number, dy: number): number => {\n const c = site(dx, dy);\n if (role(dx, dy) === 1) return c;\n return horizontal ? (site(dx - 1, dy) + site(dx + 1, dy)) / 2 + (2 * c - site(dx - 2, dy) - site(dx + 2, dy)) / 4\n : (site(dx, dy - 1) + site(dx, dy + 1)) / 2 + (2 * c - site(dx, dy - 2) - site(dx, dy + 2)) / 4;\n };\n const diff = (dx: number, dy: number): number => site(dx, dy) - green(dx, dy);\n const out = [0, 0, 0], own = role(0, 0), g = green(0, 0);\n out[1] = g;\n if (own === 1) {\n const hRole = role(1, 0), vRole = 2 - hRole;\n out[hRole] = g + (diff(-1, 0) + diff(1, 0)) / 2;\n out[vRole] = g + (diff(0, -1) + diff(0, 1)) / 2;\n } else {\n out[own] = site(0, 0);\n out[2 - own] = g + (diff(-1, -1) + diff(1, -1) + diff(-1, 1) + diff(1, 1)) / 4;\n }\n return out;\n };\n return [true, false].map((horizontal) => {\n const kernels: DisplayViewKernelTap[][] = [[], [], []];\n for (let dy = -3; dy <= 3; dy++) for (let dx = -3; dx <= 3; dx++) {\n const response = evaluate((x, y) => (x === dx && y === dy ? 1 : 0), horizontal);\n for (let c = 0; c < 3; c++) if (response[c] !== 0) kernels[c]!.push({ dx, dy, weight: response[c]! });\n }\n return kernels;\n });\n}\n\n/** 1-D overlaps of real output columns with one display column: first column index and the overlaps. */\nexport function overlaps(start: number, end: number, limit: number): { first: number; w: Float64Array } {\n const first = Math.floor(start), last = Math.min(limit - 1, Math.ceil(end) - 1), w = new Float64Array(last - first + 1);\n for (let k = first; k <= last; k++) w[k - first] = Math.min(end, k + 1) - Math.max(start, k);\n return { first, w };\n}\n/**\n * Internal (exported for tests). Footprint sums along one axis, for the closed-form B_c (docs/DISPLAY_VIEW.md, \"Demosaic correlation\"). Native\n * coordinate parity decides the CFA: red columns/rows are even, blue odd. With w(k) the overlap of real column k:\n * - b(k) = w(k) + ½(w(k − 1) + w(k + 1)), the bilinear red/blue spread; sums of b² over even and odd native k;\n * - p(k) = w(k), q(k) = ¼(w(k − 1) + w(k + 1)) for green: sums of p², q² and p·q over even and odd native k;\n * - Σ w².\n */\nexport interface AxisSums { bEven: number; bOdd: number; ppEven: number; ppOdd: number; qqEven: number; qqOdd: number; pqEven: number; pqOdd: number; ww: number }\nexport function axisSums(start: number, end: number, limit: number, margin: number): AxisSums {\n const { first, w } = overlaps(start, end, limit);\n const at = (k: number): number => (k >= first && k < first + w.length ? w[k - first]! : 0);\n const s: AxisSums = { bEven: 0, bOdd: 0, ppEven: 0, ppOdd: 0, qqEven: 0, qqOdd: 0, pqEven: 0, pqOdd: 0, ww: 0 };\n for (let k = first - 1; k <= first + w.length; k++) {\n const p = at(k), q = (at(k - 1) + at(k + 1)) / 4, b = p + 2 * q, even = ((k + margin) & 1) === 0;\n if (even) { s.bEven += b * b; s.ppEven += p * p; s.qqEven += q * q; s.pqEven += p * q; } else { s.bOdd += b * b; s.ppOdd += p * p; s.qqOdd += q * q; s.pqOdd += p * q; }\n s.ww += p * p;\n }\n return s;\n}\n/** Internal (exported for tests). B for red, green and blue (Σ β² over the channel's sites, β normalized to unit sum) and Σ (w/A)². */\nexport function footprintWeights(x: AxisSums, y: AxisSums, area: number, out: Float64Array): void {\n const a2 = area * area;\n const green = (xpp: number, xqq: number, xpq: number, ypp: number, yqq: number, ypq: number): number =>\n xpp * ypp + xqq * ypp + xpp * yqq + 2 * xpq * ypp + 2 * xpp * ypq + 2 * xpq * ypq;\n out[0] = x.bEven * y.bEven / a2;\n // Green sites: (odd x, even y) and (even x, odd y).\n out[1] = (green(x.ppOdd, x.qqOdd, x.pqOdd, y.ppEven, y.qqEven, y.pqEven) + green(x.ppEven, x.qqEven, x.pqEven, y.ppOdd, y.qqOdd, y.pqOdd)) / a2;\n out[2] = x.bOdd * y.bOdd / a2;\n out[3] = x.ww * y.ww / a2;\n}\n/** AHD's dependence reach in sites (directional green ±2, colour differences ±1, homogeneity 4-neighbours and 3 × 3 sum). */\nconst AHD_REACH = 5, AHD_SIDE = 2 * AHD_REACH + 1;\n/** Grid of flat-neighbourhood states for the AHD correction: steps per octave of the normalized channel mean, octaves below white (exported for the GPU display view, #479). */\nexport const AHD_KEY_STEPS = 8, AHD_KEY_OCTAVES = 12;\n/** CFA role (0 red, 1 green, 2 blue) of each patch site (dy + 5)·11 + dx + 5, per phase (phaseY·2 + phaseX) of the centre. */\nconst AHD_ROLES = [0, 1, 2, 3].map((phase) => {\n const roles = new Uint8Array(AHD_SIDE * AHD_SIDE), px = phase & 1, py = phase >> 1;\n for (let dy = -AHD_REACH; dy <= AHD_REACH; dy++) for (let dx = -AHD_REACH; dx <= AHD_REACH; dx++) {\n const xx = (px + dx) & 1, yy = (py + dy) & 1;\n roles[(dy + AHD_REACH) * AHD_SIDE + dx + AHD_REACH] = yy === 0 ? (xx === 0 ? 0 : 1) : (xx === 0 ? 1 : 2);\n }\n return roles;\n});\n/**\n * 1 for the patch sites the AHD steps read (directional greens within 3 sites read 2 further along their axis, the candidates\n * within 2 read 1 further): |dy| ≤ 3 or |dx| ≤ 3. The 16 sites with |dx| ≥ 4 and |dy| ≥ 4 are never read.\n */\nconst AHD_READ = Uint8Array.from({ length: AHD_SIDE * AHD_SIDE }, (_, p) => {\n const dx = (p % AHD_SIDE) - AHD_REACH, dy = Math.floor(p / AHD_SIDE) - AHD_REACH;\n return Math.abs(dx) <= 3 || Math.abs(dy) <= 3 ? 1 : 0;\n});\n/** x², as one correctly rounded product (`**` is implementation-approximated in ECMA-262). */\nfunction square(x: number): number { return x * x; }\n/** CIELAB's f(t) constants (CIE 15:2004): linear below (6/29)³ with slope (29/3)³/116. */\nconst LAB_EPSILON = 216 / 24389, LAB_KAPPA = 24389 / 27;\n/** A 32-bit hash of a correction key (MurmurHash3 finalizer of the three quantized means). */\nfunction fmixKey(a: number, b: number, c: number): number { return fmix32((Math.imul(a + 1, 0x9e3779b1) ^ Math.imul(b + 1, 0x85ebca77) ^ Math.imul(c + 1, 0xc2b2ae3d)) >>> 0); }\n/** Lowest grid level, 2^-AHD_KEY_OCTAVES of white (exact). */\nexport const AHD_KEY_FLOOR = 1 / 4096;\n/** Grid levels per channel (indices 0 to AHD_KEY_OCTAVES·AHD_KEY_STEPS). */\nexport const AHD_KEY_LEVELS = AHD_KEY_OCTAVES * AHD_KEY_STEPS + 1;\n/** Correction states kept per setup, and setups kept (least recently used first out); about 50 bytes per state. */\nconst AHD_STATE_LIMIT = 1 << 16, AHD_SETUP_LIMIT = 4;\n/** The correction states of one setup: the three values of state n at values[3·n …], found by its grid key. */\ninterface CorrectionStates { index: Map<number, number>; values: Float64Array }\nconst ahdStateCache = new Map<string, CorrectionStates>();\n/** Every input a correction state depends on besides its indices, as exact decimal text (JavaScript numbers round-trip). */\nfunction correctionKey(seed: number, correction: NonNullable<DisplayViewSetup[\"ahdCorrection\"]>, perElectron: ArrayLike<number> & Iterable<number>, constantVariance: ArrayLike<number> & Iterable<number>,\n gains: readonly number[], clipLevel: number, matrix: readonly (readonly number[])[], toneCurve: string): string {\n return [seed, correction.drawsPerState, ...perElectron, ...constantVariance, ...correction.labMatrix.flat(), ...gains, clipLevel, ...matrix.flat(), toneCurve].join(\",\");\n}\n/**\n * Internal (exported for tests, #442): the window offset of each slot, slot (dy + reach)·(2·reach + 1) + dx + reach, as\n * two integer tables: dx[slot] = (slot mod side) − reach and dy[slot] = ⌊slot / side⌋ − reach. The render loop reads them\n * instead of taking a modulo and a division per site read; they are the same integers.\n */\nexport function displayViewSlotOffsets(reach: number): { dx: Int32Array; dy: Int32Array } {\n const side = 2 * reach + 1, slotsCount = side * side;\n return { dx: Int32Array.from({ length: slotsCount }, (_, slot) => (slot % side) - reach), dy: Int32Array.from({ length: slotsCount }, (_, slot) => ((slot / side) | 0) - reach) };\n}\n/** The per-phase candidate tables of a render, flat (#442): index phase·2 + candidate, and ·3 + channel for the slots and weights. */\nexport interface DisplayViewCandidateTables {\n /** Candidates per phase: 1 (bilinear) or 2 (AHD), the same for every phase. */\n count: number;\n denseAt: Float64Array[];\n listAt: Int32Array[];\n slotsAt: Int32Array[];\n weightsAt: Float64Array[];\n}\n/**\n * Internal (exported for tests, #442): the nested per-phase tables [phase][candidate] (and [channel]) as flat arrays holding\n * the same typed arrays. Plain arrays of typed arrays with one element kind keep the render loop's keyed loads on one hidden\n * class each, where the nested arrays (arrays of arrays of typed arrays) made V8 deoptimize the render loop. Every phase must\n * have the same number of candidates, 1 or 2 (the record layout and the choice variance assume it), each with 3 channels.\n */\nexport function flatDisplayViewCandidateTables(slots: readonly (readonly (readonly Int32Array[])[])[], weights: readonly (readonly (readonly Float64Array[])[])[],\n dense: readonly (readonly Float64Array[])[], list: readonly (readonly Int32Array[])[]): DisplayViewCandidateTables {\n const count = slots[0]?.length ?? 0;\n if (slots.length !== 4 || (count !== 1 && count !== 2)) throw new InvalidConfigurationError(\"display view: each of the 4 CFA phases needs 1 or 2 demosaic candidates.\");\n const denseAt: Float64Array[] = [], listAt: Int32Array[] = [], slotsAt: Int32Array[] = [], weightsAt: Float64Array[] = [];\n for (let p = 0; p < 4; p++) {\n if (slots[p]!.length !== count || weights[p]?.length !== count || dense[p]?.length !== count || list[p]?.length !== count)\n throw new InvalidConfigurationError(\"display view: every CFA phase needs the same number of demosaic candidates.\");\n for (let d = 0; d < count; d++) {\n if (slots[p]![d]!.length !== 3 || weights[p]![d]!.length !== 3) throw new InvalidConfigurationError(\"display view: each demosaic candidate needs a kernel per camera channel.\");\n denseAt[p * 2 + d] = dense[p]![d]!; listAt[p * 2 + d] = list[p]![d]!;\n for (let c = 0; c < 3; c++) { slotsAt[(p * 2 + d) * 3 + c] = slots[p]![d]![c]!; weightsAt[(p * 2 + d) * 3 + c] = weights[p]![d]![c]!; }\n }\n }\n return { count, denseAt, listAt, slotsAt, weightsAt };\n}\n/** Internal (exported for tests): the correction states kept across calls, and clearing them. */\nexport function displayViewCorrectionStateCount(): number { let n = 0; for (const states of ahdStateCache.values()) n += states.index.size; return n; }\nexport function clearDisplayViewCorrectionStates(): void { ahdStateCache.clear(); }\n/** Number of grid keys: AHD_KEY_LEVELS³ (a grid key is (i0·AHD_KEY_LEVELS + i1)·AHD_KEY_LEVELS + i2). */\nconst AHD_GRID_KEY_COUNT = AHD_KEY_LEVELS * AHD_KEY_LEVELS * AHD_KEY_LEVELS;\n/**\n * 2.10 (#447): the AHD low-signal correction states of one setup, as a realm sends them to another. `key` is the setup's\n * correction key (`PreparedDisplayView.correctionKey()`), `gridKeys[i]` a state's grid key and `values[3·i …]` its three\n * values (28 bytes per state). Both arrays are transferable.\n */\nexport interface DisplayViewCorrectionStateSet { key: string; gridKeys: Int32Array; values: Float64Array }\n/** 2.10 (#447): the grid keys of the states a region needs (`PreparedDisplayView.collectCorrectionStates`), ascending. */\nexport interface DisplayViewCorrectionStateKeys { key: string; gridKeys: Int32Array }\n/** The inputs of one setup's correction states: the inputs of its correction key. */\nexport type DisplayViewCorrectionSetup = Pick<DisplayViewSetup, \"seed\" | \"readout\" | \"gains\" | \"clipLevel\" | \"matrix\" | \"toneCurve\"> &\n { ahdCorrection: NonNullable<DisplayViewSetup[\"ahdCorrection\"]> };\n/** Internal (#447): the correction key of a setup, or null without the AHD correction (the key `renderDisplayView` looks its states up with). */\nexport function displayViewCorrectionKey(setup: Pick<DisplayViewSetup, \"seed\" | \"readout\" | \"gains\" | \"clipLevel\" | \"matrix\" | \"toneCurve\" | \"ahdCorrection\">): string | null {\n if (!setup.ahdCorrection) return null;\n return correctionKey(setup.seed, setup.ahdCorrection, Float64Array.from(setup.readout, (r) => r.perElectron), Float64Array.from(setup.readout, (r) => r.constantVariance),\n setup.gains, setup.clipLevel, setup.matrix, setup.toneCurve);\n}\n/** True for a typed array of the named kind from any realm (a structured clone arrives as one of the receiving realm). */\nfunction isTypedArray(value: unknown, tag: \"Int32Array\" | \"Float64Array\"): boolean {\n return ArrayBuffer.isView(value) && Object.prototype.toString.call(value) === \"[object \" + tag + \"]\";\n}\n/** A grid-key list, checked: an Int32Array of keys in [0, AHD_KEY_LEVELS³). */\nfunction checkGridKeys(gridKeys: unknown, caller: string): Int32Array {\n if (!isTypedArray(gridKeys, \"Int32Array\")) throw new InvalidConfigurationError(caller + \": gridKeys must be an Int32Array.\");\n const keys = gridKeys as Int32Array;\n for (let i = 0; i < keys.length; i++) if (!(keys[i]! >= 0 && keys[i]! < AHD_GRID_KEY_COUNT))\n throw new InvalidConfigurationError(caller + \": gridKeys[\" + i + \"] (\" + keys[i] + \") is not a grid key, an integer in [0, \" + AHD_GRID_KEY_COUNT + \").\");\n return keys;\n}\n/**\n * 2.10 (#447): the AHD low-signal correction states this JavaScript realm holds (a Web Worker, a page), one entry per cached\n * setup, least recently used first, each state's grid key and three values copied out. Another realm adds them with\n * {@link bindDisplayViewCorrectionStates}; a render there then reads them instead of computing them, with the same bytes.\n */\nexport function serializeDisplayViewCorrectionStates(): DisplayViewCorrectionStateSet[] {\n const out: DisplayViewCorrectionStateSet[] = [];\n for (const [key, states] of ahdStateCache) {\n const gridKeys = new Int32Array(states.index.size), values = new Float64Array(3 * states.index.size);\n let i = 0;\n for (const [gridKey, n] of states.index) {\n gridKeys[i] = gridKey;\n values[3 * i] = states.values[3 * n]!; values[3 * i + 1] = states.values[3 * n + 1]!; values[3 * i + 2] = states.values[3 * n + 2]!;\n i++;\n }\n out.push({ key, gridKeys, values });\n }\n return out;\n}\n/**\n * 2.10 (#447): adds states another realm computed (an export, or `computeCorrectionStates` results) to this realm's cache and\n * returns the number of states added. For each entry, the grid keys its setup does not hold yet are appended; known ones are\n * left as they are (a state's values follow from its key, so they are equal). Every entry is checked before the cache is\n * touched: `key` a non-empty string, `gridKeys` an Int32Array of grid keys, `values` a Float64Array of 3 × `gridKeys.length`\n * finite numbers; otherwise it fails with an InvalidConfigurationError and the cache is unchanged. The cache's bounds apply as\n * in a render: an unknown key creates a setup and can evict the least recently used of the four kept, and a setup that\n * reaches 65 536 states is cleared before the next one is added. Import only keys a prepared view reported\n * (`correctionKey()`), so states a render here will read.\n */\nexport function bindDisplayViewCorrectionStates(entries: readonly DisplayViewCorrectionStateSet[]): number {\n const caller = \"bindDisplayViewCorrectionStates\";\n if (!Array.isArray(entries)) throw new InvalidConfigurationError(caller + \": entries must be an array of { key, gridKeys, values }.\");\n const checked: DisplayViewCorrectionStateSet[] = [];\n for (let e = 0; e < entries.length; e++) {\n const entry: unknown = entries[e], at = caller + \": entries[\" + e + \"]\";\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) throw new InvalidConfigurationError(at + \" must be an object { key, gridKeys, values }.\");\n for (const field of Object.keys(entry)) if (field !== \"key\" && field !== \"gridKeys\" && field !== \"values\") throw new InvalidConfigurationError(at + \" has unknown field \" + JSON.stringify(field) + \".\");\n const { key, gridKeys, values } = entry as Record<string, unknown>;\n if (typeof key !== \"string\" || key.length === 0) throw new InvalidConfigurationError(at + \".key must be a non-empty string (a prepared view's correctionKey()).\");\n const keys = checkGridKeys(gridKeys, at);\n if (!isTypedArray(values, \"Float64Array\")) throw new InvalidConfigurationError(at + \".values must be a Float64Array.\");\n const v = values as Float64Array;\n if (v.length !== 3 * keys.length) throw new InvalidConfigurationError(at + \".values must hold 3 values per grid key (\" + 3 * keys.length + \"), not \" + v.length + \".\");\n for (let i = 0; i < v.length; i++) if (!Number.isFinite(v[i])) throw new InvalidConfigurationError(at + \".values[\" + i + \"] (\" + v[i] + \") is not finite.\");\n checked.push({ key, gridKeys: keys, values: v });\n }\n let appended = 0;\n for (const entry of checked) {\n const states = correctionStates(entry.key);\n for (let i = 0; i < entry.gridKeys.length; i++) {\n const gridKey = entry.gridKeys[i]!;\n if (states.index.has(gridKey)) continue;\n // As gridCorrection stores a state.\n if (states.index.size >= AHD_STATE_LIMIT) states.index.clear();\n const n = states.index.size;\n if (states.values.length < 3 * (n + 1)) { const grown = new Float64Array(2 * states.values.length); grown.set(states.values); states.values = grown; }\n states.values[3 * n] = entry.values[3 * i]!; states.values[3 * n + 1] = entry.values[3 * i + 1]!; states.values[3 * n + 2] = entry.values[3 * i + 2]!;\n states.index.set(gridKey, n);\n appended++;\n }\n }\n return appended;\n}\n/**\n * Internal (#447, `PreparedDisplayView.computeCorrectionStates`): computes the states of the given grid keys for a setup (each\n * as a render computes it, read from the cache where it is held) and stores them in this realm's cache; returns each key's\n * three values in the order given. Yields to the host and checks for abort between states, as a render does.\n */\nexport async function computeDisplayViewCorrectionStates(setup: DisplayViewCorrectionSetup & Pick<DisplayViewSetup, \"yieldControl\" | \"checkAbort\">,\n gridKeys: Int32Array): Promise<DisplayViewCorrectionStateSet> {\n const keys = checkGridKeys(gridKeys, \"computeCorrectionStates\");\n setup.checkAbort();\n const key = displayViewCorrectionKey(setup)!, states = correctionStates(key), gridCorrection = createGridCorrection(setup, states);\n const outKeys = Int32Array.from(keys), values = new Float64Array(3 * keys.length);\n let lastYield = Date.now();\n for (let i = 0; i < keys.length; i++) {\n const gridKey = keys[i]!, i2 = gridKey % AHD_KEY_LEVELS, i1 = ((gridKey - i2) / AHD_KEY_LEVELS) % AHD_KEY_LEVELS, i0 = (gridKey - i1 * AHD_KEY_LEVELS - i2) / (AHD_KEY_LEVELS * AHD_KEY_LEVELS);\n const at = gridCorrection(i0, i1, i2);\n values[3 * i] = states.values[at]!; values[3 * i + 1] = states.values[at + 1]!; values[3 * i + 2] = states.values[at + 2]!;\n if (Date.now() - lastYield >= 8) { await setup.yieldControl(); setup.checkAbort(); lastYield = Date.now(); }\n }\n return { key, gridKeys: outKeys, values };\n}\n/** The state map of one setup (moved to the most recently used end). */\nfunction correctionStates(key: string): CorrectionStates {\n let states = ahdStateCache.get(key);\n if (states) ahdStateCache.delete(key);\n else {\n states = { index: new Map(), values: new Float64Array(3 * 256) };\n if (ahdStateCache.size >= AHD_SETUP_LIMIT) ahdStateCache.delete(ahdStateCache.keys().next().value!);\n }\n ahdStateCache.set(key, states);\n return states;\n}\n/**\n * Recorded terms of a one-material sample: [0, 3) the channel site variances csv; [3, 21) per candidate d and channel c the\n * linear slopes a (3 + (3d + c)·3); [21, 27) per candidate the residual terms; [27, 30) the expected-value sums; [30, 33) the\n * AHD choice terms; 33 a 1 when the AHD correction applies and [34, 37) its values.\n */\nconst MEMO_SIZE = 37;\n/** Most real pixels a display pixel's footprint may have for the per-real-pixel memo (#392); larger footprints rarely repeat a real pixel. */\nconst PIXEL_MEMO_LIMIT = 1 << 16;\n/**\n * Most real pixels a footprint may hold for the exact area mean (#393). Measured on 8-row strips of a 24 MP view (Siemens star\n * and dead leaves, one thread): the exact path matched the stratified estimator's time within run-to-run spread up to 25 real\n * pixels per display pixel and was slower above (1.2× at 36, 1.4–1.5× at 64, 1.5–2.4× at 144), because every real pixel is\n * evaluated while the stratified estimator takes a quarter of its samples per axis where the pilot finds no detail.\n */\nexport const EXACT_AREA_MEAN_MAX_PIXELS = 25;\n/** Most entries of the site ring (a native site's value, material and readout moments, kept across the display pixels of a render). */\nconst SITE_RING_LIMIT = 1 << 18;\n/** Pilot points per axis: about one per two sites of the footprint plus its reach, 4 to 16. */\nfunction pilotCount(span: number): number { return Math.max(4, Math.min(16, Math.ceil(span / 2))); }\n\n/**\n * createAhdDemosaicTask's steps at the centre pixel of an 11 × 11 patch (patch (dy + 5)·11 + dx + 5, normalized site values):\n * `choose(phase)` fills the two candidates within 2 sites (`horizontal`, `vertical`: (dy + 2)·5 + dx + 2, three channels) and\n * returns the centre's direction, 0 horizontal, 1 vertical, 2 equal homogeneity (both averaged). Greens are read by flat\n * index (dy + 3)·7 + dx + 3; every value is formed with the same operations in the same order as the steps themselves,\n * except that CIELAB's cube root is `portableCbrt` (within 1 ulp of Math.cbrt) and squares are products, so the result has\n * the same bits in every JavaScript engine. (The task keeps its intermediate planes in float32; these are binary64.)\n */\nexport function createAhdCentreSteps(labMatrix: readonly (readonly number[])[], patch: Float64Array): { horizontal: Float64Array; vertical: Float64Array; choose(phase: number): number } {\n const lab = labMatrix, labWhite = Float64Array.from(lab, (row) => row[0]! + row[1]! + row[2]!);\n const l00 = lab[0]![0]!, l01 = lab[0]![1]!, l02 = lab[0]![2]!, l10 = lab[1]![0]!, l11 = lab[1]![1]!, l12 = lab[1]![2]!, l20 = lab[2]![0]!, l21 = lab[2]![1]!, l22 = lab[2]![2]!;\n const lw0 = labWhite[0]!, lw1 = labWhite[1]!, lw2 = labWhite[2]!;\n const gh = new Float64Array(49), gv = new Float64Array(49), cand = [new Float64Array(75), new Float64Array(75)], labs = [new Float64Array(75), new Float64Array(75)];\n function choose(phase: number): number {\n const roles = AHD_ROLES[phase]!;\n // 1. Directional greens within 3 sites.\n for (let dy = -3; dy <= 3; dy++) for (let dx = -3; dx <= 3; dx++) {\n const i = (dy + 3) * 7 + dx + 3, p = (dy + AHD_REACH) * AHD_SIDE + dx + AHD_REACH, c = patch[p]!;\n if (roles[p] === 1) { gh[i] = c; gv[i] = c; continue; }\n gh[i] = (patch[p - 1]! + patch[p + 1]!) / 2 + (2 * c - patch[p - 2]! - patch[p + 2]!) / 4;\n gv[i] = (patch[p - AHD_SIDE]! + patch[p + AHD_SIDE]!) / 2 + (2 * c - patch[p - 2 * AHD_SIDE]! - patch[p + 2 * AHD_SIDE]!) / 4;\n }\n // 2. Candidates within 2 sites; 3. their CIELAB. The four corners (±2, ±2) are not read by step 4 and are skipped.\n for (let d = 0; d < 2; d++) {\n const g = d === 0 ? gh : gv, o = cand[d]!, ol = labs[d]!;\n for (let dy = -2; dy <= 2; dy++) for (let dx = -2; dx <= 2; dx++) {\n if ((dx === -2 || dx === 2) && (dy === -2 || dy === 2)) continue;\n const i = (dy + 2) * 5 + dx + 2, p = (dy + AHD_REACH) * AHD_SIDE + dx + AHD_REACH, q = (dy + 3) * 7 + dx + 3, own = roles[p]!, gc = g[q]!;\n o[3 * i + 1] = gc;\n if (own === 1) {\n const hRole = roles[p + 1]!, vRole = 2 - hRole;\n o[3 * i + hRole] = gc + ((patch[p - 1]! - g[q - 1]!) + (patch[p + 1]! - g[q + 1]!)) / 2;\n o[3 * i + vRole] = gc + ((patch[p - AHD_SIDE]! - g[q - 7]!) + (patch[p + AHD_SIDE]! - g[q + 7]!)) / 2;\n } else {\n o[3 * i + own] = patch[p]!;\n o[3 * i + 2 - own] = gc + ((patch[p - AHD_SIDE - 1]! - g[q - 8]!) + (patch[p - AHD_SIDE + 1]! - g[q - 6]!) + (patch[p + AHD_SIDE - 1]! - g[q + 6]!) +\n (patch[p + AHD_SIDE + 1]! - g[q + 8]!)) / 4;\n }\n const R = o[3 * i]!, G = o[3 * i + 1]!, Bc = o[3 * i + 2]!;\n let tx = (l00 * R + l01 * G + l02 * Bc) / lw0, ty = (l10 * R + l11 * G + l12 * Bc) / lw1, tz = (l20 * R + l21 * G + l22 * Bc) / lw2;\n tx = tx > LAB_EPSILON ? portableCbrt(tx) : (LAB_KAPPA * tx + 16) / 116;\n ty = ty > LAB_EPSILON ? portableCbrt(ty) : (LAB_KAPPA * ty + 16) / 116;\n tz = tz > LAB_EPSILON ? portableCbrt(tz) : (LAB_KAPPA * tz + 16) / 116;\n ol[3 * i] = 116 * ty - 16; ol[3 * i + 1] = 500 * (tx - ty); ol[3 * i + 2] = 200 * (ty - tz);\n }\n }\n // 4. Homogeneity within 1 site, with the adaptive tolerances (neighbours left, right, up, down); 5. the 3 × 3 sum selects\n // the candidate.\n const h = labs[0]!, v = labs[1]!;\n let sh = 0, sv = 0;\n for (let dy = -1; dy <= 1; dy++) for (let dx = -1; dx <= 1; dx++) {\n const i = 3 * ((dy + 2) * 5 + dx + 2), j0 = i - 3, j1 = i + 3, j2 = i - 15, j3 = i + 15;\n const hL0 = Math.abs(h[i]! - h[j0]!), hL1 = Math.abs(h[i]! - h[j1]!), hL2 = Math.abs(h[i]! - h[j2]!), hL3 = Math.abs(h[i]! - h[j3]!);\n const vL0 = Math.abs(v[i]! - v[j0]!), vL1 = Math.abs(v[i]! - v[j1]!), vL2 = Math.abs(v[i]! - v[j2]!), vL3 = Math.abs(v[i]! - v[j3]!);\n const hC0 = square(h[i + 1]! - h[j0 + 1]!) + square(h[i + 2]! - h[j0 + 2]!), hC1 = square(h[i + 1]! - h[j1 + 1]!) + square(h[i + 2]! - h[j1 + 2]!);\n const hC2 = square(h[i + 1]! - h[j2 + 1]!) + square(h[i + 2]! - h[j2 + 2]!), hC3 = square(h[i + 1]! - h[j3 + 1]!) + square(h[i + 2]! - h[j3 + 2]!);\n const vC0 = square(v[i + 1]! - v[j0 + 1]!) + square(v[i + 2]! - v[j0 + 2]!), vC1 = square(v[i + 1]! - v[j1 + 1]!) + square(v[i + 2]! - v[j1 + 2]!);\n const vC2 = square(v[i + 1]! - v[j2 + 1]!) + square(v[i + 2]! - v[j2 + 2]!), vC3 = square(v[i + 1]! - v[j3 + 1]!) + square(v[i + 2]! - v[j3 + 2]!);\n const epsL = Math.min(Math.max(hL0, hL1), Math.max(vL2, vL3)), epsC = Math.min(Math.max(hC0, hC1), Math.max(vC2, vC3));\n sh += (hL0 <= epsL && hC0 <= epsC ? 1 : 0) + (hL1 <= epsL && hC1 <= epsC ? 1 : 0) + (hL2 <= epsL && hC2 <= epsC ? 1 : 0) + (hL3 <= epsL && hC3 <= epsC ? 1 : 0);\n sv += (vL0 <= epsL && vC0 <= epsC ? 1 : 0) + (vL1 <= epsL && vC1 <= epsC ? 1 : 0) + (vL2 <= epsL && vC2 <= epsC ? 1 : 0) + (vL3 <= epsL && vC3 <= epsC ? 1 : 0);\n }\n return sh > sv ? 0 : sv > sh ? 1 : 2;\n }\n return { horizontal: cand[0]!, vertical: cand[1]!, choose };\n}\n\n/**\n * #457: AHD's direction at real pixels of the noise-free mosaic, as `createAhdDemosaicTask` computes it on the whole raster\n * (every neighbour read at its reflect-101 position, so a position's greens, candidates, CIELAB and homogeneity are those of\n * the task's planes), with each per-position quantity computed once and kept in rings of native rows. `direction(x, y)` is 0\n * horizontal, 1 vertical, 2 equal homogeneity; `site(x, y)` gives the normalized expected value of an in-raster site, clipped\n * at white. The kept columns are [x0, x0 + columns), set by `origin(x0)` (which also forgets every kept value); they must hold\n * every real pixel asked about and 5 sites around it, clipped to the raster. `rows` is a power of two at least the native rows\n * the real pixels asked about between two `origin` calls span plus 10. The arithmetic is the task's, in binary64 (the task\n * stores its planes in float32), with `portableCbrt` and products for squares, as `createAhdCentreSteps`.\n */\nexport function createAhdDirectionPlane(labMatrix: readonly (readonly number[])[], nativeWidth: number, nativeHeight: number, columns: number, rows: number,\n site: (x: number, y: number) => number): { origin(x0: number): void; direction(x: number, y: number): number } {\n const lab = labMatrix, labWhite = Float64Array.from(lab, (row) => row[0]! + row[1]! + row[2]!);\n const l00 = lab[0]![0]!, l01 = lab[0]![1]!, l02 = lab[0]![2]!, l10 = lab[1]![0]!, l11 = lab[1]![1]!, l12 = lab[1]![2]!, l20 = lab[2]![0]!, l21 = lab[2]![1]!, l22 = lab[2]![2]!;\n const lw0 = labWhite[0]!, lw1 = labWhite[1]!, lw2 = labWhite[2]!;\n const W = columns, mask = rows - 1, n = rows * W;\n // Per position (slot (y & mask)·W + x − x0): the site value, the two greens, the two candidates' RGB and CIELAB and the two\n // homogeneity counts, each valid while its stamp is epoch·2^24 + the position's row + 1 (exact in binary64; rows < 2^24).\n const siteV = new Float64Array(n), siteS = new Float64Array(n), gH = new Float64Array(n), gV = new Float64Array(n), gS = new Float64Array(n);\n const rgb = new Float64Array(6 * n), labs = new Float64Array(6 * n), cS = new Float64Array(n), hom = new Uint8Array(2 * n), hS = new Float64Array(n);\n let x0 = 0, epoch = 0;\n const rx = (x: number): number => (x < 0 ? -x : x >= nativeWidth ? 2 * nativeWidth - 2 - x : x);\n const ry = (y: number): number => (y < 0 ? -y : y >= nativeHeight ? 2 * nativeHeight - 2 - y : y);\n const role = (x: number, y: number): number => ((y & 1) === 0 ? ((x & 1) === 0 ? 0 : 1) : ((x & 1) === 0 ? 1 : 2));\n /** The site at (x, y) read reflect-101 (`at` of the task). */\n function at(x: number, y: number): number {\n const X = rx(x), Y = ry(y), q = (Y & mask) * W + X - x0;\n if (siteS[q] !== epoch + Y + 1) { siteV[q] = site(X, Y); siteS[q] = epoch + Y + 1; }\n return siteV[q]!;\n }\n /** Fills the two greens of in-raster position (x, y) (step 1) and returns its slot. */\n function greens(x: number, y: number): number {\n const q = (y & mask) * W + x - x0;\n if (gS[q] === epoch + y + 1) return q;\n const c = at(x, y);\n if (role(x, y) === 1) { gH[q] = c; gV[q] = c; }\n else {\n gH[q] = (at(x - 1, y) + at(x + 1, y)) / 2 + (2 * c - at(x - 2, y) - at(x + 2, y)) / 4;\n gV[q] = (at(x, y - 1) + at(x, y + 1)) / 2 + (2 * c - at(x, y - 2) - at(x, y + 2)) / 4;\n }\n gS[q] = epoch + y + 1;\n return q;\n }\n /** s − g of direction d at the reflected position of (x, y). */\n function difference(x: number, y: number, d: number): number {\n const X = rx(x), Y = ry(y), q = greens(X, Y);\n return at(X, Y) - (d === 0 ? gH[q]! : gV[q]!);\n }\n /** Fills the two candidates and their CIELAB at in-raster position (x, y) (steps 2 and 3) and returns its slot. */\n function candidates(x: number, y: number): number {\n const q = (y & mask) * W + x - x0;\n if (cS[q] === epoch + y + 1) return q;\n greens(x, y);\n const own = role(x, y);\n for (let d = 0; d < 2; d++) {\n const gi = d === 0 ? gH[q]! : gV[q]!, o = 6 * q + 3 * d;\n rgb[o + 1] = gi;\n if (own === 1) {\n const hRole = role(x + 1, y), vRole = 2 - hRole;\n const a = difference(x - 1, y, d), b = difference(x + 1, y, d);\n rgb[o + hRole] = gi + (a + b) / 2;\n const cc = difference(x, y - 1, d), dd = difference(x, y + 1, d);\n rgb[o + vRole] = gi + (cc + dd) / 2;\n } else {\n rgb[o + own] = at(x, y);\n rgb[o + 2 - own] = gi + (difference(x - 1, y - 1, d) + difference(x + 1, y - 1, d) + difference(x - 1, y + 1, d) + difference(x + 1, y + 1, d)) / 4;\n }\n const R = rgb[o]!, G = rgb[o + 1]!, Bc = rgb[o + 2]!;\n let tx = (l00 * R + l01 * G + l02 * Bc) / lw0, ty = (l10 * R + l11 * G + l12 * Bc) / lw1, tz = (l20 * R + l21 * G + l22 * Bc) / lw2;\n tx = tx > LAB_EPSILON ? portableCbrt(tx) : (LAB_KAPPA * tx + 16) / 116;\n ty = ty > LAB_EPSILON ? portableCbrt(ty) : (LAB_KAPPA * ty + 16) / 116;\n tz = tz > LAB_EPSILON ? portableCbrt(tz) : (LAB_KAPPA * tz + 16) / 116;\n labs[o] = 116 * ty - 16; labs[o + 1] = 500 * (tx - ty); labs[o + 2] = 200 * (ty - tz);\n }\n cS[q] = epoch + y + 1;\n return q;\n }\n /** The two homogeneity counts of in-raster position (x, y) (step 4), at hom[2·slot] and hom[2·slot + 1]. */\n function homogeneity(x: number, y: number): number {\n const q = (y & mask) * W + x - x0;\n if (hS[q] === epoch + y + 1) return q;\n const i = 6 * candidates(x, y), jl = 6 * candidates(rx(x - 1), y), jr = 6 * candidates(rx(x + 1), y), ju = 6 * candidates(x, ry(y - 1)), jd = 6 * candidates(x, ry(y + 1));\n const h = labs;\n // Direction 0 at offsets +0, direction 1 at +3; neighbours left, right, up, down.\n const hL0 = Math.abs(h[i]! - h[jl]!), hL1 = Math.abs(h[i]! - h[jr]!), hL2 = Math.abs(h[i]! - h[ju]!), hL3 = Math.abs(h[i]! - h[jd]!);\n const vL0 = Math.abs(h[i + 3]! - h[jl + 3]!), vL1 = Math.abs(h[i + 3]! - h[jr + 3]!), vL2 = Math.abs(h[i + 3]! - h[ju + 3]!), vL3 = Math.abs(h[i + 3]! - h[jd + 3]!);\n const hC0 = square(h[i + 1]! - h[jl + 1]!) + square(h[i + 2]! - h[jl + 2]!), hC1 = square(h[i + 1]! - h[jr + 1]!) + square(h[i + 2]! - h[jr + 2]!);\n const hC2 = square(h[i + 1]! - h[ju + 1]!) + square(h[i + 2]! - h[ju + 2]!), hC3 = square(h[i + 1]! - h[jd + 1]!) + square(h[i + 2]! - h[jd + 2]!);\n const vC0 = square(h[i + 4]! - h[jl + 4]!) + square(h[i + 5]! - h[jl + 5]!), vC1 = square(h[i + 4]! - h[jr + 4]!) + square(h[i + 5]! - h[jr + 5]!);\n const vC2 = square(h[i + 4]! - h[ju + 4]!) + square(h[i + 5]! - h[ju + 5]!), vC3 = square(h[i + 4]! - h[jd + 4]!) + square(h[i + 5]! - h[jd + 5]!);\n const epsL = Math.min(Math.max(hL0, hL1), Math.max(vL2, vL3)), epsC = Math.min(Math.max(hC0, hC1), Math.max(vC2, vC3));\n hom[2 * q] = (hL0 <= epsL && hC0 <= epsC ? 1 : 0) + (hL1 <= epsL && hC1 <= epsC ? 1 : 0) + (hL2 <= epsL && hC2 <= epsC ? 1 : 0) + (hL3 <= epsL && hC3 <= epsC ? 1 : 0);\n hom[2 * q + 1] = (vL0 <= epsL && vC0 <= epsC ? 1 : 0) + (vL1 <= epsL && vC1 <= epsC ? 1 : 0) + (vL2 <= epsL && vC2 <= epsC ? 1 : 0) + (vL3 <= epsL && vC3 <= epsC ? 1 : 0);\n hS[q] = epoch + y + 1;\n return q;\n }\n return {\n origin(first: number): void { x0 = first; epoch += 16777216; },\n /** Step 5: the 3 × 3 sums of homogeneity (reflected) select the direction. */\n direction(x: number, y: number): number {\n let sh = 0, sv = 0;\n for (let dy = -1; dy <= 1; dy++) for (let dx = -1; dx <= 1; dx++) { const q = homogeneity(rx(x + dx), ry(y + dy)); sh += hom[2 * q]!; sv += hom[2 * q + 1]!; }\n return sh > sv ? 0 : sv > sh ? 1 : 2;\n }\n };\n}\n\n/**\n * The state computer of one setup's AHD correction (#447: shared by the render and `computeDisplayViewCorrectionStates`):\n * gridCorrection(i0, i1, i2) returns the offset of the grid state's three values in `states.values`, computing and storing\n * the state on first use. The code and its operations are those the render ran in place before.\n */\nfunction createGridCorrection(setup: DisplayViewCorrectionSetup, states: CorrectionStates): (i0: number, i1: number, i2: number) => number {\n const { seed, ahdCorrection } = setup;\n const k = Float64Array.from(setup.readout, (r) => r.perElectron), c0 = Float64Array.from(setup.readout, (r) => r.constantVariance);\n const M = setup.matrix, m00 = M[0]![0]!, m01 = M[0]![1]!, m02 = M[0]![2]!, m10 = M[1]![0]!, m11 = M[1]![1]!, m12 = M[1]![2]!, m20 = M[2]![0]!, m21 = M[2]![1]!, m22 = M[2]![2]!;\n const g0 = setup.gains[0], g1 = setup.gains[1], g2 = setup.gains[2], L = setup.clipLevel, reinhard = setup.toneCurve === \"positive-reinhard-per-channel\";\n const correction = new Float64Array(3), patch = new Float64Array(AHD_SIDE * AHD_SIDE);\n const readStd = Float64Array.from(c0, (v) => Math.sqrt(v));\n /** The offset of a grid state's three values in states.values (computed and stored on first use). */\n function gridCorrection(i0: number, i1: number, i2: number): number {\n const key = (i0 * AHD_KEY_LEVELS + i1) * AHD_KEY_LEVELS + i2, cached = states.index.get(key);\n if (cached !== undefined) return 3 * cached;\n const electrons = [i0, i1, i2].map((i, c) => portableExp2(i / AHD_KEY_STEPS - AHD_KEY_OCTAVES) / k[c]!);\n const random = createDeterministicUniformStream(deriveNativeSiteStreamSeedUint32(seed, fmixKey(i0, i1, i2), DISPLAY_VIEW_AHD_STREAM_ID));\n const sum = new Float64Array(3), draws = ahdCorrection.drawsPerState, poisson = electrons.map((e) => createPoissonSampler(e, true));\n const normal = createPortableStandardNormalPairs(random);\n for (let draw = 0; draw < draws; draw++) {\n const phase = draw & 3, roles = AHD_ROLES[phase]!;\n for (let p = 0; p < AHD_SIDE * AHD_SIDE; p++) {\n // The 16 sites the AHD steps never read are not drawn.\n if (AHD_READ[p] === 0) continue;\n const c = roles[p]!, value = k[c]! * poisson[c]!(random) + readStd[c]! * normal();\n patch[p] = value < 1 ? value : 1;\n }\n ahdDifference(phase, correction);\n for (let comp = 0; comp < 3; comp++) sum[comp] = sum[comp]! + correction[comp]! / draws;\n }\n if (states.index.size >= AHD_STATE_LIMIT) states.index.clear();\n const n = states.index.size;\n if (states.values.length < 3 * (n + 1)) { const grown = new Float64Array(2 * states.values.length); grown.set(states.values); states.values = grown; }\n states.values.set(sum, 3 * n);\n states.index.set(key, n);\n return 3 * n;\n }\n const steps = createAhdCentreSteps(ahdCorrection.labMatrix, patch);\n const rgb = new Float64Array(3), rendered = new Float64Array(3), linear = new Float64Array(3);\n /** Develops one deterministic camera pixel and renders it: WB, highlight clip, colour matrix, tone curve, clip to [0, 1]. */\n function renderPixel(r: number, gr: number, b: number, out: Float64Array): void {\n const u0 = Math.min(L, g0 * r), u1 = Math.min(L, g1 * gr), u2 = Math.min(L, g2 * b);\n for (let comp = 0; comp < 3; comp++) {\n let v = comp === 0 ? m00 * u0 + m01 * u1 + m02 * u2 : comp === 1 ? m10 * u0 + m11 * u1 + m12 * u2 : m20 * u0 + m21 * u1 + m22 * u2;\n if (reinhard) v = v > 0 ? v / (1 + v) : v;\n out[comp] = v < 0 ? 0 : v > 1 ? 1 : v;\n }\n }\n /** h(AHD) − ½(h(H) + h(V)) at the centre of the drawn neighbourhood (`createAhdCentreSteps`). */\n function ahdDifference(phase: number, out: Float64Array): void {\n const dir = steps.choose(phase), a = steps.horizontal, b = steps.vertical, centre = 12;\n for (let c = 0; c < 3; c++) rgb[c] = dir === 0 ? a[3 * centre + c]! : dir === 1 ? b[3 * centre + c]! : (a[3 * centre + c]! + b[3 * centre + c]!) / 2;\n renderPixel(rgb[0]!, rgb[1]!, rgb[2]!, rendered);\n renderPixel(a[3 * centre]!, a[3 * centre + 1]!, a[3 * centre + 2]!, linear);\n for (let c = 0; c < 3; c++) out[c] = rendered[c]! - linear[c]! / 2;\n renderPixel(b[3 * centre]!, b[3 * centre + 1]!, b[3 * centre + 2]!, linear);\n for (let c = 0; c < 3; c++) out[c] = out[c]! - linear[c]! / 2;\n }\n return gridCorrection;\n}\n\n/** Renders the display view (docs/DISPLAY_VIEW.md). */\nexport async function renderDisplayView(setup: DisplayViewSetup): Promise<DisplayViewRenderResult> {\n const { frameWidth, frameHeight, margin, nativeWidth, nativeHeight, viewWidth, viewHeight, region, seed, reachSites } = setup;\n const sx = frameWidth / viewWidth, sy = frameHeight / viewHeight, area = sx * sy, g = 2 / frameWidth;\n const fullK = setup.samplesPerAxis, uniformK = Math.max(1, Math.round(fullK / 4));\n // Exact area mean (#393): where a footprint holds at most EXACT_AREA_MEAN_MAX_PIXELS real pixels and at most K², every real\n // pixel it touches is evaluated once with its exact overlap weight a_j = w_j / A, so the expected value is D_P = Σ_j a_j·E[L_j]\n // with no sampling error at no more cost than sampling; coarser views keep the stratified estimator, whose cost does not\n // grow with the footprint.\n const exactView = area <= Math.min(EXACT_AREA_MEAN_MAX_PIXELS, fullK * fullK);\n const columnOverlaps = exactView ? Array.from({ length: region.width }, (_, i) => overlaps((region.x + i) * sx, (region.x + i + 1) * sx, frameWidth)) : [];\n // On the exact path a real pixel's recorded terms are shared by the 2–4 display pixels whose footprints touch it: they are\n // kept for the region's native columns in a ring of native rows (a power of two, at least twice a footprint's height plus\n // one), valid while a slot's stamp is its native row + 1.\n const exactX0 = Math.floor(region.x * sx) + margin, exactWidth = Math.min(frameWidth - 1, Math.ceil((region.x + region.width) * sx) - 1) + margin - exactX0 + 1;\n let exactRows = 1;\n while (exactRows < 2 * (Math.ceil(sy) + 1)) exactRows *= 2;\n const exactMemo = exactView && exactRows * exactWidth <= PIXEL_MEMO_LIMIT * 4;\n const exactStamp = new Int32Array(exactMemo ? exactRows * exactWidth : 0), exactRecords = new Float64Array(exactMemo ? exactRows * exactWidth * MEMO_SIZE : 0);\n const maximum = setup.bitDepth === 8 ? 255 : 65535, step = 1 / maximum;\n const pixelCount = region.width * region.height;\n const samples = setup.bitDepth === 8 ? new Uint8Array(pixelCount * 3) : new Uint16Array(pixelCount * 3);\n const expected = new Float64Array(pixelCount * 3), noiseStd = new Float64Array(pixelCount * 3);\n const columns = Array.from({ length: region.width }, (_, i) => axisSums((region.x + i) * sx, (region.x + i + 1) * sx, frameWidth, margin));\n const M = setup.matrix, m00 = M[0]![0]!, m01 = M[0]![1]!, m02 = M[0]![2]!, m10 = M[1]![0]!, m11 = M[1]![1]!, m12 = M[1]![2]!, m20 = M[2]![0]!, m21 = M[2]![1]!, m22 = M[2]![2]!;\n const g0 = setup.gains[0], g1 = setup.gains[1], g2 = setup.gains[2], L = setup.clipLevel, reinhard = setup.toneCurve === \"positive-reinhard-per-channel\";\n // Small per-render tables as Float64Arrays (#442): the same doubles as plain arrays, with one element kind for the keyed loads.\n const k = Float64Array.from(setup.readout, (r) => r.perElectron), dark = Float64Array.from(setup.readout, (r) => r.darkElectrons), c0 = Float64Array.from(setup.readout, (r) => r.constantVariance);\n // Site window: 3 × 3 for the bilinear kernels, 7 × 7 when AHD's candidates read up to 3 sites away. Slot (dy + r)·(2r + 1) + dx + r.\n const candidates = setup.candidates ?? setup.demosaic.map((phase) => [phase]);\n const reach = Math.max(1, ...candidates.flat(3).map((t) => Math.max(Math.abs(t.dx), Math.abs(t.dy)))), side = 2 * reach + 1, slotsCount = side * side;\n const slotOf = (t: DisplayViewKernelTap): number => (t.dy + reach) * side + t.dx + reach;\n const { dx: slotDx, dy: slotDy } = displayViewSlotOffsets(reach);\n // Per phase: the bilinear kernels (for the site variance of each channel), the candidates, and the slots they read.\n const phaseSlots: Int32Array[][] = [], phaseWeights: Float64Array[][] = [], phaseW2: Float64Array[] = [], phaseList: Int32Array[] = [];\n const candidateSlots: Int32Array[][][] = [], candidateWeights: Float64Array[][][] = [], candidateDense: Float64Array[][] = [], candidateList: Int32Array[][] = [];\n for (let p = 0; p < 4; p++) {\n const kernels = setup.demosaic[p]!;\n phaseSlots[p] = kernels.map((list) => Int32Array.from(list, slotOf));\n phaseWeights[p] = kernels.map((list) => Float64Array.from(list, (t) => t.weight));\n phaseW2[p] = Float64Array.from(kernels, (list) => list.reduce((sum, t) => sum + t.weight * t.weight, 0));\n candidateSlots[p] = candidates[p]!.map((candidate) => candidate.map((list) => Int32Array.from(list, slotOf)));\n candidateDense[p] = candidates[p]!.map((candidate) => { const dense = new Float64Array(3 * slotsCount); candidate.forEach((list, c) => { for (const t of list) { const i = c * slotsCount + slotOf(t); dense[i] = dense[i]! + t.weight; } }); return dense; });\n candidateWeights[p] = candidates[p]!.map((candidate) => candidate.map((list) => Float64Array.from(list, (t) => t.weight)));\n const used = new Set<number>([...phaseSlots[p]!.flatMap((a) => Array.from(a)), ...candidateSlots[p]!.flat().flatMap((a) => Array.from(a))]);\n phaseList[p] = Int32Array.from([...used].sort((a, b) => a - b));\n // The slots of phaseList (same order) where a candidate has a non-zero weight in some channel. A sum over phaseList adds\n // ±0 at the other slots, which leaves a sum that starts at +0 unchanged, so the sums below skip them.\n candidateList[p] = candidateDense[p]!.map((dense) => phaseList[p]!.filter((slot) => dense[slot] !== 0 || dense[slotsCount + slot] !== 0 || dense[2 * slotsCount + slot] !== 0));\n }\n // The same tables flat (phase·2 + candidate, ·3 + channel), read by the sample loop below.\n const { count: candidateCount, denseAt, listAt, slotsAt, weightsAt } = flatDisplayViewCandidateTables(candidateSlots, candidateWeights, candidateDense, candidateList);\n const siteElectrons = new Float64Array(slotsCount), siteMean = new Float64Array(slotsCount), siteVar = new Float64Array(slotsCount), siteThird = new Float64Array(slotsCount), siteChannel = new Int32Array(slotsCount), clip = new Float64Array(3), B = new Float64Array(4), C = new Float64Array(9);\n const cm = new Float64Array(3), cv = new Float64Array(3), csv = new Float64Array(3), bm = new Float64Array(3), bv = new Float64Array(3), bs = new Float64Array(3);\n const hm = new Float64Array(3), hv = new Float64Array(3), hs = new Float64Array(3), an = new Float64Array(9);\n const reach2 = CLIP_REACH_SIGMA * CLIP_REACH_SIGMA;\n // Site ring (#441, exact path with filled windows only): a native site's expected electrons, chart material and readout moments depend on the\n // site alone, so they are computed once per render and kept for the region's native columns (plus the reach) in a ring of\n // native rows, a power of two holding two display rows' footprints and their reach. An entry is valid while its stamp is\n // its row + 1 (negated when the window did not track materials, so a material read in one mode is never used in the other).\n // The ~27 (AHD) or ~7 (bilinear) sites a real pixel reads are copied from the ring instead of being read through the\n // signal and clipped again for each real pixel that shares them; the signal's window is still told which of its sites were\n // read (markReads), so its lookup count is the count reading them would give.\n const siteX0 = Math.max(0, Math.floor(region.x * sx) + margin - reach), siteX1 = Math.min(nativeWidth - 1, Math.ceil((region.x + region.width) * sx) - 1 + margin + reach), siteW = siteX1 - siteX0 + 1;\n let siteRows = 1;\n while (siteRows < 2 * Math.ceil(sy) + 2 + 2 * reach) siteRows *= 2;\n // Coarse (stratified) views read a few scattered real pixels per display pixel, where the ring measured slower; windows\n // without diffraction kernels read their sites from the signal's own direct ring, cheaply enough that the ring measured\n // 2–4 % slower there (Speed, #441). Both keep the per-read path below.\n const siteMask = siteRows - 1, ringCapacity = siteRows * siteW, ringUsable = exactView && ringCapacity <= SITE_RING_LIMIT;\n // Allocated at the first display pixel that uses the ring (a render whose windows never fill allocates nothing).\n let ringStamp = new Int32Array(0), ringStatStamp = ringStamp, ringMat = ringStamp, siteSlotQ = ringStamp, siteSlotStamp = ringStamp, markX = ringStamp, markY = ringStamp, markM = ringStamp;\n let ringV = new Float64Array(0), ringMean = ringV, ringVar = ringV, ringThird = ringV, markV = ringV;\n // (No closure assigns them, so they stay locals of the render loop.)\n // AHD low-signal correction: an 11 × 11 noisy neighbourhood (AHD reads up to 5 sites away) and the local AHD steps.\n const ahdCorrection = setup.ahdCorrection, windowReach = ahdCorrection ? Math.max(reach, AHD_REACH) : reach;\n const cmAverage = new Float64Array(3);\n // #457: AHD's choice on the noise-free mosaic. Per candidate the rendered mean and the camera-channel means of the sample.\n const candidateRendered = new Float64Array(6), candidateChannels = new Float64Array(6);\n /** The normalized expected value of an in-raster site, clipped at white (the noise-free mosaic AHD's choice reads). */\n const noiseFreeSite = (x: number, y: number): number => { const c = (y & 1) === 0 ? ((x & 1) === 0 ? 0 : 1) : ((x & 1) === 0 ? 1 : 2), v = k[c]! * (setup.signal.site(x, y) + dark[c]!); return v < 1 ? v : 1; };\n // The exact path keeps the region's columns for the whole render; the stratified estimator keeps one display pixel's\n // footprint at a time (its samples are scattered over it), so its plane is set to each display pixel's columns.\n let choiceRows = 1;\n while (choiceRows < Math.ceil(sy) + 2 + 2 * AHD_REACH) choiceRows *= 2;\n const choiceX0 = Math.max(0, exactX0 - AHD_REACH), choiceColumns = exactView ? Math.min(nativeWidth - 1, exactX0 + exactWidth - 1 + AHD_REACH) - choiceX0 + 1 : Math.ceil(sx) + 2 + 2 * AHD_REACH;\n const choicePlane = ahdCorrection ? createAhdDirectionPlane(ahdCorrection.labMatrix, nativeWidth, nativeHeight, choiceColumns, exactView ? 2 * choiceRows : choiceRows, noiseFreeSite) : undefined;\n if (choicePlane && exactView) choicePlane.origin(choiceX0);\n let correctedPixels = 0;\n // The correction of a flat neighbourhood whose sites of channel c have normalized mean μ_c, on a logarithmic grid of states\n // (AHD_KEY_STEPS per octave from 2^-AHD_KEY_OCTAVES of white); each grid state is computed once with draws seeded by the state\n // alone, so it is the same in every display pixel and region, and a pixel interpolates trilinearly between the 8 states\n // around its own channel means.\n // Grid states are shared across display pixels and across calls: a state depends only on its indices and on the inputs in\n // `correctionKey` (the seed, the draws, the readout scale and noise, the homogeneity matrix and the development), so a cached\n // state is the same value the draws would give again.\n // A collect pass (#447) records the grid keys its corrected samples read instead of computing or reading states, and\n // leaves the cache untouched; its image is discarded.\n const collect = setup.ahdCollect;\n const states = ahdCorrection && !collect ? correctionStates(displayViewCorrectionKey(setup)!) : { index: new Map<number, number>(), values: new Float64Array(0) };\n const gridCorrection = ahdCorrection && !collect ? createGridCorrection(setup as DisplayViewCorrectionSetup, states) : (): number => 0;\n const interpolated = new Float64Array(3);\n const gridBase = new Float64Array(3), gridFrac = new Float64Array(3);\n function flatCorrection(m0: number, m1: number, m2: number): Float64Array {\n for (let i = 0; i < 3; i++) {\n const m = i === 0 ? m0 : i === 1 ? m1 : m2, g = (portableLog2(Math.min(1, Math.max(AHD_KEY_FLOOR, m))) + AHD_KEY_OCTAVES) * AHD_KEY_STEPS;\n const base = Math.min(Math.floor(g), AHD_KEY_OCTAVES * AHD_KEY_STEPS - 1);\n gridBase[i] = base; gridFrac[i] = g - base;\n }\n interpolated.fill(0);\n for (let corner = 0; corner < 8; corner++) {\n let weight = 1;\n for (let i = 0; i < 3; i++) weight *= (corner >> i) & 1 ? gridFrac[i]! : 1 - gridFrac[i]!;\n if (weight === 0) continue;\n const i0 = gridBase[0]! + (corner & 1), i1 = gridBase[1]! + ((corner >> 1) & 1), i2 = gridBase[2]! + ((corner >> 2) & 1);\n if (collect) { collect.add((i0 * AHD_KEY_LEVELS + i1) * AHD_KEY_LEVELS + i2); continue; }\n const at = gridCorrection(i0, i1, i2), value = states.values;\n for (let comp = 0; comp < 3; comp++) interpolated[comp] = interpolated[comp]! + weight * value[at + comp]!;\n }\n return interpolated;\n }\n /** Normalized site value of a slot: normal with mean k·e and variance k²·e + constant, clipped at the white level (1). */\n function siteStatistics(slot: number): void {\n // The channel and electrons are read from the slot arrays: a double passed to a call that is not inlined is boxed.\n const c = siteChannel[slot]!, e = siteElectrons[slot]!, kc = k[c]!, mean = kc * e, variance = kc * kc * e + c0[c]!, gap = 1 - mean;\n // Third cumulant of the normalized value: Poisson electrons have κ₃ = e (read and rounding noise add none).\n siteThird[slot] = kc * kc * kc * e;\n if (gap > 0 && gap * gap > reach2 * variance) { siteMean[slot] = mean; siteVar[slot] = variance; }\n else { upperClip(mean, variance, 1, clip); siteMean[slot] = clip[0]!; siteVar[slot] = clip[1]!; }\n }\n let siteCount = 0, sampleCount = 0, detail = 0, uniform = 0, lastYield = Date.now();\n /** Recorded terms of samples whose sites all read one chart material, by material·4 + CFA phase (layout: MEMO_SIZE). */\n const sampleMemo = new Map<number, Float64Array>(), recordScratch = new Float64Array(MEMO_SIZE);\n // Per-real-pixel memo (#392): a sample's recorded terms depend only on its real pixel (its sites' expected electrons and its\n // CFA phase), not on the display pixel or the sample, so a later sample of the same real pixel in the same display pixel\n // replays them (the same values added to the same sums in the same order, as the one-material memo does). Slots cover the\n // display pixel's footprint and are valid while their stamp equals the display pixel's generation. A replayed sample still\n // counts its sites; it is used only where every site lies in the window's site cache, where reading it again would have\n // cost no work and no scene lookup.\n let pixelStamp = new Int32Array(0), pixelRecords = new Float64Array(0), pixelGeneration = 0;\n // Pilot: the scene at a deterministic grid over each display pixel's footprint widened by the reach; a pixel is uniform when\n // every point returns the same value. Pixels next to a detailed pixel count as detailed too, so an edge that only clips a\n // footprint's corner (too thin for the grid) still gets the full samples. The grid is fixed, so the sample count is not\n // random and the estimate stays unbiased either way.\n const pilotUniform = (vx: number, vy: number): boolean => {\n const ax0 = vx * sx + margin - reachSites, ax1 = (vx + 1) * sx + margin + reachSites, ay0 = vy * sy + margin - reachSites, ay1 = (vy + 1) * sy + margin + reachSites;\n const px = pilotCount(ax1 - ax0), py = pilotCount(ay1 - ay0);\n let first = NaN;\n for (let j = 0; j < py; j++) {\n const v = -(ay0 + (j + 0.5) * (ay1 - ay0) / py - nativeHeight / 2) * g;\n for (let i = 0; i < px; i++) {\n const value = setup.signal.pilot((ax0 + (i + 0.5) * (ax1 - ax0) / px - nativeWidth / 2) * g, v);\n if (i === 0 && j === 0) first = value; else if (value !== first) return false;\n }\n }\n return true;\n };\n // Pilot flags for the region and a one-pixel ring (clipped to the view), three rows at a time.\n const ringWidth = region.width + 2, flagRows: Uint8Array[] = [];\n const pilotRow = (vy: number): Uint8Array => {\n const row = new Uint8Array(ringWidth);\n // The exact area mean needs no pilot: every pixel evaluates its whole footprint.\n if (exactView || vy < 0 || vy >= viewHeight) return row.fill(1);\n for (let i = 0; i < ringWidth; i++) { const vx = region.x - 1 + i; row[i] = vx < 0 || vx >= viewWidth ? 1 : pilotUniform(vx, vy) ? 1 : 0; }\n return row;\n };\n flagRows.push(pilotRow(region.y - 1), pilotRow(region.y));\n for (let ry = 0; ry < region.height; ry++) {\n const vy = region.y + ry, rows = axisSums(vy * sy, (vy + 1) * sy, frameHeight, margin), rowOverlaps = exactView ? overlaps(vy * sy, (vy + 1) * sy, frameHeight) : undefined;\n flagRows.push(pilotRow(vy + 1));\n if (flagRows.length > 3) flagRows.shift();\n for (let rx = 0; rx < region.width; rx++) {\n const vx = region.x + rx, index = vy * viewWidth + vx;\n footprintWeights(columns[rx]!, rows, area, B);\n let same = true;\n for (let j = 0; j < 3 && same; j++) for (let i = rx; i <= rx + 2; i++) if (flagRows[j]![i] === 0) { same = false; break; }\n const K = same ? uniformK : fullK, Q = K * K;\n // On the exact path every pixel counts as detailed (its whole footprint is evaluated).\n if (exactView) detail++; else if (same) uniform++; else detail++;\n const cols = exactView ? columnOverlaps[rx]! : undefined, nx = cols ? cols.w.length : 0, sampleTotal = exactView ? nx * rowOverlaps!.w.length : Q;\n const wx0 = Math.floor(vx * sx) + margin - windowReach, wy0 = Math.floor(vy * sy) + margin - windowReach;\n const wx1 = Math.ceil((vx + 1) * sx) + margin + windowReach, wy1 = Math.ceil((vy + 1) * sy) + margin + windowReach;\n setup.signal.window(wx0, wy0, wx1, wy1);\n // The jitter stream is only drawn from by the stratified estimator; the exact path reads no jitter.\n const jitter = exactView ? undefined : createDeterministicUniformStream(deriveNativeSiteStreamSeedUint32(seed, index, DISPLAY_VIEW_JITTER_STREAM_ID)), tracking = setup.signal.tracksMaterial;\n const ringOn = ringUsable && setup.signal.marksReads, ringSign = tracking ? 1 : -1;\n if (ringOn && ringStamp.length === 0) {\n ringStamp = new Int32Array(ringCapacity); ringStatStamp = new Int32Array(ringCapacity); ringMat = new Int32Array(ringCapacity);\n ringV = new Float64Array(ringCapacity); ringMean = new Float64Array(ringCapacity); ringVar = new Float64Array(ringCapacity); ringThird = new Float64Array(ringCapacity);\n siteSlotQ = new Int32Array(slotsCount); siteSlotStamp = new Int32Array(slotsCount);\n markX = new Int32Array(slotsCount); markY = new Int32Array(slotsCount); markV = new Float64Array(slotsCount); markM = new Int32Array(slotsCount);\n }\n const mx0 = Math.floor(vx * sx) + margin, my0 = Math.floor(vy * sy) + margin;\n if (choicePlane && !exactView) choicePlane.origin(Math.max(0, mx0 - AHD_REACH));\n const mw = Math.min(frameWidth - 1, Math.ceil((vx + 1) * sx)) + margin - mx0 + 1, mh = Math.min(frameHeight - 1, Math.ceil((vy + 1) * sy)) + margin - my0 + 1;\n const pixelMemo = !exactView && setup.signal.cachesSites && mw * mh <= PIXEL_MEMO_LIMIT;\n if (pixelMemo) {\n if (pixelStamp.length < mw * mh) { pixelStamp = new Int32Array(mw * mh); pixelRecords = new Float64Array(mw * mh * MEMO_SIZE); pixelGeneration = 0; }\n pixelGeneration++;\n }\n let s0 = 0, s1 = 0, s2 = 0, c00 = 0, c01 = 0, c02 = 0, c11 = 0, c12 = 0, c22 = 0, r0 = 0, r1 = 0, r2 = 0, pixelVariance = 0, corrected = false;\n for (let n = 0; n < sampleTotal; n++) {\n // A sample's weights: 1 for the stratified estimator (its sums are divided by Q below); a_j for the expected value and\n // linear covariance and a_j² for the independent residual on the exact path. Multiplying by 1 leaves every value's bits.\n let x: number, y: number, wE = 1, wR = 1;\n if (cols) {\n const i = n % nx, j = (n - i) / nx, aj = cols.w[i]! * rowOverlaps!.w[j]! / area;\n x = cols.first + i + margin; y = rowOverlaps!.first + j + margin; wE = aj; wR = aj * aj;\n } else {\n const a = n % K, b = (n - a) / K;\n const fx = (vx + (a + jitter!.next()) / K) * sx, fy = (vy + (b + jitter!.next()) / K) * sy;\n x = Math.min(frameWidth - 1, Math.floor(fx)) + margin; y = Math.min(frameHeight - 1, Math.floor(fy)) + margin;\n }\n const phase = (y & 1) * 2 + (x & 1), list = phaseList[phase]!;\n let material = -2, statistics = false;\n const px = x - mx0, py = y - my0;\n const inside = x >= reach && y >= reach && x + reach < nativeWidth && y + reach < nativeHeight;\n const stamps = exactMemo ? exactStamp : pixelStamp, records = exactMemo ? exactRecords : pixelRecords, stamp = exactMemo ? y + 1 : pixelGeneration;\n const pk = exactMemo ? (inside && x >= exactX0 && x - exactX0 < exactWidth ? (y & (exactRows - 1)) * exactWidth + x - exactX0 : -1)\n : pixelMemo && px >= 0 && py >= 0 && px < mw && py < mh && inside ? py * mw + px : -1;\n let memo: Float64Array | undefined, mo = 0;\n if (pk >= 0 && stamps[pk] === stamp) { memo = records; mo = pk * MEMO_SIZE; siteCount += list.length; }\n // The expected electrons of the sites the demosaic reads (sites outside the raster, at mirror borders, are read\n // reflect-101); where the signal tracks it, whether they all read one chart material, with the statistics below only\n // when the sample is not replayed; otherwise the statistics at once.\n if (!memo && ringOn) {\n let marks = 0;\n for (let li = 0; li < list.length; li++) {\n const slot = list[li]!;\n siteCount++;\n let sxs = x + slotDx[slot]!, sys = y + slotDy[slot]!;\n if (sxs < 0) sxs = -sxs; else if (sxs >= nativeWidth) sxs = 2 * nativeWidth - 2 - sxs;\n if (sys < 0) sys = -sys; else if (sys >= nativeHeight) sys = 2 * nativeHeight - 2 - sys;\n const c = (sys & 1) === 0 ? ((sxs & 1) === 0 ? 0 : 1) : ((sxs & 1) === 0 ? 1 : 2);\n siteChannel[slot] = c;\n // The site's ring entry, for a site inside the ring's columns and the signal's window (a site outside the window\n // is read through the signal, which counts it as it counts any read outside its window).\n const rowStamp = ringSign * (sys + 1), q = ringOn && sxs >= siteX0 && sxs <= siteX1 && sxs >= wx0 && sxs < wx1 && sys >= wy0 && sys < wy1 ? (sys & siteMask) * siteW + sxs - siteX0 : -1;\n siteSlotQ[slot] = q; siteSlotStamp[slot] = rowStamp;\n let e: number;\n if (q >= 0 && ringStamp[q] === rowStamp) {\n // The value and material the signal returned for this site; the window is told it was read (markReads below).\n const v = ringV[q]!, own = ringMat[q]!;\n e = v + dark[c]!;\n markX[marks] = sxs; markY[marks] = sys; markV[marks] = v; markM[marks] = own; marks++;\n if (tracking) { siteElectrons[slot] = e; material = material === -2 || material === own ? own : -1; continue; }\n } else {\n const v = setup.signal.site(sxs, sys), own = tracking ? setup.signal.uniformMaterial : -1;\n e = v + dark[c]!;\n if (q >= 0) { ringStamp[q] = rowStamp; ringV[q] = v; ringMat[q] = own; ringStatStamp[q] = 0; }\n if (tracking) { siteElectrons[slot] = e; material = material === -2 || material === own ? own : -1; continue; }\n }\n if (q >= 0 && ringStatStamp[q] === rowStamp) { siteMean[slot] = ringMean[q]!; siteVar[slot] = ringVar[q]!; siteThird[slot] = ringThird[q]!; continue; }\n // As siteStatistics, written out here for the untracked (Speed) path.\n const kc = k[c]!, mean = kc * e, variance = kc * kc * e + c0[c]!, gap = 1 - mean, third = kc * kc * kc * e;\n let sm: number, sv: number;\n if (gap > 0 && gap * gap > reach2 * variance) { sm = mean; sv = variance; }\n else { upperClip(mean, variance, 1, clip); sm = clip[0]!; sv = clip[1]!; }\n siteMean[slot] = sm; siteVar[slot] = sv; siteThird[slot] = third;\n if (q >= 0) { ringStatStamp[q] = rowStamp; ringMean[q] = sm; ringVar[q] = sv; ringThird[q] = third; }\n }\n if (marks > 0) setup.signal.markReads(markX, markY, markV, markM, marks);\n } else if (!memo) for (let li = 0; li < list.length; li++) {\n // Without the ring (coarse views, windows without diffraction kernels or with lazy caches): each site through the signal.\n const slot = list[li]!;\n siteCount++;\n let sxs = x + slotDx[slot]!, sys = y + slotDy[slot]!;\n if (sxs < 0) sxs = -sxs; else if (sxs >= nativeWidth) sxs = 2 * nativeWidth - 2 - sxs;\n if (sys < 0) sys = -sys; else if (sys >= nativeHeight) sys = 2 * nativeHeight - 2 - sys;\n const c = (sys & 1) === 0 ? ((sxs & 1) === 0 ? 0 : 1) : ((sxs & 1) === 0 ? 1 : 2);\n const e = setup.signal.site(sxs, sys) + dark[c]!;\n siteChannel[slot] = c;\n if (tracking && !statistics) {\n siteElectrons[slot] = e; const own = setup.signal.uniformMaterial; material = material === -2 || material === own ? own : -1;\n if (material >= 0) continue;\n // The first site of a second material: the sample is not replayed, so the statistics are taken now, for the earlier\n // sites and inline from this site on, instead of in a second pass (#444; each site's statistics depend on its own\n // slot only, so the order leaves every value's bits).\n statistics = true;\n for (let lj = 0; lj < li; lj++) siteStatistics(list[lj]!);\n }\n // As siteStatistics, written out here for the untracked (Speed) path.\n const kc = k[c]!, mean = kc * e, variance = kc * kc * e + c0[c]!, gap = 1 - mean;\n siteThird[slot] = kc * kc * kc * e;\n if (gap > 0 && gap * gap > reach2 * variance) { siteMean[slot] = mean; siteVar[slot] = variance; }\n else { upperClip(mean, variance, 1, clip); siteMean[slot] = clip[0]!; siteVar[slot] = clip[1]!; }\n }\n if (!tracking) material = -1;\n // A sample whose sites all read one chart material only has the statistics of every other such sample of that material\n // and CFA phase: replay its recorded terms (the same values added to the same sums in the same order).\n const memoKey = !memo && material >= 0 ? material * 4 + phase : -1;\n if (memoKey >= 0) {\n memo = sampleMemo.get(memoKey);\n if (memo && pk >= 0) { records.set(memo, pk * MEMO_SIZE); stamps[pk] = stamp; }\n }\n const count = candidateCount, share = 1 / count;\n if (memo) {\n for (let d = 0; d < count; d++) {\n for (let c = 0; c < 3; c++) {\n const o = mo + 3 + (d * 3 + c) * 3, a0 = memo[o]!, a1 = memo[o + 1]!, a2 = memo[o + 2]!, wgt = wE * share * B[c]! * memo[mo + c]!;\n c00 += wgt * a0 * a0; c01 += wgt * a0 * a1; c02 += wgt * a0 * a2; c11 += wgt * a1 * a1; c12 += wgt * a1 * a2; c22 += wgt * a2 * a2;\n }\n r0 += wR * memo[mo + 21 + d * 3]!; r1 += wR * memo[mo + 22 + d * 3]!; r2 += wR * memo[mo + 23 + d * 3]!;\n }\n s0 += wE * memo[mo + 27]!; s1 += wE * memo[mo + 28]!; s2 += wE * memo[mo + 29]!;\n if (count === 2) { r0 += wR * memo[mo + 30]!; r1 += wR * memo[mo + 31]!; r2 += wR * memo[mo + 32]!; }\n if (memo[mo + 33] === 1) { s0 += wE * memo[mo + 34]!; s1 += wE * memo[mo + 35]!; s2 += wE * memo[mo + 36]!; corrected = true; }\n continue;\n }\n // The terms are written where they are kept: the real pixel's memo slot, or (for the first sample of a one-material key)\n // a scratch buffer that is then copied; no typed-array view per sample.\n const rt = memoKey >= 0 ? recordScratch : pk >= 0 ? records : undefined, ro = memoKey < 0 && pk >= 0 ? pk * MEMO_SIZE : 0;\n // Every field of the record (MEMO_SIZE layout) that the propagation below does not write for this sample is zeroed, as a\n // fill of the whole record would leave it. Always written: [0, 3), [27, 30) and candidate 0's [3, 12) and [21, 24); with\n // two candidates also candidate 1's [12, 21) and [24, 27) and the choice terms [30, 33); [33, 37) only with the AHD\n // correction.\n if (rt) {\n if (count === 1) { for (let o = 12; o < 21; o++) rt[ro + o] = 0; rt[ro + 24] = 0; rt[ro + 25] = 0; rt[ro + 26] = 0; rt[ro + 30] = 0; rt[ro + 31] = 0; rt[ro + 32] = 0; }\n rt[ro + 33] = 0; rt[ro + 34] = 0; rt[ro + 35] = 0; rt[ro + 36] = 0;\n }\n if (tracking && !ringOn) { if (!statistics) for (let li = 0; li < list.length; li++) siteStatistics(list[li]!); }\n else if (tracking) for (let li = 0; li < list.length; li++) {\n const slot = list[li]!, q = siteSlotQ[slot]!, rowStamp = siteSlotStamp[slot]!;\n if (q >= 0 && ringStatStamp[q] === rowStamp) { siteMean[slot] = ringMean[q]!; siteVar[slot] = ringVar[q]!; siteThird[slot] = ringThird[q]!; continue; }\n siteStatistics(slot);\n if (q >= 0) { ringStatStamp[q] = rowStamp; ringMean[q] = siteMean[slot]!; ringVar[q] = siteVar[slot]!; ringThird[q] = siteThird[slot]!; }\n }\n // Site variance of each channel through the bilinear kernels (for B_c), then the demosaic's own pixel statistics: the\n // mean and covariance of its camera channels, averaged over its candidates (AHD picks one per pixel).\n const slots = phaseSlots[phase]!, weights = phaseWeights[phase]!, w2 = phaseW2[phase]!;\n for (let c = 0; c < 3; c++) {\n const sl = slots[c]!, wt = weights[c]!;\n let variance = 0;\n for (let t = 0; t < sl.length; t++) variance += wt[t]! * wt[t]! * siteVar[sl[t]!]!;\n csv[c] = variance / w2[c]!;\n }\n // Each candidate of the demosaic (one for bilinear; AHD's horizontal and vertical ones, of which AHD picks one per pixel)\n // is propagated on its own: camera-channel mean and covariance, white balance and highlight clip, colour matrix and\n // rendering; the pixel's statistics are their average.\n let e0 = 0, e1 = 0, e2 = 0;\n for (let d = 0; d < count; d++) {\n for (let c = 0; c < 3; c++) {\n const sl = slotsAt[(phase * 2 + d) * 3 + c]!, wt = weightsAt[(phase * 2 + d) * 3 + c]!;\n let mean = 0;\n for (let t = 0; t < sl.length; t++) mean += wt[t]! * siteMean[sl[t]!]!;\n cm[c] = mean;\n cmAverage[c] = (d === 0 ? 0 : cmAverage[c]!) + mean * share;\n }\n // Covariance of channels i, j: Σ over the sites of w_i·w_j·Var(site), with the kernels as dense weights over the window.\n const dense = denseAt[phase * 2 + d]!, list = listAt[phase * 2 + d]!;\n let v00 = 0, v01 = 0, v02 = 0, v11 = 0, v12 = 0, v22 = 0;\n for (let li = 0; li < list.length; li++) {\n const slot = list[li]!, v = siteVar[slot]!, w0 = dense[slot]!, w1 = dense[slotsCount + slot]!, w2 = dense[2 * slotsCount + slot]!;\n v00 += w0 * w0 * v; v01 += w0 * w1 * v; v02 += w0 * w2 * v; v11 += w1 * w1 * v; v12 += w1 * w2 * v; v22 += w2 * w2 * v;\n }\n C[0] = v00; C[1] = v01; C[2] = v02; C[3] = v01; C[4] = v11; C[5] = v12; C[6] = v02; C[7] = v12; C[8] = v22;\n // White balance and the highlight clip at the smallest gain (per channel; covariances scaled by the expected slopes).\n for (let c = 0; c < 3; c++) {\n const mean = cm[c]!, variance = C[c * 4]!;\n cv[c] = variance;\n const gc = c === 0 ? g0 : c === 1 ? g1 : g2, um = gc * mean, uv = gc * gc * variance, gap = L - um;\n if (gap > 0 && gap * gap > reach2 * uv) { bm[c] = um; bv[c] = uv; bs[c] = gc; }\n else { upperClip(um, uv, L, clip); bm[c] = clip[0]!; bv[c] = clip[1]!; bs[c] = gc * clip[2]!; }\n }\n // Colour matrix, then the rendering of each component (tone curve, clip to [0, 1]).\n for (let comp = 0; comp < 3; comp++) {\n const r0m = comp === 0 ? m00 : comp === 1 ? m10 : m20, r1m = comp === 0 ? m01 : comp === 1 ? m11 : m21, r2m = comp === 0 ? m02 : comp === 1 ? m12 : m22;\n const mean = r0m * bm[0]! + r1m * bm[1]! + r2m * bm[2]!;\n const variance = r0m * r0m * bv[0]! + r1m * r1m * bv[1]! + r2m * r2m * bv[2]! +\n 2 * (r0m * r1m * bs[0]! * bs[1]! * C[1]! + r0m * r2m * bs[0]! * bs[2]! * C[2]! + r1m * r2m * bs[1]! * bs[2]! * C[5]!);\n if (!reinhard && mean > 0 && mean < 1 && mean * mean > reach2 * variance && (1 - mean) * (1 - mean) > reach2 * variance) { hm[comp] = mean; hv[comp] = variance; hs[comp] = 1; }\n else if (reinhard) { reinhardMoments(mean, variance, clip); hm[comp] = clip[0]!; hv[comp] = clip[1]!; hs[comp] = clip[2]!; }\n else {\n // The component is a linear combination of the sites: κ₃ = Σ (Σ_c M·Γ_c·w_c,site)³·κ₃(site).\n const dense = denseAt[phase * 2 + d]!, list = listAt[phase * 2 + d]!;\n let third = 0;\n for (let li = 0; li < list.length; li++) {\n const slot = list[li]!, coefficient = r0m * bs[0]! * dense[slot]! + r1m * bs[1]! * dense[slotsCount + slot]! + r2m * bs[2]! * dense[2 * slotsCount + slot]!;\n third += coefficient * coefficient * coefficient * siteThird[slot]!;\n }\n unitClip(mean, variance, clip, variance > 0 ? third / (variance * Math.sqrt(variance)) : 0);\n hm[comp] = clip[0]!; hv[comp] = clip[1]!; hs[comp] = clip[2]!;\n }\n }\n e0 += share * hm[0]!; e1 += share * hm[1]!; e2 += share * hm[2]!;\n candidateRendered[3 * d] = hm[0]!; candidateRendered[3 * d + 1] = hm[1]!; candidateRendered[3 * d + 2] = hm[2]!;\n candidateChannels[3 * d] = cm[0]!; candidateChannels[3 * d + 1] = cm[1]!; candidateChannels[3 * d + 2] = cm[2]!;\n // Linear (Stein) part: a_c = J ∘ M[:, c]·Γ_c, accumulated with B_c·σ_c² (site variance of channel c); the pixel's own\n // linear variance (aᵀ·C·a, full channel covariance) for the residual.\n let l0 = 0, l1 = 0, l2 = 0;\n for (let c = 0; c < 3; c++) {\n const a0 = hs[0]! * (c === 0 ? m00 : c === 1 ? m01 : m02) * bs[c]!, a1 = hs[1]! * (c === 0 ? m10 : c === 1 ? m11 : m12) * bs[c]!, a2 = hs[2]! * (c === 0 ? m20 : c === 1 ? m21 : m22) * bs[c]!;\n const wgt = wE * share * B[c]! * csv[c]!;\n c00 += wgt * a0 * a0; c01 += wgt * a0 * a1; c02 += wgt * a0 * a2; c11 += wgt * a1 * a1; c12 += wgt * a1 * a2; c22 += wgt * a2 * a2;\n an[c] = a0; an[3 + c] = a1; an[6 + c] = a2;\n if (rt) { const o = 3 + (d * 3 + c) * 3; rt[ro + o] = a0; rt[ro + o + 1] = a1; rt[ro + o + 2] = a2; }\n }\n for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) { const cij = C[i * 3 + j]!; l0 += an[i]! * an[j]! * cij; l1 += an[3 + i]! * an[3 + j]! * cij; l2 += an[6 + i]! * an[6 + j]! * cij; }\n const t0 = share * Math.max(0, hv[0]! - l0), t1 = share * Math.max(0, hv[1]! - l1), t2 = share * Math.max(0, hv[2]! - l2);\n r0 += wR * t0; r1 += wR * t1; r2 += wR * t2;\n if (rt) { rt[ro + 21 + d * 3] = t0; rt[ro + 22 + d * 3] = t1; rt[ro + 23 + d * 3] = t2; }\n // Two-argument maxima (inlined; the same value as one four-argument Math.max, which V8 calls with boxed arguments).\n pixelVariance = Math.max(Math.max(pixelVariance, hv[0]!), Math.max(hv[1]!, hv[2]!));\n }\n // #457: AHD chooses one candidate per pixel by homogeneity. Where the scene decides that choice (structure finer than a\n // few sites, such as a Siemens star's centre), the expected value is the chosen candidate's, not the candidates' average:\n // the steps run on the noise-free mosaic (the expected normalized site values, clipped at white, mirrored at the raster\n // edges as the capture's AHD reads them), and a decided direction takes that candidate's rendered mean. A tie (every flat\n // neighbourhood, where the noise decides) keeps the average, and the low-signal correction below stays the noise's\n // bias of a flat neighbourhood. Skipped where the two candidates' channel means are equal (the choice cannot change the\n // value) and for one-material samples (equal up to rounding; their memo is keyed by material and phase, not by the\n // patch). The noise terms are unchanged.\n if (choicePlane && count === 2 && memoKey < 0 && (candidateChannels[0] !== candidateChannels[3] || candidateChannels[1] !== candidateChannels[4] || candidateChannels[2] !== candidateChannels[5])) {\n const direction = choicePlane.direction(x, y);\n if (direction !== 2) { e0 = candidateRendered[3 * direction]!; e1 = candidateRendered[3 * direction + 1]!; e2 = candidateRendered[3 * direction + 2]!; }\n }\n s0 += wE * e0; s1 += wE * e1; s2 += wE * e2;\n if (rt) { rt[ro + 0] = csv[0]!; rt[ro + 1] = csv[1]!; rt[ro + 2] = csv[2]!; rt[ro + 27] = e0; rt[ro + 28] = e1; rt[ro + 29] = e2; }\n if (count === 2) {\n // AHD's per-pixel choice between the candidates adds independent variance: with a noise-driven choice each pixel\n // deviates from the candidates' average by ±½(H − V), variance ¼·Var(H − V) (linear in the sites, at the last\n // candidate's slopes).\n const dh = denseAt[phase * 2]!, dv = denseAt[phase * 2 + 1]!, list = phaseList[phase]!;\n let x0 = 0, x1 = 0, x2 = 0;\n for (let li = 0; li < list.length; li++) {\n const slot = list[li]!, d0 = bs[0]! * (dh[slot]! - dv[slot]!), d1 = bs[1]! * (dh[slotsCount + slot]! - dv[slotsCount + slot]!), d2 = bs[2]! * (dh[2 * slotsCount + slot]! - dv[2 * slotsCount + slot]!);\n const v = siteVar[slot]!, a = hs[0]! * (m00 * d0 + m01 * d1 + m02 * d2), b = hs[1]! * (m10 * d0 + m11 * d1 + m12 * d2), c = hs[2]! * (m20 * d0 + m21 * d1 + m22 * d2);\n x0 += a * a * v; x1 += b * b * v; x2 += c * c * v;\n }\n r0 += wR * (x0 / 4); r1 += wR * (x1 / 4); r2 += wR * (x2 / 4);\n if (rt) { rt[ro + 30] = x0 / 4; rt[ro + 31] = x1 / 4; rt[ro + 32] = x2 / 4; }\n }\n // AHD at low signal: its homogeneity choice reacts to the noise, which the linear candidates cannot express. A sample\n // whose pixel noise exceeds the threshold adds the correction of a flat neighbourhood with its channel means, from the\n // shared grid of states (flatCorrection): there AHD and the two linear candidates run on the same drawn neighbourhoods\n // and the difference of the rendered results is averaged, a control variate whose expectation is the AHD bias\n // (docs/DISPLAY_VIEW.md).\n if (ahdCorrection && pixelVariance > ahdCorrection.thresholdVariance) {\n const fix = flatCorrection(cmAverage[0]!, cmAverage[1]!, cmAverage[2]!);\n s0 += wE * fix[0]!; s1 += wE * fix[1]!; s2 += wE * fix[2]!; corrected = true;\n if (rt) { rt[ro + 33] = 1; rt[ro + 34] = fix[0]!; rt[ro + 35] = fix[1]!; rt[ro + 36] = fix[2]!; }\n }\n if (rt && memoKey >= 0) { sampleMemo.set(memoKey, rt.slice()); if (pk >= 0) records.set(rt, pk * MEMO_SIZE); }\n if (pk >= 0) stamps[pk] = stamp;\n pixelVariance = 0;\n }\n sampleCount += sampleTotal;\n if (corrected) correctedPixels++;\n // Stratified: means over Q samples. Exact: the weights already sum to 1 (Σ a_j = 1) and the residual carries Σ a_j²·r_j.\n const Qd = exactView ? 1 : Q, mean0 = s0 / Qd, mean1 = s1 / Qd, mean2 = s2 / Qd, pixels = B[3]!;\n // The real pixels' output rounding (Δ²/12 in the encoded domain), mapped to linear light at the mean.\n const q0 = quantizationVariance(mean0, step), q1 = quantizationVariance(mean1, step), q2 = quantizationVariance(mean2, step);\n // Covariance in linear light: the linear part plus the independent per-pixel residuals and rounding.\n const v00 = exactView ? c00 + r0 + pixels * q0 : c00 / Q + pixels * (r0 / Q + q0), v01 = c01 / Qd, v02 = c02 / Qd,\n v11 = exactView ? c11 + r1 + pixels * q1 : c11 / Q + pixels * (r1 / Q + q1), v12 = c12 / Qd, v22 = exactView ? c22 + r2 + pixels * q2 : c22 / Q + pixels * (r2 / Q + q2);\n const noise = createDeterministicUniformStream(deriveNativeSiteStreamSeedUint32(seed, index, DISPLAY_VIEW_NOISE_STREAM_ID));\n const z0 = samplePortableStandardNormal(noise), z1 = samplePortableStandardNormal(noise), z2 = samplePortableStandardNormal(noise);\n // Cholesky factor of the 3 × 3 covariance (positive semidefinite; tiny negative pivots are treated as 0).\n const l00 = Math.sqrt(Math.max(0, v00)), l10 = l00 > 0 ? v01 / l00 : 0, l20 = l00 > 0 ? v02 / l00 : 0;\n const l11 = Math.sqrt(Math.max(0, v11 - l10 * l10)), l21 = l11 > 0 ? (v12 - l20 * l10) / l11 : 0;\n const l22 = Math.sqrt(Math.max(0, v22 - l20 * l20 - l21 * l21));\n const o = (ry * region.width + rx) * 3;\n // The drawn value is clipped to [0, 1] like any light level; where the noise reaches a bound, the normal's centre is\n // moved so that the clipped draw keeps the expected value (the mean of real pixels in [0, 1] is in [0, 1] already).\n const n0 = clipCentre(mean0, v00) + l00 * z0, n1 = clipCentre(mean1, v11) + l10 * z0 + l11 * z1, n2 = clipCentre(mean2, v22) + l20 * z0 + l21 * z1 + l22 * z2;\n samples[o] = Math.round(encodeSrgbComponentPortable(n0 < 0 ? 0 : n0 > 1 ? 1 : n0) * maximum);\n samples[o + 1] = Math.round(encodeSrgbComponentPortable(n1 < 0 ? 0 : n1 > 1 ? 1 : n1) * maximum);\n samples[o + 2] = Math.round(encodeSrgbComponentPortable(n2 < 0 ? 0 : n2 > 1 ? 1 : n2) * maximum);\n expected[o] = mean0; expected[o + 1] = mean1; expected[o + 2] = mean2;\n noiseStd[o] = Math.sqrt(Math.max(0, v00)); noiseStd[o + 1] = Math.sqrt(Math.max(0, v11)); noiseStd[o + 2] = Math.sqrt(Math.max(0, v22));\n // The clock is read every 16 display pixels and at the end of each row (yield timing never changes the output).\n if (((rx & 15) === 15 || rx === region.width - 1) && Date.now() - lastYield >= 8) { await setup.yieldControl(); setup.checkAbort(); lastYield = Date.now(); }\n }\n }\n return { samples, expected, noiseStd, sampleCount, siteCount, detailPixelCount: detail, uniformPixelCount: uniform, ahdCorrectedPixelCount: correctedPixels,\n estimation: exactView ? \"exact-area-mean\" : \"stratified-monte-carlo\" };\n}\n\n/**\n * The centre c of a normal of variance v whose clip to [0, 1] has mean `target` (bisection; c = target when the noise does\n * not reach a bound, or when the target lies outside (0, 1)).\n */\nexport function clipCentre(target: number, v: number): number {\n if (!(v > 0) || !(target > 0 && target < 1)) return target;\n const s = Math.sqrt(v);\n if (target > 4 * s && 1 - target > 4 * s) return target;\n const moments = new Float64Array(3);\n let lo = target - 10 * s, hi = target + 10 * s;\n for (let i = 0; i < 60; i++) { const mid = (lo + hi) / 2; unitClip(mid, v, moments); if (moments[0]! < target) lo = mid; else hi = mid; }\n return (lo + hi) / 2;\n}\n/** Variance in linear light of rounding an sRGB-encoded value to steps of `step`: (dEOTF/de)²·step²/12 at the encoded mean. */\nexport function quantizationVariance(linear: number, step: number): number {\n const e = encodeSrgbComponentPortable(linear < 0 ? 0 : linear > 1 ? 1 : linear), slope = e <= 0.04045 ? 1 / 12.92 : 2.4 / 1.055 * portablePow((e + 0.055) / 1.055, 1.4);\n return slope * slope * step * step / 12;\n}\n"]}
|