Source code for eclypse.policies.failure.revive_edges

"""Edge recovery policy."""

from __future__ import annotations

from typing import TYPE_CHECKING

from eclypse.policies._filters import iter_selected_edges
from eclypse.policies._helpers import validate_probability
from eclypse.policies.failure._helpers import set_availability_with_probability
from eclypse.utils.constants import MAX_AVAILABILITY

if TYPE_CHECKING:
    from eclypse.graph.asset_graph import AssetGraph
    from eclypse.policies._filters import EdgeFilter
    from eclypse.utils.types import UpdatePolicy


[docs] def revive_edges( probability: float, *, availability_key: str = "availability", revived_availability: float = MAX_AVAILABILITY, edge_ids: list[tuple[str, str]] | None = None, edge_filter: EdgeFilter | None = None, ) -> UpdatePolicy: """Mark selected edges as available according to ``probability``. Args: probability (float): Per-edge probability of applying the recovery. availability_key (str): Edge asset used to store availability. revived_availability (float): Value written when an edge recovers. 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 marks selected edges as recovered. """ validate_probability("probability", probability) def policy(graph: AssetGraph): for _, _, data in iter_selected_edges( graph, edge_ids=edge_ids, edge_filter=edge_filter, ): set_availability_with_probability( data, probability=probability, availability_key=availability_key, target_availability=revived_availability, random=graph.rnd, ) graph.logger.trace("Applied revive_edges policy.") return policy