summaryrefslogtreecommitdiff
path: root/training/test_viz_precision.py
blob: 143f4ea90d4444722105bb321980043b47364303 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/env python3
"""Test WebGPU → Canvas → PNG precision loss

Check if bgra8unorm → 2D canvas → PNG loses 2 LSBs.
"""

import numpy as np

# Simulate WebGPU bgra8unorm conversion
# Float [0, 1] → uint8 [0, 255]

test_values = [
    1.0,      # Perfect white
    0.9999,   # Near-white
    254.5/255,  # Exactly 254.5
    253.5/255,  # Exactly 253.5
]

for val in test_values:
    # WebGPU bgra8unorm: round(val * 255)
    gpu_u8 = int(np.round(val * 255))

    # Convert back to normalized
    gpu_f32 = gpu_u8 / 255.0

    # JavaScript canvas getImageData: uint8
    canvas_u8 = int(np.round(gpu_f32 * 255))

    print(f"Input: {val:.6f} → GPU u8: {gpu_u8} → Canvas: {canvas_u8}")
    if canvas_u8 != 255:
        print(f"  ⚠️ Lost {255 - canvas_u8} LSBs")

print("\nConclusion:")
print("If WebGPU stores 1.0 as 255, canvas should read 255.")
print("If user sees 253, likely:")
print("  a) Not viewing CNN layer (viewing static features at scale=1.0)")
print("  b) Value in texture is already 253/255 = 0.9921875")
print("  c) F16 storage or unpacking issue")