Skip to main content
pifeat logo

pifeat

Zero-Dependency, Sub-Millisecond EEG & Biosignal Feature Extraction Engine in Rust + Python

CI Release PyPI Python Versions Zero Dependencies Powered by Rust Platforms License: AGPL v3

pip install pifeat

Why pifeat? • Quickstart • 22 Canonical Features • Benchmarks • API Reference


Early development / experimental / no warranties. APIs, behavior, and packaging may change without notice. Research software provided as-is, without warranty of any kind. Not a medical device and not intended for clinical, diagnostic, or safety-critical use. See LICENSE for full terms.

⚡ Why pifeat?

Building real-time Brain-Computer Interfaces (BCI), neurofeedback loops, or edge ML pipelines on devices like a Raspberry Pi or embedded Linux usually forces a painful trade-off: pull in hundreds of megabytes of scipy / mne / numba / openblas dependencies—or write fragile DSP glue code by hand.

pifeat solves this in a single ~1.1 MB native wheel:

  • Zero Runtime Dependencies: No numpy, scipy, mne, numba, or C/Fortran BLAS required at runtime. Works out of the box with Python's built-in array.array, memoryview, bytearray, or numpy.ndarray via the CPython Buffer Protocol.
  • 100x–173x Faster than SciPy + NumPy: Extracts all 22 time, frequency (Welch PSD), and nonlinear features across 16 channels (500 samples @ 250 Hz) in ~146 µs with the GIL released.
  • Zero Steady-State Allocations: Both the Rust core and extractor.extract_into(...) perform 0 heap allocations on the real-time hot path—eliminating GC pauses and latency spikes.
  • Drop-In Scientific Equivalence: Matches scipy.signal.welch (window='hann', detrend='constant', scaling='density') to $< 10^{-12}$ relative error, with compensated two-pass variance to survive large uncalibrated ADC DC offsets ($10^5\text{--}10^6\ \mu\text{V}$).
  • Hardware-Agnostic: Works with OpenBCI, BrainFlow, LSL (Lab Streaming Layer), MNE, PiEEG, or any raw ADC/SPI stream.

🚀 Developer Quickstart

30-Second Copy-Paste Example (Pure Python — Zero Dependencies)

import array, math
import pifeat as pf

# 1. Generate 2 seconds (500 samples @ 250 Hz) of synthetic 8-channel EEG (10 Hz Alpha + 20 Hz Beta)
n_ch, n_samples, fs = 8, 500, 250.0
raw = array.array("d", [
    15.0 * math.sin(2 * math.pi * 10.0 * (s / fs)) + 5.0 * math.cos(2 * math.pi * 20.0 * (s / fs))
    for _ in range(n_ch) for s in range(n_samples)
])

# 2. Extract all 22 features per channel in ~70 microseconds
extractor = pf.FeatureExtractor(num_channels=n_ch, window_samples=n_samples, fs=fs)
frame = extractor.extract(raw, layout="channels_first")

print("Features per channel:", len(pf.FEATURE_NAMES))        # 22
print("Ch0 Alpha Power (uV^2):", frame.to_dict()["alpha_power"][0])
print("Ch0 Alpha/Beta Ratio:  ", frame.to_dict()["alpha_beta_ratio"][0])

1. Batch Multichannel Extraction (numpy.ndarray, array.array, or memoryview)

Accepts contiguous float64 ('d') or float32 ('f') buffers in either channels_first ([channels, samples]) or samples_first ([samples, channels]) layout:

import array
import pifeat as pf

extractor = pf.FeatureExtractor(
    num_channels=16,
    window_samples=500,     # 2.0 s window at 250 Hz
    fs=250.0,
    nperseg=250,            # 1.0 s Welch segment (1.0 Hz bin spacing)
    noverlap=125,           # 50% overlap (3 Welch segments per window)
    pe_order=3,             # Permutation entropy embedding dimension
    pe_delay=1,             # Permutation entropy sample delay
    integration="trapezoid" # "trapezoid" (uV^2) or "bin_mean" (uV^2/Hz)
)

# Pass a 2D numpy.ndarray (shape [16, 500]), memoryview, or stdlib array.array('d'|'f')
raw_window = array.array("d", [0.0] * (16 * 500))

frame = extractor.extract(raw_window, layout="channels_first")
if frame.window_valid:
    matrix = frame.matrix()          # list[list[float]], shape [16][22]
    ch0 = frame.channel(0)           # list[float], length 22
    by_name = frame.to_dict()        # dict[str, list[float]]

# Zero-allocation hot path: writes directly into a preallocated writable f64 buffer (array or np.ndarray)
out_buf = array.array("d", [0.0] * (16 * pf.NUM_FEATURES_PER_CHANNEL))
valid = extractor.extract_into(raw_window, out_buf, layout="channels_first")

2. Continuous Real-Time Streaming (StreamingFeatureEngine)

StreamingFeatureEngine maintains per-channel circular buffers, tracks monotonic sequence numbers and timestamps, detects dropped upstream packets, and caches overlapping Welch segment periodograms so each hop only computes the newly completed segment FFT:

import pifeat as pf

stream = pf.StreamingFeatureEngine(
    num_channels=16,
    window_samples=500,     # 2.0 s sliding window
    hop_samples=125,        # Emit a FeatureFrame every 125 samples (500 ms at 250 Hz)
    fs=250.0,
    nperseg=250,
    noverlap=125,
    pe_order=3,
    pe_delay=1,
    integration="trapezoid",
)

# Push sample-by-sample from your hardware loop / LSL / BrainFlow / SPI reader
for seq, timestamp, channels in acquisition_stream:
    frame = stream.push_sample(seq, timestamp, channels)
    if frame is not None:
        # Inspect packet-loss & signal-quality flags before feeding your ML model
        if not frame.window_valid:
            print(f"Warning: {frame.missing_samples} dropped samples or invalid channel (flags={frame.channel_flags})")
        features = frame.matrix()

# Or push a contiguous chunk of samples at once ([samples, channels] or [channels, samples])
frames = stream.push_block(block_buf, start_seq=1, start_timestamp=0.0, layout="samples_first")

3. Standalone 1D DSP Functions

Need just one metric on a 1D signal (list[float], array.array, or 1D numpy.ndarray)?

import pifeat as pf

rms = pf.compute_rms(signal_1d)
var = pf.compute_variance(signal_1d)
ll  = pf.compute_line_length(signal_1d)
zcr = pf.compute_zero_crossing_rate(signal_1d)
activity, mobility, complexity = pf.compute_hjorth(signal_1d)
pe  = pf.compute_permutation_entropy(signal_1d, order=3, delay=1, normalize=True)

# Exact scipy.signal.welch equivalent (returns frequencies and one-sided PSD in uV^2/Hz)
freqs, psd = pf.compute_welch_psd(signal_1d, fs=250.0, nperseg=250, noverlap=125)

# Dict of absolute powers, relative powers, ratios, and spectral entropy
bands = pf.compute_band_powers(signal_1d, fs=250.0, nperseg=250, noverlap=125)

4. Using pifeat in Pure Rust (Cargo.toml)

pifeat can also be embedded directly in Rust firmware, Tauri apps, or native daemons without Python:

[dependencies]
pifeat = { version = "0.1", default-features = false }

🧠 The 22 Features Per Channel

Each channel produces NUM_FEATURES_PER_CHANNEL = 22 features in the canonical order given by pf.FEATURE_NAMES:

Index Feature Name Domain Units / Range Definition
0 rms Time $\mu\text{V}$ $\sqrt{\frac{1}{N}\sum_{n=0}^{N-1} x_n^2}$
1 variance Time $\mu\text{V}^2$ Sample variance (ddof = 1), two-pass compensated: $\frac{1}{N-1}\sum (x_n - \mu)^2$
2 line_length Time $\mu\text{V}$ $\sum_{n=1}^{N-1} |x_n - x_{n-1}|$ (Esteller et al., 2001)
3 zero_crossing_rate Time $[0, 1]$ Mean-centered sign-change rate across $N - 1$ transitions
4 hjorth_activity Time $\mu\text{V}^2$ $\text{var}(x)$ (ddof = 1, Hjorth, 1970)
5 hjorth_mobility Time rad/sample $\sqrt{\text{var}(d_1) / \text{var}(x)}$, where $d_1[n] = x_n - x_{n-1}$
6 hjorth_complexity Time dimensionless $\frac{\text{Mobility}(d_1)}{\text{Mobility}(x)} = \sqrt{\frac{\text{var}(d_2)/\text{var}(d_1)}{\text{var}(d_1)/\text{var}(x)}}$
7 delta_power Frequency $\mu\text{V}^2$ Integrated Welch PSD over $[0.5, 4.0]\text{ Hz}$
8 theta_power Frequency $\mu\text{V}^2$ Integrated Welch PSD over $[4.0, 8.0]\text{ Hz}$
9 alpha_power Frequency $\mu\text{V}^2$ Integrated Welch PSD over $[8.0, 13.0]\text{ Hz}$
10 beta_power Frequency $\mu\text{V}^2$ Integrated Welch PSD over $[13.0, 30.0]\text{ Hz}$
11 gamma_power Frequency $\mu\text{V}^2$ Integrated Welch PSD over $[30.0, \min(100.0, f_s/2)]\text{ Hz}$
12 total_power Frequency $\mu\text{V}^2$ Sum of absolute powers across Delta, Theta, Alpha, Beta, and Gamma
13..17 rel_delta .. rel_gamma Frequency $[0, 1]$ Band power divided by total_power
18 theta_beta_ratio Frequency dimensionless theta_power / beta_power (guarded against noise floor)
19 alpha_beta_ratio Frequency dimensionless alpha_power / beta_power (guarded against noise floor)
20 spectral_entropy Frequency $[0, 1]$ Normalized Shannon entropy of AC Welch PSD bins ($k \ge 1$)
21 permutation_entropy Nonlinear $[0, 1]$ Normalized ordinal-pattern Shannon entropy (Bandt & Pompe, 2002)

Numerical and Scientific Guarantees

  • Welch PSD Equivalence (scipy.signal.welch): Uses a periodic Hann window $w[n] = 0.5 - 0.5\cos(2\pi n / L)$ (fftbins=True), per-segment constant mean detrending (detrend='constant'), and one-sided power spectral density scaling $U = f_s \sum w[n]^2$ (scaling='density'). Matches scipy.signal.welch to $< 10^{-12}$ relative error.
  • Band Integration Modes:
    • "trapezoid" (default): Composite trapezoidal integration with linear interpolation at exact band boundaries ($[f_{\text{lo}}, f_{\text{hi}}]$), preserving Parseval's theorem in $\mu\text{V}^2$.
    • "bin_mean": Arithmetic mean of PSD bins in $[f_{\text{lo}}, f_{\text{hi}})$ in $\mu\text{V}^2/\text{Hz}$ (matches legacy pieeg_server.spectral).
  • Compensated Variance and Single-Pass Hjorth: Two-pass compensated summation prevents catastrophic cancellation when large uncalibrated ADC DC offsets ($10^5\text{--}10^6\ \mu\text{V}$) sit atop microvolt EEG signals. Hjorth first- and second-difference means are evaluated in closed form from boundary samples, requiring zero intermediate allocations.
  • Band Ratio Noise-Floor Guard: Denominator band power is guarded by max(1e-12, total_power * 1e-9) so band-limited signals do not produce arbitrary $10^{16}\text{--}10^{29}$ ratios from floating-point FFT floor differences between f32 and f64.
  • Degenerate Signals and Validity Flags:
    • Flatlines ($\text{var}(x) \le 10^{-24}$) never produce NaN or Inf; Mobility, Complexity, Spectral Entropy, and Permutation Entropy return 0.0 and set FLAG_FLATLINE (1 << 1) in frame.channel_flags.
    • Non-finite inputs (NaN / Inf) set FLAG_NON_FINITE (1 << 0) on the affected channel and frame.window_valid = False.
    • Sequence number gaps in streaming mode set FLAG_SEQ_GAP (1 << 2), record the exact missing count in frame.missing_samples, and set frame.window_valid = False.

📖 API Reference

FeatureFrame

Member Type Description
num_channels int Number of channels in the frame
window_samples int Number of samples per channel in the window
timestamp_start float Timestamp of the oldest sample in the window (streaming)
timestamp_end float Timestamp of the newest sample in the window (streaming)
seq_start int Sequence index of the oldest sample in the window
seq_end int Sequence index of the newest sample in the window
missing_samples int Count of dropped samples detected inside the window
window_valid bool True when missing_samples == 0 and all channels are finite
channel_flags list[int] Per-channel bitmask of FLAG_VALID (0), FLAG_NON_FINITE (1), FLAG_FLATLINE (2), FLAG_SEQ_GAP (4)
matrix() list[list[float]] [num_channels][22] feature matrix
values_flat() list[float] Flat row-major [num_channels * 22] feature list
channel(ch) list[float] 22-element feature vector for channel ch
to_dict() dict Maps each feature name to a list[float] across channels plus metadata

📊 Benchmarks (100x–170x Faster)

Measured at $f_s = 250\text{ Hz}$ extracting all 22 features per channel (time-domain, Welch PSD, band powers, ratios, spectral entropy, and permutation entropy). Steady-state heap allocations in Rust are verified via a custom #[global_allocator] counter in tests/bench_native.rs.

Native Rust Latency and Steady-State Allocations

Channels Window (@ 250 Hz) Layout Batch Median ($\mu\text{s}$) Batch p95 ($\mu\text{s}$) Batch p99 ($\mu\text{s}$) Streaming Hop Median ($\mu\text{s}$) Steady-State Heap Allocs
8 250 (1.0 s) [C, N] / [N, C] 37.0 / 38.4 40.5 / 65.8 62.8 / 67.7 40.2 0
8 500 (2.0 s) [C, N] / [N, C] 71.8 / 75.9 114.9 / 122.0 122.7 / 127.7 63.5 0
16 250 (1.0 s) [C, N] / [N, C] 83.3 / 82.0 129.9 / 135.3 166.4 / 139.5 92.0 0
16 500 (2.0 s) [C, N] / [N, C] 146.2 / 154.2 155.3 / 177.7 189.1 / 258.1 125.7 0
16 1000 (4.0 s) [C, N] / [N, C] 261.7 / 277.1 382.2 / 291.5 430.5 / 329.8 188.2 0
24 250 (1.0 s) [C, N] / [N, C] 114.6 / 120.5 120.5 / 121.5 157.6 / 135.1 116.5 0
24 500 (2.0 s) [C, N] / [N, C] 219.2 / 231.9 340.0 / 346.5 368.8 / 405.8 192.9 0
24 1000 (4.0 s) [C, N] / [N, C] 401.4 / 426.5 429.0 / 636.2 590.7 / 678.1 279.9 0

Python API Overhead vs. Reference SciPy / NumPy (benches/bench_python_vs_native.py)

Channels Window extract_into (Med / p95 / p99 $\mu\text{s}$) extract() (Med / p95 / p99 $\mu\text{s}$) SciPy + NumPy Median ($\mu\text{s}$) Speedup
8 250 (1.0 s) 40.2 / 41.9 / 70.6 38.2 / 38.8 / 42.3 6,961.9 173x
8 500 (2.0 s) 82.6 / 84.0 / 133.7 80.0 / 130.0 / 136.6 9,066.6 110x
16 250 (1.0 s) 85.5 / 86.3 / 92.1 82.3 / 83.3 / 86.7 14,762.4 173x
16 500 (2.0 s) 168.8 / 169.6 / 193.9 166.6 / 169.5 / 212.8 18,328.4 109x
24 500 (2.0 s) 254.8 / 510.1 / 552.7 348.4 / 416.5 / 546.3 27,512.8 108x
24 1000 (4.0 s) 467.8 / 688.4 / 821.3 462.9 / 481.1 / 558.9 41,161.8 88x
  • State footprint: < 96 KB for a 16-channel, 500-sample StreamingFeatureEngine.
  • Binary size: ~1.18 MB stripped native extension with zero external shared library dependencies.

Build and Test from Source

Requires Rust (rustup) and maturin:

pip install maturin
cd pifeat
maturin develop --release

Run the pure-Rust unit tests and zero-allocation benchmark suite:

cargo test --no-default-features --release
cargo test --no-default-features --release --test bench_native -- --nocapture

Run the Python scientific validation suite and benchmark (requires pytest, numpy, scipy for reference comparison only):

pytest tests/test_scientific_validation.py -v
python benches/bench_python_vs_native.py

Release and Wheel Distribution

.github/workflows/release.yml builds precompiled wheels via PyO3/maturin-action@v1 for:

  • Linux: x86_64, aarch64 (Raspberry Pi 4/5 64-bit), armv7 (Raspberry Pi OS 32-bit)
  • Windows: x64
  • Python: CPython 3.10, 3.11, 3.12, 3.13 + source distribution (sdist)

Metadata

Release files for pifeat 0.1.1

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

Source distribution (sdist)

Source distribution for pifeat 0.1.1
File Size Uploaded Provenance Actions
pifeat-0.1.1.tar.gz 61.0 kB With provenance Details for pifeat-0.1.1.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for pifeat 0.1.1
File Actions
pifeat-0.1.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for pifeat-0.1.1-cp313-cp313-win_amd64.whl
pifeat-0.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details for pifeat-0.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
pifeat-0.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARMv7l Details for pifeat-0.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.whl
pifeat-0.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details for pifeat-0.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
pifeat-0.1.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for pifeat-0.1.1-cp312-cp312-win_amd64.whl
pifeat-0.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details for pifeat-0.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
pifeat-0.1.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARMv7l Details for pifeat-0.1.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.whl
pifeat-0.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details for pifeat-0.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
pifeat-0.1.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for pifeat-0.1.1-cp311-cp311-win_amd64.whl
pifeat-0.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details for pifeat-0.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
pifeat-0.1.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARMv7l Details for pifeat-0.1.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl
pifeat-0.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details for pifeat-0.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
pifeat-0.1.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for pifeat-0.1.1-cp310-cp310-win_amd64.whl
pifeat-0.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details for pifeat-0.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
pifeat-0.1.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARMv7l Details for pifeat-0.1.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.whl
pifeat-0.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details for pifeat-0.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Total release size: 7.9 MB

Release files / pifeat-0.1.1.tar.gz

Download URL pifeat-0.1.1.tar.gz
Size 61.0 kB
Tags Source
SHA-256 checksum
How to use checksums
26bbe7a5e349d687f8062ec0d6f8dc901ed1afe94cad03cf6e648b53bc57464b
BLAKE2b-256 checksum
How to use checksums
1867c2fa0b50a23a526b2143f1ac51b6fe09d7b6e34bf511e6b68f439ba03225
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp313-cp313-win_amd64.whl

Download URL pifeat-0.1.1-cp313-cp313-win_amd64.whl
Size 528.3 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
425c2ef81e71c0138218e9a94a03d2f50af42fdda4aa754258ee23224f5a7db8
BLAKE2b-256 checksum
How to use checksums
49490abb92cb370687364494ad0e739b08b1ab82f39ab25b91febfd0c6493c43
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL pifeat-0.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 610.2 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
9243bf374319e2337864eb01913703e5084c86495f436fec2d67eab80bdbd296
BLAKE2b-256 checksum
How to use checksums
c01492e00f52316f9152603586e1030ef885b8a6572839d28a9bb75d25034070
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.whl

Download URL pifeat-0.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.whl
Size 374.6 kB
Tags CPython 3.13 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
2407dfec294225180a131bfaec90b075386911692fb6d1c2e5aca0bd3a7cfdd3
BLAKE2b-256 checksum
How to use checksums
4f8a12d1d25175b1c8fc9cbc55d00c1589a4bf235cbec34766edd01ec07e5b00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL pifeat-0.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 452.8 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
5bc12f9a8703843630b07027f6ba86e03c32488cbc1af716ef5eb7f1c3592033
BLAKE2b-256 checksum
How to use checksums
c8bbdc7874bc26d58835366634d4e925ac193a4117f14433bd6435bfc286124b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp312-cp312-win_amd64.whl

Download URL pifeat-0.1.1-cp312-cp312-win_amd64.whl
Size 528.6 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
e38c93ded8ddb812d00baffb0d79d37bc16da40df162dac37f5dd1785d464686
BLAKE2b-256 checksum
How to use checksums
5dcbfc9b321105cd0b31ee319895c1b2299961a3bed66077cf43ecbbf4e76eff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL pifeat-0.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 610.4 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d45afe1ecafd5dbb733450fb85146b951eddf863bdb4fd2e2196b713d43e61c8
BLAKE2b-256 checksum
How to use checksums
482ad0b2541182ef1385f029dd8306295ef169df8d72c6ffcc273434a41df513
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.whl

Download URL pifeat-0.1.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.whl
Size 374.9 kB
Tags CPython 3.12 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
ade35ed735aad99c48338a02a5e1b575083707d2ff30c0dba20d706e24345f96
BLAKE2b-256 checksum
How to use checksums
e8aa71e04bc042085c02bf84f1846359216c649e2cfc4f3a0ed929f8d562a8fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL pifeat-0.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 452.8 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
aa9df5b2add4c575e559ceaccdaa52a2e9ba5312a78049a1554ee3b38f3b342b
BLAKE2b-256 checksum
How to use checksums
69daca5dd71ab34c9aa8bfc13678ce0ebd48a8c4cc16b3d50559ce343d81f67f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp311-cp311-win_amd64.whl

Download URL pifeat-0.1.1-cp311-cp311-win_amd64.whl
Size 527.9 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
e776b3dc93a57866bcc13868b5fc7abd5312e45aa37192b55330187fdd4dd887
BLAKE2b-256 checksum
How to use checksums
c4d2ba387f0cfe53d041d1c522d94a0e47c3467a30447011e99baf94964305ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL pifeat-0.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 610.0 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
67b844af5a38792b408b95e61955a8ab3b8f9ff79a2c22ae24d4f50a64f58051
BLAKE2b-256 checksum
How to use checksums
3b9bb7a92a0f602e4910b64c4d8925cd769489c2413c82171990ec64c33812d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl

Download URL pifeat-0.1.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl
Size 374.7 kB
Tags CPython 3.11 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
a1124af085a79d7cc4a60e5d574b64a91cb462bd60c549401daf98464d0d0829
BLAKE2b-256 checksum
How to use checksums
8adbd4609d91be02015fd68059cb58d20663ac9069115c799304462280100e3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL pifeat-0.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 453.0 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
f449a8b644475112772a7103c460132338390362b2d9dee7f751ddb49af2c3a5
BLAKE2b-256 checksum
How to use checksums
71efb0ff70aa2c635caa0a791ffe43db7e890b6c32593e461fbe165f398bf731
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp310-cp310-win_amd64.whl

Download URL pifeat-0.1.1-cp310-cp310-win_amd64.whl
Size 528.0 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
99d7e567ec86a80f74bcb589b72ac339323e941e836df71de974beb9e3c38afe
BLAKE2b-256 checksum
How to use checksums
cb6bf3b91b95866448e914be26f15bee2200ba9b3bd3767939f4fb3d56e4fd36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL pifeat-0.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 610.2 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
eb41451e9f6cea6f46cd04bfbed5d49ee3c4d10404ab5dfdbf88a51ac679c555
BLAKE2b-256 checksum
How to use checksums
c888f36a1528e1ae97d517de32f971498fcf10f9307ca391ff6d124835a874c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.whl

Download URL pifeat-0.1.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.whl
Size 374.8 kB
Tags CPython 3.10 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
22672bf55bffefcc2a54b6b29ae8fcd84bd507d10de8ffc54375608fa6a68330
BLAKE2b-256 checksum
How to use checksums
dd3552fc4df8a889de6d6ed71015c1379c207ff8515e5791040551a3db56ea4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Release files / pifeat-0.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL pifeat-0.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 452.9 kB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
5dc477bd811a288f01f78e411f652d9f8b8e119cb33af53742a53dd39e03eecd
BLAKE2b-256 checksum
How to use checksums
8f97ef69b8da04b897f92e7b11798d92fb261794d17508eef0578bbaa18abd6f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 13, 2026.

Transparency log

Security for pifeat 0.1.1

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.

Full provenance

All 17 files in this release have been uploaded with provenance metadata.

Select from 17 files

Attestation for pifeat-0.1.1.tar.gz

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 Nov 13, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

17 release files Full provenance

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