Source code for hydpy.models.hland.hland_sequences

# -*- coding: utf-8 -*-
# pylint: disable=missing-module-docstring

# import...
# ...from site-packages
import numpy

# ...from HydPy
from hydpy.core.typingtools import *
from hydpy.core import sequencetools


[docs] class Factor1DSequence(sequencetools.FactorSequence): """Base class for 1-dimensional factor subclasses that support aggregation with respect to |ZoneArea|. All |Factor1DSequence| subclasses must implement fitting mask objects individually. The following example shows how the subclass |TC| works: >>> from hydpy.models.hland import * >>> parameterstep("1d") >>> nmbzones(5) >>> zonetype(FIELD, FOREST, GLACIER, ILAKE, SEALED) >>> zonearea.values = 10.0, 20.0, 30.0, 35.0, 5.0 >>> factors.tc(5.0, 2.0, 4.0, 1.0, 6.0) >>> from hydpy import round_ >>> round_(factors.tc.average_values()) 2.75 """ NDIM = 1 NUMERIC = False @property def refweights(self): """Alias for the associated instance of |ZoneArea| for calculating areal values.""" return self.subseqs.seqs.model.parameters.control.zonearea
[docs] class Factor2DSequence(sequencetools.FactorSequence): """Base class for 2-dimensional factor subclasses that support aggregation with respect to |ZoneArea|. All |Factor2DSequence| subclasses must implement fitting mask objects individually. The following example shows how subclass |SWE| works, which implements mask |Land|: >>> from hydpy.models.hland import * >>> parameterstep() >>> nmbzones(5) >>> sclass(2) >>> zonetype(FIELD, FOREST, GLACIER, ILAKE, SEALED) >>> zonearea.values = 10.0, 20.0, 30.0, 40.0, 60.0 >>> factors.swe = [[40.0, 10.0, 30.0, nan, 0.0], ... [60.0, 30.0, 50.0, nan, 20.0]] >>> from hydpy import round_ >>> round_(factors.swe.average_values()) 22.5 """ NDIM = 2 NUMERIC = False @property def refweights(self): """Alias for the associated instance of |ZoneArea| for calculating areal values.""" return self.subseqs.seqs.model.parameters.control.zonearea @property def valuevector(self) -> VectorFloat: """Values of the individual zones; each entry is the average of the values of all snow classes of a specific zone. We take subclass |SWE| as an example: >>> from hydpy.models.hland import * >>> parameterstep("1d") >>> nmbzones(3) >>> sclass(2) >>> zonetype(FIELD) >>> zonearea.values = 1.0, 1.0, 1.0 >>> factors.swe = [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]] >>> from hydpy import print_vector >>> print_vector(factors.swe.valuevector) 2.5, 3.5, 4.5 The definition of |Factor2DSequence.valuevector| of |Factor2DSequence| allows applying method |Variable.average_values| like for the 1-dimensional zone-related sequences of |hland|: >>> print_vector([factors.swe.average_values()]) 3.5 """ return numpy.mean(self.value, axis=0) @property def seriesmatrix(self) -> MatrixFloat: """Time series of the values of the individual zones; each entry is the average of the values of all snow classes of a specific zone. We take subclass |Melt| as an example: >>> from hydpy import pub >>> pub.timegrids = "2000-01-01", "2000-01-05", "1d" >>> from hydpy.models.hland import * >>> parameterstep("1d") >>> nmbzones(3) >>> sclass(2) >>> zonetype(FIELD) >>> zonearea.values = 1.0, 1.0, 1.0 >>> factors.swe.prepare_series() >>> factors.swe.series = [[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], ... [[2.0, 3.0, 4.0], [5.0, 6.0, 7.0]], ... [[3.0, 4.0, 5.0], [6.0, 7.0, 8.0]], ... [[4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]] >>> from hydpy import print_vector >>> for values in factors.swe.seriesmatrix: ... print_vector(values) 2.5, 3.5, 4.5 3.5, 4.5, 5.5 4.5, 5.5, 6.5 5.5, 6.5, 7.5 The definition of |Factor2DSequence.seriesmatrix| of |Factor2DSequence| allows applying method |IOSequence.average_series| like for the 1-dimensional zone-related sequences of |hland|: >>> print_vector(factors.swe.average_series()) 3.5, 4.5, 5.5, 6.5 """ return numpy.mean(self.series, axis=1)
[docs] class Flux1DSequence(sequencetools.FluxSequence): """Base class for 1-dimensional flux subclasses that support aggregation with respect to |ZoneArea|. All |Flux1DSequence| subclasses must implement fitting mask objects individually. The following example shows how the subclass |PC| works: >>> from hydpy.models.hland import * >>> parameterstep("1d") >>> nmbzones(5) >>> zonetype(FIELD, FOREST, GLACIER, ILAKE, SEALED) >>> zonearea.values = 10.0, 20.0, 30.0, 35.0, 5.0 >>> fluxes.pc(5.0, 2.0, 4.0, 1.0, 6.0) >>> from hydpy import round_ >>> round_(fluxes.pc.average_values()) 2.75 """ NDIM = 1 NUMERIC = False @property def refweights(self): """Alias for the associated instance of |ZoneArea| for calculating areal values.""" return self.subseqs.seqs.model.parameters.control.zonearea
[docs] class Flux2DSequence(sequencetools.FluxSequence): """Base class for 2-dimensional flux subclasses that support aggregation with respect to |ZoneArea|. All |Flux2DSequence| subclasses must implement fitting mask objects individually. The following example shows how subclass |Melt| works, which implements mask |Snow|: >>> from hydpy.models.hland import * >>> parameterstep("1d") >>> nmbzones(5) >>> sclass(2) >>> zonetype(FIELD, FOREST, GLACIER, ILAKE, SEALED) >>> zonearea.values = 10.0, 20.0, 30.0, 40.0, 60.0 >>> fluxes.melt = [[40.0, 10.0, 30.0, nan, 0.0], ... [60.0, 30.0, 50.0, nan, 20.0]] >>> from hydpy import round_ >>> round_(fluxes.melt.average_values()) 22.5 """ NDIM = 2 NUMERIC = False @property def refweights(self): """Alias for the associated instance of |ZoneArea| for calculating areal values.""" return self.subseqs.seqs.model.parameters.control.zonearea @property def valuevector(self) -> VectorFloat: """Values of the individual zones; each entry is the average of the values of all snow classes of a specific zone. We take subclass |Melt| as an example: >>> from hydpy.models.hland import * >>> parameterstep("1d") >>> nmbzones(3) >>> sclass(2) >>> zonetype(FIELD) >>> zonearea.values = 1.0, 1.0, 1.0 >>> fluxes.melt = [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]] >>> from hydpy import print_vector >>> print_vector(fluxes.melt.valuevector) 2.5, 3.5, 4.5 The definition of |Flux2DSequence.valuevector| of |Flux2DSequence| allows applying method |Variable.average_values| like for the 1-dimensional zone-related sequences of |hland|: >>> print_vector([fluxes.melt.average_values()]) 3.5 """ return numpy.mean(self.value, axis=0) @property def seriesmatrix(self) -> MatrixFloat: """Time series of the values of the individual zones; each entry is the average of the values of all snow classes of a specific zone. We take subclass |Melt| as an example: >>> from hydpy import pub >>> pub.timegrids = "2000-01-01", "2000-01-05", "1d" >>> from hydpy.models.hland import * >>> parameterstep("1d") >>> nmbzones(3) >>> sclass(2) >>> zonetype(FIELD) >>> zonearea.values = 1.0, 1.0, 1.0 >>> fluxes.melt.prepare_series() >>> fluxes.melt.series = [[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], ... [[2.0, 3.0, 4.0], [5.0, 6.0, 7.0]], ... [[3.0, 4.0, 5.0], [6.0, 7.0, 8.0]], ... [[4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]] >>> from hydpy import print_vector >>> for values in fluxes.melt.seriesmatrix: ... print_vector(values) 2.5, 3.5, 4.5 3.5, 4.5, 5.5 4.5, 5.5, 6.5 5.5, 6.5, 7.5 The definition of |Flux2DSequence.seriesmatrix| of |Flux2DSequence| allows applying method |IOSequence.average_series| like for the 1-dimensional zone-related sequences of |hland|: >>> print_vector(fluxes.melt.average_series()) 3.5, 4.5, 5.5, 6.5 """ return numpy.mean(self.series, axis=1)
[docs] class State1DSequence(sequencetools.StateSequence): """Base class for 1-dimensional state subclasses that support aggregation with respect to |ZoneArea|. All |State1DSequence| subclasses must implement fitting mask objects individually. The following example shows how subclass |SM| works, which implements mask |Soil|: >>> from hydpy.models.hland import * >>> parameterstep("1d") >>> nmbzones(5) >>> zonetype(FIELD, FOREST, GLACIER, ILAKE, SEALED) >>> zonearea.values = 10.0, 20.0, 30.0, 40.0, 50.0 >>> fc(100.0) >>> states.sm = 50.0, 20.0, 40.0, 10.0, nan >>> from hydpy import round_ >>> round_(states.sm.average_values()) 30.0 """ NDIM = 1 NUMERIC = False @property def refweights(self): """Alias for the associated instance of |ZoneArea| for calculating areal values.""" return self.subseqs.seqs.model.parameters.control.zonearea
[docs] class State2DSequence(sequencetools.StateSequence): """Base class for 2-dimensional state subclasses that support aggregation with respect to |ZoneArea|. All |State2DSequence| subclasses must implement fitting mask objects individually. The following example shows how subclass |SP| works, which implements mask |Snow|: >>> from hydpy.models.hland import * >>> parameterstep("1d") >>> nmbzones(5) >>> sclass(2) >>> zonetype(FIELD, FOREST, GLACIER, ILAKE, SEALED) >>> zonearea.values = 10.0, 20.0, 30.0, 40.0, 60.0 >>> states.sp = [[40.0, 10.0, 30.0, nan, 0.0], ... [60.0, 30.0, 50.0, nan, 20.0]] >>> from hydpy import round_ >>> round_(states.sp.average_values()) 22.5 """ NDIM = 2 NUMERIC = False @property def refweights(self): """Alias for the associated instance of |ZoneArea| for calculating areal values.""" return self.subseqs.seqs.model.parameters.control.zonearea @property def valuevector(self) -> VectorFloat: """Values of the individual zones; each entry is the average of the values of all snow classes of a specific zone. We take subclass |SP| as an example: >>> from hydpy.models.hland import * >>> parameterstep("1d") >>> nmbzones(3) >>> sclass(2) >>> zonetype(FIELD) >>> zonearea.values = 1.0, 1.0, 1.0 >>> states.sp = [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]] >>> from hydpy import print_vector >>> print_vector(states.sp.valuevector) 2.5, 3.5, 4.5 The definition of |State2DSequence.valuevector| of |State2DSequence| allows applying method |Variable.average_values| like for the 1-dimensional zone-related sequences of |hland|: >>> print_vector([states.sp.average_values()]) 3.5 """ return numpy.mean(self.value, axis=0) @property def seriesmatrix(self) -> MatrixFloat: """Time series of the values of the individual zones; each entry is the average of the values of all snow classes of a specific zone. We take subclass |SP| as an example: >>> from hydpy import pub >>> pub.timegrids = "2000-01-01", "2000-01-05", "1d" >>> from hydpy.models.hland import * >>> parameterstep("1d") >>> nmbzones(3) >>> sclass(2) >>> zonetype(FIELD) >>> zonearea.values = 1.0, 1.0, 1.0 >>> states.sp.prepare_series() >>> states.sp.series = [[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], ... [[2.0, 3.0, 4.0], [5.0, 6.0, 7.0]], ... [[3.0, 4.0, 5.0], [6.0, 7.0, 8.0]], ... [[4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]] >>> from hydpy import print_vector >>> for values in states.sp.seriesmatrix: ... print_vector(values) 2.5, 3.5, 4.5 3.5, 4.5, 5.5 4.5, 5.5, 6.5 5.5, 6.5, 7.5 The definition of |State2DSequence.seriesmatrix| of |State2DSequence| allows applying method |IOSequence.average_series| like for the 1-dimensional zone-related sequences of |hland|: >>> print_vector(states.sp.average_series()) 3.5, 4.5, 5.5, 6.5 """ return numpy.mean(self.series, axis=1)