{"action":"created","comment":{"url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls/comments/175246540","pull_request_review_id":104755191,"id":175246540,"diff_hunk":"@@ -0,0 +1,118 @@\n+############################\n+Python performance profiling\n+############################\n+\n+It is important to generate a profile of code performance to understand where to focus optimization efforts.\n+A useful guide to optimization of python code in general, and SciPy/NumPy in particular, is: http://scipy-lectures.github.io/advanced/optimizing/.\n+\n+Function-level profiling\n+========================\n+\n+Consider the code in :file:`mosaic.py`.\n+To profile it:\n+\n+.. code-block:: bash\n+\n+   python -m cProfile -o cprofile-mosaic.dat `which mosaic.py` \\\n+       /data3a/work/price/SUPA-MIT/rerun/cosmos --id field=COSMOS \\\n+       filter=W-S-I+ expTime=120.0 --clobber-config\n+\n+Then, in a Python session:\n+\n+.. code-block:: python\n+\n+   import pstats\n+   p = pstats.Stats(\"cprofile-mosaic.dat\")\n+   p.sort_stats(\"cumulative\").print_stats(30) # Print top 30 cumulative\n+\n+The results are:\n+\n+.. code-block:: text\n+\n+   n calls (6698794 primitive calls) in 36.536 seconds\n+\n+     Ordered by: cumulative time\n+     List reduced from 4671 to 30 due to restriction <30>\n+\n+     ncalls  tottime  percall  cumtime  percall filename:lineno(function)\n+          1    0.004    0.004   36.538   36.538 /home/price/hsc/meas_mosaic/bin/mosaic.py:3(<module>)\n+          1    0.000    0.000   34.707   34.707 /data1a/ana/products2.1/Linux64/pipe_base/HSC-2.4.1a_hsc/python/lsst/pipe/base/cmdLineTask.py:243(parseAndRun)\n+          1    0.000    0.000   34.324   34.324 /data1a/ana/products2.1/Linux64/pipe_base/HSC-2.4.1a_hsc/python/lsst/pipe/base/cmdLineTask.py:87(run)\n+         30    0.000    0.000   34.317    1.144 {map}\n+          1    0.000    0.000   34.303   34.303 /home/price/hsc/meas_mosaic/python/lsst/meas/mosaic/mosaicTask.py:45(__call__)\n+          1    0.073    0.073   34.303   34.303 /home/price/hsc/meas_mosaic/python/lsst/meas/mosaic/mosaicTask.py:1112(run)\n+          1    0.176    0.176   34.230   34.230 /home/price/hsc/meas_mosaic/python/lsst/meas/mosaic/mosaicTask.py:950(mosaic)\n+          1    2.404    2.404   25.686   25.686 /home/price/hsc/meas_mosaic/python/lsst/meas/mosaic/mosaicTask.py:268(readCatalog)\n+        360    0.740    0.002   20.289    0.056 /home/price/hsc/meas_mosaic/python/lsst/meas/mosaic/mosaicTask.py:205(getAllForCcd)\n+       1008    0.012    0.000   13.592    0.013 /data1a/ana/products2.1/Linux64/daf_persistence/HSC-2.1.2a_hsc/python/lsst/daf/persistence/butlerSubset.py:171(get)\n+       1008    0.025    0.000   13.579    0.013 /data1a/ana/products2.1/Linux64/daf_persistence/HSC-2.1.2a_hsc/python/lsst/daf/persistence/butler.py:209(get)\n+        648    0.007    0.000   12.235    0.019 /data1a/ana/products2.1/Linux64/daf_persistence/HSC-2.1.2a_hsc/python/lsst/daf/persistence/butler.py:239(<lambda>)\n+        648    0.014    0.000   12.228    0.019 /data1a/ana/products2.1/Linux64/daf_persistence/HSC-2.1.2a_hsc/python/lsst/daf/persistence/butler.py:386(_read)\n+        324    0.001    0.000   10.380    0.032 /home/price/hsc/afw/python/lsst/afw/table/tableLib.py:7836(readFits)\n+        324   10.379    0.032   10.379    0.032 {_tableLib.SourceCatalog_readFits}\n+          1    0.121    0.121    7.344    7.344 /home/price/hsc/meas_mosaic/python/lsst/meas/mosaic/mosaicTask.py:318(mergeCatalog)\n+          1    0.000    0.000    6.680    6.680 /home/price/hsc/meas_mosaic/python/lsst/meas/mosaic/mosaicLib.py:1400(kdtreeSource)\n+          1    6.680    6.680    6.680    6.680 {_mosaicLib.kdtreeSource}\n+        360    0.001    0.000    2.248    0.006 /home/price/hsc/afw/python/lsst/afw/image/imageLib.py:8635(makeWcs)\n+        360    2.137    0.006    2.248    0.006 {_imageLib.makeWcs}\n+        648    0.331    0.001    2.148    0.003 /home/price/hsc/meas_mosaic/python/lsst/meas/mosaic/mosaicTask.py:173(selectStars)\n+     153718    0.679    0.000    1.899    0.000 /home/price/hsc/meas_mosaic/python/lsst/meas/mosaic/mosaicLib.py:776(__init__)\n+        324    0.001    0.000    1.779    0.005 /home/price/hsc/afw/python/lsst/afw/table/tableLib.py:6266(readFits)\n+        324    1.779    0.005    1.779    0.005 {_tableLib.BaseCatalog_readFits}\n+       2916    0.178    0.000    1.450    0.000 /home/price/hsc/afw/python/lsst/afw/table/tableLib.py:726(find)\n+        360    0.000    0.000    1.128    0.003 /data1a/ana/products2.1/Linux64/daf_persistence/HSC-2.1.2a_hsc/python/lsst/daf/persistence/butler.py:236(<lambda>)\n+        360    0.001    0.000    1.127    0.003 /data1a/ana/products2.1/Linux64/daf_butlerUtils/HSC-2.2.0c_hsc/python/lsst/daf/butlerUtils/cameraMapper.py:315(<lambda>)\n+        360    0.001    0.000    1.126    0.003 /home/price/hsc/afw/python/lsst/afw/image/imageLib.py:1159(readMetadata)\n+        360    1.126    0.003    1.126    0.003 {_imageLib.readMetadata}\n+          1    0.004    0.004    1.036    1.036 /home/price/hsc/meas_mosaic/python/lsst/meas/mosaic/mosaicTask.py:3(<module>)\n+\n+It is often most useful to look at the ``cumtime`` column, which is the time spent in that function and what it calls.\n+The results here show that 10/36 = 28% is being spent in ``readFits``, but 26/36 = 72% is devoted to I/O (``readCatalog``).\n+That might suggest that some Python code should get pushed down to C++.\n+If you do:\n+\n+.. code-block:: python\n+\n+   p.print_callees(\"readCatalog\")\n+   p.print_callees(\"getAllForCcd\")\n+\n+you can see that the **cumtime** column doesn't add up to the **cumtime** values in the above, so the remaining time is time spent within those functions doing work.\n+\n+For more details on pstats and python profiling in general see http://docs.python.org/2/library/profile.html.","path":"python/profiling.rst","position":81,"original_position":81,"commit_id":"84d6873bcf3d143c009c4be9d956be1ce0e45f94","original_commit_id":"8ca92e2022891d94805b04cdc6ea08d1bb82f4ce","user":{"login":"timj","id":60622,"avatar_url":"https://avatars1.githubusercontent.com/u/60622?v=4","gravatar_id":"","url":"https://api.github.com/users/timj","html_url":"https://github.com/timj","followers_url":"https://api.github.com/users/timj/followers","following_url":"https://api.github.com/users/timj/following{/other_user}","gists_url":"https://api.github.com/users/timj/gists{/gist_id}","starred_url":"https://api.github.com/users/timj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/timj/subscriptions","organizations_url":"https://api.github.com/users/timj/orgs","repos_url":"https://api.github.com/users/timj/repos","events_url":"https://api.github.com/users/timj/events{/privacy}","received_events_url":"https://api.github.com/users/timj/received_events","type":"User","site_admin":false},"body":"You can delete the `/2/` and it will do the right thing and go to py3.","created_at":"2018-03-17T03:23:52Z","updated_at":"2018-03-17T03:23:52Z","html_url":"https://github.com/lsst-dm/dm_dev_guide/pull/209#discussion_r175246540","pull_request_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls/209","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls/comments/175246540"},"html":{"href":"https://github.com/lsst-dm/dm_dev_guide/pull/209#discussion_r175246540"},"pull_request":{"href":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls/209"}},"in_reply_to_id":175224999},"pull_request":{"url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls/209","id":175623238,"html_url":"https://github.com/lsst-dm/dm_dev_guide/pull/209","diff_url":"https://github.com/lsst-dm/dm_dev_guide/pull/209.diff","patch_url":"https://github.com/lsst-dm/dm_dev_guide/pull/209.patch","issue_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/issues/209","number":209,"state":"open","locked":false,"title":"DM-13656: Major re-organization","user":{"login":"jonathansick","id":349384,"avatar_url":"https://avatars3.githubusercontent.com/u/349384?v=4","gravatar_id":"","url":"https://api.github.com/users/jonathansick","html_url":"https://github.com/jonathansick","followers_url":"https://api.github.com/users/jonathansick/followers","following_url":"https://api.github.com/users/jonathansick/following{/other_user}","gists_url":"https://api.github.com/users/jonathansick/gists{/gist_id}","starred_url":"https://api.github.com/users/jonathansick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonathansick/subscriptions","organizations_url":"https://api.github.com/users/jonathansick/orgs","repos_url":"https://api.github.com/users/jonathansick/repos","events_url":"https://api.github.com/users/jonathansick/events{/privacy}","received_events_url":"https://api.github.com/users/jonathansick/received_events","type":"User","site_admin":false},"body":"Draft: https://developer.lsst.io/v/DM-13656\r\n\r\nThis PR implements the reorganization proposed in [RFC-453](https://jira.lsstcorp.org/browse/RFC-453).\r\n\r\n## About the commit structure\r\n\r\nThe commits are generally structured in three parts:\r\n\r\n1. Move/rename pages without changing the content\r\n2. Update cross-links\r\n3. Add redirect pages at old URLs\r\n\r\nDoing this provides a more usable Git history where we can see how the page was moved. We can also see where redirect pages were added so that they can be replaced by an automated process later on.\r\n\r\n## About the table of contents\r\n\r\nThe table of contents management is more complicated than it used to be, for the sake of usability. I think that it can be simplified in the long run.\r\n\r\n- The `toctrees` with labels are needed by this particular theme to populate the side bar. Most themes don't use toctree labels to manage headers in the sidebar. So once we switch to a new, custom, LSST theme we can move away from this.\r\n- The lists of `doc` roles in `index.rst` provide the flexibility to group topics and include sub-headers. Again, once we switch to a new theme, this can be consolidated with regular `toctrees`\r\n- The `index.rst` files in individual subdirectories mirror the consolidated contents list in the root `index.rst`. This is needed so that users who manually edit URLs down to the directory path don't get a 404. At the same time, this isn't the primary navigation because I want most pages to be accessible from the guide's homepage. Eventually, I think I can make some tooling to automatically generate these directory listings. This is a pattern that might come up with our other user guides too.\r\n\r\n## Next steps\r\n\r\nThis PR puts the Developer Guide in a more usable state. The next steps, in subsequent PRs, is to go into the content and re-write/edit it for more usability. For example:\r\n\r\n- Break up the `/work/flow.html` page so that it serves as a compact overview. Additional details and policies would go into `/git/` and `/github/` sections.\r\n- Add a `/github/` section that describes how we use GitHub (PRs, orgs, teams, etc.)\r\n- Add an overview section at the top of the \"Services\" part, which would include an overview of how ot get help with different types of DM services, and include a page or two on the ITSC.\r\n\r\n****\r\n\r\n![screenshot-2018-3-16 lsst dm developer guide lsst dm developer guide dm-13656 documentation](https://user-images.githubusercontent.com/349384/37541492-1030e9dc-2918-11e8-9945-2b8c1b174e52.png)","created_at":"2018-03-16T19:15:46Z","updated_at":"2018-03-17T03:23:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8cdb6b7a5c065ff5e8ae5089a19cde5bdd27ed60","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls/209/commits","review_comments_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls/209/comments","review_comment_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls/comments{/number}","comments_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/issues/209/comments","statuses_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/statuses/84d6873bcf3d143c009c4be9d956be1ce0e45f94","head":{"label":"lsst-dm:tickets/DM-13656","ref":"tickets/DM-13656","sha":"84d6873bcf3d143c009c4be9d956be1ce0e45f94","user":{"login":"lsst-dm","id":10968870,"avatar_url":"https://avatars1.githubusercontent.com/u/10968870?v=4","gravatar_id":"","url":"https://api.github.com/users/lsst-dm","html_url":"https://github.com/lsst-dm","followers_url":"https://api.github.com/users/lsst-dm/followers","following_url":"https://api.github.com/users/lsst-dm/following{/other_user}","gists_url":"https://api.github.com/users/lsst-dm/gists{/gist_id}","starred_url":"https://api.github.com/users/lsst-dm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lsst-dm/subscriptions","organizations_url":"https://api.github.com/users/lsst-dm/orgs","repos_url":"https://api.github.com/users/lsst-dm/repos","events_url":"https://api.github.com/users/lsst-dm/events{/privacy}","received_events_url":"https://api.github.com/users/lsst-dm/received_events","type":"Organization","site_admin":false},"repo":{"id":40620718,"name":"dm_dev_guide","full_name":"lsst-dm/dm_dev_guide","owner":{"login":"lsst-dm","id":10968870,"avatar_url":"https://avatars1.githubusercontent.com/u/10968870?v=4","gravatar_id":"","url":"https://api.github.com/users/lsst-dm","html_url":"https://github.com/lsst-dm","followers_url":"https://api.github.com/users/lsst-dm/followers","following_url":"https://api.github.com/users/lsst-dm/following{/other_user}","gists_url":"https://api.github.com/users/lsst-dm/gists{/gist_id}","starred_url":"https://api.github.com/users/lsst-dm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lsst-dm/subscriptions","organizations_url":"https://api.github.com/users/lsst-dm/orgs","repos_url":"https://api.github.com/users/lsst-dm/repos","events_url":"https://api.github.com/users/lsst-dm/events{/privacy}","received_events_url":"https://api.github.com/users/lsst-dm/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/lsst-dm/dm_dev_guide","description":"LSST Data Management Developer Guide","fork":false,"url":"https://api.github.com/repos/lsst-dm/dm_dev_guide","forks_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/forks","keys_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/teams","hooks_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/hooks","issue_events_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/issues/events{/number}","events_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/events","assignees_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/assignees{/user}","branches_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/branches{/branch}","tags_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/tags","blobs_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/git/refs{/sha}","trees_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/statuses/{sha}","languages_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/languages","stargazers_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/stargazers","contributors_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/contributors","subscribers_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/subscribers","subscription_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/subscription","commits_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/commits{/sha}","git_commits_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/git/commits{/sha}","comments_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/comments{/number}","issue_comment_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/issues/comments{/number}","contents_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/contents/{+path}","compare_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/merges","archive_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/downloads","issues_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/issues{/number}","pulls_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls{/number}","milestones_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/milestones{/number}","notifications_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/labels{/name}","releases_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/releases{/id}","deployments_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/deployments","created_at":"2015-08-12T19:43:19Z","updated_at":"2017-12-23T03:33:38Z","pushed_at":"2018-03-16T19:25:13Z","git_url":"git://github.com/lsst-dm/dm_dev_guide.git","ssh_url":"git@github.com:lsst-dm/dm_dev_guide.git","clone_url":"https://github.com/lsst-dm/dm_dev_guide.git","svn_url":"https://github.com/lsst-dm/dm_dev_guide","homepage":"https://developer.lsst.io","size":8483,"stargazers_count":3,"watchers_count":3,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":6,"mirror_url":null,"archived":false,"open_issues_count":9,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":6,"open_issues":9,"watchers":3,"default_branch":"master"}},"base":{"label":"lsst-dm:master","ref":"master","sha":"f58b841c2dfa30c4c2ad296663b45d10e97ad551","user":{"login":"lsst-dm","id":10968870,"avatar_url":"https://avatars1.githubusercontent.com/u/10968870?v=4","gravatar_id":"","url":"https://api.github.com/users/lsst-dm","html_url":"https://github.com/lsst-dm","followers_url":"https://api.github.com/users/lsst-dm/followers","following_url":"https://api.github.com/users/lsst-dm/following{/other_user}","gists_url":"https://api.github.com/users/lsst-dm/gists{/gist_id}","starred_url":"https://api.github.com/users/lsst-dm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lsst-dm/subscriptions","organizations_url":"https://api.github.com/users/lsst-dm/orgs","repos_url":"https://api.github.com/users/lsst-dm/repos","events_url":"https://api.github.com/users/lsst-dm/events{/privacy}","received_events_url":"https://api.github.com/users/lsst-dm/received_events","type":"Organization","site_admin":false},"repo":{"id":40620718,"name":"dm_dev_guide","full_name":"lsst-dm/dm_dev_guide","owner":{"login":"lsst-dm","id":10968870,"avatar_url":"https://avatars1.githubusercontent.com/u/10968870?v=4","gravatar_id":"","url":"https://api.github.com/users/lsst-dm","html_url":"https://github.com/lsst-dm","followers_url":"https://api.github.com/users/lsst-dm/followers","following_url":"https://api.github.com/users/lsst-dm/following{/other_user}","gists_url":"https://api.github.com/users/lsst-dm/gists{/gist_id}","starred_url":"https://api.github.com/users/lsst-dm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lsst-dm/subscriptions","organizations_url":"https://api.github.com/users/lsst-dm/orgs","repos_url":"https://api.github.com/users/lsst-dm/repos","events_url":"https://api.github.com/users/lsst-dm/events{/privacy}","received_events_url":"https://api.github.com/users/lsst-dm/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/lsst-dm/dm_dev_guide","description":"LSST Data Management Developer Guide","fork":false,"url":"https://api.github.com/repos/lsst-dm/dm_dev_guide","forks_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/forks","keys_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/teams","hooks_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/hooks","issue_events_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/issues/events{/number}","events_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/events","assignees_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/assignees{/user}","branches_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/branches{/branch}","tags_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/tags","blobs_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/git/refs{/sha}","trees_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/statuses/{sha}","languages_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/languages","stargazers_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/stargazers","contributors_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/contributors","subscribers_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/subscribers","subscription_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/subscription","commits_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/commits{/sha}","git_commits_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/git/commits{/sha}","comments_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/comments{/number}","issue_comment_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/issues/comments{/number}","contents_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/contents/{+path}","compare_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/merges","archive_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/downloads","issues_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/issues{/number}","pulls_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls{/number}","milestones_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/milestones{/number}","notifications_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/labels{/name}","releases_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/releases{/id}","deployments_url":"https://api.github.com/repos/lsst-dm/dm_dev_guide/deployments","created_at":"2015-08-12T19:43:19Z","updated_at":"2017-12-23T03:33:38Z","pushed_at":"2018-03-16T19:25:13Z","git_url":"git://github.com/lsst-dm/dm_dev_guide.git","ssh_url":"git@github.com:lsst-dm/dm_dev_guide.git","clone_url":"https://github.com/lsst-dm/dm_dev_guide.git","svn_url":"https://github.com/lsst-dm/dm_dev_guide","homepage":"https://developer.lsst.io","size":8483,"stargazers_count":3,"watchers_count":3,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":6,"mirror_url":null,"archived":false,"open_issues_count":9,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":6,"open_issues":9,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls/209"},"html":{"href":"https://github.com/lsst-dm/dm_dev_guide/pull/209"},"issue":{"href":"https://api.github.com/repos/lsst-dm/dm_dev_guide/issues/209"},"comments":{"href":"https://api.github.com/repos/lsst-dm/dm_dev_guide/issues/209/comments"},"review_comments":{"href":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls/209/comments"},"review_comment":{"href":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/lsst-dm/dm_dev_guide/pulls/209/commits"},"statuses":{"href":"https://api.github.com/repos/lsst-dm/dm_dev_guide/statuses/84d6873bcf3d143c009c4be9d956be1ce0e45f94"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"timj"}}