Source code for eclypse.policies.degrade.set_value
"""Set selected asset values."""
from __future__ import annotations
from typing import TYPE_CHECKING
from eclypse.policies.degrade._helpers import build_asset_transform_policy
if TYPE_CHECKING:
from eclypse.policies._filters import (
EdgeFilter,
NodeFilter,
)
from eclypse.utils.types import UpdatePolicy
[docs]
def set_value(
value: float,
*,
node_assets: str | list[str] | None = None,
edge_assets: str | list[str] | None = None,
node_values: dict[str, float] | None = None,
edge_values: dict[str, float] | None = None,
node_ids: list[str] | None = None,
node_filter: NodeFilter | None = None,
edge_ids: list[tuple[str, str]] | None = None,
edge_filter: EdgeFilter | None = None,
) -> UpdatePolicy:
"""Assign selected assets to a fixed value or per-asset override.
Args:
value (float): Default value assigned to each selected asset.
node_assets (str | list[str] | None): Optional node asset key selector.
edge_assets (str | list[str] | None): Optional edge asset key selector.
node_values (dict[str, float] | None): Optional per-node-asset value overrides.
edge_values (dict[str, float] | None): Optional per-edge-asset value overrides.
node_ids (list[str] | None): Optional explicit node identifiers to mutate.
node_filter (NodeFilter | None): Optional predicate receiving ``(node_id, data)``.
edge_ids (list[tuple[str, str]] | None): Optional explicit edge identifiers to mutate.
edge_filter (EdgeFilter | None): Optional predicate receiving ``(source, target, data)``.
Returns:
Policy that sets selected numeric assets.
"""
selected_node_assets = node_assets or list((node_values or {}).keys()) or None
selected_edge_assets = edge_assets or list((edge_values or {}).keys()) or None
def transform(key: str, _current: float) -> float:
if node_values is not None and key in node_values:
return node_values[key]
if edge_values is not None and key in edge_values:
return edge_values[key]
return value
return build_asset_transform_policy(
node_assets=selected_node_assets,
edge_assets=selected_edge_assets,
node_ids=node_ids,
node_filter=node_filter,
edge_ids=edge_ids,
edge_filter=edge_filter,
transform=transform,
label="set_value",
)