{"action":"created","comment":{"url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls/comments/63204348","id":63204348,"diff_hunk":"@@ -2,97 +2,140 @@\n \n # Load required modules\n import sys, os, argparse, json, numpy as np, multiprocessing as mp\n+from collections import defaultdict\n \n-# Load the weighted enrichment test, ensuring that\n-# it is in the path (unless this script was moved)\n-sys.path.append(os.path.dirname(os.path.realpath(__file__)))\n+# Load the weighted exclusivity test\n+this_dir = os.path.dirname(os.path.realpath(__file__))\n+sys.path.append(this_dir)\n from weighted_exclusivity_test import *\n \n+# Argument parser\n def get_parser():\n-    # Parse arguments\n     parser = argparse.ArgumentParser()\n-    parser.add_argument('-pf', '--permuted_files', required=True, type=str, nargs='*')\n-    parser.add_argument('-mf', '--mutation_file', required=True, type=str)\n-    parser.add_argument('-np', '--num_permutations', required=True, type=int)\n-    parser.add_argument('-nc', '--num_cores', required=False, default=1, type=int)\n-    parser.add_argument('-o', '--output_file', type=str, required=True)\n+    parser.add_argument('-mf', '--mutation_file', type=str, required=True)\n+    parser.add_argument('-wf', '--weights_file', type=str, required=False, default=None)\n+    parser.add_argument('-pd', '--permutation_directory', type=str, required=False)\n+    parser.add_argument('-np', '--num_permutations', type=int, required=True)\n+    parser.add_argument('-si', '--start_index', type=int, required=False, default=1)\n+    parser.add_argument('-q', '--swap_multiplier', type=int, required=False, default=100)\n+    parser.add_argument('-nc', '--num_cores', type=int, required=False, default=1)\n     parser.add_argument('-v', '--verbose', type=int, required=False, default=1, choices=range(5))\n     return parser\n \n-def compute_observed(mutation_files, geneToIndex, patientToIndex):\n-    # Compute the exclusivity for each mutation file\n-    observed = np.zeros((len(geneToIndex), len(patientToIndex)))\n+def permute_matrices_wrapper(args): return permute_matrices(*args)\n+def permute_matrices(edge_list, max_swaps, max_tries, seeds, verbose,\n+                     m, n, num_edges, indexToGene, indexToPatient):\n+    # Initialize our output\n+    observed     = np.zeros((m, n))\n+    permutations = []\n+    for seed in seeds:\n+        # Permute the edge list\n+        permuted_edge_list = bipartite_edge_swap(edge_list, max_swaps, max_tries, seed, verbose,\n+                                                 m, n, num_edges)\n \n-    for mutation_file in mutation_files:\n-        # Load the mutations\n-        with open(mutation_file, 'r') as IN:\n-            permutedGeneToCases = json.load(IN)['geneToCases']\n+        # Recover the mapping of mutations from the permuted edge list\n+        geneToCases  = defaultdict(set)\n+        indices = []\n+        for edge in permuted_edge_list:\n+            gene, patient = indexToGene[edge[0]], indexToPatient[edge[1]]\n+            geneToCases[gene].add(patient)\n+            indices.append( (edge[0]-1, edge[1]-1) )\n \n-        # Increase the count for all the observed mutations in this\n-        # permuted file\n-        for g, cases in permutedGeneToCases.iteritems():\n-            indices = [ (geneToIndex[g], patientToIndex[p]) for p in cases ]\n-            observed[zip(*indices)] += 1.\n+        # Record the permutation\n+        observed[zip(*indices)] += 1.\n+        permutations.append( dict(geneToCases=geneToCases, permutation_number=seed) )\n \n-    return observed / float(len(mutation_files))\n+    return observed/float(len(seeds)), permutations\n \n-def compute_observed_wrapper((mutation_files, geneToIndex, patientToIndex)):\n-    return compute_observed(mutation_files, geneToIndex, patientToIndex)\n-    \n def run( args ):\n-    # Load the mutation data\n+    # Do some additional argument checking\n+    if not args.weights_file and not args.permutation_directory:\n+        sys.stderr.write('You must set the weights file or permutation directory, '\\\n+                         'otherwise nothing will be output.')\n+        sys.exit(1)\n+\n+    # Load mutation data\n     if args.verbose > 0:\n         print '* Loading mutation data...'\n-        \n+\n     mutation_data = load_mutation_data( args.mutation_file )\n     genes, all_genes, patients, geneToCases, patientToMutations, params, hypermutators = mutation_data\n-    num_all_genes, num_genes, num_patients = len(all_genes), len(genes), len(patients)\n-    geneToIndex = dict(zip(all_genes, range(num_all_genes)))\n-    patientToIndex = dict(zip(patients, range(num_patients)))\n+\n     geneToObserved = dict( (g, len(cases)) for g, cases in geneToCases.iteritems() )\n     patientToObserved = dict( (p, len(muts)) for p, muts in patientToMutations.iteritems() )\n-    \n+    geneToIndex = dict( (g, i+1) for i, g in enumerate(all_genes) )\n+    indexToGene = dict( (i+1, g) for i, g in enumerate(all_genes) )\n+    patientToIndex = dict( (p, j+1) for j, p in enumerate(patients) )\n+    indexToPatient = dict( (j+1, p) for j, p in enumerate(patients) )\n+\n+    edges = set()\n+    for gene, cases in geneToCases.iteritems():\n+        for patient in cases:\n+            edges.add( (geneToIndex[gene], patientToIndex[patient]) )\n+\n+    edge_list = np.array(sorted(edges), dtype=np.int)\n+\n+    # Run the bipartite edge swaps\n     if args.verbose > 0:\n-        print '\\tGenes:', num_all_genes\n-        print '\\tPatients:', num_patients\n-        print '\\tGenes mutated in at least one patient: {}'.format(num_genes)\n-        \n-    # Get the list of files we want to consider\n-    permuted_files = args.permuted_files[:args.num_permutations]\n-    print '* Analyzing {} permuted files...'.format(len(permuted_files))\n-                                                    \n-    # Set up the jobs\n+        print '* Permuting matrices...'\n+\n+    m = len(all_genes)\n+    n = len(patients)\n+    num_edges = len(edges)\n+    max_swaps = int(args.swap_multiplier*num_edges)\n+    max_tries = 10**9\n+    seeds = [ i+args.start_index for i in range(args.num_permutations) ]\n+\n+    # Run the bipartite edge swaps in parallel if more than one core indicated\n     num_cores = args.num_cores if args.num_cores != -1 else mp.cpu_count()\n     if num_cores != 1:\n         pool = mp.Pool(num_cores)\n         map_fn = pool.map\n     else:\n         map_fn = map\n \n-    compute_args = [ (permuted_files[i::args.num_cores], geneToIndex, patientToIndex)\n-                     for i in range(args.num_cores) ]\n-\n-    observeds = map_fn(compute_observed_wrapper, compute_args)\n+    wrapper_args = [ (edge_list, max_swaps, max_tries, seeds[i::10*num_cores], 0, m,\n+                      n, num_edges, indexToGene, indexToPatient) for i in range(10*num_cores) ]\n+    results = map_fn(permute_matrices_wrapper, wrapper_args)\n \n     if num_cores != 1:\n         pool.close()\n         pool.join()\n \n-    # Merge the observeds\n-    P = np.add.reduce(observeds) / float(len(observeds))\n+    # Create the weights file\n+    if args.weights_file:\n+        if args.verbose > 0:\n+            print '* Saving weights file...'\n+\n+        # Merge the observeds\n+        observeds = [ observed for observed, _ in results ]\n+        P = np.add.reduce(observeds) / float(len(observeds))\n+\n+        # Verify the weights\n+        for g, obs in geneToObserved.iteritems():\n+            assert( np.abs(P[geneToIndex[g]-1].sum() - obs) < 0.1)\n+\n+        for p, obs in patientToObserved.iteritems():\n+            assert( np.abs(P[:, patientToIndex[p]-1].sum() - obs) < 0.1)\n+\n+        # Add pseudocounts to entries with no mutations observed\n+        P[P == 0] = 1./(2. * args.num_permutations)\n+\n+        # Output to file.\n+        # The rows/columns preserve the order given by the mutation file.\n+        np.save(args.weights_file, P)\n \n-    # Verify the weights","path":"compute_mutation_probabilities.py","position":173,"original_position":173,"commit_id":"09b642c5d1532a4b282c6e60fd336a78ca70fe57","original_commit_id":"09b642c5d1532a4b282c6e60fd336a78ca70fe57","user":{"login":"mdml","id":2043206,"avatar_url":"https://avatars.githubusercontent.com/u/2043206?v=3","gravatar_id":"","url":"https://api.github.com/users/mdml","html_url":"https://github.com/mdml","followers_url":"https://api.github.com/users/mdml/followers","following_url":"https://api.github.com/users/mdml/following{/other_user}","gists_url":"https://api.github.com/users/mdml/gists{/gist_id}","starred_url":"https://api.github.com/users/mdml/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mdml/subscriptions","organizations_url":"https://api.github.com/users/mdml/orgs","repos_url":"https://api.github.com/users/mdml/repos","events_url":"https://api.github.com/users/mdml/events{/privacy}","received_events_url":"https://api.github.com/users/mdml/received_events","type":"User","site_admin":false},"body":"Why delete verification?","created_at":"2016-05-13T15:39:56Z","updated_at":"2016-05-13T15:39:56Z","html_url":"https://github.com/raphael-group/weighted-exclusivity-test/pull/7#discussion_r63204348","pull_request_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls/7","_links":{"self":{"href":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls/comments/63204348"},"html":{"href":"https://github.com/raphael-group/weighted-exclusivity-test/pull/7#discussion_r63204348"},"pull_request":{"href":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls/7"}}},"pull_request":{"url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls/7","id":69896549,"html_url":"https://github.com/raphael-group/weighted-exclusivity-test/pull/7","diff_url":"https://github.com/raphael-group/weighted-exclusivity-test/pull/7.diff","patch_url":"https://github.com/raphael-group/weighted-exclusivity-test/pull/7.patch","issue_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/issues/7","number":7,"state":"open","locked":false,"title":"Replaced BiRewire with bipartite edge swap","user":{"login":"matthewreyna","id":8354856,"avatar_url":"https://avatars.githubusercontent.com/u/8354856?v=3","gravatar_id":"","url":"https://api.github.com/users/matthewreyna","html_url":"https://github.com/matthewreyna","followers_url":"https://api.github.com/users/matthewreyna/followers","following_url":"https://api.github.com/users/matthewreyna/following{/other_user}","gists_url":"https://api.github.com/users/matthewreyna/gists{/gist_id}","starred_url":"https://api.github.com/users/matthewreyna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matthewreyna/subscriptions","organizations_url":"https://api.github.com/users/matthewreyna/orgs","repos_url":"https://api.github.com/users/matthewreyna/repos","events_url":"https://api.github.com/users/matthewreyna/events{/privacy}","received_events_url":"https://api.github.com/users/matthewreyna/received_events","type":"User","site_admin":false},"body":"This pull request replaces BiRewire with a bipartite edge swapping algorithm for drawing from the permutational distribution.  I implemented the bipartite edge swapping algorithm in Fortran, and we can import it as a Python module.\r\n\r\nThe ECCB experiments now complete faster with much less file system use, and the results are similar: I found 48, 5341, and 6807 gene set triples with a weighted FDR < 0.001 for the THCA, COADREAD, and UCEC datasets, respectively, while using only 1000 permutations for testing.","created_at":"2016-05-12T19:54:23Z","updated_at":"2016-05-13T15:39:56Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7bae5034b774124550c5b7a5f0ae904306b030e6","assignee":{"login":"mdml","id":2043206,"avatar_url":"https://avatars.githubusercontent.com/u/2043206?v=3","gravatar_id":"","url":"https://api.github.com/users/mdml","html_url":"https://github.com/mdml","followers_url":"https://api.github.com/users/mdml/followers","following_url":"https://api.github.com/users/mdml/following{/other_user}","gists_url":"https://api.github.com/users/mdml/gists{/gist_id}","starred_url":"https://api.github.com/users/mdml/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mdml/subscriptions","organizations_url":"https://api.github.com/users/mdml/orgs","repos_url":"https://api.github.com/users/mdml/repos","events_url":"https://api.github.com/users/mdml/events{/privacy}","received_events_url":"https://api.github.com/users/mdml/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls/7/commits","review_comments_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls/7/comments","review_comment_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls/comments{/number}","comments_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/issues/7/comments","statuses_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/statuses/09b642c5d1532a4b282c6e60fd336a78ca70fe57","head":{"label":"raphael-group:bipartite-edge-swap","ref":"bipartite-edge-swap","sha":"09b642c5d1532a4b282c6e60fd336a78ca70fe57","user":{"login":"raphael-group","id":5168500,"avatar_url":"https://avatars.githubusercontent.com/u/5168500?v=3","gravatar_id":"","url":"https://api.github.com/users/raphael-group","html_url":"https://github.com/raphael-group","followers_url":"https://api.github.com/users/raphael-group/followers","following_url":"https://api.github.com/users/raphael-group/following{/other_user}","gists_url":"https://api.github.com/users/raphael-group/gists{/gist_id}","starred_url":"https://api.github.com/users/raphael-group/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raphael-group/subscriptions","organizations_url":"https://api.github.com/users/raphael-group/orgs","repos_url":"https://api.github.com/users/raphael-group/repos","events_url":"https://api.github.com/users/raphael-group/events{/privacy}","received_events_url":"https://api.github.com/users/raphael-group/received_events","type":"Organization","site_admin":false},"repo":{"id":56271347,"name":"weighted-exclusivity-test","full_name":"raphael-group/weighted-exclusivity-test","owner":{"login":"raphael-group","id":5168500,"avatar_url":"https://avatars.githubusercontent.com/u/5168500?v=3","gravatar_id":"","url":"https://api.github.com/users/raphael-group","html_url":"https://github.com/raphael-group","followers_url":"https://api.github.com/users/raphael-group/followers","following_url":"https://api.github.com/users/raphael-group/following{/other_user}","gists_url":"https://api.github.com/users/raphael-group/gists{/gist_id}","starred_url":"https://api.github.com/users/raphael-group/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raphael-group/subscriptions","organizations_url":"https://api.github.com/users/raphael-group/orgs","repos_url":"https://api.github.com/users/raphael-group/repos","events_url":"https://api.github.com/users/raphael-group/events{/privacy}","received_events_url":"https://api.github.com/users/raphael-group/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/raphael-group/weighted-exclusivity-test","description":"","fork":false,"url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test","forks_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/forks","keys_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/keys{/key_id}","collaborators_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/teams","hooks_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/hooks","issue_events_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/issues/events{/number}","events_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/events","assignees_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/assignees{/user}","branches_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/branches{/branch}","tags_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/tags","blobs_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/git/refs{/sha}","trees_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/git/trees{/sha}","statuses_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/statuses/{sha}","languages_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/languages","stargazers_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/stargazers","contributors_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/contributors","subscribers_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/subscribers","subscription_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/subscription","commits_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/commits{/sha}","git_commits_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/git/commits{/sha}","comments_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/comments{/number}","issue_comment_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/issues/comments{/number}","contents_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/contents/{+path}","compare_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/compare/{base}...{head}","merges_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/merges","archive_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/downloads","issues_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/issues{/number}","pulls_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls{/number}","milestones_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/milestones{/number}","notifications_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/labels{/name}","releases_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/releases{/id}","deployments_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/deployments","created_at":"2016-04-14T21:32:46Z","updated_at":"2016-04-14T21:34:42Z","pushed_at":"2016-05-13T15:32:24Z","git_url":"git://github.com/raphael-group/weighted-exclusivity-test.git","ssh_url":"git@github.com:raphael-group/weighted-exclusivity-test.git","clone_url":"https://github.com/raphael-group/weighted-exclusivity-test.git","svn_url":"https://github.com/raphael-group/weighted-exclusivity-test","homepage":"http://compbio.cs.brown.edu/projects/weighted-exact-test/","size":82,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"raphael-group:master","ref":"master","sha":"afe4d85b1c1086082e5eab2ea5d05c3d030ca1ae","user":{"login":"raphael-group","id":5168500,"avatar_url":"https://avatars.githubusercontent.com/u/5168500?v=3","gravatar_id":"","url":"https://api.github.com/users/raphael-group","html_url":"https://github.com/raphael-group","followers_url":"https://api.github.com/users/raphael-group/followers","following_url":"https://api.github.com/users/raphael-group/following{/other_user}","gists_url":"https://api.github.com/users/raphael-group/gists{/gist_id}","starred_url":"https://api.github.com/users/raphael-group/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raphael-group/subscriptions","organizations_url":"https://api.github.com/users/raphael-group/orgs","repos_url":"https://api.github.com/users/raphael-group/repos","events_url":"https://api.github.com/users/raphael-group/events{/privacy}","received_events_url":"https://api.github.com/users/raphael-group/received_events","type":"Organization","site_admin":false},"repo":{"id":56271347,"name":"weighted-exclusivity-test","full_name":"raphael-group/weighted-exclusivity-test","owner":{"login":"raphael-group","id":5168500,"avatar_url":"https://avatars.githubusercontent.com/u/5168500?v=3","gravatar_id":"","url":"https://api.github.com/users/raphael-group","html_url":"https://github.com/raphael-group","followers_url":"https://api.github.com/users/raphael-group/followers","following_url":"https://api.github.com/users/raphael-group/following{/other_user}","gists_url":"https://api.github.com/users/raphael-group/gists{/gist_id}","starred_url":"https://api.github.com/users/raphael-group/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raphael-group/subscriptions","organizations_url":"https://api.github.com/users/raphael-group/orgs","repos_url":"https://api.github.com/users/raphael-group/repos","events_url":"https://api.github.com/users/raphael-group/events{/privacy}","received_events_url":"https://api.github.com/users/raphael-group/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/raphael-group/weighted-exclusivity-test","description":"","fork":false,"url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test","forks_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/forks","keys_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/keys{/key_id}","collaborators_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/teams","hooks_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/hooks","issue_events_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/issues/events{/number}","events_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/events","assignees_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/assignees{/user}","branches_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/branches{/branch}","tags_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/tags","blobs_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/git/refs{/sha}","trees_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/git/trees{/sha}","statuses_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/statuses/{sha}","languages_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/languages","stargazers_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/stargazers","contributors_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/contributors","subscribers_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/subscribers","subscription_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/subscription","commits_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/commits{/sha}","git_commits_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/git/commits{/sha}","comments_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/comments{/number}","issue_comment_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/issues/comments{/number}","contents_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/contents/{+path}","compare_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/compare/{base}...{head}","merges_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/merges","archive_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/downloads","issues_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/issues{/number}","pulls_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls{/number}","milestones_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/milestones{/number}","notifications_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/labels{/name}","releases_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/releases{/id}","deployments_url":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/deployments","created_at":"2016-04-14T21:32:46Z","updated_at":"2016-04-14T21:34:42Z","pushed_at":"2016-05-13T15:32:24Z","git_url":"git://github.com/raphael-group/weighted-exclusivity-test.git","ssh_url":"git@github.com:raphael-group/weighted-exclusivity-test.git","clone_url":"https://github.com/raphael-group/weighted-exclusivity-test.git","svn_url":"https://github.com/raphael-group/weighted-exclusivity-test","homepage":"http://compbio.cs.brown.edu/projects/weighted-exact-test/","size":82,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls/7"},"html":{"href":"https://github.com/raphael-group/weighted-exclusivity-test/pull/7"},"issue":{"href":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/issues/7"},"comments":{"href":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/issues/7/comments"},"review_comments":{"href":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls/7/comments"},"review_comment":{"href":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/pulls/7/commits"},"statuses":{"href":"https://api.github.com/repos/raphael-group/weighted-exclusivity-test/statuses/09b642c5d1532a4b282c6e60fd336a78ca70fe57"}}}}