tsfresh-rs
Fast, drop-in time series feature extraction for Python, powered by Rust.
- import tsfresh
+ import tsfresh_rs as tsfresh
That is the whole migration. Same functions, same arguments, same 783 feature columns, same column names in the same order — verified by 478 tests that run both libraries on the same input and compare every value, including which inputs each one refuses.
pip install tsfresh-rs
Supports Python 3.10 through 3.14 from a single abi3 wheel per platform.
Why it is faster
tsfresh has two separate performance problems, and fixing only the obvious
one gets you a fraction of the win.
The obvious one is that the calculators are slow. approximate_entropy
materialises an (N−m+1)²×m boolean array to count Chebyshev neighbours;
lempel_ziv_complexity hashes a fresh Python tuple for every substring probe;
sample_entropy builds full distance matrices. Rewriting those in Rust is
worth about 17x.
The less obvious one is everything around them. Per series and per feature, the
reference pays a Python function call, a pandas groupby/apply step, and the
assembly of a wide DataFrame from hundreds of small pieces. That cost does not
shrink when the calculators get faster — and on a comprehensive extraction it
is most of the wall clock.
So this package does not call calculators one at a time. It flattens every
series into one contiguous float64 buffer, compiles the whole feature plan
once, and makes a single call into Rust that fills the entire output matrix
with the GIL released and Rayon over series.
Owning the loop is what turns 17x into 120x.
Benchmarks
AMD Ryzen 5 5600G (6 cores / 12 threads), Python 3.14, tsfresh 0.21.2,
pandas 3.0.5. Every row was checked for agreement before it was timed, so a
fast wrong answer cannot appear in these tables. python bench/bench.py
reproduces them.
End to end, ComprehensiveFCParameters (783 columns per series)
| workload | tsfresh |
tsfresh-rs |
speedup |
|---|---|---|---|
| 10 series × 500 pts | 2.94 s | 0.0278 s | 106x |
| 20 series × 500 pts | 5.72 s | 0.0464 s | 123x |
| 50 series × 500 pts | 14.18 s | 0.1007 s | 141x |
| 100 series × 500 pts | 27.23 s | 0.1951 s | 140x |
| 20 series × 1,000 pts | 15.09 s | 0.1284 s | 118x |
| 20 series × 2,000 pts | 42.41 s | 0.4539 s | 93x |
The reference costs about 290 ms per series on the 500-point workload. That is the number behind issue #973 — open since 2022 — where users report 3-hour and 16-hour waits and a maintainer replies that he lacks the bandwidth to fix it.
The preset that exists to avoid the cost
EfficientFCParameters drops approximate_entropy and sample_entropy
because they are 62% of a comprehensive run. Here you do not have to choose:
| time | |
|---|---|
tsfresh, EfficientFCParameters (777 columns) |
1.77 s |
tsfresh-rs, ComprehensiveFCParameters (783 columns) |
0.0445 s |
The full feature set here is 40x faster than the reduced one there.
Longer series
4 series, tsfresh serial against tsfresh-rs on all cores — only four series
means threading has little to work with, which is why these ratios are the
lowest in this README rather than the highest:
| points per series | tsfresh |
tsfresh-rs |
speedup |
|---|---|---|---|
| 500 | 0.91 s | 0.0197 s | 46x |
| 1,000 | 2.70 s | 0.0506 s | 53x |
| 2,000 | 8.69 s | 0.1836 s | 47x |
| 5,000 | 53.64 s | 1.0416 s | 51x |
Per calculator
20 series × 500 points, single-threaded, the twelve most expensive in the reference:
| calculator | cols | tsfresh |
tsfresh-rs |
speedup |
|---|---|---|---|---|
approximate_entropy |
5 | 2.7106 s | 0.17105 s | 16x |
change_quantiles |
60 | 0.9165 s | 0.01441 s | 64x |
sample_entropy |
1 | 0.5419 s | 0.02095 s | 26x |
number_cwt_peaks |
2 | 0.2078 s | 0.00761 s | 27x |
augmented_dickey_fuller |
3 | 0.1581 s | 0.04214 s | 4x |
agg_linear_trend |
48 | 0.1442 s | 0.00374 s | 39x |
max_langevin_fixed_point |
1 | 0.1081 s | 0.00048 s | 223x |
friedrich_coefficients |
4 | 0.0926 s | 0.00073 s | 127x |
lempel_ziv_complexity |
5 | 0.0610 s | 0.00182 s | 34x |
permutation_entropy |
5 | 0.0474 s | 0.00359 s | 13x |
fourier_entropy |
5 | 0.0387 s | 0.00083 s | 46x |
ar_coefficient |
11 | 0.0349 s | 0.00933 s | 4x |
| all 74 | 5.2057 s | 0.30332 s | 17x |
All 74 agree with the reference to within 1e-9 relative on this data — the benchmark checks each one before it times it, so a fast wrong answer cannot reach this table.
The gap between this table's 17x and the end-to-end 120x is the whole argument of the section above: most of a comprehensive extraction is not the features.
n_jobs
tsfresh parallelises with processes, so every chunk is pickled and every
worker re-imports the library. Below a few dozen series that costs more than it
saves:
| workload | n_jobs |
tsfresh |
tsfresh-rs |
|---|---|---|---|
| 20 × 500 | 1 | 4.34 s | 0.2687 s |
| 20 × 500 | 6 | 5.82 s | 0.0639 s |
| 20 × 500 | all cores | 4.21 s | 0.0405 s |
| 100 × 500 | 1 | 21.55 s | 1.2553 s |
| 100 × 500 | 6 | 11.43 s | 0.2695 s |
| 100 × 500 | all cores | 24.05 s | 0.1956 s |
On 20 series, asking tsfresh for six processes makes it slower than
running serially; on 100 series, asking for every core makes it slower than
asking for six. This package uses threads inside one process: nothing is
pickled, there is no if __name__ == "__main__" requirement, threading pays
off at every size, and the output is bit-identical whatever you pass.
One deliberate difference: n_jobs=0 means one thread per core here, where
the reference means no parallelism at all. With threads there is nothing to
trade off, so the default should be the fast one. Pass n_jobs=1 for a
genuinely single-threaded run.
What it adds: feature_timings
EfficientFCParameters is a guess — a judgement the maintainers made once, on
their data, about which features are expensive. On a 500-point series those two
features really are 62% of the run. On a 50-point series they are nearly free.
On a 20,000-point series something else dominates entirely.
feature_timings measures it on your data:
import tsfresh_rs as tsfresh
timings = tsfresh.feature_timings(df, column_id="id", column_sort="time")
print(timings.head(6)[["feature", "columns", "seconds", "pct_of_total"]])
# feature columns seconds pct_of_total
# approximate_entropy 5 0.139937 60.287962
# augmented_dickey_fuller 3 0.032445 13.977916
# sample_entropy 1 0.018846 8.119415
# change_quantiles 60 0.007768 3.346718
# number_cwt_peaks 2 0.007093 3.055826
# ar_coefficient 11 0.006635 2.858552
The shares are exhaustive — all 74 features, summing to 100% — so nothing is hiding outside the report.
and drop_slowest turns that into a feature set:
from tsfresh_rs.profiling import drop_slowest
cheap = drop_slowest(tsfresh.ComprehensiveFCParameters(), timings, budget_pct=90)
X = tsfresh.extract_features(df, default_fc_parameters=cheap, ...)
tsfresh has no equivalent. The question "which of these 783 columns am I
paying for?" currently has no answer other than deleting features and
re-timing by hand.
Accuracy
Prefix-summing and compensating is where the speed comes from, and it is also
where a careless port silently disagrees. Three places where this package is
measurably more accurate than the reference, each pinned by a test against
exact arithmetic rather than against tsfresh:
Fourier coefficients on offset data. A signal with a large DC offset makes every non-DC coefficient a difference of large, nearly-cancelling terms. The DFT is linear, so this package transforms the mean-centred signal and restores bin 0 exactly — mathematically identical, far better conditioned. Judged against a 50-digit exact DFT on a signal offset by 1e6:
| relative error | |
|---|---|
numpy.fft.rfft |
6.6 × 10⁻⁹ |
tsfresh-rs |
4.6 × 10⁻¹⁴ |
Variance and sums. Neumaier-compensated accumulation, and a double-double mean in every regression, so that deviations survive on a series whose spread is twelve orders of magnitude below its level.
Histogram binning. binned_entropy on a near-constant series — values
around 5.0 spanning 0.01 — bins correctly here. The naive
floor((v − lo) / width) that looks equivalent to NumPy's index computation
loses the whole signal to cancellation; matching NumPy's scale-then-correct
algorithm was worth a 25% difference in the entropy.
A scale-invariant Dickey-Fuller statistic. Multiplying a series by a constant cannot change whether it has a unit root, so the ADF test statistic is invariant by construction. The reference's is not, because its design matrix pairs a constant column of 1.0 with level and difference columns that shrink with the data and statsmodels factorises that without equilibrating. Rescaling a series to 1e-9 moves its answer:
| statistic at unit scale | at 1e-9 | |
|---|---|---|
tsfresh |
−4.673342604953984 | −4.673342580274487 |
tsfresh-rs |
−4.673342604953985 | −4.673342604953988 |
Each column is normalised before the factorisation here, which is the standard fix and costs nothing.
Dependency footprint
tsfresh imports scipy, statsmodels, scikit-learn, pywt, stumpy, dask,
distributed, tqdm, cloudpickle and matplotlib to compute its features. The
numerics those provide are reimplemented here in Rust — pywt's Mexican-hat
CWT, SciPy's Welch PSD and ridge-line peak finder, statsmodels' AutoReg,
acf, pacf and the ADF test with MacKinnon p-values — so extraction itself
loads numpy and pandas, and nothing else:
>>> import tsfresh_rs, sys
>>> tsfresh_rs.extract_features(df, column_id="id", column_sort="time")
>>> [m for m in sys.modules if m.split(".")[0] in ("scipy", "statsmodels",
... "sklearn", "pywt", "stumpy")]
[]
scipy is still declared as a dependency because select_features needs its
hypothesis tests, but it is imported lazily and never touched by extraction.
Correctness
The package is only worth anything if the answers match, so that is what the suite tests.
- 478 tests, almost all differential against
tsfreshon the same input. - 250 randomised fuzz cases over length, scale, offset, tie density and
degeneracy, comparing every calculator value by value; plus 40 fuzzed
end-to-end pipelines. This found four real defects during development,
including a wrong Mexican-hat amplitude that scaled all 60
cwt_coefficientscolumns by 1.3025 — a uniform error that looks entirely plausible in isolation. - API coverage is asserted mechanically: every calculator in
dir(tsfresh...feature_calculators)must exist here with the samefctype,minimal,high_comp_cost,inputandindex_typeattributes, because those attributes are what define the presets. - All five presets must select exactly the same features with exactly the same parameters.
- Whole-frame equality across all four input shapes — long with a kind column, long without, wide, and a dict of frames — including column order and index.
Reference quirks are reproduced deliberately, not accidentally. fft_aggregated's
kurtosis has a - 3 * centroid term where the standardised fourth moment wants
3 * centroid⁴; ComprehensiveFCParameters builds mean_n_absolute_max from a
dict literal with three copies of the same key, so two of its three intended
features have never existed. Both are matched bug-for-bug, because a drop-in
that quietly "fixes" a feature changes numbers people have already trained on.
Where it deliberately differs
Each documented in tests/test_equivalence.py::KNOWN_DIVERGENCES with a test
asserting the divergence is still real.
fft_coefficient(attr="angle")on a constant series. Every non-DC coefficient is zero, so its argument is undefined. The reference reports the argument of its own rounding noise; this reports 0.fft_coefficienton a series containing an infinity. An infinity has no Fourier transform. Both libraries propagate it through their own FFT decomposition, and which bins emerge as NaN and which as infinite is an artefact of the radix each chose — NumPy's pocketfft yields 38 NaN and 3 infinities where this package yields 34 and 7. Neither pattern carries information.linear_trendand friends on a constant series. The correlation of a constant is undefined and this returns NaN. The reference returns NaN for a constant 2.5 and 0.0 for a constant 0.001 — the difference being whethernp.cov's mean happens to be exactly representable, which leaves a spurious 4.7 × 10⁻³⁸ variance in one case and not the other.- Conditioning-limited fits —
friedrich_coefficients,max_langevin_fixed_point,ar_coefficient,cwt_coefficientson a signal offset by 1e6. Both implementations solve a numerically rank-deficient problem; the coefficients differ in the 4th digit while the residuals they describe agree to 10.
Below a relative spread of about 1e-4, standardised statistics are not reproducible between any two implementations: the deviations being standardised are themselves rounding error. Measured against 60-digit arithmetic on the cases the fuzzer found, this package is closer to the true value in 4 of 6 and SciPy in 2 of 6. Neither is authoritative there.
A note on reference versions
Three tsfresh feature values are not decided by tsfresh. They are decided
by whichever SciPy, NumPy and PyWavelets are installed next to it, and those
libraries have changed their answers. Running the differential suite across
three operating systems and three Python versions surfaced all three:
| feature | what changed | effect |
|---|---|---|
cwt_coefficients |
PyWavelets 1.8's cwt has no precision parameter and integrates the wavelet on a 1024-point grid; 1.9 added precision=12, a 4096-point grid |
4th significant figure |
friedrich_coefficients, max_langevin_fixed_point |
pandas 3.0 made qcut bin on np.quantile's edges; pandas 2.3 disagreed on 3 of 499 boundary points, which moves the bucket means the cubic is fitted to |
4th significant figure |
linear_trend, agg_linear_trend on a constant series |
SciPy 1.15 returned rvalue=0.0, pvalue=1.0; SciPy 1.18 returns NaN. The 0.0 came from a spurious ~1e-38 variance left by np.cov's mean rounding |
0.0 vs NaN |
permutation_entropy on tied data |
np.argsort defaults to quicksort, which used to fall back to a stable insertion sort for the short windows involved. NumPy 2's SIMD sort does not, so the ordinal pattern of a tied window now depends on the CPU |
1% of the entropy at dimensions 4–6 |
Each was confirmed by reproducing the older environment and matching its value
exactly — pywt.cwt(..., precision=10) returns the old figure to the last
digit, and pandas 2.3.3's qcut reproduces the old cubic. The
permutation_entropy entry is the starkest of the four: it is not a version
difference at all but a CPU difference, and there is no value this package
could pick that would agree with the reference everywhere. It uses the stable
order, which is at least the same everywhere.
This package computes all three in Rust, so it gives one fixed answer wherever it runs. It targets the current behaviour: PyWavelets ≥ 1.9's precision-12 grid, pandas ≥ 3.0's NumPy-consistent binning, and SciPy ≥ 1.16's NaN for an undefined correlation. On an older reference those specific columns will differ — which is a statement about the reference's environment, not about this package.
The test suite probes the installed reference at runtime and skips exactly those comparisons when it detects an older behaviour, rather than pinning dependency versions. Pinning would hide the effect; users do not pin.
Coverage
Everything in tsfresh 0.21.2:
| Calculators | all 76, including cwt_coefficients (pywt-exact), number_cwt_peaks (SciPy's ridge-line tracker, reproduced), augmented_dickey_fuller (with MacKinnon p-values), query_similarity_count |
| Presets | Comprehensive, Efficient, Minimal, IndexBased, TimeBased |
| Extraction | extract_features over long, wide and dict inputs; kind_to_fc_parameters |
| Selection | select_features, extract_relevant_features, calculate_relevance_table |
| Utilities | impute, impute_dataframe_zero, impute_dataframe_range, roll_time_series, make_forecasting_frame, add_sub_time_series_index, get_ids, from_columns |
| Compatibility | transformers (the scikit-learn FeatureAugmenter family), utilities.distribution, utilities.profiling, feature_selection.significance_tests, feature_extraction.data, examples, scripts.run_tsfresh, and the private windowing helpers (_roll, _into_subchunks, …) that third-party code imports |
| New | feature_timings, drop_slowest |
For code you cannot edit
When a dependency deep in the stack imports tsfresh by name:
import tsfresh_rs
tsfresh_rs.install() # before anything imports `tsfresh`
import tsfresh # this is now tsfresh_rs
It refuses rather than half-patching the module graph if the real tsfresh has
already been imported.
Limitations
Stated plainly, because a drop-in that hides its gaps is worse than one that does not have them.
matrix_profileis unavailable, exactly as in the reference. Thematrixprofilepackage is unmaintained and does not build on current Python, sotsfreshships with this feature disabled and excluded fromComprehensiveFCParameters. This mirrors that, including theImportError.select_featuresis not accelerated. It is linear in the number of features with one cheap hypothesis test each — not the bottleneck this package exists to fix — so it runs in Python.n_jobsandchunksizeare accepted and ignored there.chunksize,distributorand theprofile*arguments describe tsfresh's multiprocessing pipeline, which this implementation does not have. They are accepted for signature compatibility and ignored, with a warning. Theutilities.distributionclasses exist so that code importing them keeps working, butextract_featuresdoes not route through them.tsfresh.__version__reports this package's version afterinstall(), not a tsfresh one, so code gating ontsfresh.__version__ >= "0.20"will take the wrong branch. Claiming to be 0.21.2 would fix that one check and lie to every other; the API level being emulated is published separately astsfresh_rs.__tsfresh_version__.profile=Trueno longer answers "which calculator is slow". A cProfile trace of an extraction here shows one opaque call into Rust.feature_timingsis the replacement, and it measures what the profiler used to.augmented_dickey_fulleris only 4x faster. Its cost is a lag-selection search over many OLS fits, and the reference already spends that time inside compiled LAPACK.
Development
pip install maturin pytest numpy pandas scipy tsfresh mpmath statsmodels
maturin build --release --out dist && pip install --no-index --find-links dist tsfresh-rs
pytest tests/ -q
python bench/bench.py
To reproduce the older-reference environment the version table describes — the one where three feature columns legitimately differ — and check that the suite skips exactly those:
uv venv --python 3.10 /tmp/old && uv pip install --python /tmp/old/bin/python pytest numpy pandas scipy tsfresh mpmath statsmodels
uv pip install --python /tmp/old/bin/python --no-deps --find-links dist tsfresh-rs
/tmp/old/bin/python -m pytest tests/ -q -rs
That resolves to numpy 2.2, pandas 2.3, SciPy 1.15 and PyWavelets 1.8, and
gives 411 passed, 3 skipped.
Licence and credit
MIT, the same licence as tsfresh.
This is a reimplementation of tsfresh
by Maximilian Christ and Blue Yonder GmbH, whose API, feature definitions and
output semantics it deliberately reproduces. If you use this in research, cite
their paper:
Christ, M., Braun, N., Neuffer, J. and Kempa-Liehr A.W. (2018). Time Series FeatuRe Extraction on basis of Scalable Hypothesis tests (tsfresh — A Python package). Neurocomputing 307 (2018) 72-77.
Metadata
Release files for tsfresh-rs 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tsfresh_rs-0.1.0.tar.gz | 179.3 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| tsfresh_rs-0.1.0-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| tsfresh_rs-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| tsfresh_rs-0.1.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.10 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| tsfresh_rs-0.1.0-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
| tsfresh_rs-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 3.8 MB
Release files / tsfresh_rs-0.1.0.tar.gz
| Download URL | tsfresh_rs-0.1.0.tar.gz |
|---|---|
| Size | 179.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
725301fe38619261968a6de4a8d3d2d19a672d84f2f9ebc03ebbcc9307c66752
|
|
BLAKE2b-256 checksum How to use checksums |
ff17ee8fea1078b3aa9b25cafec614cf4410595d75c19151813fafa19dba8e58
|
| 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 Sep 7, 2026.
Transparency logRelease files / tsfresh_rs-0.1.0-cp310-abi3-win_amd64.whl
| Download URL | tsfresh_rs-0.1.0-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 710.5 kB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1218556b57618e0d5994d8280430a69344c1906d847311ddcb0edb15d6bd753c
|
|
BLAKE2b-256 checksum How to use checksums |
3ac8eedef748cc88b617fc573111bbd6bbeb34f9510d87e0b6340df55f55ebbb
|
| 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 Sep 7, 2026.
Transparency logRelease files / tsfresh_rs-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | tsfresh_rs-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 846.5 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
79062882ddaed1b71dfc4a3e1c5152996e08ffab7eb155f8ec43137aa87bb7b5
|
|
BLAKE2b-256 checksum How to use checksums |
943abd8028994b4af183c9944af58b3ef08d28634fb58ce888c52141a8f2225e
|
| 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 Sep 7, 2026.
Transparency logRelease files / tsfresh_rs-0.1.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | tsfresh_rs-0.1.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 674.1 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
3f728ca18a3233930ecc87d46716cf70bd4b9c258e4fa72f57095cf58afcd8f9
|
|
BLAKE2b-256 checksum How to use checksums |
2d1ada6aa9e7644f890f79a8e0a814c4b676614785076e5a1d26b1bb9a12fb01
|
| 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 Sep 7, 2026.
Transparency logRelease files / tsfresh_rs-0.1.0-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | tsfresh_rs-0.1.0-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 635.1 kB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7d047e41b31207548ba7d4771ae88ed01b277077b3ff6c256bd9380f6160cc11
|
|
BLAKE2b-256 checksum How to use checksums |
ebc2c4a0d4249e91f91dea6c97fb8d844d048eea52159572ad5772df44e0d7bb
|
| 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 Sep 7, 2026.
Transparency logRelease files / tsfresh_rs-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | tsfresh_rs-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 766.4 kB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
5ff8ef5912551f4a3ace6c578cbe16da7942ad9a564b6be73dcfe98678971489
|
|
BLAKE2b-256 checksum How to use checksums |
8a3d82ed07bec99a44ca2ef27c13c8412307c46e380d94420809ff1e20a43a42
|
| 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 Sep 7, 2026.
Transparency log