176 lines
3.9 KiB
Python
176 lines
3.9 KiB
Python
from __future__ import annotations
|
|
|
|
from fractions import Fraction
|
|
|
|
import numpy as np
|
|
import pytest
|
|
import rerun as rr
|
|
from rerun.datatypes import (
|
|
Vec2D,
|
|
Vec2DArrayLike,
|
|
Vec2DBatch,
|
|
Vec2DLike,
|
|
Vec3D,
|
|
Vec3DArrayLike,
|
|
Vec3DBatch,
|
|
Vec3DLike,
|
|
Vec4D,
|
|
Vec4DArrayLike,
|
|
Vec4DBatch,
|
|
Vec4DLike,
|
|
)
|
|
|
|
from .common_arrays import (
|
|
vec2ds_arrays,
|
|
vec2ds_expected,
|
|
vec3ds_arrays,
|
|
vec3ds_expected,
|
|
vec4ds_arrays,
|
|
vec4ds_expected,
|
|
)
|
|
|
|
VEC_2D_INPUT = [
|
|
[1, 2],
|
|
[1.0, 2.0],
|
|
[Fraction(1, 1), Fraction(2, 1)],
|
|
Vec3D([1, 2]),
|
|
np.array([1, 2]),
|
|
np.array([1.0, 2.0]),
|
|
]
|
|
|
|
|
|
def assert_correct_vec2d(vec: Vec2D | None) -> None:
|
|
assert vec is not None
|
|
assert np.all(vec.xy == np.array([1.0, 2.0]))
|
|
assert vec.xy.dtype == np.float32
|
|
|
|
|
|
VEC_3D_INPUT = [
|
|
[1, 2, 3],
|
|
[1.0, 2.0, 3.0],
|
|
[Fraction(1, 1), Fraction(2, 1), Fraction(3, 1)],
|
|
Vec3D([1, 2, 3]),
|
|
np.array([1, 2, 3]),
|
|
np.array([1.0, 2.0, 3.0]),
|
|
]
|
|
|
|
|
|
def assert_correct_vec3d(vec: Vec3D | None) -> None:
|
|
assert vec is not None
|
|
assert np.all(vec.xyz == np.array([1.0, 2.0, 3.0]))
|
|
assert vec.xyz.dtype == np.float32
|
|
|
|
|
|
VEC_4D_INPUT = [
|
|
[1, 2, 3, 4],
|
|
[1.0, 2.0, 3.0, 4.0],
|
|
[Fraction(1, 1), Fraction(2, 1), Fraction(3, 1), Fraction(4, 1)],
|
|
Vec4D([1, 2, 3, 4]),
|
|
np.array([1, 2, 3, 4]),
|
|
np.array([1.0, 2.0, 3.0, 4.0]),
|
|
]
|
|
|
|
|
|
def assert_correct_vec4d(vec: Vec4D | None) -> None:
|
|
assert vec is not None
|
|
assert np.all(vec.xyzw == np.array([1.0, 2.0, 3.0, 4.0]))
|
|
assert vec.xyzw.dtype == np.float32
|
|
|
|
|
|
@pytest.mark.parametrize("data", VEC_2D_INPUT)
|
|
def test_vec2d(data: Vec2DLike) -> None:
|
|
vec = Vec2D(data)
|
|
assert_correct_vec2d(vec)
|
|
|
|
|
|
@pytest.mark.parametrize("data", VEC_3D_INPUT)
|
|
def test_vec3d(data: Vec3DLike) -> None:
|
|
vec = Vec3D(data)
|
|
assert_correct_vec3d(vec)
|
|
|
|
|
|
@pytest.mark.parametrize("data", VEC_4D_INPUT)
|
|
def test_vec4d(data: Vec4DLike) -> None:
|
|
vec = Vec4D(data)
|
|
assert_correct_vec4d(vec)
|
|
|
|
|
|
@pytest.mark.parametrize("data", vec2ds_arrays)
|
|
def test_vec2d_array_valid(data: Vec2DArrayLike) -> None:
|
|
assert Vec2DBatch(data) == vec2ds_expected(data)
|
|
|
|
|
|
@pytest.mark.parametrize("data", vec3ds_arrays)
|
|
def test_vec3d_array_valid(data: Vec3DArrayLike) -> None:
|
|
assert Vec3DBatch(data) == vec3ds_expected(data)
|
|
|
|
|
|
@pytest.mark.parametrize("data", vec4ds_arrays)
|
|
def test_vec4d_array_valid(data: Vec4DArrayLike) -> None:
|
|
assert Vec4DBatch(data) == vec4ds_expected(data)
|
|
|
|
|
|
VEC_2D_INVALID_ARRAYS_INPUT = [
|
|
[1],
|
|
[1, 2, 3],
|
|
[1, 2, 3, 4, 5],
|
|
[[1], [2]],
|
|
[[1, 2, 3], [4, 5]],
|
|
[[1, 2, 3], [4, 5, 6]],
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize("data", VEC_2D_INVALID_ARRAYS_INPUT)
|
|
def test_vec2d_array_invalid(data: Vec2DArrayLike) -> None:
|
|
rr.set_strict_mode(True)
|
|
|
|
with pytest.raises(ValueError):
|
|
Vec2DBatch(data)
|
|
with pytest.raises(ValueError):
|
|
Vec2DBatch(np.array(data))
|
|
|
|
|
|
VEC_3D_INVALID_ARRAYS_INPUT = [
|
|
[1],
|
|
[1, 2],
|
|
[1, 2, 3, 4],
|
|
[1, 2, 3, 4, 5],
|
|
[[1], [2], [3]],
|
|
[[1, 2, 3], [4, 5]],
|
|
[[1, 2, 3], [4, 5, 6, 7]],
|
|
[[1, 2, 3, 4], [4, 5, 6]],
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize("data", VEC_3D_INVALID_ARRAYS_INPUT)
|
|
def test_vec3d_array_invalid(data: Vec3DArrayLike) -> None:
|
|
rr.set_strict_mode(True)
|
|
|
|
with pytest.raises(ValueError):
|
|
Vec3DBatch(data)
|
|
with pytest.raises(ValueError):
|
|
Vec3DBatch(np.array(data))
|
|
|
|
|
|
VEC_4D_INVALID_ARRAYS_INPUT = [
|
|
[1],
|
|
[1, 2],
|
|
[1, 2, 3],
|
|
[1, 2, 3, 4, 5],
|
|
[1, 2, 3, 4, 5, 6, 7, 8, 9],
|
|
[[1], [2], [3], [4]],
|
|
[[1, 2, 3, 4], [4, 5]],
|
|
[[1, 2, 3, 4], [4, 5, 6, 7, 8]],
|
|
[[1, 2, 3, 4, 5], [4, 5, 6, 7]],
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize("data", VEC_4D_INVALID_ARRAYS_INPUT)
|
|
def test_vec4d_array_invalid(data: Vec4DArrayLike) -> None:
|
|
rr.set_strict_mode(True)
|
|
|
|
with pytest.raises(ValueError):
|
|
Vec4DBatch(data)
|
|
with pytest.raises(ValueError):
|
|
Vec4DBatch(np.array(data))
|