Skip to main content

No project description provided

Project description

Expedantic

pypi Python 3.10

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.

    1. 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")
    
    1. Install the yaml language extension.

    2. 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.

    1. Enjoy! description autocompletion
  • 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
    
  • !include directive 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.yaml is 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

expedantic-0.2.1.tar.gz (81.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

expedantic-0.2.1-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file expedantic-0.2.1.tar.gz.

File metadata

  • Download URL: expedantic-0.2.1.tar.gz
  • Upload date:
  • Size: 81.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.10.13

File hashes

Hashes for expedantic-0.2.1.tar.gz
Algorithm Hash digest
SHA256 2096fcfca48e9aebf7154b537bade838a8ca7a2235dd7073c9b03e1858f27015
MD5 98761d3c12e5932eac45e121a90c28de
BLAKE2b-256 4dbc0bdeb33b61b5cf09fdb2fc1bf8d2e18f1f1b31664060a70387601e86216a

See more details on using hashes here.

File details

Details for the file expedantic-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: expedantic-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 21.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.10.13

File hashes

Hashes for expedantic-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 94fe2606be0ca2783bf2d3f9bd054c1cd492bb47c43f252ffa17b87865c52183
MD5 13e6ad0c49acc8e5507e6b05cd2cbffd
BLAKE2b-256 6a07c266f39a5338d0dfbc2c3f284ee7b9d18b3863d2249055f9fc397d58e998

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page