Download scripts/fake_data.py from OneScience-Group/Transolver-Car-Design: direct link, hf CLI and curl.
- Browser
- Download file 3.46 kB
-
https://huggingface.co/OneScience-Group/Transolver-Car-Design/resolve/main/scripts/fake_data.py
- Command line
-
hf download hf://OneScience-Group/Transolver-Car-Design/scripts/fake_data.py
-
curl -L -o fake_data.py https://huggingface.co/OneScience-Group/Transolver-Car-Design/resolve/main/scripts/fake_data.py
3.46 kB
| from __future__ import annotations | |
| import os | |
| import sys | |
| from pathlib import Path | |
| import numpy as np | |
| ROOT = Path(__file__).resolve().parents[1] | |
| sys.path.insert(0, str(ROOT)) | |
| os.chdir(ROOT) | |
| from onescience.utils.YParams import YParams | |
| def make_edges(num_nodes: int) -> np.ndarray: | |
| src = np.arange(num_nodes, dtype=np.int64) | |
| dst = (src + 1) % num_nodes | |
| edges = np.stack( | |
| [np.concatenate([src, dst]), np.concatenate([dst, src])], | |
| axis=0, | |
| ) | |
| return edges | |
| def write_placeholder_training_files(param_dir: Path, rng: np.random.Generator) -> None: | |
| param_dir.mkdir(parents=True, exist_ok=True) | |
| np.save(param_dir / "Cd.npy", rng.normal(size=(1,)).astype(np.float32)) | |
| np.save(param_dir / "I1.npy", rng.normal(size=(8, 3)).astype(np.float32)) | |
| np.save(param_dir / "I2.npy", rng.normal(size=(8, 3)).astype(np.float32)) | |
| np.save(param_dir / "Press.npy", rng.normal(size=(8, 1)).astype(np.float32)) | |
| np.save(param_dir / "Velo.npy", rng.normal(size=(8, 3)).astype(np.float32)) | |
| def write_sample(sample_dir: Path, num_nodes: int, rng: np.random.Generator) -> tuple[np.ndarray, np.ndarray]: | |
| sample_dir.mkdir(parents=True, exist_ok=True) | |
| pos = rng.uniform(low=-1.0, high=1.0, size=(num_nodes, 3)).astype(np.float32) | |
| sdf = rng.uniform(low=0.0, high=0.2, size=(num_nodes, 1)).astype(np.float32) | |
| normals = rng.normal(size=(num_nodes, 3)).astype(np.float32) | |
| normals /= np.linalg.norm(normals, axis=1, keepdims=True) + 1e-6 | |
| x = np.concatenate([pos, sdf, normals], axis=1).astype(np.float32) | |
| y = np.concatenate( | |
| [ | |
| 0.1 * pos + rng.normal(scale=0.01, size=(num_nodes, 3)), | |
| rng.normal(scale=0.05, size=(num_nodes, 1)), | |
| ], | |
| axis=1, | |
| ).astype(np.float32) | |
| surf = np.zeros((num_nodes,), dtype=np.bool_) | |
| surf[num_nodes // 2 :] = True | |
| edge_index = make_edges(num_nodes) | |
| np.save(sample_dir / "x.npy", x) | |
| np.save(sample_dir / "y.npy", y) | |
| np.save(sample_dir / "pos.npy", pos) | |
| np.save(sample_dir / "surf.npy", surf) | |
| np.save(sample_dir / "edge_index.npy", edge_index) | |
| return x, y | |
| def main() -> None: | |
| cfg = YParams(str(ROOT / "conf/config.yaml"), "datapipe") | |
| data_dir = ROOT / cfg.source.data_dir | |
| preprocessed_dir = ROOT / cfg.source.preprocessed_save_dir | |
| stats_dir = ROOT / cfg.source.stats_dir | |
| stats_dir.mkdir(parents=True, exist_ok=True) | |
| rng = np.random.default_rng(42) | |
| all_x: list[np.ndarray] = [] | |
| all_y: list[np.ndarray] = [] | |
| for fold_id in range(9): | |
| param_name = f"param{fold_id}" | |
| param_dir = data_dir / param_name | |
| write_placeholder_training_files(param_dir, rng) | |
| sample_name = "sample_000" | |
| (param_dir / sample_name).mkdir(parents=True, exist_ok=True) | |
| x, y = write_sample(preprocessed_dir / param_name / sample_name, num_nodes=8, rng=rng) | |
| all_x.append(x) | |
| all_y.append(y) | |
| x_all = np.concatenate(all_x, axis=0) | |
| y_all = np.concatenate(all_y, axis=0) | |
| np.save(stats_dir / "mean_in.npy", x_all.mean(axis=0).astype(np.float32)) | |
| np.save(stats_dir / "std_in.npy", (x_all.std(axis=0) + 1e-6).astype(np.float32)) | |
| np.save(stats_dir / "mean_out.npy", y_all.mean(axis=0).astype(np.float32)) | |
| np.save(stats_dir / "std_out.npy", (y_all.std(axis=0) + 1e-6).astype(np.float32)) | |
| print(f"Fake ShapeNetCar data generated under {ROOT / 'data/mlcfd_data'}") | |
| if __name__ == "__main__": | |
| main() | |