Skip to main content

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 by Quantlane <https://quantlane.com>_, a systematic trading firm. We design, build and run our own stock trading platform.

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

fastenum-1.1.1.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

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

fastenum-1.1.1-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

Details for the file fastenum-1.1.1.tar.gz.

File metadata

  • Download URL: fastenum-1.1.1.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for fastenum-1.1.1.tar.gz
Algorithm Hash digest
SHA256 1386d445ec03d4c33b80d4300bd044f44d357ea8ad0d347c9e0ed01afbe11a49
MD5 c9caac5f1d987f006698c5be7dffd9fb
BLAKE2b-256 4e8825ea6231fe54e3f13fc8c495b5d63bf05df812cff10fd1b25ac03d502d84

See more details on using hashes here.

File details

Details for the file fastenum-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: fastenum-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 13.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for fastenum-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a7d0b5a50f64300bcf97acdb012c17d7d7f509bc096faa7e58422091fa593e3a
MD5 2e822f4ea9f7ed363b07408e6ae46f8b
BLAKE2b-256 7524746d273c959a6cc086ec3246829cd9804e7337bd6b98447dfc30e1a2db30

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