/gmt-python

A Python interface for the Generic Mapping Tools

Primary LanguagePythonBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

GMT/Python

A Python interface for the Generic Mapping Tools.

Documentation | Install | First steps | API | Contact

Latest version on PyPI Travis CI build status Test coverage status Compatible Python versions. Chat room on Gitter

Disclaimer

This package in early stages of design and implementation.

We welcome any feedback and ideas! Let us know by submitting issues on Github or send us a message on our Gitter chatroom.

See the documentation for our design ideas, currently implemented features, how to contribute, and more.

Getting started

  1. Install (tested and working on Linux and OSX)
  2. Follow the First steps tutorial Jupyter notebook.
  3. Take a look at the API Reference to see what is already available.

Project goals

  • Build a modern Pythonic API that appeals to Python programmers who want to use GMT.
  • Implement readable and explicit aliases for the GMT command-line arguments (region instead of R, projection instead of J, etc).
  • Use the new GMT modern mode for simplified execution and figure generation.
  • Interface with the GMT C API directly using ctypes (no system calls).
  • Integration with the Jupyter notebook to display plots and maps inline.
  • Input and output using Python native containers: numpy ndarray or pandas DataFrame for data tables and xarray Dataset for netCDF grids.

Contributing

Imposter syndrome disclaimer

We want your help. No, really.

There may be a little voice inside your head that is telling you that you're not ready to be an open source contributor; that your skills aren't nearly good enough to contribute. What could you possibly offer a project like this one?

We assure you that the little voice in your head is wrong.

If you can write any code at all, you can contribute code to open source. We are constantly trying out new skills, making mistakes, and learning from those mistakes. That's how we all improve and we are happy to help others learn.

Being a contributor doesn't just mean writing code. Equality important contributions include: writing or proof-reading documentation, suggesting or implementing tests, or even giving feedback about the project (including giving feedback about the contribution process). If you're coming to the project with fresh eyes, you might see the errors and assumptions that seasoned contributors have glossed over.

This disclaimer was adapted from the MetPy project.

Code of conduct

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

Working features and TODO

  • [X] Initial package layout and base documentation
  • [X] Call basic functions from the C API: GMT_Create_Session, GMT_Destroy_Session, and GMT_Call_Module
  • [X] Setup testing infrastructure for generated plots, possibly taking advantage of matplotlib's pytest-mpl
  • [X] Wrappers for basic session management functions (begin, end, and figure).
  • [X] Implement a global modern mode session that starts at import time and is destroyed when the program ends. This eliminates the need for begin and end in the Python API.
  • [X] Minimal working code producing a figure from data on disk
  • [X] Implement an object-oriented API using a Figure class (similar to matplotlib).
  • [ ] Wrapper for the GMT VirtualFile machinery to allow communicating data in memory to the modules
  • [ ] Wrapper for GMT_DATA to pass in tabular data from numpy arrays
  • [ ] Wrapper for GMT_GRID to pass in grids from xarray Datasets

License

gmt-python is free software: you can redistribute it and/or modify it under the terms of the BSD 3-clause License. A copy of this license is provided in LICENSE.txt.