Example #1
0
def test_block_median(input_dataarray):
    coarsening_factor = 2
    block_sizes = {"x": coarsening_factor, "y": coarsening_factor, "z": 1}
    expected = _xarray_block_reduce_dataarray(input_dataarray, block_sizes,
                                              np.median)
    result = block_median(input_dataarray, coarsening_factor, "x", "y")
    assert_identical_including_dtype(result, expected)
Example #2
0
def test_xarray_block_reduce_dataarray(reduction_function, use_dask,
                                       input_dataarray, regtest):
    if use_dask:
        input_dataarray = input_dataarray.chunk({"x": 2, "y": 2, "z": -1})
    block_sizes = {"x": 2, "y": 2}
    result = _xarray_block_reduce_dataarray(input_dataarray, block_sizes,
                                            reduction_function)
    print(vcm.testing.checksum_dataarray(result), file=regtest)
    for coord in result.coords:
        print(np.asarray(result[coord]), file=regtest)
    # This ensures the metadata is correct
    result.to_dataset(name="a").info(regtest)
Example #3
0
def test_horizontal_block_reduce_dataset(input_dataset):
    coarsening_factor = 2
    block_sizes = {"x": coarsening_factor, "y": coarsening_factor, "z": 1}

    expected_foo = _xarray_block_reduce_dataarray(input_dataset.foo,
                                                  block_sizes, np.median)

    # No change expected to bar, because it contains no horizontal dimensions.
    expected_bar = input_dataset.bar
    expected = xr.merge([expected_foo, expected_bar]).assign_attrs(test="a")

    result = horizontal_block_reduce(input_dataset, coarsening_factor,
                                     np.median, "x", "y")

    assert_identical_including_dtype(result, expected)
Example #4
0
def test_block_reduce_dataarray_coordinates(input_dataarray, coord_func):
    # Add coordinates to the input_dataarray; make sure coordinate behavior
    # matches xarray's default for coarsen.  This ensures that the
    # coordinate transformation behavior for any function that depends on
    # _block_reduce_dataarray matches that for xarray's coarsen.
    for dim, size in input_dataarray.sizes.items():
        input_dataarray[dim] = np.arange(size)

    block_sizes = {"x": 2, "y": 2}
    result = _xarray_block_reduce_dataarray(input_dataarray,
                                            block_sizes,
                                            np.median,
                                            coord_func=coord_func)
    expected = (input_dataarray.coarsen(
        x=2, y=2, coord_func=coord_func).median().rename(
            input_dataarray.name).assign_attrs({"units": "m"}))
    assert_identical_including_dtype(result, expected)
Example #5
0
def test_xarray_block_reduce_dataarray_bad_chunk_size(input_dataarray):
    input_dataarray = input_dataarray.chunk({"x": -1, "y": 3, "z": -1})
    block_sizes = {"x": 1, "y": 2, "z": 1}
    with pytest.raises(ValueError, match="All chunks along dimension"):
        _xarray_block_reduce_dataarray(input_dataarray, block_sizes, np.median)