Exemplo n.º 1
0
def test_allocation():
    # create test raster, all non-zero cells are unique,
    # this is to test against corresponding proximity
    raster = create_test_raster()

    allocation_agg = allocation(raster, x='lon', y='lat')
    # output must be an xarray DataArray
    assert isinstance(allocation_agg, xa.DataArray)
    assert type(allocation_agg.values[0][0]) == raster.dtype
    assert allocation_agg.shape == raster.shape
    # targets not specified,
    # Thus, targets are set to non-zero values of input @raster
    targets = np.unique(raster.data[np.where((raster.data != 0)
                                             & np.isfinite(raster.data))])
    # non-zero cells (a.k.a targets) remain the same
    for t in targets:
        ry, rx = np.where(raster.data == t)
        for y, x in zip(ry, rx):
            assert allocation_agg.values[y, x] == t
    # values of allocation output
    assert (np.unique(allocation_agg.data) == targets).all()

    # check against corresponding proximity
    proximity_agg = proximity(raster, x='lon', y='lat')
    xcoords = allocation_agg['lon'].data
    ycoords = allocation_agg['lat'].data

    for y in range(raster.shape[0]):
        for x in range(raster.shape[1]):
            a = allocation_agg.data[y, x]
            py, px = np.where(raster.data == a)
            # non-zero cells in raster are unique, thus len(px)=len(py)=1
            d = euclidean_distance(xcoords[x], xcoords[px[0]], ycoords[y],
                                   ycoords[py[0]])
            assert proximity_agg.data[y, x] == d
Exemplo n.º 2
0
def test_manhattan_proximity(test_raster, result_manhattan_proximity):
    manhattan_prox = proximity(test_raster,
                               x='lon',
                               y='lat',
                               distance_metric='MANHATTAN')
    general_output_checks(test_raster,
                          manhattan_prox,
                          result_manhattan_proximity,
                          verify_dtype=True)
Exemplo n.º 3
0
def test_great_circle_proximity(test_raster, result_great_circle_proximity):
    great_circle_prox = proximity(test_raster,
                                  x='lon',
                                  y='lat',
                                  distance_metric='GREAT_CIRCLE')
    general_output_checks(test_raster,
                          great_circle_prox,
                          result_great_circle_proximity,
                          verify_dtype=True)
Exemplo n.º 4
0
def test_max_distance_proximity(test_raster, result_max_distance_proximity):
    max_distance, expected_result = result_max_distance_proximity
    max_distance_prox = proximity(test_raster,
                                  x='lon',
                                  y='lat',
                                  max_distance=max_distance)
    general_output_checks(test_raster,
                          max_distance_prox,
                          expected_result,
                          verify_dtype=True)
Exemplo n.º 5
0
def test_target_proximity(test_raster, result_target_proximity):
    target_values, expected_result = result_target_proximity
    target_prox = proximity(test_raster,
                            x='lon',
                            y='lat',
                            target_values=target_values)
    general_output_checks(test_raster,
                          target_prox,
                          expected_result,
                          verify_dtype=True)
Exemplo n.º 6
0
def test_proximity_distance_metric():

    # distance_metric SETTING
    dm_proximity = proximity(raster, distance_metric='GREAT_CIRCLE')

    # output must be an xarray DataArray
    assert isinstance(dm_proximity, xa.DataArray)
    assert isinstance(dm_proximity.values, np.ndarray)
    assert type(dm_proximity.values[0][0]) == np.float64
    assert dm_proximity.values.shape[0] == height
    assert dm_proximity.values.shape[1] == width
Exemplo n.º 7
0
def test_proximity_great_circle():

    # distance_metric SETTING
    dm_proximity = proximity(raster, distance_metric='GREAT_CIRCLE')

    # output must be an xarray DataArray
    assert isinstance(dm_proximity, xa.DataArray)
    assert isinstance(dm_proximity.values, np.ndarray)
    assert type(dm_proximity.values[0][0]) == np.float64
    assert dm_proximity.values.shape[0] == height
    assert dm_proximity.values.shape[1] == width
    # all output values must be in range [0, max_possible_distance]
    max_possible_distance = great_circle_distance(
        raster.coords['x'].values[0], raster.coords['x'].values[-1],
        raster.coords['y'].values[0], raster.coords['y'].values[-1])
    assert np.nanmax(dm_proximity.values) <= max_possible_distance
    assert np.nanmin(dm_proximity.values) == 0
Exemplo n.º 8
0
def test_proximity_target_value():

    # TARGET VALUES SETTING
    target_values = [2, 3]
    num_target = (raster == 2).sum() + (raster == 3).sum()
    tv_proximity = proximity(raster, target_values=target_values)
    tv_proximity_img = tv_proximity.values
    tv_zeros = (tv_proximity_img == 0).sum()

    # output must be an xarray DataArray
    assert isinstance(tv_proximity, xa.DataArray)
    assert isinstance(tv_proximity.values, np.ndarray)
    assert type(tv_proximity.values[0][0]) == np.float64
    assert tv_proximity.values.shape[0] == height
    assert tv_proximity.values.shape[1] == width

    assert num_target == tv_zeros
Exemplo n.º 9
0
def test_proximity_manhattan():

    # distance_metric SETTING
    dm_proximity = proximity(raster, 'lat', 'lon', distance_metric='MANHATTAN')

    # output must be an xarray DataArray
    assert isinstance(dm_proximity, xa.DataArray)
    assert isinstance(dm_proximity.values, np.ndarray)
    assert type(dm_proximity.values[0][0]) == np.float64
    assert dm_proximity.values.shape[0] == height
    assert dm_proximity.values.shape[1] == width
    # all output values must be in range [0, max_possible_distance]
    max_possible_distance = manhattan_distance(raster.coords['lat'].values[0],
                                               raster.coords['lat'].values[-1],
                                               raster.coords['lon'].values[0],
                                               raster.coords['lon'].values[-1])
    assert np.nanmax(dm_proximity.values) <= max_possible_distance
    assert np.nanmin(dm_proximity.values) == 0
Exemplo n.º 10
0
def test_proximity_default():

    # DEFAULT SETTINGS
    # proximity(img, max_distance=None, target_values=[], dist_units=PIXEL,
    #           nodata=np.nan)
    default_proximity = proximity(raster)
    default_proximity_img = default_proximity.values
    zeros_default = (default_proximity_img == 0).sum()

    # output must be an xarray DataArray
    assert isinstance(default_proximity, xa.DataArray)
    assert isinstance(default_proximity.values, np.ndarray)
    assert type(default_proximity.values[0][0]) == np.float64
    assert default_proximity.values.shape[0] == height
    assert default_proximity.values.shape[1] == width

    # number of non-zeros (target pixels) in original image
    # must be equal to the number of zeros (target pixels) in proximity matrix
    assert nonzeros_raster == zeros_default
Exemplo n.º 11
0
def test_proximity():
    raster = create_test_raster()

    # DEFAULT SETTINGS
    default_prox = proximity(raster, x='lon', y='lat')
    # output must be an xarray DataArray
    assert isinstance(default_prox, xa.DataArray)
    assert isinstance(default_prox.values, np.ndarray)
    assert type(default_prox.values[0][0]) == np.float64
    assert default_prox.shape == raster.shape
    # number of non-zeros (target pixels) in original image
    # must be equal to the number of zeros (target pixels) in proximity matrix
    assert len(np.where(raster.data != 0)[0]) == \
        len(np.where(default_prox.data == 0)[0])

    # TARGET VALUES SETTING
    target_values = [2, 3]
    target_prox = proximity(raster,
                            x='lon',
                            y='lat',
                            target_values=target_values)
    # output must be an xarray DataArray
    assert isinstance(target_prox, xa.DataArray)
    assert isinstance(target_prox.values, np.ndarray)
    assert type(target_prox.values[0][0]) == np.float64
    assert target_prox.shape == raster.shape
    assert (len(np.where(raster.data == 2)[0]) +
            len(np.where(raster.data == 3)[0])) == \
        len(np.where(target_prox.data == 0)[0])

    # distance_metric SETTING: MANHATTAN
    manhattan_prox = proximity(raster,
                               x='lon',
                               y='lat',
                               distance_metric='MANHATTAN')
    # output must be an xarray DataArray
    assert isinstance(manhattan_prox, xa.DataArray)
    assert isinstance(manhattan_prox.values, np.ndarray)
    assert type(manhattan_prox.values[0][0]) == np.float64
    assert manhattan_prox.shape == raster.shape
    # all output values must be in range [0, max_possible_dist]
    max_possible_dist = manhattan_distance(raster.coords['lon'].values[0],
                                           raster.coords['lon'].values[-1],
                                           raster.coords['lat'].values[0],
                                           raster.coords['lat'].values[-1])
    assert np.nanmax(manhattan_prox.values) <= max_possible_dist
    assert np.nanmin(manhattan_prox.values) == 0

    # distance_metric SETTING: GREAT_CIRCLE
    great_circle_prox = proximity(raster,
                                  x='lon',
                                  y='lat',
                                  distance_metric='GREAT_CIRCLE')
    # output must be an xarray DataArray
    assert isinstance(great_circle_prox, xa.DataArray)
    assert isinstance(great_circle_prox.values, np.ndarray)
    assert type(great_circle_prox.values[0][0]) == np.float64
    assert great_circle_prox.shape == raster.shape
    # all output values must be in range [0, max_possible_dist]
    max_possible_dist = great_circle_distance(raster.coords['lon'].values[0],
                                              raster.coords['lon'].values[-1],
                                              raster.coords['lat'].values[0],
                                              raster.coords['lat'].values[-1])
    assert np.nanmax(great_circle_prox.values) <= max_possible_dist
    assert np.nanmin(great_circle_prox.values) == 0
def test_proximity():
    raster = create_test_raster()

    # add crs for tests
    raster_for_default = _add_EPSG4326_crs_to_da(raster)

    # DEFAULT SETTINGS
    default_prox = proximity(raster_for_default, x='lon', y='lat')
    # output must be an xarray DataArray
    assert isinstance(default_prox, xa.DataArray)
    assert type(default_prox.values[0][0]) == np.float64
    assert default_prox.shape == raster_for_default.shape

    # crs tests
    assert default_prox.attrs == raster_for_default.attrs
    for coord in raster_for_default.coords:
        assert np.all(default_prox[coord] == raster_for_default[coord])

    # in this test case, where no polygon is completely inside another polygon,
    # number of non-zeros (target pixels) in original image
    # must be equal to the number of zeros (target pixels) in proximity matrix
    assert len(np.where((raster.data != 0) & np.isfinite(raster.data))[0]) == \
        len(np.where(default_prox.data == 0)[0])

    # TARGET VALUES SETTING
    target_values = [2, 3]
    target_prox = proximity(raster,
                            x='lon',
                            y='lat',
                            target_values=target_values)
    # output must be an xarray DataArray
    assert isinstance(target_prox, xa.DataArray)
    assert type(target_prox.values[0][0]) == np.float64
    assert target_prox.shape == raster.shape
    assert (len(np.where(raster.data == 2)[0]) +
            len(np.where(raster.data == 3)[0])) == \
        len(np.where(target_prox.data == 0)[0])

    # distance_metric SETTING: MANHATTAN
    manhattan_prox = proximity(raster,
                               x='lon',
                               y='lat',
                               distance_metric='MANHATTAN')
    # output must be an xarray DataArray
    assert isinstance(manhattan_prox, xa.DataArray)
    assert type(manhattan_prox.values[0][0]) == np.float64
    assert manhattan_prox.shape == raster.shape
    # all output values must be in range [0, max_possible_dist]
    max_possible_dist = manhattan_distance(raster.coords['lon'].values[0],
                                           raster.coords['lon'].values[-1],
                                           raster.coords['lat'].values[0],
                                           raster.coords['lat'].values[-1])
    assert np.nanmax(manhattan_prox.values) <= max_possible_dist
    assert np.nanmin(manhattan_prox.values) == 0

    # distance_metric SETTING: GREAT_CIRCLE
    great_circle_prox = proximity(raster,
                                  x='lon',
                                  y='lat',
                                  distance_metric='GREAT_CIRCLE')
    # output must be an xarray DataArray
    assert isinstance(great_circle_prox, xa.DataArray)
    assert type(great_circle_prox.values[0][0]) == np.float64
    assert great_circle_prox.shape == raster.shape
    # all output values must be in range [0, max_possible_dist]
    max_possible_dist = great_circle_distance(raster.coords['lon'].values[0],
                                              raster.coords['lon'].values[-1],
                                              raster.coords['lat'].values[0],
                                              raster.coords['lat'].values[-1])
    assert np.nanmax(great_circle_prox.values) <= max_possible_dist
    assert np.nanmin(great_circle_prox.values) == 0
Exemplo n.º 13
0
def test_default_proximity(test_raster, result_default_proximity):
    default_prox = proximity(test_raster, x='lon', y='lat')
    general_output_checks(test_raster,
                          default_prox,
                          result_default_proximity,
                          verify_dtype=True)