Skip to main content

Expressive array utilities with an optional C backend.

Project description

smartarr

smartarr is an expressive array utility layer for Python with a clean smart(arr) API and an optional C backend for fast core operations.

Why it exists

The goal is simple:

  • one readable interface for lists, tuples, and NumPy arrays
  • fast common operations when the C extension is available
  • chainable transformations that still feel like Python
from smartarr import smart

value = smart([1, 2, 3, 4, 5]).rotate(2).reverse().middle()
print(value)  # 1

Install

Local install from this project:

python -m pip install .

Editable install for development:

python -m pip install -e .

Optional NumPy support:

python -m pip install ".[numpy]"

If a compiler is available, smartarr builds its C extension automatically. If not, installation still succeeds and falls back to the pure Python backend.

Quick start

from smartarr import smart

arr = smart([1, 2, 3, 4])

print(arr.first())                 # 1
print(arr.last())                  # 4
print(arr.middle())                # 3
print(arr.middle(mode="left"))     # 2
print(arr.middle(mode="avg"))      # 2.5
print(arr.size())                  # 4
print(len(arr))                    # 4
print(arr.rotate(1).to_list())     # [4, 1, 2, 3]
print(arr.reverse().to_list())     # [4, 3, 2, 1]
print(arr.chunk(2).to_list())      # [[1, 2], [3, 4]]
print(arr.window(2).to_list())     # [[1, 2], [2, 3], [3, 4]]
print(arr.peaks().to_list())       # local maxima values
print(arr.peaks(mode="index").to_list())  # local maxima indexes
print(arr.duplicates().to_list())  # unique duplicated values
print(arr.duplicates(mode="all").to_list())  # every repeated occurrence after the first

Design notes

  • middle() defaults to the right-middle element for even-length arrays, matching arr[len(arr) // 2].
  • SmartArray operations are non-mutating by default. Methods like rotate() and reverse() return a new wrapper and leave the original array unchanged.
  • Prefer len(arr) or arr.size() for length checks. arr.len() remains as a compatibility alias.
  • Structural methods return a new SmartArray, so chaining works naturally.
  • Terminal methods return a final value, such as an element, a number, or a dictionary.
  • Flat transformations preserve the original adapter where practical. Shape-changing operations return list-shaped data by default.
  • random() returns one element when n is omitted, samples without replacement when replace=False, and samples with replacement when replace=True. A seed makes output deterministic.
  • peaks() returns local maxima values by default. Use mode="index" to return their positions.
  • duplicates() returns each duplicated value once by default. Use mode="all" to return every repeated occurrence after the first.
  • flatten() performs a deep recursive flatten across nested iterables, except string-like values such as str, bytes, and bytearray.
  • flatten() follows the iteration order of the source containers. Ordered iterables stay ordered; unordered iterables such as set keep their native iteration behavior.
  • reshape() validates that the requested shape exactly matches the flattened element count.
  • window() returns an empty result when the requested window size is larger than the array length.
  • reduce() requires either a non-empty array or an explicit initial value.
  • frequency() returns counts in first-seen insertion order on Python 3.7+.

Performance Notes

  • The current C backend accelerates core access and array operations such as first, last, middle, rotate, reverse, find, count, contains, chunk, window, and is_sorted.
  • Higher-level methods such as map, filter, reduce, sum, mean, median, peaks, unique, duplicates, frequency, flatten, and reshape currently run in Python.
  • This means the API is already hybrid, but the biggest performance wins will come from moving heavier algorithms into the C layer over time.

Supported input types

  • list
  • tuple
  • NumPy ndarray when NumPy is installed
  • general iterables such as range

Current feature coverage

V1

  • first
  • last
  • middle
  • rotate
  • reverse
  • len
  • is_empty

V2

  • chunk
  • window
  • random
  • find
  • count
  • contains
  • is_sorted
  • sorted

V3

  • map
  • filter
  • reduce
  • sum
  • mean
  • median
  • min
  • max
  • peaks
  • unique
  • duplicates
  • frequency
  • flatten
  • reshape

Development

Run tests:

python -m unittest discover -s tests -v

License

MIT

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

smartarr-0.1.3.tar.gz (14.3 kB view details)

Uploaded Source

Built Distribution

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

smartarr-0.1.3-cp311-cp311-win_amd64.whl (19.6 kB view details)

Uploaded CPython 3.11Windows x86-64

File details

Details for the file smartarr-0.1.3.tar.gz.

File metadata

  • Download URL: smartarr-0.1.3.tar.gz
  • Upload date:
  • Size: 14.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.12

File hashes

Hashes for smartarr-0.1.3.tar.gz
Algorithm Hash digest
SHA256 19eb4cc05c699630c0f893a3b78ddad5246eb18282b6c5b28d0e91bd5509f97d
MD5 071f1406046e03ba6a999d5ff17051f5
BLAKE2b-256 bcf0505defc28685660c30eb78f7a07051f2038fd0e1290cc2361490516cdf4d

See more details on using hashes here.

File details

Details for the file smartarr-0.1.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: smartarr-0.1.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 19.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.12

File hashes

Hashes for smartarr-0.1.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 943b153b165b7e859d34798abd69c97718164aead52b4429df476b6eb56e5dcd
MD5 45ccfb5a4a074905dd9f3689cd07e070
BLAKE2b-256 33abd307e49ee2e5cdddd8d2b1db3422e03a3047b8dffa8f4336b4a2e31cfb39

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