GenericMappingTools / GenericMappingTools/pygmt

Make PyGMT stateful

Open
#2,388 1 comment 0 reactions 0 assignees View on GitHub
question
Dominant language
Python
Stars
874
Forks
255
Avg merge
1d 21h
Merged PRs (30d)
40

Description

I'm unsure if "_stateful_" is the appropriate word here. What I really mean is to let PyGMT keep track of its stats and some information, then later PyGMT calls can know what already happened.

I think the "stats" can be useful in many cases. Here are some quick ideas. Let's say we have a dict `pygmt.__stats__` for PyGMT and a dict `fig.__stats__` for each Figure instance, which can store anything we want. The variable names have double underscores so they are for internal use only, but it's also possible to make them public to users.

1. `pygmt.__stats__.call_history` can be a list of commands that are passed to the GMT API via `call_module`. The list can be used to generate the equivalent bash script, although we can't handle virtual files and any other Python data structures.
2. `fig.__stats__.projection`: the projection of the current figure
3. `fig.__stats__.region`: the region parameter of the current figure (c.f. https://www.pygmt.org/dev/api/generated/pygmt.clib.Session.extract_region.html)
4. `fig.__stats__.dimensions`: width and height of the current figure/frame/subplot/inset. Users can access these values via public functions, and then can do some mathematic calculates (e.g., to have an inset map with a width of 0.25 * *w* or shift the plot origin by 1.2 * *w* (*w* is the width of current figure stored in `fig.__stats__.dimensions`)).

I believe there are more interesting ideas about a stateful PyGMT, so thoughts and comments are welcomed.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.