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.1.tar.gz (74.9 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.1-py3-none-any.whl (24.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tdseries-0.1.1.tar.gz
  • Upload date:
  • Size: 74.9 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.1.tar.gz
Algorithm Hash digest
SHA256 45c5392ce079e5ad1ee7d6140ae40c88f304da701ed2c5e1fd3b68396f1a98ef
MD5 9faab7e5a5c7ec4eec37dde25682c68f
BLAKE2b-256 c7724190e6897264fb12257d56b00f9c1e36a23a4273d4e39afe91b26b44ada5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tdseries-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 24.3 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 855fc22a90a50f1821e068500c77a7f6329b8fcb70f1ab4dfbe2e54763cc243c
MD5 03b835b5b96b76d54f70b08fa7b80001
BLAKE2b-256 4ed30c06155e8e8757ce38c575942b23b0fc6a24b8818648104a7005fe3615da

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