Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document how to parse verbose messages to report equivalent GMT commands #573

Closed
seisman opened this issue Aug 31, 2020 · 10 comments · Fixed by #1610
Closed

Document how to parse verbose messages to report equivalent GMT commands #573

seisman opened this issue Aug 31, 2020 · 10 comments · Fixed by #1610
Assignees
Labels
documentation Improvements or additions to documentation upstream Bug or missing feature of upstream core GMT
Milestone

Comments

@seisman
Copy link
Member

seisman commented Aug 31, 2020

Description of the desired feature

Sometimes we may need the equivalent GMT commands. For example,

  1. some PyGMT issues are actually due to upstream GMT bugs (https://forum.generic-mapping-tools.org/t/829). When we open a GMT bug, we need the equivalent bash script
  2. currently, how PyGMT works is a little fragile. Any unknown arguments are directly passed to GMT. See a bug report Fail for invalid input arguments  #256. The error messages are really confusing. But if the equivalent CLI commands are printed out, it would be much easier to understand why it doesn't work as expected.

GMT already provides 7 verbosity levels by the -V option. The 7 verbosity levels (higher levels add more messages) are:

q < e < w < t < i < c < d

Here I propose to add one more verbosity level, for example, verbose='p'. The verbosity level should be between q and e, i.e.,

q <   < e < w < t < i < c < d
    ^
    |
    p

If verbose='p' is used, they PyGMT should print the equivalent GMT command when calling the function call_module().

I only spent a few seconds to choose the character p and its verbosity level. So I'm open to better choices.

Are you willing to help implement and maintain this feature?

Yes, it should be easy to implement it in the call_module() function. Contributions are welcomed.

@weiji14
Copy link
Member

weiji14 commented Aug 31, 2020

I think the intention is good, it does take a bit of experience translating PyGMT Python commands to GMT bash commands, and any way we can simplify this to improve bug reports will be a plus.

That said, I'm not sure if this should live in the PyGMT library. Presumably other GMT wrappers like GMT.jl and GMTmex might find it useful too?

@seisman
Copy link
Member Author

seisman commented Aug 31, 2020

Ping @PaulWessel @joa-quim for thoughts on this.

@PaulWessel
Copy link
Member

First reaction is that it sounds like a debug option, hence might be part of -Vd, but I am guessing you want to just see those commands. Of course, it makes no sense from the command line GMT to document and explain p since we already have the commands. So, first to check, might this go into -Vd as is?

@weiji14
Copy link
Member

weiji14 commented Aug 31, 2020

How about just for -Vi at the informative level?

@PaulWessel
Copy link
Member

Sure, and actually, we know if we are called from externals (API->external is true) so we could print command when it makes sense.

@seisman seisman added the upstream Bug or missing feature of upstream core GMT label Sep 12, 2020
@seisman
Copy link
Member Author

seisman commented Sep 29, 2020

For cross-reference, the feature will be implemented in upstream GMT GenericMappingTools/gmt#4131.

@seisman
Copy link
Member Author

seisman commented Sep 30, 2020

The feature has been implemented in the GMT master branch. Here is an example showing how it works:

The example PyGMT script

#!/usr/bin/env python
import pygmt

### To report equivalent GMT commands, you need to add this line to your PyGMT script
pygmt.config(GMT_VERBOSE='d')

fig = pygmt.Figure()
fig.basemap(region='g', projection='H15c', frame=['xaf', 'yaf', '+t"Global Map"'])
fig.coast(shorelines='1/0.5p')
fig.savefig("map.pdf")

Then, run the script and extract the GMT commands from verbose messages:

$ python test.py 2>&1 | grep GMT_Call_Command | awk -F': ' '{print "gmt", $3}'

gmt figure 71485df0ed3b4d4983d7a2d6bc2a5445 -
gmt figure 71485df0ed3b4d4983d7a2d6bc2a5445 -
gmt basemap -Bxaf -Byaf -B+t"Global Map" -JH15c -Rg
gmt figure 71485df0ed3b4d4983d7a2d6bc2a5445 -
gmt coast -W1/0.5p
gmt figure 71485df0ed3b4d4983d7a2d6bc2a5445 -
gmt psconvert -A -Fmap -Qg2 -Qt2 -Tf
gmt end
gmt figure 71485df0ed3b4d4983d7a2d6bc2a5445

@seisman
Copy link
Member Author

seisman commented Sep 30, 2020

Shall we document it somewhere?

@weiji14
Copy link
Member

weiji14 commented Sep 30, 2020

Yep, should document this in CONTRIBUTING.md or perhaps in our bug report template? Might need to wait for GMT 6.2.0 to come out near the end of the year though.

@seisman
Copy link
Member Author

seisman commented Oct 6, 2020

perhaps in our bug report template

I don't think users need to know the trick when reporting bugs. Perhaps better to document it in CONTRIBUTING.md.

@weiji14 weiji14 added this to the 0.4.0 milestone Nov 22, 2020
@seisman seisman mentioned this issue Feb 3, 2021
5 tasks
@weiji14 weiji14 added the documentation Improvements or additions to documentation label Jun 1, 2021
@weiji14 weiji14 changed the title Add a verbosity level to report equivalent GMT commands Document how to parse verbose messages to report equivalent GMT commands Jun 1, 2021
@weiji14 weiji14 modified the milestones: 0.4.0, 0.5.0 Jun 21, 2021
@weiji14 weiji14 modified the milestones: 0.5.0, 0.6.0 Oct 28, 2021
@maxrjones maxrjones self-assigned this Nov 5, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation upstream Bug or missing feature of upstream core GMT
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants