def test_generate_epipolar_grids(): """ Test generate_epipolar_grids method """ img1 = absolute_data_path("input/phr_ventoux/left_image.tif") img2 = absolute_data_path("input/phr_ventoux/right_image.tif") dem = absolute_data_path("input/phr_ventoux/srtm") left_grid, right_grid, size_x, size_y, baseline = preprocessing.generate_epipolar_grids( img1, img2, dem) assert size_x == 612 assert size_y == 612 assert baseline == 0.7039416432380676 # Uncomment to update baseline # left_grid.to_netcdf(absolute_data_path("ref_output/left_grid.nc")) left_grid_ref = xr.open_dataset( absolute_data_path("ref_output/left_grid.nc")) assert_same_datasets(left_grid, left_grid_ref) # Uncomment to update baseline # right_grid.to_netcdf(absolute_data_path("ref_output/right_grid.nc")) right_grid_ref = xr.open_dataset( absolute_data_path("ref_output/right_grid.nc")) assert_same_datasets(right_grid, right_grid_ref)
def test_images_pair_to_3d_points(images_and_grids_conf, color1_conf, no_data_conf, disparities_conf, epipolar_origins_spacings_conf, epipolar_sizes_conf): """ Test images_pair_to_3d_points on ventoux dataset (epipolar geometry) with Pandora """ # With nodata and color configuration = images_and_grids_conf configuration["input"].update(color1_conf["input"]) configuration["input"].update(no_data_conf["input"]) configuration["preprocessing"]["output"].update(epipolar_sizes_conf["preprocessing"]["output"]) configuration["preprocessing"]["output"].update(epipolar_origins_spacings_conf["preprocessing"]["output"]) configuration["preprocessing"]["output"].update(disparities_conf["preprocessing"]["output"]) region = [420, 200, 530, 320] # Pandora configuration corr_cfg = create_corr_conf() cloud, color = stereo.images_pair_to_3d_points(configuration, region, corr_cfg, disp_min=-13, disp_max=14) # Uncomment to update baseline #cloud['ref'].to_netcdf(absolute_data_path("ref_output/cloud1_ref_pandora.nc")) ref = xr.open_dataset(absolute_data_path("ref_output/cloud1_ref_pandora.nc")) assert_same_datasets(cloud['ref'],ref,atol=1.e-3)
def test_simple_rasterization_dataset_2(): cloud = xr.open_dataset( absolute_data_path("input/intermediate_results/cloud1_ref.nc")) color = xr.open_dataset( absolute_data_path("input/intermediate_results/data1_ref_clr.nc")) utm = projection.points_cloud_conversion_dataset(cloud, 32630) xstart = None ystart = None xsize = None ysize = None resolution = 0.5 raster = rasterization.simple_rasterization_dataset([utm], resolution, 32630, [color], xstart, ystart, xsize, ysize, 0.3, 3) # Uncomment to update references # raster.to_netcdf( # absolute_data_path('ref_output/rasterization_res_ref_2.nc'), # ) raster_ref = xr.open_dataset( absolute_data_path("ref_output/rasterization_res_ref_2.nc")) assert_same_datasets(raster, raster_ref, atol=1.e-10, rtol=1.e-10)
def test_resample_image(): """ Test resample image method """ region = [387, 180, 564, 340] img = absolute_data_path('input/phr_ventoux/left_image.tif') nodata = 0 grid = absolute_data_path('input/stereo_input/left_epipolar_grid.tif') epipolar_size_x = 612 epipolar_size_y = 612 test_dataset = stereo.resample_image( img, grid, [ epipolar_size_x, epipolar_size_y], region=region, nodata=nodata) # For convenience we use same reference as test_epipolar_rectify_images_1 ref_dataset = xr.open_dataset(absolute_data_path( "ref_output/data1_ref_left.nc")) # We need to remove attributes that are not generated by resample_image # method ref_dataset.attrs.pop(cst.ROI, None) ref_dataset.attrs.pop(cst.EPI_MARGINS, None) ref_dataset.attrs.pop(cst.EPI_DISP_MIN, None) ref_dataset.attrs.pop(cst.EPI_DISP_MAX, None) ref_dataset.attrs['region'] = ref_dataset.attrs[cst.ROI_WITH_MARGINS] ref_dataset.attrs.pop(cst.ROI_WITH_MARGINS, None) assert_same_datasets(test_dataset, ref_dataset)
def test_compute_disparity_1_msk_ref(): """ Test compute_disparity on ventoux dataset with pandora """ left_input = xr.open_dataset(absolute_data_path("input/intermediate_results/data1_ref_left_masked.nc")) right_input = xr.open_dataset(absolute_data_path("input/intermediate_results/data1_ref_right.nc")) # Pandora configuration corr_cfg = create_corr_conf() disp_min = -13 disp_max = 14 output = stereo.compute_disparity(left_input, right_input, corr_cfg, disp_min, disp_max, verbose = True) assert output['ref']['disp'].shape == (120, 110) assert output['ref']['msk'].shape == (120, 110) np.testing.assert_allclose(output['ref'].attrs["roi"], np.array([420, 200, 530, 320])) # Uncomment to update baseline #output['ref'].to_netcdf(absolute_data_path("ref_output/disp1_ref_pandora_msk_ref.nc")) #output['sec'].to_netcdf(absolute_data_path("ref_output/disp1_sec_pandora_msk_ref.nc")) ref = xr.open_dataset(absolute_data_path("ref_output/disp1_ref_pandora_msk_ref.nc")) assert_same_datasets(output['ref'],ref,atol=5.e-6) sec = xr.open_dataset(absolute_data_path("ref_output/disp1_sec_pandora_msk_ref.nc")) assert_same_datasets(output['sec'], sec, atol=5.e-6)
def test_simple_rasterization_dataset_2(): """ Test simple rasterization dataset from test cloud cloud1_ref_epsg_32630.nc Configuration 2 : no xstart, ystart, xsize, ysize values """ cloud = xr.open_dataset( absolute_data_path( "input/rasterization_input/cloud1_ref_epsg_32630.nc")) color = xr.open_dataset( absolute_data_path("input/intermediate_results/data1_ref_clr.nc")) xstart = None ystart = None xsize = None ysize = None resolution = 0.5 raster = rasterization.simple_rasterization_dataset([cloud], resolution, 32630, [color], xstart, ystart, xsize, ysize, 0.3, 3) # Uncomment to update references # raster.to_netcdf( # absolute_data_path('ref_output/rasterization_res_ref_2.nc'), # ) raster_ref = xr.open_dataset( absolute_data_path("ref_output/rasterization_res_ref_2.nc")) assert_same_datasets(raster, raster_ref, atol=1.e-10, rtol=1.e-10)
def test_resample_image(): """ Test resample image method """ region = [387, 180, 564, 340] img = absolute_data_path('input/phr_ventoux/left_image.tif') nodata = 0 grid = absolute_data_path('input/stereo_input/left_epipolar_grid.tif') epipolar_size_x = 612 epipolar_size_y = 612 ds = stereo.resample_image( img, grid, [ epipolar_size_x, epipolar_size_y], region=region, nodata=nodata) # For convenience we use same reference as test_epipolar_rectify_images_1 ref_ds = xr.open_dataset(absolute_data_path( "ref_output/data1_ref_left.nc")) # We need to remove attributes that are not generated by resample_image # method ref_ds.attrs.pop('roi', None) ref_ds.attrs.pop('margins', None) ref_ds.attrs.pop('disp_min', None) ref_ds.attrs.pop('disp_max', None) ref_ds.attrs['region'] = ref_ds.attrs['roi_with_margins'] ref_ds.attrs.pop('roi_with_margins', None) assert_same_datasets(ds, ref_ds)
def test_simple_rasterization_single(): """ Test simple rasterization from test cloud ref_single_cloud_in_df.nc """ resolution = 0.5 cloud_xr = xr.open_dataset( absolute_data_path( 'input/rasterization_input/ref_single_cloud_in_df.nc')) cloud_df = cloud_xr.to_dataframe() xstart, ystart, xsize, ysize = \ rasterization.compute_xy_starts_and_sizes(resolution, cloud_df) raster = rasterization.\ rasterize( cloud_df, resolution, 32630, xstart, ystart, xsize, ysize, 0.3, 3, hgt_no_data=np.nan, color_no_data=np.nan) # Uncomment to update references # raster.to_netcdf( # absolute_data_path('ref_output/ref_simple_rasterization.nc'), # ) ref_rasterized = xr.open_dataset( absolute_data_path("ref_output/ref_simple_rasterization.nc")) assert_same_datasets(raster, ref_rasterized, atol=1.e-10, rtol=1.e-10)
def test_generate_epipolar_grids_default_alt(): """ Test generate_epipolar_grids method """ img1 = absolute_data_path("input/phr_ventoux/left_image.tif") img2 = absolute_data_path("input/phr_ventoux/right_image.tif") dem = None default_alt = 500 left_grid, right_grid, size_x, size_y, baseline = \ generate_epipolar_grids( img1, img2, dem, default_alt) assert size_x == 612 assert size_y == 612 assert baseline == 0.7039446234703064 # Uncomment to update baseline # left_grid.to_netcdf(absolute_data_path( # "ref_output/left_grid_default_alt.nc")) left_grid_ref = xr.open_dataset( absolute_data_path("ref_output/left_grid_default_alt.nc")) assert_same_datasets(left_grid, left_grid_ref) # Uncomment to update baseline # right_grid.to_netcdf(absolute_data_path( # "ref_output/right_grid_default_alt.nc")) right_grid_ref = xr.open_dataset( absolute_data_path("ref_output/right_grid_default_alt.nc")) assert_same_datasets(right_grid, right_grid_ref)
def test_compute_disparity_1_msk_sec( images_and_grids_conf): #pylint: disable=redefined-outer-name """ Test compute_disparity on ventoux dataset with pandora """ left_input = xr.open_dataset( absolute_data_path( "input/intermediate_results/data1_ref_left.nc")) right_input = xr.open_dataset( absolute_data_path( "input/intermediate_results/data1_ref_right_masked.nc")) conf = deepcopy(images_and_grids_conf) conf['input']['mask2_classes'] = absolute_data_path( "input/intermediate_results/data1_ref_right_mask_classes.json") # Pandora configuration corr_cfg = create_corr_conf() disp_min = -13 disp_max = 14 output = stereo.compute_disparity(left_input, right_input, conf, corr_cfg, disp_min, disp_max, verbose=True) assert output[cst.STEREO_REF][cst.DISP_MAP].shape == (120, 110) assert output[cst.STEREO_REF][cst.DISP_MSK].shape == (120, 110) assert output[cst.STEREO_SEC][cst.DISP_MAP].shape == (160, 177) assert output[cst.STEREO_SEC][cst.DISP_MSK].shape == (160, 177) np.testing.assert_allclose( output[cst.STEREO_REF].attrs[cst.ROI], np.array([420, 200, 530, 320])) np.testing.assert_allclose( output[cst.STEREO_SEC].attrs[cst.ROI], np.array([420, 200, 530, 320])) np.testing.assert_allclose( output[cst.STEREO_SEC].attrs[cst.ROI_WITH_MARGINS], np.array([387, 180, 564, 340])) # Uncomment to update baseline # output[cst.STEREO_REF].to_netcdf(absolute_data_path( # "ref_output/disp1_ref_pandora_msk_sec.nc")) # output[cst.STEREO_SEC].to_netcdf(absolute_data_path( # "ref_output/disp1_sec_pandora_msk_sec.nc")) ref = xr.open_dataset( absolute_data_path( "ref_output/disp1_ref_pandora_msk_sec.nc")) assert_same_datasets(output[cst.STEREO_REF],ref,atol=5.e-6) sec = xr.open_dataset( absolute_data_path( "ref_output/disp1_sec_pandora_msk_sec.nc")) assert_same_datasets(output[cst.STEREO_SEC], sec, atol=5.e-6)
def test_compute_disparity_3( images_and_grids_conf): #pylint: disable=redefined-outer-name """ Test compute_disparity on paca dataset with pandora """ left_input = xr.open_dataset(absolute_data_path( "input/intermediate_results/data3_ref_left.nc")) right_input = xr.open_dataset(absolute_data_path( "input/intermediate_results/data3_ref_right.nc")) # Pandora configuration corr_cfg = create_corr_conf() disp_min = -43 disp_max = 41 output = stereo.compute_disparity(left_input, right_input, images_and_grids_conf, corr_cfg, disp_min, disp_max) assert output[cst.STEREO_REF][cst.DISP_MAP].shape == (90, 90) assert output[cst.STEREO_REF][cst.DISP_MSK].shape == (90, 90) assert output[cst.STEREO_SEC][cst.DISP_MAP].shape == (170, 254) assert output[cst.STEREO_SEC][cst.DISP_MSK].shape == (170, 254) np.testing.assert_allclose( output[cst.STEREO_REF].attrs[cst.ROI], np.array([16500, 23160, 16590, 23250])) np.testing.assert_allclose( output[cst.STEREO_SEC].attrs[cst.ROI], np.array([16500, 23160, 16590, 23250])) np.testing.assert_allclose( output[cst.STEREO_SEC].attrs[cst.ROI_WITH_MARGINS], np.array([16417, 23120, 16671, 23290])) # Uncomment to update baseline # output[cst.STEREO_REF].to_netcdf(absolute_data_path( # "ref_output/disp3_ref_pandora.nc")) # output[cst.STEREO_SEC].to_netcdf(absolute_data_path( # "ref_output/disp3_sec_pandora.nc")) ref = xr.open_dataset(absolute_data_path( "ref_output/disp3_ref_pandora.nc")) assert_same_datasets(output[cst.STEREO_REF], ref, atol=5.e-6) sec = xr.open_dataset(absolute_data_path( "ref_output/disp3_sec_pandora.nc")) assert_same_datasets(output[cst.STEREO_SEC], sec, atol=5.e-6)
def test_triangulation_1(images_and_grids_conf): """ Test triangulation ventoux dataset """ input = xr.open_dataset(absolute_data_path( "input/intermediate_results/disp1_ref.nc")) output = stereo.triangulate(images_and_grids_conf, input, None) assert output['ref']['x'].shape == (120, 110) # Uncomment to update baseline #output['ref'].to_netcdf(absolute_data_path("ref_output/triangulation1_ref.nc")) ref = xr.open_dataset(absolute_data_path( "ref_output/triangulation1_ref.nc")) assert_same_datasets(output['ref'], ref, atol=1.e-3)
def test_triangulation_1( images_and_grids_conf): #pylint: disable=redefined-outer-name """ Test triangulation ventoux dataset """ disp1_ref = xr.open_dataset(absolute_data_path( "input/intermediate_results/disp1_ref.nc")) point_cloud_dict = stereo.triangulate( images_and_grids_conf, disp1_ref, None) assert point_cloud_dict[cst.STEREO_REF][cst.X].shape == (120, 110) # Uncomment to update baseline # output[cst.STEREO_REF].to_netcdf( # absolute_data_path("ref_output/triangulation1_ref.nc")) ref = xr.open_dataset(absolute_data_path( "ref_output/triangulation1_ref.nc")) assert_same_datasets(point_cloud_dict[cst.STEREO_REF], ref, atol=1.e-3)
def test_compute_disparity_3(): """ Test compute_disparity on paca dataset with pandora """ left_input = xr.open_dataset(absolute_data_path( "input/intermediate_results/data3_ref_left.nc")) right_input = xr.open_dataset(absolute_data_path( "input/intermediate_results/data3_ref_right.nc")) # Pandora configuration corr_cfg = create_corr_conf() disp_min = -43 disp_max = 41 output = stereo.compute_disparity(left_input, right_input, corr_cfg, disp_min, disp_max) assert output['ref']['disp'].shape == (90, 90) assert output['ref']['msk'].shape == (90, 90) assert output['sec']['disp'].shape == (170, 254) assert output['sec']['msk'].shape == (170, 254) np.testing.assert_allclose(output['ref'].attrs["roi"], np.array([16500, 23160, 16590, 23250])) np.testing.assert_allclose(output['sec'].attrs["roi"], np.array([16500, 23160, 16590, 23250])) np.testing.assert_allclose(output['sec'].attrs["roi_with_margins"], np.array([16417, 23120, 16671, 23290])) # Uncomment to update baseline #output['ref'].to_netcdf(absolute_data_path("ref_output/disp3_ref_pandora.nc")) #output['sec'].to_netcdf(absolute_data_path("ref_output/disp3_sec_pandora.nc")) ref = xr.open_dataset(absolute_data_path( "ref_output/disp3_ref_pandora.nc")) assert_same_datasets(output['ref'], ref, atol=5.e-6) sec = xr.open_dataset(absolute_data_path( "ref_output/disp3_sec_pandora.nc")) assert_same_datasets(output['sec'], sec, atol=5.e-6)
def test_read_lowres_dem(): """ Test read_lowres_dem function """ dem = absolute_data_path("input/phr_ventoux/srtm") startx = 5.193458 starty = 44.206671 sizex = 100 sizey = 100 srtm_ds = preprocessing.read_lowres_dem(dem, startx, starty, sizex, sizey) # Uncomment to update baseline #srtm_ds.to_netcdf(absolute_data_path("ref_output/srtm_xt.nc")) srtm_ds_ref = xr.open_dataset( absolute_data_path("ref_output/srtm_xt.nc")) assert_same_datasets(srtm_ds, srtm_ds_ref) print(srtm_ds)
def test_update_disp_to_0_no_tags_in_jsons( ref_ds, sec_ds, ref_disp, sec_disp): #pylint: disable=redefined-outer-name """Tests update disp to 0 with an empty dict""" # disp dictionary disp = { cst.STEREO_REF: ref_disp, cst.STEREO_SEC: sec_disp } # test disp_no_tags_in_json = deepcopy(disp) matching_regularisation.update_disp_to_0( disp_no_tags_in_json, ref_ds, sec_ds, absolute_data_path( "input/matching_regularisation_input/mask_no_set_to_ref_alt_classes.json"), absolute_data_path( "input/matching_regularisation_input/mask_no_set_to_ref_alt_classes.json")) assert_same_datasets(disp_no_tags_in_json[cst.STEREO_REF], disp[cst.STEREO_REF]) assert_same_datasets(disp_no_tags_in_json[cst.STEREO_SEC], disp[cst.STEREO_SEC])
def test_simple_rasterization_multiple_datasets(): """ Test simple_rasterization_dataset with a list of datasets """ cloud = xr.open_dataset( absolute_data_path("input/intermediate_results/cloud1_ref.nc")) color = xr.open_dataset( absolute_data_path("input/intermediate_results/data1_ref_clr.nc")) utm = projection.points_cloud_conversion_dataset(cloud, 32630) utm1 = utm.isel(row=range(0, 60)) utm2 = utm.isel(row=range(60, 120)) color1 = color.isel(row=range(0, 60)) color2 = color.isel(row=range(60, 120)) xstart = 1154790 ystart = 4927552 xsize = 114 ysize = 112 resolution = 0.5 raster = rasterization.simple_rasterization_dataset([utm1, utm2], resolution, 32630, [color1, color2], xstart, ystart, xsize, ysize, 0.3, 3) # Uncomment to update reference # raster.to_netcdf( # absolute_data_path('ref_output/rasterization_multiple_res_ref.nc'), # ) raster_ref = xr.open_dataset( absolute_data_path("ref_output/rasterization_multiple_res_ref.nc")) assert_same_datasets(raster, raster_ref, atol=1.e-10, rtol=1.e-10)
def test_epipolar_rectify_images_1( images_and_grids_conf, color1_conf, #pylint: disable=redefined-outer-name epipolar_sizes_conf, #pylint: disable=redefined-outer-name epipolar_origins_spacings_conf, #pylint: disable=redefined-outer-name no_data_conf): #pylint: disable=redefined-outer-name """ Test epipolar_rectify_image on ventoux dataset (epipolar geometry) with nodata and color """ configuration = images_and_grids_conf configuration["input"].update(color1_conf["input"]) configuration["input"].update(no_data_conf["input"]) configuration["preprocessing"]["output"]\ .update(epipolar_sizes_conf["preprocessing"]["output"]) configuration["preprocessing"]["output"]\ .update(epipolar_origins_spacings_conf["preprocessing"]["output"]) region = [420, 200, 530, 320] margin = xr.DataArray(np.array([[33, 20, 34, 20], [33, 20, 34, 20]], dtype=int), coords=[['ref_margin', 'sec_margin'], ['left', 'up', 'right', 'down']], dims=['image', 'corner']) margin.name = cst.EPI_MARGINS margin.attrs[cst.EPI_DISP_MIN] = -13 margin.attrs[cst.EPI_DISP_MAX] = 14 # Rectify images left, right, clr = stereo.epipolar_rectify_images(configuration, region, margin) print("\nleft dataset: {}".format(left)) print("right dataset: {}".format(right)) print("clr dataset: {}".format(clr)) # Uncomment to update baseline # left.to_netcdf(absolute_data_path("ref_output/data1_ref_left.nc")) left_ref = xr.open_dataset( absolute_data_path("ref_output/data1_ref_left.nc")) assert_same_datasets(left, left_ref) # Uncomment to update baseline # right.to_netcdf(absolute_data_path("ref_output/data1_ref_right.nc")) right_ref = xr.open_dataset( absolute_data_path("ref_output/data1_ref_right.nc")) assert_same_datasets(right, right_ref) # Uncomment to update baseline # clr.to_netcdf(absolute_data_path("ref_output/data1_ref_clr.nc")) clr_ref = xr.open_dataset( absolute_data_path("ref_output/data1_ref_clr.nc")) assert_same_datasets(clr, clr_ref)
def test_epipolar_rectify_images_3(images_and_grids_conf, color_pxs_conf, epipolar_sizes_conf, epipolar_origins_spacings_conf, no_data_conf): """ Test epipolar_rectify_image on ventoux dataset (epipolar geometry) with nodata and color as a p+xs fusion """ configuration = images_and_grids_conf configuration["input"].update(color_pxs_conf["input"]) configuration["input"].update(no_data_conf["input"]) configuration["preprocessing"]["output"].update(epipolar_sizes_conf["preprocessing"]["output"]) configuration["preprocessing"]["output"].update(epipolar_origins_spacings_conf["preprocessing"]["output"]) region = [420, 200, 530, 320] margin = xr.DataArray(np.array([[33, 20, 34, 20], [33, 20, 34, 20]], dtype=int), coords=[['ref_margin', 'sec_margin'], ['left', 'up', 'right', 'down']], dims=['image', 'corner']) margin.name = 'Margins' margin.attrs['disp_min'] = -13 margin.attrs['disp_max'] = 14 # Rectify images left, right, clr = stereo.epipolar_rectify_images(configuration, region, margin) print("\nleft dataset: {}".format(left)) print("right dataset: {}".format(right)) print("clr dataset: {}".format(clr)) left_ref = xr.open_dataset( absolute_data_path("ref_output/data1_ref_left.nc")) assert_same_datasets(left, left_ref) right_ref = xr.open_dataset( absolute_data_path("ref_output/data1_ref_right.nc")) assert_same_datasets(right, right_ref) # Uncomment to update baseline # clr.to_netcdf(absolute_data_path("ref_output/data3_ref_clr_4bands.nc")) clr_ref = xr.open_dataset(absolute_data_path( "ref_output/data3_ref_clr_4bands.nc")) assert_same_datasets(clr, clr_ref)
def test_add_cloud_filtering_msk(): nb_row = 5 nb_col = 10 rows = np.array(range(nb_row)) cols = np.array(range(nb_col)) ds0 = xr.Dataset({}, coords={'row': rows, 'col': cols}) ds1 = xr.Dataset({}, coords={'row': rows, 'col': cols}) pos_arr = np.array([[1, 2, 0], [2, 2, 1]]) elt_remove = pandas.DataFrame( pos_arr, columns=['coord_epi_geom_i', 'coord_epi_geom_j', 'idx_im_epi']) filtering.add_cloud_filtering_msk([ds0, ds1], elt_remove, 'mask', 255) mask0 = np.zeros((nb_row, nb_col), dtype=np.uint16) mask0[1, 2] = 255 mask1 = np.zeros((nb_row, nb_col), dtype=np.uint16) mask1[2, 2] = 255 ds0_ref = xr.Dataset({'mask': (['row', 'col'], mask0)}, coords={ 'row': rows, 'col': cols }) ds1_ref = xr.Dataset({'mask': (['row', 'col'], mask1)}, coords={ 'row': rows, 'col': cols }) assert_same_datasets(ds0_ref, ds0) assert_same_datasets(ds1_ref, ds1) # test exceptions with pytest.raises(Exception) as e: np_pos = np.array([[1, 2, 2], [2, 2, 1]]) elt_remove = pandas.DataFrame( np_pos, columns=['coord_epi_geom_i', 'coord_epi_geom_j', 'idx_im_epi']) filtering.add_cloud_filtering_msk([ds0, ds1], elt_remove, 'mask', 255) assert str(e) == 'Index indicated in the elt_pos_infos pandas.DataFrame is not coherent ' \ 'with the clouds list given in input' with pytest.raises(Exception) as e: np_pos = np.array([[1, 2, -1], [2, 2, 1]]) elt_remove = pandas.DataFrame( np_pos, columns=['coord_epi_geom_i', 'coord_epi_geom_j', 'idx_im_epi']) filtering.add_cloud_filtering_msk([ds0, ds1], elt_remove, 'mask', 255) assert str(e) == 'Index indicated in the elt_pos_infos pandas.DataFrame is not coherent ' \ 'with the clouds list given in input' with pytest.raises(Exception) as e: np_pos = np.array([[11, 2, 0]]) elt_remove = pandas.DataFrame( np_pos, columns=['coord_epi_geom_i', 'coord_epi_geom_j', 'idx_im_epi']) filtering.add_cloud_filtering_msk([ds0, ds1], elt_remove, 'mask', 255) assert str( e ) == 'Point at location (11,2) is not accessible in an image of size (5,10)'