No project description provided
Project description
Expedantic
Installation
pip install expedantic
Basic Usage
from expedantic import ConfigBase
# Define a config model
class MyConfig(ConfigBase):
device: str = 'cuda:0'
learning_rate: float = 1.0e-3
num_epochs: int = 100
# Save and load from yaml files
my_config = MyConfig()
my_config.save_as_yaml("config.yaml")
my_config = MyConfig.load_from_yaml("config.yaml")
# For a given function or class,
def learn(device: str, learning_rate: float, num_epochs: int):
...
# Consume the config by getting kwargs automatically.
learn(**my_config.compatible_args(learn))
# Or pass manually
learn(my_config.device, my_config.learning_rate, my_config.num_epochs)
Examples
Find some examples here.
Features
-
Type validation using
pydantic. -
JSON schema generation for autocompletion on yaml files. You can facilitate efficient yaml editing on IDEs such as VS Code.
For the VS Code usage, the following steps enable the autocompletion on yaml files for configuration models.
- Generate a schema.
from pathlib import Path from typing import Annotated, Literal from expedantic import ConfigBase, Field class Config(ConfigBase): algorithm: Literal["TRPO", "PPO", "SAC", "TD3"] = "TRPO" target_kl: Annotated[ float, Field( title="Target Kullback-Leibler divergence between updates.", description="Should be small for stability. Values like 0.01, 0.05.", gt=0.0, ), ] = 0.01 config = Config() Path("configs").mkdir(exist_ok=True) config.save_as_yaml("configs/config.yaml") Config.generate_schema("schemas/config_schema.json")
-
Install the yaml language extension.
-
Associating the schema
.vscode/settings.json yaml.schemas: { "schemas/config_schema.json": "configs/config.yaml", }
Check the further rules for association in the description of the extension.
- Enjoy!
-
Integrated argument parser with supporting nested key access:
# run.py class MyInnerConfig(ConfigBase): inner_key: str = "inner_value" class MyConfig(ConfigBase): inner_config: MyInnerConfig = MyInnerConfig() outer_key: int = 10 my_config = MyConfig.parse_args()
python run.py --inner_config.inner_key "another inner value" --outer_key 20
-
!includedirective support for yaml files:# base.yaml learning_rate: 3.0e-5 num_epochs: 10 device: cpu
# derived.yaml <<: !include base.yaml device: cuda extra: True
The content of
derived.yamlis equivalent to the following:learning_rate: 3.0e-5 num_epochs: 10 device: cuda extra: True
-
Mutually exclusive configuration groups:
from pydantic import ValidationError class Config(ConfigBase): _mutually_exclusive_sets = [{"make_algorithm_A_obsolete", "use_algorithm_A"}] make_algorithm_A_obsolete: bool = True use_algorithm_A: bool = False try: config = Config(make_algorithm_A_obsolete=True, use_algorithm_A=True) except ValidationError as e: print(e) """ 1 validation error for Config Value error, Mutual exclusivity has broken. (set: {'make_algorithm_A_obsolete', 'use_algorithm_A'}) [type=value_error, input_value={'make_algorithm_A_obsolete': True, 'use_algorithm_A': True}, input_type=dict] """
Project details
Release history Release notifications | RSS feed
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 expedantic-0.2.2.tar.gz.
File metadata
- Download URL: expedantic-0.2.2.tar.gz
- Upload date:
- Size: 82.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.10.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8170abe284659ec0a376157c1b28d47b7e867e406992274231b50d8b987ca25
|
|
| MD5 |
4c11d6ab64b69dba004729fa967e3eb0
|
|
| BLAKE2b-256 |
561ba8baefc65753a6f75648929812aac6494c98e9bc491778d245f48d8946f8
|
File details
Details for the file expedantic-0.2.2-py3-none-any.whl.
File metadata
- Download URL: expedantic-0.2.2-py3-none-any.whl
- Upload date:
- Size: 22.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.10.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c312ce0cdb51a97acb53697343e41af03a609a405c66ec300f05f6b8b4a9627
|
|
| MD5 |
f31c06837810dcbca943805b3e862853
|
|
| BLAKE2b-256 |
c72aeb40ff6e023ae8c90687879c47ccf00cde2fb8261c054d9564514d632bad
|