GenericMappingTools / GenericMappingTools/pygmt
Track progress of wrapping GMT modules
- Dominant language
- Python
- Stars
- 874
- Forks
- 255
- Avg merge
- 1d 21h
- Merged PRs (30d)
- 40
Description
The [project board](https://github.com/orgs/GenericMappingTools/projects/3) tracks progress toward wrapping GMT modules, but it does not provide an overview of which modules are already wrapped. This PR summarizes PyGMT’s coverage of GMT modules. As of GMT 6.6.0, GMT provides 98 core modules and 59 supplementary modules (`gmt --show-modules-core` and `gmt --show-modules`), PyGMT v0.19.0 has wrapped ~60 core modules and 4 supplementary modules.
_Contributions to wrap currently unsupported modules are welcome. If you are interested in working on one, please comment on the corresponding issue or open a new issue to discuss the API design first._
## Core Modules
### Plotting
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `basemap` | ✅ | #4239 | `Figure.basemap` |
| `clip` | ❌ | #4751 | |
| `coast` | ✅ | #4240 | `Figure.coast` |
| `colorbar` | ✅ | #4243 | `Figure.colorbar` |
| `contour` | ✅ | #4537 | `Figure.contour` |
| `events` | ❌ | | |
| `gmtlogo` | ✅ | #4165 | `Figure.logo` |
| `grd2cpt` | ✅ | #4552 | `pygmt.grd2cpt` |
| `grdcontour` | ✅ | #4538 | `Figure.grdcontour` |
| `grdimage` | ✅ | #4539 | `Figure.grdimage` |
| `grdview` | ✅ | #4208 | `Figure.grdview` |
| `histogram` | ✅ | #4251 | `Figure.histogram` |
| `image` | ✅ | #4263 | `Figure.image` |
| `inset` | ✅ | #4250 | `Figure.inset` |
| `legend` | ✅ | #4249 | `Figure.legend` |
| `mask` | ❌ | #4751 | |
| `makecpt` | ✅ | #4560 | `pygmt.makecpt` |
| `plot` | ✅ | #4545 | `Figure.plot` |
| `plot3d` | ✅ | #4545 | `Figure.plot3d` |
| `psconvert` | ✅ | #4563 | `Figure.psconvert` |
| `rose` | ✅ | #4540 | `Figure.rose` |
| `solar` | ✅ | #4110 | `Figure.solar` |
| `subplot` | ✅ | #4245 | `Figure.subplot` |
| `ternary` | ✅ | #4541 | `Figure.ternary` |
| `text` | ✅ | #4544 | `Figure.text` |
| `wiggle` | ✅ | #4543 | `Figure.wiggle` |
### Table processing
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `blockmean` | ✅ | #4549 | `pygmt.blockmean` |
| `blockmedian` | ✅ | #4549 | `pygmt.blockmedian` |
| `blockmode` | ✅ | #4549 | `pygmt.blockmode` |
| `filter1d` | ✅ | #4551 | `pygmt.filter1d` |
| `fitcircle` | ❌ | | |
| `gmt2kml` | ❌ | | |
| `gmtbinstats` | ✅ | #1651 | `pygmt.binstats` |
| `gmtconnect` | ❌ | | |
| `gmtconvert` | ❌ | | |
| `gmtinfo` | ✅ | #4559 | `pygmt.info` |
| `gmtmath` | ❌ | | |
| `gmtregress` | ❌ | | |
| `gmtselect` | ✅ | #4564 | `pygmt.select` |
| `gmtsimplify` | ❌ | | |
| `gmtspatial` | ❌ | | |
| `gmtsplit` | ❌ | | |
| `gmtvector` | ❌ | | |
| `kml2gmt` | ❌ | | |
| `mapproject` | ❌ | #4209 | |
| `project` | ✅ | #4562 | `pygmt.project` |
| `sample1d` | ❌ | | |
| `spectrum1d` | ❌ | | |
| `trend1d` | ❌ | | |
| `trend2d` | ❌ | | |
### Grid processing
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `dimfilter` | ✅ | #4550 | `pygmt.dimfilter` |
| `grd2kml` | ❌ | | |
| `grd2xyz` | ✅ | #4553 | `pygmt.grd2xyz` |
| `grdblend` | ❌ | | |
| `grdclip` | ✅ | #3882 | `pygmt.grdclip` |
| `grdconvert` | ❌ | | |
| `grdcut` | ✅ | #4554 | `pygmt.grdcut` |
| `grdedit` | ❌ | | |
| `grdfft` | ❌ | | |
| `grdfill` | ✅ | #3768 | `pygmt.grdfill` |
| `grdfilter` | ✅ | #4252 | `pygmt.grdfilter` |
| `grdgdal` | ❌ | | |
| `grdgradient` | ✅ | #4253 | `pygmt.grdgradient` |
| `grdhisteq` | ✅ | #4572 | `pygmt.grdhisteq` |
| `grdinfo` | ✅ | #4555 | `pygmt.grdinfo` |
| `grdinterpolate` | ❌ | | |
| `grdlandmask` | ✅ | #4433 | `pygmt.grdlandmask` |
| `grdmask` | ✅ | #4427 | `pygmt.grdmask` |
| `grdmath` | ❌ | | |
| `grdmix` | ❌ | | |
| `grdpaste` | ✅ | #4395 | `pygmt.grdpaste` |
| `grdproject` | ✅ | #4556 | `pygmt.grdproject` |
| `grdsample` | ✅ | #4416 | `pygmt.grdsample` |
| `grdselect` | ❌ | | |
| `grdtrack` | ✅ | #4557 | `pygmt.grdtrack` |
| `grdtrend` | ❌ | | |
| `grdvector` | ❌ | | |
| `grdvolume` | ✅ | #4558 | `pygmt.grdvolume` |
| `greenspline` | ❌ | | |
| `nearneighbor` | ✅ | #4561 | `pygmt.nearneighbor` |
| `sph2grd` | ✅ | #4565 | `pygmt.sph2grd` |
| `sphdistance` | ✅ | #4566 | `pygmt.sphdistance` |
| `sphinterpolate` | ✅ | #4567 | `pygmt.sphinterpolate` |
| `sphtriangulate` | ❌ | | |
| `surface` | ✅ | #4568 | `pygmt.surface` |
| `triangulate` | ✅ | #4569 | `pygmt.triangulate` |
| `xyz2grd` | ✅ | #2852 | `pygmt.xyz2grd` |
### Miscellaneous
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `batch` | ❌ | | |
| `begin` | ✅ | #4574 | |
| `clear` | ❌ | | |
| `docs` | ❌ | | |
| `end` | ✅ | #4574 | |
| `figure` | ✅ | | |
| `gmtdefaults` | ❌ | | |
| `gmtget` | ❌ | | |
| `gmtread` | ❌ | | |
| `gmtset` | ✅ | #4573 | `pygmt.config` |
| `gmtwhich` | ✅ | #3003 | `pygmt.which` |
| `gmtwrite` | ❌ | | |
| `movie` | ❌ | | |
## Supplementary Modules
### Geodesy
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `earthtide` | ❌ | | |
| `gpsgridder` | ❌ | | |
| `velo` | ✅ | #4542 | `Figure.velo` |
### GSFML
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `fzanalyzer` | ❌ | | |
| `fzblender` | ❌ | | |
| `mlconverter` | ❌ | | |
### GSHHG
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `gshhg` | ❌ | | |
### IMG
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `img2grd` | ❌ | | |
### MGD77
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `mgd77convert` | ❌ | | |
| `mgd77header` | ❌ | | |
| `mgd77info` | ❌ | | |
| `mgd77list` | ❌ | | |
| `mgd77magref` | ❌ | | |
| `mgd77manage` | ❌ | | |
| `mgd77path` | ❌ | | |
| `mgd77sniffer` | ❌ | | |
| `mgd77track` | ❌ | | |
### potential
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `gmtflexure` | ❌ | | |
| `gmtgravmag3d` | ❌ | | |
| `grdflexure` | ❌ | | |
| `grdgravmag3d` | ❌ | | |
| `grdredpol` | ❌ | | |
| `grdseamount` | ❌ | | |
| `gravfft` | ❌ | | |
| `gravprisms` | ❌ | | |
| `talwani2d` | ❌ | | |
| `talwani3d` | ❌ | | |
### SEGY
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `segy2grd` | ❌ | | |
| `segy` | ❌ | | |
| `segyz` | ❌ | | |
### seis
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `coupe` | ❌ | | |
| `gmtisf` | ❌ | | |
| `grdshake` | ❌ | | |
| `grdvs30` | ❌ | | |
| `meca` | ✅ | #3829 | `Figure.meca` |
| `polar` | ❌ | | |
| `sac` | ❌ | #4853 | `Figure.sac` |
### spotter
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `backtracker` | ❌ | | |
| `gmtpmodeler` | ❌ | | |
| `grdpmodeler` | ❌ | | |
| `grdrotater` | ❌ | | |
| `grdspotter` | ❌ | | |
| `hotspotter` | ❌ | | |
| `originater` | ❌ | | |
| `polespotter` | ❌ | | |
| `rotconverter` | ❌ | | |
| `rotsmoother` | ❌ | | |
### windbarbs
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `barb` | ❌ | | |
| `grdbarb` | ❌ | | |
### x2sys
| Module | Wrapped | Issue | Notes |
|---|---|---|---|
| `x2sys_binlist` | ❌ | | |
| `x2sys_cross` | ✅ | #4060 | `pygmt.x2sys_cross` |
| `x2sys_datalist` | ❌ | | |
| `x2sys_get` | ❌ | | |
| `x2sys_init` | ✅ | #4570 | `pygmt.x2sys_init` |
| `x2sys_list` | ❌ | | |
| `x2sys_merge` | ❌ | | |
| `x2sys_put` | ❌ | | |
| `x2sys_report` | ❌ | | |
| `x2sys_solve` | ❌ | | |
Contributor guide
Research direction
Start with the project board and the existing module-coverage tables in the issue body, then compare the listed GMT modules with the outputs of `gmt --show-modules-core` and `gmt --show-modules`. Done means the overview accurately identifies wrapped and unsupported modules, preserves the relevant issue links and API names, and reflects the stated PyGMT and GMT versions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- documentation
- Issue type
- Documentation
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 64/100