{"action":"created","comment":{"url":"https://api.github.com/repos/tensorflow/tensorflow/pulls/comments/137954151","pull_request_review_id":61689054,"id":137954151,"diff_hunk":"@@ -537,56 +548,72 @@ private static void throwExceptionIfNotByteOfByteArrays(Object array) {\n     }\n   }\n \n+  static HashMap<Class<?>, DataType> class_datatypes = new HashMap<>();\n+  static {\n+    class_datatypes.put(int.class, DataType.INT32);\n+    class_datatypes.put(Integer.class, DataType.INT32);\n+    class_datatypes.put(long.class, DataType.INT64);\n+    class_datatypes.put(Long.class, DataType.INT64);\n+    class_datatypes.put(float.class, DataType.FLOAT);\n+    class_datatypes.put(Float.class, DataType.FLOAT);\n+    class_datatypes.put(double.class, DataType.DOUBLE);\n+    class_datatypes.put(Double.class, DataType.DOUBLE);\n+    class_datatypes.put(byte.class, DataType.STRING);\n+    class_datatypes.put(Byte.class, DataType.STRING);\n+    class_datatypes.put(boolean.class, DataType.BOOL);\n+    class_datatypes.put(Boolean.class, DataType.BOOL);\n+  }\n+\n   private static DataType dataTypeOf(Object o) {\n-    if (o.getClass().isArray()) {\n-      if (Array.getLength(o) == 0) {\n-        throw new IllegalArgumentException(\"cannot create Tensors with a 0 dimension\");\n-      }\n-      // byte[] is a DataType.STRING scalar.\n-      Object e = Array.get(o, 0);\n-      if (e == null) {\n-        throwExceptionIfNotByteOfByteArrays(o);\n-        return DataType.STRING;\n-      }\n-      if (Byte.class.isInstance(e) || byte.class.isInstance(e)) {\n-        return DataType.STRING;\n-      }\n-      return dataTypeOf(e);\n+    Class<?> c = o.getClass();\n+    while (c.isArray()) {\n+      c = c.getComponentType();\n     }\n-    if (Float.class.isInstance(o) || float.class.isInstance(o)) {\n-      return DataType.FLOAT;\n-    } else if (Double.class.isInstance(o) || double.class.isInstance(o)) {\n-      return DataType.DOUBLE;\n-    } else if (Integer.class.isInstance(o) || int.class.isInstance(o)) {\n-      return DataType.INT32;\n-    } else if (Long.class.isInstance(o) || long.class.isInstance(o)) {\n-      return DataType.INT64;\n-    } else if (Boolean.class.isInstance(o) || boolean.class.isInstance(o)) {\n-      return DataType.BOOL;\n-    } else {\n-      throw new IllegalArgumentException(\"cannot create Tensors of \" + o.getClass().getName());\n+    DataType ret = class_datatypes.get(c);\n+    if (ret != null) { \n+      return ret;\n     }\n+    throw new IllegalArgumentException(\"cannot create Tensors of type \" + c.getName());\n   }\n \n-  private static int numDimensions(Object o) {\n-    if (o.getClass().isArray()) {\n-      Object e = Array.get(o, 0);\n-      if (e == null) {\n-        throwExceptionIfNotByteOfByteArrays(o);\n-        return 1;\n-      } else if (Byte.class.isInstance(e) || byte.class.isInstance(e)) {\n-        return 0;\n-      }\n-      return 1 + numDimensions(e);\n+  /** Returns the number of dimensions of a tensor of type dtype\n+   *  when represented by the object o.\n+   */\n+  private static int numDimensions(Object o, DataType dtype) {\n+    int ret = numArrayDimensions(o);\n+    if (dtype == DataType.STRING && ret > 0) {\n+      return ret - 1;\n+    }\n+    return ret;\n+  }\n+  \n+  /** Returns the number of dimensions of the array object o.\n+   *  Returns 0 if o is not an array.\n+   */\n+  private static int numArrayDimensions(Object o) {\n+    Class<?> c = o.getClass();\n+    if (!c.isArray()) return 0;\n+    String s = c.getName();\n+    int i = 0;\n+    while (s.charAt(i) == '[') {","path":"tensorflow/java/src/main/java/org/tensorflow/Tensor.java","position":117,"original_position":117,"commit_id":"37c798b1bed83e1df2cbb2766cfe47040977cff7","original_commit_id":"37c798b1bed83e1df2cbb2766cfe47040977cff7","user":{"login":"andrewcmyers","id":4623813,"avatar_url":"https://avatars1.githubusercontent.com/u/4623813?v=4","gravatar_id":"","url":"https://api.github.com/users/andrewcmyers","html_url":"https://github.com/andrewcmyers","followers_url":"https://api.github.com/users/andrewcmyers/followers","following_url":"https://api.github.com/users/andrewcmyers/following{/other_user}","gists_url":"https://api.github.com/users/andrewcmyers/gists{/gist_id}","starred_url":"https://api.github.com/users/andrewcmyers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrewcmyers/subscriptions","organizations_url":"https://api.github.com/users/andrewcmyers/orgs","repos_url":"https://api.github.com/users/andrewcmyers/repos","events_url":"https://api.github.com/users/andrewcmyers/events{/privacy}","received_events_url":"https://api.github.com/users/andrewcmyers/received_events","type":"User","site_admin":false},"body":"This could also be done by walking up the `getComponentType()` path but I'm conjecturing it's a little faster to just walk through the string.\r\n\r\nIt should also be correct to initialize i to 1 instead of 0 since the first character is guaranteed to be `[`, but starting from zero seemed more obviously correct .","created_at":"2017-09-10T16:44:16Z","updated_at":"2017-09-10T16:44:16Z","html_url":"https://github.com/tensorflow/tensorflow/pull/12928#discussion_r137954151","pull_request_url":"https://api.github.com/repos/tensorflow/tensorflow/pulls/12928","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/tensorflow/tensorflow/pulls/comments/137954151"},"html":{"href":"https://github.com/tensorflow/tensorflow/pull/12928#discussion_r137954151"},"pull_request":{"href":"https://api.github.com/repos/tensorflow/tensorflow/pulls/12928"}}},"pull_request":{"url":"https://api.github.com/repos/tensorflow/tensorflow/pulls/12928","id":140154618,"html_url":"https://github.com/tensorflow/tensorflow/pull/12928","diff_url":"https://github.com/tensorflow/tensorflow/pull/12928.diff","patch_url":"https://github.com/tensorflow/tensorflow/pull/12928.patch","issue_url":"https://api.github.com/repos/tensorflow/tensorflow/issues/12928","number":12928,"state":"open","locked":false,"title":"Improvements to Java API handling of datatypes and arrays","user":{"login":"andrewcmyers","id":4623813,"avatar_url":"https://avatars1.githubusercontent.com/u/4623813?v=4","gravatar_id":"","url":"https://api.github.com/users/andrewcmyers","html_url":"https://github.com/andrewcmyers","followers_url":"https://api.github.com/users/andrewcmyers/followers","following_url":"https://api.github.com/users/andrewcmyers/following{/other_user}","gists_url":"https://api.github.com/users/andrewcmyers/gists{/gist_id}","starred_url":"https://api.github.com/users/andrewcmyers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrewcmyers/subscriptions","organizations_url":"https://api.github.com/users/andrewcmyers/orgs","repos_url":"https://api.github.com/users/andrewcmyers/repos","events_url":"https://api.github.com/users/andrewcmyers/events{/privacy}","received_events_url":"https://api.github.com/users/andrewcmyers/received_events","type":"User","site_admin":false},"body":"This is a set of connected changes broken out from #11535 (Generic Java API) and improved\r\na bit further; still synergistic with that PR  and should allow whittling that PR down toward a digestible size.\r\n\r\n* Changed how datatypes are computed from arrays to not crawl over the array but instead just inspect the array's class object. This seems somewhat simpler, more efficient, and easier to maintain going forward.\r\n* Added the notion that a given array component type can correspond to more than one\r\n  tensor datatype. I think that we already would like this to be able to support both uint8 and string\r\n  using byte arrays, and the need will become more acute as more TensorFlow types are added.\r\n* Resurrected the test case for creating and extracting uint8 tensors (requires previous change)\r\n","created_at":"2017-09-09T03:48:56Z","updated_at":"2017-09-10T16:44:16Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f5c7a18b21dbfcd13a5dc64c8ac026f357a19407","assignee":{"login":"asimshankar","id":16018,"avatar_url":"https://avatars2.githubusercontent.com/u/16018?v=4","gravatar_id":"","url":"https://api.github.com/users/asimshankar","html_url":"https://github.com/asimshankar","followers_url":"https://api.github.com/users/asimshankar/followers","following_url":"https://api.github.com/users/asimshankar/following{/other_user}","gists_url":"https://api.github.com/users/asimshankar/gists{/gist_id}","starred_url":"https://api.github.com/users/asimshankar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/asimshankar/subscriptions","organizations_url":"https://api.github.com/users/asimshankar/orgs","repos_url":"https://api.github.com/users/asimshankar/repos","events_url":"https://api.github.com/users/asimshankar/events{/privacy}","received_events_url":"https://api.github.com/users/asimshankar/received_events","type":"User","site_admin":false},"assignees":[{"login":"asimshankar","id":16018,"avatar_url":"https://avatars2.githubusercontent.com/u/16018?v=4","gravatar_id":"","url":"https://api.github.com/users/asimshankar","html_url":"https://github.com/asimshankar","followers_url":"https://api.github.com/users/asimshankar/followers","following_url":"https://api.github.com/users/asimshankar/following{/other_user}","gists_url":"https://api.github.com/users/asimshankar/gists{/gist_id}","starred_url":"https://api.github.com/users/asimshankar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/asimshankar/subscriptions","organizations_url":"https://api.github.com/users/asimshankar/orgs","repos_url":"https://api.github.com/users/asimshankar/repos","events_url":"https://api.github.com/users/asimshankar/events{/privacy}","received_events_url":"https://api.github.com/users/asimshankar/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"asimshankar","id":16018,"avatar_url":"https://avatars2.githubusercontent.com/u/16018?v=4","gravatar_id":"","url":"https://api.github.com/users/asimshankar","html_url":"https://github.com/asimshankar","followers_url":"https://api.github.com/users/asimshankar/followers","following_url":"https://api.github.com/users/asimshankar/following{/other_user}","gists_url":"https://api.github.com/users/asimshankar/gists{/gist_id}","starred_url":"https://api.github.com/users/asimshankar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/asimshankar/subscriptions","organizations_url":"https://api.github.com/users/asimshankar/orgs","repos_url":"https://api.github.com/users/asimshankar/repos","events_url":"https://api.github.com/users/asimshankar/events{/privacy}","received_events_url":"https://api.github.com/users/asimshankar/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/tensorflow/tensorflow/pulls/12928/commits","review_comments_url":"https://api.github.com/repos/tensorflow/tensorflow/pulls/12928/comments","review_comment_url":"https://api.github.com/repos/tensorflow/tensorflow/pulls/comments{/number}","comments_url":"https://api.github.com/repos/tensorflow/tensorflow/issues/12928/comments","statuses_url":"https://api.github.com/repos/tensorflow/tensorflow/statuses/37c798b1bed83e1df2cbb2766cfe47040977cff7","head":{"label":"andrewcmyers:java-uint8-fix","ref":"java-uint8-fix","sha":"37c798b1bed83e1df2cbb2766cfe47040977cff7","user":{"login":"andrewcmyers","id":4623813,"avatar_url":"https://avatars1.githubusercontent.com/u/4623813?v=4","gravatar_id":"","url":"https://api.github.com/users/andrewcmyers","html_url":"https://github.com/andrewcmyers","followers_url":"https://api.github.com/users/andrewcmyers/followers","following_url":"https://api.github.com/users/andrewcmyers/following{/other_user}","gists_url":"https://api.github.com/users/andrewcmyers/gists{/gist_id}","starred_url":"https://api.github.com/users/andrewcmyers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrewcmyers/subscriptions","organizations_url":"https://api.github.com/users/andrewcmyers/orgs","repos_url":"https://api.github.com/users/andrewcmyers/repos","events_url":"https://api.github.com/users/andrewcmyers/events{/privacy}","received_events_url":"https://api.github.com/users/andrewcmyers/received_events","type":"User","site_admin":false},"repo":{"id":94271022,"name":"tensorflow","full_name":"andrewcmyers/tensorflow","owner":{"login":"andrewcmyers","id":4623813,"avatar_url":"https://avatars1.githubusercontent.com/u/4623813?v=4","gravatar_id":"","url":"https://api.github.com/users/andrewcmyers","html_url":"https://github.com/andrewcmyers","followers_url":"https://api.github.com/users/andrewcmyers/followers","following_url":"https://api.github.com/users/andrewcmyers/following{/other_user}","gists_url":"https://api.github.com/users/andrewcmyers/gists{/gist_id}","starred_url":"https://api.github.com/users/andrewcmyers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrewcmyers/subscriptions","organizations_url":"https://api.github.com/users/andrewcmyers/orgs","repos_url":"https://api.github.com/users/andrewcmyers/repos","events_url":"https://api.github.com/users/andrewcmyers/events{/privacy}","received_events_url":"https://api.github.com/users/andrewcmyers/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/andrewcmyers/tensorflow","description":"Computation using data flow graphs for scalable machine learning","fork":true,"url":"https://api.github.com/repos/andrewcmyers/tensorflow","forks_url":"https://api.github.com/repos/andrewcmyers/tensorflow/forks","keys_url":"https://api.github.com/repos/andrewcmyers/tensorflow/keys{/key_id}","collaborators_url":"https://api.github.com/repos/andrewcmyers/tensorflow/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/andrewcmyers/tensorflow/teams","hooks_url":"https://api.github.com/repos/andrewcmyers/tensorflow/hooks","issue_events_url":"https://api.github.com/repos/andrewcmyers/tensorflow/issues/events{/number}","events_url":"https://api.github.com/repos/andrewcmyers/tensorflow/events","assignees_url":"https://api.github.com/repos/andrewcmyers/tensorflow/assignees{/user}","branches_url":"https://api.github.com/repos/andrewcmyers/tensorflow/branches{/branch}","tags_url":"https://api.github.com/repos/andrewcmyers/tensorflow/tags","blobs_url":"https://api.github.com/repos/andrewcmyers/tensorflow/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/andrewcmyers/tensorflow/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/andrewcmyers/tensorflow/git/refs{/sha}","trees_url":"https://api.github.com/repos/andrewcmyers/tensorflow/git/trees{/sha}","statuses_url":"https://api.github.com/repos/andrewcmyers/tensorflow/statuses/{sha}","languages_url":"https://api.github.com/repos/andrewcmyers/tensorflow/languages","stargazers_url":"https://api.github.com/repos/andrewcmyers/tensorflow/stargazers","contributors_url":"https://api.github.com/repos/andrewcmyers/tensorflow/contributors","subscribers_url":"https://api.github.com/repos/andrewcmyers/tensorflow/subscribers","subscription_url":"https://api.github.com/repos/andrewcmyers/tensorflow/subscription","commits_url":"https://api.github.com/repos/andrewcmyers/tensorflow/commits{/sha}","git_commits_url":"https://api.github.com/repos/andrewcmyers/tensorflow/git/commits{/sha}","comments_url":"https://api.github.com/repos/andrewcmyers/tensorflow/comments{/number}","issue_comment_url":"https://api.github.com/repos/andrewcmyers/tensorflow/issues/comments{/number}","contents_url":"https://api.github.com/repos/andrewcmyers/tensorflow/contents/{+path}","compare_url":"https://api.github.com/repos/andrewcmyers/tensorflow/compare/{base}...{head}","merges_url":"https://api.github.com/repos/andrewcmyers/tensorflow/merges","archive_url":"https://api.github.com/repos/andrewcmyers/tensorflow/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/andrewcmyers/tensorflow/downloads","issues_url":"https://api.github.com/repos/andrewcmyers/tensorflow/issues{/number}","pulls_url":"https://api.github.com/repos/andrewcmyers/tensorflow/pulls{/number}","milestones_url":"https://api.github.com/repos/andrewcmyers/tensorflow/milestones{/number}","notifications_url":"https://api.github.com/repos/andrewcmyers/tensorflow/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/andrewcmyers/tensorflow/labels{/name}","releases_url":"https://api.github.com/repos/andrewcmyers/tensorflow/releases{/id}","deployments_url":"https://api.github.com/repos/andrewcmyers/tensorflow/deployments","created_at":"2017-06-14T00:34:22Z","updated_at":"2017-07-10T20:11:44Z","pushed_at":"2017-09-09T03:41:29Z","git_url":"git://github.com/andrewcmyers/tensorflow.git","ssh_url":"git@github.com:andrewcmyers/tensorflow.git","clone_url":"https://github.com/andrewcmyers/tensorflow.git","svn_url":"https://github.com/andrewcmyers/tensorflow","homepage":"http://tensorflow.org","size":123628,"stargazers_count":1,"watchers_count":1,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"tensorflow:master","ref":"master","sha":"32ffc5a81eee8c39bbe71536212a773b1ffd4eb2","user":{"login":"tensorflow","id":15658638,"avatar_url":"https://avatars1.githubusercontent.com/u/15658638?v=4","gravatar_id":"","url":"https://api.github.com/users/tensorflow","html_url":"https://github.com/tensorflow","followers_url":"https://api.github.com/users/tensorflow/followers","following_url":"https://api.github.com/users/tensorflow/following{/other_user}","gists_url":"https://api.github.com/users/tensorflow/gists{/gist_id}","starred_url":"https://api.github.com/users/tensorflow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tensorflow/subscriptions","organizations_url":"https://api.github.com/users/tensorflow/orgs","repos_url":"https://api.github.com/users/tensorflow/repos","events_url":"https://api.github.com/users/tensorflow/events{/privacy}","received_events_url":"https://api.github.com/users/tensorflow/received_events","type":"Organization","site_admin":false},"repo":{"id":45717250,"name":"tensorflow","full_name":"tensorflow/tensorflow","owner":{"login":"tensorflow","id":15658638,"avatar_url":"https://avatars1.githubusercontent.com/u/15658638?v=4","gravatar_id":"","url":"https://api.github.com/users/tensorflow","html_url":"https://github.com/tensorflow","followers_url":"https://api.github.com/users/tensorflow/followers","following_url":"https://api.github.com/users/tensorflow/following{/other_user}","gists_url":"https://api.github.com/users/tensorflow/gists{/gist_id}","starred_url":"https://api.github.com/users/tensorflow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tensorflow/subscriptions","organizations_url":"https://api.github.com/users/tensorflow/orgs","repos_url":"https://api.github.com/users/tensorflow/repos","events_url":"https://api.github.com/users/tensorflow/events{/privacy}","received_events_url":"https://api.github.com/users/tensorflow/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/tensorflow/tensorflow","description":"Computation using data flow graphs for scalable machine learning","fork":false,"url":"https://api.github.com/repos/tensorflow/tensorflow","forks_url":"https://api.github.com/repos/tensorflow/tensorflow/forks","keys_url":"https://api.github.com/repos/tensorflow/tensorflow/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tensorflow/tensorflow/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tensorflow/tensorflow/teams","hooks_url":"https://api.github.com/repos/tensorflow/tensorflow/hooks","issue_events_url":"https://api.github.com/repos/tensorflow/tensorflow/issues/events{/number}","events_url":"https://api.github.com/repos/tensorflow/tensorflow/events","assignees_url":"https://api.github.com/repos/tensorflow/tensorflow/assignees{/user}","branches_url":"https://api.github.com/repos/tensorflow/tensorflow/branches{/branch}","tags_url":"https://api.github.com/repos/tensorflow/tensorflow/tags","blobs_url":"https://api.github.com/repos/tensorflow/tensorflow/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tensorflow/tensorflow/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tensorflow/tensorflow/git/refs{/sha}","trees_url":"https://api.github.com/repos/tensorflow/tensorflow/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tensorflow/tensorflow/statuses/{sha}","languages_url":"https://api.github.com/repos/tensorflow/tensorflow/languages","stargazers_url":"https://api.github.com/repos/tensorflow/tensorflow/stargazers","contributors_url":"https://api.github.com/repos/tensorflow/tensorflow/contributors","subscribers_url":"https://api.github.com/repos/tensorflow/tensorflow/subscribers","subscription_url":"https://api.github.com/repos/tensorflow/tensorflow/subscription","commits_url":"https://api.github.com/repos/tensorflow/tensorflow/commits{/sha}","git_commits_url":"https://api.github.com/repos/tensorflow/tensorflow/git/commits{/sha}","comments_url":"https://api.github.com/repos/tensorflow/tensorflow/comments{/number}","issue_comment_url":"https://api.github.com/repos/tensorflow/tensorflow/issues/comments{/number}","contents_url":"https://api.github.com/repos/tensorflow/tensorflow/contents/{+path}","compare_url":"https://api.github.com/repos/tensorflow/tensorflow/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tensorflow/tensorflow/merges","archive_url":"https://api.github.com/repos/tensorflow/tensorflow/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tensorflow/tensorflow/downloads","issues_url":"https://api.github.com/repos/tensorflow/tensorflow/issues{/number}","pulls_url":"https://api.github.com/repos/tensorflow/tensorflow/pulls{/number}","milestones_url":"https://api.github.com/repos/tensorflow/tensorflow/milestones{/number}","notifications_url":"https://api.github.com/repos/tensorflow/tensorflow/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tensorflow/tensorflow/labels{/name}","releases_url":"https://api.github.com/repos/tensorflow/tensorflow/releases{/id}","deployments_url":"https://api.github.com/repos/tensorflow/tensorflow/deployments","created_at":"2015-11-07T01:19:20Z","updated_at":"2017-09-10T15:42:45Z","pushed_at":"2017-09-10T09:45:26Z","git_url":"git://github.com/tensorflow/tensorflow.git","ssh_url":"git@github.com:tensorflow/tensorflow.git","clone_url":"https://github.com/tensorflow/tensorflow.git","svn_url":"https://github.com/tensorflow/tensorflow","homepage":"http://tensorflow.org","size":124128,"stargazers_count":69383,"watchers_count":69383,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":34150,"mirror_url":null,"open_issues_count":1131,"forks":34150,"open_issues":1131,"watchers":69383,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/tensorflow/tensorflow/pulls/12928"},"html":{"href":"https://github.com/tensorflow/tensorflow/pull/12928"},"issue":{"href":"https://api.github.com/repos/tensorflow/tensorflow/issues/12928"},"comments":{"href":"https://api.github.com/repos/tensorflow/tensorflow/issues/12928/comments"},"review_comments":{"href":"https://api.github.com/repos/tensorflow/tensorflow/pulls/12928/comments"},"review_comment":{"href":"https://api.github.com/repos/tensorflow/tensorflow/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/tensorflow/tensorflow/pulls/12928/commits"},"statuses":{"href":"https://api.github.com/repos/tensorflow/tensorflow/statuses/37c798b1bed83e1df2cbb2766cfe47040977cff7"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"andrewcmyers"}}