Source code for topotoolbox.stream_functions

"""Functions for working with flow networks

These functions often apply to both StreamObjects and FlowObjects.
"""
import numpy as np

# pylint: disable=no-name-in-module
from . import _stream  # type: ignore

[docs] def imposemin(s, dem, minimum_slope=0.0): """Minima imposition along a drainage network Parameters ---------- s : StreamObject | FlowObject The drainage network used to determine flow directions dem : GridObject | np.ndarray The elevations to be carved. If s is a FlowObject, this should either be a GridObject or a 2D array of the appropriate shape. If s is a StreamObject, this should be a GridObject or a 2D array of the shape of the DEM from which the StreamObject was derived or a 1D array (a node attribute list) with as many entries as there are nodes in the stream network. The element type of the array can be any numerical type, but it will be converted into float32, so some precision may be lost. minimum_slope : float, optional The minimum downward gradient (expressed as a positive nondimensional slope) to be imposed on the elevations. Defaults to zero. Set to a small positive number (e.g. 0.001) to impose a shallow downward slope on the resulting stream profile. Too high a minimum gradient will result in channels that lie well below the land surface. Returns ------- GridObject | np.ndarray The elevations with the minimum downward gradient imposed. If `dem` is a GridObject, a GridObject is returned. Otherwise a single-precision floating point array of the same shape as `dem` is returned. """ result = s.ezgetnal(dem, dtype=np.float32) # This returns a copy d = -s.distance() * minimum_slope _stream.traverse_down_f32_min_add(result, d, s.source, s.target) return result