Skip to content

estimate

estimate(scene: Any, worlds: int | None = None, seconds: float = 1.0, device: str | None = None, *, measure: bool = False) -> dict[str, Any]

Estimate a run of seconds simulated time in worlds worlds (JSON-ready dict).

Keys: physics_steps_per_world, step_time_s, wall_time_s, world_steps_per_s, real_time_factor, memory_bytes, compile_s_first_run, counts (per world), solvers, rigid_step (its "fast" row: the rigid fast mode's step, time and cost, for a scene of free bodies), routes (per object: route, solver, reasons, as Sim.routes()), vbd (the cloth / soft solver's particles per world, iterations and self-contact), basis. Wall time is of warm stepping, fitted to measured runs (bench/results/estimate_calib/: robot + water, bins, an arm, cloth, a pour; 1-64 worlds, CPU and L4): within 1.3x on those 55 rows. Right after a build or reset a GPU run captures CUDA graphs first (up to 2.65x on a 1 s run); a scene far from those rows can be further off. Memory on a GPU is what the run needs to capture its CUDA graphs, fitted to 38 L4 rows (memory_rows.json: within 1.2x); many worlds of scanned meshes (YCB, Google Scanned Objects) are not among them. measure=True times a short real run instead (wall time; no memory). Example: alloy.estimate(scene, 64, 2.0).