260705_2
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
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"
|
||||
)
|
||||
Reference in New Issue
Block a user