def test_rt_transpose():
    rt = Rototrans.from_random_data()
    rt_t = Rototrans.from_transposed_rototrans(rt)

    rt_t_expected = np.zeros((4, 4, rt.time.size))
    rt_t_expected[3, 3, :] = 1
    for row in range(rt.row.size):
        for col in range(rt.col.size):
            for frame in range(rt.time.size):
                rt_t_expected[col, row, frame] = rt[row, col, frame]

    for frame in range(rt.time.size):
        rt_t_expected[:3, 3, frame] = -rt_t_expected[:3, :3, frame].dot(
            rt[:3, 3, frame])

    np.testing.assert_array_almost_equal(rt_t, rt_t_expected, decimal=10)
def test_rototrans_creation():
    dims = ("row", "col", "time")
    array = Rototrans()
    np.testing.assert_array_equal(x=array,
                                  y=xr.DataArray(np.eye(4)[..., np.newaxis]))
    assert array.dims == dims

    array = Rototrans(MARKERS_DATA.values, time=MARKERS_DATA.time)
    is_expected_array(array, **EXPECTED_VALUES[67])

    size = 4, 4, 100
    array = Rototrans.from_random_data(size=size)
    assert array.shape == size
    assert array.dims == dims

    with pytest.raises(ValueError):
        Angles(ANALOGS_DATA)
def test_rototrans_creation():
    dims = ("row", "col", "time")
    array = Rototrans()
    np.testing.assert_array_equal(x=array,
                                  y=xr.DataArray(np.eye(4)[..., np.newaxis]))
    assert array.dims == dims

    data = Markers(MARKERS_DATA.values)
    array = Rototrans.from_markers(
        origin=data.isel(channel=[0]),
        axis_1=data.isel(channel=[0, 1]),
        axis_2=data.isel(channel=[0, 2]),
        axes_name="xy",
        axis_to_recalculate="y",
    )
    is_expected_array(array, **EXPECTED_VALUES[67])

    size = 4, 4, 100
    array = Rototrans.from_random_data(size=size)
    assert array.shape == size
    assert array.dims == dims

    with pytest.raises(ValueError):
        Angles(ANALOGS_DATA)