relation¶
fusdb.relation
Acausal relation object and @relation decorator.
RelationSolveError ¶
Bases: ValueError
Raised when a relation cannot be solved or verified.
RelationUnderdeterminedError ¶
Bases: RelationSolveError
Raised when too few variable values are supplied to a standalone relation.
RelationVerificationError ¶
Bases: RelationSolveError
Raised when a solved value does not verify against the canonical relation.
Relation
dataclass
¶
One equation or inequality over FusDB variables.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
User-facing relation name. |
required |
func
|
Callable[..., Any]
|
Python implementation. |
required |
input_names
|
tuple[str, ...]
|
Function input variable names. |
required |
outputs
|
tuple[str, ...]
|
Declared output variable names. |
()
|
op
|
str
|
Comparison operator for outputless numeric residuals. |
'=='
|
rhs
|
Any
|
Right side for outputless numeric residuals. |
0.0
|
tags
|
tuple[str, ...]
|
Descriptive/applicability tags. |
()
|
enforce
|
bool
|
Whether this relation is solver-enforced. |
True
|
constraints
|
Any
|
Relation-local constraints or applicability guards. |
None
|
source_kind
|
str
|
Diagnostic source category. |
'relation'
|
source_name
|
str
|
Diagnostic source name. |
''
|
constant_names
|
tuple[str, ...]
|
Function parameters with defaults. |
()
|
dependency
|
str
|
Dependency hint used for graph reports. |
'dense'
|
function_name
|
str
|
Decorated Python function name. |
''
|
__call__ ¶
__call__(**kwargs: Any) -> Any
Use the relation with strict standalone acausal semantics.
Let n be the number of relation variables, i.e. declared inputs plus
declared outputs. Constants with defaults are not counted.
- If all
nvariables are supplied, returnTrue/Falsefrom canonical verification. - If exactly
n - 1variables are supplied, compute the single missing variable and return its value. - If fewer than
n - 1variables are supplied, raise a clear underdetermined error.
The returned value from an inverse solve is accepted only after the canonical relation and local relation constraints verify within the registry tolerances.
evaluate ¶
evaluate(namespace: Mapping[str, Any]) -> Any
Evaluate the implementation function in its declared direction.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
namespace
|
Mapping[str, Any]
|
Mapping of variable names to values. |
required |
Returns:
| Type | Description |
|---|---|
Any
|
Raw function return value. |
output_map ¶
output_map(result: Any) -> dict[str, Any]
Map a raw implementation result to declared outputs.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
result
|
Any
|
Raw function result. |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Output name/value mapping. |
comparisons ¶
comparisons(namespace: Mapping[str, Any]) -> list[tuple[Any, str, Any, str | None]]
Return comparison tuples (lhs, op, rhs, output_name).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
namespace
|
Mapping[str, Any]
|
Variable values. |
required |
Returns:
| Type | Description |
|---|---|
list[tuple[Any, str, Any, str | None]]
|
Comparison tuples used by verification and residual compilation. |
solve ¶
solve(values: Mapping[str, Any] | None = None) -> Any
Evaluate, verify, or invert a standalone relation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
values
|
Mapping[str, Any] | None
|
Supplied relation variable values. Constants may also be supplied, but they are not counted as relation variables. |
None
|
Returns:
| Type | Description |
|---|---|
Any
|
|
Any
|
single missing variable value. |
residual_vector ¶
residual_vector(ns: Mapping[str, Any], *, scales: Mapping[str, Any] | None = None, rel_tols: Mapping[str, float] | None = None, abs_tols: Mapping[str, float] | None = None, safe: bool = False) -> np.ndarray
Return a finite scaled residual vector.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ns
|
Mapping[str, Any]
|
Variable namespace. |
required |
scales
|
Mapping[str, Any] | None
|
Optional variable scale mapping. |
None
|
rel_tols
|
Mapping[str, float] | None
|
Optional variable relative tolerance mapping. |
None
|
abs_tols
|
Mapping[str, float] | None
|
Optional variable absolute tolerance mapping. |
None
|
safe
|
bool
|
Convert evaluation failures/non-finite values into large finite residuals. |
False
|
Returns:
| Type | Description |
|---|---|
ndarray
|
One-dimensional residual vector. |
verify_status ¶
verify_status(ns: Mapping[str, Any], *, scales: Mapping[str, Any] | None = None, rel_tols: Mapping[str, float] | None = None, abs_tols: Mapping[str, float] | None = None) -> dict[str, Any]
Verify one relation and its local constraints.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ns
|
Mapping[str, Any]
|
Variable namespace. |
required |
scales
|
Mapping[str, Any] | None
|
Optional variable scale mapping. |
None
|
rel_tols
|
Mapping[str, float] | None
|
Optional variable relative tolerance mapping. |
None
|
abs_tols
|
Mapping[str, float] | None
|
Optional variable absolute tolerance mapping. |
None
|
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Diagnostic dictionary. |
from_function
classmethod
¶
from_function(func: Callable[..., Any], *, outputs: Any = None, name: str | None = None, tags: Iterable[str] | None = None, enforce: bool = True, constraints: Any = None, dependency: str = 'dense') -> 'Relation'
Build a relation from a decorated Python function.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
func
|
Callable[..., Any]
|
Python implementation function. |
required |
outputs
|
Any
|
Explicit output name or names. |
None
|
name
|
str | None
|
Optional user-facing relation name. |
None
|
tags
|
Iterable[str] | None
|
Relation tags. |
None
|
enforce
|
bool
|
Whether relation is solver-enforced. |
True
|
constraints
|
Any
|
Local constraints/applicability guards. |
None
|
dependency
|
str
|
Dependency hint. |
'dense'
|
Returns:
| Type | Description |
|---|---|
'Relation'
|
Relation object. |
relation ¶
relation(_func: Callable[..., Any] | None = None, *, outputs: Any | None = None, name: str | None = None, tags: Iterable[str] | None = None, enforce: bool = True, constraints: Any = None, dependency: str = 'dense') -> Callable[[Callable[..., Any]], Relation] | Relation
Decorate a function as a FusDB relation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
_func
|
Callable[..., Any] | None
|
Function when used as |
None
|
outputs
|
Any | None
|
Explicit output name or names. |
None
|
name
|
str | None
|
User-facing relation name. |
None
|
tags
|
Iterable[str] | None
|
Relation tags. |
None
|
enforce
|
bool
|
Whether the relation is enforced. |
True
|
constraints
|
Any
|
Local constraints or applicability guards. |
None
|
dependency
|
str
|
Dependency hint. |
'dense'
|
Returns:
| Type | Description |
|---|---|
Callable[[Callable[..., Any]], Relation] | Relation
|
Relation object or decorator. |
constraint_from_expression ¶
constraint_from_expression(text: str, *, name: str | None = None, enforce: bool = True, tags: Iterable[str] | None = None, source_kind: str = 'constraint', source_name: str = '') -> Relation
Parse a simple comparison into an outputless relation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
text
|
str
|
Constraint expression such as |
required |
name
|
str | None
|
Optional relation name. |
None
|
enforce
|
bool
|
Whether the relation is solver-enforced. |
True
|
tags
|
Iterable[str] | None
|
Optional tags. |
None
|
source_kind
|
str
|
Diagnostic source kind. |
'constraint'
|
source_name
|
str
|
Diagnostic source name. |
''
|
Returns:
| Type | Description |
|---|---|
Relation
|
Relation object. |