def test_progress_cbk(): crs = epsg4326 shape = (2, 2) no_data = -1 output_data = np.full(shape, fill_value=no_data, dtype='int16') src = FakeDatasetSource([[2, 2], [2, 2]], crs=crs, shape=shape) def _cbk(n_so_far, n_total, out): out.append((n_so_far, n_total)) cbk_args = [] reproject_and_fuse([src], output_data, mk_gbox(shape, crs=crs), dst_nodata=no_data, progress_cbk=lambda *a: _cbk(*a, cbk_args)) assert cbk_args == [(1, 1)] cbk_args = [] reproject_and_fuse([src, src], output_data, mk_gbox(shape, crs=crs), dst_nodata=no_data, progress_cbk=lambda *a: _cbk(*a, cbk_args)) assert cbk_args == [(1, 2), (2, 2)]
def _fuse_measurement(dest, datasets, geobox, measurement, skip_broken_datasets=False, progress_cbk=None, extra_dim_index=None): srcs = [] for ds in datasets: src = None with ignore_exceptions_if(skip_broken_datasets): src = new_datasource( BandInfo(ds, measurement.name, extra_dim_index=extra_dim_index)) if src is None: if not skip_broken_datasets: raise ValueError(f"Failed to load dataset: {ds.id}") else: srcs.append(src) reproject_and_fuse(srcs, dest, geobox, dest.dtype.type(measurement.nodata), resampling=measurement.get('resampling_method', 'nearest'), fuse_func=measurement.get('fuser', None), skip_broken_datasets=skip_broken_datasets, progress_cbk=progress_cbk, extra_dim_index=extra_dim_index)
def test_read_from_broken_source(): crs = epsg4326 shape = (2, 2) no_data = -1 source1 = FakeDatasetSource(value=[[1, 1], [no_data, no_data]], crs=crs, band_source_class=BrokenBandDataSource) source2 = FakeDatasetSource(value=[[2, 2], [2, 2]], crs=crs) sources = [source1, source2] output_data = np.full(shape, fill_value=no_data, dtype='int16') gbox = mk_gbox(shape, crs=crs) # Check exception is raised with pytest.raises(OSError): reproject_and_fuse(sources, output_data, gbox, dst_nodata=no_data) # Check can ignore errors reproject_and_fuse(sources, output_data, gbox, dst_nodata=no_data, skip_broken_datasets=True) assert (output_data == [[2, 2], [2, 2]]).all()
def test_when_input_empty(): shape = (2, 2) no_data = -1 out = np.full(shape, fill_value=no_data, dtype='int16') reproject_and_fuse([], out, mk_gbox(shape, crs=epsg4326), dst_nodata=no_data) assert (out == no_data).all()
def _fuse_measurement(dest, datasets, geobox, measurement, skip_broken_datasets=False, progress_cbk=None): reproject_and_fuse([new_datasource(BandInfo(dataset, measurement.name)) for dataset in datasets], dest, geobox, dest.dtype.type(measurement.nodata), resampling=measurement.get('resampling_method', 'nearest'), fuse_func=measurement.get('fuser', None), skip_broken_datasets=skip_broken_datasets, progress_cbk=progress_cbk)
def test_mixed_result_when_first_source_partially_empty(): crs = epsg4326 shape = (2, 2) no_data = -1 source1 = FakeDatasetSource([[1, 1], [no_data, no_data]], crs=crs) source2 = FakeDatasetSource([[2, 2], [2, 2]], crs=crs) sources = [source1, source2] output_data = np.full(shape, fill_value=no_data, dtype='int16') reproject_and_fuse(sources, output_data, mk_gbox(shape, crs=crs), dst_nodata=no_data) assert (output_data == [[1, 1], [2, 2]]).all()
def test_second_source_used_when_first_is_empty(): crs = epsg4326 shape = (2, 2) no_data = -1 source1 = FakeDatasetSource([[-1, -1], [-1, -1]], crs=crs, shape=shape) source2 = FakeDatasetSource([[2, 2], [2, 2]], crs=crs, shape=shape) sources = [source1, source2] output_data = np.full(shape, fill_value=no_data, dtype='int16') reproject_and_fuse(sources, output_data, mk_gbox(shape, crs=crs), dst_nodata=no_data) assert (output_data == 2).all()
def test_first_source_is_priority_in_reproject_and_fuse(): crs = epsg4326 shape = (2, 2) no_data = -1 source1 = FakeDatasetSource([[1, 1], [1, 1]], crs=crs, shape=shape) source2 = FakeDatasetSource([[2, 2], [2, 2]], crs=crs, shape=shape) sources = [source1, source2] output_data = np.full(shape, fill_value=no_data, dtype='int16') reproject_and_fuse(sources, output_data, mk_gbox(shape, crs=crs), dst_nodata=no_data) assert (output_data == 1).all()