Download src/cube_data.py from Conditiondark/ogbench-cube-rigid-body-artifacts: direct link, hf CLI and curl.
- Browser
- Download file 2.36 kB
-
https://huggingface.co/Conditiondark/ogbench-cube-rigid-body-artifacts/resolve/main/src/cube_data.py
- Command line
-
hf download hf://Conditiondark/ogbench-cube-rigid-body-artifacts/src/cube_data.py
-
curl -L -o cube_data.py https://huggingface.co/Conditiondark/ogbench-cube-rigid-body-artifacts/resolve/main/src/cube_data.py
2.36 kB
| """Build a compact training cache from the frozen ogbench-cube-success release. | |
| Reads ONLY the small state fields (observation/action/success) per episode in | |
| frozen subset order, skips the terminal NaN-action row, and uses each episode's | |
| final observation as the (hindsight) goal for goal-conditioned BC. | |
| """ | |
| import argparse, json, os | |
| from pathlib import Path | |
| import numpy as np | |
| BUDGETS = (10, 50, 100, 1000) | |
| def build(root, budget, out): | |
| root = Path(root) | |
| rows = [json.loads(l) for l in (root / "subsets" / f"subset-{budget:04d}.jsonl").read_text().splitlines()] | |
| assert len(rows) == budget, f"expected {budget} rows, got {len(rows)}" | |
| obs_l, act_l, goal_l, succ_l, tid_l = [], [], [], [], [] | |
| for ti, row in enumerate(rows): | |
| with np.load(root / "data" / row["archive_file"], allow_pickle=False) as z: | |
| o = z["observation"].astype(np.float32) # (T+1, 28) | |
| a = z["action"].astype(np.float32) # (T+1, 5), last row NaN | |
| s = z["success"].astype(np.bool_) # (T+1,) | |
| T = len(a) - 1 # executed transitions | |
| assert np.isfinite(a[:T]).all(), "unexpected NaN in executed actions" | |
| goal = o[-1] # final/achieved state = goal | |
| obs_l.append(o[:T]); act_l.append(a[:T]) | |
| goal_l.append(np.broadcast_to(goal, (T, o.shape[1]))) | |
| succ_l.append(s[:T]); tid_l.append(np.full(T, ti, np.int32)) | |
| OBS = np.concatenate(obs_l); ACT = np.concatenate(act_l) | |
| GOAL = np.concatenate(goal_l); SUC = np.concatenate(succ_l); TID = np.concatenate(tid_l) | |
| os.makedirs(Path(out).parent, exist_ok=True) | |
| np.savez(out, observation=OBS, action=ACT, goal=GOAL, success=SUC, traj_id=TID) | |
| print(json.dumps({"budget": budget, "episodes": budget, "transitions": int(len(OBS)), | |
| "obs_dim": int(OBS.shape[1]), "act_dim": int(ACT.shape[1]), | |
| "success_transitions": int(SUC.sum()), "cache": out})) | |
| if __name__ == "__main__": | |
| ap = argparse.ArgumentParser() | |
| ap.add_argument("--root", default="data/bucket/ogbench-cube-success-1000-v1") | |
| ap.add_argument("--budget", type=int, choices=BUDGETS, default=1000) | |
| ap.add_argument("--out", default=None) | |
| a = ap.parse_args() | |
| build(a.root, a.budget, a.out or f"cache/cube_state_b{a.budget:04d}.npz") | |