Skip to main content

A high-performance array storage and manipulation library

Project description

NumPack

NumPack is a lightning-fast array manipulation engine that revolutionizes how you handle large-scale NumPy arrays. By combining Rust's raw performance with Python's ease of use, NumPack delivers up to 166x faster operations than traditional methods, while using minimal memory. With our new high-performance binary format, matrix operations are now up to 5.33x faster than NumPy mmap, and lazy loading achieves throughput exceeding 100,000 MB/s. Whether you're working with gigabyte-sized matrices or performing millions of array operations, NumPack makes it effortless with its zero-copy architecture and intelligent memory management.

Key highlights:

  • 🚀 Up to 166x faster than traditional NumPy storage methods
  • ⚡ Matrix operations up to 5.33x faster than NumPy mmap
  • 🚀 SIMD-optimized operations with streaming throughput up to 4,417 MB/s
  • 💾 Zero-copy operations for minimal memory footprint
  • 🔄 Seamless integration with existing NumPy workflows
  • 🛠 Battle-tested in production with arrays exceeding 1 billion rows

Features

  • High Performance: Optimized for both reading and writing large numerical arrays
  • Lazy Loading Support: Efficient memory usage through on-demand data loading
  • Selective Loading: Load only the arrays you need, when you need them
  • In-place Operations: Support for in-place array modifications without full file rewrite
  • Parallel I/O: Utilizes parallel processing for improved performance
  • Multiple Data Types: Supports various numerical data types including:
    • Boolean
    • Unsigned integers (8-bit to 64-bit)
    • Signed integers (8-bit to 64-bit)
    • Floating point (16-bit, 32-bit and 64-bit)
    • Complex numbers (64-bit and 128-bit)

Installation

From PyPI (Recommended)

Prerequisites

  • Python >= 3.9
  • NumPy >= 1.26.0
pip install numpack

From Source

To build and install NumPack from source, you need to meet the following requirements:

Prerequisites

  • Python >= 3.9
  • Rust >= 1.70.0
  • NumPy >= 1.26.0
  • Appropriate C/C++ compiler (depending on your operating system)
    • Linux: GCC or Clang
    • macOS: Clang (via Xcode Command Line Tools)
    • Windows: MSVC (via Visual Studio or Build Tools)

Build Steps

  1. Clone the repository:
git clone https://github.com/BirchKwok/NumPack.git
cd NumPack
  1. Install maturin (for building Rust and Python hybrid projects):
pip install maturin>=1.0,<2.0
  1. Build and install:
# Install in development mode
maturin develop

# Or build wheel package
maturin build --release
pip install target/wheels/numpack-*.whl

Platform-Specific Notes

  • Linux Users:

    • Ensure python3-dev (Ubuntu/Debian) or python3-devel (Fedora/RHEL) is installed
    • If using conda environment, make sure the appropriate compiler toolchain is installed
  • macOS Users:

    • Make sure Xcode Command Line Tools are installed: xcode-select --install
    • Supports both Intel and Apple Silicon architectures
  • Windows Users:

    • Visual Studio or Visual Studio Build Tools required
    • Ensure "Desktop development with C++" workload is installed

Usage

Basic Operations

import numpy as np
from numpack import NumPack

# Create a NumPack instance
npk = NumPack("data_directory")

# Save arrays
arrays = {
    'array1': np.random.rand(1000, 100).astype(np.float32),
    'array2': np.random.rand(500, 200).astype(np.float32)
}
npk.save(arrays)

# Load arrays
# Normal mode
loaded = npk.load("array1")

# lazy load
lazy_array = npk.load("arr1", lazy=True)

Advanced Operations

# Replace specific rows
replacement = np.random.rand(10, 100).astype(np.float32)
npk.replace({'array1': replacement}, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])  # Using list indices
npk.replace({'array1': replacement}, slice(0, 10))  # Using slice notation

# Append new arrays
new_arrays = {
    'array3': np.random.rand(200, 100).astype(np.float32)
}
npk.append(new_arrays)

# Drop arrays or specific rows
npk.drop('array1')  # Drop entire array
npk.drop(['array1', 'array2'])  # Drop multiple arrays
npk.drop('array2', [0, 1, 2])  # Drop specific rows

# Random access operations
data = npk.getitem('array1', [0, 1, 2])  # Access specific rows
data = npk.getitem('array1', slice(0, 10))  # Access using slice
data = npk['array1']  # Dictionary-style access for entire array

# Metadata operations
shapes = npk.get_shape()  # Get shapes of all arrays
shapes = npk.get_shape('array1')  # Get shape of specific array
members = npk.get_member_list()  # Get list of array names
mtime = npk.get_modify_time('array1')  # Get modification time
metadata = npk.get_metadata()  # Get complete metadata

# Stream loading for large arrays
for batch in npk.stream_load('array1', buffer_size=1000):
    # Process 1000 rows at a time
    process_batch(batch)

# Reset/clear storage
npk.reset()  # Clear all arrays

# Iterate over all arrays
for array_name in npk:
    data = npk[array_name]
    print(f"{array_name} shape: {data.shape}")

Lazy Loading and Buffer Operations

NumPack supports lazy loading and buffer operations, which are particularly useful for handling large-scale datasets. Using the lazy=True parameter enables data to be loaded only when actually needed, making it ideal for streaming processing or scenarios where only partial data access is required.

from numpack import NumPack
import numpy as np

# Create NumPack instance and save large-scale data
npk = NumPack("test_data/", drop_if_exists=True)
a = np.random.random((1000000, 128))  # Create a large array
npk.save({"arr1": a})

# Lazy loading - keeps data in buffer
lazy_array = npk.load("arr1", lazy=True)  # LazyArray Object

# Perform computations with lazy-loaded data
# Only required data is loaded into memory
similarity_scores = np.inner(a[0], npk.load("arr1", lazy=True))

Performance

NumPack offers significant performance improvements compared to traditional NumPy storage methods, especially in data modification operations and random access. Below are detailed benchmark results:

Benchmark Results

The following benchmarks were performed on a MacBook Pro (Apple Silicon) with arrays of size 1M x 10 and 500K x 5 (float32).

Storage Operations

Operation NumPack (Python) NumPack (Rust) NumPy NPZ NumPy NPY
Save 0.038s (1.81x NPZ, 2.92x NPY) 0.026s (2.19x NPZ, 2.00x NPY) 0.021s 0.013s
Full Load 0.010s (1.60x NPZ, 1.10x NPY) 0.011s (1.45x NPZ, 1.00x NPY) 0.016s 0.011s
Lazy Load 0.001s (89,740 MB/s) 0.001s (87,761 MB/s) - -

Data Modification Operations

Operation NumPack (Python) NumPack (Rust) NumPy NPZ NumPy NPY
Single Row Replace 0.000s (≥154x NPZ, ≥85x NPY) 0.000s (≥166x NPZ, ≥92x NPY) 0.023s 0.013s
Continuous Rows (10K) 0.001s 0.001s - -
Random Rows (10K) 0.014s 0.015s - -
Large Data Replace (500K) 0.020s 0.018s - -

Drop Operations

Operation (1M rows, float32) NumPack (Python) NumPack (Rust) NumPy NPZ NumPy NPY
Drop Array 0.008s (1.60x NPZ, 0.12x NPY) 0.004s (2.80x NPZ, 0.22x NPY) 0.012s 0.001s
Drop First Row 0.023s (1.62x NPZ, 1.21x NPY) 0.020s (1.86x NPZ, 1.39x NPY) 0.038s 0.028s
Drop Last Row 0.019s (∞x NPZ, ∞x NPY) 0.020s (∞x NPZ, ∞x NPY) 0.038s 0.028s
Drop Middle Row 0.019s (1.96x NPZ, 1.46x NPY) 0.019s (1.95x NPZ, 1.46x NPY) 0.038s 0.028s
Drop Front Continuous (10K rows) 0.021s (1.77x NPZ, 1.33x NPY) 0.021s (1.84x NPZ, 1.37x NPY) 0.038s 0.028s
Drop Middle Continuous (10K rows) 0.020s (1.85x NPZ, 1.38x NPY) 0.020s (1.86x NPZ, 1.39x NPY) 0.038s 0.028s
Drop End Continuous (10K rows) 0.020s (1.88x NPZ, 1.41x NPY) 0.020s (1.85x NPZ, 1.38x NPY) 0.038s 0.028s
Drop Random Rows (10K rows) 0.025s (1.52x NPZ, 1.14x NPY) 0.021s (1.76x NPZ, 1.32x NPY) 0.038s 0.028s
Drop Near Non-continuous (10K rows) 0.018s (2.05x NPZ, 1.53x NPY) 0.022s (1.75x NPZ, 1.31x NPY) 0.038s 0.028s

Append Operations

Operation NumPack (Python) NumPack (Rust) NumPy NPZ NumPy NPY
Small Append (1K rows) 0.004s (≥6x NPZ, ≥4x NPY) 0.004s (≥7x NPZ, ≥4x NPY) 0.028s 0.017s
Large Append (500K rows) 0.008s (4.88x NPZ, 3.28x NPY) 0.016s (2.28x NPZ, 1.53x NPY) 0.037s 0.025s

Random Access Performance (10K indices)

Operation NumPack (Python) NumPack (Rust) NumPy NPZ NumPy NPY
Random Access 0.005s (2.20x NPZ, 1.45x NPY) 0.005s (2.30x NPZ, 1.52x NPY) 0.012s 0.008s

Matrix Computation Performance (1M rows x 128 columns, Float32)

Operation NumPack (Python) NumPack (Rust) NumPy NPZ NumPy NPY In-Memory
Inner Product 0.006s (5.33x NPZ, 1.83x Memory) 0.006s (5.33x NPZ, 1.83x Memory) 0.032s 0.096s 0.011s

File Size Comparison

Format Size Ratio
NumPack 47.68 MB 1.0x
NPZ 47.68 MB 1.00x
NPY 47.68 MB 1.00x

Note: Both Python and Rust backends generate identical file sizes as they use the same underlying file format.

Large-scale Data Operations (>1B rows, Float32)

Operation NumPack (Python) NumPack (Rust) NumPy NPZ NumPy NPY
Replace Efficient in-place modification Zero-copy in-place modification Memory exceeded Memory exceeded
Drop Efficient in-place deletion Zero-copy in-place deletion Memory exceeded Memory exceeded
Append Efficient in-place addition Zero-copy in-place addition Memory exceeded Memory exceeded
Random Access High-performance I/O Near-hardware I/O speed Memory exceeded Memory exceeded

Key Advantage: NumPack provides excellent matrix computation performance (0.065s vs 0.142s NPZ mmap) with several implementation advantages:

  • Uses Arc for reference counting, ensuring automatic resource cleanup
  • Implements MMAP_CACHE to avoid redundant data loading
  • Linux-specific optimizations with huge pages and sequential access hints
  • Supports parallel I/O operations for improved data throughput
  • Optimizes memory usage through Buffer Pool to reduce fragmentation

Key Performance Highlights

  1. Data Modification:

    • Single row replacement: NumPack Python backend is ≥154x faster than NPZ and ≥85x faster than NPY; Rust backend is ≥166x faster than NPZ and ≥92x faster than NPY
    • Continuous rows: Both backends show excellent performance for bulk modifications
    • Random rows: Both backends provide efficient random row replacement
    • Large data replacement: Rust backend shows 10% better performance than Python backend for large-scale modifications
  2. Drop Operations:

    • Drop array: Rust backend is 2.80x faster than NPZ, Python backend is 1.60x faster than NPZ
    • Drop rows: Both backends are ~1.5-2x faster than NPZ and ~1.3-1.5x faster than NPY in typical scenarios
    • NumPack continues to support efficient in-place row deletion without full file rewrite
  3. Append Operations:

    • Small append (1K rows): Both backends are ≥6x faster than NPZ and ≥4x faster than NPY
    • Large append (500K rows): Python backend is 4.88x faster than NPZ; Rust backend is 2.28x faster than NPZ
    • Python backend shows superior performance for large append operations
  4. Loading Performance:

    • Full load: Python backend is 1.60x faster than NPZ; Rust backend is 1.45x faster than NPZ
    • Lazy load (memory-mapped): Python backend achieves 89,740 MB/s, Rust backend achieves 87,761 MB/s throughput
    • SIMD-optimized streaming: Achieves up to 4,417 MB/s for large-scale sequential processing
  5. Random Access:

    • Rust backend is 2.30x faster than NPZ and 1.52x faster than NPY for random index access
    • Python backend is 2.20x faster than NPZ and 1.45x faster than NPY
  6. Storage Efficiency:

    • All formats achieve identical compression ratios (47.68 MB)
    • Both Python and Rust backends generate identical file sizes using the same underlying format
  7. Matrix Computation:

    • Both backends provide 5.33x faster performance than NPZ mmap
    • Only ~1.8x slower than pure in-memory computation, providing excellent balance of performance and memory efficiency
    • Zero risk of file descriptor leaks or resource exhaustion
  8. SIMD-Optimized Operations:

    • Streaming throughput: Up to 4,417 MB/s for large-scale sequential data processing
    • Clustered access: 1,041 MB/s for spatially-local data access patterns
    • Strided access: 802 MB/s for regularly-spaced data access
    • Large batch operations: 432 MB/s for 50K random indices processing
  9. Backend Performance:

    • Python backend: Excellent overall performance, particularly strong in append operations and modification operations
    • Rust backend: Superior performance in loading, drop operations, and single-row modifications with zero-copy optimizations
    • Both backends share the same file format ensuring perfect compatibility

Note: All benchmarks were performed with float32 arrays in the dev conda environment. Performance may vary depending on data types, array sizes, and system configurations. Numbers greater than 1.0x indicate faster performance, while numbers less than 1.0x indicate slower performance. The Python and Rust backends demonstrate different performance characteristics - Python backend excels in append operations and large data modifications, while Rust backend shows superior performance in loading operations and drop operations.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the Apache License, Version 2.0 - see the LICENSE file for details.

Copyright 2024 NumPack Contributors

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

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

numpack-0.3.0.tar.gz (67.4 kB view details)

Uploaded Source

Built Distributions

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

numpack-0.3.0-py3-none-any.whl (69.0 kB view details)

Uploaded Python 3

numpack-0.3.0-cp313-cp313-manylinux_2_34_x86_64.whl (790.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

numpack-0.3.0-cp313-cp313-macosx_11_0_arm64.whl (713.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

numpack-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl (744.8 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

numpack-0.3.0-cp312-cp312-manylinux_2_34_x86_64.whl (790.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

numpack-0.3.0-cp312-cp312-macosx_11_0_arm64.whl (714.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

numpack-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl (745.3 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

numpack-0.3.0-cp311-cp311-manylinux_2_34_x86_64.whl (791.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

numpack-0.3.0-cp311-cp311-macosx_11_0_arm64.whl (715.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

numpack-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl (749.1 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

numpack-0.3.0-cp310-cp310-manylinux_2_34_x86_64.whl (792.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

numpack-0.3.0-cp310-cp310-macosx_11_0_arm64.whl (715.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

numpack-0.3.0-cp310-cp310-macosx_10_12_x86_64.whl (749.0 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

numpack-0.3.0-cp39-cp39-manylinux_2_34_x86_64.whl (792.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

numpack-0.3.0-cp39-cp39-macosx_11_0_arm64.whl (716.0 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

numpack-0.3.0-cp39-cp39-macosx_10_12_x86_64.whl (749.3 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

File details

Details for the file numpack-0.3.0.tar.gz.

File metadata

  • Download URL: numpack-0.3.0.tar.gz
  • Upload date:
  • Size: 67.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for numpack-0.3.0.tar.gz
Algorithm Hash digest
SHA256 2053c14fd7aa239aa393623b0807b82be75c8f96a9703d98c42fab5ce011bfe1
MD5 ec6a38eb3df3f84f91fd8ba884e024c0
BLAKE2b-256 e15b6be9696c60d32676f0ac9b60a1e0c547bdfed10f7dee75195cabae5c5db8

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: numpack-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 69.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for numpack-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 87a6f74a4334dde7e7d5a5c249a8fe8d75ae22dc01ff0e36e282ce5aeb6c8736
MD5 2b290043a30603b7792e0d34a4b45875
BLAKE2b-256 888f80e2f06af0802a8763e1702ca5bed011cd064bb2cbeea166834f8a70c208

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 795197423c69da567d0769d50b722a56f806123a1eb83b4abebcabc1f602d29c
MD5 83ffd66e1ca969bcba7b7427d5d57a53
BLAKE2b-256 a29df356da64c2da50989d7a016341af982cb7b3ff16992279be9002137f3373

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 84ec74bf2f1781083c251c35793841216ca495f4dcd608db8f0d1c4bc96e49a8
MD5 51fed2ba744d20fa1488e2f522670dc7
BLAKE2b-256 ca026a017c15bac2ad890a1373306855971458cc00100c78c115542cb44f3206

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3f76138915ab16356a52da7ad79928d849145afdca7537e92c1b36606700f53f
MD5 5cc989aa033d7e90cfa0cc79412b080b
BLAKE2b-256 c76f75a41c18ec6c0530cc0009f22f44f79aa0a41601ab67d22a843667677d3f

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 a8dde3386c4de64d6d2605927804c98a506a7577e1cb7de6a99d511d015e5d52
MD5 39295e46f6ece9f264f397cb9017c3a7
BLAKE2b-256 bb9b89e87c4eccfb0e066f5c64351abfe3e62c0c651b8208571cc8bd6d0369ce

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ee38648d04353b95c29db631d07889d948d60eaa6eb317739a97147971e433c
MD5 a98f288159c50b17dd4d2a0332117233
BLAKE2b-256 ec7b66132d35fa28254444266a7464ae9082904417846a6ed7327aad69c156b4

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6474852bf983f83cc64ac37a8146e4d1fc909c82b0ab0af30cbb0216fa38b822
MD5 10862efea1d359dadb652b8972e9f718
BLAKE2b-256 cd3a1d348d11a191c5ad9f2b4e35a4f5fa99815c94b24611d3720240274e4368

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 6ac99e4a371b15628ef03cda781c8fa2ecf1a51a04a965f125c174906dcd88f7
MD5 43a8b7138aa7ca35d3fdccbea0950113
BLAKE2b-256 dcc00300c961cd0be7d123b084b3e224e29d7d0b85aece3403442adb907a3b53

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3c6249eb4a447b0af194e5dd46f2e6b70331525340c5f79579eed8ddc6b9a768
MD5 d84bbc82255a2e682e31c2720eddc55b
BLAKE2b-256 7ba065e82f19dae02933985b9564a01534131e492dde31fcd68d347b761eed36

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 94d18cf47b08b1f09dc26e9c52d86f2ea5b184f13ea06c07cd95f8c811b9e7db
MD5 8fd913c4cfeb52f9c53af6635881c0ed
BLAKE2b-256 9fcd348c1b1831051f2c057b45b2e19121fb58201cbb43133b72d49cc2e31715

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 4ca81f61a8929ab1c70e4d7ad5651d14b0f77cd38eed7fd4b5a6d77d2012bdb6
MD5 95c688eb6272cf51ef5f143aa1225987
BLAKE2b-256 1106f8da4c39c10ab5f348888d7de889e90a6d6b43d061832bd6b73cfd5da332

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c1f3065fbf5df0034bf89682362951e79a5d07ea1a717f2cc0bbfdab09c2a9f7
MD5 470d5dce1d41ff86e27113d1baac584a
BLAKE2b-256 70f9e0227715300b9a1b97288f718711fbb393eb5920d55b926f598a83d3197d

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e5c424cebfb629509ae2279708805c34c80a3a35abda5cb64081eecf3eaa2eb4
MD5 174759a8690c6e38c28a8486d6cba987
BLAKE2b-256 d51b1b0b3885fe10a07bae462ed8aa55718645604b3e35eab7d78f0535da129b

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp39-cp39-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 53e657412ae57b1fa084122df5890ce444238e0bfe43699f8b824cf981807bea
MD5 69c02850632a2b2c70186c2a77ae6858
BLAKE2b-256 312955a413760b1fbdcf43c1e48c42819379b7c270c89657076d9ad3ecee82bf

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6e5398c8738ba63181ba60c1fc17544eaf7ebe900dbc2c6de5f3795caed133c4
MD5 0dd6b12f84514c3d0ef5b20f010abafa
BLAKE2b-256 1dcb1e88342bdf598b2381bdab149064544bd886d4f5b27fc20d671e0b0bace1

See more details on using hashes here.

File details

Details for the file numpack-0.3.0-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for numpack-0.3.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e972db992aa6d10c44577633cebf4e3c3fa368881a054332645873c15dfcc309
MD5 4638dd399a41c90f4df81a2c7fcaa2a8
BLAKE2b-256 b1ebe58f9c6bed3cb5cc9ce363c123cf9cef21449812e33a18c79b6f2ba04c3c

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