Skip to main content

Fast polyphase resampling with multi-architecture SIMD support

Project description

sgnl-cpu-interp

Fast polyphase resampling for multichannel data with multi-architecture SIMD support

pipeline coverage pypi version


Features

  • Multi-Architecture SIMD: Automatic runtime CPU detection with optimized kernels for:
    • x86_64: AVX-512, AVX2+FMA, AVX, SSE4.1, SSE2
    • ARM64: NEON (Apple Silicon, AWS Graviton, etc.)
    • Fallback: Optimized scalar implementation
  • No External Dependencies: Only requires NumPy (removed GSL and FFTW dependencies)
  • High Performance: ~5x faster than GSL-based implementations
  • Multichannel: Optimized for processing many channels simultaneously (tested with 1024+ channels)
  • Quality: Lanczos-windowed sinc interpolation for high-quality upsampling
  • Two Memory Layouts: Supports both (time, channels) and (channels, time) layouts
  • Simple API: Easy-to-use NumPy-based interface

Installation

From PyPI (when available)

pip install sgnl-cpu-interp

Binary wheels are built in CI for:

Platform Architecture Minimum version
Linux x86_64, aarch64 glibc 2.28 / manylinux_2_28 (e.g. RHEL/Rocky 8, Debian 10, Ubuntu 18.10)
macOS x86_64 macOS 13 (Ventura)
macOS arm64 macOS 15 (Sequoia)

From source

git clone https://git.ligo.org/greg/fast-resample-cpu.git
cd fast-resample-cpu
pip install .

No external dependencies are required beyond NumPy and a C compiler; the build backend (scikit-build-core) provisions CMake and Ninja automatically if they are not already installed. The build detects your CPU architecture and compiles the appropriate SIMD kernels; the best implementation is selected at runtime.

Quick Start

import numpy as np
from sgnl_cpu_interp import upsample, get_simd_info

# Check which SIMD implementation is being used
print(get_simd_info())
# {'implementation': 'NEON', 'available': ['NEON', 'Scalar'], 'cpu_features': 'NEON+FMA'}

# Upsample a 50 Hz sine wave from 128 Hz to 2048 Hz
fs_in = 128
fs_out = 2048
factor = fs_out // fs_in  # 16x upsampling

# Generate test signal
t = np.arange(0, 0.5, 1/fs_in)
signal = np.sin(2 * np.pi * 50 * t).astype(np.float32)

# Upsample
upsampled = upsample(signal, factor=factor, half_length=8)
print(f"Input: {len(signal)} samples at {fs_in} Hz")
print(f"Output: {len(upsampled)} samples at {fs_out} Hz")

Usage Examples

Single channel upsampling

import numpy as np
from sgnl_cpu_interp import upsample

# 1D signal (single channel)
signal = np.random.randn(1024).astype(np.float32)
upsampled = upsample(signal, factor=2)

Multichannel upsampling

# 2D array: (n_samples, n_channels)
n_samples, n_channels = 1024, 128
data = np.random.randn(n_samples, n_channels).astype(np.float32)

# Upsample by factor of 2
upsampled = upsample(data, factor=2)
print(upsampled.shape)  # (2016, 128) - note: loses 2*half_length samples

# Upsample by factor of 4 with longer kernel for better quality
upsampled = upsample(data, factor=4, half_length=16)
print(upsampled.shape)  # (3972, 128)

Transposed layout

from sgnl_cpu_interp import upsample_transposed

# Transposed layout: (n_channels, n_samples)
data = np.random.randn(128, 1024).astype(np.float32)
upsampled = upsample_transposed(data, factor=2)
print(upsampled.shape)  # (128, 2016)

API Reference

upsample(data, factor=2, half_length=8)

Upsample multichannel data using polyphase filtering (standard layout).

Parameters:

  • data (ndarray): Input array of shape (n_samples,) for single channel or (n_samples, n_channels) for multichannel. float32, float64, complex64, and complex128 are processed natively and preserved in the output; any other dtype is converted to float32. Complex data is resampled by filtering the real and imaginary parts independently with the same real kernel.
  • factor (int, optional): Upsampling factor (default: 2). Must be >= 2.
  • half_length (int, optional): Half-length of the sinc kernel (default: 8). Larger values provide better quality but are slower. Total kernel length = 2 * half_length + 1.

Returns:

  • output (ndarray): Upsampled array of shape ((n_samples - kernel_len + 1) * factor,) or ((n_samples - kernel_len + 1) * factor, n_channels) where kernel_len = 2 * half_length + 1. Same dtype as the (possibly converted) input.

upsample_transposed(data, factor=2, half_length=8)

Upsample multichannel data using polyphase filtering (transposed layout).

Same as upsample() but expects input in (n_channels, n_samples) layout. Use this when your data is already in channels-first format to avoid transpose overhead.

Parameters:

  • data (ndarray): Input array of shape (n_channels, n_samples). Must be 2D; float32, float64, complex64, and complex128 are processed natively and preserved, other dtypes are converted to float32.
  • factor (int, optional): Upsampling factor (default: 2). Must be >= 2.
  • half_length (int, optional): Half-length of the sinc kernel (default: 8).

Returns:

  • output (ndarray): Upsampled array of shape (n_channels, (n_samples - kernel_len + 1) * factor).

downsample(data, factor=2, half_length=8)

Downsample multichannel data with an anti-aliasing FIR filter (standard layout).

The signal is filtered with a Lanczos-windowed sinc lowpass (cutoff at the output Nyquist, unit DC gain) and decimated in a single pass — only every factor-th output is computed. Any integer factor >= 2 is supported (e.g. factor=1024 for 16384 Hz -> 16 Hz).

Parameters:

  • data (ndarray): Input array of shape (n_samples,) or (n_samples, n_channels). float32, float64, complex64, and complex128 are processed natively and preserved; other dtypes are converted to float32.
  • factor (int, optional): Downsampling factor (default: 2). Must be >= 2.
  • half_length (int, optional): Filter half-length parameter (default: 8). The filter has 2 * half_length * factor + 1 taps.

Returns:

  • output (ndarray): Downsampled array of length (n_samples - kernel_len) // factor + 1 per channel, where kernel_len = 2 * half_length * factor + 1. The group delay is exactly half_length * factor input samples.

downsample_transposed(data, factor=2, half_length=8)

Same as downsample() but expects (n_channels, n_samples) layout.

get_simd_info()

Get information about the current SIMD implementation.

Returns:

  • dict with keys:
    • implementation: Name of current implementation (e.g., 'AVX2+FMA', 'NEON', 'Scalar')
    • available: List of all available implementations for this CPU
    • cpu_features: Detected CPU SIMD features

set_implementation(name)

Manually select a SIMD implementation. Useful for testing and benchmarking.

Parameters:

  • name (str): Implementation name from get_simd_info()['available']

Can also be set via the SGNL_CPU_IMPL environment variable:

SGNL_CPU_IMPL=Scalar python my_script.py

Important Notes

  • Edge loss: The convolution loses kernel_len - 1 samples from the edges. For half_length=8, you lose 16 input samples.
  • Time alignment: The output has a delay of (kernel_len - 1) / 2 samples at the input sample rate.
  • Minimum length: Input must have at least kernel_len samples.
  • Uses Lanczos-windowed sinc kernel: h(x) = sinc(x/factor) * sinc(x/kernel_length)

Performance

Benchmark on 1024 channels, 1024 samples:

Platform Implementation Time Notes
Apple Silicon (M-series) NEON ~0.4 ms Auto-selected
Apple Silicon Scalar ~0.4 ms Compiler auto-vectorizes well
x86_64 (Haswell+) AVX2+FMA ~0.3 ms Expected
x86_64 (older) SSE2 ~0.8 ms Baseline x86_64

Comparison with previous GSL-based implementation:

Implementation Time Speedup
GSL BLAS (old) 9.8 ms 1.0x
This package 0.4 ms ~25x

Architecture

The package automatically detects CPU features at module load time and selects the best available implementation:

┌─────────────────────────────────────────────────────────┐
│                    Python API                           │
│         upsample() / upsample_transposed()              │
└─────────────────────────────────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────┐
│                  Runtime Dispatch                        │
│         cpu_detect() → select best implementation        │
└─────────────────────────────────────────────────────────┘
                           │
          ┌────────────────┼────────────────┐
          ▼                ▼                ▼
    ┌──────────┐    ┌──────────┐    ┌──────────┐
    │ AVX-512  │    │   NEON   │    │  Scalar  │
    │  AVX2    │    │  (ARM)   │    │(fallback)│
    │   AVX    │    └──────────┘    └──────────┘
    │  SSE4.1  │
    │  SSE2    │
    │  (x86)   │
    └──────────┘

Development

Environment

Any C toolchain and Python >= 3.10 will do:

python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

Alternatively, a nix flake provides a self-contained development environment (C toolchain, CMake, Ninja, Python, uv):

nix develop
uv venv --seed
uv pip install -e ".[dev]"

Building and testing

make build         # rebuild the C extension and reinstall (editable, incremental)
make test          # run the test suite
make lint          # linter
make format        # code formatter
make type-check    # static type checker
make bench         # downsample benchmark vs scipy (needs pip install ".[bench]")

The C extension is built with scikit-build-core + CMake; per-kernel SIMD flags live in CMakeLists.txt.

Project structure

fast-resample-cpu/
├── csrc/
│   ├── cpu_detect.c      # Runtime CPU feature detection
│   ├── dispatch.c        # Function pointer dispatch table
│   ├── resample_ext_simd.c  # Python extension wrapper
│   └── kernels/
│       ├── convolve_scalar.c   # Baseline implementation
│       ├── convolve_sse2.c     # x86 SSE2
│       ├── convolve_sse4.c     # x86 SSE4.1
│       ├── convolve_avx.c      # x86 AVX
│       ├── convolve_avx2.c     # x86 AVX2+FMA
│       ├── convolve_avx512.c   # x86 AVX-512
│       └── convolve_neon.c     # ARM NEON
├── src/
│   └── sgnl_cpu_interp/  # Python API
├── CMakeLists.txt        # C extension build configuration
├── pyproject.toml        # Package metadata and build backend
└── tests/                # Test suite

Adding a new SIMD implementation

  1. Create csrc/kernels/convolve_<name>.c implementing convolve_<name>() and convolve_transposed_<name>()
  2. Add the implementation to the dispatch table in csrc/dispatch.c
  3. Add per-file compile flags in CMakeLists.txt (see the existing set_source_files_properties calls)
  4. Add CPU feature detection if needed in csrc/cpu_detect.c

Algorithm

This implementation uses polyphase filtering for efficient upsampling:

  1. Kernel generation: Creates a Lanczos-windowed sinc kernel and splits it into factor polyphase components
  2. SIMD convolution: Vectorized dot product across channels (standard layout) or time samples (transposed layout)
  3. Phase-blocked upsampling: Processes all output samples with the same phase together to maximize kernel data reuse in cache

The approach is specifically optimized for:

  • Many channels (100+)
  • Small to moderate upsampling factors (2-16x)
  • Short to medium input lengths (100s to 1000s of samples)

License

MIT License - see LICENSE file for details.

Contributing

Contributions welcome! Please open an issue or merge request on git.ligo.org.

Citation

If you use this in research, please cite:

@software{sgnl_cpu_interp,
  title = {sgnl-cpu-interp: Fast polyphase resampling with multi-architecture SIMD},
  url = {https://git.ligo.org/greg/fast-resample-cpu},
  year = {2025}
}

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

sgnl_cpu_interp-0.2.0.tar.gz (19.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

sgnl_cpu_interp-0.2.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (73.6 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

sgnl_cpu_interp-0.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (41.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

sgnl_cpu_interp-0.2.0-cp314-cp314-macosx_15_0_arm64.whl (44.4 kB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

sgnl_cpu_interp-0.2.0-cp314-cp314-macosx_13_0_x86_64.whl (89.4 kB view details)

Uploaded CPython 3.14macOS 13.0+ x86-64

sgnl_cpu_interp-0.2.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (73.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

sgnl_cpu_interp-0.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (41.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

sgnl_cpu_interp-0.2.0-cp313-cp313-macosx_15_0_arm64.whl (44.4 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

sgnl_cpu_interp-0.2.0-cp313-cp313-macosx_13_0_x86_64.whl (89.2 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

sgnl_cpu_interp-0.2.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (73.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

sgnl_cpu_interp-0.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (41.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

sgnl_cpu_interp-0.2.0-cp312-cp312-macosx_15_0_arm64.whl (44.4 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

sgnl_cpu_interp-0.2.0-cp312-cp312-macosx_13_0_x86_64.whl (89.3 kB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

sgnl_cpu_interp-0.2.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (73.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

sgnl_cpu_interp-0.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (41.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

sgnl_cpu_interp-0.2.0-cp311-cp311-macosx_15_0_arm64.whl (44.3 kB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

sgnl_cpu_interp-0.2.0-cp311-cp311-macosx_13_0_x86_64.whl (89.2 kB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

sgnl_cpu_interp-0.2.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (73.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

sgnl_cpu_interp-0.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (41.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

sgnl_cpu_interp-0.2.0-cp310-cp310-macosx_15_0_arm64.whl (44.3 kB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

sgnl_cpu_interp-0.2.0-cp310-cp310-macosx_13_0_x86_64.whl (89.2 kB view details)

Uploaded CPython 3.10macOS 13.0+ x86-64

File details

Details for the file sgnl_cpu_interp-0.2.0.tar.gz.

File metadata

  • Download URL: sgnl_cpu_interp-0.2.0.tar.gz
  • Upload date:
  • Size: 19.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for sgnl_cpu_interp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 4797d1aad89633a027b186dfe498a9ae4cf976e15f8fbbd1f4ab83108e89900e
MD5 569d5e049b8aa631ba60d5fc91eb3501
BLAKE2b-256 143a251995c9b369a836b415b173a8b41fe360661da4533a67164ef6a543f3f6

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 97f8b09b482d85d8e6061e965c60e4909d8f39bfb70ff6c5173678b10f2a7903
MD5 d3b4321df3ac926c38e23f12d513c8d8
BLAKE2b-256 9fcb452483e81aecedc03dee0d5e2efcfebeffb0c2e9a7d65736a9b69cfbc9cb

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a24a47300f0b3a164ef77c45c794165717e99f4bae4031b1bfcf7e3f1b911d3d
MD5 df2773b0d491d6ba7ea3514de1005141
BLAKE2b-256 cee9b8ce8daea4a277b926156c3aaee952493863854d68573bb57b577433c92d

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 c0b58a80e578db2c02fe069e03cd7f1c3ed98fe20332d292e0327ee3e50e0fcc
MD5 c481205fc318bd0b2d418a9c07d4dde8
BLAKE2b-256 bd301a11141b04f57624b4b2f4f1c84ee54efc917fd69629cca2c6a95e65b738

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp314-cp314-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp314-cp314-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 6c1be36374b3d75800f97911b7abeca28812bef76628db9db7763c91c9ccd820
MD5 3e79ee2e762f233a92a8ca2ed4c109c2
BLAKE2b-256 1dd96f0801fedb5782bb42476d962e67c3f85bca8e831b0c7e1298575b95e021

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 54a3b2f65b2de32fcacf47895cee464d4593051ed2a29f71f54d2de43248a8fb
MD5 498870d56b677f0fd25e79880e5bb1b7
BLAKE2b-256 dbea65267fa5513f57f54af7bbd81d2e06dfc3f57960f43fe9707380cc9bafa5

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 328f97dd0baafbc0768fbf06f261b8f70e7d3009a5319f50386bc5a2ae253ec6
MD5 aaac75c932b33723a7e4b6fc0bfee9df
BLAKE2b-256 9fd5b1e9b8f7974d5c0437b54cfe5bf3dd856a2e51f47fd9e3874fc039b0ce07

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 9deae4e4f23ecb6a22d37f08f47dd4500587f1c4c682af0bc600a8bdc5456735
MD5 b47006b5a649c291230969835eb4e598
BLAKE2b-256 3e7a4c11163608082eb7e627d8b0538faad8c8439390bbecc50261ca13a2c91c

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp313-cp313-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 ef66a863fcc1e2c8c7545d1b0e06eaee78acef3f6b97eaa9a7bf6bd56502b20f
MD5 3a61818fe1c8a93df077fce0a2c5e8f7
BLAKE2b-256 56d22e43b5cd94ce1d458321bbf3f81399b4d1d136ec1886d80567c0e5d5eec2

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9e6593b11b9a5d6176829a099c8ab05620e50bf15aa00e0f0dec78b41fb3913a
MD5 466fee7a970ca781c71d026915af3637
BLAKE2b-256 1c1e626625ff20e7a629fe0d82d905efd448bc7a84cc7d944454f656b1dd1f0c

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 18e55af9492afe8bbdec6e2efffd6575f456e6f58032754dee3324a00aef03df
MD5 55c947e88266fb71a002175b133ede4d
BLAKE2b-256 1d9d62bdf63a2a36a362ec406998e42c405dfbc474e72be32ab1524c65ab790e

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 0f79729fae0c539b649526c3097b18dcc9e8233fb69b1309b7603fa2264114c7
MD5 b3c63298ed2639fda69478e3366cde30
BLAKE2b-256 1aec9f67c7839789ffd241aa43f88e23fd27cc2e69aacc41a26bf493aabcc344

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 fc3c0bb1f805ef269e81bc6e1b1b3807dffb8c117f952705e17cedf476d06dab
MD5 70c3e7d78d919d456e2362bb717d5db0
BLAKE2b-256 b2165b4aa20f92ab0ec0389f3bb5b33fa15e3210214d7fa439f2b6c66a1d6c1e

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 18c950c808ce4f679351047e5058dcebfb711219b72462c51da376437057124c
MD5 22aa872d4a1e7305d876cd1e8af77c53
BLAKE2b-256 5c9a21f9198f87907b3cefa59721ee1a43179dc82d86eae03f3e56e62037fc50

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d1ac38a6e449782ff0cf4563d8e0c8b82c30ad611c3a90f0c8639b17ed782d4e
MD5 c6a23aab7d2ecfa8f394e6ce92618629
BLAKE2b-256 7cbc2abe16d77a17f810176b2617d447609432a1758dd7d71357472b2d310382

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 077d3fe09cb351ffc89cedf6ea84b424637b5fcee09a7578f8967c46322a3ba4
MD5 dfd9e4e46e64dffdfc191264b8b9e949
BLAKE2b-256 235366f244920f3ef032d20b4480a442a9a26bf312476dc2112e3ee70b5bbc17

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 66d6a2db691b641980ea8fd143bca3bc08e7a3a149010c321e8aa8f733afaeb0
MD5 acd09bd91f6e71b790749ad9cb196a2a
BLAKE2b-256 0b0c1b85c6c8284a3c67cc08e262f2fb3f49d90c9096c39bbf82edffa2c2ae7a

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6add46d0ccda3b04133910b28c89db1a208b612d9f3ca99c8386a870ce9b7af2
MD5 7a1cbf0c4254e3794ca6b4ea4f3b9342
BLAKE2b-256 b4fe1895b9dc5768bc1960f0a584d895e299ec6f3a9de90991319b6702e28bed

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3825da2d8d5e7d14c5ca775d37ebce1512b281631b037edafc935b32165617c1
MD5 bde4b6004376a209884296eb21a01bdb
BLAKE2b-256 a0ab7ce78f80a208c144f673ad1120ae34022605c0aae5a916a7eec971fd4eb7

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 8c27ca602654fa91f538314b604375669bf0d935efaa1a2321fa340396fa0ff1
MD5 e2afcf0323de425fd94e8bdaaa762682
BLAKE2b-256 86c9265ec1ab1b417ef43add10bf33bcb108e379f0c69482a32893b09f23b607

See more details on using hashes here.

File details

Details for the file sgnl_cpu_interp-0.2.0-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for sgnl_cpu_interp-0.2.0-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 8187811ffe54ac42742b4bf670f8f9b82a1891f81f945e8ac90e3ec7b51c2705
MD5 0eba8355d4edca8c8c03f4353f78b55f
BLAKE2b-256 43ef91fb5ca3872f338e58da2f8a8817964302b2f87dab88984194e8eb35d6f2

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