Skip to main content

Patch for builtin enum module to achieve best performance

Project description

fastenum

Based on python/cpython#17669 and python/cpython#16483

Patch for stdlib enum that makes it fast.

How fast?

  • ~10x faster name/value access
  • ~6x faster access to enum members
  • ~2x faster values positive check
  • ~3x faster values negative check
  • ~3x faster iteration
  • ~100x faster new Flags and IntFlags creation for Python 3.8 and below

Wow this is fast! How do I use it?

First, install it from PyPi using pip

pip install f-enum

or using poetry

poetry add f-enum

Then enable the patch just by calling fastenum.enable() once at the start of your programm:

import fastenum

fastenum.enable()

You don't need to re-apply patch across different modules: once it's enabled, it'll work everywhere.

What's changed?

fastenum is designed to give effortless boost for all enums from stdlib. That means that none of optimizations should break existing code, thus requiring no changes other than installing and activating the library.

Here are summary of internal changes:

  • Optimized Enum.__new__
  • Remove EnumMeta.__getattr__
  • Store Enum.name and .value in members __dict__ for faster access
  • Replace Enum._member_names_ with ._unique_member_map_ for faster lookups and iteration (old arg still remains)
  • Replace _EmumMeta._member_names and ._last_values with .members mapping (old args still remain)
  • Add support for direct setting and getting class attrs on DynamicClassAttribute without need to use slow __getattr__
  • Various minor improvements

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

f-enum-0.2.0.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

f_enum-0.2.0-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

Details for the file f-enum-0.2.0.tar.gz.

File metadata

  • Download URL: f-enum-0.2.0.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.1 Darwin/21.5.0

File hashes

Hashes for f-enum-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3df8fdfad2dc7079a0ed6b0ec2b369b9f2dda358ef08c037a6a3e3c17e9a49e7
MD5 ba03d058a4cdd54878b7fc13ce4a9cb9
BLAKE2b-256 73af8b421877bd10736d631a8795b6b90c56f6710b41f528e89bf1150b728a96

See more details on using hashes here.

File details

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

File metadata

  • Download URL: f_enum-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.1 Darwin/21.5.0

File hashes

Hashes for f_enum-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 88eb831d75534c132eaea621f9e969d23a02d37130ebb5dec16a50f434aa20ea
MD5 4e5e6f696a363d4480f66c47fa430743
BLAKE2b-256 37b2173d953c5ddf217c82a9dcf90d04447bdeadf1d4ef476918b1c784df84fa

See more details on using hashes here.

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