# Notebook display

Cards for Nominal resources

In Jupyter, VS Code and Colab, the Nominal Python Client shows assets, runs, datasets, channels
and other resources as cards. A card shows the resource’s fields and related resources, links
them to the Nominal app, and draws a diagram of how they connect. This notebook shows each card
for a simulated helicopter rotor test rig, then how to configure the cards.

**Requirements:** a `default` [profile](https://nominal-io.github.io/nominal-client/guides/api-keys-setup/ "Python Client")
for the Nominal Python Client. [Running the notebooks](https://dev.nominal.io/demos/running.md) explains how to set it up.

Each execution of the notebook reuses the rig. It archives what earlier executions created on
it, so the rig holds one set of data: this execution’s.

## Generate sample data

The rig is a tail rotor gearbox test stand, registered in Nominal as an
[asset](https://nominal-io.github.io/nominal-client/guides/assets/ "Python Client"). Its test spins up the rotor and measures the rotor’s
angular velocity, the gearbox temperature and vibration.

The test records three minutes of data at 10 Hz: the rotor spins up, holds near 31 rad/s
(about 300 rpm), and spins down. Telemetry and vibration go in separate tables:

Show code cell source

Hide code cell source

```ipython3
import numpy as np
import pandas as pd

t = np.arange(1800) / 10
speed = np.interp(t, [0, 30, 120, 150, 180], [0, 31.4, 31.4, 0, 0])
test_start = pd.Timestamp.now(tz="UTC").floor("s") - pd.Timedelta(minutes=10)
times = test_start + pd.to_timedelta(t, unit="s")
rng = np.random.default_rng(2)
tables = {
    "telemetry": pd.DataFrame(
        {
            "time": times,
            "rotor_speed": speed.round(3),
            # The gearbox warms with each rotor revolution and levels off above 70 °C.
            "gearbox_temp": (
                40 + 35 * (1 - np.exp(-np.cumsum(speed) / 15000))
            ).round(2),
        }
    ),
    "vibration": pd.DataFrame(
        {
            "time": times,
            "accel_rms": (0.02 * speed + rng.normal(0, 0.05, t.size)).round(4),
        }
    ),
}
tables["telemetry"].head()
```

|  | time | rotor_speed | gearbox_temp |
| --- | --- | --- | --- |
| 0 | 2026-11-06 16:41:50.000+00:00 | 0.000 | 40.0 |
| 1 | 2026-11-06 16:41:50.100+00:00 | 0.105 | 40.0 |
| 2 | 2026-11-06 16:41:50.200+00:00 | 0.209 | 40.0 |
| 3 | 2026-11-06 16:41:50.300+00:00 | 0.314 | 40.0 |
| 4 | 2026-11-06 16:41:50.400+00:00 | 0.419 | 40.0 |

Each table becomes a [dataset](https://nominal-io.github.io/nominal-client/guides/datasets/overview/ "Python Client") on the rig, under its own data scope:

Show code cell source

Hide code cell source

```ipython3
from nominal.thirdparty.pandas import upload_dataframe

units = {"rotor_speed": "rad/s", "gearbox_temp": "°C", "accel_rms": "g"}
for scope, table in tables.items():
    # The upload writes the index as the first column, so the timestamps go there.
    dataset = upload_dataframe(
        client,
        table.set_index("time"),
        f"RTR-02 {scope}",
        "time",
        timestamp_type="iso_8601",
        labels=[scope],
        properties={"sample_rate_hz": "10"},
    )
    rig.add_dataset(scope, dataset)
    for channel in dataset.get_channels():
        channel.update(unit=units[channel.name])
```

Each phase of the test becomes a run on the rig, and the gearbox overheating late in the hold
becomes an event:

Show code cell source

Hide code cell source

```ipython3
from nominal.core import EventType

seconds = pd.Timedelta(seconds=1)
for name, begin, end in [
    ("Spin-up", 0, 30),
    ("Hold at 300 rpm", 30, 120),
    ("Spin-down", 120, 150),
]:
    rig.create_run(
        f"RTR-02 {name}",
        start=test_start + begin * seconds,
        end=test_start + end * seconds,
        labels=["example"],
        properties={"test_bay": "Bay 3", "gearbox_sn": "GB-1187"},
        links=[
            {
                "url": "https://dev.nominal.io/platform/data-model/",
                "title": "Nominal data model",
            }
        ],
    )
rig.create_event(
    "Gearbox above 70 °C",
    EventType.FLAG,
    start=test_start + 108 * seconds,
    duration=72 * seconds,
    description="Gearbox temperature passed the 70 °C limit late in the hold.",
    labels=["example"],
);  # the cell shows no output
```

## Connect to Nominal

A [`NominalClient`](https://nominal-io.github.io/nominal-client/ref/generated/nominal.core.NominalClient/#nominal.core.NominalClient "(in Python Client)") connects to Nominal with a profile. Find the rig by
its properties:

```ipython3
from nominal.core import NominalClient

client = NominalClient.from_profile("default")
rig = client.search_assets(
    properties={"rig_id": "RTR-02", "example": "notebook_display"}
)[0]
```

## An asset

The rig’s [`Asset`](https://nominal-io.github.io/nominal-client/ref/generated/nominal.core.Asset/#nominal.core.Asset "(in Python Client)") card lists its properties, its datasets, by [data scope](https://nominal-io.github.io/nominal-client/guides/assets/#add-data-with-data-scopes),
and its runs, newest first. Each section starts folded. Click its title to open it.
Each name links to its page in Nominal, and its copy button copies its RID.
**Open in Nominal** opens the asset’s own page:

```ipython3
rig
```

```
Asset(rid='ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f', name='Rotor test rig RTR-02', description='Tail rotor gearbox test stand', properties=mappingproxy({'example': 'notebook_display', 'rig_id': 'RTR-02'}), labels=('test-stand',), created_at=1793719747873297000, is_archived=False)
```

Asset **Rotor test rig RTR-02** [Open in Nominal ↗](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/assets/ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f)

| RID | `ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f`⧉ |
| --- | --- |
| Description | Tail rotor gearbox test stand |
| Created | 2026-11-03T15:29:07Z |
| Labels | test-stand |

Properties (2)

| example | notebook_display |
| --- | --- |
| rig_id | RTR-02 |

RelationshipsDatasets (2)

| Data scope | Dataset | Start | End |
| --- | --- | --- | --- |
| `telemetry` | [RTR-02 telemetry](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/datasets/ri.catalog.cerulean-staging.dataset.45d0b732-6fb5-c6b8-510b-abfd79fdff22)⧉ | 2026-11-06T16:41:50Z | 2026-11-06T16:44:49Z |
| `vibration` | [RTR-02 vibration](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/datasets/ri.catalog.cerulean-staging.dataset.32e0616a-912a-be7a-c0f6-af21c08da6aa)⧉ | 2026-11-06T16:41:50Z | 2026-11-06T16:44:49Z |

Runs (3)

| Run | Name | Start | Duration |
| --- | --- | --- | --- |
| #471 | [RTR-02 Spin-down](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/runs/ri.scout.cerulean-staging.run.1ec79e1d-7549-86fc-831b-f9e0c778374d)⧉ | 2026-11-06T16:43:50Z | 30 s |
| #470 | [RTR-02 Hold at 300 rpm](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/runs/ri.scout.cerulean-staging.run.34046f6f-0356-0572-404e-89d3c53686e3)⧉ | 2026-11-06T16:42:20Z | 1 min 30 s |
| #469 | [RTR-02 Spin-up](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/runs/ri.scout.cerulean-staging.run.83e18381-2662-f749-1ff1-fd1a27b4f071)⧉ | 2026-11-06T16:41:50Z | 30 s |

## Relationship diagrams

The card above has a **Relationships** section, after the properties, with a diagram of the rig and
the resources around it, drawn like the diagrams in
[Per-asset organization](https://dev.nominal.io/platform/data-model/organization/per-asset.md).
Data flows from the bottom up: each dataset feeds the rig under its data scope’s ref name, and the
rig’s runs sit above it. The rig’s own node has the thicker border.
Each node links to its page in Nominal, and hovering over a node shows its full name.

Run, dataset, workbook, event and data review cards draw diagrams too.
A diagram uses only what its card already loads, so it makes no requests of its own,
and it needs no JavaScript, so it also displays in untrusted and saved notebooks.

An asset with hundreds of runs would make a diagram too large to read, so a diagram draws at most
`graph_max_nodes` nodes, 20 by default. Past that, each group shows its first few nodes and a
node counting the rest. That node links to the section of the card that lists them all.
The rig’s six nodes fit, so its diagram draws every dataset and run.
Here `collapse_threshold=10` opens the sections with up to 10 items, so the diagram shows open:

```ipython3
from IPython.display import display

from nominal.core import set_display_options

with set_display_options(collapse_threshold=10):
    display(rig)
```

```
Asset(rid='ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f', name='Rotor test rig RTR-02', description='Tail rotor gearbox test stand', properties=mappingproxy({'example': 'notebook_display', 'rig_id': 'RTR-02'}), labels=('test-stand',), created_at=1793719747873297000, is_archived=False)
```

Asset **Rotor test rig RTR-02** [Open in Nominal ↗](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/assets/ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f)

| RID | `ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f`⧉ |
| --- | --- |
| Description | Tail rotor gearbox test stand |
| Created | 2026-11-03T15:29:07Z |
| Labels | test-stand |

Properties (2)

| example | notebook_display |
| --- | --- |
| rig_id | RTR-02 |

RelationshipsDatasets (2)

| Data scope | Dataset | Start | End |
| --- | --- | --- | --- |
| `telemetry` | [RTR-02 telemetry](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/datasets/ri.catalog.cerulean-staging.dataset.45d0b732-6fb5-c6b8-510b-abfd79fdff22)⧉ | 2026-11-06T16:41:50Z | 2026-11-06T16:44:49Z |
| `vibration` | [RTR-02 vibration](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/datasets/ri.catalog.cerulean-staging.dataset.32e0616a-912a-be7a-c0f6-af21c08da6aa)⧉ | 2026-11-06T16:41:50Z | 2026-11-06T16:44:49Z |

Runs (3)

| Run | Name | Start | Duration |
| --- | --- | --- | --- |
| #471 | [RTR-02 Spin-down](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/runs/ri.scout.cerulean-staging.run.1ec79e1d-7549-86fc-831b-f9e0c778374d)⧉ | 2026-11-06T16:43:50Z | 30 s |
| #470 | [RTR-02 Hold at 300 rpm](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/runs/ri.scout.cerulean-staging.run.34046f6f-0356-0572-404e-89d3c53686e3)⧉ | 2026-11-06T16:42:20Z | 1 min 30 s |
| #469 | [RTR-02 Spin-up](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/runs/ri.scout.cerulean-staging.run.83e18381-2662-f749-1ff1-fd1a27b4f071)⧉ | 2026-11-06T16:41:50Z | 30 s |

`show_graph=False` leaves diagrams out of the cards.

## Configuring the display

[`set_display_options`](https://nominal-io.github.io/nominal-client/ref/generated/nominal.core.set_display_options/#nominal.core.set_display_options "(in Python Client)") changes how every card looks,
from that cell on, and [`get_display_options`](https://nominal-io.github.io/nominal-client/ref/generated/nominal.core.get_display_options/#nominal.core.get_display_options "(in Python Client)") returns the current settings as [`DisplayOptions`](https://nominal-io.github.io/nominal-client/ref/generated/nominal.core.DisplayOptions/#nominal.core.DisplayOptions "(in Python Client)"):

```ipython3
from nominal.core import get_display_options, set_display_options

get_display_options()
```

```myst-ansi
DisplayOptions(style='html', timezone='UTC', time_format='iso', time_precision='s', show_link=True, fetch_details=True, collapse_threshold=0, max_items=50, fetch_timeout=5.0, show_graph=True, graph_max_nodes=20)
```

Timestamps show to the second by default. Hover over one to see it to the nanosecond.
For example, show timestamps in the test site’s time zone, to the millisecond, in a more
readable format:

```ipython3
set_display_options(
    timezone="America/Denver", time_precision="ms", time_format="readable"
)
rig
```

```
Asset(rid='ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f', name='Rotor test rig RTR-02', description='Tail rotor gearbox test stand', properties=mappingproxy({'example': 'notebook_display', 'rig_id': 'RTR-02'}), labels=('test-stand',), created_at=1793719747873297000, is_archived=False)
```

Asset **Rotor test rig RTR-02** [Open in Nominal ↗](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/assets/ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f)

| RID | `ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f`⧉ |
| --- | --- |
| Description | Tail rotor gearbox test stand |
| Created | 2026-11-03 08:29:07.873 MST |
| Labels | test-stand |

Properties (2)

| example | notebook_display |
| --- | --- |
| rig_id | RTR-02 |

RelationshipsDatasets (2)

| Data scope | Dataset | Start | End |
| --- | --- | --- | --- |
| `telemetry` | [RTR-02 telemetry](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/datasets/ri.catalog.cerulean-staging.dataset.45d0b732-6fb5-c6b8-510b-abfd79fdff22)⧉ | 2026-11-06 09:41:50 MST | 2026-11-06 09:44:49.900 MST |
| `vibration` | [RTR-02 vibration](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/datasets/ri.catalog.cerulean-staging.dataset.32e0616a-912a-be7a-c0f6-af21c08da6aa)⧉ | 2026-11-06 09:41:50 MST | 2026-11-06 09:44:49.900 MST |

Runs (3)

| Run | Name | Start | Duration |
| --- | --- | --- | --- |
| #471 | [RTR-02 Spin-down](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/runs/ri.scout.cerulean-staging.run.1ec79e1d-7549-86fc-831b-f9e0c778374d)⧉ | 2026-11-06 09:43:50 MST | 30 s |
| #470 | [RTR-02 Hold at 300 rpm](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/runs/ri.scout.cerulean-staging.run.34046f6f-0356-0572-404e-89d3c53686e3)⧉ | 2026-11-06 09:42:20 MST | 1 min 30 s |
| #469 | [RTR-02 Spin-up](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/runs/ri.scout.cerulean-staging.run.83e18381-2662-f749-1ff1-fd1a27b4f071)⧉ | 2026-11-06 09:41:50 MST | 30 s |

Called on its own like this, a change lasts until the kernel restarts.
To use the same options in every notebook, put the call in an
[IPython startup file](https://ipython.readthedocs.io/en/stable/interactive/tutorial.html#startup-files),
such as `~/.ipython/profile_default/startup/nominal.py`.

Each card loads its related resources from Nominal, with a few requests, and waits at most
`fetch_timeout` seconds, 5 by default, for them. A section that hasn’t loaded by then says so.
To display cards faster, or offline, `fetch_details=False` shows only the fields
the resource already holds.
Used in a `with` block, the change lasts only until the block ends:

```ipython3
from IPython.display import display

with set_display_options(fetch_details=False):
    display(rig)
```

```
Asset(rid='ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f', name='Rotor test rig RTR-02', description='Tail rotor gearbox test stand', properties=mappingproxy({'example': 'notebook_display', 'rig_id': 'RTR-02'}), labels=('test-stand',), created_at=1793719747873297000, is_archived=False)
```

Asset **Rotor test rig RTR-02** [Open in Nominal ↗](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/assets/ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f)

| RID | `ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f`⧉ |
| --- | --- |
| Description | Tail rotor gearbox test stand |
| Created | 2026-11-03 08:29:07.873 MST |
| Labels | test-stand |

Properties (2)

| example | notebook_display |
| --- | --- |
| rig_id | RTR-02 |

`style="text"` shows the plain text form instead of cards:

```ipython3
with set_display_options(style="text"):
    display(rig)
```

```
Asset(rid='ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f', name='Rotor test rig RTR-02', description='Tail rotor gearbox test stand', properties=mappingproxy({'example': 'notebook_display', 'rig_id': 'RTR-02'}), labels=('test-stand',), created_at=1793719747873297000, is_archived=False)
```

## A dataset

A [`Dataset`](https://nominal-io.github.io/nominal-client/ref/generated/nominal.core.Dataset/#nominal.core.Dataset "(in Python Client)") card shows the time span of its data and lists its files and channels:

```ipython3
telemetry = rig.get_dataset("telemetry")
telemetry
```

```
Dataset(rid='ri.catalog.cerulean-staging.dataset.45d0b732-6fb5-c6b8-510b-abfd79fdff22', name='RTR-02 telemetry', description=None, properties=mappingproxy({'sample_rate_hz': '10'}), labels=('telemetry',), bounds=Bounds(start=1793983310000000000, end=1793983489900000000), is_archived=False)
```

Dataset **RTR-02 telemetry** [Open in Nominal ↗](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/datasets/ri.catalog.cerulean-staging.dataset.45d0b732-6fb5-c6b8-510b-abfd79fdff22)

| RID | `ri.catalog.cerulean-staging.dataset.45d0b732-6fb5-c6b8-510b-abfd79fdff22`⧉ |
| --- | --- |
| Start | 2026-11-06 09:41:50 MST |
| End | 2026-11-06 09:44:49.900 MST |
| Duration | 2 min 59.9 s |
| Labels | telemetry |

Properties (1)

| sample_rate_hz | 10 |
| --- | --- |

RelationshipsFiles (1)

| File | Status | Uploaded |
| --- | --- | --- |
| RTR-02 telemetry.csv.gz | success | 2026-11-06 09:51:51.750 MST |

Channels (2)

| Channel | Type | Unit |
| --- | --- | --- |
| rotor_speed | double | rad/s |
| gearbox_temp | double | °C |

## A channel

A numeric [`Channel`](https://nominal-io.github.io/nominal-client/ref/generated/nominal.core.Channel/#nominal.core.Channel "(in Python Client)") card summarizes its data: the number of samples, the minimum,
maximum and mean, the first and last timestamps, and a chart of its range and mean over time:

```ipython3
telemetry.get_channel("gearbox_temp")
```

```
Channel(name='gearbox_temp', data_source='ri.catalog.cerulean-staging.dataset.45d0b732-6fb5-c6b8-510b-abfd79fdff22', data_type=<ChannelDataType.DOUBLE: 'DOUBLE'>, unit='°C', description=None)
```

Channel **gearbox_temp**

| Dataset | `ri.catalog.cerulean-staging.dataset.45d0b732-6fb5-c6b8-510b-abfd79fdff22`⧉ |
| --- | --- |
| Type | double |
| Unit | °C |

Data

| Samples | 1,800 |
| --- | --- |
| Min | 40 °C |
| Max | 72.16 °C |
| Mean | 62.9684 °C |
| First | 2026-11-06 09:41:50 MST |
| Last | 2026-11-06 09:44:49.900 MST |

## A run

A [`Run`](https://nominal-io.github.io/nominal-client/ref/generated/nominal.core.Run/#nominal.core.Run "(in Python Client)") card shows its number, time span and duration, and lists its assets, datasets and links:

```ipython3
hold = next(
    run
    for run in rig.list_runs()
    if run.name == "RTR-02 Hold at 300 rpm" and not run.is_archived
)
hold
```

```
Run(rid='ri.scout.cerulean-staging.run.34046f6f-0356-0572-404e-89d3c53686e3', name='RTR-02 Hold at 300 rpm', description='', properties=mappingproxy({'gearbox_sn': 'GB-1187', 'test_bay': 'Bay 3'}), labels=('example',), links=({'url': 'https://dev.nominal.io/platform/data-model/', 'title': 'Nominal data model'},), start=1793983340000000000, end=1793983430000000000, run_number=470, assets=('ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f',), created_at=1793983920124227000, is_archived=False)
```

Run **#470 RTR-02 Hold at 300 rpm** [Open in Nominal ↗](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/runs/ri.scout.cerulean-staging.run.34046f6f-0356-0572-404e-89d3c53686e3)

| RID | `ri.scout.cerulean-staging.run.34046f6f-0356-0572-404e-89d3c53686e3`⧉ |
| --- | --- |
| Start | 2026-11-06 09:42:20 MST |
| End | 2026-11-06 09:43:50 MST |
| Duration | 1 min 30 s |
| Created | 2026-11-06 09:52:00.124 MST |
| Labels | example |

Properties (2)

| gearbox_sn | GB-1187 |
| --- | --- |
| test_bay | Bay 3 |

RelationshipsAssets (1)

| [Rotor test rig RTR-02](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/assets/ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f)⧉ |
| --- |

Datasets (2)

| Data scope | Dataset | Start | End |
| --- | --- | --- | --- |
| `vibration` | [RTR-02 vibration](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/datasets/ri.catalog.cerulean-staging.dataset.32e0616a-912a-be7a-c0f6-af21c08da6aa)⧉ | 2026-11-06 09:41:50 MST | 2026-11-06 09:44:49.900 MST |
| `telemetry` | [RTR-02 telemetry](https://app.gov.nominal.io/w/ri.security.cerulean-staging.workspace.1870868e-c361-fd28-4bd5-e1b2325eb774/datasets/ri.catalog.cerulean-staging.dataset.45d0b732-6fb5-c6b8-510b-abfd79fdff22)⧉ | 2026-11-06 09:41:50 MST | 2026-11-06 09:44:49.900 MST |

Links (1)

| [Nominal data model](https://dev.nominal.io/platform/data-model.md) |
| --- |

## Files and events

Other resources have cards too, such as a dataset’s files ([`DatasetFile`](https://nominal-io.github.io/nominal-client/ref/generated/nominal.core.DatasetFile/#nominal.core.DatasetFile "(in Python Client)"))
and an asset’s events ([`Event`](https://nominal-io.github.io/nominal-client/ref/generated/nominal.core.Event/#nominal.core.Event "(in Python Client)")):

```ipython3
next(iter(telemetry.list_files()))
```

```
DatasetFile(id='626f5535-9bc2-0b8d-7f80-830a2f9afdd5', dataset_rid='ri.catalog.cerulean-staging.dataset.45d0b732-6fb5-c6b8-510b-abfd79fdff22', name='RTR-02 telemetry.csv.gz', bounds=Bounds(start=1793983310000000000, end=1793983489900000000), uploaded_at=1793983911750759000, ingested_at=1793983913366529000, deleted_at=None, ingest_status=<IngestStatus.SUCCESS: 'SUCCESS'>, timestamp_channel='time', timestamp_type=Iso8601(), file_tags={}, tag_columns={})
```

Dataset file **RTR-02 telemetry.csv.gz**

| ID | `626f5535-9bc2-0b8d-7f80-830a2f9afdd5`⧉ |
| --- | --- |
| Dataset | `ri.catalog.cerulean-staging.dataset.45d0b732-6fb5-c6b8-510b-abfd79fdff22`⧉ |
| Status | success |
| Uploaded | 2026-11-06 09:51:51.750 MST |
| Ingested | 2026-11-06 09:51:53.366 MST |
| Start | 2026-11-06 09:41:50 MST |
| End | 2026-11-06 09:44:49.900 MST |
| Timestamp column | `time` |

```ipython3
rig.search_events()[0]
```

```
Event(rid='ri.scout.cerulean-staging.event.68340669-ff75-fb55-9005-40bc0334c959', asset_rids=('ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f',), name='Gearbox above 70 °C', description='Gearbox temperature passed the 70 °C limit late in the hold.', start=1793983418000000000, duration=72000000000, properties=mappingproxy({}), labels=['example'], type=<EventType.FLAG: 'FLAG'>, is_archived=False, disposition=None)
```

Event **Gearbox above 70 °C**

| RID | `ri.scout.cerulean-staging.event.68340669-ff75-fb55-9005-40bc0334c959`⧉ |
| --- | --- |
| Type | flag |
| Description | Gearbox temperature passed the 70 °C limit late in the hold. |
| Start | 2026-11-06 09:43:38 MST |
| End | 2026-11-06 09:44:50 MST |
| Duration | 1 min 12 s |
| Labels | example |

RelationshipsAssets (1)

| `ri.scout.cerulean-staging.asset.c2d499a7-2fcf-5fd4-2e04-b74688da409f`⧉ |
| --- |
