GitHub PullRequestReviewCommentEvent at 2014-06-24 17:04:37
Repository: scikit-bio
Actor: ebolyen
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/biocore/scikit-bio/pulls/comments/14141122","id":14141122,"diff_hunk":"@@ -0,0 +1,578 @@\n+#!/usr/bin/env python\n+# ----------------------------------------------------------------------------\n+# Copyright (c) 2013--, scikit-bio development team.\n+#\n+# Distributed under the terms of the Modified BSD License.\n+#\n+# The full license is in the file COPYING.txt, distributed with this software.\n+# ----------------------------------------------------------------------------\n+\n+from __future__ import absolute_import, division, print_function\n+from warnings import warn\n+\n+import numpy as np\n+\n+from skbio.core.warning import EfficiencyWarning\n+from .alignment import Alignment\n+from skbio import BiologicalSequence\n+\n+# This is temporary: blosum50 does not exist in skbio yet as per\n+# issue 161. When the issue is resolved, this should be removed in favor\n+# of an import.\n+blosum50 = \\\n+    {\n+        '*': {'*': 1, 'A': -5, 'C': -5, 'B': -5, 'E': -5, 'D': -5, 'G': -5,\n+              'F': -5, 'I': -5, 'H': -5, 'K': -5, 'M': -5, 'L': -5,\n+              'N': -5, 'Q': -5, 'P': -5, 'S': -5, 'R': -5, 'T': -5,\n+              'W': -5, 'V': -5, 'Y': -5, 'X': -5, 'Z': -5},\n+        'A': {'*': -5, 'A': 5, 'C': -1, 'B': -2, 'E': -1, 'D': -2, 'G': 0,\n+              'F': -3, 'I': -1, 'H': -2, 'K': -1, 'M': -1, 'L': -2,\n+              'N': -1, 'Q': -1, 'P': -1, 'S': 1, 'R': -2, 'T': 0, 'W': -3,\n+              'V': 0, 'Y': -2, 'X': -1, 'Z': -1},\n+        'C': {'*': -5, 'A': -1, 'C': 13, 'B': -3, 'E': -3, 'D': -4,\n+              'G': -3, 'F': -2, 'I': -2, 'H': -3, 'K': -3, 'M': -2,\n+              'L': -2, 'N': -2, 'Q': -3, 'P': -4, 'S': -1, 'R': -4,\n+              'T': -1, 'W': -5, 'V': -1, 'Y': -3, 'X': -1, 'Z': -3},\n+        'B': {'*': -5, 'A': -2, 'C': -3, 'B': 6, 'E': 1, 'D': 6, 'G': -1,\n+              'F': -4, 'I': -4, 'H': 0, 'K': 0, 'M': -3, 'L': -4, 'N': 5,\n+              'Q': 0, 'P': -2, 'S': 0, 'R': -1, 'T': 0, 'W': -5, 'V': -3,\n+              'Y': -3, 'X': -1, 'Z': 1},\n+        'E': {'*': -5, 'A': -1, 'C': -3, 'B': 1, 'E': 6, 'D': 2, 'G': -3,\n+              'F': -3, 'I': -4, 'H': 0, 'K': 1, 'M': -2, 'L': -3, 'N': 0,\n+              'Q': 2, 'P': -1, 'S': -1, 'R': 0, 'T': -1, 'W': -3, 'V': -3,\n+              'Y': -2, 'X': -1, 'Z': 5},\n+        'D': {'*': -5, 'A': -2, 'C': -4, 'B': 6, 'E': 2, 'D': 8, 'G': -1,\n+              'F': -5, 'I': -4, 'H': -1, 'K': -1, 'M': -4, 'L': -4, 'N': 2,\n+              'Q': 0, 'P': -1, 'S': 0, 'R': -2, 'T': -1, 'W': -5, 'V': -4,\n+              'Y': -3, 'X': -1, 'Z': 1},\n+        'G': {'*': -5, 'A': 0, 'C': -3, 'B': -1, 'E': -3, 'D': -1, 'G': 8,\n+              'F': -4, 'I': -4, 'H': -2, 'K': -2, 'M': -3, 'L': -4, 'N': 0,\n+              'Q': -2, 'P': -2, 'S': 0, 'R': -3, 'T': -2, 'W': -3, 'V': -4,\n+              'Y': -3, 'X': -1, 'Z': -2},\n+        'F': {'*': -5, 'A': -3, 'C': -2, 'B': -4, 'E': -3, 'D': -5,\n+              'G': -4, 'F': 8, 'I': 0, 'H': -1, 'K': -4, 'M': 0, 'L': 1,\n+              'N': -4, 'Q': -4, 'P': -4, 'S': -3, 'R': -3, 'T': -2, 'W': 1,\n+              'V': -1, 'Y': 4, 'X': -1, 'Z': -4},\n+        'I': {'*': -5, 'A': -1, 'C': -2, 'B': -4, 'E': -4, 'D': -4,\n+              'G': -4, 'F': 0, 'I': 5, 'H': -4, 'K': -3, 'M': 2, 'L': 2,\n+              'N': -3, 'Q': -3, 'P': -3, 'S': -3, 'R': -4, 'T': -1,\n+              'W': -3, 'V': 4, 'Y': -1, 'X': -1, 'Z': -3},\n+        'H': {'*': -5, 'A': -2, 'C': -3, 'B': 0, 'E': 0, 'D': -1, 'G': -2,\n+              'F': -1, 'I': -4, 'H': 10, 'K': 0, 'M': -1, 'L': -3, 'N': 1,\n+              'Q': 1, 'P': -2, 'S': -1, 'R': 0, 'T': -2, 'W': -3, 'V': -4,\n+              'Y': 2, 'X': -1, 'Z': 0},\n+        'K': {'*': -5, 'A': -1, 'C': -3, 'B': 0, 'E': 1, 'D': -1, 'G': -2,\n+              'F': -4, 'I': -3, 'H': 0, 'K': 6, 'M': -2, 'L': -3, 'N': 0,\n+              'Q': 2, 'P': -1, 'S': 0, 'R': 3, 'T': -1, 'W': -3, 'V': -3,\n+              'Y': -2, 'X': -1, 'Z': 1},\n+        'M': {'*': -5, 'A': -1, 'C': -2, 'B': -3, 'E': -2, 'D': -4,\n+              'G': -3, 'F': 0, 'I': 2, 'H': -1, 'K': -2, 'M': 7, 'L': 3,\n+              'N': -2, 'Q': 0, 'P': -3, 'S': -2, 'R': -2, 'T': -1, 'W': -1,\n+              'V': 1, 'Y': 0, 'X': -1, 'Z': -1},\n+        'L': {'*': -5, 'A': -2, 'C': -2, 'B': -4, 'E': -3, 'D': -4,\n+              'G': -4, 'F': 1, 'I': 2, 'H': -3, 'K': -3, 'M': 3, 'L': 5,\n+              'N': -4, 'Q': -2, 'P': -4, 'S': -3, 'R': -3, 'T': -1,\n+              'W': -2, 'V': 1, 'Y': -1, 'X': -1, 'Z': -3},\n+        'N': {'*': -5, 'A': -1, 'C': -2, 'B': 5, 'E': 0, 'D': 2, 'G': 0,\n+              'F': -4, 'I': -3, 'H': 1, 'K': 0, 'M': -2, 'L': -4, 'N': 7,\n+              'Q': 0, 'P': -2, 'S': 1, 'R': -1, 'T': 0, 'W': -4, 'V': -3,\n+              'Y': -2, 'X': -1, 'Z': 0},\n+        'Q': {'*': -5, 'A': -1, 'C': -3, 'B': 0, 'E': 2, 'D': 0, 'G': -2,\n+              'F': -4, 'I': -3, 'H': 1, 'K': 2, 'M': 0, 'L': -2, 'N': 0,\n+              'Q': 7, 'P': -1, 'S': 0, 'R': 1, 'T': -1, 'W': -1, 'V': -3,\n+              'Y': -1, 'X': -1, 'Z': 4},\n+        'P': {'*': -5, 'A': -1, 'C': -4, 'B': -2, 'E': -1, 'D': -1,\n+              'G': -2, 'F': -4, 'I': -3, 'H': -2, 'K': -1, 'M': -3,\n+              'L': -4, 'N': -2, 'Q': -1, 'P': 10, 'S': -1, 'R': -3,\n+              'T': -1, 'W': -4, 'V': -3, 'Y': -3, 'X': -1, 'Z': -1},\n+        'S': {'*': -5, 'A': 1, 'C': -1, 'B': 0, 'E': -1, 'D': 0, 'G': 0,\n+              'F': -3, 'I': -3, 'H': -1, 'K': 0, 'M': -2, 'L': -3, 'N': 1,\n+              'Q': 0, 'P': -1, 'S': 5, 'R': -1, 'T': 2, 'W': -4, 'V': -2,\n+              'Y': -2, 'X': -1, 'Z': 0},\n+        'R': {'*': -5, 'A': -2, 'C': -4, 'B': -1, 'E': 0, 'D': -2, 'G': -3,\n+              'F': -3, 'I': -4, 'H': 0, 'K': 3, 'M': -2, 'L': -3, 'N': -1,\n+              'Q': 1, 'P': -3, 'S': -1, 'R': 7, 'T': -1, 'W': -3, 'V': -3,\n+              'Y': -1, 'X': -1, 'Z': 0},\n+        'T': {'*': -5, 'A': 0, 'C': -1, 'B': 0, 'E': -1, 'D': -1, 'G': -2,\n+              'F': -2, 'I': -1, 'H': -2, 'K': -1, 'M': -1, 'L': -1, 'N': 0,\n+              'Q': -1, 'P': -1, 'S': 2, 'R': -1, 'T': 5, 'W': -3, 'V': 0,\n+              'Y': -2, 'X': -1, 'Z': -1},\n+        'W': {'*': -5, 'A': -3, 'C': -5, 'B': -5, 'E': -3, 'D': -5,\n+              'G': -3, 'F': 1, 'I': -3, 'H': -3, 'K': -3, 'M': -1, 'L': -2,\n+              'N': -4, 'Q': -1, 'P': -4, 'S': -4, 'R': -3, 'T': -3,\n+              'W': 15, 'V': -3, 'Y': 2, 'X': -1, 'Z': -2},\n+        'V': {'*': -5, 'A': 0, 'C': -1, 'B': -3, 'E': -3, 'D': -4, 'G': -4,\n+              'F': -1, 'I': 4, 'H': -4, 'K': -3, 'M': 1, 'L': 1, 'N': -3,\n+              'Q': -3, 'P': -3, 'S': -2, 'R': -3, 'T': 0, 'W': -3, 'V': 5,\n+              'Y': -1, 'X': -1, 'Z': -3},\n+        'Y': {'*': -5, 'A': -2, 'C': -3, 'B': -3, 'E': -2, 'D': -3,\n+              'G': -3, 'F': 4, 'I': -1, 'H': 2, 'K': -2, 'M': 0, 'L': -1,\n+              'N': -2, 'Q': -1, 'P': -3, 'S': -2, 'R': -1, 'T': -2, 'W': 2,\n+              'V': -1, 'Y': 8, 'X': -1, 'Z': -2},\n+        'X': {'*': -5, 'A': -1, 'C': -1, 'B': -1, 'E': -1, 'D': -1,\n+              'G': -1, 'F': -1, 'I': -1, 'H': -1, 'K': -1, 'M': -1,\n+              'L': -1, 'N': -1, 'Q': -1, 'P': -1, 'S': -1, 'R': -1,\n+              'T': -1, 'W': -1, 'V': -1, 'Y': -1, 'X': -1, 'Z': -1},\n+        'Z': {'*': -5, 'A': -1, 'C': -3, 'B': 1, 'E': 5, 'D': 1, 'G': -2,\n+              'F': -4, 'I': -3, 'H': 0, 'K': 1, 'M': -1, 'L': -3, 'N': 0,\n+              'Q': 4, 'P': -1, 'S': 0, 'R': 0, 'T': -1, 'W': -2, 'V': -3,\n+              'Y': -2, 'X': -1, 'Z': 5}}\n+\n+\n+def local_pairwise_align_nucleotide(seq1, seq2, gap_open_penalty=5,\n+                                    gap_extend_penalty=2,\n+                                    match_score=2, mismatch_score=-3):\n+    \"\"\"Locally align exactly two nucleotide seqs with Smith-Waterman\n+\n+       Parameters\n+       ----------\n+       seq1 : str or BiologicalSequence\n+           The first unaligned sequence.\n+       seq2 : str or BiologicalSequence\n+           The second unaligned sequence.\n+       gap_open_penalty : int, float\n+           Penalty for opening a gap (this is substracted from previous best\n+           alignment score, so is typically positive).\n+       gap_extend_penalty : int, float\n+           Penalty for extending a gap (this is substracted from previous best\n+           alignment score, so is typically positive).\n+       match_score : int, float\n+           The score to add for a match between a pair of bases (this is added\n+           to the previous best alignment score, so is typically positive).\n+       mismatch_score : int, float\n+           The score to add for a mismatch between a pair of bases (this is\n+           added to the previous best alignment score, so is typically\n+           negative).\n+\n+       Returns\n+       -------\n+       skbio.Alignment\n+           ``Alignment`` object containing the aligned sequences as well as\n+           details about the alignment.\n+\n+       Notes\n+       -----\n+       Default ``match_score``, ``mismatch_score``, ``gap_open_penalty`` and\n+       ``gap_extend_penalty`` parameters are derived from the NCBI BLAST\n+       Server.\n+\n+    \"\"\"\n+    substitution_matrix = \\\n+        _make_nt_substitution_matrix(match_score, mismatch_score)\n+\n+    return local_pairwise_align(seq1, seq2, gap_open_penalty,\n+                                gap_extend_penalty, substitution_matrix)\n+\n+\n+def local_pairwise_align_protein(seq1, seq2, gap_open_penalty=11,\n+                                 gap_extend_penalty=1,\n+                                 substitution_matrix=None):\n+    \"\"\"Locally align exactly two protein seqs with Smith-Waterman\n+\n+       Parameters\n+       ----------\n+       seq1 : str or BiologicalSequence\n+           The first unaligned sequence.\n+       seq2 : str or BiologicalSequence\n+           The second unaligned sequence.\n+       gap_open_penalty : int, float\n+           Penalty for opening a gap (this is substracted from previous best\n+           alignment score, so is typically positive).\n+       gap_extend_penalty : int, float\n+           Penalty for extending a gap (this is substracted from previous best\n+           alignment score, so is typically positive).\n+       substitution_matrix: 2D dict (or similar)\n+           Lookup for substitution scores (these values are added to the\n+           previous best alignment score); default is BLOSUM 50.\n+\n+       Returns\n+       -------\n+       skbio.Alignment\n+           ``Alignment`` object containing the aligned sequences as well as\n+           details about the alignment.\n+\n+       Notes\n+       -----\n+       Default ``gap_open_penalty`` and ``gap_extend_penalty`` parameters are\n+       derived from the NCBI BLAST Server.\n+\n+    \"\"\"\n+    if substitution_matrix is None:\n+        substitution_matrix = blosum50\n+\n+    return local_pairwise_align(seq1, seq2, gap_open_penalty,\n+                                gap_extend_penalty, substitution_matrix)\n+\n+\n+def local_pairwise_align(seq1, seq2, gap_open_penalty,\n+                         gap_extend_penalty, substitution_matrix):\n+    \"\"\"Locally align exactly two seqs with Smith-Waterman\n+\n+       Parameters\n+       ----------\n+       seq1 : str or BiologicalSequence\n+           The first unaligned sequence.\n+       seq2 : str or BiologicalSequence\n+           The second unaligned sequence.\n+       gap_open_penalty : int, float\n+           Penalty for opening a gap (this is substracted from previous best\n+           alignment score, so is typically positive).\n+       gap_extend_penalty : int, float\n+           Penalty for extending a gap (this is substracted from previous best\n+           alignment score, so is typically positive).\n+       substitution_matrix: 2D dict (or similar)\n+           Lookup for substitution scores (these values are added to the\n+           previous best alignment score).\n+\n+       Returns\n+       -------\n+       skbio.Alignment\n+           ``Alignment`` object containing the aligned sequences as well as\n+           details about the alignment.\n+\n+       Notes\n+       -----\n+       This algorithm was originally described in [1]_. The scikit-bio\n+       implementation was validated against the EMBOSS water web server [2]_.\n+\n+       References\n+       ----------\n+       .. [1] Identification of common molecular subsequences.\n+          Smith TF, Waterman MS.\n+          J Mol Biol. 1981 Mar 25;147(1):195-7.\n+       .. [2] http://www.ebi.ac.uk/Tools/psa/emboss_water/\n+\n+\n+    \"\"\"\n+    warn(\"You're using skbio's python implementation of Smith-Waterman \"\n+         \"alignment. This will be very slow (e.g., thousands of times slower) \"\n+         \"than skbio.core.alignment.local_pairwise_align_ssw.\",\n+         EfficiencyWarning)\n+\n+    score_matrix, traceback_matrix = _compute_score_and_traceback_matrices(\n+        seq1, seq2, gap_open_penalty, gap_extend_penalty,\n+        substitution_matrix, new_alignment_score=0.0,\n+        init_matrices_f=_init_matrices_sw)\n+\n+    end_row_position, end_col_position =\\\n+        np.unravel_index(np.argmax(score_matrix), score_matrix.shape)\n+\n+    aligned1, aligned2, score, seq1_start_position, seq2_start_position = \\\n+        _traceback(traceback_matrix, score_matrix, seq1, seq2,\n+                   end_row_position, end_col_position)\n+    start_end_positions = [(seq1_start_position, end_col_position-1),\n+                           (seq2_start_position, end_row_position-1)]\n+    result = Alignment(\n+        [BiologicalSequence(aligned1, id=0),\n+         BiologicalSequence(aligned2, id=1)],\n+        score=score, start_end_positions=start_end_positions)\n+    return result\n+\n+\n+def global_pairwise_align_nucleotide(seq1, seq2, gap_open_penalty=5,\n+                                     gap_extend_penalty=2,\n+                                     match_score=1, mismatch_score=-2):","path":"skbio/core/alignment/pairwise.py","position":274,"original_position":274,"commit_id":"01d20a654fcfcf1d2c80d7fc312f6ee2d47d743f","original_commit_id":"01d20a654fcfcf1d2c80d7fc312f6ee2d47d743f","user":{"login":"ebolyen","id":3976804,"avatar_url":"https://avatars.githubusercontent.com/u/3976804?","gravatar_id":"33e6f018b7faea6c4822f0a5f1e1a2f8","url":"https://api.github.com/users/ebolyen","html_url":"https://github.com/ebolyen","followers_url":"https://api.github.com/users/ebolyen/followers","following_url":"https://api.github.com/users/ebolyen/following{/other_user}","gists_url":"https://api.github.com/users/ebolyen/gists{/gist_id}","starred_url":"https://api.github.com/users/ebolyen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ebolyen/subscriptions","organizations_url":"https://api.github.com/users/ebolyen/orgs","repos_url":"https://api.github.com/users/ebolyen/repos","events_url":"https://api.github.com/users/ebolyen/events{/privacy}","received_events_url":"https://api.github.com/users/ebolyen/received_events","type":"User","site_admin":false},"body":"See above about potentially adding distance_matrix as an override","created_at":"2014-06-24T17:04:37Z","updated_at":"2014-06-24T17:04:37Z","html_url":"https://github.com/biocore/scikit-bio/pull/469#discussion_r14141122","pull_request_url":"https://api.github.com/repos/biocore/scikit-bio/pulls/469","_links":{"self":{"href":"https://api.github.com/repos/biocore/scikit-bio/pulls/comments/14141122"},"html":{"href":"https://github.com/biocore/scikit-bio/pull/469#discussion_r14141122"},"pull_request":{"href":"https://api.github.com/repos/biocore/scikit-bio/pulls/469"}}},"pull_request":{"url":"https://api.github.com/repos/biocore/scikit-bio/pulls/469","id":17482728,"html_url":"https://github.com/biocore/scikit-bio/pull/469","diff_url":"https://github.com/biocore/scikit-bio/pull/469.diff","patch_url":"https://github.com/biocore/scikit-bio/pull/469.patch","issue_url":"https://api.github.com/repos/biocore/scikit-bio/issues/469","number":469,"state":"open","title":"addition of python functions for pairwise local and global alignment ","user":{"login":"gregcaporaso","id":192372,"avatar_url":"https://avatars.githubusercontent.com/u/192372?","gravatar_id":"24f019bae9a9c4282123961b01c7f0d5","url":"https://api.github.com/users/gregcaporaso","html_url":"https://github.com/gregcaporaso","followers_url":"https://api.github.com/users/gregcaporaso/followers","following_url":"https://api.github.com/users/gregcaporaso/following{/other_user}","gists_url":"https://api.github.com/users/gregcaporaso/gists{/gist_id}","starred_url":"https://api.github.com/users/gregcaporaso/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gregcaporaso/subscriptions","organizations_url":"https://api.github.com/users/gregcaporaso/orgs","repos_url":"https://api.github.com/users/gregcaporaso/repos","events_url":"https://api.github.com/users/gregcaporaso/events{/privacy}","received_events_url":"https://api.github.com/users/gregcaporaso/received_events","type":"User","site_admin":false},"body":"Ready for review for merge. I'll likely make some behind-the-scenes changes in the future, like possibly creating an ``Aligner`` class, but that shouldn't affect interface so I'd like to do in a separate PR. The goal of this one is to get usable functionality in place. @ebolyen, it'd be good to have you review the interface for consistency with the SSW code. Also, I think we'll likely end up with a merge conflict in the docs in ``alignment/__init__.py``, but that should be easy to address. \r\n\r\n~~**NOT READY FOR MERGE**~~\r\n","created_at":"2014-06-23T16:01:46Z","updated_at":"2014-06-24T17:04:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9b312de7843dae73943e6df0e1ace53603071990","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/biocore/scikit-bio/pulls/469/commits","review_comments_url":"https://api.github.com/repos/biocore/scikit-bio/pulls/469/comments","review_comment_url":"https://api.github.com/repos/biocore/scikit-bio/pulls/comments/{number}","comments_url":"https://api.github.com/repos/biocore/scikit-bio/issues/469/comments","statuses_url":"https://api.github.com/repos/biocore/scikit-bio/statuses/01d20a654fcfcf1d2c80d7fc312f6ee2d47d743f","head":{"label":"gregcaporaso:issue-457","ref":"issue-457","sha":"01d20a654fcfcf1d2c80d7fc312f6ee2d47d743f","user":{"login":"gregcaporaso","id":192372,"avatar_url":"https://avatars.githubusercontent.com/u/192372?","gravatar_id":"24f019bae9a9c4282123961b01c7f0d5","url":"https://api.github.com/users/gregcaporaso","html_url":"https://github.com/gregcaporaso","followers_url":"https://api.github.com/users/gregcaporaso/followers","following_url":"https://api.github.com/users/gregcaporaso/following{/other_user}","gists_url":"https://api.github.com/users/gregcaporaso/gists{/gist_id}","starred_url":"https://api.github.com/users/gregcaporaso/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gregcaporaso/subscriptions","organizations_url":"https://api.github.com/users/gregcaporaso/orgs","repos_url":"https://api.github.com/users/gregcaporaso/repos","events_url":"https://api.github.com/users/gregcaporaso/events{/privacy}","received_events_url":"https://api.github.com/users/gregcaporaso/received_events","type":"User","site_admin":false},"repo":{"id":15377899,"name":"bipy","full_name":"gregcaporaso/bipy","owner":{"login":"gregcaporaso","id":192372,"avatar_url":"https://avatars.githubusercontent.com/u/192372?","gravatar_id":"24f019bae9a9c4282123961b01c7f0d5","url":"https://api.github.com/users/gregcaporaso","html_url":"https://github.com/gregcaporaso","followers_url":"https://api.github.com/users/gregcaporaso/followers","following_url":"https://api.github.com/users/gregcaporaso/following{/other_user}","gists_url":"https://api.github.com/users/gregcaporaso/gists{/gist_id}","starred_url":"https://api.github.com/users/gregcaporaso/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gregcaporaso/subscriptions","organizations_url":"https://api.github.com/users/gregcaporaso/orgs","repos_url":"https://api.github.com/users/gregcaporaso/repos","events_url":"https://api.github.com/users/gregcaporaso/events{/privacy}","received_events_url":"https://api.github.com/users/gregcaporaso/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/gregcaporaso/bipy","description":"Tools for biological data analysis in python.","fork":true,"url":"https://api.github.com/repos/gregcaporaso/bipy","forks_url":"https://api.github.com/repos/gregcaporaso/bipy/forks","keys_url":"https://api.github.com/repos/gregcaporaso/bipy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gregcaporaso/bipy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gregcaporaso/bipy/teams","hooks_url":"https://api.github.com/repos/gregcaporaso/bipy/hooks","issue_events_url":"https://api.github.com/repos/gregcaporaso/bipy/issues/events{/number}","events_url":"https://api.github.com/repos/gregcaporaso/bipy/events","assignees_url":"https://api.github.com/repos/gregcaporaso/bipy/assignees{/user}","branches_url":"https://api.github.com/repos/gregcaporaso/bipy/branches{/branch}","tags_url":"https://api.github.com/repos/gregcaporaso/bipy/tags","blobs_url":"https://api.github.com/repos/gregcaporaso/bipy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gregcaporaso/bipy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gregcaporaso/bipy/git/refs{/sha}","trees_url":"https://api.github.com/repos/gregcaporaso/bipy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gregcaporaso/bipy/statuses/{sha}","languages_url":"https://api.github.com/repos/gregcaporaso/bipy/languages","stargazers_url":"https://api.github.com/repos/gregcaporaso/bipy/stargazers","contributors_url":"https://api.github.com/repos/gregcaporaso/bipy/contributors","subscribers_url":"https://api.github.com/repos/gregcaporaso/bipy/subscribers","subscription_url":"https://api.github.com/repos/gregcaporaso/bipy/subscription","commits_url":"https://api.github.com/repos/gregcaporaso/bipy/commits{/sha}","git_commits_url":"https://api.github.com/repos/gregcaporaso/bipy/git/commits{/sha}","comments_url":"https://api.github.com/repos/gregcaporaso/bipy/comments{/number}","issue_comment_url":"https://api.github.com/repos/gregcaporaso/bipy/issues/comments/{number}","contents_url":"https://api.github.com/repos/gregcaporaso/bipy/contents/{+path}","compare_url":"https://api.github.com/repos/gregcaporaso/bipy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gregcaporaso/bipy/merges","archive_url":"https://api.github.com/repos/gregcaporaso/bipy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gregcaporaso/bipy/downloads","issues_url":"https://api.github.com/repos/gregcaporaso/bipy/issues{/number}","pulls_url":"https://api.github.com/repos/gregcaporaso/bipy/pulls{/number}","milestones_url":"https://api.github.com/repos/gregcaporaso/bipy/milestones{/number}","notifications_url":"https://api.github.com/repos/gregcaporaso/bipy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gregcaporaso/bipy/labels{/name}","releases_url":"https://api.github.com/repos/gregcaporaso/bipy/releases{/id}","created_at":"2013-12-22T15:56:50Z","updated_at":"2014-06-24T16:59:15Z","pushed_at":"2014-06-24T16:59:15Z","git_url":"git://github.com/gregcaporaso/bipy.git","ssh_url":"git@github.com:gregcaporaso/bipy.git","clone_url":"https://github.com/gregcaporaso/bipy.git","svn_url":"https://github.com/gregcaporaso/bipy","homepage":"https://github.com/biocore","size":8284,"stargazers_count":1,"watchers_count":1,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"biocore:master","ref":"master","sha":"edfdce851d3e432f1a7d2c3ec4dedd3c0462f9d2","user":{"login":"biocore","id":6241857,"avatar_url":"https://avatars.githubusercontent.com/u/6241857?","gravatar_id":null,"url":"https://api.github.com/users/biocore","html_url":"https://github.com/biocore","followers_url":"https://api.github.com/users/biocore/followers","following_url":"https://api.github.com/users/biocore/following{/other_user}","gists_url":"https://api.github.com/users/biocore/gists{/gist_id}","starred_url":"https://api.github.com/users/biocore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/biocore/subscriptions","organizations_url":"https://api.github.com/users/biocore/orgs","repos_url":"https://api.github.com/users/biocore/repos","events_url":"https://api.github.com/users/biocore/events{/privacy}","received_events_url":"https://api.github.com/users/biocore/received_events","type":"Organization","site_admin":false},"repo":{"id":15168264,"name":"scikit-bio","full_name":"biocore/scikit-bio","owner":{"login":"biocore","id":6241857,"avatar_url":"https://avatars.githubusercontent.com/u/6241857?","gravatar_id":null,"url":"https://api.github.com/users/biocore","html_url":"https://github.com/biocore","followers_url":"https://api.github.com/users/biocore/followers","following_url":"https://api.github.com/users/biocore/following{/other_user}","gists_url":"https://api.github.com/users/biocore/gists{/gist_id}","starred_url":"https://api.github.com/users/biocore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/biocore/subscriptions","organizations_url":"https://api.github.com/users/biocore/orgs","repos_url":"https://api.github.com/users/biocore/repos","events_url":"https://api.github.com/users/biocore/events{/privacy}","received_events_url":"https://api.github.com/users/biocore/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/biocore/scikit-bio","description":"Core objects, functions and statistics for working with biological data in Python.","fork":false,"url":"https://api.github.com/repos/biocore/scikit-bio","forks_url":"https://api.github.com/repos/biocore/scikit-bio/forks","keys_url":"https://api.github.com/repos/biocore/scikit-bio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/biocore/scikit-bio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/biocore/scikit-bio/teams","hooks_url":"https://api.github.com/repos/biocore/scikit-bio/hooks","issue_events_url":"https://api.github.com/repos/biocore/scikit-bio/issues/events{/number}","events_url":"https://api.github.com/repos/biocore/scikit-bio/events","assignees_url":"https://api.github.com/repos/biocore/scikit-bio/assignees{/user}","branches_url":"https://api.github.com/repos/biocore/scikit-bio/branches{/branch}","tags_url":"https://api.github.com/repos/biocore/scikit-bio/tags","blobs_url":"https://api.github.com/repos/biocore/scikit-bio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/biocore/scikit-bio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/biocore/scikit-bio/git/refs{/sha}","trees_url":"https://api.github.com/repos/biocore/scikit-bio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/biocore/scikit-bio/statuses/{sha}","languages_url":"https://api.github.com/repos/biocore/scikit-bio/languages","stargazers_url":"https://api.github.com/repos/biocore/scikit-bio/stargazers","contributors_url":"https://api.github.com/repos/biocore/scikit-bio/contributors","subscribers_url":"https://api.github.com/repos/biocore/scikit-bio/subscribers","subscription_url":"https://api.github.com/repos/biocore/scikit-bio/subscription","commits_url":"https://api.github.com/repos/biocore/scikit-bio/commits{/sha}","git_commits_url":"https://api.github.com/repos/biocore/scikit-bio/git/commits{/sha}","comments_url":"https://api.github.com/repos/biocore/scikit-bio/comments{/number}","issue_comment_url":"https://api.github.com/repos/biocore/scikit-bio/issues/comments/{number}","contents_url":"https://api.github.com/repos/biocore/scikit-bio/contents/{+path}","compare_url":"https://api.github.com/repos/biocore/scikit-bio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/biocore/scikit-bio/merges","archive_url":"https://api.github.com/repos/biocore/scikit-bio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/biocore/scikit-bio/downloads","issues_url":"https://api.github.com/repos/biocore/scikit-bio/issues{/number}","pulls_url":"https://api.github.com/repos/biocore/scikit-bio/pulls{/number}","milestones_url":"https://api.github.com/repos/biocore/scikit-bio/milestones{/number}","notifications_url":"https://api.github.com/repos/biocore/scikit-bio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/biocore/scikit-bio/labels{/name}","releases_url":"https://api.github.com/repos/biocore/scikit-bio/releases{/id}","created_at":"2013-12-13T16:24:41Z","updated_at":"2014-06-23T20:49:33Z","pushed_at":"2014-06-23T20:49:31Z","git_url":"git://github.com/biocore/scikit-bio.git","ssh_url":"git@github.com:biocore/scikit-bio.git","clone_url":"https://github.com/biocore/scikit-bio.git","svn_url":"https://github.com/biocore/scikit-bio","homepage":"http://scikit-bio.org","size":25381,"stargazers_count":42,"watchers_count":42,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"forks_count":24,"mirror_url":null,"open_issues_count":71,"forks":24,"open_issues":71,"watchers":42,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/biocore/scikit-bio/pulls/469"},"html":{"href":"https://github.com/biocore/scikit-bio/pull/469"},"issue":{"href":"https://api.github.com/repos/biocore/scikit-bio/issues/469"},"comments":{"href":"https://api.github.com/repos/biocore/scikit-bio/issues/469/comments"},"review_comments":{"href":"https://api.github.com/repos/biocore/scikit-bio/pulls/469/comments"},"review_comment":{"href":"https://api.github.com/repos/biocore/scikit-bio/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/biocore/scikit-bio/pulls/469/commits"},"statuses":{"href":"https://api.github.com/repos/biocore/scikit-bio/statuses/01d20a654fcfcf1d2c80d7fc312f6ee2d47d743f"}}}}