chore(dependencies): upgrade rerun (#2237)

* chore(dependencies): upgrade rerun

Co-authored-by: Ben Zhang <benzhangniu@gmail.com>

* test(utils): fix rerun scalars

---------

Co-authored-by: Ben Zhang <benzhangniu@gmail.com>
This commit is contained in:
Steven Palma
2025-10-18 01:35:02 +02:00
committed by GitHub
parent d6ea3bbce0
commit da5d2f3e91
4 changed files with 18 additions and 18 deletions

View File

@@ -82,7 +82,7 @@ dependencies = [
"draccus==0.10.0", # TODO: Remove == "draccus==0.10.0", # TODO: Remove ==
"gymnasium>=1.0.0", "gymnasium>=1.0.0",
"rerun-sdk>=0.21.0,<0.23.0", # TODO: Bumb dependency "rerun-sdk>=0.24.0,<0.27.0",
# Support dependencies # Support dependencies
"deepdiff>=7.0.1,<9.0.0", "deepdiff>=7.0.1,<9.0.0",

View File

@@ -141,15 +141,15 @@ def visualize_dataset(
gc.collect() gc.collect()
if mode == "distant": if mode == "distant":
rr.serve(open_browser=False, web_port=web_port, ws_port=ws_port) rr.serve_web_viewer(open_browser=False, web_port=web_port)
logging.info("Logging to Rerun") logging.info("Logging to Rerun")
for batch in tqdm.tqdm(dataloader, total=len(dataloader)): for batch in tqdm.tqdm(dataloader, total=len(dataloader)):
# iterate over the batch # iterate over the batch
for i in range(len(batch["index"])): for i in range(len(batch["index"])):
rr.set_time_sequence("frame_index", batch["frame_index"][i].item()) rr.set_time("frame_index", sequence=batch["frame_index"][i].item())
rr.set_time_seconds("timestamp", batch["timestamp"][i].item()) rr.set_time("timestamp", timestamp=batch["timestamp"][i].item())
# display each camera image # display each camera image
for key in dataset.meta.camera_keys: for key in dataset.meta.camera_keys:
@@ -159,21 +159,21 @@ def visualize_dataset(
# display each dimension of action space (e.g. actuators command) # display each dimension of action space (e.g. actuators command)
if ACTION in batch: if ACTION in batch:
for dim_idx, val in enumerate(batch[ACTION][i]): for dim_idx, val in enumerate(batch[ACTION][i]):
rr.log(f"{ACTION}/{dim_idx}", rr.Scalar(val.item())) rr.log(f"{ACTION}/{dim_idx}", rr.Scalars(val.item()))
# display each dimension of observed state space (e.g. agent position in joint space) # display each dimension of observed state space (e.g. agent position in joint space)
if OBS_STATE in batch: if OBS_STATE in batch:
for dim_idx, val in enumerate(batch[OBS_STATE][i]): for dim_idx, val in enumerate(batch[OBS_STATE][i]):
rr.log(f"state/{dim_idx}", rr.Scalar(val.item())) rr.log(f"state/{dim_idx}", rr.Scalars(val.item()))
if DONE in batch: if DONE in batch:
rr.log(DONE, rr.Scalar(batch[DONE][i].item())) rr.log(DONE, rr.Scalars(batch[DONE][i].item()))
if REWARD in batch: if REWARD in batch:
rr.log(REWARD, rr.Scalar(batch[REWARD][i].item())) rr.log(REWARD, rr.Scalars(batch[REWARD][i].item()))
if "next.success" in batch: if "next.success" in batch:
rr.log("next.success", rr.Scalar(batch["next.success"][i].item())) rr.log("next.success", rr.Scalars(batch["next.success"][i].item()))
if mode == "local" and save: if mode == "local" and save:
# save .rrd locally # save .rrd locally

View File

@@ -46,7 +46,7 @@ def log_rerun_data(
This function iterates through the provided observation and action dictionaries and sends their contents This function iterates through the provided observation and action dictionaries and sends their contents
to the Rerun viewer. It handles different data types appropriately: to the Rerun viewer. It handles different data types appropriately:
- Scalar values (floats, ints) are logged as `rr.Scalar`. - Scalars values (floats, ints) are logged as `rr.Scalars`.
- 3D NumPy arrays that resemble images (e.g., with 1, 3, or 4 channels first) are transposed - 3D NumPy arrays that resemble images (e.g., with 1, 3, or 4 channels first) are transposed
from CHW to HWC format and logged as `rr.Image`. from CHW to HWC format and logged as `rr.Image`.
- 1D NumPy arrays are logged as a series of individual scalars, with each element indexed. - 1D NumPy arrays are logged as a series of individual scalars, with each element indexed.
@@ -65,7 +65,7 @@ def log_rerun_data(
key = k if str(k).startswith(OBS_PREFIX) else f"{OBS_STR}.{k}" key = k if str(k).startswith(OBS_PREFIX) else f"{OBS_STR}.{k}"
if _is_scalar(v): if _is_scalar(v):
rr.log(key, rr.Scalar(float(v))) rr.log(key, rr.Scalars(float(v)))
elif isinstance(v, np.ndarray): elif isinstance(v, np.ndarray):
arr = v arr = v
# Convert CHW -> HWC when needed # Convert CHW -> HWC when needed
@@ -73,7 +73,7 @@ def log_rerun_data(
arr = np.transpose(arr, (1, 2, 0)) arr = np.transpose(arr, (1, 2, 0))
if arr.ndim == 1: if arr.ndim == 1:
for i, vi in enumerate(arr): for i, vi in enumerate(arr):
rr.log(f"{key}_{i}", rr.Scalar(float(vi))) rr.log(f"{key}_{i}", rr.Scalars(float(vi)))
else: else:
rr.log(key, rr.Image(arr), static=True) rr.log(key, rr.Image(arr), static=True)
@@ -84,13 +84,13 @@ def log_rerun_data(
key = k if str(k).startswith("action.") else f"action.{k}" key = k if str(k).startswith("action.") else f"action.{k}"
if _is_scalar(v): if _is_scalar(v):
rr.log(key, rr.Scalar(float(v))) rr.log(key, rr.Scalars(float(v)))
elif isinstance(v, np.ndarray): elif isinstance(v, np.ndarray):
if v.ndim == 1: if v.ndim == 1:
for i, vi in enumerate(v): for i, vi in enumerate(v):
rr.log(f"{key}_{i}", rr.Scalar(float(vi))) rr.log(f"{key}_{i}", rr.Scalars(float(vi)))
else: else:
# Fall back to flattening higher-dimensional arrays # Fall back to flattening higher-dimensional arrays
flat = v.flatten() flat = v.flatten()
for i, vi in enumerate(flat): for i, vi in enumerate(flat):
rr.log(f"{key}_{i}", rr.Scalar(float(vi))) rr.log(f"{key}_{i}", rr.Scalars(float(vi)))

View File

@@ -45,7 +45,7 @@ def mock_rerun(monkeypatch):
calls.append((key, obj, kwargs)) calls.append((key, obj, kwargs))
dummy_rr = SimpleNamespace( dummy_rr = SimpleNamespace(
Scalar=DummyScalar, Scalars=DummyScalar,
Image=DummyImage, Image=DummyImage,
log=dummy_log, log=dummy_log,
init=lambda *a, **k: None, init=lambda *a, **k: None,
@@ -109,9 +109,9 @@ def test_log_rerun_data_envtransition_scalars_and_image(mock_rerun):
vu.log_rerun_data(observation=obs_data, action=action_data) vu.log_rerun_data(observation=obs_data, action=action_data)
# We expect: # We expect:
# - observation.state.temperature -> Scalar # - observation.state.temperature -> Scalars
# - observation.camera -> Image (HWC) with static=True # - observation.camera -> Image (HWC) with static=True
# - action.throttle -> Scalar # - action.throttle -> Scalars
# - action.vector_0, action.vector_1 -> Scalars # - action.vector_0, action.vector_1 -> Scalars
expected_keys = { expected_keys = {
f"{OBS_STATE}.temperature", f"{OBS_STATE}.temperature",