Skip to main content

High-performance autoincremented integer-valued mappings.

Project description

automap

latest versionlatest release datebuild statusissues


automap is a Python package containing high-performance autoincremented integer-valued mappings.

To install, just run pip install automap.

Examples

automap objects are sort of like "inverse sequences". They come in two variants:

FrozenAutoMap

>>> from automap import FrozenAutoMap

FrozenAutoMap objects are immutable. They can be constructed from any iterable of hashable, unique keys.

>>> a = FrozenAutoMap("AAA")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 'A'
>>> a = FrozenAutoMap("ABC")
>>> a
automap.FrozenAutoMap(['A', 'B', 'C'])

The values are integers, incrementing according to the order of the original keys:

>>> a["A"]
0
>>> a["C"]
2
>>> a["X"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'X'

The full Mapping interface is provided:

>>> [*a.keys()]
['A', 'B', 'C']
>>> [*a.values()]
[0, 1, 2]
>>> [*a.items()]
[('A', 0), ('B', 1), ('C', 2)]
>>> a.get("X", 42)
42
>>> "B" in a
True
>>> [*a]
['A', 'B', 'C']

They may also be combined with each other using the | operator:

>>> b = FrozenAutoMap(range(5))
>>> c = FrozenAutoMap(range(5, 10))
>>> b | c
automap.FrozenAutoMap([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b |= c  # Note that b is reassigned, not mutated!
>>> b
automap.FrozenAutoMap([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

AutoMap

>>> from automap import AutoMap

Unlike FrozenAutoMap objects, AutoMap objects can grow; new keys may be added, but existing ones may not be deleted or changed.

>>> d = AutoMap("ABC")
>>> d
automap.AutoMap(['A', 'B', 'C'])
>>> d |= "DEF"  # Here, d *is* mutated!
>>> d
automap.AutoMap(['A', 'B', 'C', 'D', 'E', 'F'])

They also have add and update methods for adding new keys:

>>> e = AutoMap(["I", "II", "III"])
>>> e.add("IV")
>>> e
automap.AutoMap(['I', 'II', 'III', 'IV'])
>>> e.update(["V", "VI", "VII"])
>>> e
automap.AutoMap(['I', 'II', 'III', 'IV', 'V', 'VI', 'VII'])

Performance

Tests show string-keyed AutoMap objects being created 70% faster and accessed 5% faster than the equivalent dict construction, on average. They also tend to take up the same amount of memory. You can run invoke performance from this repository to see the comparison on your machine.

More details on the design can be found in automap.c.

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

automap-0.6.2.tar.gz (11.0 kB view hashes)

Uploaded Source

Built Distributions

automap-0.6.2-cp311-cp311-win_amd64.whl (12.4 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

automap-0.6.2-cp311-cp311-win32.whl (11.4 kB view hashes)

Uploaded CPython 3.11 Windows x86

automap-0.6.2-cp311-cp311-musllinux_1_1_x86_64.whl (41.9 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

automap-0.6.2-cp311-cp311-musllinux_1_1_i686.whl (39.6 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

automap-0.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.3 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

automap-0.6.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (35.0 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

automap-0.6.2-cp311-cp311-macosx_11_0_arm64.whl (11.5 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

automap-0.6.2-cp311-cp311-macosx_10_9_x86_64.whl (11.5 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

automap-0.6.2-cp311-cp311-macosx_10_9_universal2.whl (19.7 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

automap-0.6.2-cp310-cp310-win_amd64.whl (12.4 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

automap-0.6.2-cp310-cp310-win32.whl (11.4 kB view hashes)

Uploaded CPython 3.10 Windows x86

automap-0.6.2-cp310-cp310-musllinux_1_1_x86_64.whl (39.0 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

automap-0.6.2-cp310-cp310-musllinux_1_1_i686.whl (36.9 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

automap-0.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (35.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

automap-0.6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (32.8 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

automap-0.6.2-cp310-cp310-macosx_11_0_arm64.whl (11.5 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

automap-0.6.2-cp310-cp310-macosx_10_9_x86_64.whl (11.5 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

automap-0.6.2-cp310-cp310-macosx_10_9_universal2.whl (19.7 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

automap-0.6.2-cp39-cp39-win_amd64.whl (12.5 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

automap-0.6.2-cp39-cp39-win32.whl (11.4 kB view hashes)

Uploaded CPython 3.9 Windows x86

automap-0.6.2-cp39-cp39-musllinux_1_1_x86_64.whl (38.1 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

automap-0.6.2-cp39-cp39-musllinux_1_1_i686.whl (36.1 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

automap-0.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

automap-0.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (32.2 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

automap-0.6.2-cp39-cp39-macosx_11_0_arm64.whl (11.5 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

automap-0.6.2-cp39-cp39-macosx_10_9_x86_64.whl (11.5 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

automap-0.6.2-cp39-cp39-macosx_10_9_universal2.whl (19.7 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

automap-0.6.2-cp38-cp38-win_amd64.whl (12.5 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

automap-0.6.2-cp38-cp38-win32.whl (11.5 kB view hashes)

Uploaded CPython 3.8 Windows x86

automap-0.6.2-cp38-cp38-musllinux_1_1_x86_64.whl (39.6 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

automap-0.6.2-cp38-cp38-musllinux_1_1_i686.whl (37.3 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

automap-0.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (35.8 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

automap-0.6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (33.4 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

automap-0.6.2-cp38-cp38-macosx_11_0_arm64.whl (11.3 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

automap-0.6.2-cp38-cp38-macosx_10_9_x86_64.whl (11.2 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

automap-0.6.2-cp38-cp38-macosx_10_9_universal2.whl (19.2 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

automap-0.6.2-cp37-cp37m-win_amd64.whl (12.4 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

automap-0.6.2-cp37-cp37m-win32.whl (11.4 kB view hashes)

Uploaded CPython 3.7m Windows x86

automap-0.6.2-cp37-cp37m-musllinux_1_1_x86_64.whl (37.4 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

automap-0.6.2-cp37-cp37m-musllinux_1_1_i686.whl (35.7 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

automap-0.6.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (32.2 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

automap-0.6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (30.5 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

automap-0.6.2-cp37-cp37m-macosx_10_9_x86_64.whl (11.1 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page