Coverage for src/arraybridge/array_payload.py: 100%
15 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 11:15 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-25 11:15 +0000
1"""Nominal contract for containers that preserve semantics around array data."""
3from abc import ABC, abstractmethod
4from collections.abc import Callable
5from typing import Any, TypeVar
7ArrayPayloadT = TypeVar("ArrayPayloadT", bound="ArrayPayload")
10class ArrayPayload(ABC):
11 """Container whose array data can be transformed without losing its context."""
13 @abstractmethod
14 def array_payload_data(self) -> Any:
15 """Return the concrete array governed by this payload."""
17 @abstractmethod
18 def with_data(self: ArrayPayloadT, data: Any) -> ArrayPayloadT:
19 """Return this payload's context attached to replacement array data."""
21 def map_array_payload(
22 self: ArrayPayloadT,
23 transform: Callable[[Any], Any],
24 ) -> ArrayPayloadT:
25 """Apply one array transform while preserving the payload container."""
27 current_data = self.array_payload_data()
28 transformed_data = transform(current_data)
29 if transformed_data is current_data:
30 return self
31 return self.with_data(transformed_data)