Skip to main content

nemoize

Simple Python Memoizer decorator for classes, functions, and methods.

Installation

nemoize is available on PyPi

python3 -m pip install nemoize

Or you can install manually via the built distribution (wheel)/source dist from PyPi or github.

How to Use

Import

from nemoize import memoize

Then use the @memoize decorator on various entities as seen below

Using on a Class

@memoize
class Test:
    def __init__(self, value):
        self._value = value

    @property
    def value(self):
        return self._value

Using on a function

@memoize
def test_func():
    return "hoot"

Using on an instance method

class Owl:
    def __init__(self):
        self.food = 1337
        pass

    @memoize(max_size)
    def eat(self, num):
        self.food -= num

Configuration

There are also various configuration parameters to memoize():

  • @memoize(max_size=13) : Max number of entries to keep in the cache:
  • @memoize(cache_exceptions=True) : Also cache exceptions, so any raised Exceptions will be the exact same Exception instance:
  • @memoize(max_size=13, cache_exceptions=True) : Together
  • @memoize(arg_hash_function=str) : Changes the hash function on arg and each keyword-arg to use the str() function, which can make lists "hashable"

Testing

The unit tests in test/unit/test_memoize.py run through various use cases of using the @memoize annotation on classes, functions, and instance methods.

Benchmarking

There is a benchmarking utility under benchmark/ that is used for benchmarking nemoize performance against other options and non-memoized scenarios.

Example numbers:

Benchmark test for Memoized vs Non-memoized classes with [1000] computations in their__init__() methods for [1000000] iterations
Non-memoized class creation + empty method call average time (ms): 0.01550699806213379
Memoized class creation + empty method call average time (ms): 0.0012589995861053468

Benchmark test for @memoize, non-memoized, a @simplified_memoize, and @functools.lru_cache comparison usingfunction calculating fibonacci sum for [100] fib numbers, for [10000000] iterations
@simplified_memoize fib average time (ms): 0.0001555999994277954
@memoize fib average time (ms): 4.4699978828430175e-05
@memoize(cache_exceptions=True) (to avoid delegation to functools.lru_cache) fib average time (ms): 0.00034309999942779544
@functools.lru_cache fib average time (ms): 4.440000057220459e-05

Metadata

Release files for nemoize 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nemoize 0.1.0
File Size Uploaded
nemoize-0.1.0.tar.gz 5.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nemoize 0.1.0
File Interpreter ABI Platform
nemoize-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 11.0 kB

Release files / nemoize-0.1.0.tar.gz

Download URL nemoize-0.1.0.tar.gz
Size 5.5 kB
Tags Source
SHA-256 checksum
How to use checksums
4f3a6380e34d84f2bc96819ddec84d82fe13c81d91605323676e2207e6f25a4b
BLAKE2b-256 checksum
How to use checksums
7fa15a16d6bdca8d6ce894c95d121add51c4fa2c87450793811fda9b9b51a644
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.9.12

Release files / nemoize-0.1.0-py3-none-any.whl

Download URL nemoize-0.1.0-py3-none-any.whl
Size 5.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3aa1a02a456120f9bbad39a8859bfc1877a9bc0c271cb3def526ab84b78cf5cf
BLAKE2b-256 checksum
How to use checksums
52a27b2c7e4483bc4f9971c005de0a2742555c1e3a7955c648b3e604499f3fff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.9.12

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page