Source code for finhjb.interface.parameter
from typing import TYPE_CHECKING, Self, TypeVar
from flax import struct
if TYPE_CHECKING:
from finhjb.structure._boundary import ImmutableBoundary
[docs]
class AbstractParameter(struct.PyTreeNode):
"""
Abstract base class for model parameters.
This class serves as a base for immutable,
hashable parameter containers required by JAX (e.g. for use with static_argnames).
Subclasses must be decorated with `@struct.dataclass(frozen=True)`
and should declare all model parameters as class attributes with default values.
Examples
--------
::
from functools import cached_property
from flax import struct
class Parameter(AbstractParameter):
r: float
g: float
gamma: float
...
apply_func: Callable = struct.field(pytree_node=False, repr=False)
@cached_property
def vFB(self) -> float:
return self.r + self.gamma * self.g / (self.gamma - 1)
params = Parameter(r=0.06, g=0.03, gamma=0.25, ...)
Notes
-----
- Do not add mutable fields or methods that modify instance state.
- Derived-parameter methods may be added in subclasses,
but they must be decorated with `@cached_property` to ensure immutability.
"""
[docs]
def update(self, boundary: "ImmutableBoundary") -> Self:
"""
Update the parameter object with the boundary object.
Parameters
----------
boundary : ImmutableBoundary
The boundary object to update the parameter object with.
Returns
-------
Self
The updated parameter object.
"""
return self
P = TypeVar("P", bound=AbstractParameter)