Code Duplication    Length = 24-28 lines in 2 locations

metpy/calc/tools.py 2 locations

@@ 390-417 (lines=28) @@
387
    ret = []
388
389
    # Calculate interpolation for each variable
390
    for var in variables:
391
        var = var[below] + ((log_x_array - log_xp[below]) /
392
                            (log_xp[above] - log_xp[below])) * (var[above] -
393
                                                                var[below])
394
395
        # set to nan if extrap=set_nan
396
        if extrap == 'set_nan':
397
            var[minv == xp.shape[axis]] = np.nan
398
            var[minv == 0] = np.nan
399
400
        # Output to list
401
        ret.append(var)
402
    if len(ret) == 1:
403
        return ret[0]
404
    else:
405
        return ret
406
407
408
def broadcast_indices(x, minv, ndim, axis):
409
    """Calculate index values to properly broadcast index array within data array.
410
411
    See usage in log_interp.
412
    """
413
    ret = []
414
    for dim in range(ndim):
415
        if dim == axis:
416
            ret.append(minv)
417
        else:
418
            broadcast_slice = [np.newaxis] * ndim
419
            broadcast_slice[dim] = slice(None)
420
            dim_inds = np.arange(x.shape[dim])
@@ 364-387 (lines=24) @@
361
    # Log x and xp
362
    log_x_array = np.log(x_array)
363
    log_xp = np.log(xp[sorter])
364
365
    # Calculate value above interpolated value
366
    minv = np.apply_along_axis(np.searchsorted, axis, xp[sorter], x[sort_x])
367
    minv2 = np.copy(minv)
368
369
    # If extrap is none and data is out of bounds, raise value error
370
    if ((np.max(minv) == xp.shape[axis]) or (np.min(minv) == 0)) and extrap == 'none':
371
        raise ValueError('Interpolation point out of data bounds encountered')
372
373
    # Warn if interpolated values are outside data bounds, will make these the values
374
    # at end of data range.
375
    if np.max(minv) == xp.shape[axis]:
376
        warnings.warn('Interpolation point out of data bounds encountered')
377
        minv2[minv == xp.shape[axis]] = xp.shape[axis] - 1
378
    if np.max(minv) == 0:
379
        warnings.warn('Interpolation point out of data bounds encountered')
380
        minv2[minv == 0] = 1
381
382
    # Get indicies for broadcasting arrays
383
    above = broadcast_indices(xp, minv2, ndim, axis)
384
    below = broadcast_indices(xp, minv2 - 1, ndim, axis)
385
386
    # Create empty output list
387
    ret = []
388
389
    # Calculate interpolation for each variable
390
    for var in variables: