OneScience's picture
Upload folder using huggingface_hub
e9b4f6f verified
Raw
History Blame Contribute Delete
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()