{"action":"created","comment":{"url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls/comments/195199065","pull_request_review_id":128518940,"id":195199065,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5NTE5OTA2NQ==","diff_hunk":"@@ -0,0 +1,527 @@\n+import time\n+import torch\n+\n+dump_backward_overhead = False\n+\n+################################################################################\n+# 0. Initializations\n+################################################################################\n+from tensor_comprehensions.tclib import MappingOptions\n+\n+# Define a timing function to print some results\n+def time_tc(iters, prepend, runFun, tc_name, inputs):\n+    global dump_backward_overhead\n+\n+    timesCPU = []\n+    timesCPUAndGPU = []\n+    for i in range(iters):\n+        torch.cuda.synchronize()\n+        start = time.clock()\n+        if dump_backward_overhead:\n+            dump_backward_overhead = time.clock()\n+        outputs = runFun(tc_name, inputs, ())\n+        timesCPU.append(time.clock() - start)\n+        torch.cuda.synchronize()\n+        timesCPUAndGPU.append(time.clock() - start)\n+    print(\"#################################################################\")\n+    timesCPU = sorted(timesCPU)\n+    print(\"{} Total CPU time to launch kernel: min {}us, p50 {}us, p90 {}us, max {}us\".format(\n+        prepend,\n+        int(timesCPU[0] * 1e6),\n+        int(timesCPU[int(len(timesCPU) // 2)] * 1e6),\n+        int(timesCPU[int((len(timesCPU) * 9) // 10)] * 1e6),\n+        int(timesCPU[len(timesCPU) - 1] * 1e6),\n+    ))\n+    timesCPUAndGPU = sorted(timesCPUAndGPU)\n+    print(\"{} Total CPU launch + GPU kernel time: min {}us, p50 {}us, p90 {}us, max {}us\".format(\n+        prepend,\n+        int(timesCPUAndGPU[0] * 1e6),\n+        int(timesCPUAndGPU[int(len(timesCPUAndGPU) // 2)] * 1e6),\n+        int(timesCPUAndGPU[int((len(timesCPUAndGPU) * 9) // 10)] * 1e6),\n+        int(timesCPUAndGPU[len(timesCPUAndGPU) - 1] * 1e6),\n+    ))\n+\n+# Define a TC string for matmul and some input torch cuda tensors\n+mm = \"\"\"\n+def matmul(float(M,N) A, float(N,K) B) -> (C) {\n+    C(m, k) +=! A(m, r_n) * B(r_n, k)\n+}\n+def matmul_grad(float(M,N) A, float(N,K) B, float(M,K) d_O) -> (d_A, d_B) {\n+    d_A(m, n) +=! d_O(  m, r_k) * B(  n, r_k)\n+    d_B(n, k) +=! d_O(r_m,   k) * A(r_m,   n)\n+}\n+\"\"\"\n+mat1, mat2 = torch.randn(300, 400).cuda(), torch.randn(400, 500).cuda()\n+\n+################################################################################\n+# 1. Use the C++ API to build a low-overhead compilation cache and time it\n+################################################################################\n+from tensor_comprehensions.tclib import CompilationCache\n+\n+compilation_cache = CompilationCache(mm)","path":"test_python/pytorch_example.py","position":61,"original_position":61,"commit_id":"898dd32ade6050d7d530fc5bc16d639508781156","original_commit_id":"d197f6c190bfb57c2ad64fdbfd427ab76ab8207e","user":{"login":"ftynse","id":1512299,"node_id":"MDQ6VXNlcjE1MTIyOTk=","avatar_url":"https://avatars1.githubusercontent.com/u/1512299?v=4","gravatar_id":"","url":"https://api.github.com/users/ftynse","html_url":"https://github.com/ftynse","followers_url":"https://api.github.com/users/ftynse/followers","following_url":"https://api.github.com/users/ftynse/following{/other_user}","gists_url":"https://api.github.com/users/ftynse/gists{/gist_id}","starred_url":"https://api.github.com/users/ftynse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ftynse/subscriptions","organizations_url":"https://api.github.com/users/ftynse/orgs","repos_url":"https://api.github.com/users/ftynse/repos","events_url":"https://api.github.com/users/ftynse/events{/privacy}","received_events_url":"https://api.github.com/users/ftynse/received_events","type":"User","site_admin":false},"body":"yes, the filename got me confused, it implies the the code is an example of using tc in pytorch","created_at":"2018-06-13T18:56:49Z","updated_at":"2018-06-13T18:56:49Z","html_url":"https://github.com/facebookresearch/TensorComprehensions/pull/495#discussion_r195199065","pull_request_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls/495","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls/comments/195199065"},"html":{"href":"https://github.com/facebookresearch/TensorComprehensions/pull/495#discussion_r195199065"},"pull_request":{"href":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls/495"}},"in_reply_to_id":194642439},"pull_request":{"url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls/495","id":193498544,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkzNDk4NTQ0","html_url":"https://github.com/facebookresearch/TensorComprehensions/pull/495","diff_url":"https://github.com/facebookresearch/TensorComprehensions/pull/495.diff","patch_url":"https://github.com/facebookresearch/TensorComprehensions/pull/495.patch","issue_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/issues/495","number":495,"state":"open","locked":false,"title":"More generic and lightweight PyTorch integration","user":{"login":"nicolasvasilache","id":10148468,"node_id":"MDQ6VXNlcjEwMTQ4NDY4","avatar_url":"https://avatars3.githubusercontent.com/u/10148468?v=4","gravatar_id":"","url":"https://api.github.com/users/nicolasvasilache","html_url":"https://github.com/nicolasvasilache","followers_url":"https://api.github.com/users/nicolasvasilache/followers","following_url":"https://api.github.com/users/nicolasvasilache/following{/other_user}","gists_url":"https://api.github.com/users/nicolasvasilache/gists{/gist_id}","starred_url":"https://api.github.com/users/nicolasvasilache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nicolasvasilache/subscriptions","organizations_url":"https://api.github.com/users/nicolasvasilache/orgs","repos_url":"https://api.github.com/users/nicolasvasilache/repos","events_url":"https://api.github.com/users/nicolasvasilache/events{/privacy}","received_events_url":"https://api.github.com/users/nicolasvasilache/received_events","type":"User","site_admin":false},"body":"This PR reworks the python bindings with the goal of being lighweight. \r\nDecisions and impl are backed by benchmarks on a strawman TcBuilder / TcFunction abstraction.\r\n\r\nRunning `python ./test_python/pytorch_example.py` prints something like:\r\n\r\n```\r\n#################################################################\r\nraw unchecked_run naive options  Total CPU time to launch kernel: min 20us, p50 23us, p90 26us, max 2261us\r\nraw unchecked_run naive options  Total CPU launch + GPU kernel time: min 431us, p50 435us, p90 441us, max 74723us\r\nTune with cache @ /tmp/8cca3161-0c96-4594-9c92-86707127eaec\r\nNote that if you pass a fixed filename, you can reinforce an existing tuning state\r\nIteration 0     Jobs(Compiled, Evaluated)/total  (25, 25)/25   (best/median/worst)us: 321/721/17831\r\nIteration 1     Jobs(Compiled, Evaluated)/total  (25, 25)/25   (best/median/worst)us: 126/348/1513\r\nIteration 2     Jobs(Compiled, Evaluated)/total  (25, 25)/25   (best/median/worst)us: 126/345/555\r\n#################################################################\r\nraw unchecked_run tuned options  Total CPU time to launch kernel: min 19us, p50 25us, p90 28us, max 203us\r\nraw unchecked_run tuned options  Total CPU launch + GPU kernel time: min 366us, p50 371us, p90 376us, max 605us\r\n#################################################################\r\nTcBuilder unchecked_run  Total CPU time to launch kernel: min 8us, p50 11us, p90 13us, max 1546us\r\nTcBuilder unchecked_run  Total CPU launch + GPU kernel time: min 291us, p50 295us, p90 297us, max 1823us\r\n#################################################################\r\nTcFunction forward unchecked_run         Total CPU time to launch kernel: min 17us, p50 21us, p90 24us, max 498101us\r\nTcFunction forward unchecked_run         Total CPU launch + GPU kernel time: min 299us, p50 303us, p90 307us, max 498359us\r\n#################################################################\r\nTcFunction backward unchecked_run        Total CPU time to launch kernel: min 174us, p50 246us, p90 399us, max 425us\r\nTcFunction backward unchecked_run        Total CPU launch + GPU kernel time: min 1192us, p50 1282us, p90 1355us, max 1378us\r\n#################################################################\r\nMultiTcBuilder unchecked_run     Total CPU time to launch kernel: min 8us, p50 11us, p90 13us, max 1415us\r\nMultiTcBuilder unchecked_run     Total CPU launch + GPU kernel time: min 292us, p50 295us, p90 297us, max 1691us\r\n#################################################################\r\nMultiTcFunction forward unchecked_run    Total CPU time to launch kernel: min 24us, p50 28us, p90 28us, max 498183us\r\nMultiTcFunction forward unchecked_run    Total CPU launch + GPU kernel time: min 303us, p50 307us, p90 311us, max 498448us\r\n#################################################################\r\nMultiTcFunction backward unchecked_run   Total CPU time to launch kernel: min 212us, p50 348us, p90 402us, max 557us\r\nMultiTcFunction backward unchecked_run   Total CPU launch + GPU kernel time: min 1242us, p50 1333us, p90 1356us, max 2025us\r\n```\r\n\r\nA large fraction of the overhead in backward seems to come from PyTorch autograd (around 200 microseconds for `matmul_grad`). The least intrusive way I found to benchmark this is to flick the `dump_backward_overhead` flag between the call into the lambda in `test_tc` and being in the `backward` function.\r\n\r\nI wonder if this could come from saving the `TcBuilder` in `ctx` (but I doubt it).\r\n\r\nCommit messages are still missing. ","created_at":"2018-06-08T03:12:50Z","updated_at":"2018-06-13T18:56:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"88b971f33ae17fb7b86ecc440398d7cae61a610b","assignee":null,"assignees":[],"requested_reviewers":[{"login":"zdevito","id":370202,"node_id":"MDQ6VXNlcjM3MDIwMg==","avatar_url":"https://avatars0.githubusercontent.com/u/370202?v=4","gravatar_id":"","url":"https://api.github.com/users/zdevito","html_url":"https://github.com/zdevito","followers_url":"https://api.github.com/users/zdevito/followers","following_url":"https://api.github.com/users/zdevito/following{/other_user}","gists_url":"https://api.github.com/users/zdevito/gists{/gist_id}","starred_url":"https://api.github.com/users/zdevito/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zdevito/subscriptions","organizations_url":"https://api.github.com/users/zdevito/orgs","repos_url":"https://api.github.com/users/zdevito/repos","events_url":"https://api.github.com/users/zdevito/events{/privacy}","received_events_url":"https://api.github.com/users/zdevito/received_events","type":"User","site_admin":false},{"login":"colesbury","id":655866,"node_id":"MDQ6VXNlcjY1NTg2Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/655866?v=4","gravatar_id":"","url":"https://api.github.com/users/colesbury","html_url":"https://github.com/colesbury","followers_url":"https://api.github.com/users/colesbury/followers","following_url":"https://api.github.com/users/colesbury/following{/other_user}","gists_url":"https://api.github.com/users/colesbury/gists{/gist_id}","starred_url":"https://api.github.com/users/colesbury/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colesbury/subscriptions","organizations_url":"https://api.github.com/users/colesbury/orgs","repos_url":"https://api.github.com/users/colesbury/repos","events_url":"https://api.github.com/users/colesbury/events{/privacy}","received_events_url":"https://api.github.com/users/colesbury/received_events","type":"User","site_admin":false},{"login":"soumith","id":1310570,"node_id":"MDQ6VXNlcjEzMTA1NzA=","avatar_url":"https://avatars0.githubusercontent.com/u/1310570?v=4","gravatar_id":"","url":"https://api.github.com/users/soumith","html_url":"https://github.com/soumith","followers_url":"https://api.github.com/users/soumith/followers","following_url":"https://api.github.com/users/soumith/following{/other_user}","gists_url":"https://api.github.com/users/soumith/gists{/gist_id}","starred_url":"https://api.github.com/users/soumith/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/soumith/subscriptions","organizations_url":"https://api.github.com/users/soumith/orgs","repos_url":"https://api.github.com/users/soumith/repos","events_url":"https://api.github.com/users/soumith/events{/privacy}","received_events_url":"https://api.github.com/users/soumith/received_events","type":"User","site_admin":false},{"login":"salexspb","id":20307328,"node_id":"MDQ6VXNlcjIwMzA3MzI4","avatar_url":"https://avatars2.githubusercontent.com/u/20307328?v=4","gravatar_id":"","url":"https://api.github.com/users/salexspb","html_url":"https://github.com/salexspb","followers_url":"https://api.github.com/users/salexspb/followers","following_url":"https://api.github.com/users/salexspb/following{/other_user}","gists_url":"https://api.github.com/users/salexspb/gists{/gist_id}","starred_url":"https://api.github.com/users/salexspb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/salexspb/subscriptions","organizations_url":"https://api.github.com/users/salexspb/orgs","repos_url":"https://api.github.com/users/salexspb/repos","events_url":"https://api.github.com/users/salexspb/events{/privacy}","received_events_url":"https://api.github.com/users/salexspb/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":829008246,"node_id":"MDU6TGFiZWw4MjkwMDgyNDY=","url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/labels/CLA%20Signed","name":"CLA Signed","color":"c2f4fc","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls/495/commits","review_comments_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls/495/comments","review_comment_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls/comments{/number}","comments_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/issues/495/comments","statuses_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/statuses/898dd32ade6050d7d530fc5bc16d639508781156","head":{"label":"nicolasvasilache:pr/redo-pytorch","ref":"pr/redo-pytorch","sha":"898dd32ade6050d7d530fc5bc16d639508781156","user":{"login":"nicolasvasilache","id":10148468,"node_id":"MDQ6VXNlcjEwMTQ4NDY4","avatar_url":"https://avatars3.githubusercontent.com/u/10148468?v=4","gravatar_id":"","url":"https://api.github.com/users/nicolasvasilache","html_url":"https://github.com/nicolasvasilache","followers_url":"https://api.github.com/users/nicolasvasilache/followers","following_url":"https://api.github.com/users/nicolasvasilache/following{/other_user}","gists_url":"https://api.github.com/users/nicolasvasilache/gists{/gist_id}","starred_url":"https://api.github.com/users/nicolasvasilache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nicolasvasilache/subscriptions","organizations_url":"https://api.github.com/users/nicolasvasilache/orgs","repos_url":"https://api.github.com/users/nicolasvasilache/repos","events_url":"https://api.github.com/users/nicolasvasilache/events{/privacy}","received_events_url":"https://api.github.com/users/nicolasvasilache/received_events","type":"User","site_admin":false},"repo":{"id":125610825,"node_id":"MDEwOlJlcG9zaXRvcnkxMjU2MTA4MjU=","name":"TensorComprehensions","full_name":"nicolasvasilache/TensorComprehensions","owner":{"login":"nicolasvasilache","id":10148468,"node_id":"MDQ6VXNlcjEwMTQ4NDY4","avatar_url":"https://avatars3.githubusercontent.com/u/10148468?v=4","gravatar_id":"","url":"https://api.github.com/users/nicolasvasilache","html_url":"https://github.com/nicolasvasilache","followers_url":"https://api.github.com/users/nicolasvasilache/followers","following_url":"https://api.github.com/users/nicolasvasilache/following{/other_user}","gists_url":"https://api.github.com/users/nicolasvasilache/gists{/gist_id}","starred_url":"https://api.github.com/users/nicolasvasilache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nicolasvasilache/subscriptions","organizations_url":"https://api.github.com/users/nicolasvasilache/orgs","repos_url":"https://api.github.com/users/nicolasvasilache/repos","events_url":"https://api.github.com/users/nicolasvasilache/events{/privacy}","received_events_url":"https://api.github.com/users/nicolasvasilache/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/nicolasvasilache/TensorComprehensions","description":"A domain specific language to express machine learning workloads.","fork":true,"url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions","forks_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/forks","keys_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/teams","hooks_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/hooks","issue_events_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/issues/events{/number}","events_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/events","assignees_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/assignees{/user}","branches_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/branches{/branch}","tags_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/tags","blobs_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/git/refs{/sha}","trees_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/statuses/{sha}","languages_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/languages","stargazers_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/stargazers","contributors_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/contributors","subscribers_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/subscribers","subscription_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/subscription","commits_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/commits{/sha}","git_commits_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/git/commits{/sha}","comments_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/comments{/number}","issue_comment_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/issues/comments{/number}","contents_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/contents/{+path}","compare_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/merges","archive_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/downloads","issues_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/issues{/number}","pulls_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/pulls{/number}","milestones_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/milestones{/number}","notifications_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/labels{/name}","releases_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/releases{/id}","deployments_url":"https://api.github.com/repos/nicolasvasilache/TensorComprehensions/deployments","created_at":"2018-03-17T08:35:14Z","updated_at":"2018-06-11T03:56:54Z","pushed_at":"2018-06-13T18:41:20Z","git_url":"git://github.com/nicolasvasilache/TensorComprehensions.git","ssh_url":"git@github.com:nicolasvasilache/TensorComprehensions.git","clone_url":"https://github.com/nicolasvasilache/TensorComprehensions.git","svn_url":"https://github.com/nicolasvasilache/TensorComprehensions","homepage":"https://facebookresearch.github.io/TensorComprehensions/","size":32081,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"facebookresearch:master","ref":"master","sha":"58207a9166139752ef860498900db494221e3deb","user":{"login":"facebookresearch","id":16943930,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2OTQzOTMw","avatar_url":"https://avatars0.githubusercontent.com/u/16943930?v=4","gravatar_id":"","url":"https://api.github.com/users/facebookresearch","html_url":"https://github.com/facebookresearch","followers_url":"https://api.github.com/users/facebookresearch/followers","following_url":"https://api.github.com/users/facebookresearch/following{/other_user}","gists_url":"https://api.github.com/users/facebookresearch/gists{/gist_id}","starred_url":"https://api.github.com/users/facebookresearch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/facebookresearch/subscriptions","organizations_url":"https://api.github.com/users/facebookresearch/orgs","repos_url":"https://api.github.com/users/facebookresearch/repos","events_url":"https://api.github.com/users/facebookresearch/events{/privacy}","received_events_url":"https://api.github.com/users/facebookresearch/received_events","type":"Organization","site_admin":false},"repo":{"id":120494252,"node_id":"MDEwOlJlcG9zaXRvcnkxMjA0OTQyNTI=","name":"TensorComprehensions","full_name":"facebookresearch/TensorComprehensions","owner":{"login":"facebookresearch","id":16943930,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2OTQzOTMw","avatar_url":"https://avatars0.githubusercontent.com/u/16943930?v=4","gravatar_id":"","url":"https://api.github.com/users/facebookresearch","html_url":"https://github.com/facebookresearch","followers_url":"https://api.github.com/users/facebookresearch/followers","following_url":"https://api.github.com/users/facebookresearch/following{/other_user}","gists_url":"https://api.github.com/users/facebookresearch/gists{/gist_id}","starred_url":"https://api.github.com/users/facebookresearch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/facebookresearch/subscriptions","organizations_url":"https://api.github.com/users/facebookresearch/orgs","repos_url":"https://api.github.com/users/facebookresearch/repos","events_url":"https://api.github.com/users/facebookresearch/events{/privacy}","received_events_url":"https://api.github.com/users/facebookresearch/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/facebookresearch/TensorComprehensions","description":"A domain specific language to express machine learning workloads.","fork":false,"url":"https://api.github.com/repos/facebookresearch/TensorComprehensions","forks_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/forks","keys_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/keys{/key_id}","collaborators_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/teams","hooks_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/hooks","issue_events_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/issues/events{/number}","events_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/events","assignees_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/assignees{/user}","branches_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/branches{/branch}","tags_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/tags","blobs_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/git/refs{/sha}","trees_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/git/trees{/sha}","statuses_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/statuses/{sha}","languages_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/languages","stargazers_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/stargazers","contributors_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/contributors","subscribers_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/subscribers","subscription_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/subscription","commits_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/commits{/sha}","git_commits_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/git/commits{/sha}","comments_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/comments{/number}","issue_comment_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/issues/comments{/number}","contents_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/contents/{+path}","compare_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/compare/{base}...{head}","merges_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/merges","archive_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/downloads","issues_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/issues{/number}","pulls_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls{/number}","milestones_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/milestones{/number}","notifications_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/labels{/name}","releases_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/releases{/id}","deployments_url":"https://api.github.com/repos/facebookresearch/TensorComprehensions/deployments","created_at":"2018-02-06T17:11:07Z","updated_at":"2018-06-13T15:28:01Z","pushed_at":"2018-06-13T18:41:22Z","git_url":"git://github.com/facebookresearch/TensorComprehensions.git","ssh_url":"git@github.com:facebookresearch/TensorComprehensions.git","clone_url":"https://github.com/facebookresearch/TensorComprehensions.git","svn_url":"https://github.com/facebookresearch/TensorComprehensions","homepage":"https://facebookresearch.github.io/TensorComprehensions/","size":32219,"stargazers_count":1208,"watchers_count":1208,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":104,"mirror_url":null,"archived":false,"open_issues_count":89,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":104,"open_issues":89,"watchers":1208,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls/495"},"html":{"href":"https://github.com/facebookresearch/TensorComprehensions/pull/495"},"issue":{"href":"https://api.github.com/repos/facebookresearch/TensorComprehensions/issues/495"},"comments":{"href":"https://api.github.com/repos/facebookresearch/TensorComprehensions/issues/495/comments"},"review_comments":{"href":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls/495/comments"},"review_comment":{"href":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/facebookresearch/TensorComprehensions/pulls/495/commits"},"statuses":{"href":"https://api.github.com/repos/facebookresearch/TensorComprehensions/statuses/898dd32ade6050d7d530fc5bc16d639508781156"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"ftynse"}}