Condensed example of contributing code to Astropy

There are two versions:

Example, with output

In this version the commands are on the lines that begin $ others are comments or output.

#
# Setup
#
# Start by cloning the repo from your GitHub account if you need to...
$ git clone https://github.com/mwcraig/astropy.git apy-bugs
Cloning into 'apy-bugs'...
remote: Counting objects: 44980, done.
remote: Compressing objects: 100% (11772/11772), done.
remote: Total 44980 (delta 32930), reused 44980 (delta 32930)
Receiving objects: 100% (44980/44980), 18.13 MiB | 3.57 MiB/s, done.
Resolving deltas: 100% (32930/32930), done.
Checking connectivity... done.

# ...then navigate to that clone in a terminal, and...
$ cd apy-bugs
# ...rename the origin remote make its meaning clearer and...
$ git remote rename origin mwcraig
# ...remember to set up the official remote.
$ git remote add astropy git://github.com/astropy/astropy.git

# get the latest from the official repo
$ git fetch astropy --tags
remote: Counting objects: 37, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 37 (delta 10), reused 23 (delta 7)
Unpacking objects: 100% (37/37), done.
From git://github.com/astropy/astropy
 * [new branch]      master     -> astropy/master
 * [new branch]      stable     -> astropy/stable
 * [new branch]      v0.1.x     -> astropy/v0.1.x
 * [new branch]      v0.2.x     -> astropy/v0.2.x
 * [new branch]      v0.3.x     -> astropy/v0.3.x
#
# Make a new branch for this fix
#
$ git branch i-1761 astropy/master # branch just for this work
Branch i-1761 set up to track remote branch master from astropy.

$ git checkout i-1761               # work on this branch
Switched to branch 'i-1761'
Your branch is up-to-date with 'astropy/master'.

# let my github account know about this branch
$ git push --set-upstream mwcraig i-1761 # Hey GitHub, get ready to receive my work
Branch i-1761 set up to track remote branch i-1761 from mwcraig.
Everything up-to-date

#
# Make a python environment for this work -- conda version shown
#
$ conda create -n apy-1761 --clone root   # copy my default environment
Output not shown

$ source activate apy-1761                # switch to this environment
prepending /Users/mcraig/anaconda/envs/apy-1761/bin to PATH

# next step DOES NOT WORK in python 3
$ python setup.py develop   # install astropy, python 2
# using python 3? do this instead: python3 setup.py install
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-
gxx-include-dir=/usr/include/c++/4.2.1
running develop
running egg_info
writing requirements to astropy.egg-info/requires.txt
writing astropy.egg-info/PKG-INFO
...
Using /Users/mcraig/anaconda/envs/apy-1761/lib/python2.7/site-packages
Finished processing dependencies for astropy==0.4.dev6873

#
# Check setup by running tests
#
$ cd astropy/coordinates/tests    # get ready to run coordinate tests
$ py.test                         # test
============================= test session starts ==============================
platform darwin -- Python 2.7.6 -- pytest-2.4.2

Running tests with Astropy version 0.4.dev6877.
Running tests in /Users/mcraig/Development/astronomy/apy-bugs/astropy/coordinates/tests.

Platform: Darwin-13.0.0-x86_64-i386-64bit

Executable: /Users/mcraig/anaconda/envs/apy-1761/bin/python

Full Python Version:
2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Nov 11 2013, 10:49:09)
[GCC 4.0.1 (Apple Inc. build 5493)]

encodings: sys: ascii, locale: US-ASCII, filesystem: utf-8, unicode bits: 15
byteorder: little
float info: dig: 15, mant_dig: 15

Numpy: 1.7.1
Scipy: 0.13.0
Matplotlib: 1.3.1
h5py: 2.2.0

plugins: capturelog
collected 103 items / 2 skipped

test_angles.py .......................
test_angular_separation.py ..
test_api.py ............
test_arrays.py .............
test_distance.py ........
test_formatting.py ....................
test_matching.py ....
test_name_resolve.py ss
test_transformations.py ...............
accuracy/test_fk4_no_e_fk4.py .
accuracy/test_fk4_no_e_fk5.py .
accuracy/test_galactic_fk4.py .
accuracy/test_icrs_fk5.py .

=================== 101 passed, 4 skipped in 152.23 seconds ===================

$ ls   # what is here?
__init__.py                test_api.pyc
__init__.pyc               test_arrays.py
__pycache__                test_distance.py
accuracy                   test_formatting.py
test_angles.py             test_matching.py
test_angular_separation.py test_name_resolve.py
test_api.py                test_transformations.py
#
# Write a test in test_arrays.py to expose this bug
#
# After edit, re-test
#
$ py.test test_arrays.py # Hopefully this FAILS--we are trying to expose bug

Running tests with Astropy version 0.4.dev6873.
Running tests in test_arrays.py.

Platform: Darwin-13.0.0-x86_64-i386-64bit

Executable: /Users/mcraig/anaconda/envs/apy-1761/bin/python

Full Python Version:
2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Nov 11 2013, 10:49:09)
[GCC 4.0.1 (Apple Inc. build 5493)]

encodings: sys: ascii, locale: US-ASCII, filesystem: utf-8, unicode bits: 15
byteorder: little
float info: dig: 15, mant_dig: 15

Numpy: 1.7.1
Scipy: 0.13.0
Matplotlib: 1.3.1
h5py: 2.2.0

plugins: capturelog
collected 13 items

test_arrays.py ............F

=================================== FAILURES ===================================
________________________________ test_array_len ________________________________

    def test_array_len():
        from .. import ICRS

        input_length = 5
        ra = np.linspace(0, 360, input_length)
        dec = np.linspace(0, 90, input_length)

        c = ICRS(ra, dec, unit=(u.degree, u.degree))

>       assert len(c) == input_length
E       TypeError: object of type 'ICRS' has no len()

test_arrays.py:291: TypeError
===================== 1 failed, 12 passed in 2.49 seconds ======================

# Good, failure, as expected.
#
# what did we do? Remind me, git
#
$ git status
On branch i-1761
Your branch is up-to-date with 'mwcraig/i-1761'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   test_arrays.py

no changes added to commit (use "git add" and/or "git commit -a")

#
# How about more detail, git?
$ git diff
diff --git a/astropy/coordinates/tests/test_arrays.py b/astropy/coordinates/test
index 2785b59..7eecfbb 100644
--- a/astropy/coordinates/tests/test_arrays.py
+++ b/astropy/coordinates/tests/test_arrays.py
@@ -278,3 +278,14 @@ def test_array_indexing():
     assert c2.equinox == c1.equinox
     assert c3.equinox == c1.equinox
     assert c4.equinox == c1.equinox
+
+def test_array_len():
+    from .. import ICRS
+
+    input_length = 5
+    ra = np.linspace(0, 360, input_length)
+    dec = np.linspace(0, 90, input_length)
+
+    c = ICRS(ra, dec, unit=(u.degree, u.degree))
+
+    assert len(c) == input_length

#
# Stage, then commit
$ git add test_arrays.py          # get ready to commit
# always include a message with your commits
$ git commit -m'Add test for array coordinate length (issue #1761)'
[i-1761 23ba4ce] Add test for array coordinate length (issue #1761)
 1 file changed, 11 insertions(+)

#
# Now fix the bug...edit ../coordsystems.py
#
# Code fix made in editor
#
# Test change
#
$ py.test test_arrays.py   # Did our fix actually fix the problem?
============================= test session starts ==============================
platform darwin -- Python 2.7.6 -- pytest-2.4.2

Running tests with Astropy version 0.4.dev6874.
Running tests in test_arrays.py.

Platform: Darwin-13.0.0-x86_64-i386-64bit

Executable: /Users/mcraig/anaconda/envs/apy-1761/bin/python

Full Python Version:
2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Nov 11 2013, 10:49:09)
[GCC 4.0.1 (Apple Inc. build 5493)]

encodings: sys: ascii, locale: US-ASCII, filesystem: utf-8, unicode bits: 15
byteorder: little
float info: dig: 15, mant_dig: 15

Numpy: 1.7.1
Scipy: 0.13.0
Matplotlib: 1.3.1
h5py: 2.2.0

plugins: capturelog
collected 13 items

test_arrays.py .............

========================== 13 passed in 2.60 seconds ===========================

# Great! We fixed it!
#
# Run all of the coordinate tests to make sure we broke nothing...
$ py.test                        # do all of the coordinate tests pass?
============================= test session starts ==============================
platform darwin -- Python 2.7.6 -- pytest-2.4.2

Running tests with Astropy version 0.4.dev6877.
Running tests in /Users/mcraig/Development/astronomy/apy-bugs/astropy/coordinates/tests.

Platform: Darwin-13.0.0-x86_64-i386-64bit

Executable: /Users/mcraig/anaconda/envs/apy-1761/bin/python

Full Python Version:
2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Nov 11 2013, 10:49:09)
[GCC 4.0.1 (Apple Inc. build 5493)]

encodings: sys: ascii, locale: US-ASCII, filesystem: utf-8, unicode bits: 15
byteorder: little
float info: dig: 15, mant_dig: 15

Numpy: 1.7.1
Scipy: 0.13.0
Matplotlib: 1.3.1
h5py: 2.2.0

plugins: capturelog
collected 103 items / 2 skipped

test_angles.py .......................
test_angular_separation.py ..
test_api.py ............
test_arrays.py .............
test_distance.py ........
test_formatting.py ....................
test_matching.py ....
test_name_resolve.py ss
test_transformations.py ...............
accuracy/test_fk4_no_e_fk4.py .
accuracy/test_fk4_no_e_fk5.py .
accuracy/test_galactic_fk4.py .
accuracy/test_icrs_fk5.py .

=================== 101 passed, 4 skipped in 152.23 seconds ===================

# So far, so good, now check ALL tests
$ cd ../../..                       # up to the top level to check all of the tests
$ python setup.py test           # grab a coffee now; this takes a while
onfigured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Freezing version number to astropy/version.py
running test
running build
running build_py
copying astropy/version.py -> build/lib.macosx-10.5-x86_64-2.7/astropy
copying astropy/coordinates/tests/test_arrays.py -> build/lib.macosx-10.5-x86_64-2.7/astropy/coordinates/tests
...
OUTPUT TRUNCATED

#
# Success! Commit our change
#
$ git status                     # check what we have changed, if you forgot
On branch i-1761
Your branch is ahead of 'mwcraig/i-1761' by 1 commit.
  (use "git push" to publish your local commits)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   astropy/coordinates/coordsystems.py

no changes added to commit (use "git add" and/or "git commit -a")

# stage change
$ git add astropy/coordinates/coordsystems.py # Copy and paste path from git status
                                             # unless you like typing
# commit, with message!
$ git commit -m"
    > Add len() to coordinates
    >
    > Closes #1761"
[i-1761 9688f7e] Add len() to coordinates
 1 file changed, 2 insertions(+)

# copy changes to the i-1761 branch in my github account...
$ git push           # or not--can wait until you are completely done
Counting objects: 52, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (11/11), 1.01 KiB | 0 bytes/s, done.
Total 11 (delta 9), reused 0 (delta 0)
To https://github.com/mwcraig/astropy.git
   7fa981e..9688f7e  i-1761 -> i-1761

#
# Oops! Forgot to include some tests!
#
$ cd astropy/coordinates/tests   # back to add more tests
#
# edit test_arrays.py to add tests to test_array_len
#
# Now re-test
#
$ py.test test_arrays.py  # do these tests pass with the new tests?
============================= test session starts ==============================
platform darwin -- Python 2.7.6 -- pytest-2.4.2

Running tests with Astropy version 0.4.dev6874.
Running tests in test_arrays.py.

Platform: Darwin-13.0.0-x86_64-i386-64bit

Executable: /Users/mcraig/anaconda/envs/apy-1761/bin/python

Full Python Version:
2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Nov 11 2013, 10:49:09)
[GCC 4.0.1 (Apple Inc. build 5493)]

encodings: sys: ascii, locale: US-ASCII, filesystem: utf-8, unicode bits: 15
byteorder: little
float info: dig: 15, mant_dig: 15

Numpy: 1.7.1
Scipy: 0.13.0
Matplotlib: 1.3.1
h5py: 2.2.0

plugins: capturelog
collected 13 items

test_arrays.py .............

========================== 13 passed in 2.60 seconds ===========================

#
#   yes! now move up a couple of levels to check all tests
#
#   Do I really have to re-test everything? It certainly never hurts and
#   potentially saves time for the maintainers if you have introduced a bug.
#
$ cd ../../..          # back to the top level
$ python setup.py test # grab another coffee....
OUTPUT OMITTED

#
# Success! Time to commit
#
$ git status           # optional, but useful for figuring out what to add
On branch i-1761
Your branch is up-to-date with 'mwcraig/i-1761'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   astropy/coordinates/tests/test_arrays.py

no changes added to commit (use "git add" and/or "git commit -a")

#
# Stage...
$ git add astropy/coordinates/tests/test_arrays.py # use path git status supplies

# Commit, with a message...
$ git commit -m"Add tests of len() for scalar coordinate and length 1 coordinate"
[i-1761 ed92c2d] Add tests of len() for scalar coordinate and length 1 coordinat
e
 1 file changed, 10 insertions(+), 5 deletions(-)

# Almost done...
#
# Edit the changelog in CHANGES.rst
#
# Then commit changes
#
$ git add CHANGES.rst
$ git commit -m"Add changelog entry for 1761"
[i-1761 bf6fcfc] Add changelog entry for 1761
 1 file changed, 2 insertions(+)

#
# Push changes to my GitHub account
#
$ git push   # make sure all of our changes are in our github account
Counting objects: 47, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 836 bytes | 0 bytes/s, done.
Total 8 (delta 6), reused 0 (delta 0)
To https://github.com/mwcraig/astropy.git
   9688f7e..bf6fcfc  i-1761 -> i-1761

#
# Go to GitHub to make pull request. Remember to switch to this branch before
# pushing the pull request button.
#

Example, no output

#
# Setup
#
# Start by cloning the repo from your GitHub account if you need to...
git clone https://github.com/mwcraig/astropy.git apy-bugs
# ...then navigate to that clone in a terminal, and...
cd apy-bugs
# ...rename the origin remote make its meaning clearer and...
git remote rename origin mwcraig
# ...remember to set up the official remote.
git remote add astropy git://github.com/astropy/astropy.git
# get the latest from the official repo
git fetch astropy --tags
#
# Make a new branch for this fix
#
git branch i-1761 astropy/master # branch just for this work
git checkout i-1761               # work on this branch
git push --set-upstream mwcraig i-1761 # Hey GitHub, get ready to receive my work
#
# Make a python environment for this work -- conda version shown
#
conda create -n apy-1761 --clone root   # copy my default environment
source activate apy-1761                # switch to this environment
# next step DOES NOT WORK in python 3
python setup.py develop                 # install astropy
#
# Check setup by running tests
#
cd astropy/coordinates/tests    # get ready to run coordinate tests
py.test                         # test
ls                              # what is here?
#
# Write a test in test_arrays.py to expose this bug
#
# After edit, re-test
#
py.test test_arrays.py          # Hopefully this succeeds
#
# Commit changes to local git
#
git status                      # what did we do? Remind me, git
git add test_arrays.py          # get ready to commit
# always include a message with your commits
git commit -m'Add test for array coordinate length (issue #1761)'
git status                      # Best to be informed!
#
# Edit test_arrays.py
#
cd ..                           # up a level to coordinates
#
# Code fix made in editor
#
#
# Test change
#
py.test tests/test_arrays.py   # Did our fix actually fix the problem?
py.test                        # do all of the coordinate tests pass?
cd ../..                       # up to the top level to check all of the tests
python setup.py test           # grab a coffee now; this takes a while
#
# Success! Commit our change
#
git status                     # check what we have changed, if you forgot
git add astropy/coordinates/coordsystems.py  # Copy and paste path from git status
                                             # unless you like typing
# check git staus again if you want...or not.
# commit, with message!
git commit -m"
    > Add len() to coordinates
    >
    > Closes #1761"
git push                       # or not--can wait until you are completely done
#
# Oops! Forgot to include some tests!
#
cd astropy/coordinates/tests   # back to add more tests
#
# edit test_arrays.py to add tests to test_array_len
#
# Now re-test
#
py.test test_arrays.py  # do these tests pass with the new tests?
#   yes! now move up a couple of levels to check all tests
#
#   Do I really have to re-test everything? It certainly never hurts and
#   potentially saves time for the maintainers if you have introduced a bug.
#
cd ../../..          # back to the top level
python setup.py test # grab another coffee....
#
# Success! Time to commit
#
git status           # optional, but useful for figuring out what to add
git add astropy/coordinates/tests/test_arrays.py # use path git status supplies
# Commit, with a message...
git commit -m"Add tests of len() for scalar coordinate and length 1 coordinate"
#
# Edit the changelog in CHANGES.rst
#
# Then commit changes
#
git add CHANGES.rst
git commit -m"Add changelog entry for 1761"
#
# Push changes to my GitHub account
#
git push   # make sure all of our changes are in our github account
#
# Go to GitHub to make pull request. Remember to switch to this branch before
# pushing the pull request button.
#