Rust-backed acceleration for Python array.array
Project description
arrayops
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:
intfor integer arraysfloatfor float arrays
Raises:
TypeError: If input is not anarray.arrayor 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 anarray.arrayor 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 typefn(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 anarray.arrayorfnis not callableTypeError: 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 anarray.arrayorfnis not callableTypeError: 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 typepredicate(callable): Function that takes one element and returnsbool
Returns:
array.array: New array with filtered elements (same type as input)
Raises:
TypeError: If input is not anarray.arrayorpredicateis not callableTypeError: If predicate doesn't returnbool
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 typefn(callable): Binary function that takes (accumulator, element) and returns a valueinitial(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 anarray.arrayorfnis not callableValueError: 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:
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass (100% coverage maintained)
- Run code quality checks (
ruff format,ruff check,mypy) - 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
867d9536d05d4617443f1f57e30e71e7e47d0556d395dcbc195521ba04304f7c
|
|
| MD5 |
2e0255d1e59fa4e282319b1b9251161e
|
|
| BLAKE2b-256 |
8eee2af250f44ea675ffeaa277bccdc03ffcc0407aa6bf7e387df8f97285894e
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cad6341ed74e55547f8a44adbdf39109092bfe59e09406c1defff31f77fd95a1
|
|
| MD5 |
9a62aa3b01a5d3adc3f6dec6c072bbf3
|
|
| BLAKE2b-256 |
9db049bb3d44ff5c015736cd15e973a39d5d4c04af8e807f489c2e8718691a4b
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
deefcec8bf73860a5e7b11ee597e6fbf7c139bc02d008f3cac866a16164fd98b
|
|
| MD5 |
7414f3ec74f2be7c6bc90663e25f394d
|
|
| BLAKE2b-256 |
36b8e9914439f0f842e52dae04be9ffa5e525da0245eec63ce2b219db18604f0
|
File details
Details for the file arrayops-0.1.4-cp314-cp314-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp314-cp314-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 235.7 kB
- Tags: CPython 3.14, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c075932404822b9e0496482e84ca72f9a92d0b790123d5cb46d194b5730cf1d5
|
|
| MD5 |
bb4e54365c036cf519207b8973964acd
|
|
| BLAKE2b-256 |
d4ef47d7b0e59a5d22b9079060e904b9c13fcb099779fc3ed05243f881948fde
|
File details
Details for the file arrayops-0.1.4-cp314-cp314-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp314-cp314-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 220.8 kB
- Tags: CPython 3.14, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a32d4d953d7846a91f58fa3518ddbb18348cae650ca54214b847c3fb6623847a
|
|
| MD5 |
fbd9d714b358acf9eea44583c8e6dcc7
|
|
| BLAKE2b-256 |
2a84e9d7c488ea297c13b4d774029e319fc933764d1940b908be47952f8458f1
|
File details
Details for the file arrayops-0.1.4-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 205.5 kB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9468eefa55e2ada9f41ff3464e1f6c8c017204f0809f13efd79df2fdf01f885
|
|
| MD5 |
ef124ac517e191a3c8746af80e65f0a9
|
|
| BLAKE2b-256 |
34610752e1dabf7c61248642755c3b4f9d3bfcf26d801183127c97e3cf5401ae
|
File details
Details for the file arrayops-0.1.4-cp314-cp314-macosx_10_12_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp314-cp314-macosx_10_12_x86_64.whl
- Upload date:
- Size: 211.5 kB
- Tags: CPython 3.14, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4370b648fa49b2d071776a639846d3333391e744cd813bd0b0c25bc8ebb162d0
|
|
| MD5 |
2f45664137f251745a3edfb29ed6f67b
|
|
| BLAKE2b-256 |
6f6dfda8bc29ffc6903393c59b0f07c7430ca9cbf6abd5817ba5dabe5718be56
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b57d9ad8a41c0aea497276283f08c751d2b61ec6907f16976dfa819f7f4a243
|
|
| MD5 |
df702cb3158dce9f7182646b33c9d1da
|
|
| BLAKE2b-256 |
630b1fce8873bc1ca1331246387f08cb3705b5f39dbb7a3be6f7f5f434eb81a0
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1114e397c679e5f6aea12e940bbe77de9a53da0282190427f1688d42e2e1326
|
|
| MD5 |
8216a69c94a9b53737bc706149ee4d16
|
|
| BLAKE2b-256 |
d67e1fd5b193c1525ebb79c8055c8c47546b156fd95725b9efbf6095cf4e5817
|
File details
Details for the file arrayops-0.1.4-cp313-cp313-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp313-cp313-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 235.7 kB
- Tags: CPython 3.13, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c693a020ef9cb2ff93182b0108ff5cc8516dfdfa24fba821182d0868684c3cd
|
|
| MD5 |
14bac413cf4c2a0e7e47dc01f51a8c84
|
|
| BLAKE2b-256 |
d5bcb3aed30f84fde7f00b416af632860305b7f57398345cbb4a5970f43590cc
|
File details
Details for the file arrayops-0.1.4-cp313-cp313-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp313-cp313-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 220.8 kB
- Tags: CPython 3.13, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8f3d4e5ed4f2d7e3062c60222e2f81c43f0f0138ff0b3fd4a161cd839c6294f
|
|
| MD5 |
34ec80b6118fd3585091a15b3a56819f
|
|
| BLAKE2b-256 |
c0c9a8d5890c464787aac7ba8c50d77ff124430f10bc1e1be4b2c5df2d07c6b6
|
File details
Details for the file arrayops-0.1.4-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 205.5 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c30b4d0f7344296b9c1996ac62339e72701389ded8b74c3ae9e9e2658afb2e1a
|
|
| MD5 |
d98a96b9b9da113bcf9d20c5878b011e
|
|
| BLAKE2b-256 |
14cb313f0c7648abf8857b1faada71dbb70222d3deb772129717d717d45eede1
|
File details
Details for the file arrayops-0.1.4-cp313-cp313-macosx_10_12_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp313-cp313-macosx_10_12_x86_64.whl
- Upload date:
- Size: 211.5 kB
- Tags: CPython 3.13, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
731326980386b9ce709bc9bafea7d86184741e12fc874f2ee610666cc40a9425
|
|
| MD5 |
e52c810f4d14aa54cb2f5793426faa76
|
|
| BLAKE2b-256 |
5fdfff9649fc0176f9d64304000f829038ee1c4671e0dd8e38524f9beac36636
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af0de3fb3d10b2441cb6b0d3f45e136113fab61c66fd45f69aa1d0f3b94e9982
|
|
| MD5 |
1ef9fb410639d35e5c6737ac128a5d6d
|
|
| BLAKE2b-256 |
590f104b45aea18c88738910a7f695219a7a29125164e9708c660dd5abe3e0d8
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b7690bbaf4897d279f585cf8c02925d790a28c4bb88708fde8374e4c98ecfe6
|
|
| MD5 |
12436d64e581aa68b2f0fc1b4b488cb3
|
|
| BLAKE2b-256 |
ccdae4ba764b7982d291334685658111fbe3c6ec621123ee735787d93c9e9aca
|
File details
Details for the file arrayops-0.1.4-cp312-cp312-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp312-cp312-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 235.3 kB
- Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1390be206610691a0b11f1c9966f45c07137486cab29ed5b2c2212fe45d71143
|
|
| MD5 |
a57a205da26f46c8a9154283bd115f13
|
|
| BLAKE2b-256 |
9da2521b9b224c521e7a1b45a2571c41c482862b67ae79a1e3be08f9c87fc84c
|
File details
Details for the file arrayops-0.1.4-cp312-cp312-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp312-cp312-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 219.9 kB
- Tags: CPython 3.12, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3c358cc415b2c97fe5a143e6c1c55872755a53025825d00a0fd1945ab051d66
|
|
| MD5 |
c7d53934c9b8756ad236207f300483b2
|
|
| BLAKE2b-256 |
aaba26ec2b1df14535fd824b9e306b76456b20fd6a73dc71350fc107bbc3e82d
|
File details
Details for the file arrayops-0.1.4-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 204.9 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c472b1210af93d99c015daf4132d44dab8fe1e74f47b443532e3db236264db34
|
|
| MD5 |
c8ba17beb4469310012851e33cec5cf1
|
|
| BLAKE2b-256 |
b42b781d895e84a7ecc1456dd25d2d3103a2a51f40fcdc240fe93f24e3d13dca
|
File details
Details for the file arrayops-0.1.4-cp312-cp312-macosx_10_12_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp312-cp312-macosx_10_12_x86_64.whl
- Upload date:
- Size: 210.6 kB
- Tags: CPython 3.12, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d9b3b2030e3e922dd7b387dae8a1a5b147cf72456780b625cde17f29be0d82d
|
|
| MD5 |
7b1137c1bed46569ebc3716a56bdc45e
|
|
| BLAKE2b-256 |
749e4224bd06769abd9126c74af1c66aef7201e3150181b4c91bedd6fbabed18
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
960a787c413bebf2e52de3d59cbae9143cc58fbad4e2b45d05791f95f95b50e2
|
|
| MD5 |
9b57dd055f4c4a96a24f2b0915f68325
|
|
| BLAKE2b-256 |
35af59638bfca80140d49f20f4c39e74a24dc4c2171e2f4cb0cfbe24032f914e
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31f813164b85c83d427bea439309f296dd4ffa6e152d58c64226d4aff4d994ee
|
|
| MD5 |
1d5a0a277b3acabb6cf70d835d76c74c
|
|
| BLAKE2b-256 |
44dedb41f8945f43fb9fc48be86033bf0782400afaceb579df36e5b611f22b7b
|
File details
Details for the file arrayops-0.1.4-cp311-cp311-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp311-cp311-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 235.3 kB
- Tags: CPython 3.11, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af0ba0fb1f45b651feaefcbeeb46a773a5713f0550120cc6c6958bc53665ad0c
|
|
| MD5 |
7e58f0502db222a6e9c2e1c8156002ea
|
|
| BLAKE2b-256 |
55c61bc7d6b536ec51513b9c3094f74239d6e9c441c0dadeea28f7b826bb8ec4
|
File details
Details for the file arrayops-0.1.4-cp311-cp311-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp311-cp311-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 220.3 kB
- Tags: CPython 3.11, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7c0c9d62bd956a24e58b8cd733e51643d567f64a68a87f71d3c7b5b8b79ac9f
|
|
| MD5 |
ceef0a68a9801b17bbc49db0b08ca7f3
|
|
| BLAKE2b-256 |
15b56cf29bc7c6c26109fd19790bff9dd2a8d1fefe2b315c45c4d1a47d0f6146
|
File details
Details for the file arrayops-0.1.4-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 205.3 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8da1866296a89ba05fd1dfb31d9d6c2144360eef2fade74efa09b07e2c25da3
|
|
| MD5 |
25ea32d72b7d03e1e2ccce4adbe3ac02
|
|
| BLAKE2b-256 |
e7390b99209babbd50f835b2519289875775ac1db384e838891fd0e728304f13
|
File details
Details for the file arrayops-0.1.4-cp311-cp311-macosx_10_12_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp311-cp311-macosx_10_12_x86_64.whl
- Upload date:
- Size: 211.1 kB
- Tags: CPython 3.11, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aeb3845c8dd54492617c2ecb32671f4f1604256733d59996293271469fd302ae
|
|
| MD5 |
2dc195d98ad517dc3a3b09055327d23b
|
|
| BLAKE2b-256 |
9dc64b04510623eaf82533536bff07854f137d8536db068f31d6c710851f6bb2
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3765c317f714acec2dc8bf1fb7fd1b1bce232ca759e6c45451194aaa9869c0ec
|
|
| MD5 |
142e30bc82efb8fbae7b479731d414ab
|
|
| BLAKE2b-256 |
f432395d8d9c3c01887c66b1c1e49d1976eb51aee3ac8a130bd1a722e1a030be
|
File details
Details for the file arrayops-0.1.4-cp310-cp310-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp310-cp310-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 235.3 kB
- Tags: CPython 3.10, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a918eeeecbd31b240d878e886aa5027c5381a33fb272e0ba94b9379130df0b1f
|
|
| MD5 |
fa78471f256dc2522ec6a8872df442cd
|
|
| BLAKE2b-256 |
22d749c7afcf790cc4ab4391c9ae279bac6d165db9245c942de76fd1bcee3246
|
File details
Details for the file arrayops-0.1.4-cp310-cp310-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp310-cp310-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 220.3 kB
- Tags: CPython 3.10, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad1dca73ef0fd67174bba645639952a3e12657908187cf4d4c87989b3b170ccd
|
|
| MD5 |
9af941c12e4754e7d47ecc13fb5b4ba8
|
|
| BLAKE2b-256 |
8d62b0c1d091b33e9d41ba0c34331fb506d96a720cb746e07c08514ce96e2f17
|
File details
Details for the file arrayops-0.1.4-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 205.3 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb3088a76959c7bca218e3db7ae7b965f9a20152c6e83e844715ec2dd41c99bd
|
|
| MD5 |
370b6d7ba169db50f5292c828aed596e
|
|
| BLAKE2b-256 |
71678da4d761f8f8c952c2f0d2d196fcb45a94baee5899729cae5898cfdec0f4
|
File details
Details for the file arrayops-0.1.4-cp310-cp310-macosx_10_12_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp310-cp310-macosx_10_12_x86_64.whl
- Upload date:
- Size: 211.1 kB
- Tags: CPython 3.10, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be8b60accdd5dfee2f086325ffa196e0f5aa9feb8669cb84dcd2ee66d8e21aa3
|
|
| MD5 |
4b3a19ecd2cb68695f26a1a3989be0c1
|
|
| BLAKE2b-256 |
7dff33bda78c2c486201557c1d4bfddfe28b326d44625451cc8931a15a2ea84b
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c5cc68db0e61533fe2307130a8e61554520508fcd835727ddf8bbe671d2fb01
|
|
| MD5 |
dddab88641115141466ac990f57bd216
|
|
| BLAKE2b-256 |
265123ade5f3179ff78c3dce92e84f616d6643c852ae890af777bdeca3566dea
|
File details
Details for the file arrayops-0.1.4-cp39-cp39-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp39-cp39-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 235.3 kB
- Tags: CPython 3.9, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea68bd83d4a71521d2b046ebbb3b801727048b5892e707804da329bfa7fed71d
|
|
| MD5 |
fb9f035ed4345748adc23b4ae846c3de
|
|
| BLAKE2b-256 |
d9a7c75fd340c555062b8c979d7b03c0ef2970673ec8038bc2e2dd67990a2cda
|
File details
Details for the file arrayops-0.1.4-cp39-cp39-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp39-cp39-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 220.3 kB
- Tags: CPython 3.9, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6862187f377c2784319c8013f576cd21adb31c9ad8c062efee1b733472eb0c0
|
|
| MD5 |
dc343e387227cc108dfb71e48483d17a
|
|
| BLAKE2b-256 |
72a592e71695bf230beec6b94ba4f31060b63cf7717c8f8f9797884e704fd014
|
File details
Details for the file arrayops-0.1.4-cp39-cp39-macosx_11_0_arm64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp39-cp39-macosx_11_0_arm64.whl
- Upload date:
- Size: 205.3 kB
- Tags: CPython 3.9, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6c6303a5da05af95d8995756e35ac8621ea94f002cd84c9d46990cc3402ae04
|
|
| MD5 |
65568605c7247bad77efe34432cca0a0
|
|
| BLAKE2b-256 |
08ea4f9b574afd8fda80667aec83345e0f90d4f370796827341a6fb362a30dfb
|
File details
Details for the file arrayops-0.1.4-cp39-cp39-macosx_10_12_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp39-cp39-macosx_10_12_x86_64.whl
- Upload date:
- Size: 211.1 kB
- Tags: CPython 3.9, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7bd90b530edb915252509d63e52533b1afc66d04ecc364b63a9339fe95ab343d
|
|
| MD5 |
eafc0c4cd052d62e30f265ea8d0a0ede
|
|
| BLAKE2b-256 |
17199d006b0d0a233468938f664bc57c4ec06d9189d419abf67ddc7176adef3c
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
11551c7e5c5da9042bf252bd60a7047a76674351aa67fa64fd61014172b8d8fe
|
|
| MD5 |
cdcb7ef247d9a510eb0f503663725a92
|
|
| BLAKE2b-256 |
6a60ad786c62aaf058ffe1f24ba5583db423562e8603cf7ffe973dd1b0d393ae
|
File details
Details for the file arrayops-0.1.4-cp38-cp38-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp38-cp38-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 235.1 kB
- Tags: CPython 3.8, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dcc64a64d3d1bce94dcd2521a412253f2079cf3189ebb3e82a557f9644808308
|
|
| MD5 |
c0e2ae9659ad19751b171584846dbb6f
|
|
| BLAKE2b-256 |
ab93619e29257b6c112a36020a9c191a34cf60ec8b7b58dabc0574e570be810a
|
File details
Details for the file arrayops-0.1.4-cp38-cp38-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp38-cp38-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 220.0 kB
- Tags: CPython 3.8, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d31f12a781778877cb4a0eadbd25f3b5b05510f689b043eaa2490e441bcc70b5
|
|
| MD5 |
801d3f3c61aeab9cbcd7271847fe2e74
|
|
| BLAKE2b-256 |
6831ebb81a03f7f25da4b16ff469e52373afe7144ce8d8bf4dde828849b69af6
|
File details
Details for the file arrayops-0.1.4-cp38-cp38-macosx_11_0_arm64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp38-cp38-macosx_11_0_arm64.whl
- Upload date:
- Size: 205.0 kB
- Tags: CPython 3.8, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35dbd9d2c6682609e4ac440a12a44bfefdda2ece3d6b94fefc343eb7a518cdd6
|
|
| MD5 |
7e347adcc4e061ebdb9665fc33e21b4f
|
|
| BLAKE2b-256 |
d404274e8393dc52af8af7102b6a1ef90e9e8090f2c01dc530738769c25ec4c9
|
File details
Details for the file arrayops-0.1.4-cp38-cp38-macosx_10_12_x86_64.whl.
File metadata
- Download URL: arrayops-0.1.4-cp38-cp38-macosx_10_12_x86_64.whl
- Upload date:
- Size: 210.9 kB
- Tags: CPython 3.8, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd4bf37a008ea95ad0c35d770e7e075148f014f0104bcfd9eee1be83558c937f
|
|
| MD5 |
48119a477f2f31329c4aa09a171ab206
|
|
| BLAKE2b-256 |
7c36a12436b20e2a22644f23a0f54bef7866841b643350d876b95b66b90a68a7
|