Skip to content
Commits on Source (5)
qiime2/_version.py export-subst
# Contributing to this project
Thanks for thinking of us :heart: :tada: - we would love a helping hand!
## I just have a question
> Note: Please don't file an issue to ask a question. You'll get faster results
> by using the resources below.
### QIIME 2 Users
Check out the [User Docs](https://docs.qiime2.org) - there are many tutorials,
walkthroughs, and guides available. If you still need help, please visit us at
the [QIIME 2 Forum](https://forum.qiime2.org/c/user-support).
### QIIME 2 Developers
Check out the [Developer Docs](https://dev.qiime2.org) - there are many
tutorials, walkthroughs, and guides available. If you still need help, please
visit us at the [QIIME 2 Forum](https://forum.qiime2.org/c/dev-discussion).
This document is based heavily on the following:
https://github.com/atom/atom/blob/master/CONTRIBUTING.md
---
name: I am a user and I need help with QIIME 2...
about: I am using QIIME 2 and have a question or am experiencing a problem
---
Have you had a chance to check out the docs?
https://docs.qiime2.org
There are many tutorials, walkthroughs, and guides available.
If you still need help, please visit:
https://forum.qiime2.org/c/user-support
Help requests filed here will not be answered.
---
name: I am a developer and I need help with QIIME 2...
about: I am developing a QIIME 2 plugin or interface and have a question or a problem
---
Have you had a chance to check out the developer docs?
https://dev.qiime2.org
There are many tutorials, walkthroughs, and guides available.
If you still need help, please visit:
https://forum.qiime2.org/c/dev-discussion
---
name: I am a developer and I found a bug...
about: I am a developer and I found a bug that I can describe
---
**Bug Description**
A clear and concise description of what the bug is.
**Steps to reproduce the behavior**
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Computation Environment**
- OS: [e.g. macOS High Sierra]
- QIIME 2 Release [e.g. 2018.6]
**Questions**
1. An enumerated list with any questions about the problem here.
2. If not applicable, please delete this section.
**Comments**
1. An enumerated list with any other context or comments about the problem here.
2. If not applicable, please delete this section.
**References**
1. An enumerated list of links to relevant references, including forum posts, stack overflow, etc.
2. If not applicable, please delete this section.
---
name: I am a developer and I have an idea for an improvement...
about: I am a developer and I have an idea for an improvement to existing functionality
---
**Improvement Description**
A clear and concise description of what the improvement is.
**Current Behavior**
Please provide a brief description of the current behavior.
**Proposed Behavior**
Please provide a brief description of the proposed behavior.
**Questions**
1. An enumerated list of questions related to the proposal.
2. If not applicable, please delete this section.
**Comments**
1. An enumerated list of comments related to the proposal that don't fit anywhere else.
2. If not applicable, please delete this section.
**References**
1. An enumerated list of links to relevant references, including forum posts, stack overflow, etc.
2. If not applicable, please delete this section.
---
name: I am a developer and I have an idea for a new feature...
about: I am a developer and I have an idea for new functionality
---
**Addition Description**
A clear and concise description of what the addition is.
**Current Behavior**
Please provide a brief description of the current behavior, if applicable.
**Proposed Behavior**
Please provide a brief description of the proposed behavior.
**Questions**
1. An enumerated list of questions related to the proposal.
2. If not applicable, please delete this section.
**Comments**
1. An enumerated list of comments related to the proposal that don't fit anywhere else.
2. If not applicable, please delete this section.
**References**
1. An enumerated list of links to relevant references, including forum posts, stack overflow, etc.
2. If not applicable, please delete this section.
---
name: I don't know where to file my issue...
about: I am a developer and I don't know which repo to file this in
---
The repos within the QIIME 2 GitHub Organization are listed below, with a brief description about the repo.
Sorted alphabetically by repo name.
- The CI automation engine that builds and distributes QIIME 2
https://github.com/qiime2/busywork/issues
- A Concourse resource for working with conda
https://github.com/qiime2/conda-channel-resource/issues
- Old conda recipes (repo is mostly unused now)
https://github.com/qiime2/conda-recipes/issues
- Web app for vanity URLs for QIIME 2 data assets
https://github.com/qiime2/data.qiime2.org/issues
- The Developer Documentation
https://github.com/qiime2/dev-docs/issues
- A discourse plugin for handling queued/unqueued topics
https://github.com/qiime2/discourse-unhandled-tagger/issues
- The User Documentation
https://github.com/qiime2/docs/issues
- Rendered QIIME 2 environment files for conda
https://github.com/qiime2/environment-files/issues
- Google Sheets Add-On for validating tabular data
https://github.com/qiime2/Keemei/issues
- A docker image for linux-based busywork workers
https://github.com/qiime2/linux-worker-docker/issues
- Official project logos
https://github.com/qiime2/logos/issues
- The q2-alignment plugin
https://github.com/qiime2/q2-alignment/issues
- The q2-composition plugin
https://github.com/qiime2/q2-composition/issues
- The q2-cutadapt plugin
https://github.com/qiime2/q2-cutadapt/issues
- The q2-dada2 plugin
https://github.com/qiime2/q2-dada2/issues
- The q2-deblur plugin
https://github.com/qiime2/q2-deblur/issues
- The q2-demux plugin
https://github.com/qiime2/q2-demux/issues
- The q2-diversity plugin
https://github.com/qiime2/q2-diversity/issues
- The q2-emperor plugin
https://github.com/qiime2/q2-emperor/issues
- The q2-feature-classifier plugin
https://github.com/qiime2/q2-feature-classifier/issues
- The q2-feature-table plugin
https://github.com/qiime2/q2-feature-table/issues
- The q2-gneiss plugin
https://github.com/qiime2/q2-gneiss/issues
- The q2-longitudinal plugin
https://github.com/qiime2/q2-longitudinal/issues
- The q2-metadata plugin
https://github.com/qiime2/q2-metadata/issues
- The q2-phylogeny plugin
https://github.com/qiime2/q2-phylogeny/issues
- The q2-quality-control plugin
https://github.com/qiime2/q2-quality-control/issues
- The q2-quality-filter plugin
https://github.com/qiime2/q2-quality-filter/issues
- The q2-sample-classifier plugin
https://github.com/qiime2/q2-sample-classifier/issues
- The q2-taxa plugin
https://github.com/qiime2/q2-taxa/issues
- The q2-types plugin
https://github.com/qiime2/q2-types/issues
- The q2-vsearch plugin
https://github.com/qiime2/q2-vsearch/issues
- The CLI interface
https://github.com/qiime2/q2cli/issues
- The prototype CWL interface
https://github.com/qiime2/q2cwl/issues
- The prototype Galaxy interface
https://github.com/qiime2/q2galaxy/issues
- An internal tool for ensuring header text and copyrights are present
https://github.com/qiime2/q2lint/issues
- The prototype GUI interface
https://github.com/qiime2/q2studio/issues
- A base template for use in official QIIME 2 plugins
https://github.com/qiime2/q2templates/issues
- The read-only web interface at view.qiime2.org
https://github.com/qiime2/q2view/issues
- The QIIME 2 homepage at qiime2.org
https://github.com/qiime2/qiime2.github.io/issues
- The QIIME 2 framework
https://github.com/qiime2/qiime2/issues
- Centralized templates for repo assets
https://github.com/qiime2/template-repo/issues
- Scripts for building QIIME 2 VMs
https://github.com/qiime2/vm-playbooks/issues
- Scripts for building QIIME 2 workshop clusters
https://github.com/qiime2/workshop-playbooks/issues
- The web app that runs workshops.qiime2.org
https://github.com/qiime2/workshops.qiime2.org/issues
# QIIME 2 Users
Check out the [User Docs](https://docs.qiime2.org) - there are many tutorials,
walkthroughs, and guides available. If you still need help, please visit us at
the [QIIME 2 Forum](https://forum.qiime2.org/c/user-support).
# QIIME 2 Developers
Check out the [Developer Docs](https://dev.qiime2.org) - there are many
tutorials, walkthroughs, and guides available. If you still need help, please
visit us at the [QIIME 2 Forum](https://forum.qiime2.org/c/dev-discussion).
# General Bug/Issue Triage Discussion
![rubric](./rubric.png?raw=true)
# Projects/Repositories in the QIIME 2 GitHub Organization
Sorted alphabetically by repo name.
- [busywork](https://github.com/qiime2/busywork/issues)
| The CI automation engine that builds and distributes QIIME 2
- [conda-channel-resource](https://github.com/qiime2/conda-channel-resource/issues)
| A Concourse resource for working with conda
- [conda-recipes](https://github.com/qiime2/conda-recipes/issues)
| Old conda recipes (repo is mostly unused now)
- [data.qiime2.org](https://github.com/qiime2/data.qiime2.org/issues)
| Web app for vanity URLs for QIIME 2 data assets
- [dev-docs](https://github.com/qiime2/dev-docs/issues)
| The Developer Documentation
- [discourse-unhandled-tagger](https://github.com/qiime2/discourse-unhandled-tagger/issues)
| A discourse plugin for handling queued/unqueued topics
- [docs](https://github.com/qiime2/docs/issues)
| The User Documentation
- [environment-files](https://github.com/qiime2/environment-files/issues)
| Rendered QIIME 2 environment files for conda
- [Keemei](https://github.com/qiime2/Keemei/issues)
| Google Sheets Add-On for validating tabular data
- [linux-worker-docker](https://github.com/qiime2/linux-worker-docker/issues)
| A docker image for linux-based busywork workers
- [logos](https://github.com/qiime2/logos/issues)
| Official project logos
- [q2-alignment](https://github.com/qiime2/q2-alignment/issues)
| The q2-alignment plugin
- [q2-composition](https://github.com/qiime2/q2-composition/issues)
| The q2-composition plugin
- [q2-cutadapt](https://github.com/qiime2/q2-cutadapt/issues)
| The q2-cutadapt plugin
- [q2-dada2](https://github.com/qiime2/q2-dada2/issues)
| The q2-dada2 plugin
- [q2-deblur](https://github.com/qiime2/q2-deblur/issues)
| The q2-deblur plugin
- [q2-demux](https://github.com/qiime2/q2-demux/issues)
| The q2-demux plugin
- [q2-diversity](https://github.com/qiime2/q2-diversity/issues)
| The q2-diversity plugin
- [q2-emperor](https://github.com/qiime2/q2-emperor/issues)
| The q2-emperor plugin
- [q2-feature-classifier](https://github.com/qiime2/q2-feature-classifier/issues)
| The q2-feature-classifier plugin
- [q2-feature-table](https://github.com/qiime2/q2-feature-table/issues)
| The q2-feature-table plugin
- [q2-gneiss](https://github.com/qiime2/q2-gneiss/issues)
| The q2-gneiss plugin
- [q2-longitudinal](https://github.com/qiime2/q2-longitudinal/issues)
| The q2-longitudinal plugin
- [q2-metadata](https://github.com/qiime2/q2-metadata/issues)
| The q2-metadata plugin
- [q2-phylogeny](https://github.com/qiime2/q2-phylogeny/issues)
| The q2-phylogeny plugin
- [q2-quality-control](https://github.com/qiime2/q2-quality-control/issues)
| The q2-quality-control plugin
- [q2-quality-filter](https://github.com/qiime2/q2-quality-filter/issues)
| The q2-quality-filter plugin
- [q2-sample-classifier](https://github.com/qiime2/q2-sample-classifier/issues)
| The q2-sample-classifier plugin
- [q2-taxa](https://github.com/qiime2/q2-taxa/issues)
| The q2-taxa plugin
- [q2-types](https://github.com/qiime2/q2-types/issues)
| The q2-types plugin
- [q2-vsearch](https://github.com/qiime2/q2-vsearch/issues)
| The q2-vsearch plugin
- [q2cli](https://github.com/qiime2/q2cli/issues)
| The CLI interface
- [q2cwl](https://github.com/qiime2/q2cwl/issues)
| The prototype CWL interface
- [q2galaxy](https://github.com/qiime2/q2galaxy/issues)
| The prototype Galaxy interface
- [q2lint](https://github.com/qiime2/q2lint/issues)
| An internal tool for ensuring header text and copyrights are present
- [q2studio](https://github.com/qiime2/q2studio/issues)
| The prototype GUI interface
- [q2templates](https://github.com/qiime2/q2templates/issues)
| A base template for use in official QIIME 2 plugins
- [q2view](https://github.com/qiime2/q2view/issues)
| The read-only web interface at view.qiime2.org
- [qiime2.github.io](https://github.com/qiime2/qiime2.github.io/issues)
| The QIIME 2 homepage at qiime2.org
- [qiime2](https://github.com/qiime2/qiime2/issues)
| The QIIME 2 framework
- [template-repo](https://github.com/qiime2/template-repo/issues)
| Centralized templates for repo assets
- [vm-playbooks](https://github.com/qiime2/vm-playbooks/issues)
| Scripts for building QIIME 2 VMs
- [workshop-playbooks](https://github.com/qiime2/workshop-playbooks/issues)
| Scripts for building QIIME 2 workshop clusters
- [workshops.qiime2.org](https://github.com/qiime2/workshops.qiime2.org/issues)
| The web app that runs workshops.qiime2.org
Brief summary of the Pull Request, including any issues it may fix using the GitHub closing syntax:
https://help.github.com/articles/closing-issues-using-keywords/
Also, include any co-authors or contributors using the GitHub coauthor tag:
https://help.github.com/articles/creating-a-commit-with-multiple-authors/
---
Include any questions for reviewers, screenshots, sample outputs, etc.
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
# Sphinx documentation
docs/_build/
# PyBuilder
target/
#Ipython Notebook
.ipynb_checkpoints
# vi
.*.swp
.DS_Store
# should fix duplicated/non-matching names after the migration from svn/SF
Adam Robbins-Pianka <adam.robbinspianka@colorado.edu> Adam Robbins-Pianka <adro2179@compy.colorado.edu>
Antonio Gonzalez <antgonza@gmail.com> Antonio Gonzalez <antoniog@rl1-2-207-73-dhcp.int.colorado.edu>
Antonio Gonzalez <antgonza@gmail.com> antgonza <antgonza@gmail.com>
Catherine Lozupone <lozupone@colorado.edu> Cathy Lozupone <lozupone@colorado.edu>
Dan Knights <danknights@gmail.com> Dan Knights <dknights@umn.edu>
Dan Knights <danknights@gmail.com> danknights <danknights@gmail.com>
Daniel McDonald <mcdonadt@colorado.edu> Daniel McDonald <wasade@gmail.com>
David Soergel <dev@davidsoergel.com> David Soergel <lorax@lorax.org>
Jose Carlos Clemente <jose.clemente@gmail.com> Jose Carlos Clemente Litran <jose.clemente@gmail.com>
Jose Navas <josenavasmolina@gmail.com> jose <jose@jose-K53SJ.(none)>
Justin Kuczynski <justinak@gmail.com> justin <justinak@gmail.com>
Luke Ursell <lkursell@gmail.com> Luke Ursell <lukeursell@rl1-2-208-245-dhcp.int.colorado.edu>
Luke Ursell <lkursell@gmail.com> Luke Ursell <lukeursell@rl1-2-208-95-dhcp.int.colorado.edu>
Tony Walters <william.a.walters@gmail.com> walterst <william.a.walters@gmail.com>
Will Van Treuren <William.Vantreuren@colorado.edu> William Van Treuren <wdwvt1@gmail.com>
Will Van Treuren <William.Vantreuren@colorado.edu> wdwvt1 <wdwvt1@gmail.com>
Will Van Treuren <William.Vantreuren@colorado.edu> Will Van Treuren <william.vantreuren@colorado.edu>
Yoshiki Vázquez Baeza <yoshiki89@gmail.com> Yoshiki <yoshiki89@gmail.com>
dist: trusty
sudo: false
language: python
before_install:
- export MPLBACKEND='Agg'
- wget -q https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
- export MINICONDA_PREFIX="$HOME/miniconda"
- bash miniconda.sh -b -p $MINICONDA_PREFIX
- export PATH="$MINICONDA_PREFIX/bin:$PATH"
- conda config --set always_yes yes
- conda update -q conda
- conda info -a
install:
- wget -q https://raw.githubusercontent.com/qiime2/environment-files/master/latest/staging/qiime2-latest-py35-linux-conda.yml
- conda env create -q -n test-env --file qiime2-latest-py35-linux-conda.yml
- source activate test-env
- pip install -q flake8
- conda install nose
- pip install -q https://github.com/qiime2/q2lint/archive/master.zip
- make install
script:
- make lint
- make test
Contributing to QIIME
=====================
Contributing to QIIME 2
-----------------------
[QIIME](http://www.qiime.org) is an open source software package, and we welcome community contributions. You can find the source code and test code for QIIME under public revision control in the QIIME git repository on [GitHub](https://github.com/qiime/qiime). While we have a core development group, we very much welcome contributions from other users.
This document covers what you should do to get started with contributing to QIIME. You should read this whole document before considering submitting code to QIIME. This will save time for both you and the QIIME developers.
To get help with using QIIME, please visit http://help.qiime.org.
Type of Submissions
-------------------
Some of the types of contributions we're interested in are new features (big or small, but for big ones it's generally a good idea to ask us if we're interested in including it before starting development), bug fixes, and documentation updates, additions, and fixes.
When considering submitting a new feature to QIIME, you should begin by posting an issue to the [QIIME issue tracker](https://github.com/qiime/qiime/issues). The information that you include in that post will differ based on the type of contribution. Your contribution will also need to be fully tested (discussed further below).
* For new features, you'll want to describe why the functionality that you are proposing to add is relevant. For it to be relevant, it should be demonstrably useful to QIIME users. This typically means that a new analytic method is implemented (you should describe why it's useful, ideally including a link to a paper that uses this method), or an existing method is enhanced (your implementation matches the performance of the pre-existing method while reducing runtime, memory consumption, etc, or it improves performance over the pre-existing method). We will request benchmark results comparing your method to the pre-existing methods (which would also be required for publication of your method) so pointing to a paper or other document containing benchmark results, or including benchmark results in your issue, will speed up the process.
* For bug fixes, you should provide a detailed description of the bug so other developers can reproduce it. We take bugs in QIIME very seriously. Bugs can be related to errors in code, documentation, or tests. Errors in documentation or tests are usually updated in the next major release of QIIME. Errors in code that could result in incorrect results or inability to access certain functionality may result in a new minor release of QIIME.
You should include the following information in your bug report:
1. The exact command or function call that you issue to create the bug.
2. A link to all necessary input files for reproducing the bug. These files should only be as large as necessary to create the bug. For example, if you have an input file with 10,000 fasta-formatted sequences but the error only arises due to one of the sequences, create a new fasta file with only that sequence, run the command that was giving you problems, and verify that you still get an error. Then post that command and link to the trimmed fasta file. This is *extremely* useful to other developers, and it is likely that if you don't provide this information you'll get a response asking for it. Often this process helps you to better understand the bug as well.
* For documentation additions, you should first post an issue describing what you propose to add, where you'd like to add it in the documentation, and a description of why you think it's an important addition. For documentation improvements and fixes, you should post an issue describing what is currently wrong or missing, and how you propose to address it.
When you post your issue, the QIIME developers will respond to let you know if we agree with the addition or change. It's very important that you go through this step to avoid wasting time working on a feature that we are not interested in including in QIIME.
Getting started: "quick fixes"
------------------------------
Some of our issues are labeled as ``quick fix``. Working on [these issues](https://github.com/qiime/qiime/issues?direction=desc&labels=quick+fix&milestone=&page=1&sort=updated&state=open) is a good way to get started with contributing to QIIME. These are usually small bugs or documentation errors that will only require one or a few lines of code to fix. Getting started by working on one of these issues will allow you to familiarize yourself with our development process before committing to a large amount of work (e.g., adding a new feature to QIIME). If you're interested in working on one of these issues, you should comment on the issue requesting that it be assigned to you.
Code Review
-----------
When you submit code to QIIME, it will be reviewed by one or more QIIME developers. These reviews are intended to confirm a few points:
* Your code is sufficiently well-tested (see Testing Guidelines below).
* Your code adheres to our Coding Guidelines (see Coding Guidelines below).
* Your code is sufficiently well-documented (see Coding Guidelines below).
* Your code provides relevant changes or additions to QIIME (Type of Submissions above).
This process is designed to ensure the quality of QIIME, and can be a very useful experience for new developers.
Particularly for big changes, if you'd like feedback on your code in the form of a code review as you work, you should request help in the issue that you created and one of the QIIME developers will work with you to perform regular code reviews. This can greatly reduce development time (and frustration) so we highly recommend that new developers take advantage of this rather than submitting a pull request with a massive amount of code in one chunk. That can lead to frustration when the developer thinks they are done, but the reviewer requests large amounts of changes, and it is also very hard to review.
Submitting code to QIIME
------------------------
QIIME is hosted on [GitHub](http://www.github.com), and we use GitHub's [Pull Request](https://help.github.com/articles/using-pull-requests) mechanism for accepting submissions. You should go through the following steps to submit code to QIIME.
1. Begin by [creating an issue](https://github.com/qiime/qiime/issues) describing your proposed change. This should include a description of your proposed change (is it a new feature, a bug fix, etc.), and note in the issue description that you want to work on it. If you'll be modifying existing QIIME file(s), you'll want to get input from the developer responsible for the relevant file(s) via a discussion on the issue tracker to let them know you what you'd like to do. The developer responsible for the code is named in the ``__maintainer__`` variable at the top of the file. Once you hear back that it is OK to make changes (i.e., they don't have local edits, they agree with the change you'd like to make, and they're comfortable with you editing their code), we will assign the issue to you on GitHub.
2. [Fork](https://help.github.com/articles/fork-a-repo) the QIIME repository on the GitHub website to your GitHub account.
3. Clone your forked repository to the system where you'll be developing with ``git clone``.
4. Ensure that you have the latest version of all files (especially important if you cloned a long time ago, but you'll need to do this before submitting changes regardless). You should do this by adding QIIME as a remote repository and then pulling from that repository. You'll only need to run the ``git remote`` step one time:
```
git checkout master
git remote add upstream https://github.com/qiime/qiime.git
git pull upstream master
```
5. Create a new topic branch that you will make your changes in with ``git checkout -b``:
```
git checkout -b my-topic-branch
```
6. Run ``qiime/tests/all_tests.py`` to confirm that the tests pass before you make any changes. You may get some failures, for example if you don't have an external application (e.g., RDP Classifier) installed. It is acceptable to continue if the failing tests are unrelated to the the code your working with. However, if you want to make changes to ``assign_taxonomy.py`` and ``test_assign_taxonomy.py`` is failing because of missing external applications, you should not proceed until you have installed the external applications and all tests pass.
7. Make your changes, add them (with ``git add``), and commit them (with ``git commit``). Don't forget to update associated scripts and tests as necessary. You should make incremental commits, rather than one massive commit at the end. Write descriptive commit messages to accompany each commit.
8. When you think you're ready to submit your code, again ensure that you have the latest version of all files in case some changed while you were working on your edits. You can do this by merging master into your topic branch:
```
git checkout my-topic-branch
git pull upstream master
```
9. Run ``qiime/tests/all_tests.py`` to ensure that your changes did not cause anything unexpected to break. Note that some tests may fail again because you do not have external applications installed. This is why it is important that you run ``all_tests.py`` prior to making changes: if the same tests fail, then you should be OK.
10. Once the tests pass, you should push your changes to your forked repository on GitHub using:
```
git push origin my-topic-branch
```
11. Issue a [pull request](https://help.github.com/articles/using-pull-requests) on the GitHub website to request that we merge your branch's changes into QIIME's master branch. One of the QIIME developers will review your code at this stage. If we request changes (which is very common), *don't issue a new pull request*. You should make changes on your topic branch, and commit and push them to GitHub. Your pull request will update automatically.
Coding Guidelines
-----------------
We adhere to the [PEP 8](http://www.python.org/dev/peps/pep-0008/) python coding guidelines for code and documentation standards. Before submitting any code to QIIME, you should read these carefully and apply the guidelines in your code.
On reviewing QIIME, you will notice that all of our code isn't up to PEP 8 standards. This is something that we're striving toward, and as such all new contributions must adhere.
Testing Guidelines
------------------
All code that is added to QIIME must be unit tested, and the unit test code must be submitted in the same pull request as the library code that you are submitting. We will not merge code that is not unit tested. The PyCogent Coding Guidelines describe our [expectations for unit tests](http://pycogent.org/coding_guidelines.html?highlight=coding%20guidelines#how-should-i-test-my-code). You should review the unit test section before working on your test code.
Because (at this time) our user interface is entirely command-line-based, we have developed a script interface testing framework to ensure that future changes to scripts don't break the command line interface. If you are developing or extending a QIIME script, you should review the [PyCogent script guidelines](http://pycogent.org/scripting_guidelines.html) and the [script interface testing documentation](http://qiime.org/developer/script_testing.html).
Getting help with git
=====================
If you're new to ``git``, you'll probably find [gitref.org](http://gitref.org/) helpful.
QIIME 2 is an open-source project, and we are very interested in contributions from the community. Please get in touch through the [QIIME 2 Forum](https://forum.qiime2.org) if you'd like to get involved.
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
{description}
Copyright (C) {year} {fullname}
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
This diff is collapsed.
BSD 3-Clause License
Copyright (c) 2016-2018, QIIME 2 development team.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
include CONTRIBUTING.md
include COPYING.txt
include ChangeLog.md
include README.md
graft examples
graft tests
graft scripts
graft doc
prune docs/_build
global-exclude *.pyc
global-exclude *.pyo
global-exclude .git
global-exclude FastTree
global-exclude uclust
global-exclude FlowgramAli_4frame
global-exclude indexdb_rna
global-exclude sortmerna
global-exclude sumaclust
global-exclude swarm
global-exclude amplicon_contingency_table.py
global-exclude swarm_breaker.py
global-exclude *.hi
global-exclude *.o
global-exclude qiime_test_data
include versioneer.py
include qiime2/_version.py
.PHONY: all lint test install dev clean distclean
all: ;
lint:
q2lint
flake8
test: all
QIIMETEST= nosetests
install: all
python setup.py install && \
mkdir -p $(CONDA_PREFIX)/etc/conda/activate.d && \
cp hooks/00_activate_qiime2_envs.sh $(CONDA_PREFIX)/etc/conda/activate.d/ && \
mkdir -p $(CONDA_PREFIX)/etc/conda/deactivate.d && \
cp hooks/00_deactivate_qiime2_envs.sh $(CONDA_PREFIX)/etc/conda/deactivate.d/
dev: all
pip install -e .
clean: distclean
distclean: ;