Wraps a function to create a new scope for harvested values.
oryx.core.nest(
f, *, scope: str
)
Used in the notebooks
Harvested values live in one dynamic name scope (for a particular tag),
and in strict mode, values with the same name cannot be collected or injected
more than once. nest(f, scope=[name])
will take all tagged values in f
and
put them into a nested dictionary with key [name]
. This enables having
duplicate names in one namespace provided they are in different scopes. This
is different from using a separate tag to namespace, as it enables creating
nested/hierarchical structure within a single tag's namespace.
Example:
def foo(x):
return sow(x, tag='test', name='x')
harvest(foo, tag='test')({}, 1.) # (1., {'x': 1.})
harvest(nest(foo, scope='a'), tag='test')({}, 1.) # (1., {'a': {'x': 1.} })
Args |
f
|
a function to be transformed
|
scope
|
a string that will act as the parent scope of all values tagged in
f .
|
Returns |
A semantically identical function to f , but when harvested, uses nested
values according to the input scope.
|