def test_read_from_broken_source(): crs = geometry.CRS('EPSG:4326') 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') # Check exception is raised with pytest.raises(OSError): reproject_and_fuse(sources, output_data, dst_transform=identity, dst_projection=crs, dst_nodata=no_data) # Check can ignore errors reproject_and_fuse(sources, output_data, dst_transform=identity, dst_projection=crs, dst_nodata=no_data, skip_broken_datasets=True) assert (output_data == [[2, 2], [2, 2]]).all()
def test_read_from_broken_source(): crs = mock.MagicMock() shape = (2, 2) no_data = -1 source1 = _mock_datasetsource([[1, 1], [no_data, no_data]], crs=crs, shape=shape) source2 = _mock_datasetsource([[2, 2], [2, 2]], crs=crs, shape=shape) sources = [source1, source2] rio_reader = source1.open.return_value.__enter__.return_value rio_reader.read.side_effect = OSError('Read or write failed') output_data = numpy.full(shape, fill_value=no_data, dtype='int16') # Check exception is raised with pytest.raises(OSError): reproject_and_fuse(sources, output_data, dst_transform=identity, dst_projection=crs, dst_nodata=no_data) # Check can ignore errors reproject_and_fuse(sources, output_data, dst_transform=identity, dst_projection=crs, dst_nodata=no_data, skip_broken_datasets=True) assert (output_data == [[2, 2], [2, 2]]).all()
def _fuse_measurement(dest, datasets, geobox, measurement, skip_broken_datasets=False, fuse_func=None): reproject_and_fuse([new_datasource(dataset, measurement['name']) for dataset in datasets], dest, geobox.affine, geobox.crs, dest.dtype.type(measurement['nodata']), resampling=measurement.get('resampling_method', 'nearest'), fuse_func=fuse_func, skip_broken_datasets=skip_broken_datasets)
def test_mixed_result_when_first_source_partially_empty(): crs = mock.MagicMock() shape = (2, 2) no_data = -1 source1 = _mock_datasetsource([[1, 1], [no_data, no_data]], crs=crs, shape=shape) source2 = _mock_datasetsource([[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, dst_transform=identity, dst_projection=crs, dst_nodata=no_data) assert (output_data == [[1, 1], [2, 2]]).all()
def test_second_source_used_when_first_is_empty(): crs = mock.MagicMock() shape = (2, 2) no_data = -1 source1 = _mock_datasetsource([[-1, -1], [-1, -1]], crs=crs, shape=shape) source2 = _mock_datasetsource([[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, dst_transform=identity, dst_projection=crs, dst_nodata=no_data) assert (output_data == 2).all()
def test_first_source_is_priority_in_reproject_and_fuse(): crs = geometry.CRS('EPSG:4326') 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, dst_transform=identity, dst_projection=crs, dst_nodata=no_data) assert (output_data == 1).all()
def test_mixed_result_when_first_source_partially_empty_with_nan_nodata(): crs = geometry.CRS('EPSG:4326') shape = (2, 2) no_data = np.nan 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='float64') reproject_and_fuse(sources, output_data, dst_transform=identity, dst_projection=crs, dst_nodata=no_data) assert (output_data == [[1, 1], [2, 2]]).all()
def test_first_source_is_priority_in_reproject_and_fuse(): crs = mock.MagicMock() shape = (2, 2) no_data = -1 source1 = _mock_datasetsource([[1, 1], [1, 1]], crs=crs, shape=shape) source2 = _mock_datasetsource([[2, 2], [2, 2]], crs=crs, shape=shape) sources = [source1, source2] output_data = numpy.full(shape, fill_value=no_data, dtype='int16') reproject_and_fuse(sources, output_data, dst_transform=identity, dst_projection=crs, dst_nodata=no_data) assert (output_data == 1).all()