masktools¶
This module implements masking features to define which entries of
Parameter or Sequence_ arrays are relevant and which are not.
Module masktools implements the following members:
BaseMaskBase class for definingCustomMaskandDefaultMaskclasses.
CustomMaskMask that awaits allboolvalues to be set manually.
DefaultMaskA mask with all entries beingTrueof the same shape as its masterVariableobject.
IndexMaskA mask depending on a referenced index parameter containing integers.
MasksBase class for handling groups of masks.
-
class
hydpy.core.masktools.BaseMask(array=None, **kwargs)[source]¶ Bases:
numpy.ndarrayBase class for defining
CustomMaskandDefaultMaskclasses.
-
class
hydpy.core.masktools.CustomMask(array=None, **kwargs)[source]¶ Bases:
hydpy.core.masktools.BaseMaskMask that awaits all
boolvalues to be set manually.Class
CustomMaskis the most basic applicable mask and provides no special features, excepts that it allows itsboolvalues to be defined manually. Use it when you require a masking behaviour that is not captured by an available mask.Like the more advanced masks,
CustomMaskcan either work via Python’s descriptor protocol or can be applied directly, but is thought to be applied in the last way only:>>> from hydpy.core.masktools import CustomMask >>> mask1 = CustomMask([[True, False, False], ... [True, False, False]])
Note that calling any mask object (not only those of type
CustomMask) returns a new mask, but does not change the old one (all masks are derived fromndarray):>>> mask2 = mask1([[False, True, False], ... [False, True, False]]) >>> mask1 CustomMask([[ True, False, False], [ True, False, False]]) >>> mask2 CustomMask([[False, True, False], [False, True, False]])
All features of class
ndarraythought forboolvalues can be applied. Some useful examples:>>> mask3 = mask1 + mask2 >>> mask3 CustomMask([[ True, True, False], [ True, True, False]]) >>> mask3 ^ mask1 CustomMask([[False, True, False], [False, True, False]]) >>> ~mask3 CustomMask([[False, False, True], [False, False, True]]) >>> mask1 & mask2 CustomMask([[False, False, False], [False, False, False]])
Use the in operator to check of a mask defines a subset of another mask:
>>> mask1 in mask3 True >>> mask3 in mask1 False
-
class
hydpy.core.masktools.DefaultMask(variable: Optional[hydpy.core.typingtools.VariableProtocol] = None, **kwargs)[source]¶ Bases:
hydpy.core.masktools.BaseMaskA mask with all entries being
Trueof the same shape as its masterVariableobject.See the documentation on class
CustomMaskfor the basic usage of classDefaultMask.The following example shows how
DefaultMaskcan be applied via Python’s descriptor protocol, which should be the common situation:>>> from hydpy.core.parametertools import Parameter >>> from hydpy.core.masktools import DefaultMask >>> class Par1(Parameter): ... shape = (2, 3) ... defaultmask = DefaultMask() >>> Par1(None).defaultmask DefaultMask([[ True, True, True], [ True, True, True]]) >>> from hydpy import classname >>> classname(Par1.defaultmask) '_MaskDescriptor'
Alternatively, you can connect a
DefaultMaskwith aVariableobject directly:>>> class Par2(Parameter): ... shape = (2,) >>> mask = DefaultMask(Par2(None)) >>> mask DefaultMask([ True, True])
-
variable: hydpy.core.typingtools.VariableProtocol¶
-
classmethod
new(variable: hydpy.core.typingtools.VariableProtocol, **kwargs)[source]¶ Return a new
DefaultMaskobject associated with the givenVariableobject.
-
-
class
hydpy.core.masktools.IndexMask(variable: Optional[hydpy.core.typingtools.VariableProtocol] = None, **kwargs)[source]¶ Bases:
hydpy.core.masktools.DefaultMaskA mask depending on a referenced index parameter containing integers.
IndexMaskmust be subclassed. See the masksCompleteandSoilof base modelhlandfor two concrete example classes, which are applied on thehlandspecific parameter classesParameterCompleteandParameterSoil. The documentation on the two parameter classes provides some application examples. Further, see the documentation on classCustomMaskfor the basic usage of classDefaultMask.-
variable: hydpy.core.typingtools.VariableProtocol¶
-
classmethod
new(variable: hydpy.core.typingtools.VariableProtocol, **kwargs)[source]¶ Return a new
IndexMaskobject of the same shape as the parameter referenced bypropertyrefindices.Entries are only
True, if the integer values of the respective entries of the referenced parameter are contained in theIndexMaskclass attribute tuple RELEVANT_VALUES.Before calling new (explicitly or implicitely), one must prepare the variable returned by property
refindices:>>> from hydpy.models.hland import * >>> parameterstep() >>> states.sm.mask Traceback (most recent call last): ... RuntimeError: The mask of parameter `sm` of element `?` cannot be determined as long as parameter `zonetype` is not prepared properly.
>>> nmbzones(4) >>> zonetype(FIELD, FOREST, ILAKE, GLACIER) >>> states.sm.mask Soil([ True, True, False, False])
If the shape of the
refindicesparameter is zero (which is actually not allowed forhland), the returned mask is empty:>>> zonetype.shape = 0 >>> states.shape = 0 >>> states.sm.mask Soil([])
-
classmethod
get_refindices(variable) → parametertools.Parameter[source]¶ Return the
Parameterobject for determining which entries ofIndexMaskareTrueand which areFalse.The given variable must be concrete
Variableobject, theIndexMaskis thought for.Needs to be overwritten by subclasses:
>>> from hydpy.core.parametertools import Parameter >>> from hydpy.core.masktools import IndexMask >>> class Par(Parameter): ... mask = IndexMask() >>> Par(None).mask Traceback (most recent call last): ... NotImplementedError: Function `get_refindices` of class `IndexMask` must be overridden, which is not the case for class `IndexMask`.
-
property
refindices¶ Parameterobject for determining which entries ofIndexMaskareTrueand which areFalse.
-
property
relevantindices¶ A
listof all currently relevant indices, calculated as an intercection of the (constant) class attribute RELEVANT_VALUES and the (variable) propertyrefindices.
-
-
class
hydpy.core.masktools.Masks[source]¶ Bases:
objectBase class for handling groups of masks.
Maskssubclasses are basically just containers, which are defined similar asSubParametersandSubSequencessubclasses:>>> from hydpy.core.masktools import Masks >>> from hydpy.core.masktools import IndexMask, DefaultMask, CustomMask >>> class Masks(Masks): ... CLASSES = (IndexMask, ... DefaultMask) >>> masks = Masks()
The contained mask classes are available via attribute access in lower case letters:
>>> masks indexmask of module hydpy.core.masktools defaultmask of module hydpy.core.masktools >>> masks.indexmask is IndexMask True >>> "indexmask" in dir(masks) True
The in operator is supported:
>>> IndexMask in masks True >>> CustomMask in masks False >>> "mask" in masks Traceback (most recent call last): ... TypeError: The given value `mask` of type `str` is neither a Mask class nor a Mask instance.
Using item access, strings (in whatever case), mask classes, and mask objects are accepted:
>>> masks["IndexMask"] is IndexMask True >>> masks["indexmask"] is IndexMask True >>> masks[IndexMask] is IndexMask True >>> masks[CustomMask()] Traceback (most recent call last): ... RuntimeError: While trying to retrieve a mask based on key `CustomMask([])`, the following error occurred: The key does not define an available mask. >>> masks["test"] Traceback (most recent call last): ... RuntimeError: While trying to retrieve a mask based on key `'test'`, the following error occurred: The key does not define an available mask. >>> masks[1] Traceback (most recent call last): ... TypeError: While trying to retrieve a mask based on key `1`, the following error occurred: The given key is neither a `string` a `mask` type.
-
property
name¶ masks
>>> from hydpy.core.masktools import Masks >>> Masks.CLASSES = () >>> Masks().name 'masks' >>> del Masks.CLASSES
-
property
-
class
hydpy.core.masktools.NodeMasks[source]¶ Bases:
hydpy.core.masktools.MasksMaskssubclass for classNode.At the moment, the purpose of class
NodeMasksis to make the implementation ofModelSequenceandNodeSequencemore similar. It will become relevant for applications as soon as we support 1-dimensional node sequences.