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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa7bee9a6dfc8617982c0c338c8e219aca965bb7b0da5033c03b360de93b0aca
|
|
| MD5 |
cea029288178816e8abffbbf7c88d90b
|
|
| BLAKE2b-256 |
a693569a31e0753f9d8f49b7d4acf0ad1d42e206d4629bb8dac76a6e695e2c5a
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf78aa6141f4be24732e0dca83ad5b7f8226878263f1f8d0dac2e0e42d642c84
|
|
| MD5 |
7a6633101d3fd3c8700e740fe59bf251
|
|
| BLAKE2b-256 |
bcc3a7a2daea260e4e9dd512958dc694e10e7a33e29a2e2dec011efc4d7aaf3e
|