Exhaustively enumerate a combinatorial space represented by a function
Project description
exhaust
A Python library to exhaustively enumerate a combinatorial space represented by a function.
The API is modelled after Python's random
module and should feel familiar. An additional convenience function maybe()
was added to cover a common case.
If you're missing a function and the corresponding space can be enumerated feel free to open an issue. Any functions that generate real-valued distributions cannot be supported.
Example
import exhaust
def generate_character(state: exhaust.State):
eyes = []
for _ in range(state.randint(1, 3)):
eyes.append({
'color': state.choice(['brown', 'blue']),
'glowing': state.maybe()
})
size = 'giant' if len(eyes) == 1 else 'normal'
accessories = []
if len(eyes) == 2:
if state.maybe():
accessories.append('hat')
if state.maybe():
accessories.append('ring')
character = {
'size': size,
'eyes': eyes,
'accessories': accessories
}
return character
# iterates over a space of 132 characters
for character in exhaust.space(generate_character):
print(character)
As you can see, navigating the space works fine within loops as well.
Each time a function from the State
object is called (like maybe()
), you can think of it as forking the current path into multiple branches, leading to a tree that gets explored. While exploring, the user-defined function is called for each path of the tree.
See the examples/ folder for further examples that can be run on the command line.
See the API Documentation for all available State
functions.
Installation
pip install exhaust
Development
Requires pip >= 21.3
Editable install:
pip install -e .
Run tests:
pip install -r requirements-test.txt
pytest
Build docs:
pip install -r requirements-docs.txt
sphinx-build -b html docs dist-docs
Build wheel:
pip install build
python -m build --wheel
Acknowledgments
This package is inspired by KerasTuner's method of defining hyperparameter search spaces.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file exhaust-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: exhaust-1.1.0-py3-none-any.whl
- Upload date:
- Size: 5.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aca1b82be71edcecc1c538ab9f908b78cfbaa5f40520734a7440db0d48017de2 |
|
MD5 | 075061eb51c616202716d1aaad401f0c |
|
BLAKE2b-256 | 4a4ced16b3a2e4124755210f9c908b083d3bb69259d5e135bb1d1085528839d1 |