def test_savi():

    max_val = 2**16 - 1

    arr1 = np.array([[max_val, max_val, max_val, max_val],
                     [max_val, 1000.0, 1000.0, max_val],
                     [max_val, 1000.0, 1000.0, max_val],
                     [max_val, 1000.0, 1000.0, max_val],
                     [max_val, max_val, max_val, max_val]],
                    dtype=np.float64)

    arr2 = np.array(
        [[100.0, 100.0, 100.0, 100.0], [100.0, max_val, max_val, 100.0],
         [100.0, max_val, max_val, 100.0], [100.0, max_val, max_val, 100.0],
         [100.0, 100.0, 100.0, 100.0]],
        dtype=np.float64)

    nir = create_test_arr(arr1)
    red = create_test_arr(arr2)

    # savi should be same as ndvi at soil_factor=0
    result_savi = savi(nir, red, soil_factor=0.0)
    result_ndvi = ndvi(nir, red)

    assert (result_savi.data == result_ndvi.data).all()
    assert result_savi.dims == nir.dims

    result_savi = savi(nir, red, soil_factor=1.0)
    assert isinstance(result_savi, xa.DataArray)
    assert result_savi.dims == nir.dims
Exemple #2
0
def test_savi_cpu_equals_gpu():
    nir = create_test_arr(arr1)
    red = create_test_arr(arr2)

    # savi should be same as ndvi at soil_factor=0
    cpu = savi(nir, red, soil_factor=0.0, use_cuda=False)
    gpu = savi(nir, red, soil_factor=0.0, use_cuda=True)
    assert np.isclose(cpu, gpu, equal_nan=True).all()
def test_savi_gpu():
    # cupy
    nir_cupy = create_test_arr(nir_data, backend='cupy')
    red_cupy = create_test_arr(red_data, backend='cupy')
    cupy_result = savi(nir_cupy, red_cupy)
    general_output_checks(nir_cupy, cupy_result, savi_expected_results)

    # dask + cupy
    nir_dask_cupy = create_test_arr(nir_data, backend='dask+cupy')
    red_dask_cupy = create_test_arr(red_data, backend='dask+cupy')
    dask_cupy_result = savi(nir_dask_cupy, red_dask_cupy)
    general_output_checks(nir_dask_cupy, dask_cupy_result,
                          savi_expected_results)
Exemple #4
0
def test_savi_dask_cupy_equals_numpy():
    # vanilla numpy version
    nir = create_test_arr(arr1)
    red = create_test_arr(arr2)
    numpy_result = savi(nir, red)

    # dask + cupy
    nir_dask_cupy = create_test_arr(arr1, backend='dask+cupy')
    red_dask_cupy = create_test_arr(arr2, backend='dask+cupy')
    test_result = savi(nir_dask_cupy, red_dask_cupy)

    assert is_dask_cupy(test_result)
    test_result.data = test_result.data.compute()
    assert np.isclose(numpy_result, test_result, equal_nan=True).all()
Exemple #5
0
def test_savi_dask_equals_numpy():
    # vanilla numpy version
    nir = create_test_arr(arr1)
    red = create_test_arr(arr2)
    numpy_result = savi(nir, red)

    # dask
    nir_dask = create_test_arr(arr1, backend='dask')
    red_dask = create_test_arr(arr2, backend='dask')
    test_result = savi(nir_dask, red_dask)

    assert isinstance(test_result.data, da.Array)
    test_result.data = test_result.data.compute()
    assert np.isclose(numpy_result, test_result, equal_nan=True).all()
Exemple #6
0
def test_savi_numpy():
    nir = create_test_arr(arr1)
    red = create_test_arr(arr2)

    # savi should be same as ndvi at soil_factor=0
    result_savi = savi(nir, red, soil_factor=0.0)
    result_ndvi = ndvi(nir, red)

    assert np.isclose(result_savi.data, result_ndvi.data, equal_nan=True).all()
    assert result_savi.dims == nir.dims

    result_savi = savi(nir, red, soil_factor=1.0)
    assert isinstance(result_savi, xa.DataArray)
    assert result_savi.dims == nir.dims
Exemple #7
0
def test_savi_cupy_equals_numpy():

    import cupy

    # vanilla numpy version
    nir = create_test_arr(arr1)
    red = create_test_arr(arr2)
    numpy_result = savi(nir, red)

    # dask + cupy
    nir_cupy = create_test_arr(arr1, backend='cupy')
    red_cupy = create_test_arr(arr2, backend='cupy')
    test_result = savi(nir_cupy, red_cupy)

    assert isinstance(test_result.data, cupy.ndarray)
    assert np.isclose(numpy_result, test_result, equal_nan=True).all()
def test_savi_cpu():
    nir_numpy = create_test_arr(nir_data)
    red_numpy = create_test_arr(red_data)

    # savi should be same as ndvi at soil_factor=0
    result_savi = savi(nir_numpy, red_numpy, soil_factor=0.0)
    result_ndvi = ndvi(nir_numpy, red_numpy)
    assert np.isclose(result_savi.data, result_ndvi.data, equal_nan=True).all()

    # test default savi where soil_factor = 1.0
    numpy_result = savi(nir_numpy, red_numpy, soil_factor=1.0)
    general_output_checks(nir_numpy, numpy_result, savi_expected_results)

    # dask
    nir_dask = create_test_arr(nir_data, backend='dask')
    red_dask = create_test_arr(red_data, backend='dask')
    dask_result = savi(nir_dask, red_dask)
    general_output_checks(nir_dask, dask_result, savi_expected_results)
def test_savi_numpy():
    nir = create_test_arr(arr1)

    # add crs for tests
    nir = _add_EPSG4326_crs_to_da(nir)

    red = create_test_arr(arr2)

    # savi should be same as ndvi at soil_factor=0
    result_savi = savi(nir, red, soil_factor=0.0)
    result_ndvi = ndvi(nir, red)

    assert np.isclose(result_savi.data, result_ndvi.data, equal_nan=True).all()
    assert result_savi.dims == nir.dims

    result_savi = savi(nir, red, soil_factor=1.0)
    assert isinstance(result_savi, xa.DataArray)
    assert result_savi.dims == nir.dims

    # crs tests
    assert result_savi.attrs == nir.attrs
    for coord in nir.coords:
        assert np.all(result_savi[coord] == nir[coord])
 def time_savi(self, nx, type):
     savi(self.nir, self.red)
def test_savi_gpu(nir_data, red_data, result_savi):
    # test default savi where soil_factor = 1.0
    result = savi(nir_data, red_data, soil_factor=1.0)
    general_output_checks(nir_data, result, result_savi)
def test_savi_zero_soil_factor_gpu(nir_data, red_data, result_ndvi):
    # savi should be same as ndvi at soil_factor=0
    result_savi = savi(nir_data, red_data, soil_factor=0.0)
    general_output_checks(nir_data, result_savi, result_ndvi, verify_dtype=True)