sort by:
Revision Author Date Message Commit Date
36a0835 wrap up for version 1.4.1 (#829) + version: add Tag for version 1.4.1 + readfile.read_hdf5_file(): speedup the 3D matrix reading when slicing a small fraction of the 1st dimension, by using integer indexing for 3D h5 dataset, instead of 1D boolean array indexing. + view.read_data4figure(): bugfix for referencing unwrapPhase while plotting mixed dset types + move the following plotting functions to for a more compact module import, to simplify the UNAVCO notebook: - unwrap_error_phase_closure.plot_num_triplet_with_nonzero_integer_ambiguity() - timeseries_rms.plot_rms_bar() - objects.insar_vs_gps.plot_insar_vs_gps_scatter() + plot.plot_insar_vs_gps_scatter(): add preliminary outlier detection 16 August 2022, 06:51:05 UTC
47bb7f6 automate PyPI publishing with GitHub Actions (#827) + version: replace version_num with version for easy re-use, and update its usage in + setup: use sys.path.append() to replace open() to grab version from + add .github/workflows/publish-to-test-pypi.yml: - triggered for push event on insarlab/main branch - use "pip install" and "python -m build" to build the binary wheel and source tarball - use pypa/gh-action-pypi-publish action to push to PyPI and TestPyPI - push to PyPI only for released version and when owner is insarlab + repo setting: add github secrets from pypi, to support the above action 12 August 2022, 18:12:49 UTC
2e9e300 bugfix in `load_data` for empty path due to the new iono file in `auto_path` (#826) + bugfix when empty file path found, introduced in load iono stack PR 780, due to the additional new iono file path defined in defaults/ 11 August 2022, 21:11:48 UTC
ef31de5 remove `openmp` from the dependency list (#825) + remove "openmp" from all the dependency files, as "conda install pyresample" will install openmp correctly (llvm-openmp for linux, libgomp for linux; + remove the prefix "v" from the version number, to be consistent with styles from gdal/numpy + smallbaselineApp.generate_temporal_coherence_mask(): run plot_result() to populate pic folder before raising errors, to facilitate the trouble shooting + reference_point: support more flexible mask dataset name in the mask h5 file. 08 August 2022, 06:04:39 UTC
68cdbbe wrap up for version 1.4.0 (#824) + version: add release tag for v1.4.0 + bulk_plate_motion: add ITRF2014_PMM global var for convenience and future options with PMM model name and plate name, instead of typing detailed values manually. + add checking for the imcompatible options between "--geo2radar" and "--bbox / --software scipy" + subset: replace try/except with if/else for more robustness + arg_group: add --title / --fig-title for --figtitle option as alternatives 04 August 2022, 20:01:49 UTC
537c4ef Single entrypoint with sub-commands (#823) + add `` for the initial implementation of the single-entrypoint script - add sub-parser grabbing functions `get_*_parser()` for all executable scripts - add `_autocomplete()` - add the main parser function `get_parser()` with groupped calls for sub-parsers - add `main()` with proper logging info and exit code + ``: - rename from `` to `` - add `create_argument_parser()` to create parser with or without sub-parsers - call `create_argument_parser()` from all executable scripts in `mintpy` folder. + ``: add the following optional requirements: - argcomplete - platemotion and astropy + ``: rename `inps.step` to `inps.stepDate` to avoid weird initiation bug in sub-command mode. Co-authored-by: Zhang Yunjun <> 04 August 2022, 08:18:55 UTC
00dd106 various bugs-fix in ` --periodic` and `prep_hyp3` (#822) + ` --periodic`: use `atan2()`, instead of `atan()`, to account for the 4 quadrant outcome of the arc tangent operation, while calculating the phase component of the periodic signals. + ``: fix bug of `ORBIT_DIRECTION`. + ` inputs/ifgramStack.h5 --write-data`: skip pixels with no-data-value (zero) while updating the `unwrapPhase` matrix. + `` and ``: switch MintPy license from `GPLv3` to `GPLv3+`. 28 July 2022, 04:19:07 UTC
8d8d85d return empty in `main()` to have error code of 0 for normal complete (#821) return empty/None in `main()` for all executable scripts, to avoid the conflict with having error code "0" for normal completion. Co-authored-by: Zhang Yunjun <> 27 July 2022, 22:57:49 UTC
47c9bcc non-closure phase bias estimation (#765) This PR adds the bias time-series estimation introduced by the non-closure phase, as described in Zheng et al. (2022, TGRS), via `--action quick_estimate / estimate` options. Detailed changes are as below: + `` - add `guassian_kernel()` and `convolve()` for the complex interferogram filtering. - add `estimate_coherence()` and `unwrap_snaphu()` based on `isce2/topsStack` to re-unwrap the closure phase interferogram, to mitigate the PU error during closure phase bias estimation, including notes on SNAPHU from Piyush. + `objects.stack.ifgramStack`: - move `split2boxes()` from `` to here for more convenient re-use, add `dim0_size` option for more flexibility - add `get_closure_phase_index()` to return the indices of interferograms that forms the given connection level of closure loop - add `get_sequential_closure_phase()` for the 3D CP calculation and its temporal average. + `ifgram_inversion.estimate_timeseries()`: support `inv_quality_name = no` to turn OFF the calculation. + - add `--action mask` for average CP and mask calculation, by refactoring the existing script. - add `compute_unwrap_closure_phase()` to compute the wrapped sequential closure phase, unwrap them using isce2 modules, and then calculate the cumulative unwrapped seq closure phase time-series via `cum_seq_unw_closure_phase_timeseries()`, with parallel support and auto-skip. - add `estimate_wratio()` and `estimate_wratio_all()` for the `W_r` estimation, a.k.a., the weighted closure phase history. - add `bandwidth2num_ifgram()` - add `estimate_bias_timeseries_approx()` for `--action quick_estimate` - add `estimate_bias_timeseries()` for `--action estimate` with parallel support using dask. - 2X speedup of `estimate_bias_timeseries()` via `ifgram_inversion.estimate_timeseries()` with `scipy.linalg`, instead of `np.linalg.pinv`, and auto-skip the zero/nan values in part of the interferograms among the stack. - 2X speed up via common design matrix operation, same as in `` Co-authored-by: Zhang Yunjun <> 27 July 2022, 00:04:02 UTC
e17d1d3 tsview: add --no-show-img option (#820) + tsview: add --no-show-img option to hide the map-view figures + timeseries2velocity: re-organize the UQ comment in the code, for clarify + prep_giant: move to the legacy folder as it's not used; remove it from entry_points + docs/installation: update the Debian link to + setup: fix the license info inconsistency by removing the "license" option, the rest is all GPLv3. + setup: remove the unnecessary wrapper of `__main__` and `do_steup()` 23 July 2022, 22:07:35 UTC
43e2c8b readfile: fix gdal_read to accept Paths obj(#813) * readfile: fix gdal_read to accept Paths object. The `os.fspath` was recommended in the GDAL issue (, as the GDAL Python bindings fail for Path objects. 14 July 2022, 22:50:24 UTC
f8319ec Add installation instructions for Debian (#812) * Add installation instructions for Debian 14 July 2022, 21:06:55 UTC
d1aa094 gps: bugfix component string (#811) bugfix on the string for identifying the component mintpy/objects/ 13 July 2022, 23:33:33 UTC
632a394 plate_motion: supp radar-coord geometry & ITRF14 as default fname (#808) + utils.utils0.get_lat_lon(): add ystep and xstep for more flexible output + add prepare_geo_los_geometry() from for easy re-use. + - support radar-coord geometry input via resample object to radar-code the PMM output - refactor pmm2enu_at() - replace scipy.interpolate with skimage.transform.resize - use ut.get_lat_lon() for coarse grid preparation - use ut.prepare_geo_los_geometry() and simplify the post-handling for unit and no-data value - remove the obsolete interp_2d3l(), get_geobox_width_length() - remove MORVEL56 example cmd, to avoid potential confusion - replace BulkPlateMotion.h5 with ITRF14.h5 for the default output file name. This may change in the future to other PMM names once they are auto determined with values auto grabbed. - use pmm internally in the code 10 July 2022, 01:00:33 UTC
0d3b715 plot: better handle the DEM range < contour level warning (#807) + `utils.plot.prepare_dem_background`: better handle the warning msg when the DEM range < contour levels + `objects.stackDict`: use enumerate for "for" loop & progressBar while writing HDF5 files + `scripts/`: replace NotebookApp with ServerApp for running docker + `bulk_plate_motion`: update comments by removing NNR-NUVEL1A as it seems obsolete compared with ITRF2014-PMM and NNR-MORVEL56. 07 July 2022, 18:33:20 UTC
6558a52 prep_isce: typo fix in alosStack example usage (#805) 06 July 2022, 22:37:14 UTC
ee43222 bugfix in `` multilook method option (#806) + prep_aria: add default values for multilooking options (x/ystep, method) when no template file is given + prep_fringe: use ptime.yyyymmdd_date12() for more robust info extraction + add print_command_line() to add "" for arguments containing *, for improved usability. + load_data.prepare_metadata(): use ut.print_command_line() to facilitate debugging. Co-authored-by: Zhang Yunjun <> 06 July 2022, 22:33:44 UTC
6e741da smallbaselineApp: get ionStack file & add metadata from custom template file (#802) + - run_load_data(): add metadata to ionStack.h5 file from custom template file, to be consistent with ifgramStack.h5 and geometry*.h5 files - run_load_data(): remove load_complete, as it's not used. - plot_result(): add ion_file to plot_result() - update usage for check_loaded_dataset() throughout the script + utils.check_loaded_dataset(): - check and return ionStack.h5 file if it's valid - remove load_complete in returned values, as it's not used at all, for simplification - refactor Co-authored-by: Zhang Yunjun <> 30 June 2022, 21:41:35 UTC
b13e409 (#769) + Estimate the bulk motion of tectonic plates in the reference frame of the satellite. - is the major new function that takes the geometry file and the user-input Euler pole vector to compute the plate motion velocity projected to the LOS in the SAR scene. - add entry_points for - add a reference to our paper, Stephenson et al., 2022, about this plate motion correction - add a brief description of each of the PMMs, including the reference + Applying the correction of the bulk motion of tectonic plates from the input velocity file: - modified to take care of the velocity field subtraction - use FILE_TYPE for velocity dataset name Co-authored-by: Zhang Yunjun <> 29 June 2022, 21:42:38 UTC
719c2b4 Automatically build and push a docker image (#696) + update Dockerfile - move to the top-level - build from the local repo and include jupyter, gdal and isce2 - use micromamba user name - provide an easy access to Jupyter via ./scripts/ - pin the python version to 3.9 + add dockerize github workflow to auto build/push the docker image to the github container registry - tag 'latest' to the latest released version - tag 'develop' to the latest development version + dependency files: pin pyaps3 >= 0.3 + update the documentation related to docker in and 28 June 2022, 18:42:19 UTC
340062d load_data: add `mintpy.multilook.method` for mean/median (#797) + add `mintpy.multilook.method = nearest / mean / median` to use different interpolation methods while loading stacks of observations. - mv mintpy.subset.* in front of mintpy.multilook.* to be more consistent with the order of execution in the code - update the following scripts to support this functionality: - - objects/ - defaults/smallbaselineApp.cfg - defaults/smallbaselineApp_auto.cfg - + [BREAKING CHANGES] rename the following template options: - mintpy.load.ystep --> mintpy.multilook.ystep - mintpy.load.xstep --> mintpy.multilook.xstep - update files in `tests/configs` accordingly + add `update_attribute4resize()` and simplify its usage in `prep_isce.prepare_stack()` and `stackDict.ifgramStackDict.write2hdf5()` + fix the metadata bug for ionosphere stack due to resizing Co-authored-by: Zhang Yunjun <> 22 June 2022, 06:38:04 UTC
c50a231 tests: remove "test_" prefix + smaller zenodo file sizes (#799) + tests: remove the "test_" prefix for: - - + tests/ update zenodo link for smaller sizes for the following 2 datasets, to avoid overburden zenodo/circle CI - SanFranSenDT42: 410 MB --> 280 MB - WCapeSenAT29: 520 MB --> 240 MB 21 June 2022, 23:46:43 UTC
d17c7d9 tsview: update to the latest timeseries2velocity (#798) + tsview: - update its model/time func usage to the latest timeseries2velocity/time_func - remove the unnecessary np.array() call while updating image array + load_data: align the long global variable names, for readability 19 June 2022, 01:26:42 UTC
f0a8038 load multiple stack files + resize ionosphere on the fly (#796) + utils.isce_utils.extract_geometry_metadata(): - extract LENGTH & WIDTH, as reference for the A/RLOOKS - update attribute if box is not None - simplify its usage in + simplify and support multiple obs files w/ different resolutions - prepare_stack(): update A/R/NCORRLOOKS & AZ/RG_PIXEL_SIZE if the input obs file has a different size than the stack.rsc file, to better reflect the truth, e.g. for low-resolution iono file. - Note that LENGTH/WIDTH/Y/X_FIRST/STEP is already extracted from the obs file, thus, no need for checking or updating to reflect the truth. - replace the combination of `-f/-d` with the single `-f` option for a simpler and more robust logic to grab all data files in a given path pattern. + - ifgramStackDict.get_size(): add geom_obj arg to be able to use the size from the reference geometry file, for the low-resolution ion file, needed for run_or_skip() checking in - ifgramStackDict.write2hdf5(): add geom_obj arg, to auto detect the low-reso ion file, for resizing on the fly - add resize2shape arg to resize on the fly using skimage.transform.resize(), and make it compatible with the exiting subset and resampling options. + support multiple stack files loading in one command line, which is more flexible and simpler - remove the obsolete --ion option, as it's not needed anymore - remove the rarely used --output options, and use the hardwired values in the code, for simplification - code refactoring - update to the latest usage of, to support loading regular and ion interferograms at the same command line call - use a for loop to load the following multiple stack HDF5 files: - ifgramStack.h5 - ionStack.h5 - offsetStack.h5 + light refactoring 17 June 2022, 21:24:52 UTC
8ed98c1 integrate advanced time func with UQ into the routine workflow (#795) * ts2vel: add uncertaintyQuantification & timeSeriesCovFile option + add the following two new template options into smallbaselineApp.cfg - mintpy.velocity.uncertaintyQuantification = residue / covariance / bootstrap, to replace the previous mintpy.velocity.bootstrap option - mintpy.velocity.timeSeriesCovFile with the default value of no + timeseries2velocity: re-use arg_group.add_reference_argument(plot=False) in + load_data: write S1A/B_date.txt file from SAFE_files.txt file if the latter exists in its default location (same level as reference folder) * ts2vel: add timeFunc.* options to smallbaselineApp.cfg + integrate the advanced time func fitting into, via the following template options: - mintpy.timeFunc.polynomial - mintpy.timeFunc.periodic - mintpy.timeFunc.step - mintpy.timeFunc.exp - mintpy.timeFunc.log + rename the following options for consistency **[BREAKING CHANGES]**: - mintpy.velocity.excludeDate --> mintpy.timeFunc.excludeDate - mintpy.velocity.startDate --> mintpy.timeFunc.startDate - mintpy.velocity.endDate --> mintpy.timeFunc.endDate - mintpy.velocity.uncertaintyQuantifiction --> mintpy.timeFunc.uncertaintyQuantification - mintpy.velocity.timeSeriesCovFile --> mintpy.timeFunc.timeSeriesCovFile - mintpy.velocity.bootstrapCount --> mintpy.timeFunc.bootstrapCount + - add MODEL_EXAMPLE as the single-sourced example for the time function model/configuration setup - add inps2model() to parse/convert the namespace "inps" object into time function dict "model" object - add get_num_param() to estimate the num of unknown parameters from a given model dict object + utils.readfile.read_template(): add "skip_chars" argument to skip certain characters in the template values, e.g. the commonly template typo from users "[" and "]". This is to simplify the read_template2inps() functions. - leverage the new read_template() in following scripts: - - - - - - the insarmaps-related code is removed, and they are messy and they can and should be implemented separately in insarmaps repo if needed. + add get_exclude_date_list() from previous + - add_time_func_argument(): fix typo and better alignment for comments to improve the readability - adjust indentation throughout the script + timeseries2velocity: support time function inputs from template files - add time function inputs into the config keys to be saved in the h5 file - remove the comments on contributing authors, as they are visible in the git commit history - merge init_exp_log_dicts() and read_inps2model() into utils.time_func.inps2model() - refactor and move read_exclude_date() into utils.ptime.get_exclude_date_list() - read_template2inps(): support the new time function template options - model2hdf5_dataset(): modify the periodic/exp/log dataset names, to be more clear on the time unit + move to /legacy since it's not frequently used at all + move to /legacy since it's unavailable anymore (due to the takedown of EarthDef and Python2) and not actively used. 17 June 2022, 20:29:06 UTC
c8ae9c7 add with simplified IONEX file reading + add mintpy.objects.ionex sub-module to handle all the IONEX file download/reading - add based on daniestevez notebook, to simplify the IONEX file reading - move the following functions from mintpy.simulation.iono, to be more independent: - dload_ionex() - get_ionex_value() - get_ionex_filename() - get_ionex_date() - get_ionex_height() - plot_ionex() - remove the obsolete read_ionex_tec() + add unit test for objects/ - add tests/objects/ - add tests/data/jplg3190.15i - update .circleci/config.yml + update and accordingly + update docs: - add ionex to docs/api/ - update .gitignore against the latest github example for python 17 June 2022, 03:42:28 UTC
d3f6be4 view: add --ylabel-rot option 17 June 2022, 03:42:28 UTC
ba834f3 add module for lalo_label/scalebar + move draw_lalo_label() and draw_scalebar() from into a new sub-module, for more independence. + refactor + mv read_gmt_lonlat_file() from into + remove unused plot.cmd_line_parse() + update module_hierarchiy accordingly. + mv constants from utils to objects 17 June 2022, 03:42:28 UTC
da225ba ifg_inv: adjust default stack aux quality file for ionStack (#791) + adjust the default stack quality file for ionStack, add size checking before using it for masking + load_data.run_or_skip(): bugfix for the in/out_size comparison, as suggested by @olliestephenson. + cluster.DaskCluster.close(): reverse client/cluster.close() order to better avoid the CancelledError. + multilook: replace average with mean + utils.plot.auto_fig_title(): add extra suffix for ionStack.h5 14 June 2022, 06:51:52 UTC
3045089 load ionosphere stack from isce2/topsStack (#780) + load ionosphere stack from isce2/topsStack via ` --ion` - add the following new template options for iono file paths to smallbaselineApp.cfg - mintpy.load.ionUnwFile - mintpy.load.ionCorFile - mintpy.load.ionConnCompFile - add the mintpy.load.ion*File to to support mintpy.load.autoPath = True - split datasetName2templateKey into 4 dict objects, to help to distinguish between regular stack and ion stack, while setting the correct template key - add ` --geom` to load only the geometry files - set --ion / geom as mutually exclusive arg for more robust user typo checking - add Parameters/Returns comments for most functions - rename update_object() to run_or_skip() for consistency and a more intuitive name - run_or_skip(): add the checking of dataset list between in/out stack file/obj + set default output file name based on ionStack.h5 filename + stackDict.ifgramStackDict: add get_dataset_list() + plot_network: auto handle ionStack.h5 and non-interruptive handle of no dataset found. + utils/ and add get_date12_from_path() to simplify code + utils/readfile: add .ion file ext to read_binary_file() and get_slice_list() + remove the obsolete `ionoPhase` related code and comments in the following files: - docs/api/ - objects/ - objects/ Co-authored-by: Zhang Yunjun <> 12 June 2022, 21:24:51 UTC
4f77a83 add `` for range offset time series (#787) + add to calculate and correct for the S1A/B range bias in the range offset time series, as in Yunjun et al. (2022). - use --action to swith between compute / correct, to be able to compute from an TS file, and correct for it from another TS file. - add --save/nodisplay optiton, and remove --plot option, so that it works in the same way as + safe_list_file2sensor_list(): mv from isce_utils to s1_utils + update yunjun et al. (2022) bio info in relevant scripts: title syntax and vol num 02 June 2022, 03:26:53 UTC
1857814 save_kmz_ts: support non-mpl colormaps + save_kmz(_timeseries).py: - use inps.cmap_name for the str and inps.colormap for the mpl colormap object to better book keeping - more organized comments + bugfix for the placemark KMZ file when cbar is not shown after moving the file location + support custom non-mpl colormaps, similar to view/ 31 May 2022, 21:45:46 UTC
5e2a43a view: support --ref-lalo out of subset ext for 2D matrix + view: support --ref-lalo out of subset extent for 2D matrix input, similar to the existing support for 3D matrix + minor comments update in scripts below: - - - objects/sensor: notes on az*_pix*_size for S1 31 May 2022, 21:45:46 UTC
8b773be Move shell scripts from mintpy/sh to scripts. (#785) + move shell scripts from `mintpy/sh` to `script`. + update as the shell scripts are no longer installed * update for the link of the example shell script usage. 30 May 2022, 01:05:34 UTC
5111f33 Fixed a minor typo on and (#784) goodle --> google 27 May 2022, 17:38:41 UTC
6e592f8 plot_transection: bugfix for `add_arrow()` (#778) + fix the "IndexError: index 2 is out of bounds for axis 0 with size 2" due to utils/plot.add_arrow() + utils/plot.plot_colorbar(): use len(unique_values) instead of cmap_lut while checking for discrete colorbar ticks + view: rm the useless plt.subplots(num), as it shows up in notebooks with %matplotlib widget + iono_tec: printout CENTER_LINE_UTC and local solar time + diff.check_reference(): simple refactor and bugfix when file1 is absolute w/o REF_DATE. + docs/installation: minor comment simplification 23 May 2022, 22:23:02 UTC
5405746 use `sh` instead of `bash` in `` (#774) 22 May 2022, 18:47:49 UTC
8dd9390 Fix spelling errors and typos (#775) * Fix spelling errors and typos in different files (mostly online help messages of the CLI). * Remove the unused `--no-parallel` opt for `subset/` Co-authored-by: Zhang Yunjun <> 21 May 2022, 20:48:58 UTC
7014b0b move `requirements.txt` to the root dir (#772) * mv requirements.txt to root dir for a shorter path + move requirements.txt from ./docs to ./ dir for a shorter path; update path in and circleci/config.yml + utils.utils1.update_template_file(): handle value2seach inside if check, to avoid unnecessary running * view: add --coastline-lw / --lalo-off / --lalo-fs + view: add 3 new options to customize plotting in geo-coordinates: - coastline-linewidth - lalo-offset - lalo-fontsize + asc_desc2horz_vert: - bugfix on the printout msg during REF_LAT/LON checking - bugfix on the output metadata in one output HDF5 fil + readfile: GDAL related metadata - DATA_TYPE_GDAL2NUMPY/NUMPY2GDAL: add cint16/32 for translation purpose - add ".tiff" to GDAL_FILE_EXTS 10 May 2022, 02:45:44 UTC
8b32b3c bugfix for manually specified site_list_file in `gps.search_gps()` (#771) + objects.gps.search_gps(): fix a bug that `site_list_file` will not be downloaded when the user specifies the path to it, and pass `site_list_file` to `dload_site_list()`. 07 May 2022, 22:00:04 UTC
0344522 ut.update_template_file(): support "[]()" during option value search (#768) + utils.utils1.update_template_file(): - add "[]()" to the special symbol interpretation list while searching for template option values. - use "value2search" for "re.findall()" expression, without changing original value variable, for more robust replace() operation. 02 May 2022, 20:43:57 UTC
0718be9 tsview: bugfix for cartopy feature (#767) + bugfix for cartopy feature while initializing projection + timeseries2velocity.read_inps2model(): add print_msg + objects/sensor.SEN: fix antenna and PRF parameters + align the print out "copy for backup" msg 02 May 2022, 04:36:45 UTC
bbb2ce2 tsview: new "narrow" slider + tsview: switch to a new look of "slider" in The main changes are: 1. use a narrower slider on the Y-axis, for a more compact looking. 2. The slider is solely based on image number, instead of time, to be agnostic against TS files with different time gaps. 3. Plot the reference date as a "gray" dot on the slider, to be more visible. 4. use subplot() with tight_layout() to better scale the subplots + utils.ptime: add get_compact_isoformat() 23 April 2022, 00:16:03 UTC
479d308 use fig.canvas.draw_idle() to replace fig.canvas.draw() + replace fig.canvas.draw() with "fig.canvas.draw_idle()" and "fig.canvas.flush_events()", as recommended by matplotlib ( This fixed the non-resposive point TS plot, with the latest version of matplotlib version 3..5.1. It's unknown since which version of matplotlib that this behavior change started to happen. Involved scripts are: - - - + tsview: update bar() plot in the slider, to make sure the vertical lines are within the slider extent + utils.plot: add add_arrow() from stack overflow + plot_transection: plot the profile location as dashed arrow instead of dashed line, to indicate the profile direction, via plot.add_arrow(). 23 April 2022, 00:16:03 UTC
04bf0b2 plot_colorbar(): show the exact tick values for matrix w/ <=5 unique values + utils/plot.auto_adjust_colormap_lut_and_disp_limit(): add unique_values as the 3rd return arg & update its usage in, and + utils/plot.plot_colorbar(): use unique_values to set tick locations if they are <=5 + utils/ ignore comment lines + utils/utils.read_timeseries_yx(): bugfix for dis_std unit conversion + objects/sensor: add a few paramters for the GaoFen-3 sensor + objects/gps.get_gps_los_obs(): bugfix when input site_names are not consistent with CSV file + add Yunjun et al. (2022) with DOI to the following files: - defaults/smallbaselineApp.cfg: SET option - - - simulation/ 23 April 2022, 00:16:03 UTC
a390362 allows for suffix in filename (#763) add --suffix option to allow for suffix in the filename. 21 April 2022, 04:12:17 UTC
edebebd version: add version 1.3.3 tag (#761) 14 April 2022, 21:14:12 UTC
fb88aa4 add iono ramp calc from GIM TEC products + add simulation/ sub-module: - add iono mapping functions from Yunjun et al. (2022) - add JPL high resolution GIM I/O - add GIS low resolution GIM downloading, I/O and plotting + add for high level usage - auto download IGS TEC files, similar to - call simulation/ to read and calculate iono ramps + add data/ from Yunjun et al.. (2022) + update docs accordingly - docs/api/ add simulation/iono - add entry point for 23 March 2022, 19:52:52 UTC
8edc973 plot very long TEC TS file + coord.geo2radar(): support file longitude exceeding 180 in both end, e.g. the GIM IONEX file + plot.auto_multilook_num(): turn OFF multilooking for small spatial size, even if the over size is large due to the large time dimension, to speed up the reading. Otherwise, it will do the epoch-by-epoch reading with indexing, which is slow. + tsview: for very long TS (> 1000 acquisitions), do not print out displacement TS in the terminal, reduce the default marker size by 10X. 23 March 2022, 19:52:52 UTC
c0d6c3a asc_desc2horz_vert: speedup pixel-wise inversion via win-by-win (#756) + - use a window-by-window strategy to speedup the pixel-wised inversion - add get_design_matrix4east_north_up() for future 3D decomposition - bug fix for --oo option during file writing + gps.GPS.read_displacement(): add self.date_list member variable, for easy use + stack.timeseries: remove get_design_matrix4time_func, as it's not used anywhere in mintpy anymore, to avoid circular imports 21 March 2022, 03:53:09 UTC
84421d5 readfile.read_snap_dim(): bugfix on WAVELENGTH unit (#755) + utils.readfile.read_snap_dim(): bugfix on WAVELENGTH unit + asc_desc2horz_vert: pass angles in deg instead of rad + utils.plot.auto_adjust_xaxis_date(): fix a bug introduced in + local_oscilator_drift.get_relative_range_distance(): typo fix + docs/README: update aux links in Yunjun et al. (2019) 19 March 2022, 22:50:47 UTC
44dfae4 get_design_matrix4time_func(): bugfix for `poly_order = 0` (#754) + utils.time_func.get_design_matrix4time_func(): resolves a bug that creates design matrices with columns of zeros, when the polynomial order is zero. 19 March 2022, 03:44:32 UTC
bbbaf2b image_stitch - bugfix for bool / integer matrix (#751) Currently `` can't correctly merge mask files. It puts the merged arrays into an array initialized as `np.nan`. Nans evaluates to `True`, meaning that we are left with blocks outside the data region that are set to `True`. + Adding a simple check to see if we're merging non-float arrays, then set the default values of `fill_value` to `0` instead of `np.nan` fixes the issue. + use vprint() to shorten the print() if check 18 March 2022, 05:44:57 UTC
bd8795f - mask for areas susceptible to closure phase bias (#740) + add a new script ``, to create a mask for areas susceptible to closure phase bias, based on Zheng et al. (2022, TGRS, under review). + add entry point for the new script 10 March 2022, 04:57:34 UTC
6e39b67 ifg_inv: bugfix for design matrix w/ date1 > date2 & release memory occupied by covariance matrix (#750) + cluster.DaskCluster.collect_result(): support None in the output list, as an alternative to to numpy matrix, to be more flexible + stack.ifgramStack.get_design_matrix4timeseries(): - support non-sequential network (where the first date is not always the earlier date) - use the same reference date by default for a single reference network + - estimate_timeseries(): comment out the B matrix inverrtability check, after correcting the B matrix bug above for non-sequential network - ifgram_inversion_patch(): set ts_cov = None if not calc_cov, to release memory from the huge 4D ts_cov matrix Co-authored-by: Zhang Yunjun <> 08 March 2022, 20:50:54 UTC
575f32b docs update for python 3.9 and 3.10 + remove "python<3.9" constraint from installation-related documents: - - docs/environment.yml - docs/requirements.txt + docs/ - add note on strict conda channel priority activation - remove the strict channel priority note, as it's currently not default in conda yet and NOT working all the time, especially when install mintpy together with isce2=2.6 + .circleci/config.yml: - activate the strict channel priority to avoid installation packages with conflicts versions - remove unnecessary cd command while runing testing on example datasets as it's done inside test scripts already + with the above changes, $MINTPY_HOME/tests/ passed without errors on both python 3.9 and 3.10 environments + add mintpy.utils.constants module [preliminary] 22 February 2022, 02:09:40 UTC
8b15058 transection: support distance unit in pixel + plot_transection: - bugfix for the pip installed version - support transection with distance unit in pixel. + utils.utils.transect_yx(): add "distance_unit" to the output dict object, with default value of "m". In case there is not enough metadata to calculate the ground pixel size in meters, such as the raw isce-2 files, set "distance_unit = pixel" and continue. + - read_snap_dim(): force int dtype for A/RLOOKS - remove TRACK_NUMBER from standardMetadata as it has not been tracked before, and has already been saved in the original snap metadata info. + simulation/variance.sample_data(): use np.random.default_rng() 22 February 2022, 02:09:40 UTC
ef3d271 gps.get_gps_los_obs(): use meta / obs_type for args w/ example usage + utils/utils0.four_corners(): switch return order from WESN to SNWE, for consistency. Adjust its usage in the following scripts: - - - + gps.get_gps_los_obs(): - use "meta" and "obs_type" to replace "insar_file" for input arguments, for more explicit and straightforward usage. - add example function usage in the comments. - GPS.get_gps_los_velocity(): bugfix for more robust performance + utils.plot.plot_gps(): bugfix when no GPS found. 22 February 2022, 02:09:40 UTC
9d6d410 add 22 February 2022, 02:09:40 UTC
fe09fc3 add --geom-file option Support input geometry files for precise pixel-wised decomposition, which is important for large area analysis. + add -g / --geom-file option to specify the corresponding geometry files. + cmd_line_parse(): fix a bug while checking the reference point when two input files does not has the same spatial coverage, by using only Y/X_FIRST/STEP, without converting to REF_Y/X. + get_overlap_lalo(): support a list of attributes dicts >= 2 + get_design_matrix(): refactor to take matrix as inputs + asc_desc2horz_vert(): - refactor to take multi-dimension matrices as inputs directly. - for pixel-wise inversion, use a for loop + merge main(), asc_desc_files2horz_vert() and write_to_one_file() all into one function: run_asc_desc2horz_vert(). 22 February 2022, 02:09:40 UTC
23550ca image_stitch: support multi-dataset files + support input files with multiple datasets, e.g. geometry files. + If input files do not have the exact same list of datasets, only the common elements of datasets will be used. + For geometry files, ignore zero incidenceAngle pixels in the geometry file, so that one could feed them without masking in advance. + show all figures at the end, for a smoother experience 22 February 2022, 02:09:40 UTC
006f1f9 bugfix: timeseries2velocity `--save-res` excluded dates (#746) Save timeseries_res: instantiate the output hdf5 file accounting for the excluded dates Co-authored-by: Zhang Yunjun <> 14 February 2022, 19:37:13 UTC
e9b0104 refactor / add readfile.read_snap_dim() + rename prep_snap.get_ellpsoid_local_radius() to utils.utils0.xyz_to_local_radius() + utils.readfile: - add read_snap_dim() to read SNAP *.dim file with XML modules, instead of searching/parsing in text file in the old, for simpler, more robust and faster performance. - read_isce_xml(): 1) add if check for coordinate1/; 2) force lower() case key names, to produce consistent output + significantly simplify 13 February 2022, 07:41:42 UTC
c316d32 improve *.unw file handling in mask/ref*_point/ + two 2-band *.unw file IO in the following scripts, instead of single band for phase only, to preserve the native *.unw file format: - - - +ptime.(yy)yymmdd_date12(): support both str and list type inputs 13 February 2022, 07:41:42 UTC
7e321b6 gen*_mask: add --vx/vy/vroipoly options + add --vs / vy / vroipoly options to specify the AOI for thresholding operations, the area outside will be untouched. This is usef to create an mask, without pixels on the fault, for phase unwrapping of co-seismic deformation. 13 February 2022, 07:41:42 UTC
592f186 view: add --no-data-value to manually specify the value to ignore + add --no-data-value option to manually sppecify the value to ignore, for plotting only + plot.plot_colorbar(): a more robust cbar extend style checking, to ignore the numerical precision level value leakage. 13 February 2022, 07:41:42 UTC
2499eeb prep_fringe: write ifgramStack for connected components (#735) + add `--geom-only` option for only creating geometry (useful for making masks) + add `-r / --range` and `-a / --azimuth` option to specify looks (this is only for tracking metadata), if extra multilooking is applied after fringe processing. + create `inputs/ifgramStack.h5` file if *.unw.conncomp files exist. The non-first-date reference date is supported when writing ifgramStack to be more agnostic against the potential change in fringe output in the future. 10 February 2022, 08:02:28 UTC
80df178 fix bool array index bug for `h5py>=3` (#743) + docs/requirements: remove `h5py<3` constrain + fix bool array index bug for `h5py>3` in the following scripts: - objects/ - utils/ + timeseries2velocity: correct typo in example string 10 February 2022, 06:38:15 UTC
2acac3f - convert to meters for UNIT in radians (#738) 10 February 2022, 05:37:54 UTC
569dd96 resample: bugfix for auto_lat_lon_step_size() via merged src/lut_meta dict (#737) + merge `lut_meta` and `src_meta` and pass to `utils0.auto_lat_lon_step_size()` for a better chance of having enough metadata to calculate the pixel area constrained new lat/lon step. + fix the mis-functioned `try/except` fallback logic bug by using `except KeyError:` instead of `except AttributeError:`. 06 February 2022, 03:59:20 UTC
b33fefc generic multi-dataset file (e.g. velocity) support in `add/diff` (#732) + `` & ``: generic multi-dataset file support, by searching the common dataset list among all the input files, and doing a for loop for them. Ignore dataset names if all input files have one dataset, to support single dataset files with different dataset names, e.g. mask, mask and waterMask. In the later case, the 1st file dataset name will be used as the reference. + `utils1.run_deramp()`: when operating on velocity files, operate on velocity dset as default Co-authored-by: Zhang Yunjun <> 03 February 2022, 06:28:29 UTC
70d66d1 initial NO_DATA_VALUE support + add a new standard metadata: NO_DATA_VALUE + - read_attribute(): grab NO_DATA_VALUE with 'none' as default - add get_no_data_value() to get the value of the input file - add SPECIAL_STR2NUM() to facilitate no_data_value handling - read_isce_xml() / read_gdal_vrt(): grab NoDataValue if exists. + mask out pixels with no_data_value for single subplot + tests/config/*.txt: speedup testing by decrease plot.maxMemory to 2GB to use more parallel processes for plotting 31 January 2022, 19:15:24 UTC
7008581 refactor + rename `legacy/` to `legacy/` + refactor to be more flexible on the input/output file structure + add --sub-x/y + add --meta to add custom metadata + support --dname timeseries with "date" dataset added automatically + add DATA_TYPE_STR2OBJ to support most common numpy data types + check if the output file exists with --force option 31 January 2022, 19:15:24 UTC
04e4661 support plotting of SLC stack and GRACE time-series + identify SLC stack as "FILE_TYPE==timeseries" and "DATA_TYPE==complex(64/128)" + change CENTER_LINE_UTC from required to optional as SLC stack might not have it + readfile.read_attribute(): check SLC stack and reset UNIT to 1 + coord.geo2radar(): ensure the consistency between point longitude and source file, regardless of the source file convention in (-180, 180] or [0, 360) conventions. For geocoded files only. + plot: - auto_colormap_name(): use gray as default cmap for slc stack - auto_adjust_xaxis_date(): smart every_year/month for extra long time series, e.g. GRACE products. + view: - read_data4figure(): take abs() if data type is complex - move code to form check_map_projection() for easy re-use, e.g. in + tsview: - pass `disp_unit` directly for the model estimation result display, for more simple and robust performance against input files that are not in the unit of meters, e.g. giant product or GRACE products. - grab WAVELENGTH if and only if wrap-range is 2 pi. This allows applying --wrap-range option to files w/o WAVELENGTH attributes, e.g. the GRACE products. - support cartopy map projection and its related features, e.g. --coastline, via view.check_map_projection() - take abs() if data is complex - bugfix for --flip-lr/ud options 31 January 2022, 19:15:24 UTC
18539d2 ref_point: add ref_lat value check + reference_point: add a validity checking for input `ref_lat` value + info: --num will turn ON --date - --num will turn ON --date, so that one can run timeseries.h5 --num to print date list and number, without adding --date option, for conveniency. - remove --slice --num combo, as it's not used much, to simplify the code. + sensor: use rs1/rs2/rcm for radarsat series 31 January 2022, 19:15:24 UTC
d219448 bugfix for ` --bootstrap --save-res` (#733) When running `` with bootstrapping, we use the function `time_func.estimate_time_func` to repeatedly fit the time series data. This function returns the design matrix, `G`, however when bootstrapping we don't assign the design matrix to a variable, meaning that if we try to save the residual file we get the error `UnboundLocalError: local variable 'G' referenced before assignment` at line 702. If we want to output the residual when bootstrapping, we need to get the full design matrix. I've added a line of code to do this. 28 January 2022, 05:55:28 UTC
cfa7991 image_stitch: bugfix & update plotting (#730) + fix the `AttributeError: 'AxesSubplot' error, because `fig` can not be used as return for subplot() anymore. + image_stitch: improved auto plot settings Co-authored-by: Zhang Yunjun <> 26 January 2022, 05:41:51 UTC
7dd7e1d bugfix in & (#729) + fix a runtime bug when re-run after removing the ISCE stack processing folders + plot_network: fix the output file names bug + docs/install: a little bit more notes on dask 25 January 2022, 00:03:56 UTC
f8a3fbe installation: add dask config to post-install setup (#727) 21 January 2022, 19:35:05 UTC
1727c7d plot_network: color-code network/matrix plot based on temp/perp baselines (#693) + `plot_network`: support color-coding temporal and perpendicular baseline via `-d tbase/pbase` and range control still via `-v` option. + utils1.get_residual_std(): add `std_file` variable to the return Co-authored-by: Zhang Yunjun <> 21 January 2022, 02:50:23 UTC
5c4c54b fix typo in dask documentation (#726) * Minor typo in dask documentation 21 January 2022, 00:25:59 UTC
0cc5665 Remove GUNW reference from HyP3 directory structure (#724) 17 January 2022, 22:24:34 UTC
492719e bugfix for hyp3 reading, circle CI and pip/conda install (#723) + readfile.read_attribute: move GDAL for .tif/.grd file up on the priority than non-rsc metadata files, to fix reading issue related to downloaded hyp3 *.tif file + docs: add notes on preparing hyp3 interferograms via Vertex website + circleci/config: switch circle CI resource class from medium to large + tests/config/*.txt: increase the max plot memory from 2G to 4G + smallbaselineApp: bugfix for --plot when installed via pip/conda + add_attribute: bugfix for input argv checking when installed via pip/conda 17 January 2022, 20:32:56 UTC
70d606e improved auto lat/lon step for geocoding Add utils0.auto_lat_lon_step_size() to calculate the default output lat/lon steps for geocoding. By default, the current version ensure the same number of rows and columns between input and output files; while this new version ensures the same pixel area between the input and output files and with proper dimension ratio using the bounding box of an rotated rectangle. Thus, this is a better version, especially when the azimuth angle is far from the pure north-south, such as the UAVSAR flight path, or when the space-borne SAR track is long. 17 January 2022, 05:55:10 UTC
7131276 use numpy as DATA_TYPE value standard + readfile/writefile: use numpy data type string as standard for mintpy, and use it for the convention translation during data I/O. - DATA_TYPE_ENVI2NUMPY - DATA_TYPE_NUMPY2ENVI - DATA_TYPE_GDAL2NUMPY - DATA_TYPE_NUMPY2GDAL - DATA_TYPE_ISCE2NUMPY - DATA_TYPE_NUMPY2ISCE + ifg_inv: use diff name for numInvOffRg/Az.h5 files 17 January 2022, 05:55:10 UTC
598ac8a support UAVSAR read / prep / SET correction + readfile: support reading UAVSAR .ann/lkv/llh files - add read_uavsar_ann() to read the *.ann file into an dict object - read_attribute(): add metadata preparation for *.lkv and *.llh file - get_slice_list(): provide explicit list of dataset names for *.lkv and *.llh files - read_binary_file(): support multiple bands for non-traditional-InSAR processors. + prep_isce: add generate_random_baseline_timeseries() to support `-b random` input to generate a bperp time series with random values as place holders for mintpy processing. + solid_earth_tides: support T in time [for UAVSAR] 17 January 2022, 05:55:10 UTC
c556817 4D matrix IO for TS full covariance calc/propagation + read 4D hdf5 file reading + utils.writefile.layout_hdf5/write_hdf5_block(): support 4D matrix wirting to HDF5 file + objects/cluster.collect_results(): support 4D matrix + ifgram_inversion: calc TS full covariance matrix and save as a 4D matrix in HDF5 file - rename --calc-std to --calc-cov - rename estimate_timeseries_std() to estimate_timeseries_cov() - use the linear propagation of a unweighted estimator for the error propagation - use np.linalg.multi_dot() to speedup chain dot operations + add --ts-cov-file option to support full cov matrix for error propagation - rename --ts-std-file to --ts-cov-file - support both 4D full covar and 3D var time series file as input - apply the linear propagation for ordinary least squares, to be consistent with the time func estimation. Previously, the weighted least squares version is used in this step, which is not appropriate. - update notes on the math equations in the comments. 17 January 2022, 05:16:43 UTC
8e9f8d6 ifg_inv: keep high SNR pixels for offset + ifgram_inversion.mask_stack_obs(): - distinguish between msk and msk_data for more flexibility - keep high SNR pixels for offset when masking based on offsetSTD, with an hardwired threshold for now. - calc offset SNR via (off - off_med) / off_std 17 January 2022, 05:16:43 UTC
72df5b6 setup: add license 17 January 2022, 05:16:43 UTC
9b66885 add `mintpy.unwrapError.connCompMinArea` option (#719) + add `mintpy.unwrapError.connCompMinArea` option with default value of 2.5e3 to replace the previously hardwired value, for small area high resolution dataset. + pass the above option value to `` and ``. + ``: calculate adaptive step size based on the input file metadata, to replace the hardwired 3e3 value. + ``: add support for reading slice list of `slcStack` 13 January 2022, 01:02:29 UTC
4357b8c API to read GMT lonlat file from KML to plot faults (#717) This PR adds a function to read GMT lon/lat file so that one can plot the faults dataset (created by GMT from KML file) on top of the plot, in Python level ONLY. + add `utils.plot.read_gmt_lonlat_file()` to read and plot faults on top of `view.plot_slice()` output - add notes and examples on how to prepare the GMT lonlat file from KML file, and use the function in python + `objects/gps`: - add horz angle to the filename if it's horz and print out file name before the long calc - print warning instead of raise error if no GPS found - more print out num while comparing with GPS + `tsview`: support TS file w/o REF_Y/X + `legacy/2to3_timeseries`: change `P_BASELINE_TIMESERIES` to optional 05 January 2022, 03:20:51 UTC
7fb4108 fix argv bug in for pip installed version (#714) + utils0: add round_up_to_odd() + github bot: fix typo + view: fix argv bug for pip installed version. Catch the manually specified arguments via `sys.argv` for cmd or via `iargs` through python call, and save it to `inps.argv` for later-on checking. Fixed the same issue in as well. + view: add `--math rad2deg/deg2rad` 23 December 2021, 00:33:09 UTC
7b81971 ignore pyresample warning for xarray/zarr (#707) + objects.resample: Use warnings.catch_warnings() to ignore the potential UserWarning while import pyresample without xarray/zarr installed. + objects.coord.geo2radar(): support lon > 180. + README: use shields API instead of hardwired value to auto grab the version number in the badge 30 November 2021, 02:53:19 UTC
ce7a27c env: revert matplotlib<3.5 & rm pykdtree/xarray/zarr (#706) * revert "set matplotlib<3.5 temporarily due to upstream repo bug". This reverts commit d76edb928ba40e32ef8a7935bffb1644b613f099. * rm `pykdtree/xarray/zarr` for `pyresample` as they are now properly installed by `conda install pyresample`, thus, no manual setup is needed anymore. 27 November 2021, 03:28:39 UTC
d76edb9 set matplotlib<3.5 temporarily due to upstream repo bug (#704) which leads error while saving figures to PDF files. 23 November 2021, 01:54:43 UTC
ca29361 wrap up version 1.3.2 (#703) + add release_history as a list of Tags - use Tag from the collection module to save the release history explicitly - distinguish between release version number/date and version number/date - update version_number/date/description usage in, and + bump the release version number to 1.3.2 22 November 2021, 03:04:47 UTC
2fb0a7d update installation note, env setup and circle-ci testing (#700) + simplify the installation since now `pyaps3` and `pysolid` are available via conda-forge, so they are no longer need to be manually cloned and installed anymore. This simplifies the environment setup files and installation notes. + since #659, there's no longer a need to manipulate PATH or PYTHONPATH for mintpy anymore, as a "pip install" will correctly place the mintpy package and all executable scripts to be available in the environment. Co-authored-by: Zhang Yunjun <> 21 November 2021, 07:47:21 UTC
eb3bd63 tropo_pyaps3: update account check for pyaps3-v0.3 21 November 2021, 07:40:49 UTC
ce67891 gps: add --ex-gps / --gps-ms / check time overlap percentage + view/plot: add --ex-gps option to manually exclude a list of GNSS sites from plotting + plot_gps(): for sites with nan value, do not plot dots, instead of plotting a transparent one previously, to be more clear; do not plot ref GNSS site label for a cleaner figure for publication + gps.get_gps_los_velocity(): ignore sites if its observation time overlap with InSAR time for less than 25%. 21 November 2021, 07:40:49 UTC
f600ad8 ts2vel: add --ref-lalo option to support changing reference point in lat/lon for estimation. 21 November 2021, 07:40:49 UTC
back to top