{"action":"created","comment":{"url":"https://api.github.com/repos/h2oai/h2o4gpu/pulls/comments/144673252","pull_request_review_id":69368103,"id":144673252,"diff_hunk":"@@ -172,6 +178,456 @@ void random_centroids(int verbose, int seed, const char ord,\n \"----------------------------------------------------------------------------\\n\"\n \n namespace h2o4gpukmeans {\n+\n+template<typename T>\n+int kmeans_fit(int verbose, int seed, int gpu_idtry, int n_gputry,\n+               size_t rows, size_t cols, const char ord,\n+               int k, int max_iterations, int init_from_data,\n+               int init_data, T threshold,\n+               const T *srcdata, void **pred_centroids, void **pred_labels);\n+\n+template<typename T>\n+int pick_point_idx_weighted(\n+    thrust::host_device<T> data,\n+    thrust::host_device<T> weights) {\n+  T weight_sum = thrust::reduce(\n+      weights.begin(),\n+      weights.end()\n+  );\n+\n+  T data_sum = 1.0;\n+  if (NULL != data) {\n+    data_sum = thrust::reduce(\n+        data.begin(),\n+        data.end()\n+    );\n+  }\n+\n+  // TODO should this be calculated for each record separately instead?\n+  T r = ((T) rand() / (T) RAND_MAX) * weight_sum * data_sum;\n+  int i = -1;\n+  T cur_weight = 0.0;\n+  T best_prob = 0.0;\n+  int best_prob_idx = 0;\n+  while (i < data.size() && cur_weight < r) {\n+    T data_val = NULL == data ? 1.0 : data[i];\n+\n+    T curr_prob = data_val * weights[i];\n+    if (curr_prob >= best_prob) {\n+      best_prob = curr_prob;\n+      best_prob_idx = i;\n+    }\n+\n+    cur_weight += (data_val * weights[i]);\n+    i += 1;\n+  }\n+  return i > -1 ? i : best_prob_idx;\n+}\n+\n+/**\n+ * Copies cols records, starting at position idx*cols from data to centroids. Removes them afterwards from data.\n+ * Removes record from weights at position idx.\n+ * @tparam T\n+ * @param idx\n+ * @param cols\n+ * @param data\n+ * @param weights\n+ * @param centroids\n+ */\n+template<typename T>\n+void add_centroid(int idx, int cols,\n+                  thrust::host_device<T> &data,\n+                  thrust::host_device<T> &weights,\n+                  thrust::host_device<T> &centroids) {\n+  for (int i = 0; i < cols; i++) {\n+    centroids.push_back(data[idx * cols + i]);\n+  }\n+  for (int i = 0; i < cols; i++) {\n+    data.remove(idx * cols + i);\n+  }\n+  weights.remove(idx);\n+}\n+\n+/**\n+ * K-Means++ algorithm\n+ * @tparam T\n+ * @param seed\n+ * @param data\n+ * @param weights\n+ * @param k\n+ * @param cols\n+ * @param centroids\n+ */\n+template<typename T>\n+void kmeans_plus_plus(\n+    int seed,\n+    thrust::host_device<T> data,\n+    thrust::host_device<T> weights,\n+    int k,\n+    int cols,\n+    thrust::host_device<T> &centroids) {\n+\n+  int centroid_idx = pick_point_idx_weighted(\n+      pairwise_cost,\n+      weights\n+  );\n+\n+  add_centroid(centroid_idx, cols, data, weights, centroids);\n+\n+  std::vector<T> best_pairwise_distances(data.size());\n+  std::vector<T> std_data(data.data());\n+  std::vector<T> std_centroids(centroids.data());\n+\n+  compute_distances(std_data,\n+                    std_centroids,\n+                    best_pairwise_distances,\n+                    data.size(), cols, 1);\n+\n+  for (int iter = 0; iter < k; iter++) {\n+    centroid_idx = pick_point_idx_weighted(\n+        best_pairwise_distances,\n+        weights\n+    );\n+\n+    add_centroid(centroid_idx, cols, data, weights, centroids);\n+\n+    best_pairwise_distances.remove(centroid_idx);\n+\n+    // TODO necessary?\n+    std_data = std::vector<T>(data.data());\n+    std_centroids = std::vector<T>(centroids.data() + cols * (iter + 1));\n+\n+    std::vector<T> curr_pairwise_distances(data.size());\n+\n+    compute_distances(std_data,\n+                      std_centroids,\n+                      curr_pairwise_distances,\n+                      std_data.size(), cols, 1);\n+\n+    for (int i = 0; i < curr_pairwise_distances.size(); i++) {\n+      best_pairwise_distances[i] = std::min(curr_pairwise_distances[i], best_pairwise_distances[i]);\n+    }\n+  }\n+}\n+\n+/**\n+ * Calculates closest centroid for each record and counts how many points are assigned to each centroid.\n+ * @tparam T\n+ * @param verbose\n+ * @param num_gpu\n+ * @param rows_per_gpu\n+ * @param cols\n+ * @param data\n+ * @param data_dots\n+ * @param centroids\n+ * @param weights\n+ * @param pairwise_distances\n+ * @param labels\n+ */\n+template<typename T>\n+void count_pts_per_centroid(\n+    int verbose,\n+    int num_gpu, int rows_per_gpu, int cols,","path":"src/gpu/kmeans/kmeans_h2o4gpu.cu","position":180,"original_position":180,"commit_id":"5f6c38150c7fadc37f2972bba5d6be54b84e5194","original_commit_id":"5f6c38150c7fadc37f2972bba5d6be54b84e5194","user":{"login":"RAMitchell","id":7307640,"avatar_url":"https://avatars2.githubusercontent.com/u/7307640?v=4","gravatar_id":"","url":"https://api.github.com/users/RAMitchell","html_url":"https://github.com/RAMitchell","followers_url":"https://api.github.com/users/RAMitchell/followers","following_url":"https://api.github.com/users/RAMitchell/following{/other_user}","gists_url":"https://api.github.com/users/RAMitchell/gists{/gist_id}","starred_url":"https://api.github.com/users/RAMitchell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RAMitchell/subscriptions","organizations_url":"https://api.github.com/users/RAMitchell/orgs","repos_url":"https://api.github.com/users/RAMitchell/repos","events_url":"https://api.github.com/users/RAMitchell/events{/privacy}","received_events_url":"https://api.github.com/users/RAMitchell/received_events","type":"User","site_admin":false},"body":"Prefer passing a reference to a vector of vectors to using pointer pointers here.","created_at":"2017-10-13T23:04:03Z","updated_at":"2017-10-13T23:10:46Z","html_url":"https://github.com/h2oai/h2o4gpu/pull/237#discussion_r144673252","pull_request_url":"https://api.github.com/repos/h2oai/h2o4gpu/pulls/237","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/h2oai/h2o4gpu/pulls/comments/144673252"},"html":{"href":"https://github.com/h2oai/h2o4gpu/pull/237#discussion_r144673252"},"pull_request":{"href":"https://api.github.com/repos/h2oai/h2o4gpu/pulls/237"}}},"pull_request":{"url":"https://api.github.com/repos/h2oai/h2o4gpu/pulls/237","id":146563794,"html_url":"https://github.com/h2oai/h2o4gpu/pull/237","diff_url":"https://github.com/h2oai/h2o4gpu/pull/237.diff","patch_url":"https://github.com/h2oai/h2o4gpu/pull/237.patch","issue_url":"https://api.github.com/repos/h2oai/h2o4gpu/issues/237","number":237,"state":"open","locked":false,"title":"[WIP] KMeans|| implementation","user":{"login":"mdymczyk","id":1208615,"avatar_url":"https://avatars0.githubusercontent.com/u/1208615?v=4","gravatar_id":"","url":"https://api.github.com/users/mdymczyk","html_url":"https://github.com/mdymczyk","followers_url":"https://api.github.com/users/mdymczyk/followers","following_url":"https://api.github.com/users/mdymczyk/following{/other_user}","gists_url":"https://api.github.com/users/mdymczyk/gists{/gist_id}","starred_url":"https://api.github.com/users/mdymczyk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mdymczyk/subscriptions","organizations_url":"https://api.github.com/users/mdymczyk/orgs","repos_url":"https://api.github.com/users/mdymczyk/repos","events_url":"https://api.github.com/users/mdymczyk/events{/privacy}","received_events_url":"https://api.github.com/users/mdymczyk/received_events","type":"User","site_admin":false},"body":"Fixes #229\r\n\r\nRandomized centroid initialization for K-Means can often lead to very poor performance. For example running it with `k=4, n=100 000, d=7`:\r\n\r\n```\r\nfrom h2o4gpu import KMeans\r\nfrom sklearn.metrics.cluster import v_measure_score\r\nfrom sklearn.datasets.samples_generator import make_blobs\r\n\r\ncenters = 4\r\nX, true_labels = make_blobs(n_samples=100000, centers=centers, cluster_std=1., random_state=42, n_features=7)\r\nkmeans_h2o = KMeans(n_gpus=1, n_clusters=centers, random_state=42)\r\nkmeans_h2o.fit(X)\r\nv_measure_score(kmeans_h2o.labels_, true_labels)\r\n```\r\n\r\nWill yield only a 50% accuracy.\r\n\r\nThe idea behind improved initialization methods such as KMeans++ is to choose initial centroids which are as far apart from each other as possible using probabilities.\r\n\r\nKMeans|| build upon KMeans++ ideas but instead of choosing only 1 centroid in each iteration (which can be slow for larger ks) it chooses several potential centroids at each step.\r\n\r\nThe final step might require running a weighted KMeans++ should we find more than k potential centroids but that KMeans++ should run on a very small set (only on potential centroids) so should be fast.","created_at":"2017-10-13T22:05:23Z","updated_at":"2017-10-13T23:10:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a97a8dd4c1335fc72b884b548c924d75fd212518","assignee":{"login":"mdymczyk","id":1208615,"avatar_url":"https://avatars0.githubusercontent.com/u/1208615?v=4","gravatar_id":"","url":"https://api.github.com/users/mdymczyk","html_url":"https://github.com/mdymczyk","followers_url":"https://api.github.com/users/mdymczyk/followers","following_url":"https://api.github.com/users/mdymczyk/following{/other_user}","gists_url":"https://api.github.com/users/mdymczyk/gists{/gist_id}","starred_url":"https://api.github.com/users/mdymczyk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mdymczyk/subscriptions","organizations_url":"https://api.github.com/users/mdymczyk/orgs","repos_url":"https://api.github.com/users/mdymczyk/repos","events_url":"https://api.github.com/users/mdymczyk/events{/privacy}","received_events_url":"https://api.github.com/users/mdymczyk/received_events","type":"User","site_admin":false},"assignees":[{"login":"mdymczyk","id":1208615,"avatar_url":"https://avatars0.githubusercontent.com/u/1208615?v=4","gravatar_id":"","url":"https://api.github.com/users/mdymczyk","html_url":"https://github.com/mdymczyk","followers_url":"https://api.github.com/users/mdymczyk/followers","following_url":"https://api.github.com/users/mdymczyk/following{/other_user}","gists_url":"https://api.github.com/users/mdymczyk/gists{/gist_id}","starred_url":"https://api.github.com/users/mdymczyk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mdymczyk/subscriptions","organizations_url":"https://api.github.com/users/mdymczyk/orgs","repos_url":"https://api.github.com/users/mdymczyk/repos","events_url":"https://api.github.com/users/mdymczyk/events{/privacy}","received_events_url":"https://api.github.com/users/mdymczyk/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"navdeep-G","id":10055668,"avatar_url":"https://avatars2.githubusercontent.com/u/10055668?v=4","gravatar_id":"","url":"https://api.github.com/users/navdeep-G","html_url":"https://github.com/navdeep-G","followers_url":"https://api.github.com/users/navdeep-G/followers","following_url":"https://api.github.com/users/navdeep-G/following{/other_user}","gists_url":"https://api.github.com/users/navdeep-G/gists{/gist_id}","starred_url":"https://api.github.com/users/navdeep-G/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/navdeep-G/subscriptions","organizations_url":"https://api.github.com/users/navdeep-G/orgs","repos_url":"https://api.github.com/users/navdeep-G/repos","events_url":"https://api.github.com/users/navdeep-G/events{/privacy}","received_events_url":"https://api.github.com/users/navdeep-G/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/h2oai/h2o4gpu/pulls/237/commits","review_comments_url":"https://api.github.com/repos/h2oai/h2o4gpu/pulls/237/comments","review_comment_url":"https://api.github.com/repos/h2oai/h2o4gpu/pulls/comments{/number}","comments_url":"https://api.github.com/repos/h2oai/h2o4gpu/issues/237/comments","statuses_url":"https://api.github.com/repos/h2oai/h2o4gpu/statuses/5f6c38150c7fadc37f2972bba5d6be54b84e5194","head":{"label":"h2oai:enhancement/kmeans_parallel","ref":"enhancement/kmeans_parallel","sha":"5f6c38150c7fadc37f2972bba5d6be54b84e5194","user":{"login":"h2oai","id":1402695,"avatar_url":"https://avatars2.githubusercontent.com/u/1402695?v=4","gravatar_id":"","url":"https://api.github.com/users/h2oai","html_url":"https://github.com/h2oai","followers_url":"https://api.github.com/users/h2oai/followers","following_url":"https://api.github.com/users/h2oai/following{/other_user}","gists_url":"https://api.github.com/users/h2oai/gists{/gist_id}","starred_url":"https://api.github.com/users/h2oai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/h2oai/subscriptions","organizations_url":"https://api.github.com/users/h2oai/orgs","repos_url":"https://api.github.com/users/h2oai/repos","events_url":"https://api.github.com/users/h2oai/events{/privacy}","received_events_url":"https://api.github.com/users/h2oai/received_events","type":"Organization","site_admin":false},"repo":{"id":85352239,"name":"h2o4gpu","full_name":"h2oai/h2o4gpu","owner":{"login":"h2oai","id":1402695,"avatar_url":"https://avatars2.githubusercontent.com/u/1402695?v=4","gravatar_id":"","url":"https://api.github.com/users/h2oai","html_url":"https://github.com/h2oai","followers_url":"https://api.github.com/users/h2oai/followers","following_url":"https://api.github.com/users/h2oai/following{/other_user}","gists_url":"https://api.github.com/users/h2oai/gists{/gist_id}","starred_url":"https://api.github.com/users/h2oai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/h2oai/subscriptions","organizations_url":"https://api.github.com/users/h2oai/orgs","repos_url":"https://api.github.com/users/h2oai/repos","events_url":"https://api.github.com/users/h2oai/events{/privacy}","received_events_url":"https://api.github.com/users/h2oai/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/h2oai/h2o4gpu","description":"H2Oai GPU Edition","fork":false,"url":"https://api.github.com/repos/h2oai/h2o4gpu","forks_url":"https://api.github.com/repos/h2oai/h2o4gpu/forks","keys_url":"https://api.github.com/repos/h2oai/h2o4gpu/keys{/key_id}","collaborators_url":"https://api.github.com/repos/h2oai/h2o4gpu/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/h2oai/h2o4gpu/teams","hooks_url":"https://api.github.com/repos/h2oai/h2o4gpu/hooks","issue_events_url":"https://api.github.com/repos/h2oai/h2o4gpu/issues/events{/number}","events_url":"https://api.github.com/repos/h2oai/h2o4gpu/events","assignees_url":"https://api.github.com/repos/h2oai/h2o4gpu/assignees{/user}","branches_url":"https://api.github.com/repos/h2oai/h2o4gpu/branches{/branch}","tags_url":"https://api.github.com/repos/h2oai/h2o4gpu/tags","blobs_url":"https://api.github.com/repos/h2oai/h2o4gpu/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/h2oai/h2o4gpu/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/h2oai/h2o4gpu/git/refs{/sha}","trees_url":"https://api.github.com/repos/h2oai/h2o4gpu/git/trees{/sha}","statuses_url":"https://api.github.com/repos/h2oai/h2o4gpu/statuses/{sha}","languages_url":"https://api.github.com/repos/h2oai/h2o4gpu/languages","stargazers_url":"https://api.github.com/repos/h2oai/h2o4gpu/stargazers","contributors_url":"https://api.github.com/repos/h2oai/h2o4gpu/contributors","subscribers_url":"https://api.github.com/repos/h2oai/h2o4gpu/subscribers","subscription_url":"https://api.github.com/repos/h2oai/h2o4gpu/subscription","commits_url":"https://api.github.com/repos/h2oai/h2o4gpu/commits{/sha}","git_commits_url":"https://api.github.com/repos/h2oai/h2o4gpu/git/commits{/sha}","comments_url":"https://api.github.com/repos/h2oai/h2o4gpu/comments{/number}","issue_comment_url":"https://api.github.com/repos/h2oai/h2o4gpu/issues/comments{/number}","contents_url":"https://api.github.com/repos/h2oai/h2o4gpu/contents/{+path}","compare_url":"https://api.github.com/repos/h2oai/h2o4gpu/compare/{base}...{head}","merges_url":"https://api.github.com/repos/h2oai/h2o4gpu/merges","archive_url":"https://api.github.com/repos/h2oai/h2o4gpu/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/h2oai/h2o4gpu/downloads","issues_url":"https://api.github.com/repos/h2oai/h2o4gpu/issues{/number}","pulls_url":"https://api.github.com/repos/h2oai/h2o4gpu/pulls{/number}","milestones_url":"https://api.github.com/repos/h2oai/h2o4gpu/milestones{/number}","notifications_url":"https://api.github.com/repos/h2oai/h2o4gpu/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/h2oai/h2o4gpu/labels{/name}","releases_url":"https://api.github.com/repos/h2oai/h2o4gpu/releases{/id}","deployments_url":"https://api.github.com/repos/h2oai/h2o4gpu/deployments","created_at":"2017-03-17T20:31:42Z","updated_at":"2017-10-10T09:19:20Z","pushed_at":"2017-10-13T22:06:54Z","git_url":"git://github.com/h2oai/h2o4gpu.git","ssh_url":"git@github.com:h2oai/h2o4gpu.git","clone_url":"https://github.com/h2oai/h2o4gpu.git","svn_url":"https://github.com/h2oai/h2o4gpu","homepage":"","size":18504,"stargazers_count":41,"watchers_count":41,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":10,"mirror_url":null,"open_issues_count":94,"forks":10,"open_issues":94,"watchers":41,"default_branch":"master"}},"base":{"label":"h2oai:enhancement/small-k-perf","ref":"enhancement/small-k-perf","sha":"ea1b3c4743e1ec258dc0ef74294fd3e5134ff2f1","user":{"login":"h2oai","id":1402695,"avatar_url":"https://avatars2.githubusercontent.com/u/1402695?v=4","gravatar_id":"","url":"https://api.github.com/users/h2oai","html_url":"https://github.com/h2oai","followers_url":"https://api.github.com/users/h2oai/followers","following_url":"https://api.github.com/users/h2oai/following{/other_user}","gists_url":"https://api.github.com/users/h2oai/gists{/gist_id}","starred_url":"https://api.github.com/users/h2oai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/h2oai/subscriptions","organizations_url":"https://api.github.com/users/h2oai/orgs","repos_url":"https://api.github.com/users/h2oai/repos","events_url":"https://api.github.com/users/h2oai/events{/privacy}","received_events_url":"https://api.github.com/users/h2oai/received_events","type":"Organization","site_admin":false},"repo":{"id":85352239,"name":"h2o4gpu","full_name":"h2oai/h2o4gpu","owner":{"login":"h2oai","id":1402695,"avatar_url":"https://avatars2.githubusercontent.com/u/1402695?v=4","gravatar_id":"","url":"https://api.github.com/users/h2oai","html_url":"https://github.com/h2oai","followers_url":"https://api.github.com/users/h2oai/followers","following_url":"https://api.github.com/users/h2oai/following{/other_user}","gists_url":"https://api.github.com/users/h2oai/gists{/gist_id}","starred_url":"https://api.github.com/users/h2oai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/h2oai/subscriptions","organizations_url":"https://api.github.com/users/h2oai/orgs","repos_url":"https://api.github.com/users/h2oai/repos","events_url":"https://api.github.com/users/h2oai/events{/privacy}","received_events_url":"https://api.github.com/users/h2oai/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/h2oai/h2o4gpu","description":"H2Oai GPU Edition","fork":false,"url":"https://api.github.com/repos/h2oai/h2o4gpu","forks_url":"https://api.github.com/repos/h2oai/h2o4gpu/forks","keys_url":"https://api.github.com/repos/h2oai/h2o4gpu/keys{/key_id}","collaborators_url":"https://api.github.com/repos/h2oai/h2o4gpu/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/h2oai/h2o4gpu/teams","hooks_url":"https://api.github.com/repos/h2oai/h2o4gpu/hooks","issue_events_url":"https://api.github.com/repos/h2oai/h2o4gpu/issues/events{/number}","events_url":"https://api.github.com/repos/h2oai/h2o4gpu/events","assignees_url":"https://api.github.com/repos/h2oai/h2o4gpu/assignees{/user}","branches_url":"https://api.github.com/repos/h2oai/h2o4gpu/branches{/branch}","tags_url":"https://api.github.com/repos/h2oai/h2o4gpu/tags","blobs_url":"https://api.github.com/repos/h2oai/h2o4gpu/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/h2oai/h2o4gpu/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/h2oai/h2o4gpu/git/refs{/sha}","trees_url":"https://api.github.com/repos/h2oai/h2o4gpu/git/trees{/sha}","statuses_url":"https://api.github.com/repos/h2oai/h2o4gpu/statuses/{sha}","languages_url":"https://api.github.com/repos/h2oai/h2o4gpu/languages","stargazers_url":"https://api.github.com/repos/h2oai/h2o4gpu/stargazers","contributors_url":"https://api.github.com/repos/h2oai/h2o4gpu/contributors","subscribers_url":"https://api.github.com/repos/h2oai/h2o4gpu/subscribers","subscription_url":"https://api.github.com/repos/h2oai/h2o4gpu/subscription","commits_url":"https://api.github.com/repos/h2oai/h2o4gpu/commits{/sha}","git_commits_url":"https://api.github.com/repos/h2oai/h2o4gpu/git/commits{/sha}","comments_url":"https://api.github.com/repos/h2oai/h2o4gpu/comments{/number}","issue_comment_url":"https://api.github.com/repos/h2oai/h2o4gpu/issues/comments{/number}","contents_url":"https://api.github.com/repos/h2oai/h2o4gpu/contents/{+path}","compare_url":"https://api.github.com/repos/h2oai/h2o4gpu/compare/{base}...{head}","merges_url":"https://api.github.com/repos/h2oai/h2o4gpu/merges","archive_url":"https://api.github.com/repos/h2oai/h2o4gpu/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/h2oai/h2o4gpu/downloads","issues_url":"https://api.github.com/repos/h2oai/h2o4gpu/issues{/number}","pulls_url":"https://api.github.com/repos/h2oai/h2o4gpu/pulls{/number}","milestones_url":"https://api.github.com/repos/h2oai/h2o4gpu/milestones{/number}","notifications_url":"https://api.github.com/repos/h2oai/h2o4gpu/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/h2oai/h2o4gpu/labels{/name}","releases_url":"https://api.github.com/repos/h2oai/h2o4gpu/releases{/id}","deployments_url":"https://api.github.com/repos/h2oai/h2o4gpu/deployments","created_at":"2017-03-17T20:31:42Z","updated_at":"2017-10-10T09:19:20Z","pushed_at":"2017-10-13T22:06:54Z","git_url":"git://github.com/h2oai/h2o4gpu.git","ssh_url":"git@github.com:h2oai/h2o4gpu.git","clone_url":"https://github.com/h2oai/h2o4gpu.git","svn_url":"https://github.com/h2oai/h2o4gpu","homepage":"","size":18504,"stargazers_count":41,"watchers_count":41,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":10,"mirror_url":null,"open_issues_count":94,"forks":10,"open_issues":94,"watchers":41,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/h2oai/h2o4gpu/pulls/237"},"html":{"href":"https://github.com/h2oai/h2o4gpu/pull/237"},"issue":{"href":"https://api.github.com/repos/h2oai/h2o4gpu/issues/237"},"comments":{"href":"https://api.github.com/repos/h2oai/h2o4gpu/issues/237/comments"},"review_comments":{"href":"https://api.github.com/repos/h2oai/h2o4gpu/pulls/237/comments"},"review_comment":{"href":"https://api.github.com/repos/h2oai/h2o4gpu/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/h2oai/h2o4gpu/pulls/237/commits"},"statuses":{"href":"https://api.github.com/repos/h2oai/h2o4gpu/statuses/5f6c38150c7fadc37f2972bba5d6be54b84e5194"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"RAMitchell"}}