zea.config¶
Config module for managing configuration settings.
This module provides the Config class for managing configuration settings,
with support for loading from YAML files, HuggingFace Hub, and dot notation access.
Features¶
Dot notation access to dictionary keys.
Recursive conversion of nested dictionaries/lists to Config objects.
Attribute access logging and suggestion of similar attribute names.
Freezing/unfreezing to prevent/allow new attributes.
Serialization to YAML/JSON.
Integration with Hugging Face Hub.
Example Usage¶
>>> from zea import Config
>>> # Load from YAML
>>> config = Config.from_path("../configs/config_echonet.yaml")
>>> # Load from HuggingFace Hub
>>> config = Config.from_path("hf://zeahub/configs/config_picmus_rf.yaml")
>>> # Access attributes with dot notation
>>> print(config.data.dtype)
raw_data
>>> # Update recursively
>>> config.update_recursive({"data": {"dtype": "raw_data"}})
>>> # Save to YAML
>>> config.to_yaml("new_config.yaml")
Functions
|
Check a config given dictionary |
Classes
|
Config class. |
- class zea.config.Config(dictionary=None, __parent__=None, **kwargs)[source]¶
Bases:
dictConfig class.
This Config class extends a normal dictionary with dot notation access.
- Features:
from_path method to load a config from a yaml file (local or huggingface hub).
save_to_yaml method to save the config to a yaml file.
copy method to create a deep copy of the config.
Normal dictionary methods such as keys, values, items, pop, update, get.
Propose similar attribute names if a non-existing attribute is accessed.
Freeze the config object to prevent new attributes from being added.
Load config object from yaml file.
Logs all accessed attributes such that you can check if all attributes have been accessed.
- We took inspiration from the following sources:
But this implementation is superior :)
Initializes a Config object.
- Parameters:
dictionary (dict, optional) – A dictionary containing key-value pairs to initialize the Config object. Defaults to None.
**kwargs – Additional key-value pairs to initialize the Config object. Will override values in the dictionary if they have the same key.
- as_dict(func_on_leaves=None)[source]¶
Convert the config to a normal dictionary (recursively).
- Parameters:
func_on_leaves (callable, optional) – Function to apply to each leaf node. The function should take three arguments: the config object, the key, and the value. You can change the key and value inside the function. Defaults to None.
- copy()[source]¶
Deep copy the config object.
This is useful when you want to modify the config object without changing the original. Does not preserve the access history or frozen state!
- freeze()[source]¶
Freeze config object.
This means that no new attributes can be added. Only existing attributes can be modified.
- classmethod from_hf(repo_id, path, **kwargs)[source]¶
Load config object from huggingface hub.
- Parameters:
repo_id (str) – huggingface hub repo id. For example: “zeahub/configs”
path (str) – path to the config file in the repo. For example: “train_config.yaml”
**kwargs – additional arguments to pass to the hf_hub_download function. For example, use repo_type=”dataset” to download from a dataset repo, or revision=”main” to download from a specific branch.
- Returns:
config object.
- Return type:
Example
>>> from zea import Config >>> config = Config.from_hf( ... "zeahub/configs", "config_camus.yaml", repo_type="dataset" ... )
- classmethod from_path(path, loader=<class 'yaml.loader.FullLoader'>, **kwargs)[source]¶
Load config object from a file path.
- Parameters:
path (str or Path) – The path to the config file. Can be a string or a Path object. Additionally can be a string with the prefix ‘hf://’, in which case it will be resolved to a huggingface path.
loader (yaml.Loader, optional) – YAML loader used after the file is resolved.
**kwargs – Additional Hugging Face Hub arguments for
hf://paths, for examplerepo_typeorrevision.
- Returns:
config object.
- Return type:
- serialize()[source]¶
Return a dict of this config object with all Path objects converted to strings.
- setdefault(key, default=None)[source]¶
Returns the value of the specified key. If the key does not exist: insert the key, with the specified value
- update_recursive(dictionary=None, **kwargs)[source]¶
Recursively update the config with the provided dictionary and keyword arguments.
If a key corresponds to another Config object, the update_recursive method is called recursively on that object. This makes it possible to update nested Config objects without replacing them.
If a value is a list and the corresponding config value is also a list, each element is updated recursively if it is a Config, otherwise replaced.
Example
>>> from zea import Config >>> config = Config({"a": 1, "b": {"c": 2, "d": 3}}) >>> config.update_recursive({"a": 4, "b": {"c": 5}}) >>> # Notice how "d" is kept and only "c" is updated. >>> print(config) <Config {'a': 4, 'b': {'c': 5, 'd': 3}}>
- Parameters:
dictionary (
dict|None) – Dictionary to update from.**kwargs – Additional key-value pairs to update.