| import os |
| import sys |
| from pathlib import Path |
|
|
| import numpy as np |
|
|
| PROJECT_ROOT = Path(__file__).resolve().parents[1] |
| sys.path.insert(0, str(PROJECT_ROOT / "model")) |
|
|
|
|
| def write_split(split_dir: Path, name: str, samples): |
| split_dir.mkdir(parents=True, exist_ok=True) |
| with open(split_dir / f"{name}.txt", "w", encoding="utf-8") as handle: |
| for sample in samples: |
| handle.write(f"{sample}\n") |
|
|
|
|
| def make_sample(path: Path, seed: int, steps: int = 990, nodes: int = 6): |
| rng = np.random.default_rng(seed) |
| path.mkdir(parents=True, exist_ok=True) |
|
|
| base = np.array( |
| [ |
| [0.0, 0.0], |
| [1.0, 0.0], |
| [0.0, 1.0], |
| [1.0, 1.0], |
| [0.5, 0.2], |
| [0.5, 0.8], |
| ], |
| dtype=np.float32, |
| ) |
| drift = np.linspace(0.0, 0.04, steps, dtype=np.float32).reshape(steps, 1, 1) |
| pointcloud = base.reshape(1, nodes, 2) + drift |
|
|
| t = np.arange(steps, dtype=np.float32).reshape(steps, 1) |
| x = pointcloud[..., 0] |
| y = pointcloud[..., 1] |
| vx = np.sin(x + t * 0.1).astype(np.float32) |
| vy = np.cos(y + t * 0.1).astype(np.float32) |
| ps = (x + y + 0.01 * rng.standard_normal((steps, nodes))).astype(np.float32) |
| pg = (x - y + 0.01 * rng.standard_normal((steps, nodes))).astype(np.float32) |
| mask = np.zeros((steps, nodes), dtype=np.int64) |
|
|
| triangles = np.array( |
| [ |
| [0, 1, 4], |
| [0, 4, 2], |
| [1, 3, 4], |
| [2, 4, 5], |
| [3, 5, 4], |
| ], |
| dtype=np.int64, |
| ) |
| triangles = np.repeat(triangles.reshape(1, -1, 3), steps, axis=0) |
|
|
| np.savez( |
| path / "sim.npz", |
| pointcloud=pointcloud, |
| VX=vx, |
| VY=vy, |
| PS=ps, |
| PG=pg, |
| mask=mask, |
| ) |
| np.save(path / "triangles.npy", triangles) |
|
|
|
|
| def main(): |
| os.chdir(PROJECT_ROOT) |
| data_root = PROJECT_ROOT / "data" / "fake" / "Eagle_dataset" |
| split_dir = PROJECT_ROOT / "data" / "fake" / "splits" |
| samples = ["Cre/fake_case_000/1", "Cre/fake_case_001/1", "Cre/fake_case_002/1"] |
|
|
| for idx, sample in enumerate(samples): |
| make_sample(data_root / sample, seed=idx) |
|
|
| write_split(split_dir, "train", samples[:2]) |
| write_split(split_dir, "valid", samples[2:]) |
| write_split(split_dir, "test", samples[2:]) |
| print(f"Fake Eagle data written to: {data_root}") |
| print(f"Fake splits written to: {split_dir}") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|