Files
Aislo/tests/test_b04_surface_pipeline.py
T
2026-07-05 21:27:23 +09:00

62 lines
2.9 KiB
Python

import tempfile
import unittest
from pathlib import Path
import numpy as np
from B04_wf1_Surface.B04_wf1_Surface_Engine_Pipeline import build_all_terrain_models
from config.config_system import build_surface_model_config
class BuildAllTerrainModelsTest(unittest.TestCase):
def _synthetic_slope(self) -> tuple[dict[str, np.ndarray], dict[str, np.ndarray]]:
coords = np.linspace(0.0, 40.0, 41)
gx, gy = np.meshgrid(coords, coords)
z = 5.0 + 0.05 * gx + 0.03 * gy
xyz = np.column_stack([gx.ravel(), gy.ravel(), z.ravel()]).astype(np.float64)
bounds = np.array([[0.0, 40.0], [0.0, 40.0], [float(z.min()), float(z.max())]])
mask = np.ones(len(xyz), dtype=bool)
return {"xyz": xyz, "bounds": bounds}, {"grid_min_z": mask}
def test_builds_all_representations(self) -> None:
structured, masks = self._synthetic_slope()
config = build_surface_model_config()
config["source_filters"] = ["grid_min_z"]
progress: list[tuple[int, str]] = []
with tempfile.TemporaryDirectory() as directory:
output_dir = Path(directory) / "proj" / "models"
manifest = build_all_terrain_models(
structured, masks, output_dir, config, progress=lambda p, m: progress.append((p, m))
)
self.assertEqual(manifest["status"], "completed")
self.assertEqual(manifest["failure_count"], 0)
methods = manifest["source_filters"]["grid_min_z"]["methods"]
self.assertEqual(set(methods), {"tin", "dtm", "nurbs", "implicit", "meshfree"})
for meta in methods.values():
self.assertEqual(meta["status"], "completed")
# DTM/TIN은 스무딩까지 완료
self.assertEqual(methods["dtm"]["smooth"]["status"], "completed")
self.assertEqual(methods["tin"]["smooth"]["status"], "completed")
# 등고선 캐시와 manifest 생성 확인
files = list(output_dir.iterdir())
self.assertTrue(any("contour_" in f.name for f in files))
self.assertTrue((output_dir / "manifest.json").is_file())
self.assertEqual(progress[-1][0], 100)
def test_cache_reuse_on_second_call(self) -> None:
structured, masks = self._synthetic_slope()
config = build_surface_model_config()
config["source_filters"] = ["grid_min_z"]
config["precompute"] = ["dtm"]
with tempfile.TemporaryDirectory() as directory:
output_dir = Path(directory) / "proj" / "models"
build_all_terrain_models(structured, masks, output_dir, config)
second = build_all_terrain_models(structured, masks, output_dir, config)
self.assertEqual(second["status"], "completed")
self.assertEqual(
second["source_filters"]["grid_min_z"]["methods"]["dtm"]["status"], "completed"
)