"""Test big-endian float32 interpretation of OneOCRFeatureExtract config blob.""" import onnx import numpy as np from pathlib import Path models_dir = Path("oneocr_extracted/onnx_models") model = onnx.load(str(list(models_dir.glob("model_11_*"))[0])) # Get config blob for init in model.graph.initializer: if init.name == "feature/config": blob = bytes(init.string_data[0]) break print(f"Blob: {len(blob)} bytes = {len(blob) // 4} float32s") # Big-endian float32 be_arr = np.frombuffer(blob, dtype='>f4') # big-endian le_arr = np.frombuffer(blob, dtype=' in_d * out_d * 0.7: print(f" *** header={header} + W[{in_d}×{out_d}] + b[{out_d}]") print(f" W finite={w_finite}, reasonable={w_reasonable}") print(f" W range: [{W[np.isfinite(W)].min():.4f}, {W[np.isfinite(W)].max():.4f}]") print(f" b range: [{b[np.isfinite(b)].min():.4f}, {b[np.isfinite(b)].max():.4f}]") # Also test: could be byteswapped structure with header # Try offset by checking where the "nice" values start print(f"\n--- Finding good float32 regions (big-endian) ---") for start_byte in range(0, 100, 4): chunk = np.frombuffer(blob[start_byte:start_byte+84], dtype='>f4') all_reasonable = all(np.isfinite(chunk)) and all(np.abs(chunk) < 10) if all_reasonable: print(f" offset={start_byte}: ALL 21 values reasonable: {chunk}") break decent = np.sum((np.abs(chunk) < 10) & np.isfinite(chunk)) if decent >= 18: print(f" offset={start_byte}: {decent}/21 reasonable: {chunk}")