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

Universal virtualfile_from_data function to replace virtualfile_from_grid/matrix/vectors #949

Closed
6 tasks done
weiji14 opened this issue Feb 21, 2021 · 1 comment · Fixed by #1988
Closed
6 tasks done
Assignees
Labels
enhancement Improving an existing feature help wanted Helping hands are appreciated
Milestone

Comments

@weiji14
Copy link
Member

weiji14 commented Feb 21, 2021

Description of the desired feature

As a user, I'd like to be able to pass in any type of data into a PyGMT function in a consistent way, be it:

Current state

We have a not so nice if... then block that currently handles the Input/Output (I/O) of data into PyGMT. This results in an incosistent API. E.g. fig.plot requires numpy.ndarray inputs while pygmt.grdtrack requires pandas.DataFrame inputs. Users (e.g. at https://forum.generic-mapping-tools.org/t/pygmt-plot-errorbars) should not have to figure out which PyData format is needed.

Originally posted by @weiji14 in #946 (comment)

I was going to create a virtualfile_from_data() function to replace this common block of code in our functions:

    with Session() as lib:
        # Choose how data will be passed in to the module
        if kind == "file":
            file_context = dummy_context(data)
        elif kind == "matrix":
            file_context = lib.virtualfile_from_matrix(data)
        elif kind == "vectors":
            file_context = lib.virtualfile_from_vectors(...)

Future state

The idea is to have a virtualfile_from_data() function (open to other names) that wraps around the current dummy_context/virtualfile_from_matrix/virtualfile_from_vectors/virtualfile_from_grid functions, which makes things easier for both end users and developers wrapping new modules that handle data.

This universal virtualfile_from_data() may pave the way to support more data inputs in the future:

TLDR: Be able to throw any sort of data into a PyGMT function and it will 'just work'.

Note that xarray is in the process of refactoring to an APIv2 (see pydata/xarray#4309) that has some similarities with this issue. They call it a 'Flexible Backend", a sort of extensible 'plugin'-type system which is a bit more future proofed to allow for new data formats (e.g. GPU backed arrays) coming in.

Are you willing to help implement and maintain this feature? Yes, but help is very welcome

Update: The virtualfile_from_data function has been created in #961. Feel free people to refactor some of the plotting/data processing functions in https://github.com/GenericMappingTools/pygmt/tree/master/pygmt/src to use this (e.g. contour, meca, etc).

TODO:

@weiji14 weiji14 added help wanted Helping hands are appreciated enhancement Improving an existing feature labels Feb 21, 2021
@weiji14 weiji14 changed the title Universal virtualfile_from_data function to replace virtualfile_from_matrix/vectors Universal virtualfile_from_data function to replace virtualfile_from_grid/matrix/vectors Mar 3, 2021
@liamtoney
Copy link
Member

I'd add Path objects if they're not already supported. :)

@weiji14 weiji14 self-assigned this Mar 24, 2021
@seisman seisman added this to the 0.7.0 milestone May 15, 2022
@seisman seisman modified the milestones: 0.7.0, 0.8.0 Jun 23, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Improving an existing feature help wanted Helping hands are appreciated
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants