archimedes.tree.StructConfig¶

class archimedes.tree.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 the type 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 population

  • Validation 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

__init__(**data: Any) None¶

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

Methods

__init__(**data)

Create a new model by parsing and validating input data from keyword arguments.

build()

construct([_fields_set])

copy(*[, include, exclude, update, deep])

Returns a copy of the model.

dict(*[, include, exclude, by_alias, ...])

from_orm(obj)

json(*[, include, exclude, by_alias, ...])

model_construct([_fields_set])

Creates a new instance of the Model class with validated data.

model_copy(*[, update, deep])

!!! abstract "Usage Documentation"

model_dump(*[, mode, include, exclude, ...])

!!! abstract "Usage Documentation"

model_dump_json(*[, indent, include, ...])

!!! abstract "Usage Documentation"

model_json_schema([by_alias, ref_template, ...])

Generates a JSON schema for a model class.

model_parametrized_name(params)

Compute the class name for parametrizations of generic classes.

model_post_init(context, /)

Override this method to perform additional initialization after __init__ and model_construct.

model_rebuild(*[, force, raise_errors, ...])

Try to rebuild the pydantic-core schema for the model.

model_validate(obj, *[, strict, ...])

Validate a pydantic model instance.

model_validate_json(json_data, *[, strict, ...])

!!! abstract "Usage Documentation"

model_validate_strings(obj, *[, strict, ...])

Validate the given object with string data against the Pydantic model.

parse_file(path, *[, content_type, ...])

parse_obj(obj)

parse_raw(b, *[, content_type, encoding, ...])

schema([by_alias, ref_template])

schema_json(*[, by_alias, ref_template])

update_forward_refs(**localns)

validate(value)

Attributes

model_computed_fields

model_config

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_extra

Get extra fields set during validation.

model_fields

model_fields_set

Returns the set of fields that have been explicitly set on this model instance.