Newton determinism harness

Run to run physics determinism report

10 Newton scenarios were replayed in independent subprocesses with wp.config.deterministic = "run_to_run". The videos are captured from headless ViewerGL.get_frame(); the verdicts come from byte hashes of final physics state arrays. The full report covers the physics scenarios registered for this report. Contact scenarios use CollisionPipeline(deterministic=True) for contact ordering.

Scenarios10
Solver pairs22
Bit-exact22
Drift0
Failures0

What This Run Shows

Key finding

Replay health

All 22 solver pairs completed 2 independent subprocess replays.

Key finding

Run-to-run verdict

Every tested solver pair was bit-exact under wp.config.deterministic='run_to_run'.

Key finding

Largest remaining gap

No remaining run-to-run gap was observed in the tested harness slice on this GPU/software stack.

Method

Independent replays

2 subprocess runs per supported scenario/solver pair.

Canonical hash

Hashes include each scenario's canonical core arrays, such as rigid state, particle state, losses, and gradients.

Fixed workload

60 frames, 4 substeps, 60 Hz, seed 0, world count 2.

Deterministic contacts

Contact scenarios use CollisionPipeline(deterministic=True) with the report's global Warp determinism mode.

Visual capture

Solver videos use one world and MP4 frames read through ViewerGL.get_frame().

Scenario Videos And Statistics

featherstone

240 frames encoded at 24 fps (960x540, stride 1).

mujoco

240 frames encoded at 24 fps (960x540, stride 1).

semi_implicit

240 frames encoded at 24 fps (960x540, stride 1).

vbd

240 frames encoded at 24 fps (960x540, stride 1).

xpbd

240 frames encoded at 24 fps (960x540, stride 1).

falling_cube

Falling Cube

Single free rigid body floor contact. Useful for detecting tiny contact drift after impact.

Final height mean 0.15 m
Final height range 0.15-0.15 m
Awake bodies 0
Mean speed 2.801e-04 m/s

featherstone

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration14.081 s

mujoco

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration41.97 s

semi_implicit

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration13.255 s

vbd

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration16.426 s

xpbd

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration13.808 s

mujoco

240 frames encoded at 24 fps (960x540, stride 1).

vbd

240 frames encoded at 24 fps (960x540, stride 1).

xpbd

240 frames encoded at 24 fps (960x540, stride 1).

box_stack

Box Stack

Twenty jittered boxes with many contacts. A compact stress case for ordering and reductions.

COM drift 0.002 m
Kinetic energy proxy 1924.727
Contact samples 6
Peak contacts 38

mujoco

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration48.201 s

vbd

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration16.806 s

xpbd

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration13.961 s

mujoco

240 frames encoded at 24 fps (960x540, stride 1).

vbd

240 frames encoded at 24 fps (960x540, stride 1).

xpbd

240 frames encoded at 24 fps (960x540, stride 1).

domino_chain

Domino Chain

Sequential impacts amplify small timing changes into visible propagation differences.

Fallen dominos 0
Last-domino time not reached
First angle 14.324 deg
Tracked fall events 0

mujoco

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration50.447 s

vbd

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration20.5 s

xpbd

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration17.277 s

featherstone

240 frames encoded at 24 fps (960x540, stride 1).

mujoco

240 frames encoded at 24 fps (960x540, stride 1).

xpbd

240 frames encoded at 24 fps (960x540, stride 1).

arm_7dof

7-DOF Arm

Franka arm tracks deterministic sinusoidal PD targets from a fixed base.

Max target error 0.14 rad
Mean target error 0.14 rad
Peak PD torque 4.751 N*m
Peak contacts 0

featherstone

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration30.527 s

mujoco

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration58.379 s

xpbd

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration36.849 s

featherstone

240 frames encoded at 24 fps (960x540, stride 1).

mujoco

240 frames encoded at 24 fps (960x540, stride 1).

xpbd

240 frames encoded at 24 fps (960x540, stride 1).

humanoid

Humanoid Standing

Unitree H1 holds a standing pose; drift or falling exposes articulated-contact robustness issues.

Final root height 0.723 m
Fell worlds 0
Max COM XY drift 0.198 m
Peak contacts 28

featherstone

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration24.991 s

mujoco

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration50.329 s

xpbd

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftbody_q (0)
Dominant extra driftnone
Max core diff0
Duration20.746 s

semi_implicit

240 frames encoded at 24 fps (960x540, stride 1).

diffsim_ball

Diffsim Ball

Differentiable particle target with wall and floor contacts; core includes loss and initial-velocity gradients. Diffsim ball target gradient inspired by ``example_diffsim_ball``.

semi_implicit

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftfinal_particle_q (0)
Dominant extra driftnone
Max core diff0
Duration14.044 s

semi_implicit

240 frames encoded at 24 fps (960x540, stride 1).

diffsim_cloth_com

Diffsim Cloth COM

Small differentiable cloth target; COM uses an atomic accumulation before backpropagating gradients. Small cloth gradient scenario inspired by ``example_diffsim_cloth``.

semi_implicit

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftfinal_particle_q (0)
Dominant extra driftnone
Max core diff0
Duration10.41 s

semi_implicit

240 frames encoded at 24 fps (960x540, stride 1).

diffsim_spring_cage

Diffsim Spring Cage

Differentiable spring-cage target; core includes loss and spring rest-length gradients. Spring rest-length gradient inspired by ``example_diffsim_spring_cage``.

semi_implicit

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftfinal_particle_q (0)
Dominant extra driftnone
Max core diff0
Duration9.834 s

vbd

240 frames encoded at 24 fps (960x540, stride 1).

vbd_cloth_patch

VBD Cloth Patch

Pinned cloth patch with ground contact, using VBD bending-aware coloring. Pinned cloth patch evaluated with the VBD solver.

Particles 154
Pinned particles 22
Height range 0.664-1.286 m

vbd

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftparticle_q (0)
Dominant extra driftnone
Max core diff0
Duration17.605 s

vbd

240 frames encoded at 24 fps (960x540, stride 1).

vbd_soft_body

VBD Soft Body

Pinned tetrahedral block with ground contact, using VBD particle/tet solve paths. Pinned tetrahedral block evaluated with the VBD solver.

Particles 160
Pinned particles 32
Height range 0.945-1.24 m
Tets 360

vbd

BIT-EXACT

2/2 subprocess replays matched byte-for-byte with CUDA graph enabled.

ExecutionCUDA graph
Unique hashes1
Dominant core driftparticle_q (0)
Dominant extra driftnone
Max core diff0
Duration18.015 s

Solver Matrix

Scenario Solver Verdict Unique hashes Dominant core signal Max core diff Max extras diff Duration
7-DOF Arm featherstone BIT-EXACT 1 body_q (0) 0 0 30.527 s
7-DOF Arm mujoco BIT-EXACT 1 body_q (0) 0 0 58.379 s
7-DOF Arm xpbd BIT-EXACT 1 body_q (0) 0 0 36.849 s
Box Stack mujoco BIT-EXACT 1 body_q (0) 0 0 48.201 s
Box Stack vbd BIT-EXACT 1 body_q (0) 0 0 16.806 s
Box Stack xpbd BIT-EXACT 1 body_q (0) 0 0 13.961 s
Diffsim Ball semi_implicit BIT-EXACT 1 final_particle_q (0) 0 0 14.044 s
Diffsim Cloth COM semi_implicit BIT-EXACT 1 final_particle_q (0) 0 0 10.41 s
Diffsim Spring Cage semi_implicit BIT-EXACT 1 final_particle_q (0) 0 0 9.834 s
Domino Chain mujoco BIT-EXACT 1 body_q (0) 0 0 50.447 s
Domino Chain vbd BIT-EXACT 1 body_q (0) 0 0 20.5 s
Domino Chain xpbd BIT-EXACT 1 body_q (0) 0 0 17.277 s
Falling Cube featherstone BIT-EXACT 1 body_q (0) 0 0 14.081 s
Falling Cube mujoco BIT-EXACT 1 body_q (0) 0 0 41.97 s
Falling Cube semi_implicit BIT-EXACT 1 body_q (0) 0 0 13.255 s
Falling Cube vbd BIT-EXACT 1 body_q (0) 0 0 16.426 s
Falling Cube xpbd BIT-EXACT 1 body_q (0) 0 0 13.808 s
Humanoid Standing featherstone BIT-EXACT 1 body_q (0) 0 0 24.991 s
Humanoid Standing mujoco BIT-EXACT 1 body_q (0) 0 0 50.329 s
Humanoid Standing xpbd BIT-EXACT 1 body_q (0) 0 0 20.746 s
VBD Cloth Patch vbd BIT-EXACT 1 particle_q (0) 0 0 17.605 s
VBD Soft Body vbd BIT-EXACT 1 particle_q (0) 0 0 18.015 s

Observed Gaps And Scope

Observed gaps in this run

These notes are generated from the actual solver results above rather than a static message.

  • No observed run-to-run determinism gaps remain in this tested report slice.

What the report does and does not prove

The current harness is precise about repeated local replays, but it intentionally stops short of broader claims.

  • This report only checks repeated runs on the same machine, driver, GPU, and Warp/Newton build; it does not prove cross-GPU or cross-driver reproducibility.
  • The verdict is based on final core state hashes. Videos and scenario extras are diagnostic evidence, not the primary pass/fail signal.

Controls in this harness

  • wp.config.deterministic is set before heavy Warp/Newton imports and propagated to subprocesses.
  • Each scenario owns a seeded NumPy RNG, so pose jitter and control trajectories are reproducible.
  • The comparison boundary is process-level: no Python or GPU state is reused between replays.
  • Only final core state decides the verdict; scenario extras are diagnostic and reported separately.