Manages n-dimensional volumes of data
Project description
NValues
NValues is a Python package for working with n-dimensional volumes of data.
Full documentation is online at nvalues.dev.
Installation
NValues requires Python 3.9 or later and can be installed via PyPI:
pip install nvalues
The Volume class
The Volume class represents a strongly-typed n-dimensional volume of values.
Construction
You must pass two generic types on construction:
- Tuple of any number of key types
- Value type
from nvalues import Volume
# A spreadsheet-like grid of floats with string x and integer y keys:
volume = Volume[tuple[str, int], float]()
# A cube of booleans with integer x, string y and float z keys:
volume = Volume[tuple[int, str, float], bool]()
Default values
By default, volumes will raise nvalues.exceptions.NKeyError if you try to read a key that doesn't exist.
To return a default value instead, you can either:
-
Pass the default value as the
defaultargument:from nvalues import Volume volume = Volume[tuple[int, int], str](default="default") print(volume[0, 0]) # "default"
-
Pass a function that generates a default value as the
default_makerargument:from nvalues import Volume def make_default(key: tuple[int, int]) -> str: return f"default for {key}" volume = Volume[tuple[int, int], str](default_maker=make_default) print(volume[0, 0]) # "default for (0, 0)"
Default values generated at runtime will be added to the volume, while static defaults will not.
Reading, setting and deleting values
Values are read, set and deleted via their keys.
from nvalues import Volume
volume = Volume[tuple[str, int], float](default=0)
volume["A", 0] = 1.2
print(volume["A", 0])
# 1.2
del volume["A", 0]
print(volume["A", 0])
# 0
Key validation
A Volume can be configured to reject invalid keys if a validator is passed in the initialiser or set on the key_validator property.
If set, the key validator is a function that examines the key and raises any exception if it's invalid. Any attempts to access an invalid key will result in InvalidKey being raised.
from nvalues import Volume
from nvalues.exceptions import InvalidKey
max_x = 3
max_y = 4
def check_key_range(key: tuple[int, int]) -> None:
x = key[0]
if x < 0 or x > max_x:
raise ValueError(f"x {x} must be 0-{max_x} inclusive")
y = key[1]
if y < 0 or y > max_y:
raise ValueError(f"y {y} must be 0-{max_y} inclusive")
volume = Volume[tuple[int, int], str](key_validator=check_key_range)
try:
volume[0, 17] = "foo"
except InvalidKey as ex:
print(ex)
# Key (0, 17) failed validation (y 17 must be 0-4 inclusive)
Iterating values
Native iteration yields the key and value for each item in the volume.
from nvalues import Volume
volume = Volume[tuple[int, int], str]()
volume[0, 0] = "zero-zero"
volume[4, 0] = "four-zero"
volume[0, 4] = "zero-four"
for item in volume:
print(f"Found {item.value} at {item.key}")
# Found zero-zero at (0, 0)
# Found zero-four at (0, 4)
# Found four-zero at (4, 0)
Other classes
The Line, Grid, Cube, Tesseract and Penteract classes wrap and simplify the Volume class if you don't need more than five dimensions.
Support
Please raise bugs, feature requests and ask questions at cariad/nvalues/issues.
The Project
NValues is © 2022 Cariad Eccleston and released under the MIT License at cariad/nvalues.
The Author
Hello! 👋 I'm Cariad Eccleston and I'm a freelance backend and infrastructure engineer in the United Kingdom. You can find me at cariad.earth, github/cariad, linkedin/cariad and on Mastodon at @cariad@tech.lgbt.
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 Distributions
Built Distribution
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 nvalues-1.0.0b6-py3-none-any.whl.
File metadata
- Download URL: nvalues-1.0.0b6-py3-none-any.whl
- Upload date:
- Size: 12.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3f466697488c9c453102a92f4fa0e1adea4877ffedf7650f2fc5dc73d831028
|
|
| MD5 |
b98ec9cfd3c8831b2a930b7873de3147
|
|
| BLAKE2b-256 |
1d64090e9891d768c06d6f0197e8c0883334ecbea1e54adff39988a5b0f5f341
|