Source code for ogstools.meshlib.data_dict
from collections.abc import Callable, Iterator, MutableMapping, Sequence
from typing import Any
import numpy as np
from .mesh import Mesh
[docs]
class DataDict(MutableMapping):
"Mapping that works like both a dict and a mutable object."
[docs]
def __init__(
self, ms: Sequence[Mesh], get_data: Callable[[Mesh], dict]
) -> None:
self.ms = ms
self.get_data = get_data
def __setitem__(self, key: str, value: Any) -> None:
if isinstance(value, float | int):
if key in (mesh0_data := self.get_data(self.ms[0])):
len_vals = np.shape(mesh0_data[key])[0]
else:
len_vals = -1
value = np.tile(value, (len(self.ms), len_vals))
for mesh, value_t in zip(self.ms, value, strict=True):
self.get_data(mesh)[key] = value_t
[docs]
def __getitem__(self, key: str) -> np.ndarray:
return np.asarray([self.get_data(mesh)[key] for mesh in self.ms])
def __delitem__(self, key: str) -> None:
for mesh in self.ms:
del self.get_data(mesh)[key]
def __iter__(self) -> Iterator[dict]:
return iter(self.get_data(self.ms[0]))
def __len__(self) -> int:
return len(self.get_data(self.ms[0]))