diff --git a/nifty5/operators/linear_operator.py b/nifty5/operators/linear_operator.py index 2ae510c8b9ce7480b853288c333c3b0f75529193..60bef67bc15e632e0752660cbc440c9950caacb9 100644 --- a/nifty5/operators/linear_operator.py +++ b/nifty5/operators/linear_operator.py @@ -259,5 +259,4 @@ class LinearOperator(Operator): def _check_input(self, x, mode): self._check_mode(mode) - if self._dom(mode) != x.domain: - raise ValueError("The operator's and field's domains don't match.") + self._check_domain_equality(self._dom(mode), x.domain) diff --git a/nifty5/operators/mask_operator.py b/nifty5/operators/mask_operator.py index abd9ed1115383a6fee8f47cf3f9f913e7b802569..936e1250a8e72c6727ecc948fb69893e1bae965b 100644 --- a/nifty5/operators/mask_operator.py +++ b/nifty5/operators/mask_operator.py @@ -32,6 +32,15 @@ from .linear_operator import LinearOperator # collect the unstructured Fields. class MaskOperator(LinearOperator): def __init__(self, mask): + """Implementation of a mask response + + This operator takes a field, applies a mask and returns the values of + the field in a UnstructuredDomain. It can be used as response operator. + + Parameters + ---------- + mask : Field + """ if not isinstance(mask, Field): raise TypeError diff --git a/nifty5/operators/operator.py b/nifty5/operators/operator.py index 28328c1aa8e8537a4cce065af8977e1f1010102f..aca4749110a75afd3e9a351e488397f039244ad0 100644 --- a/nifty5/operators/operator.py +++ b/nifty5/operators/operator.py @@ -23,6 +23,17 @@ class Operator(NiftyMetaBase()): The domain on which the Operator's output Field lives.""" return self._target + @staticmethod + def _check_domain_equality(dom_op, dom_field): + if dom_op != dom_field: + s = "The operator's and field's domains don't match." + from ..domain_tuple import DomainTuple + from ..multi_domain import MultiDomain + if not isinstance(dom_op, [DomainTuple, MultiDomain]): + s += " Your operator's domain is neither a `DomainTuple`" \ + " nor a `MultiDomain`." + raise ValueError(s) + def scale(self, factor): if factor == 1: return self @@ -66,8 +77,7 @@ class Operator(NiftyMetaBase()): def _check_input(self, x): from ..linearization import Linearization d = x.target if isinstance(x, Linearization) else x.domain - if self._domain != d: - raise ValueError("The operator's and field's domains don't match.") + self._check_domain_equality(self._domain, d) def __call__(self, x): if isinstance(x, Operator):