Faster drop-in replacement of Python's enum
Project description
fastenum
A roughly 3x faster drop-in replacement of Python's enum
.
Why
Python's enum
type is a useful building block for creating semantic types and constants in your programs.
The problem is, if you're doing millions and millions of enum lookups (even simple expressions like Color.ORANGE
) it's a little bit slow.
fastenum
is a stripped-down enum implementation that's up to 3.5x faster than the standard library implementation. At Quantlane we use it in production code as a drop-in replacement. Read more, including benchmarks, on our blog: A 3x faster enum type for Python.
Installation
fastenum
is available on PyPI and you can install it with:
pip install fastenum
or
poetry add fastenum
How to use it
Simply use fastenum.Enum
instead of enum.Enum
:
import fastenum
class Color(fastenum.Enum):
RED = 0
BLUE = 1
GREEN = 2
assert isinstance(Color.RED, Color)
assert Color.RED is Color['RED']
assert Color.BLUE != 1
assert Color.GREEN.value == 2
def is_red(c: Color) -> bool:
return c is Color.RED
There is also a mypy plugin that you'll want to enable in mypy.ini
to help mypy understand fastenum
just like it understands enum
:
[mypy]
plugins = fastenum.mypy_plugin:plugin
Tradeoffs and disadvantages
There is no support for automatic values, unique value checks, aliases, custom __init__
implementations on members, IntEnum
, Flag
, or the functional API. If you require any of these features it's probably best to just use enum
.
fastenum
's mypy plugin may cause issues with your mypy cache (see above).
Running tests & benchmarks
poetry install
poetry run pytest
Contributing
Pull requests are welcome!
We will accept pull requests adding missing functionality provided they do not impact base fastenum
performance (it's best to verify that with benchmarks).
fastenum
was made byQuantlane <https://quantlane.com>
_, a systematic trading firm. We design, build and run our own stock trading platform.
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 Distribution
File details
Details for the file fastenum-1.1.2.tar.gz
.
File metadata
- Download URL: fastenum-1.1.2.tar.gz
- Upload date:
- Size: 12.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.10.12 Linux/5.15.0-72-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bd915b797469aa8cf0d96668298e943c3a2bf79df6e6fc8f73e318d43b258dcf |
|
MD5 | e2506481052223c346acea4b09af3723 |
|
BLAKE2b-256 | 2030ed068bbe6861195bc7795dd9c483506b5bc3e1767c72d1225ef239d80019 |
File details
Details for the file fastenum-1.1.2-py3-none-any.whl
.
File metadata
- Download URL: fastenum-1.1.2-py3-none-any.whl
- Upload date:
- Size: 13.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.10.12 Linux/5.15.0-72-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca8eb9e282d7d53d7c097a571945661e9e9a6b3772759f7c0bb865699b1671ef |
|
MD5 | 513cafd954934b87721764af17183461 |
|
BLAKE2b-256 | 2756757d864bb64fa38cfc0e47a249534df85b42e99624c03c0316ddb83d1d72 |