Library for creating a dependency graph of cached properties
Project description
UseState
Wrap your class's instance methods with @use_state and @use_lazy_generated_state to create a dependency graph of cached properties that only regenerate when their dependencies change.
Uses Python's data descriptors to proxy (to the graph) access of properties. Graph nodes are stored on the instances of classes that use the decorators, for sane garbage collection sake.
Installing
Available on PyPI as UseState
$ pip install UseState
Examples
See examples folder
#!/usr/bin/env python3
import math
from UseState import use_state, use_lazy_generated_state
class Cylinder:
def __init__(self, radius: float, height: float) -> None:
self.radius = radius
self.height = height
@use_state()
def radius(self) -> float:
# Default radius
return 0.0
@use_state()
def height(self) -> float:
# Default height
return 0.0
@use_lazy_generated_state({"radius"})
def area(self) -> float:
print("Calculating area")
return self.radius * self.radius * math.pi
@use_lazy_generated_state({"area", "height"})
def volume(self) -> float:
print("Calculating volume")
return self.area * self.height
def main() -> None:
c = Cylinder(4.0, 8.0)
print(c.area)
# Calculating area
# 50.26548245743669
print(c.volume)
# Calculating volume
# 402.1238596594935
c.radius = 4.0 # doesn't cause invalidation because value is same
print(c.volume)
# 402.1238596594935
c.radius = 1.0 # invalidates area, which invalidates volume
print(c.volume)
# Calculating area
# Calculating volume
# 25.132741228718345
print(c.area) # cached by previous call to volume
# 3.141592653589793
print(c.volume)
# 25.132741228718345
if __name__ == "__main__":
main()
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file usestate-0.1.0.tar.gz.
File metadata
- Download URL: usestate-0.1.0.tar.gz
- Upload date:
- Size: 16.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7259d04c9acf37728514a48d22c5d5a26f54fc23a58101aad70688982bbf246a
|
|
| MD5 |
8d5b22f154efede96cf74e48c2575600
|
|
| BLAKE2b-256 |
d474c130842471b86f698f85eafe60f46beea9dc4a3ae070b300d00fa56f91e0
|
File details
Details for the file usestate-0.1.0-py3-none-any.whl.
File metadata
- Download URL: usestate-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3dee3d6bc5ac39e727c3725aae54808a5217b108855797682c29667599da526b
|
|
| MD5 |
cec1bf51e2195d01c76a6d319cfb2a92
|
|
| BLAKE2b-256 |
40a062e4f8a91284319845f29899da27f6ce63ee89ec427191f7f551cad87e97
|