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
type
field based on the class name, enabling type-safe configuration systems with automatic serialization and validation. Subclasses must specify their type using thetype
parameter 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
type
field 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
type
field addition and populationValidation and serialization of the fields
Designed to work with
UnionConfig
for 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
UnionConfig
Create discriminated unions of StructConfig subclasses
module
Decorator for creating modular dataclass components