def test_inplace(simple_header, simple_calibration):
    sensors = ("acc", "gyro")
    simple_header.enabled_sensors = sensors

    dataset = Dataset({k: np.ones((100, 3))
                       for k in sensors}, np.arange(100), simple_header)
    # default: inplace = False
    cal_ds = dataset.calibrate_imu(simple_calibration)
    assert id(cal_ds) != id(dataset)
    for sensor in sensors:
        assert id(getattr(cal_ds, sensor)) != id(getattr(dataset, sensor))

    dataset = Dataset({k: np.ones((100, 3))
                       for k in sensors}, np.arange(100), simple_header)
    cal_ds = dataset.calibrate_imu(simple_calibration, inplace=True)
    assert id(cal_ds) == id(dataset)
    for sensor in sensors:
        assert id(getattr(cal_ds, sensor)) == id(getattr(dataset, sensor))

    dataset = Dataset({k: np.ones((100, 3))
                       for k in sensors}, np.arange(100), simple_header)
    cal_ds = dataset.calibrate_imu(simple_calibration, inplace=False)
    assert id(cal_ds) != id(dataset)
    for sensor in sensors:
        assert id(getattr(cal_ds, sensor)) != id(getattr(dataset, sensor))
def test_non_existent_warning(simple_header, simple_calibration):
    sensors = ("acc", "gyro")
    simple_header.enabled_sensors = sensors

    dataset = Dataset({}, np.arange(100), simple_header)
    with pytest.warns(UserWarning) as warn:
        dataset.calibrate_imu(simple_calibration)

    assert len(warn) == 2
    for m in warn:
        assert any(s in str(m) for s in sensors)
        assert "calibration" in str(m)
def test_repeated_cal_error(simple_header, simple_calibration):
    sensors = ("acc", "gyro")
    simple_header.enabled_sensors = sensors

    dataset = Dataset({k: np.ones((100, 3))
                       for k in sensors}, np.arange(100), simple_header)
    cal_ds = dataset.calibrate_imu(simple_calibration)

    with pytest.raises(RepeatedCalibrationError) as e:
        cal_ds.calibrate_imu(simple_calibration)
    assert sensors[0] in str(e.value)
def test_imu_cal(simple_header, simple_calibration):
    simple_header.enabled_sensors = ("acc", "gyro")

    dataset = Dataset({
        "acc": np.ones((100, 3)),
        "gyro": np.ones((100, 3))
    }, np.arange(100), simple_header)
    cal_ds = dataset.calibrate_imu(simple_calibration)
    assert np.all(cal_ds.gyro.data == factory_calibrate_sensors_dict["gyro"] /
                  3)
    assert np.all(cal_ds.acc.data == factory_calibrate_sensors_dict["acc"] / 2)
    assert cal_ds.gyro.is_factory_calibrated is True
    assert cal_ds.acc.is_factory_calibrated is True
    assert cal_ds.gyro.is_calibrated is True
    assert cal_ds.acc.is_calibrated is True