quantlab.core.component.component#

quantlab.core.component.component(*, many=False, **field_kwargs)[source]#

Declare a config dataclass field as holding a component, or several.

Use it in place of dataclasses.field on a config dataclass. With many=False the field holds one component (or None); with many=True it holds a list or tuple of components, or a dict mapping names to components. config_to_dict and Component.from_config walk exactly the fields declared this way.

Parameters:
manybool, default False

Whether the field holds a collection of components rather than one.

**field_kwargs

Passed to dataclasses.field (default, default_factory, kw_only …).

Returns:
dataclasses.Field

The field, its metadata marking it as a component field.

Examples

>>> import dataclasses
>>> @dataclasses.dataclass(frozen=True)
... class PairConfig:
...     first: object = component()
...     rest: tuple = component(many=True, default=())
>>> component_fields(PairConfig)
{'first': False, 'rest': True}