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

85 lines
2.7 KiB
Python

from __future__ import annotations
import itertools
from fractions import Fraction
from typing import cast
import rerun as rr
from rerun.datatypes import (
Quaternion,
RotationAxisAngle,
)
from .test_matnxn import MAT_3X3_INPUT
from .test_vecnd import VEC_3D_INPUT
SCALE_3D_INPUT = [
# Uniform
4,
4.0,
Fraction(8, 2),
# ThreeD
*VEC_3D_INPUT,
]
def test_instance_poses3d() -> None:
rotation_axis_angle_arrays = [
None,
RotationAxisAngle([1, 2, 3], rr.Angle(deg=10)),
[RotationAxisAngle([1, 2, 3], rr.Angle(deg=10)), RotationAxisAngle([3, 2, 1], rr.Angle(rad=1))],
]
quaternion_arrays = [
None,
Quaternion(xyzw=[1, 2, 3, 4]),
[Quaternion(xyzw=[4, 3, 2, 1]), Quaternion(xyzw=[1, 2, 3, 4])],
]
# TODO(andreas): It would be nice to support scalar values here
scale_arrays = [None, [1.0, 2.0, 3.0], [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]]
all_arrays = itertools.zip_longest(
[*VEC_3D_INPUT, None],
rotation_axis_angle_arrays,
quaternion_arrays,
scale_arrays,
[*MAT_3X3_INPUT, None],
)
for (
translation,
rotation_axis_angle,
quaternion,
scale,
mat3x3,
) in all_arrays:
translations = cast("rr.datatypes.Vec3DArrayLike | None", translation)
rotation_axis_angles = cast("rr.datatypes.RotationAxisAngleArrayLike | None", rotation_axis_angle)
quaternions = cast("rr.datatypes.QuaternionArrayLike | None", quaternion)
scales = cast("rr.datatypes.Vec3DArrayLike | rr.datatypes.Float32Like | None", scale)
mat3x3 = cast("rr.datatypes.Mat3x3ArrayLike | None", mat3x3)
print(
f"rr.InstancePoses3D(\n"
f" translations={translations!r}\n"
f" rotation_axis_angles={rotation_axis_angles!r}\n"
f" quaternions={quaternions!r}\n"
f" scales={scales!r}\n"
f" mat3x3={mat3x3!r}\n"
f")",
)
arch = rr.InstancePoses3D(
translations=translations,
rotation_axis_angles=rotation_axis_angles,
quaternions=quaternions,
scales=scales,
mat3x3=mat3x3,
)
print(f"{arch}\n")
assert arch.translations == rr.components.Translation3DBatch._converter(translations)
assert arch.rotation_axis_angles == rr.components.RotationAxisAngleBatch._converter(rotation_axis_angles)
assert arch.quaternions == rr.components.RotationQuatBatch._converter(quaternions)
assert arch.scales == rr.components.Scale3DBatch._converter(scales)
assert arch.mat3x3 == rr.components.TransformMat3x3Batch._converter(mat3x3)