Skip to content

Data model

TimeNet is a standardization layer. It registers, downloads, converts, and serves different time-series datasets in one on-disk format (TimeF). Then it gives you the data. TimeNet is not a training toolkit. These pages show the shape of that data:

  • Datasets: versioned collections addressed by an org/name id.
  • Records: one recording with its signals, annotations, and tasks.
  • Time series: one signal's values over time. A record has one or more.
  • Annotations: scoped side-information in three shapes.
  • Tasks: the labeled training targets built from a record.

The code examples follow one running example: a machine's vibration and temperature signals. But the same primitives describe any sensor stream, from an ECG to a market series.

Ingesting a dataset

To onboard a dataset, you write one BaseConnector. The engine drives it through a fixed pipeline. download fetches raw files (I/O only). convert parses them into an in-memory dataset (CPU only). The engine then derives the schema from the data. It stores the result as parquet plus a manifest.json. The whole surface is frozen dataclasses. So datasets round-trip deterministically, and reading a compiled version never runs connector code.

flowchart LR
    D["download()<br/><i>I/O · fetch raw refs</i>"]
    C["convert()<br/><i>CPU only</i>"]
    S["derive_schema()<br/><i>types from data</i>"]
    W["store()<br/><i>TimeFWriter</i>"]
    R[("registry<br/>parquet + manifest.json")]
    D --> C --> S --> W --> R