Contributing to traja¶
(Contribution guidelines largely copied from geopandas)
Contributions to traja are very welcome. They are likely to be accepted more quickly if they follow these guidelines.
At this stage of traja development, the priorities are to define a simple, usable, and stable API and to have clean, maintainable, readable code. Performance matters, but not at the expense of those goals.
In general, traja follows the conventions of the pandas project where applicable.
In particular, when submitting a pull request:
- All existing tests should pass. Please make sure that the test suite passes, both locally and on Travis CI. Status on Travis will be visible on a pull request. If you want to enable Travis CI on your own fork, please read the pandas guidelines link above or the getting started docs.
- New functionality should include tests. Please write reasonable tests for your code and make sure that they pass on your pull request.
- Classes, methods, functions, etc. should have docstrings. The first line of a docstring should be a standalone summary. Parameters and return values should be ducumented explicitly.
- traja supports python 3 (3.6+). Use modern python idioms when possible.
- Follow PEP 8 when possible.
- Imports should be grouped with standard library imports first, 3rd-party libraries next, and traja imports third. Within each grouping, imports should be alphabetized. Always use absolute imports when possible, and explicit relative imports for local imports when necessary in tests.
Seven Steps for Contributing¶
There are seven basic steps to contributing to traja:
- Fork the traja git repository
- Create a development environment
- Install traja dependencies
- Make a
developmentbuild of traja
- Make changes to code and add tests
- Update the documentation
- Submit a Pull Request
Each of these 7 steps is detailed below.
1) Forking the traja repository using Git¶
To the new user, working with Git is one of the more daunting aspects of contributing to traja*. It can very quickly become overwhelming, but sticking to the guidelines below will help keep the process straightforward and mostly trouble free. As always, if you are having difficulties please feel free to ask for help.
Some great resources for learning Git:
Getting started with Git¶
GitHub has instructions for installing git, setting up your SSH key, and configuring git. All these steps need to be completed before you can work seamlessly between your local repository and GitHub.
You will need your own fork to work on the code. Go to the traja project
page and hit the
Fork button. You will
want to clone your fork to your machine:
git clone email@example.com:your-user-name/traja.git traja-yourname cd traja-yourname git remote add upstream git://github.com/traja-team/traja.git
This creates the directory traja-yourname and connects your repository to the upstream (main project) traja repository.
The testing suite will run automatically on Travis-CI once your pull request is submitted. However, if you wish to run the test suite on a branch prior to submitting the pull request, then Travis-CI needs to be hooked up to your GitHub repository. Instructions for doing so are here.
Creating a branch¶
You want your master branch to reflect only production-ready code, so create a feature branch for making your changes. For example:
git branch shiny-new-feature git checkout shiny-new-feature
The above can be simplified to:
git checkout -b shiny-new-feature
This changes your working directory to the shiny-new-feature branch. Keep any changes in this branch specific to one bug or feature so it is clear what the branch brings to traja. You can have many shiny-new-features and switch in between them using the git checkout command.
To update this branch, you need to retrieve the changes from the master branch:
git fetch upstream git rebase upstream/master
This will replay your commits on top of the latest traja git master. If this
leads to merge conflicts, you must resolve these before submitting your pull
request. If you have uncommitted changes, you will need to
stash them prior
to updating. This will effectively store your changes and they can be reapplied
2) Creating a development environment¶
A development environment is a virtual space where you can keep an independent installation of traja. This makes it easy to keep both a stable version of python in one place you use for work, and a development version (which you may break while playing with code) in another.
An easy way to create a traja development environment is as follows:
- Install either Anaconda or miniconda
- Make sure that you have cloned the repository
cdto the traja* source directory
Tell conda to create a new environment, named
traja_dev, or any other name you would like
for this environment, by running:
conda create -n traja_dev
For a python 3 environment:
conda create -n traja_dev python=3.8
This will create the new environment, and not touch any of your existing environments, nor any existing python installation.
To work in this environment, Windows users should
activate it as follows:
Mac OSX and Linux users should use:
source activate traja_dev
You will then see a confirmation message to indicate you are in the new development environment.
To view your environments:
conda info -e
To return to you home root environment:
See the full conda docs here.
At this point you can easily do a development install, as detailed in the next sections.
3) Installing Dependencies¶
To run traja in an development environment, you must first install traja’s dependencies. We suggest doing so using the following commands (executed after your development environment has been activated):
conda install -c conda-forge shapely pip install -r requirements/dev.txt
This should install all necessary dependencies.
Next activate pre-commit hooks by running:
4) Making a development build¶
Once dependencies are in place, make an in-place build by navigating to the git clone of the traja repository and running:
python setup.py develop
5) Making changes and writing tests¶
traja is serious about testing and strongly encourages contributors to embrace test-driven development (TDD). This development process “relies on the repetition of a very short development cycle: first the developer writes an (initially failing) automated test case that defines a desired improvement or new function, then produces the minimum amount of code to pass that test.” So, before actually writing any code, you should write your tests. Often the test can be taken from the original GitHub issue. However, it is always worth considering additional use cases and writing corresponding tests.
Adding tests is one of the most common requests after code is pushed to traja. Therefore, it is worth getting in the habit of writing tests ahead of time so this is never an issue.
All tests should go into the
tests directory. This folder contains many
current examples of tests, and we suggest looking to these for inspiration.
Running the test suite¶
The tests can then be run directly inside your Git clone (without having to install traja) by typing:
6) Updating the Documentation¶
traja documentation resides in the doc folder. Changes to the docs are make by modifying the appropriate file in the source folder within doc. traja docs us reStructuredText syntax, which is explained here and the docstrings follow the Numpy Docstring standard.
Once you have made your changes, you can build the docs by navigating to the doc folder and typing:
The resulting html pages will be located in doc/build/html.