

def _process(self, matrix, key=None):
    if (len(matrix.vdims) != 1):
        raise ValueError('Input matrix to gradient operation must have single value dimension.')
    matrix_dim = matrix.vdims[0]
    data = dx.data
    (r, c) = data.shape
    if (matrix_dim.cyclic and (None in matrix_dim.range)):
        raise Exception('Cyclic range must be specified to compute the gradient of cyclic quantities')
    cyclic_range = (None if (not matrix_dim.cyclic) else np.diff(matrix_dim.range))
    if (cyclic_range is not None):
        data = (data - matrix_dim.range[0])
    dx = np.diff(data, 1, axis=1)[0:(r - 1), 0:(c - 1)]
    dy = np.diff(data, 1, axis=0)[0:(r - 1), 0:(c - 1)]
    if (cyclic_range is not None):
        dx = (dx % cyclic_range)
        dy = (dy % cyclic_range)
        dx_negatives = (dx - cyclic_range)
        dy_negatives = (dy - cyclic_range)
        dx = np.where((np.abs(dx_negatives) < dx), dx_negatives, dx)
        dy = np.where((np.abs(dy_negatives) < dy), dy_negatives, dy)
    return Image(np.sqrt(((dx * dx) + (dy * dy))), matrix.bounds, group=self.p.group)

dataset/ETHPy150Open ioam/holoviews/holoviews/operation/element.py gradient._process/VarMisuse@48/76 `matrix`->`dx`