def setUpClass(cls): rate_types = ['linrate', 'linerror', 'linsamples'] cls.tif_dir = tempfile.mkdtemp() cls.test_conf = common.TEST_CONF_GAMMA # change the required params params = cf.get_config_params(cls.test_conf) params[cf.OBS_DIR] = common.SML_TEST_GAMMA params[cf.PROCESSOR] = 1 # gamma params[cf.IFG_FILE_LIST] = os.path.join(common.SML_TEST_GAMMA, 'ifms_17') params[cf.OUT_DIR] = cls.tif_dir params[cf.PARALLEL] = 0 params[cf.APS_CORRECTION] = False params[cf.TMPDIR] = os.path.join(params[cf.OUT_DIR], cf.TMPDIR) xlks, ylks, crop = cf.transform_params(params) # base_unw_paths need to be geotiffed and multilooked by run_prepifg base_unw_paths = cf.original_ifg_paths(params[cf.IFG_FILE_LIST]) # dest_paths are tifs that have been geotif converted and multilooked cls.dest_paths = cf.get_dest_paths(base_unw_paths, crop, params, xlks) run_prepifg.gamma_prepifg(base_unw_paths, params) tiles = run_pyrate.get_tiles(cls.dest_paths[0], 3, 3) ifgs = common.small_data_setup() cls.refpixel_p, cls.maxvar_p, cls.vcmt_p = \ run_pyrate.process_ifgs(cls.dest_paths, params, 3, 3) cls.mst_p = common.reconstruct_mst(ifgs[0].shape, tiles, params[cf.TMPDIR]) cls.rate_p, cls.error_p, cls.samples_p = [ common.reconstruct_linrate(ifgs[0].shape, tiles, params[cf.TMPDIR], t) for t in rate_types ] # now create the non parallel version cls.tif_dir_s = tempfile.mkdtemp() params[cf.PARALLEL] = 0 params[cf.OUT_DIR] = cls.tif_dir_s params[cf.TMPDIR] = os.path.join(params[cf.OUT_DIR], cf.TMPDIR) cls.dest_paths_s = cf.get_dest_paths(base_unw_paths, crop, params, xlks) run_prepifg.gamma_prepifg(base_unw_paths, params) cls.refpixel, cls.maxvar, cls.vcmt = \ run_pyrate.process_ifgs(cls.dest_paths_s, params, 3, 3) cls.mst = common.reconstruct_mst(ifgs[0].shape, tiles, params[cf.TMPDIR]) cls.rate, cls.error, cls.samples = [ common.reconstruct_linrate(ifgs[0].shape, tiles, params[cf.TMPDIR], t) for t in rate_types ]
def test_timeseries_linrate_mpi(mpisync, tempdir, modify_config, ref_est_method, row_splits, col_splits, get_crop, orbfit_lks, orbfit_method, orbfit_degrees): params = modify_config outdir = mpiops.run_once(tempdir) params[cf.OUT_DIR] = outdir params[cf.TMPDIR] = os.path.join(params[cf.OUT_DIR], cf.TMPDIR) params[cf.DEM_HEADER_FILE] = SML_TEST_DEM_HDR_GAMMA params[cf.REF_EST_METHOD] = ref_est_method params[cf.IFG_CROP_OPT] = get_crop params[cf.ORBITAL_FIT_LOOKS_Y] = orbfit_lks params[cf.ORBITAL_FIT_LOOKS_X] = orbfit_lks params[cf.ORBITAL_FIT_METHOD] = orbfit_method params[cf.ORBITAL_FIT_DEGREE] = orbfit_degrees xlks, ylks, crop = cf.transform_params(params) if xlks * col_splits > 45 or ylks * row_splits > 70: print('skipping test because lks and col_splits are not compatible') return # skip some tests in travis to run CI faster if TRAVIS and (xlks % 2 or row_splits % 2 or col_splits % 2 or orbfit_lks % 2): print('Skipping in travis env for faster CI run') return print("xlks={}, ref_est_method={}, row_splits={}, col_splits={}, " "get_crop={}, orbfit_lks={}, orbfit_method={}, " "rank={}".format(xlks, ref_est_method, row_splits, col_splits, get_crop, orbfit_lks, orbfit_method, orbfit_degrees, mpiops.rank)) base_unw_paths = cf.original_ifg_paths(params[cf.IFG_FILE_LIST]) # dest_paths are tifs that have been geotif converted and multilooked dest_paths = cf.get_dest_paths(base_unw_paths, crop, params, xlks) # run prepifg, create the dest_paths files if mpiops.rank == 0: run_prepifg.gamma_prepifg(base_unw_paths, params) mpiops.comm.barrier() (refpx, refpy), maxvar, vcmt = run_pyrate.process_ifgs(ifg_paths=dest_paths, params=params, rows=row_splits, cols=col_splits) tiles = mpiops.run_once(run_pyrate.get_tiles, dest_paths[0], rows=row_splits, cols=col_splits) postprocessing.postprocess_linrate(row_splits, col_splits, params) postprocessing.postprocess_timeseries(row_splits, col_splits, params) ifgs_mpi_out_dir = params[cf.OUT_DIR] ifgs_mpi = small_data_setup(datafiles=dest_paths) # single process timeseries/linrate calculation if mpiops.rank == 0: params_old = modify_config params_old[cf.OUT_DIR] = tempdir() params_old[cf.REF_EST_METHOD] = ref_est_method params_old[cf.IFG_CROP_OPT] = get_crop params_old[cf.ORBITAL_FIT_LOOKS_Y] = orbfit_lks params_old[cf.ORBITAL_FIT_LOOKS_X] = orbfit_lks params_old[cf.ORBITAL_FIT_METHOD] = orbfit_method params_old[cf.ORBITAL_FIT_DEGREE] = orbfit_degrees xlks, ylks, crop = cf.transform_params(params_old) base_unw_paths = cf.original_ifg_paths(params_old[cf.IFG_FILE_LIST]) dest_paths = cf.get_dest_paths(base_unw_paths, crop, params_old, xlks) run_prepifg.gamma_prepifg(base_unw_paths, params_old) ifgs = shared.pre_prepare_ifgs(dest_paths, params_old) mst_grid = tests.common.mst_calculation(dest_paths, params_old) refy, refx = refpixel.ref_pixel(ifgs, params_old) assert (refx == refpx) and (refy == refpy) # both must match pyrate.orbital.remove_orbital_error(ifgs, params_old) ifgs = common.prepare_ifgs_without_phase(dest_paths, params_old) rpe.estimate_ref_phase(ifgs, params_old, refx, refy) ifgs = shared.pre_prepare_ifgs(dest_paths, params_old) maxvar_s = [vcm.cvd(i, params_old)[0] for i in ifgs] vcmt_s = vcm.get_vcmt(ifgs, maxvar) tsincr, tscum, _ = tests.common.compute_time_series( ifgs, mst_grid, params, vcmt) rate, error, samples = tests.common.calculate_linear_rate( ifgs, params_old, vcmt, mst_grid) mst_mpi = reconstruct_mst(ifgs[0].shape, tiles, params[cf.TMPDIR]) np.testing.assert_array_almost_equal(mst_grid, mst_mpi) tsincr_mpi, tscum_mpi = reconstruct_times_series( ifgs[0].shape, tiles, params[cf.TMPDIR]) rate_mpi, error_mpi, samples_mpi = \ [reconstruct_linrate(ifgs[0].shape, tiles, params[cf.TMPDIR], t) for t in ['linrate', 'linerror', 'linsamples']] np.testing.assert_array_almost_equal(maxvar, maxvar_s) np.testing.assert_array_almost_equal(vcmt, vcmt_s) for i, j in zip(ifgs, ifgs_mpi): np.testing.assert_array_almost_equal(i.phase_data, j.phase_data) np.testing.assert_array_almost_equal(tsincr, tsincr_mpi, decimal=4) np.testing.assert_array_almost_equal(tscum, tscum_mpi, decimal=4) np.testing.assert_array_almost_equal(rate, rate_mpi, decimal=4) np.testing.assert_array_almost_equal(error, error_mpi, decimal=4) np.testing.assert_array_almost_equal(samples, samples_mpi, decimal=4) # assert linear rate output tifs are same _tifs_same(ifgs_mpi_out_dir, params_old[cf.OUT_DIR], 'linrate.tif') _tifs_same(ifgs_mpi_out_dir, params_old[cf.OUT_DIR], 'linerror.tif') _tifs_same(ifgs_mpi_out_dir, params_old[cf.OUT_DIR], 'linsamples.tif') # assert time series output tifs are same epochlist = algorithm.get_epochs(ifgs)[0] for i in range(tsincr.shape[2]): _tifs_same(ifgs_mpi_out_dir, params_old[cf.OUT_DIR], 'tsincr' + '_' + str(epochlist.dates[i + 1]) + ".tif") # 12 timeseries outputs assert i + 1 == tsincr.shape[2] shutil.rmtree(ifgs_mpi_out_dir) # remove mpi out dir shutil.rmtree(params_old[cf.OUT_DIR]) # remove serial out dir
def setUpClass(cls): rate_types = ['stack_rate', 'stack_error', 'stack_samples'] cls.tif_dir = tempfile.mkdtemp() cls.test_conf = common.TEST_CONF_GAMMA from pyrate.configuration import Configuration # change the required params params = Configuration(cls.test_conf).__dict__ params[cf.OBS_DIR] = common.SML_TEST_GAMMA params[cf.PROCESSES] = 4 params[cf.PROCESSOR] = 1 # gamma params[cf.IFG_FILE_LIST] = os.path.join(common.SML_TEST_GAMMA, 'ifms_17') params[cf.OUT_DIR] = cls.tif_dir params[cf.PARALLEL] = 1 params[cf.APS_CORRECTION] = False params[cf.TMPDIR] = os.path.join(params[cf.OUT_DIR], cf.TMPDIR) rows, cols = params["rows"], params["cols"] # xlks, ylks, crop = cf.transform_params(params) # base_unw_paths need to be geotiffed by converttogeotif # and multilooked by run_prepifg base_unw_paths = list(cf.parse_namelist(params[cf.IFG_FILE_LIST])) multi_paths = [ MultiplePaths(params[cf.OUT_DIR], b, ifglksx=params[cf.IFG_LKSX], ifgcropopt=params[cf.IFG_CROP_OPT]) for b in base_unw_paths ] # dest_paths are tifs that have been geotif converted and multilooked cls.converted_paths = [b.converted_path for b in multi_paths] cls.sampled_paths = [b.sampled_path for b in multi_paths] from copy import copy orig_params = copy(params) conv2tif.main(params) prepifg.main(orig_params) tiles = pyrate.core.shared.get_tiles(cls.sampled_paths[0], rows, cols) ifgs = common.small_data_setup() params[cf.INTERFEROGRAM_FILES] = multi_paths cls.refpixel_p, cls.maxvar_p, cls.vcmt_p = process.process_ifgs( cls.sampled_paths, params, rows, cols) cls.mst_p = common.reconstruct_mst(ifgs[0].shape, tiles, params[cf.TMPDIR]) cls.rate_p, cls.error_p, cls.samples_p = \ [common.reconstruct_stack_rate(ifgs[0].shape, tiles, params[cf.TMPDIR], t) for t in rate_types] common.remove_tifs(params[cf.OBS_DIR]) # now create the non parallel version cls.tif_dir_s = tempfile.mkdtemp() params[cf.PARALLEL] = 0 params[cf.PROCESSES] = 1 params[cf.OUT_DIR] = cls.tif_dir_s params[cf.TMPDIR] = os.path.join(params[cf.OUT_DIR], cf.TMPDIR) multi_paths = [ MultiplePaths(params[cf.OUT_DIR], b, ifglksx=params[cf.IFG_LKSX], ifgcropopt=params[cf.IFG_CROP_OPT]) for b in base_unw_paths ] cls.converted_paths_s = [b.converted_path for b in multi_paths] cls.sampled_paths_s = [b.sampled_path for b in multi_paths] orig_params = copy(params) conv2tif.main(params) prepifg.main(orig_params) params[cf.INTERFEROGRAM_FILES] = multi_paths cls.refpixel, cls.maxvar, cls.vcmt = process.process_ifgs( cls.sampled_paths_s, params, rows, cols) cls.mst = common.reconstruct_mst(ifgs[0].shape, tiles, params[cf.TMPDIR]) cls.rate, cls.error, cls.samples = \ [common.reconstruct_stack_rate(ifgs[0].shape, tiles, params[cf.TMPDIR], t) for t in rate_types]
def setup_class(cls): gamma_conf = common.TEST_CONF_GAMMA from tests.common import manipulate_test_conf rate_types = ['stack_rate', 'stack_error', 'stack_samples'] cls.tif_dir = Path(tempfile.mkdtemp()) params = manipulate_test_conf(gamma_conf, cls.tif_dir) from pyrate.configuration import Configuration # change the required params params[C.PROCESSES] = 4 params[C.PROCESSOR] = 1 # gamma params[C.IFG_FILE_LIST] = os.path.join(common.GAMMA_SML_TEST_DIR, 'ifms_17') params[C.PARALLEL] = 1 params[C.APS_CORRECTION] = 0 params[C.REFX], params[C.REFY] = -1, -1 rows, cols = params["rows"], params["cols"] output_conf_file = 'gamma.conf' output_conf = cls.tif_dir.joinpath(output_conf_file).as_posix() pyrate.configuration.write_config_file(params=params, output_conf_file=output_conf) config = Configuration(output_conf) params = config.__dict__ common.sub_process_run(f"pyrate conv2tif -f {output_conf}") common.sub_process_run(f"pyrate prepifg -f {output_conf}") cls.sampled_paths = [ p.tmp_sampled_path for p in params[C.INTERFEROGRAM_FILES] ] ifgs = common.small_data_setup() correct._copy_mlooked(params) tiles = pyrate.core.shared.get_tiles(cls.sampled_paths[0], rows, cols) correct.correct_ifgs(config) pyrate.main.timeseries(config) pyrate.main.stack(config) cls.refpixel_p, cls.maxvar_p, cls.vcmt_p = \ (params[C.REFX], params[C.REFY]), params[C.MAXVAR], params[ C.VCMT] cls.mst_p = common.reconstruct_mst(ifgs[0].shape, tiles, params[C.OUT_DIR]) cls.rate_p, cls.error_p, cls.samples_p = \ [common.reconstruct_stack_rate(ifgs[0].shape, tiles, params[C.TMPDIR], t) for t in rate_types] common.remove_tifs(params[C.OUT_DIR]) # now create the non parallel version cls.tif_dir_s = Path(tempfile.mkdtemp()) params = manipulate_test_conf(gamma_conf, cls.tif_dir_s) params[C.PROCESSES] = 4 params[C.PROCESSOR] = 1 # gamma params[C.IFG_FILE_LIST] = os.path.join(common.GAMMA_SML_TEST_DIR, 'ifms_17') params[C.PARALLEL] = 0 params[C.APS_CORRECTION] = 0 params[C.REFX], params[C.REFY] = -1, -1 output_conf_file = 'gamma.conf' output_conf = cls.tif_dir_s.joinpath(output_conf_file).as_posix() pyrate.configuration.write_config_file(params=params, output_conf_file=output_conf) config = Configuration(output_conf) params = config.__dict__ common.sub_process_run(f"pyrate conv2tif -f {output_conf}") common.sub_process_run(f"pyrate prepifg -f {output_conf}") correct._copy_mlooked(params) correct.correct_ifgs(config) pyrate.main.timeseries(config) pyrate.main.stack(config) cls.refpixel, cls.maxvar, cls.vcmt = \ (params[C.REFX], params[C.REFY]), params[C.MAXVAR], params[ C.VCMT] cls.mst = common.reconstruct_mst(ifgs[0].shape, tiles, params[C.OUT_DIR]) cls.rate, cls.error, cls.samples = \ [common.reconstruct_stack_rate(ifgs[0].shape, tiles, params[C.TMPDIR], t) for t in rate_types] cls.params = params