{"action":"created","comment":{"url":"https://api.github.com/repos/choderalab/Ligandr/pulls/comments/196808622","pull_request_review_id":130430481,"id":196808622,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5NjgwODYyMg==","diff_hunk":"@@ -0,0 +1,217 @@\n+\"\"\"\n+Places a ligand or multiple ligands in place of another ligand on a protein\n+\"\"\"\n+import sys\n+import tempfile\n+import traceback\n+from typing import List\n+\n+import NameToSMILES\n+\n+import mdtraj\n+import numpy as np\n+from mdtraj import Trajectory\n+from openeye import oechem, oedocking, oeomega, oeff\n+from openeye.oechem import OEMol, OEGraphMol\n+import itertools\n+import subprocess\n+\n+\n+def dock_molecule(trajectory_frame, original_ligands, new_ligands, title_list, keep_ions=None,\n+                  override_replacement=False) -> List[\n+    mdtraj.Trajectory]:\n+    \"\"\"\n+    Docks ligands or a list of ligands in place of another ligand\n+\n+    Parameters\n+    ----------\n+    trajectory_frame: mdtraj.Trajectory, required\n+        The trajectory to dock to- water will be removed, but every other atoms will stay the same\n+\n+    original_ligands: [str], required\n+        The original ligand to replace, must be an mdtraj selection string. If more than\n+        one residue or no residue is selected, program will throw an index error\n+\n+    new_ligands: [[str]], required\n+        For each original ligand, a list of SMILES string representing the new ligand to dock.\n+\n+    title_list: [[str]], required\n+        For each new ligand, the title the user wishes to have.\n+\n+    keep_ions: [str], optional, default:None\n+        A list of ions to keep when removing solvent. Must be an mdtraj selection.\n+\n+    override_replacement: bool, optional, default:False\n+        Setting to true will prevent replacing ligand with canonical molecule from PDB.\n+\n+    Returns\n+    -------\n+    output: [mdtraj.Trajectory]\n+        A list of trajectories for all combinations of ligands\n+    \"\"\"\n+    # Check inputs\n+    if len(original_ligands) != len(new_ligands):\n+        raise ValueError(\"Original and new ligand arrays must have the same length.\")\n+    # Produces pdb file in memory\n+    overall_dry_frame = trajectory_frame.remove_solvent(exclude=keep_ions)  # type: mdtraj.Trajectory\n+    complex_prot = __trajectory_to_oemol__(overall_dry_frame)\n+\n+    # Bookkeeping\n+    ligand_stream = []\n+    output = []\n+    i = 0\n+    # Being processing a ligand\n+    for ligand in original_ligands:\n+        try:\n+            ligand_traj = overall_dry_frame.atom_slice(overall_dry_frame.top.select(ligand))  # type: mdtraj.Trajectory\n+        except IndexError as e:\n+            print(\"Ligand selection was invalid\")\n+            print(\"Exception: %s\" % str(e), file=sys.stderr)\n+            traceback.print_tb(e.__traceback__, file=sys.stderr)\n+            sys.exit(1)\n+        if ligand_traj.n_residues > 1:\n+            raise IndexError(\"More than one ligand residue found. Only one expected\")\n+        # Find approximate location of binding pocket\n+        ligand_center = np.average(ligand_traj.xyz[0], axis=0) * 10\n+\n+        # Explicit value necessary for generated methods\n+        x = float(ligand_center[0])\n+        y = float(ligand_center[1])\n+        z = float(ligand_center[2])\n+\n+        # Create receptor molecule\n+        receptor = oechem.OEGraphMol()\n+        oedocking.OEMakeReceptor(receptor, complex_prot, x, y, z)\n+\n+        # Write out and open ligand in OpenEye\n+        lig_initial = __trajectory_to_oemol__(ligand_traj)\n+        lig_initial.SetTitle(ligand_traj.top.residue(0).name)\n+\n+\n+        # Validate if ligand is correct by checking against SMILES\n+        lig_smiles = NameToSMILES.getSMILE(ligand_traj.top.residue(0).name)\n+        if lig_smiles is not None:\n+            neutral_ph_smiles = NameToSMILES.addH(lig_smiles)\n+            validation_ligand = oechem.OEGraphMol()\n+            validation_ligand.SetTitle(ligand_traj.top.residue(0).name)\n+            oechem.OESmilesToMol(validation_ligand, neutral_ph_smiles)\n+            if (oechem.OEMolToSmiles(validation_ligand) != oechem.OEMolToSmiles(\n+                    lig_initial)) and not override_replacement:\n+                ligand_posed = __docking_internal(receptor, lig_initial, validation_ligand)\n+                complex_prot = __trajectory_to_oemol__(\n+                    overall_dry_frame.atom_slice(overall_dry_frame.top.select(\"not ( %s )\" % ligand)))\n+                oechem.OEAddMols(receptor, ligand_posed)\n+                print(\n+                    \"Warning: Original ligand had either incorrect stereochemistry or missing heavy atoms. Ligand from pdb database placed instead. \")\n+\n+            else:\n+                ligand_posed = lig_initial\n+                print(\"stable\")\n+        else:\n+            print(\"ligand not found in PDB: No validation and continuing\")\n+        # Dock new ligands\n+        ligand_position = []  # type: List[OEGraphMol]\n+        j = 0\n+        for new_ligand in new_ligands[i]:\n+            new_structure = oechem.OEGraphMol()\n+            oechem.OESmilesToMol(new_structure, new_ligand)\n+            new_structure.SetTitle(\"ligand replacement\")\n+            docked_ligand = __docking_internal(receptor, ligand_posed, new_structure)\n+            docked_ligand.SetTitle(title_list[i][j])\n+            ligand_position.append(docked_ligand)\n+            j = j + 1\n+        ligand_stream.append(ligand_position)\n+        overall_dry_frame.atom_slice(overall_dry_frame.top.select(\"not ( %s )\" % ligand), inplace=True)\n+        i = i + 1\n+    # Produce output trajectories for all combos of ligands\n+    for ligand_combo in itertools.product(*ligand_stream):\n+        new_frame_prot = overall_dry_frame  # type: Trajectory\n+        for built_ligand in ligand_combo:\n+            # Rename ligand\n+            ligand_dummy = tempfile.NamedTemporaryFile(suffix=\".pdb\")\n+            outputter_lig = oechem.oemolostream(ligand_dummy.name)\n+            oechem.OEWriteMolecule(outputter_lig, built_ligand)\n+            ligand_final_traj = mdtraj.load(ligand_dummy.name)\n+            ligand_dummy.close()\n+            for residue in ligand_final_traj.top.residues:\n+                residue.name = built_ligand.GetTitle()\n+            new_frame_prot = new_frame_prot.stack(ligand_final_traj)\n+        output.append(new_frame_prot)\n+    print(\"End\")\n+    return output\n+\n+\n+def __docking_internal(receptor: oechem.OEGraphMol, bound_ligand: oechem.OEGraphMol, docking_ligand: oechem.OEGraphMol):\n+    \"\"\"\n+    Internal method for docking to a receptor given a bound ligand and ligand to dock to\n+\n+    Parameters\n+    ----------\n+    receptor: oechem.OEGraphMol, required\n+        An oechem receptor to dock to\n+\n+    bound_ligand: oechem.OEGraphMol, required\n+        The ligand bound to the current receptor pocket\n+\n+    docking_ligand: oechem.OEGraphMol, required\n+        The ligand to dock.\n+\n+    Returns\n+    -------\n+    A oechem molecules with coordinates of its docking\n+\n+    \"\"\"\n+    # Create posit config\n+    oedocking.OEReceptorSetBoundLigand(receptor, bound_ligand)\n+    poser = oedocking.OEPosit()\n+    poser.Initialize(receptor)\n+\n+    # Create multiple conformations\n+    omegaOpts = oeomega.OEOmegaOptions()\n+    omegaOpts.SetMaxConfs(1000)\n+    omega_driver = oeomega.OEOmega(omegaOpts)\n+    conformer_docking = oechem.OEMol()  # type: OEMol\n+    if not omega_driver(conformer_docking):\n+        single_sdf = tempfile.NamedTemporaryFile(suffix=\".sdf\")\n+        double_sdf = tempfile.NamedTemporaryFile(suffix=\".sdf\")\n+        smiles = NameToSMILES.addH(oechem.OEMolToSmiles(docking_ligand))\n+        subprocess.run(\"obabel -:'%s' -O %s --gen3d; obabel %s -O %s --confab --conf = 100\" % (\n+            smiles, single_sdf.name, single_sdf.name, double_sdf.name), shell=True)\n+        ins = oechem.oemolistream()\n+        ins.SetConfTest(oechem.OEOmegaConfTest())\n+        ins.open(double_sdf.name)\n+        oechem.OEReadMolecule(ins, conformer_docking)\n+\n+    # Failed conformer generation\n+    if conformer_docking.NumConfs() <= 1:","path":"Ligandr/LigOverlay.py","position":186,"original_position":186,"commit_id":"621ade999d9c077c5ba09ecda3b0af8c8ab8ea4e","original_commit_id":"621ade999d9c077c5ba09ecda3b0af8c8ab8ea4e","user":{"login":"maxentile","id":5759036,"node_id":"MDQ6VXNlcjU3NTkwMzY=","avatar_url":"https://avatars2.githubusercontent.com/u/5759036?v=4","gravatar_id":"","url":"https://api.github.com/users/maxentile","html_url":"https://github.com/maxentile","followers_url":"https://api.github.com/users/maxentile/followers","following_url":"https://api.github.com/users/maxentile/following{/other_user}","gists_url":"https://api.github.com/users/maxentile/gists{/gist_id}","starred_url":"https://api.github.com/users/maxentile/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxentile/subscriptions","organizations_url":"https://api.github.com/users/maxentile/orgs","repos_url":"https://api.github.com/users/maxentile/repos","events_url":"https://api.github.com/users/maxentile/events{/privacy}","received_events_url":"https://api.github.com/users/maxentile/received_events","type":"User","site_admin":false},"body":"Ahh, thanks for confirming!","created_at":"2018-06-20T14:40:44Z","updated_at":"2018-06-20T14:40:44Z","html_url":"https://github.com/choderalab/Ligandr/pull/2#discussion_r196808622","pull_request_url":"https://api.github.com/repos/choderalab/Ligandr/pulls/2","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/choderalab/Ligandr/pulls/comments/196808622"},"html":{"href":"https://github.com/choderalab/Ligandr/pull/2#discussion_r196808622"},"pull_request":{"href":"https://api.github.com/repos/choderalab/Ligandr/pulls/2"}},"in_reply_to_id":196561628},"pull_request":{"url":"https://api.github.com/repos/choderalab/Ligandr/pulls/2","id":195893111,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk1ODkzMTEx","html_url":"https://github.com/choderalab/Ligandr/pull/2","diff_url":"https://github.com/choderalab/Ligandr/pull/2.diff","patch_url":"https://github.com/choderalab/Ligandr/pull/2.patch","issue_url":"https://api.github.com/repos/choderalab/Ligandr/issues/2","number":2,"state":"open","locked":false,"title":"Update name initial overlay","user":{"login":"404random","id":11579963,"node_id":"MDQ6VXNlcjExNTc5OTYz","avatar_url":"https://avatars3.githubusercontent.com/u/11579963?v=4","gravatar_id":"","url":"https://api.github.com/users/404random","html_url":"https://github.com/404random","followers_url":"https://api.github.com/users/404random/followers","following_url":"https://api.github.com/users/404random/following{/other_user}","gists_url":"https://api.github.com/users/404random/gists{/gist_id}","starred_url":"https://api.github.com/users/404random/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/404random/subscriptions","organizations_url":"https://api.github.com/users/404random/orgs","repos_url":"https://api.github.com/users/404random/repos","events_url":"https://api.github.com/users/404random/events{/privacy}","received_events_url":"https://api.github.com/users/404random/received_events","type":"User","site_admin":false},"body":"## Description\r\nBasic functionality for ligand overlay.\r\n\r\n## Todos\r\nSome test cases and alignment\r\n\r\n## Known issues\r\n-When a carboxylic acid exists, openeye outputs as an oxt resiude, which splits the ligand resiude apart. This can be manually reformatted in the PDB file. Wil fix at later date.\r\n\r\n-Number of confs from openbabel is not being limited correctly.\r\n","created_at":"2018-06-19T16:51:25Z","updated_at":"2018-06-20T14:40:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4f1f7d1ce69a6e8f257289600bf77db6b421167e","assignee":null,"assignees":[],"requested_reviewers":[{"login":"rafwiewiora","id":12088757,"node_id":"MDQ6VXNlcjEyMDg4NzU3","avatar_url":"https://avatars2.githubusercontent.com/u/12088757?v=4","gravatar_id":"","url":"https://api.github.com/users/rafwiewiora","html_url":"https://github.com/rafwiewiora","followers_url":"https://api.github.com/users/rafwiewiora/followers","following_url":"https://api.github.com/users/rafwiewiora/following{/other_user}","gists_url":"https://api.github.com/users/rafwiewiora/gists{/gist_id}","starred_url":"https://api.github.com/users/rafwiewiora/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rafwiewiora/subscriptions","organizations_url":"https://api.github.com/users/rafwiewiora/orgs","repos_url":"https://api.github.com/users/rafwiewiora/repos","events_url":"https://api.github.com/users/rafwiewiora/events{/privacy}","received_events_url":"https://api.github.com/users/rafwiewiora/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/choderalab/Ligandr/pulls/2/commits","review_comments_url":"https://api.github.com/repos/choderalab/Ligandr/pulls/2/comments","review_comment_url":"https://api.github.com/repos/choderalab/Ligandr/pulls/comments{/number}","comments_url":"https://api.github.com/repos/choderalab/Ligandr/issues/2/comments","statuses_url":"https://api.github.com/repos/choderalab/Ligandr/statuses/621ade999d9c077c5ba09ecda3b0af8c8ab8ea4e","head":{"label":"choderalab:updateNameInitialOverlay","ref":"updateNameInitialOverlay","sha":"621ade999d9c077c5ba09ecda3b0af8c8ab8ea4e","user":{"login":"choderalab","id":4217481,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQyMTc0ODE=","avatar_url":"https://avatars0.githubusercontent.com/u/4217481?v=4","gravatar_id":"","url":"https://api.github.com/users/choderalab","html_url":"https://github.com/choderalab","followers_url":"https://api.github.com/users/choderalab/followers","following_url":"https://api.github.com/users/choderalab/following{/other_user}","gists_url":"https://api.github.com/users/choderalab/gists{/gist_id}","starred_url":"https://api.github.com/users/choderalab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/choderalab/subscriptions","organizations_url":"https://api.github.com/users/choderalab/orgs","repos_url":"https://api.github.com/users/choderalab/repos","events_url":"https://api.github.com/users/choderalab/events{/privacy}","received_events_url":"https://api.github.com/users/choderalab/received_events","type":"Organization","site_admin":false},"repo":{"id":136658105,"node_id":"MDEwOlJlcG9zaXRvcnkxMzY2NTgxMDU=","name":"Ligandr","full_name":"choderalab/Ligandr","owner":{"login":"choderalab","id":4217481,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQyMTc0ODE=","avatar_url":"https://avatars0.githubusercontent.com/u/4217481?v=4","gravatar_id":"","url":"https://api.github.com/users/choderalab","html_url":"https://github.com/choderalab","followers_url":"https://api.github.com/users/choderalab/followers","following_url":"https://api.github.com/users/choderalab/following{/other_user}","gists_url":"https://api.github.com/users/choderalab/gists{/gist_id}","starred_url":"https://api.github.com/users/choderalab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/choderalab/subscriptions","organizations_url":"https://api.github.com/users/choderalab/orgs","repos_url":"https://api.github.com/users/choderalab/repos","events_url":"https://api.github.com/users/choderalab/events{/privacy}","received_events_url":"https://api.github.com/users/choderalab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/choderalab/Ligandr","description":"Ligandr code","fork":false,"url":"https://api.github.com/repos/choderalab/Ligandr","forks_url":"https://api.github.com/repos/choderalab/Ligandr/forks","keys_url":"https://api.github.com/repos/choderalab/Ligandr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/choderalab/Ligandr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/choderalab/Ligandr/teams","hooks_url":"https://api.github.com/repos/choderalab/Ligandr/hooks","issue_events_url":"https://api.github.com/repos/choderalab/Ligandr/issues/events{/number}","events_url":"https://api.github.com/repos/choderalab/Ligandr/events","assignees_url":"https://api.github.com/repos/choderalab/Ligandr/assignees{/user}","branches_url":"https://api.github.com/repos/choderalab/Ligandr/branches{/branch}","tags_url":"https://api.github.com/repos/choderalab/Ligandr/tags","blobs_url":"https://api.github.com/repos/choderalab/Ligandr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/choderalab/Ligandr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/choderalab/Ligandr/git/refs{/sha}","trees_url":"https://api.github.com/repos/choderalab/Ligandr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/choderalab/Ligandr/statuses/{sha}","languages_url":"https://api.github.com/repos/choderalab/Ligandr/languages","stargazers_url":"https://api.github.com/repos/choderalab/Ligandr/stargazers","contributors_url":"https://api.github.com/repos/choderalab/Ligandr/contributors","subscribers_url":"https://api.github.com/repos/choderalab/Ligandr/subscribers","subscription_url":"https://api.github.com/repos/choderalab/Ligandr/subscription","commits_url":"https://api.github.com/repos/choderalab/Ligandr/commits{/sha}","git_commits_url":"https://api.github.com/repos/choderalab/Ligandr/git/commits{/sha}","comments_url":"https://api.github.com/repos/choderalab/Ligandr/comments{/number}","issue_comment_url":"https://api.github.com/repos/choderalab/Ligandr/issues/comments{/number}","contents_url":"https://api.github.com/repos/choderalab/Ligandr/contents/{+path}","compare_url":"https://api.github.com/repos/choderalab/Ligandr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/choderalab/Ligandr/merges","archive_url":"https://api.github.com/repos/choderalab/Ligandr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/choderalab/Ligandr/downloads","issues_url":"https://api.github.com/repos/choderalab/Ligandr/issues{/number}","pulls_url":"https://api.github.com/repos/choderalab/Ligandr/pulls{/number}","milestones_url":"https://api.github.com/repos/choderalab/Ligandr/milestones{/number}","notifications_url":"https://api.github.com/repos/choderalab/Ligandr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/choderalab/Ligandr/labels{/name}","releases_url":"https://api.github.com/repos/choderalab/Ligandr/releases{/id}","deployments_url":"https://api.github.com/repos/choderalab/Ligandr/deployments","created_at":"2018-06-08T19:24:39Z","updated_at":"2018-06-19T16:37:40Z","pushed_at":"2018-06-19T16:51:26Z","git_url":"git://github.com/choderalab/Ligandr.git","ssh_url":"git@github.com:choderalab/Ligandr.git","clone_url":"https://github.com/choderalab/Ligandr.git","svn_url":"https://github.com/choderalab/Ligandr","homepage":null,"size":50,"stargazers_count":3,"watchers_count":3,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"forks":0,"open_issues":1,"watchers":3,"default_branch":"master"}},"base":{"label":"choderalab:master","ref":"master","sha":"acfc954bc66dbb0b97bc7957dc6ba13f21b05c4a","user":{"login":"choderalab","id":4217481,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQyMTc0ODE=","avatar_url":"https://avatars0.githubusercontent.com/u/4217481?v=4","gravatar_id":"","url":"https://api.github.com/users/choderalab","html_url":"https://github.com/choderalab","followers_url":"https://api.github.com/users/choderalab/followers","following_url":"https://api.github.com/users/choderalab/following{/other_user}","gists_url":"https://api.github.com/users/choderalab/gists{/gist_id}","starred_url":"https://api.github.com/users/choderalab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/choderalab/subscriptions","organizations_url":"https://api.github.com/users/choderalab/orgs","repos_url":"https://api.github.com/users/choderalab/repos","events_url":"https://api.github.com/users/choderalab/events{/privacy}","received_events_url":"https://api.github.com/users/choderalab/received_events","type":"Organization","site_admin":false},"repo":{"id":136658105,"node_id":"MDEwOlJlcG9zaXRvcnkxMzY2NTgxMDU=","name":"Ligandr","full_name":"choderalab/Ligandr","owner":{"login":"choderalab","id":4217481,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQyMTc0ODE=","avatar_url":"https://avatars0.githubusercontent.com/u/4217481?v=4","gravatar_id":"","url":"https://api.github.com/users/choderalab","html_url":"https://github.com/choderalab","followers_url":"https://api.github.com/users/choderalab/followers","following_url":"https://api.github.com/users/choderalab/following{/other_user}","gists_url":"https://api.github.com/users/choderalab/gists{/gist_id}","starred_url":"https://api.github.com/users/choderalab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/choderalab/subscriptions","organizations_url":"https://api.github.com/users/choderalab/orgs","repos_url":"https://api.github.com/users/choderalab/repos","events_url":"https://api.github.com/users/choderalab/events{/privacy}","received_events_url":"https://api.github.com/users/choderalab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/choderalab/Ligandr","description":"Ligandr code","fork":false,"url":"https://api.github.com/repos/choderalab/Ligandr","forks_url":"https://api.github.com/repos/choderalab/Ligandr/forks","keys_url":"https://api.github.com/repos/choderalab/Ligandr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/choderalab/Ligandr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/choderalab/Ligandr/teams","hooks_url":"https://api.github.com/repos/choderalab/Ligandr/hooks","issue_events_url":"https://api.github.com/repos/choderalab/Ligandr/issues/events{/number}","events_url":"https://api.github.com/repos/choderalab/Ligandr/events","assignees_url":"https://api.github.com/repos/choderalab/Ligandr/assignees{/user}","branches_url":"https://api.github.com/repos/choderalab/Ligandr/branches{/branch}","tags_url":"https://api.github.com/repos/choderalab/Ligandr/tags","blobs_url":"https://api.github.com/repos/choderalab/Ligandr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/choderalab/Ligandr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/choderalab/Ligandr/git/refs{/sha}","trees_url":"https://api.github.com/repos/choderalab/Ligandr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/choderalab/Ligandr/statuses/{sha}","languages_url":"https://api.github.com/repos/choderalab/Ligandr/languages","stargazers_url":"https://api.github.com/repos/choderalab/Ligandr/stargazers","contributors_url":"https://api.github.com/repos/choderalab/Ligandr/contributors","subscribers_url":"https://api.github.com/repos/choderalab/Ligandr/subscribers","subscription_url":"https://api.github.com/repos/choderalab/Ligandr/subscription","commits_url":"https://api.github.com/repos/choderalab/Ligandr/commits{/sha}","git_commits_url":"https://api.github.com/repos/choderalab/Ligandr/git/commits{/sha}","comments_url":"https://api.github.com/repos/choderalab/Ligandr/comments{/number}","issue_comment_url":"https://api.github.com/repos/choderalab/Ligandr/issues/comments{/number}","contents_url":"https://api.github.com/repos/choderalab/Ligandr/contents/{+path}","compare_url":"https://api.github.com/repos/choderalab/Ligandr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/choderalab/Ligandr/merges","archive_url":"https://api.github.com/repos/choderalab/Ligandr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/choderalab/Ligandr/downloads","issues_url":"https://api.github.com/repos/choderalab/Ligandr/issues{/number}","pulls_url":"https://api.github.com/repos/choderalab/Ligandr/pulls{/number}","milestones_url":"https://api.github.com/repos/choderalab/Ligandr/milestones{/number}","notifications_url":"https://api.github.com/repos/choderalab/Ligandr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/choderalab/Ligandr/labels{/name}","releases_url":"https://api.github.com/repos/choderalab/Ligandr/releases{/id}","deployments_url":"https://api.github.com/repos/choderalab/Ligandr/deployments","created_at":"2018-06-08T19:24:39Z","updated_at":"2018-06-19T16:37:40Z","pushed_at":"2018-06-19T16:51:26Z","git_url":"git://github.com/choderalab/Ligandr.git","ssh_url":"git@github.com:choderalab/Ligandr.git","clone_url":"https://github.com/choderalab/Ligandr.git","svn_url":"https://github.com/choderalab/Ligandr","homepage":null,"size":50,"stargazers_count":3,"watchers_count":3,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"forks":0,"open_issues":1,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/choderalab/Ligandr/pulls/2"},"html":{"href":"https://github.com/choderalab/Ligandr/pull/2"},"issue":{"href":"https://api.github.com/repos/choderalab/Ligandr/issues/2"},"comments":{"href":"https://api.github.com/repos/choderalab/Ligandr/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/choderalab/Ligandr/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/choderalab/Ligandr/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/choderalab/Ligandr/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/choderalab/Ligandr/statuses/621ade999d9c077c5ba09ecda3b0af8c8ab8ea4e"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"maxentile"}}