🔧Values & Overrides
This page explains how to provide overrides to a configuration function using dotted keys and nested dictionaries, and which one takes precedence when both are provided.
Basics
A configuration function receives an HP object and returns anything (dict, dataclass, model, etc.). Parameters are named explicitly using name=...:
from hypster import HP, instantiate
def child(hp: HP):
x = hp.int(10, name="x")
y = hp.int(20, name="y")
return {"x": x, "y": y}
def parent(hp: HP):
return hp.nest(child, name="child")Dotted keys
Use dotted keys to override nested parameters:
instantiate(parent, values={"child.x": 15})
# => {"x": 15, "y": 20}Nested dicts
Provide a nested dict under the nested scope name:
Precedence: nested dict wins
If you provide both dotted keys and a nested dict for the same scope, the nested dict wins.
Deeply nested
Dotted keys can target deeper levels when there is no nested dict override at that level. You can mix and match as needed, keeping in mind that a nested dict for a scope overrides dotted keys for that scope.
Unknown and unreachable parameters
Unknown or unreachable values (values for parameters on a branch that wasn’t taken) are handled by
on_unknownininstantiate:on_unknown="warn"(default): issue a warningon_unknown="raise": raise an erroron_unknown="ignore": silently ignore
Hypster will include helpful suggestions when a name looks like a typo.
Last updated
Was this helpful?