InfiniSplat / tests /test_prompt_depth.py
PLUS-WAVE's picture
Add meerkat demo and Node 22 runtime
a6825eb verified
Raw
History Blame Contribute Delete
2.65 kB
from pathlib import Path
import cv2
import h5py
import numpy as np
import pytest
import torch
from src.demo.infer_single_image import _read_depth_array, load_depth
def test_prompt_depth_loads_plain_npy_and_npz(tmp_path: Path) -> None:
expected = np.arange(12, dtype=np.float32).reshape(3, 4)
npy_path = tmp_path / "depth.npy"
npz_path = tmp_path / "depth.npz"
np.save(npy_path, expected)
np.savez(npz_path, depth=expected)
np.testing.assert_array_equal(_read_depth_array(npy_path), expected)
np.testing.assert_array_equal(_read_depth_array(npz_path), expected)
def test_prompt_depth_loads_sparse_npz(tmp_path: Path) -> None:
depth_path = tmp_path / "depth.npz"
mask = np.array([[False, True], [True, False]])
np.savez(depth_path, mask=mask, value=np.array([2.0, 4.0], dtype=np.float32))
actual = _read_depth_array(depth_path)
np.testing.assert_array_equal(
actual,
np.array([[0.0, 2.0], [4.0, 0.0]], dtype=np.float32),
)
def test_prompt_depth_loads_channel_first_npy(tmp_path: Path) -> None:
depth_path = tmp_path / "depth.npy"
expected = np.arange(12, dtype=np.float32).reshape(3, 4)
np.save(depth_path, expected[None])
np.testing.assert_array_equal(_read_depth_array(depth_path), expected)
def test_prompt_depth_rejects_png(tmp_path: Path) -> None:
depth_path = tmp_path / "depth.png"
depth_path.touch()
with pytest.raises(ValueError, match="Unsupported prompt depth extension"):
_read_depth_array(depth_path)
def test_prompt_depth_loads_nested_hdf5(tmp_path: Path) -> None:
depth_path = tmp_path / "depth.h5"
expected = np.arange(12, dtype=np.float32).reshape(3, 4)
with h5py.File(depth_path, "w") as h5_file:
h5_file.create_dataset("nested/depth", data=expected)
np.testing.assert_array_equal(_read_depth_array(depth_path), expected)
def test_prompt_depth_loads_exr(tmp_path: Path) -> None:
depth_path = tmp_path / "depth.exr"
expected = np.arange(12, dtype=np.float32).reshape(3, 4)
assert cv2.imwrite(str(depth_path), expected)
np.testing.assert_array_equal(_read_depth_array(depth_path), expected)
def test_load_depth_preserves_default_sparse_sampling(tmp_path: Path) -> None:
depth_path = tmp_path / "depth.npy"
np.save(depth_path, np.full((40, 50), 2.0, dtype=np.float32))
np.random.seed(0)
dense_depth, sampled_depth, depth_mask = load_depth(
depth_path=depth_path,
tar_size=(40, 50),
)
assert dense_depth.shape == (1, 1, 40, 50)
assert depth_mask.sum().item() == 2000
assert torch.count_nonzero(sampled_depth).item() == 1500