Skip to main content

Rust-backed acceleration for Python array.array

Project description

arrayops

Rust-backed acceleration for Python's array.array type

PyPI Python 3.8+ Rust License: MIT Code Coverage

Fast, lightweight numeric operations for Python's array.array without the overhead of NumPy. Built with Rust and PyO3 for zero-copy, memory-safe performance.

โœจ Features

  • โšก High Performance: 10-100x faster than pure Python loops using Rust-accelerated operations
  • ๐Ÿ”’ Memory Safe: Zero-copy buffer access with Rust's safety guarantees
  • ๐Ÿ“ฆ Lightweight: No dependencies beyond Rust standard library
  • ๐Ÿ”Œ Compatible: Works directly with Python's array.array - no new types
  • โœ… Fully Tested: 100% code coverage (Python and Rust)
  • ๐ŸŽฏ Type Safe: Full mypy type checking support

๐Ÿš€ Quick Start

Installation

# Install maturin if not already installed
pip install maturin

# Install in development mode
maturin develop

# Or install from source
pip install -e .

Usage

import array
import arrayops

# Create an array
data = array.array('i', [1, 2, 3, 4, 5])

# Fast sum operation
total = arrayops.sum(data)
print(total)  # 15

# In-place scaling
arrayops.scale(data, 2.0)
print(list(data))  # [2, 4, 6, 8, 10]

# Map operation (returns new array)
doubled = arrayops.map(data, lambda x: x * 2)
print(list(doubled))  # [4, 8, 12, 16, 20]

# Filter operation
evens = arrayops.filter(data, lambda x: x % 2 == 0)
print(list(evens))  # [2, 4, 6, 8, 10]

# Reduce operation (use fresh array for clarity)
data2 = array.array('i', [1, 2, 3, 4, 5])
product = arrayops.reduce(data2, lambda acc, x: acc * x)
print(product)  # 120

๐Ÿ“š Supported Types

arrayops supports all numeric array.array typecodes:

Type Code Description
Signed integers b, h, i, l int8, int16, int32, int64
Unsigned integers B, H, I, L uint8, uint16, uint32, uint64
Floats f, d float32, float64

๐Ÿ“– API Reference

sum(arr) -> int | float

Compute the sum of all elements in an array.

Parameters:

  • arr (array.array): Input array with numeric type (b, B, h, H, i, I, l, L, f, d)

Returns:

  • int for integer arrays
  • float for float arrays

Raises:

  • TypeError: If input is not an array.array or uses unsupported typecode

Example:

import array
import arrayops

# Integer array
arr = array.array('i', [1, 2, 3, 4, 5])
result = arrayops.sum(arr)  # Returns: 15 (int)

# Float array
farr = array.array('f', [1.5, 2.5, 3.5])
result = arrayops.sum(farr)  # Returns: 7.5 (float)

scale(arr, factor) -> None

Scale all elements of an array in-place by a factor.

Parameters:

  • arr (array.array): Input array with numeric type (modified in-place)
  • factor (float): Scaling factor

Returns:

  • None (modifies array in-place)

Raises:

  • TypeError: If input is not an array.array or uses unsupported typecode

Example:

import array
import arrayops

arr = array.array('i', [1, 2, 3, 4, 5])
arrayops.scale(arr, 2.0)
print(list(arr))  # [2, 4, 6, 8, 10]

# Float arrays work too
farr = array.array('f', [1.0, 2.0, 3.0])
arrayops.scale(farr, 1.5)
print(list(farr))  # [1.5, 3.0, 4.5]

map(arr, fn) -> array.array

Apply a function to each element, returning a new array.

Parameters:

  • arr (array.array): Input array with numeric type
  • fn (callable): Function that takes one element and returns a value of the same type

Returns:

  • array.array: New array with the same type as input

Raises:

  • TypeError: If input is not an array.array or fn is not callable
  • TypeError: If function returns incompatible type

Example:

import array
import arrayops

arr = array.array('i', [1, 2, 3, 4, 5])
doubled = arrayops.map(arr, lambda x: x * 2)
print(list(doubled))  # [2, 4, 6, 8, 10]

# Using named function
def square(x):
    return x * x

squared = arrayops.map(arr, square)
print(list(squared))  # [1, 4, 9, 16, 25]

map_inplace(arr, fn) -> None

Apply a function to each element in-place.

Parameters:

  • arr (array.array): Input array with numeric type (modified in-place)
  • fn (callable): Function that takes one element and returns a value of the same type

Returns:

  • None (modifies array in-place)

Raises:

  • TypeError: If input is not an array.array or fn is not callable
  • TypeError: If function returns incompatible type

Example:

import array
import arrayops

arr = array.array('i', [1, 2, 3, 4, 5])
arrayops.map_inplace(arr, lambda x: x * 2)
print(list(arr))  # [2, 4, 6, 8, 10]

filter(arr, predicate) -> array.array

Filter elements using a predicate function, returning a new array.

Parameters:

  • arr (array.array): Input array with numeric type
  • predicate (callable): Function that takes one element and returns bool

Returns:

  • array.array: New array with filtered elements (same type as input)

Raises:

  • TypeError: If input is not an array.array or predicate is not callable
  • TypeError: If predicate doesn't return bool

Example:

import array
import arrayops

arr = array.array('i', [1, 2, 3, 4, 5, 6])
evens = arrayops.filter(arr, lambda x: x % 2 == 0)
print(list(evens))  # [2, 4, 6]

# Filter values greater than threshold
large = arrayops.filter(arr, lambda x: x > 3)
print(list(large))  # [4, 5, 6]

reduce(arr, fn, initial=None) -> Any

Reduce array to a single value using a binary function.

Parameters:

  • arr (array.array): Input array with numeric type
  • fn (callable): Binary function that takes (accumulator, element) and returns a value
  • initial (optional): Initial value for the accumulator. If not provided, uses first element.

Returns:

  • Any: Result of the reduction (type depends on function and initial value)

Raises:

  • TypeError: If input is not an array.array or fn is not callable
  • ValueError: If array is empty and no initial value provided

Example:

import array
import arrayops

arr = array.array('i', [1, 2, 3, 4, 5])

# Sum using reduce
total = arrayops.reduce(arr, lambda acc, x: acc + x)
print(total)  # 15

# Product with initial value
product = arrayops.reduce(arr, lambda acc, x: acc * x, initial=1)
print(product)  # 120

# Maximum value
maximum = arrayops.reduce(arr, lambda acc, x: acc if acc > x else x)
print(maximum)  # 5

๐Ÿ’ก Examples

Basic Operations

import array
import arrayops

# Create and sum an array
data = array.array('i', [10, 20, 30, 40, 50])
total = arrayops.sum(data)
print(f"Sum: {total}")  # Sum: 150

# Scale in-place (use float array for fractional factors)
data_float = array.array('f', [10.0, 20.0, 30.0, 40.0, 50.0])
arrayops.scale(data_float, 1.5)
print(list(data_float))  # [15.0, 30.0, 45.0, 60.0, 75.0]

# Map operation
doubled = arrayops.map(data, lambda x: x * 2)
print(list(doubled))  # [20, 40, 60, 80, 100]

# Filter operation
evens = arrayops.filter(data, lambda x: x % 20 == 0)
print(list(evens))  # [20, 40]

# Reduce operation (use fresh array)
data_reduce = array.array('i', [10, 20, 30, 40, 50])
product = arrayops.reduce(data_reduce, lambda acc, x: acc * x, initial=1)
print(product)  # 12000000

Binary Protocol Parsing

import array
import arrayops

# Read binary data efficiently
with open('sensor_data.bin', 'rb') as f:
    data = array.array('f')  # float32
    data.fromfile(f, 10000)  # Read 10,000 floats

# Fast aggregation
total = arrayops.sum(data)
mean = total / len(data)
print(f"Average: {mean}")

ETL Pipeline

import array
import arrayops

# Process large dataset
sensor_readings = array.array('f', [10.5, 25.3, 15.8, 30.2, 20.1, 18.7, 22.4])

# Normalize to 0-1 range
min_val = min(sensor_readings)
max_val = max(sensor_readings)
range_size = max_val - min_val

if range_size > 0:
    # Shift to start at 0
    for i in range(len(sensor_readings)):
        sensor_readings[i] -= min_val
    # Scale to 0-1
    arrayops.scale(sensor_readings, 1.0 / range_size)
    # Now all values are in [0, 1] range

# Compute statistics
total = arrayops.sum(sensor_readings)
mean = total / len(sensor_readings)

Empty Array Handling

import array
import arrayops

# Empty arrays are handled gracefully
empty = array.array('i', [])
result = arrayops.sum(empty)  # Returns 0
arrayops.scale(empty, 5.0)    # No error, array remains empty

โšก Performance

arrayops provides significant speedups over pure Python operations:

Operation Python arrayops Speedup
Sum (1M ints) ~50ms ~0.5ms 100x
Scale (1M ints) ~80ms ~1.5ms 50x
Map (1M ints) ~100ms ~5ms 20x
Filter (1M ints) ~120ms ~8ms 15x
Reduce (1M ints) ~150ms ~6ms 25x
Memory overhead N/A Zero-copy โ€”

Benchmark

import array
import arrayops
import time

# Create large array (100K integers - note: use smaller for int32 to avoid overflow)
arr = array.array('i', list(range(100_000)))

# Python sum
start = time.perf_counter()
python_sum = sum(arr)
python_time = time.perf_counter() - start

# arrayops sum
start = time.perf_counter()
arrayops_sum = arrayops.sum(arr)
arrayops_time = time.perf_counter() - start

print(f"Python sum: {python_time*1000:.2f}ms")
print(f"arrayops sum: {arrayops_time*1000:.2f}ms")
print(f"Speedup: {python_time / arrayops_time:.1f}x")

๐Ÿ”„ Comparison

Feature array.array arrayops NumPy
Memory efficient โœ… โœ… โŒ
Fast operations โŒ โœ… โœ…
Multi-dimensional โŒ โŒ โœ…
Zero dependencies โœ… โœ… โŒ
C-compatible โœ… โœ… โœ…
Type safety โœ… โœ… โš ๏ธ
Use case Binary I/O Scripting/ETL Scientific computing

๐Ÿ—๏ธ Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚           Python Layer                  โ”‚
โ”‚  array.array โ†’ arrayops โ†’ _arrayops     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚ Buffer Protocol
                 โ”‚ (Zero-copy)
                 โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         Rust Extension (PyO3)           โ”‚
โ”‚  โ€ข Typed buffer access                  โ”‚
โ”‚  โ€ข Monomorphized kernels                โ”‚
โ”‚  โ€ข SIMD-ready loops                     โ”‚
โ”‚  โ€ข Memory-safe operations               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ› ๏ธ Development

Prerequisites

  • Python 3.8+
  • Rust 1.70+
  • maturin

Setup

# Clone the repository
git clone <repository-url>
cd arrayops

# Install development dependencies
pip install -r requirements-dev.txt

# Install package in development mode
maturin develop

Testing

# Run all tests
pytest tests/ -v

# Run tests in parallel
pytest tests/ -n 10

# Run with coverage
pytest tests/ --cov=arrayops --cov-report=html

# Run Rust tests
export PYO3_PYTHON=$(which python)
export DYLD_LIBRARY_PATH=$(python -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR'))"):$DYLD_LIBRARY_PATH
cargo test --lib

# Check Rust code coverage
cargo tarpaulin --tests --lib

Code Quality

# Format Python code
ruff format .

# Lint Python code
ruff check .

# Type checking
mypy arrayops tests

Building

# Development build
maturin develop

# Release build
maturin build --release

# Build for specific Python version
PYO3_PYTHON=/path/to/python maturin build --release

๐Ÿ“Š Test Coverage

  • Python: 100% (8/8 statements)
  • Rust: 100% (109/109 lines)

All code paths are tested, including:

  • All numeric types (10 typecodes)
  • Edge cases (empty arrays, single elements)
  • Error handling (invalid types, wrong inputs)
  • Large arrays (performance tests)

๐Ÿ”ง Optional Features

Enable optional features via Cargo features:

[dependencies]
arrayops = { version = "0.2.0", features = ["parallel"] }
  • parallel: Enable parallel execution with rayon (experimental, requires Rust nightly)

๐Ÿ“ Error Handling

arrayops provides clear error messages:

import arrayops

# Wrong type
arrayops.sum([1, 2, 3])  # TypeError: Expected array.array

# Unsupported typecode
arr = array.array('c', b'abc')
arrayops.sum(arr)  # TypeError: Unsupported typecode: 'c'

๐Ÿ—บ๏ธ Roadmap

  • Core operations (sum, scale)
  • Full test coverage
  • Type stubs for mypy
  • Additional operations (map, map_inplace, filter, reduce)
  • Parallel execution support (rayon)
  • SIMD auto-vectorization
  • NumPy array interop
  • Memoryview support

๐Ÿค Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Add tests for new functionality
  4. Ensure all tests pass (100% coverage maintained)
  5. Run code quality checks (ruff format, ruff check, mypy)
  6. Submit a pull request

See docs/design.md for architecture details.

๐Ÿ“„ License

MIT License - see LICENSE file for details.

๐Ÿ™ Acknowledgments

  • Built with PyO3 for Python-Rust interop
  • Built with maturin for packaging
  • Inspired by the need for fast array operations without NumPy overhead

๐Ÿ“ž Support

  • Issues: Report bugs or request features on GitHub
  • Documentation: See docs/design.md for detailed architecture
  • Questions: Open a discussion on GitHub

Made with โค๏ธ and Rust

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

arrayops-0.1.4.tar.gz (52.1 kB view details)

Uploaded Source

Built Distributions

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

arrayops-0.1.4-cp314-cp314-win_arm64.whl (130.1 kB view details)

Uploaded CPython 3.14Windows ARM64

arrayops-0.1.4-cp314-cp314-win_amd64.whl (135.9 kB view details)

Uploaded CPython 3.14Windows x86-64

arrayops-0.1.4-cp314-cp314-manylinux_2_28_x86_64.whl (235.7 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

arrayops-0.1.4-cp314-cp314-manylinux_2_28_aarch64.whl (220.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

arrayops-0.1.4-cp314-cp314-macosx_11_0_arm64.whl (205.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

arrayops-0.1.4-cp314-cp314-macosx_10_12_x86_64.whl (211.5 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

arrayops-0.1.4-cp313-cp313-win_arm64.whl (130.1 kB view details)

Uploaded CPython 3.13Windows ARM64

arrayops-0.1.4-cp313-cp313-win_amd64.whl (135.9 kB view details)

Uploaded CPython 3.13Windows x86-64

arrayops-0.1.4-cp313-cp313-manylinux_2_28_x86_64.whl (235.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

arrayops-0.1.4-cp313-cp313-manylinux_2_28_aarch64.whl (220.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

arrayops-0.1.4-cp313-cp313-macosx_11_0_arm64.whl (205.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

arrayops-0.1.4-cp313-cp313-macosx_10_12_x86_64.whl (211.5 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

arrayops-0.1.4-cp312-cp312-win_arm64.whl (129.3 kB view details)

Uploaded CPython 3.12Windows ARM64

arrayops-0.1.4-cp312-cp312-win_amd64.whl (135.1 kB view details)

Uploaded CPython 3.12Windows x86-64

arrayops-0.1.4-cp312-cp312-manylinux_2_28_x86_64.whl (235.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

arrayops-0.1.4-cp312-cp312-manylinux_2_28_aarch64.whl (219.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

arrayops-0.1.4-cp312-cp312-macosx_11_0_arm64.whl (204.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

arrayops-0.1.4-cp312-cp312-macosx_10_12_x86_64.whl (210.6 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

arrayops-0.1.4-cp311-cp311-win_arm64.whl (128.3 kB view details)

Uploaded CPython 3.11Windows ARM64

arrayops-0.1.4-cp311-cp311-win_amd64.whl (134.3 kB view details)

Uploaded CPython 3.11Windows x86-64

arrayops-0.1.4-cp311-cp311-manylinux_2_28_x86_64.whl (235.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

arrayops-0.1.4-cp311-cp311-manylinux_2_28_aarch64.whl (220.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

arrayops-0.1.4-cp311-cp311-macosx_11_0_arm64.whl (205.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

arrayops-0.1.4-cp311-cp311-macosx_10_12_x86_64.whl (211.1 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

arrayops-0.1.4-cp310-cp310-win_amd64.whl (134.3 kB view details)

Uploaded CPython 3.10Windows x86-64

arrayops-0.1.4-cp310-cp310-manylinux_2_28_x86_64.whl (235.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

arrayops-0.1.4-cp310-cp310-manylinux_2_28_aarch64.whl (220.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

arrayops-0.1.4-cp310-cp310-macosx_11_0_arm64.whl (205.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

arrayops-0.1.4-cp310-cp310-macosx_10_12_x86_64.whl (211.1 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

arrayops-0.1.4-cp39-cp39-win_amd64.whl (134.3 kB view details)

Uploaded CPython 3.9Windows x86-64

arrayops-0.1.4-cp39-cp39-manylinux_2_28_x86_64.whl (235.3 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

arrayops-0.1.4-cp39-cp39-manylinux_2_28_aarch64.whl (220.3 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

arrayops-0.1.4-cp39-cp39-macosx_11_0_arm64.whl (205.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

arrayops-0.1.4-cp39-cp39-macosx_10_12_x86_64.whl (211.1 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

arrayops-0.1.4-cp38-cp38-win_amd64.whl (134.2 kB view details)

Uploaded CPython 3.8Windows x86-64

arrayops-0.1.4-cp38-cp38-manylinux_2_28_x86_64.whl (235.1 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ x86-64

arrayops-0.1.4-cp38-cp38-manylinux_2_28_aarch64.whl (220.0 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ ARM64

arrayops-0.1.4-cp38-cp38-macosx_11_0_arm64.whl (205.0 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

arrayops-0.1.4-cp38-cp38-macosx_10_12_x86_64.whl (210.9 kB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

Details for the file arrayops-0.1.4.tar.gz.

File metadata

  • Download URL: arrayops-0.1.4.tar.gz
  • Upload date:
  • Size: 52.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for arrayops-0.1.4.tar.gz
Algorithm Hash digest
SHA256 867d9536d05d4617443f1f57e30e71e7e47d0556d395dcbc195521ba04304f7c
MD5 2e0255d1e59fa4e282319b1b9251161e
BLAKE2b-256 8eee2af250f44ea675ffeaa277bccdc03ffcc0407aa6bf7e387df8f97285894e

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp314-cp314-win_arm64.whl.

File metadata

  • Download URL: arrayops-0.1.4-cp314-cp314-win_arm64.whl
  • Upload date:
  • Size: 130.1 kB
  • Tags: CPython 3.14, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for arrayops-0.1.4-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 cad6341ed74e55547f8a44adbdf39109092bfe59e09406c1defff31f77fd95a1
MD5 9a62aa3b01a5d3adc3f6dec6c072bbf3
BLAKE2b-256 9db049bb3d44ff5c015736cd15e973a39d5d4c04af8e807f489c2e8718691a4b

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: arrayops-0.1.4-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 135.9 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for arrayops-0.1.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 deefcec8bf73860a5e7b11ee597e6fbf7c139bc02d008f3cac866a16164fd98b
MD5 7414f3ec74f2be7c6bc90663e25f394d
BLAKE2b-256 36b8e9914439f0f842e52dae04be9ffa5e525da0245eec63ce2b219db18604f0

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c075932404822b9e0496482e84ca72f9a92d0b790123d5cb46d194b5730cf1d5
MD5 bb4e54365c036cf519207b8973964acd
BLAKE2b-256 d4ef47d7b0e59a5d22b9079060e904b9c13fcb099779fc3ed05243f881948fde

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a32d4d953d7846a91f58fa3518ddbb18348cae650ca54214b847c3fb6623847a
MD5 fbd9d714b358acf9eea44583c8e6dcc7
BLAKE2b-256 2a84e9d7c488ea297c13b4d774029e319fc933764d1940b908be47952f8458f1

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f9468eefa55e2ada9f41ff3464e1f6c8c017204f0809f13efd79df2fdf01f885
MD5 ef124ac517e191a3c8746af80e65f0a9
BLAKE2b-256 34610752e1dabf7c61248642755c3b4f9d3bfcf26d801183127c97e3cf5401ae

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4370b648fa49b2d071776a639846d3333391e744cd813bd0b0c25bc8ebb162d0
MD5 2f45664137f251745a3edfb29ed6f67b
BLAKE2b-256 6f6dfda8bc29ffc6903393c59b0f07c7430ca9cbf6abd5817ba5dabe5718be56

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: arrayops-0.1.4-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 130.1 kB
  • Tags: CPython 3.13, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for arrayops-0.1.4-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 4b57d9ad8a41c0aea497276283f08c751d2b61ec6907f16976dfa819f7f4a243
MD5 df702cb3158dce9f7182646b33c9d1da
BLAKE2b-256 630b1fce8873bc1ca1331246387f08cb3705b5f39dbb7a3be6f7f5f434eb81a0

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: arrayops-0.1.4-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 135.9 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for arrayops-0.1.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c1114e397c679e5f6aea12e940bbe77de9a53da0282190427f1688d42e2e1326
MD5 8216a69c94a9b53737bc706149ee4d16
BLAKE2b-256 d67e1fd5b193c1525ebb79c8055c8c47546b156fd95725b9efbf6095cf4e5817

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2c693a020ef9cb2ff93182b0108ff5cc8516dfdfa24fba821182d0868684c3cd
MD5 14bac413cf4c2a0e7e47dc01f51a8c84
BLAKE2b-256 d5bcb3aed30f84fde7f00b416af632860305b7f57398345cbb4a5970f43590cc

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a8f3d4e5ed4f2d7e3062c60222e2f81c43f0f0138ff0b3fd4a161cd839c6294f
MD5 34ec80b6118fd3585091a15b3a56819f
BLAKE2b-256 c0c9a8d5890c464787aac7ba8c50d77ff124430f10bc1e1be4b2c5df2d07c6b6

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c30b4d0f7344296b9c1996ac62339e72701389ded8b74c3ae9e9e2658afb2e1a
MD5 d98a96b9b9da113bcf9d20c5878b011e
BLAKE2b-256 14cb313f0c7648abf8857b1faada71dbb70222d3deb772129717d717d45eede1

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 731326980386b9ce709bc9bafea7d86184741e12fc874f2ee610666cc40a9425
MD5 e52c810f4d14aa54cb2f5793426faa76
BLAKE2b-256 5fdfff9649fc0176f9d64304000f829038ee1c4671e0dd8e38524f9beac36636

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: arrayops-0.1.4-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 129.3 kB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for arrayops-0.1.4-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 af0de3fb3d10b2441cb6b0d3f45e136113fab61c66fd45f69aa1d0f3b94e9982
MD5 1ef9fb410639d35e5c6737ac128a5d6d
BLAKE2b-256 590f104b45aea18c88738910a7f695219a7a29125164e9708c660dd5abe3e0d8

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: arrayops-0.1.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 135.1 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for arrayops-0.1.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0b7690bbaf4897d279f585cf8c02925d790a28c4bb88708fde8374e4c98ecfe6
MD5 12436d64e581aa68b2f0fc1b4b488cb3
BLAKE2b-256 ccdae4ba764b7982d291334685658111fbe3c6ec621123ee735787d93c9e9aca

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1390be206610691a0b11f1c9966f45c07137486cab29ed5b2c2212fe45d71143
MD5 a57a205da26f46c8a9154283bd115f13
BLAKE2b-256 9da2521b9b224c521e7a1b45a2571c41c482862b67ae79a1e3be08f9c87fc84c

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c3c358cc415b2c97fe5a143e6c1c55872755a53025825d00a0fd1945ab051d66
MD5 c7d53934c9b8756ad236207f300483b2
BLAKE2b-256 aaba26ec2b1df14535fd824b9e306b76456b20fd6a73dc71350fc107bbc3e82d

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c472b1210af93d99c015daf4132d44dab8fe1e74f47b443532e3db236264db34
MD5 c8ba17beb4469310012851e33cec5cf1
BLAKE2b-256 b42b781d895e84a7ecc1456dd25d2d3103a2a51f40fcdc240fe93f24e3d13dca

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1d9b3b2030e3e922dd7b387dae8a1a5b147cf72456780b625cde17f29be0d82d
MD5 7b1137c1bed46569ebc3716a56bdc45e
BLAKE2b-256 749e4224bd06769abd9126c74af1c66aef7201e3150181b4c91bedd6fbabed18

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: arrayops-0.1.4-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 128.3 kB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for arrayops-0.1.4-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 960a787c413bebf2e52de3d59cbae9143cc58fbad4e2b45d05791f95f95b50e2
MD5 9b57dd055f4c4a96a24f2b0915f68325
BLAKE2b-256 35af59638bfca80140d49f20f4c39e74a24dc4c2171e2f4cb0cfbe24032f914e

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: arrayops-0.1.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 134.3 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for arrayops-0.1.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 31f813164b85c83d427bea439309f296dd4ffa6e152d58c64226d4aff4d994ee
MD5 1d5a0a277b3acabb6cf70d835d76c74c
BLAKE2b-256 44dedb41f8945f43fb9fc48be86033bf0782400afaceb579df36e5b611f22b7b

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 af0ba0fb1f45b651feaefcbeeb46a773a5713f0550120cc6c6958bc53665ad0c
MD5 7e58f0502db222a6e9c2e1c8156002ea
BLAKE2b-256 55c61bc7d6b536ec51513b9c3094f74239d6e9c441c0dadeea28f7b826bb8ec4

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b7c0c9d62bd956a24e58b8cd733e51643d567f64a68a87f71d3c7b5b8b79ac9f
MD5 ceef0a68a9801b17bbc49db0b08ca7f3
BLAKE2b-256 15b56cf29bc7c6c26109fd19790bff9dd2a8d1fefe2b315c45c4d1a47d0f6146

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a8da1866296a89ba05fd1dfb31d9d6c2144360eef2fade74efa09b07e2c25da3
MD5 25ea32d72b7d03e1e2ccce4adbe3ac02
BLAKE2b-256 e7390b99209babbd50f835b2519289875775ac1db384e838891fd0e728304f13

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 aeb3845c8dd54492617c2ecb32671f4f1604256733d59996293271469fd302ae
MD5 2dc195d98ad517dc3a3b09055327d23b
BLAKE2b-256 9dc64b04510623eaf82533536bff07854f137d8536db068f31d6c710851f6bb2

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: arrayops-0.1.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 134.3 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for arrayops-0.1.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3765c317f714acec2dc8bf1fb7fd1b1bce232ca759e6c45451194aaa9869c0ec
MD5 142e30bc82efb8fbae7b479731d414ab
BLAKE2b-256 f432395d8d9c3c01887c66b1c1e49d1976eb51aee3ac8a130bd1a722e1a030be

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a918eeeecbd31b240d878e886aa5027c5381a33fb272e0ba94b9379130df0b1f
MD5 fa78471f256dc2522ec6a8872df442cd
BLAKE2b-256 22d749c7afcf790cc4ab4391c9ae279bac6d165db9245c942de76fd1bcee3246

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ad1dca73ef0fd67174bba645639952a3e12657908187cf4d4c87989b3b170ccd
MD5 9af941c12e4754e7d47ecc13fb5b4ba8
BLAKE2b-256 8d62b0c1d091b33e9d41ba0c34331fb506d96a720cb746e07c08514ce96e2f17

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cb3088a76959c7bca218e3db7ae7b965f9a20152c6e83e844715ec2dd41c99bd
MD5 370b6d7ba169db50f5292c828aed596e
BLAKE2b-256 71678da4d761f8f8c952c2f0d2d196fcb45a94baee5899729cae5898cfdec0f4

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 be8b60accdd5dfee2f086325ffa196e0f5aa9feb8669cb84dcd2ee66d8e21aa3
MD5 4b3a19ecd2cb68695f26a1a3989be0c1
BLAKE2b-256 7dff33bda78c2c486201557c1d4bfddfe28b326d44625451cc8931a15a2ea84b

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: arrayops-0.1.4-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 134.3 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for arrayops-0.1.4-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 7c5cc68db0e61533fe2307130a8e61554520508fcd835727ddf8bbe671d2fb01
MD5 dddab88641115141466ac990f57bd216
BLAKE2b-256 265123ade5f3179ff78c3dce92e84f616d6643c852ae890af777bdeca3566dea

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ea68bd83d4a71521d2b046ebbb3b801727048b5892e707804da329bfa7fed71d
MD5 fb9f035ed4345748adc23b4ae846c3de
BLAKE2b-256 d9a7c75fd340c555062b8c979d7b03c0ef2970673ec8038bc2e2dd67990a2cda

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e6862187f377c2784319c8013f576cd21adb31c9ad8c062efee1b733472eb0c0
MD5 dc343e387227cc108dfb71e48483d17a
BLAKE2b-256 72a592e71695bf230beec6b94ba4f31060b63cf7717c8f8f9797884e704fd014

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b6c6303a5da05af95d8995756e35ac8621ea94f002cd84c9d46990cc3402ae04
MD5 65568605c7247bad77efe34432cca0a0
BLAKE2b-256 08ea4f9b574afd8fda80667aec83345e0f90d4f370796827341a6fb362a30dfb

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7bd90b530edb915252509d63e52533b1afc66d04ecc364b63a9339fe95ab343d
MD5 eafc0c4cd052d62e30f265ea8d0a0ede
BLAKE2b-256 17199d006b0d0a233468938f664bc57c4ec06d9189d419abf67ddc7176adef3c

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: arrayops-0.1.4-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 134.2 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for arrayops-0.1.4-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 11551c7e5c5da9042bf252bd60a7047a76674351aa67fa64fd61014172b8d8fe
MD5 cdcb7ef247d9a510eb0f503663725a92
BLAKE2b-256 6a60ad786c62aaf058ffe1f24ba5583db423562e8603cf7ffe973dd1b0d393ae

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp38-cp38-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dcc64a64d3d1bce94dcd2521a412253f2079cf3189ebb3e82a557f9644808308
MD5 c0e2ae9659ad19751b171584846dbb6f
BLAKE2b-256 ab93619e29257b6c112a36020a9c191a34cf60ec8b7b58dabc0574e570be810a

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp38-cp38-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp38-cp38-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d31f12a781778877cb4a0eadbd25f3b5b05510f689b043eaa2490e441bcc70b5
MD5 801d3f3c61aeab9cbcd7271847fe2e74
BLAKE2b-256 6831ebb81a03f7f25da4b16ff469e52373afe7144ce8d8bf4dde828849b69af6

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 35dbd9d2c6682609e4ac440a12a44bfefdda2ece3d6b94fefc343eb7a518cdd6
MD5 7e347adcc4e061ebdb9665fc33e21b4f
BLAKE2b-256 d404274e8393dc52af8af7102b6a1ef90e9e8090f2c01dc530738769c25ec4c9

See more details on using hashes here.

File details

Details for the file arrayops-0.1.4-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for arrayops-0.1.4-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fd4bf37a008ea95ad0c35d770e7e075148f014f0104bcfd9eee1be83558c937f
MD5 48119a477f2f31329c4aa09a171ab206
BLAKE2b-256 7c36a12436b20e2a22644f23a0f54bef7866841b643350d876b95b66b90a68a7

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