Skip to main content

Tsxtract

High-Performance Time-Series Feature Extraction. Rust Core. Python Ease.

PyPI - Version PyPI - Python Version License: MIT CI

What if time-series feature engineering was 800× faster and used zero defensive memory copies?

Tsxtract is a minimalistic, dependency-light time-series feature extraction library designed to make extracting statistical, temporal, and spectral features across large datasets blazingly fast, memory-efficient, and effortless. It combines a zero-copy Rust engine with a clean, Scikit-Learn-compatible Python interface—ideal for machine learning pipelines, quantitative finance, real-time sensor telemetry, and high-throughput research.

PyPI • Features • Installation • Quickstart • Benchmarks • Streaming & Sliding Windows • Scikit-Learn Integration • Documentation


Why Tsxtract?

Traditional Python time-series feature libraries (tsfresh, TSFEL, catch22) force a painful trade-off: wait minutes to hours for feature extraction, or risk Out-Of-Memory (OOM) crashes from defensive copies. Tsxtract eliminates that trade-off.

  • Blazing Fast: Computes up to 800,256 series/second on standard hardware—outperforming catch22 by 820× and tsfresh by 14,000×.
  • Zero-Copy Ingestion: Directly borrows contiguous NumPy buffer pointers via PyO3. No data duplication, no DataFrame melting, and zero intermediate memory ballooning.
  • 33 Curated, High-Signal Features: Avoids the curse of dimensionality. Features are mathematically non-redundant ($|r| < 0.70$ for 83.3% of pairs), spanning distribution moments, quantiles, crossings, spectral power, and permutation entropy.
  • Full Multi-Core Scaling (GIL-Free): Releases Python's Global Interpreter Lock (GIL) across the entire computation region, saturating all CPU cores with Rayon's work-stealing scheduler.
  • Real-Time Streaming Ready: Compute streaming features with constant memory $O(1)$ state updates using the built-in StreamingExtractor.

Key Features

  • Zero-Copy Hybrid Architecture: PyO3 bindings pass 2D NumPy pointer references directly into native Rust SIMD and multi-core loops without copying a single byte.
  • Batch-First Parallelism: Processes $N$ series in parallel across hardware threads instead of running serial Python loops.
  • Dual API Support: Extract raw 2D NumPy matrices for maximum speed, or labeled Pandas/Polars DataFrames for immediate exploratory analysis.
  • Scikit-Learn Compatible: Seamlessly drop TsxtractTransformer into any sklearn.pipeline.Pipeline or cross-validation grid search.
  • Realfft & Branchless Primitives: Preallocated thread-local FFT workspaces and branchless quantile quickselects ensure predictable sub-millisecond execution.
  • Streaming & Sliding Windows: Extract rolling features over continuous data streams without reallocating buffers.

Installation

Precompiled binary wheels are available on PyPI (tsxtract-rs) for Linux (x86_64, aarch64), macOS (Apple Silicon arm64, Intel x86_64), and Windows (x64). No Rust compiler required!

# Core install (NumPy only)
pip install tsxtract-rs

# With optional Pandas DataFrame support
pip install "tsxtract-rs[pandas]"

Using uv or conda:

uv add tsxtract-rs

From Source (Development)

git clone https://github.com/Aamod007/Tsxtract.git
cd Tsxtract
pip install maturin
maturin develop --release

Quickstart

1. Batch Feature Extraction (2D NumPy)

Extract 33 features from 100,000 series in under a second:

import numpy as np
import tsxtractor as tsx

# 1,000 series of 500 time-steps (float64)
X = np.random.randn(1000, 500)

# Extract 33 features (zero-copy, multi-threaded)
features = tsx.extract_features(X)

print("Output shape:", features.shape)      # (1000, 33)
print("Feature names:", tsx.feature_names()[:5])
# ['mean', 'std', 'var', 'min', 'max', ...]

2. Labeled Pandas DataFrame

# Returns a labeled pandas DataFrame with clean column headers
df = tsx.extract_features_df(X)
print(df.head())

3. Ragged Series of Different Lengths

# Sequences of varying lengths are supported natively
arr1 = np.random.randn(300)
arr2 = np.random.randn(500)
arr3 = np.random.randn(120)

features = tsx.extract_features([arr1, arr2, arr3])
print(features.shape)  # (3, 33)

4. Sliding Windows over a Long Signal

# Extract rolling window features from a 1D continuous sensor stream
signal = np.random.randn(100_000)
windowed_features = tsx.sliding_features(signal, window=256, stride=64)

Scikit-Learn Pipeline

Integrate directly into standard classification, regression, or clustering pipelines:

import numpy as np
import tsxtractor as tsx
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler

class TsxtractTransformer(BaseEstimator, TransformerMixin):
    """Extract 33 Tsxtract features per input row (one series per row)."""
    def fit(self, X, y=None):
        return self
    def transform(self, X):
        X_contig = np.ascontiguousarray(X, dtype=np.float64)
        return tsx.extract_features(X_contig)

# Assemble end-to-end reproducible pipeline
pipeline = Pipeline([
    ("features", TsxtractTransformer()),
    ("scaler", StandardScaler()),
    ("classifier", RandomForestClassifier(n_estimators=100))
])

# Fit on raw time-series training data (n_samples, time_steps)
pipeline.fit(X_train, y_train)
y_pred = pipeline.predict(X_test)

Streaming & Real-Time Telemetry

Maintain running statistical features in real-time embedded systems or trading loops without recomputing from scratch:

from tsxtractor import StreamingExtractor

# Initialize streaming extractor with window capacity
stream = StreamingExtractor(capacity=500)

for tick in incoming_data_feed:
    stream.push(tick)
    
    # 1. True O(1) online fast tier (sub-microsecond, no sorting, no FFT):
    # Returns 12 features: mean, std, var, skew, kurt, abs_energy, rms,
    # mean_abs_change, mean_change, cid_ce, zero_crossings, trend_slope
    fast_features = stream.compute(kind="fast")
    
    # 2. Complete 33-feature set evaluated over the current rolling window:
    all_features = stream.compute(kind="all")

Profiles & Feature Catalog

Choose the performance-to-breadth profile that fits your pipeline:

  • minimal (10 features): Centered moments, extrema, energy, zero crossings. Zero sorting and zero FFT overhead (~0.51 ms per 1,000 series; ~2,000,000 series/sec).
  • core33 (33 features - Default): Frozen authoritative v1.0 set spanning all temporal, quantile, and spectral domains (~1.80 ms per 1,000 series; 555,000 series/sec).
  • extended (143 features): Adds distribution statistics, crossings, nonlinear stats, PACF (Levinson-Durbin), full linear regression trend, and spectral aggregations.
  • full (543 features): Complete high-coverage bank including all 400 FFT coefficient parameters extracted directly from the precomputed spectrum with zero redundant transforms.
import tsxtractor

# List available profiles and feature counts
print(tsxtractor.list_profiles())
# {'minimal': 10, 'core33': 33, 'extended': 143, 'full': 543}

# Inspect individual features and their computational prerequisites
print(tsxtractor.describe_feature("autocorrelation__lag_1"))

Benchmarks

Measured on a 16-core system across 1,000 series of 500 steps (500,000 data points total), traceable to CI artifacts in benches/results/bench_matrix.json:

Profile Throughput (1,000 × 500):

Profile Features Latency (1k) Per-Series Per-Feature Cost Throughput
minimal 10 0.51 ms 0.51 µs 0.0507 µs 1,972,776 series/s
core33 33 1.80 ms 1.80 µs 0.0546 µs 555,016 series/s
extended 143 7.12 ms 7.12 µs 0.0498 µs 140,395 series/s
full 543 8.36 ms 8.36 µs 0.0154 µs 119,654 series/s

Multi-Core Scaling (core33, 1,000 × 500):

Worker Threads Latency Per-Series Cost Speedup vs 1 Thread Scaling Efficiency
1 Thread 11.31 ms 11.31 µs 1.00× 100.0%
2 Threads 6.03 ms 6.03 µs 1.88× 93.8%
4 Threads 3.58 ms 3.58 µs 3.16× 78.9%
8 Threads 2.52 ms 2.52 µs 4.49× 56.1%
16 Threads 2.60 ms 2.60 µs 4.34× 27.1%

Competitive Landscape (1,000 × 500):

Library Features Runtime (1k × 500) Series / sec Speedup vs Competitor
Tsxtract (core33) 33 1.80 ms 555,016 Baseline (1.0×)
catch22 22 1,045.8 ms 956 580× slower
TSFEL 156 9,806.6 ms 102 5,443× slower
tsfresh 777 100,500.0 ms 10 55,779× slower

Memory Footprint (100,000 series × 500 steps):

  • Tsxtract: 25.18 MiB allocated memory (strictly the output matrix: $100,000 \times 33 \times 8\text{ B}$, with +0.00 MiB intermediate overhead).
  • tsfresh / Pandas: +1,250 MiB memory ballooning due to melted DataFrame indices.

The 33 Curated Features

Tsxtract deliberately computes 33 high-signal, non-redundant features spanning all temporal domains:

  • Distribution Moments: Mean, Standard Deviation, Variance, Skewness, Kurtosis.
  • Extrema & Spans: Min, Max, Peak-to-Peak Range, Quantiles (q05, q25, median, q75, q95), Interquartile Range (IQR).
  • Dynamics & Crossing: Zero Crossing Rate, Mean Crossing Rate, Root Mean Square (RMS), Crest Factor, Median Absolute Deviation (MAD).
  • Temporal Differences: Mean Absolute Change, Mean Consecutive Change, Number of Local Peaks.
  • Autocorrelation Structure: Lag-1, Lag-2, Lag-3, Lag-5, Lag-10 Autocorrelation.
  • Spectral Domain: Energy, Spectral Energy, Dominant Frequency, Spectral Centroid, Spectral Spread, Spectral Roll-off.
  • Complexity: Permutation Entropy (order 3, delay 1).

Contributing

Contributions, bug reports, and PRs are welcome! Please check CONTRIBUTING.md for details on setting up the local Rust/Python development environment and running the benchmark suites.


License

Distributed under the MIT License. See LICENSE for details.

Built with Rust and Python by Aamod.

Metadata

Release files for tsxtract-rs 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tsxtract-rs 0.4.0
File Size Uploaded
tsxtract_rs-0.4.0.tar.gz 4.8 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for tsxtract-rs 0.4.0
File
tsxtract_rs-0.4.0-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
tsxtract_rs-0.4.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
tsxtract_rs-0.4.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 abi3 Linux glibc 2.17+ ARM64 Details
tsxtract_rs-0.4.0-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
tsxtract_rs-0.4.0-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 10.9 MB

Release files / tsxtract_rs-0.4.0.tar.gz

Download URL tsxtract_rs-0.4.0.tar.gz
Size 4.8 MB
Tags Source
SHA-256 checksum
How to use checksums
9283708f8dd5ce3f6de5efcf9cedc2aa0370fa7c4f1cd98ae8f93af63e99be90
BLAKE2b-256 checksum
How to use checksums
978876357370cee00a4af03be55c8de7b9439e2ca59bf4e40c0c6e63426e437f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.

Transparency log

Release files / tsxtract_rs-0.4.0-cp310-abi3-win_amd64.whl

Download URL tsxtract_rs-0.4.0-cp310-abi3-win_amd64.whl
Size 624.8 kB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
dd0f5f7bf1bc5c148bab9190e2126b93b0e85325c6270af91b66d84daa57b65c
BLAKE2b-256 checksum
How to use checksums
9edd3fa01ced7e39556ec478888f68500116b27c6bfc31250ff1148f40bc5488
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.

Transparency log

Release files / tsxtract_rs-0.4.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL tsxtract_rs-0.4.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.3 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
714b39519a6fc4ed28179c7b901a67bbe8d0fa1ed9ea7ed85e31c54832f52842
BLAKE2b-256 checksum
How to use checksums
bbdb9abcb330e4410c37360091fd0da06664b944c4091d753a4b73485db9ec4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.

Transparency log

Release files / tsxtract_rs-0.4.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL tsxtract_rs-0.4.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 1.8 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
154c9252a7775f28919c632a0ff0e5ab4e7e61a8abee4be0741a42a4acd50509
BLAKE2b-256 checksum
How to use checksums
7c6e383cba1ab1f40c8896f2dcb7975113cbd92973c7256cc91a4d3d5a9dab41
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.

Transparency log

Release files / tsxtract_rs-0.4.0-cp310-abi3-macosx_11_0_arm64.whl

Download URL tsxtract_rs-0.4.0-cp310-abi3-macosx_11_0_arm64.whl
Size 579.0 kB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
15d8c44a43a7f7d66a500d201949790bb1f24900cc9a2559247e4958034b10ad
BLAKE2b-256 checksum
How to use checksums
b7f9f0e8d1be5ffe20ceae707747787ceedb7f57725b956dac5a5ea79f2c9eb7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.

Transparency log

Release files / tsxtract_rs-0.4.0-cp310-abi3-macosx_10_12_x86_64.whl

Download URL tsxtract_rs-0.4.0-cp310-abi3-macosx_10_12_x86_64.whl
Size 711.2 kB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
7a2a9dc71a96a21086aa5b9c542471f0f800122eb769faa39d507ec5ccc1e4db
BLAKE2b-256 checksum
How to use checksums
3e38711290355bbf9276411273432e2c2afb292c7868427e06b4ad0c7f66574c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.4.0 This release

6 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page