GenericMappingTools / GenericMappingTools/pygmt

Track progress of wrapping GMT modules

Open Beginner friendly
#4,765 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.