Skip to main content

Collection of tools to extend multidimensional array operations

Project description

ndtools

Release Python Downloads Tests

Collection of tools to extend multidimensional array operations

Installation

pip install ndtools

Usage

Comparison

ndtools provides total_equality and total_ordering class decorators that fill in missing multidimensional equality and ordering methods, respectively. total_equality will fill in missing __ne__ from user-defined __eq__ or missing __eq__ from user-defined __ne__. The following example implements an object that checks whether each array element is even or not:

import numpy as np
from ndtools import total_equality

@total_equality
class Even:
    def __eq__(self, array):
        return array % 2 == 0

Even() == np.arange(3)  # -> array([True, False, True])
Even() != np.arange(3)  # -> array([False, True, False])

It also supports a more intuitive notation with the array written on the left-hand side and the object on the right-hand side:

np.arange(3) == Even()  # -> array([True, False, True])
np.arange(3) != Even()  # -> array([False, True, False])

total_ordering will fill in missing ordering operators (__ge__, __gt__, __le__, __lt__). As with functools.total_ordering, at least one of them, and __eq__ or __ne__ must be user-defined. The following example implements a range object that defines equivalence with a certain range:

import numpy as np
from dataclasses import dataclass
from ndtools import total_ordering

@dataclass
@total_ordering
class Range:
    lower: float
    upper: float

    def __eq__(self, array):
        return (array >= self.lower) & (array < self.upper)

    def __ge__(self, array):
        return array < self.upper

Range(1, 2) == np.arange(3)  # -> array([False, True, False])
Range(1, 2) < np.arange(3)   # -> array([False, False, True])
Range(1, 2) > np.arange(3)   # -> array([True, False, False])

It also supports a more intuitive notation with the array written on the left-hand side and the object on the right-hand side:

np.arange(3) == Range(1, 2) # -> array([False, True, False])
np.arange(3) < Range(1, 2)  # -> array([True, False, False])
np.arange(3) > Range(1, 2)  # -> array([False, False, True])

[!TIP] Mix-in versions of them, TotalEquality and TotalOrdering, are also available.

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

ndtools-0.2.0.tar.gz (52.1 kB view details)

Uploaded Source

Built Distribution

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

ndtools-0.2.0-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ndtools-0.2.0.tar.gz
  • Upload date:
  • Size: 52.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.6.14

File hashes

Hashes for ndtools-0.2.0.tar.gz
Algorithm Hash digest
SHA256 eb5856a8261eb28ce70c5ae625bc048f0e8869f126cfa343a722e6bf269692ba
MD5 0e17b1eaaebcecc2b5f7448ef6988f3e
BLAKE2b-256 3d58bf2688a20ed8a172bdb1fd7fe8948f5d0e7b6692eeb5c8411e5b34804e45

See more details on using hashes here.

File details

Details for the file ndtools-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: ndtools-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 6.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.6.14

File hashes

Hashes for ndtools-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b1a7dc68d3a47c653eb9c43fa60650266fc998fd08d182f9a8a21de782c84183
MD5 c351d6dcc4a45e41645b6e26db2523b4
BLAKE2b-256 2772237524b00e822eea080d6780823d863f4325cbaf570ce34f21e80bbd4a64

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