Source code for bw2calc.grid
from collections.abc import Mapping
from typing import Any, Sequence
[docs]
class TwoDimensionalGrid(Mapping):
def __init__(self, keys: Sequence[tuple[Any, Any]], values: Sequence[Any]):
"""Read-only dictionary wrapper for a strictly 2-dimensional grid.
Supports a very limited type of slicing - only `foo["something", ...]`."""
if not len(keys) == len(values):
raise ValueError("`keys` must have same length as `values`")
[docs]
self.dict_ = {k: v for k, v in zip(keys, values)}
def __getitem__(self, key: Any):
if not len(key) == 2:
raise KeyError
first, second = key
if first == Ellipsis and second == Ellipsis:
raise KeyError
elif first == Ellipsis:
return {f: v for (f, s), v in self.dict_.items() if s == second}
elif second == Ellipsis:
return {s: v for (f, s), v in self.dict_.items() if f == first}
else:
return self.dict_[(first, second)]
def __iter__(self):
yield from self.dict_
def __len__(self):
return len(self.dict_)