"""CPU-only fixed-window observation tests; no GPU or simulated acceptance.""" from contextlib import redirect_stdout from io import StringIO from pathlib import Path from tempfile import TemporaryDirectory from types import SimpleNamespace, ModuleType from unittest.mock import patch import json import sys import unittest import numpy as np sys.path.insert(0,str(Path(__file__).resolve().parent)) import diagnose_uniform_srt as d def test_raw_bits_copy_and_prefix(): flags=np.ones((12,20),np.uint16);p=dict(dt=.25,mean_speed=.01,diameter=80) h=d.InletHistory(flags,p) raw=np.arange(9*12*20,dtype=np.uint32).reshape(9,12,20).view(np.float32) raw[0,0,0]=np.float32(-0.) expected=raw[:,:,:4].view(np.uint32).copy() h.record(dict(raw=raw,step=0)); raw.fill(7); flags.fill(0) h.record(dict(raw=raw,step=1)) with TemporaryDirectory() as temp: receipt=h.save(Path(temp),1);z=np.load(Path(temp)/'inlet_history.npz') np.testing.assert_array_equal(z['raw_shifted'][0].view(np.uint32),expected) assert np.all(z['flags']==1) np.testing.assert_array_equal(z['steps'],[0,1]) np.testing.assert_array_equal(z['time_s'],[0,.25]) np.testing.assert_array_equal(z['tstar'],[0,.01/80]) assert not receipt['complete_for_requested_window'] and receipt['diagnostic_terminal_step']==1 def test_fixed_window_bound_and_late_stop(): flags=np.ones((330,1761),np.uint16);p=dict(dt=.1,mean_speed=.01,diameter=80) h=d.InletHistory(flags,p);raw=np.zeros((9,330,4),np.float32) for step in range(321):h.record(dict(raw=raw,step=step)) assert len(h.frames)==197 with TemporaryDirectory() as temp: r=h.save(Path(temp),320) assert r['complete_for_requested_window'] and r['last_step']==196 and r['diagnostic_terminal_step']==320 assert r['bytes']