archimedes.StructConfig¶
- class archimedes.StructConfig¶
Base class for creating configuration objects with automatic type discrimination.
This class extends Pydantic’s BaseModel to automatically add a
typefield based on the class name, enabling type-safe configuration systems with automatic serialization and validation. Subclasses must specify their type using thetypeparameter in the class definition.- Parameters:
type (str) – The type identifier for this configuration class, specified in the class definition using
StructConfig, type="typename".
Notes
The
typefield is automatically added to the class and set to the value specified in the class definition. This enables automatic discrimination when working with unions of different configuration types.Subclasses are expected to implement a
build()method that constructs the corresponding module instance based on the configuration parameters. This may include any “offline” validation, preprocessing, or data loading that should occur once at initialization time rather than at runtime.Key features:
Automatic
typefield addition and populationValidation and serialization of the fields
Designed to work with
UnionConfigfor type discrimination
Examples
>>> from typing import Protocol >>> import archimedes as arc >>> >>> class GravityModel(Protocol): ... def __call__(self, position: np.ndarray) -> np.ndarray: ... ... >>> >>> @arc.struct >>> class ConstantGravity: ... g0: float ... ... def __call__(self, position: np.ndarray) -> np.ndarray: ... return np.array([0, 0, self.g0]) >>> >>> class ConstantGravityConfig(arc.StructConfig, type="constant"): ... g0: float = 9.81 ... ... def build(self) -> ConstantGravity: ... return ConstantGravity(self.g0) >>> >>> ConstantGravityConfig(g0=9.81).build() ConstantGravity(g0=9.81) >>> >>> # Another configuration type >>> class PointGravityConfig(arc.StructConfig, type="point"): ... mu: float = 3.986e14 # m^3/s^2 ... RE: float = 6.3781e6 # m ... lat: float = 0.0 # deg ... lon: float = 0.0 # deg ... ... def build(self) -> PointGravity: ... # Implementation omitted for brevity ... pass >>> >>> # Create a discriminated union of configuration types >>> GravityConfig = arc.UnionConfig[ConstantGravityConfig, PointGravityConfig]
See also
UnionConfigCreate discriminated unions of StructConfig subclasses
moduleDecorator for creating modular dataclass components