Files
2026-07-13 13:05:14 +08:00

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))