固定 HHD 下采样并标记三轴力单位
避免运行中改变 HHD 测量配置,并明确部分标定时各轴单位。已通过 SDK 与共享层测试。
This commit is contained in:
@@ -319,6 +319,40 @@ def test_device_calibration_rejects_partial_axes_and_unsafe_id(tmp_path: Path):
|
||||
load_for_device(root, "box", "../BOX-001")
|
||||
|
||||
|
||||
def test_force_units_report_partial_calibration_without_changing_triplets(tmp_path: Path):
|
||||
path = tmp_path / "partial.json"
|
||||
doc = json.loads(_box_cal_path().read_text(encoding="utf-8"))
|
||||
doc["channels"] = {"normal": doc["channels"]["normal"]}
|
||||
path.write_text(json.dumps(doc), encoding="utf-8")
|
||||
sensor = Sensor("external", config_name="box", cal_path=path, verbose=False, backend="cpu")
|
||||
try:
|
||||
assert sensor.calibrated_axes == ("fn",)
|
||||
assert sensor.force_units == ("N", "raw", "raw")
|
||||
assert set(sensor.force_triplets()) == {"filtered", "unfiltered"}
|
||||
sensor.set_calibration(None)
|
||||
assert sensor.calibrated_axes == ()
|
||||
assert sensor.force_units == ("raw", "raw", "raw")
|
||||
finally:
|
||||
sensor.disconnect()
|
||||
|
||||
|
||||
def test_measurement_filter_change_refuses_incompatible_calibration(tmp_path: Path):
|
||||
path = tmp_path / "filtered.json"
|
||||
doc = json.loads(_box_cal_path().read_text(encoding="utf-8"))
|
||||
doc["pipeline"] = {"filters": {"measurement": {"flow_ema_alpha": 1.0}}}
|
||||
path.write_text(json.dumps(doc), encoding="utf-8")
|
||||
sensor = Sensor("external", config_name="box", cal_path=path, verbose=False, backend="cpu")
|
||||
try:
|
||||
sensor.configure(force_median_window=3)
|
||||
assert sensor.filters_state()["readout"]["force_median_window"] == 3
|
||||
with pytest.raises(CalibrationError, match="flow_ema_alpha"):
|
||||
sensor.configure(flow_ema_alpha=0.5, force_median_window=5)
|
||||
assert sensor.filters_state()["measurement"]["flow_ema_alpha"] == 1.0
|
||||
assert sensor.filters_state()["readout"]["force_median_window"] == 3
|
||||
finally:
|
||||
sensor.disconnect()
|
||||
|
||||
|
||||
def test_parse_shipped_box_file_directly():
|
||||
cal = parse(json.loads(_box_cal_path().read_text(encoding="utf-8")), source_path=_box_cal_path())
|
||||
assert cal.schema_version == 2
|
||||
|
||||
@@ -246,24 +246,16 @@ def test_read_info_force_stays_raw_without_calibration_json(monkeypatch):
|
||||
sensor.disconnect()
|
||||
|
||||
|
||||
def test_configure_hhd_downsample_invalidates_solver_cache():
|
||||
def test_hhd_downsample_is_fixed_by_sensor_config():
|
||||
sensor = _external_sensor()
|
||||
try:
|
||||
sensor._hhd_downsample = 1
|
||||
sensor._Sensor__hhd = object()
|
||||
sensor._hhd_grid_shape = (40, 40)
|
||||
sensor.valid_mask = np.ones((90, 90), dtype=bool)
|
||||
sensor.valid_mask_hhd = sensor.valid_mask
|
||||
|
||||
sensor.configure(hhd_downsample=3)
|
||||
assert sensor._hhd_downsample == 3
|
||||
assert sensor._Sensor__hhd is None
|
||||
assert sensor._hhd_grid_shape is None
|
||||
assert sensor.valid_mask_hhd is not None
|
||||
assert sensor.valid_mask_hhd.shape == (30, 30)
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
sensor.configure(hhd_downsample="nope")
|
||||
configured = sensor._config["tracker"]["hhd_downsample"]
|
||||
assert sensor._hhd_downsample == configured
|
||||
sensor.configure(force_median_window=3)
|
||||
assert sensor._hhd_downsample == configured
|
||||
assert "hhd_downsample" not in sensor.filters_state()["measurement"]
|
||||
with pytest.raises(TypeError):
|
||||
sensor.configure(hhd_downsample=1)
|
||||
finally:
|
||||
sensor.disconnect()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user