Source code for imod.util.regrid_method_type
from enum import Enum
from typing import ClassVar, Protocol, Tuple, TypeAlias
import xugrid as xu
from pydantic import ConfigDict
from pydantic.dataclasses import dataclass
_CONFIG = ConfigDict(extra="forbid")
class RegridderType(Enum):
"""
Enumerator referring to regridder types in ``xugrid``.
These can be used safely in scripts, remaining backwards compatible for
when it is decided to rename regridders in ``xugrid``. For an explanation
what each regridder type does, we refer to the `xugrid documentation <https://deltares.github.io/xugrid/examples/regridder_overview.html>`_
"""
CENTROIDLOCATOR = xu.CentroidLocatorRegridder
BARYCENTRIC = xu.BarycentricInterpolator
OVERLAP = xu.OverlapRegridder
RELATIVEOVERLAP = xu.RelativeOverlapRegridder
_RegridVarType: TypeAlias = Tuple[RegridderType, str] | Tuple[RegridderType]
class RegridMethodType(Protocol):
# Work around that type annotation is a bit hard on dataclasses, as they
# don't expose a class interface.
# Adapted from: https://stackoverflow.com/a/55240861
# "As already noted in comments, checking for this attribute is currently the
# most reliable way to ascertain that something is a dataclass"
# See also:
# https://github.com/python/mypy/issues/6568#issuecomment-1324196557
__dataclass_fields__: ClassVar[dict]
def asdict(self) -> dict:
return vars(self)
[docs]
@dataclass(config=_CONFIG)
class EmptyRegridMethod(RegridMethodType):
pass