Skip to main content

Immutable pytree frames of tensors with named, indexed dimensions — time as a first-class tick-exact dimension

Project description

tdseries

Immutable pytree frames of tensors with named, indexed dimensions, where time is a first-class dimension stored in exact int64 ticks (nanoseconds).

Built for bundling media signals with co-recorded telemetry and the static geometry that shares their non-time dimensions — e.g. multichannel audio (mic, time) together with microphone positions (mic, 3), rotor speeds (rotor, time) together with rotor positions (rotor, 3):

import tdseries as td

frame = td.Frame({
    "audio":     td.uniform(audio_8xT, sr=44100, dims=("mic", "time")),
    "mic_pos":   td.wrap(pos_8x3, dims=("mic", None)),
    "rps":       td.events(stamps, rps_4xM, dims=("rotor", "time")),
    "rotor_pos": td.wrap(rpos_4x3, dims=("rotor", None)),
    "vad":       td.spans(starts, ends),
    "recording_id": "FLY124",
})

sub  = frame.slice["mic", 0]     # audio -> (T,), mic_pos -> (3,): same mic
clip = frame.time[1.0:4.5]       # seconds; all temporal leaves cut exactly
raw  = frame.ticks[a:b]          # exact int64 tick window
rps  = frame["rps"]              # self-contained absolute-time Series

The model

A dimension is a name plus a domain; every tensor axis carrying the name has an index mapping positions into that domain. Slices are expressed in domain coordinates and translated per-tensor — which is how tensors of different lengths share one dimension:

Index Domain Example
RangeIndex (default) positions mic, rotor
LabelIndex hashable labels mic serial numbers
GridIndex int64 ticks, uniform grid + sub-sample phase audio
StampIndex int64 ticks, sorted point events RPS, IMU
SpanIndex int64 ticks, half-open intervals with identity tags VAD

Time is exact: all anchors and cut points are int64 tick counts, shift is O(1), and the algebra satisfies, at the sample level and without tolerances,

x.ticks[a:b].concat(x.ticks[b:c]) == x.ticks[a:c]

for any tick cut points — including sub-sample cuts through audio and cuts through the middle of a VAD span (split spans re-merge via identity tags).

Everything is immutable. Extracting an entry from a frame hands back a self-contained series re-anchored to absolute time; the frame is untouched.

See DESIGN.md for the full contract.

Development

nix develop        # or: uv sync
uv run pytest

nix develop provides Python + uv and pre-commit hooks (ruff, ruff-format, pyright). Data leaves may be numpy arrays or torch tensors (torch optional: uv sync --extra torch).

Lineage

Extracted from the utils.data module of the harmonic-noise-suppression research project; the tick/phase arithmetic and the slice/concat/shift invariants are ported from there, the named-dimension frame model is new.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tdseries-0.1.0.tar.gz (74.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tdseries-0.1.0-py3-none-any.whl (24.2 kB view details)

Uploaded Python 3

File details

Details for the file tdseries-0.1.0.tar.gz.

File metadata

  • Download URL: tdseries-0.1.0.tar.gz
  • Upload date:
  • Size: 74.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for tdseries-0.1.0.tar.gz
Algorithm Hash digest
SHA256 fa7bee9a6dfc8617982c0c338c8e219aca965bb7b0da5033c03b360de93b0aca
MD5 cea029288178816e8abffbbf7c88d90b
BLAKE2b-256 a693569a31e0753f9d8f49b7d4acf0ad1d42e206d4629bb8dac76a6e695e2c5a

See more details on using hashes here.

File details

Details for the file tdseries-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: tdseries-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 24.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for tdseries-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cf78aa6141f4be24732e0dca83ad5b7f8226878263f1f8d0dac2e0e42d642c84
MD5 7a6633101d3fd3c8700e740fe59bf251
BLAKE2b-256 bcc3a7a2daea260e4e9dd512958dc694e10e7a33e29a2e2dec011efc4d7aaf3e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page