Contributing
Style
We attempt as much as possible to adhere to PEP8. Adherence to PEP8 standards can be checked using the pycodestyle package from your fast-trips directory:
pycodestyle fasttrips
Development Workflow
Aside from the core developer team, we use a fork-and-pull workflow.
We use the Git Flow branching model whereby there is always a master and develop branch. New features should always be developed in a branch from the develop branch.
In general, development should respond to identified issues that proceed along a general roadmap for Fast-Trips. If no issue exists then please consider making one before proceeding so that your approach can be discussed with the team. When possible, issues should be written as .`user stories <https://en.wikipedia.org/wiki/User_story>`_.
When possible, the team strives to adhere to agile software development principles.
Roadmap
Testing
There are a few dozen tests that are stored in \tests
. They can be run by installing the
PyTest library ( pip install pytest
and executing the command pytest
from the command line within your <fast-trips-dir>
.
Most of the tests use test scenarios that can be found in the fasttrips/Examples
directory.
Many (but not all) of the tests can be individually run by giving the command python tests/test_<TESTNAME>.py
.
Test output defaults to the folder fasttrips/Examples/output
Continuous Integration
We use the GitHub Actions continuous integration that runs the following at each and every pull request:
Complete set of unit-testing on Linux, macOS and Windows
Documentation building test
Package (wheel) build test on Linux, macOS and Windows
This is a departure from the original strategy of running a small subset of tests during more intense development,
and we recommend running the entire test suite locally using the py.test
command prior to issuing a pull-request.
Additionally, it is important to understand that most of the tests are system-level tests that do not guarantee correct results so much as they make sure the system runs without an error.
For documentation-only commits, put “skip ci” somewhere in your commit message to not trigger the Travis testing.
Some regression tests have regression output that needs to be refreshed an thus have a function decorator
@pytest.mark.skip
so that they are skipped.
Test Descriptions
To run:
python tests/<Test File>
Test Name |
Test File |
Description |
---|---|---|
Assignment Type |
|
Tests both deterministic and stochastic shortest path and hyperpaths. |
Simple Bunny Hop |
|
Tests forward and backward stochastic hyperpaths as well as a sensitivity test with a different network. |
Calculate Cost |
|
Regression test of cost calculations. |
Convergence |
|
|
Cost Symmetry |
|
Tests that the costs from the c++ pathfinding and the python calculate cost functions return the same values. |
Dispersion Levels |
|
Runs dispersion levels at .0, 0.5, 0.1 |
Distance Calculation |
|
|
Fares |
|
|
Feedback |
|
Runs demand for three iterations w/ and w/out capacity constraints |
GTFS |
|
Test that we can read and process GTFS-Plus |
Max Stop Process Count |
|
Tests 10, 50, and 100 for value of max stop process count – the maximum times you will re-process a node (default: None) |
Overlap Functions |
|
Tests both overlap type and whether or not each transit segment is broken and up into parts. Tests: overlap variable: count, distance, time overlap split: Boolean |
Flexible Departure/ |
|
Tests that flexible departure and arrival window penalties are working. |
Penalty Functions |
|
Tests that penalty functions for flexible departure and arrival windows work. |
Regional Network |
|
Tests that things work on a large, regional network |
User Classes |
|
Uses multiple user classes as defined in |
Function Transformations |
|
Note
Multiprocessing is not tested because it is incompatible with PyTest
Documentation
Functions, classes and methods should be documented using restructured text docstrings to be compiled in SPHINX using autodoc functionality, doxygen for c++, and breathe to link them.
An automatic CI workflow running on GitHub Actions compiles a new version of the documentation at each pull request an stores it on GitHub for up to 30 days.
This CI workflow will fail if the documentation cannot be built. In that case, the documentation needs to be fixed before the new branch is merged.
On merge to master, the GitHub Actions CI workflow also uploads the resulting documentation to the gh-pages branch, keeping the online documentation in perfect synchrony with the code.
To rebuild the documentation, you must have sphinx, numpydoc, and the read-the-docs sphinx theme installed, as well as doxygen and the breathe to update the c++ documentation:
pip install -r requirements_dev.txt
Building the C++ documentation also requires other software installation, and you can follow the directions provided on the doxygen page to install, or if you have brew installed on a mac, use the command:
brew install doxygen
Make sure the file doc\doxygen.conf
adds the breathe package location to your path using sys.path.append
.
Building documentation
If you have updated the c++ module, you should first update its documentation by running the following command from the
\doc
directory:
doxygen doxygen.conf
This will output xml-formatted documentation to :code: doc\source\doxygen\xml
.
Then run sphinx running the following command from the :code: \doc
directory:
sphinx-build -b html source build
Push documentation to gh-pages branch
In case there is a need to manually upload the compiled documentation to GitHub, it can be done via a GUI or by using the following commands from the root fast-trips directory:
tar czf /tmp/html.tgz doc/build/** ## zips and copies files to temp directory
git checkout gh-pages ## checks out github pages directory
git rm -rf . ## clean out gh-pages branch...but not the .git folder!
tar xzf /tmp/html.tgz ## unzip the html that you had stashed in the temp directory
git add .
git commit -a -m "documentation for version x.x"
git push origin gh-pages
Note
make sure you have made any commits to the code you wanted to keep before checking out the gh-pages branch!
Todo List
Please see the Issues list on Github as well as the in-code todo list below.
Todo
This is really about the access and egress links; perhaps it should be renamed?
(The original entry is located in /home/runner/work/fast-trips/fast-trips/fasttrips/TAZ.py:docstring of fasttrips.TAZ.TAZ, line 6.)
Releases
Whenever a new release is made on GitHub, all wheels for all Python versions and operating systems supported are automatically uploaded to the Python Package Index (PyPI), while all the documentation is automatically updated in the github page for the project.