Files
2026-07-13 13:05:14 +08:00

137 lines
3.7 KiB
Python

"""Compute viewer URLs for segments using the segment_url UDF."""
# region: setup
from __future__ import annotations
from datetime import datetime, timedelta
from pathlib import Path
import pyarrow as pa
from datafusion import lit
import rerun as rr
from rerun.utilities.datafusion.functions.url_generation import segment_url
sample_5_path = (
Path(__file__).parents[5] / "tests" / "assets" / "rrd" / "sample_5"
)
server = rr.server.Server(datasets={"sample_dataset": sample_5_path})
client = server.client()
dataset = client.get_dataset(name="sample_dataset")
# Pick 3 deterministic segment IDs and create a view filtered to them
segment_ids = sorted(dataset.segment_ids())[:3]
view = dataset.filter_segments(segment_ids)
# Build a synthetic metadata table keyed by rerun_segment_id
base_time = datetime(2023, 11, 14, 22, 13, 20)
event_times = [base_time + timedelta(seconds=i) for i in range(3)]
meta = pa.record_batch(
{
"rerun_segment_id": segment_ids,
"event_time": pa.array(event_times, type=pa.timestamp("ns")),
"range_start": pa.array(event_times, type=pa.timestamp("ns")),
"range_end": pa.array(
[t + timedelta(milliseconds=500) for t in event_times],
type=pa.timestamp("ns"),
),
"entity_path": [
"/camera/rgb",
"/observation/joint_positions",
"/observation/gripper_state",
],
},
)
ctx = client.ctx
meta_df = ctx.from_arrow(meta)
# endregion: setup
# region: basic
basic = view.segment_table().select("rerun_segment_id").sort("rerun_segment_id")
basic = basic.with_column("url", segment_url(dataset))
for url in basic.select("url").to_pydict()["url"]:
print(url)
# endregion: basic
# region: timestamp
ts = view.segment_table(join_meta=meta_df).select(
"rerun_segment_id", "event_time"
)
ts = ts.sort("rerun_segment_id")
ts = ts.with_column(
"url",
segment_url(dataset, timestamp="event_time", timeline_name="real_time"),
)
for url in ts.select("url").to_pydict()["url"]:
print(url)
# endregion: timestamp
# region: time_range
tr = view.segment_table(join_meta=meta_df).select(
"rerun_segment_id", "range_start", "range_end"
)
tr = tr.sort("rerun_segment_id")
tr = tr.with_column(
"url",
segment_url(
dataset,
time_range_start="range_start",
time_range_end="range_end",
timeline_name="real_time",
),
)
for url in tr.select("url").to_pydict()["url"]:
print(url)
# endregion: time_range
# region: selection
sel = view.segment_table(join_meta=meta_df).select(
"rerun_segment_id", "entity_path"
)
sel = sel.sort("rerun_segment_id")
sel = sel.with_column("url", segment_url(dataset, selection="entity_path"))
for url in sel.select("url").to_pydict()["url"]:
print(url)
# endregion: selection
# region: combined
combined = view.segment_table(join_meta=meta_df).select(
"rerun_segment_id", "event_time", "range_start", "range_end", "entity_path"
)
combined = combined.sort("rerun_segment_id")
combined = combined.with_column(
"url",
segment_url(
dataset,
timestamp="event_time",
timeline_name="real_time",
time_range_start="range_start",
time_range_end="range_end",
selection="entity_path",
),
)
for url in combined.select("url").to_pydict()["url"]:
print(url)
# endregion: combined
# region: expressions
expr = view.segment_table(join_meta=meta_df).select(
"rerun_segment_id", "event_time"
)
expr = expr.sort("rerun_segment_id")
expr = expr.with_column(
"url",
segment_url(
dataset,
timestamp="event_time",
timeline_name="real_time",
selection=lit("/camera/rgb"),
),
)
for url in expr.select("url").to_pydict()["url"]:
print(url)
# endregion: expressions