{"action":"created","comment":{"url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/comments/203804137","pull_request_review_id":138762743,"id":203804137,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMzgwNDEzNw==","diff_hunk":"@@ -0,0 +1,162 @@\n+// Distributed under the MIT License.\n+// See LICENSE.txt for details.\n+\n+#include \"ControlSystem/Averager.hpp\"\n+\n+#include <ostream>\n+\n+#include \"ErrorHandling/Error.hpp\"\n+#include \"Utilities/Gsl.hpp\"\n+#include \"Utilities/MakeArray.hpp\"\n+\n+template <size_t DerivOrder>\n+Averager<DerivOrder>::Averager(const double avg_timescale_frac,\n+                               const bool average_0th_deriv_of_q) noexcept\n+    : avg_tscale_fac_(avg_timescale_frac),\n+      average_0th_deriv_of_q_(average_0th_deriv_of_q) {\n+  if (avg_tscale_fac_ <= 0.0) {\n+    ERROR(\n+        \"The specified avg_timescale_fac, the fraction of the damping \"\n+        \"timescale over which averaging is performed, (\"\n+        << avg_tscale_fac_ << \") must be positive\");\n+  }\n+\n+  // initialize the remaining member vars\n+  clear();\n+}\n+\n+template <size_t DerivOrder>\n+std::array<DataVector, DerivOrder + 1> Averager<DerivOrder>::operator()(\n+    const double time) const noexcept {\n+  if (not have_valid_data(time)) {\n+    ERROR(\n+        \"Cannot return averaged values because the averager does not have \"\n+        \"up-to-date information.\");\n+  }\n+\n+  return averaged_values_;\n+}\n+\n+template <size_t DerivOrder>\n+void Averager<DerivOrder>::clear() noexcept {\n+  averaged_values_ = make_array<DerivOrder + 1>(DataVector());\n+  times_.clear();\n+  raw_qs_.clear();\n+  weight_k_ = {0.0};\n+  tau_k_ = {0.0};\n+}\n+\n+template <size_t DerivOrder>\n+void Averager<DerivOrder>::update(const double time, const DataVector& raw_q,\n+                                  const DataVector& timescales) noexcept {\n+  if (not raw_qs_.empty()) {\n+    // ensure that the number of components passed to update is the\n+    // same as the number of components in the raw_q history\n+    if (raw_q.size() != raw_qs_[0].size()) {\n+      ERROR(\"The number of components in the raw_q provided (\"\n+            << raw_q.size()\n+            << \") does not match the size of previously supplied raw_q (\"\n+            << raw_qs_[0].size() << \").\");\n+    }\n+  } else {\n+    // This is the first call to update: initialize averaged values, weights and\n+    // effective time (with proper number of components)\n+    averaged_values_ =\n+        make_array<DerivOrder + 1>(DataVector(raw_q.size(), 0.0));\n+    weight_k_ = averaged_values_[0];\n+    tau_k_ = averaged_values_[0];\n+  }\n+\n+  // update deques\n+  times_.emplace_front(time);\n+  raw_qs_.emplace_front(raw_q);\n+  if (times_.size() > DerivOrder + 1) {\n+    // get rid of old data once we have a sufficient number of points\n+    times_.pop_back();\n+    raw_qs_.pop_back();\n+  }\n+\n+  if (times_.size() > DerivOrder) {\n+    // we now have enough data points to begin averaging\n+    const DataVector tau_avg = timescales * avg_tscale_fac_;\n+    const DataVector tau_m{tau_avg.size(), times_[0] - times_[1]};\n+\n+    // update the weights and effective time\n+    const DataVector old_weight{std::move(weight_k_)};\n+    weight_k_ = (tau_m + old_weight) * tau_avg / (tau_m + tau_avg);\n+    tau_k_ = (time * tau_m + tau_k_ * old_weight) * tau_avg /\n+             (weight_k_ * (tau_m + tau_avg));\n+\n+    std::array<DataVector, DerivOrder + 1> raw_derivs = get_derivs();\n+    for (size_t i = 0; i < averaged_values_.size(); i++) {\n+      gsl::at(averaged_values_, i) =\n+          (gsl::at(raw_derivs, i) * tau_m +\n+           gsl::at(averaged_values_, i) * old_weight) *\n+          tau_avg / (weight_k_ * (tau_m + tau_avg));\n+    }\n+    // replace averaged function value with raw value if\n+    // not using `average_0th_deriv_of_q`\n+    if (not average_0th_deriv_of_q_) {\n+      averaged_values_[0] = raw_qs_[0];\n+    }\n+  }\n+}\n+\n+template <size_t DerivOrder>\n+double Averager<DerivOrder>::last_time_updated() const noexcept {\n+  if (times_.empty()) {\n+    ERROR(\"The time history has not been updated yet.\");\n+  }\n+  return times_[0];\n+}\n+\n+template <size_t DerivOrder>\n+DataVector Averager<DerivOrder>::average_time(const double time) const\n+    noexcept {\n+  if (not have_valid_data(time)) {\n+    ERROR(\n+        \"Cannot return averaged values because the averager does not have \"\n+        \"up-to-date information.\");\n+  }\n+  return tau_k_;\n+}\n+\n+template <size_t DerivOrder>\n+std::array<DataVector, DerivOrder + 1> Averager<DerivOrder>::get_derivs() const\n+    noexcept {\n+  static_assert(\n+      DerivOrder == 2,\n+      \"Finite differencing currently only implemented for DerivOrder = 2\");","path":"src/ControlSystem/Averager.cpp","position":129,"original_position":129,"commit_id":"2246062c19408775d9a55eb80301a3824e42debd","original_commit_id":"2246062c19408775d9a55eb80301a3824e42debd","user":{"login":"wthrowe","id":867117,"node_id":"MDQ6VXNlcjg2NzExNw==","avatar_url":"https://avatars1.githubusercontent.com/u/867117?v=4","gravatar_id":"","url":"https://api.github.com/users/wthrowe","html_url":"https://github.com/wthrowe","followers_url":"https://api.github.com/users/wthrowe/followers","following_url":"https://api.github.com/users/wthrowe/following{/other_user}","gists_url":"https://api.github.com/users/wthrowe/gists{/gist_id}","starred_url":"https://api.github.com/users/wthrowe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wthrowe/subscriptions","organizations_url":"https://api.github.com/users/wthrowe/orgs","repos_url":"https://api.github.com/users/wthrowe/repos","events_url":"https://api.github.com/users/wthrowe/events{/privacy}","received_events_url":"https://api.github.com/users/wthrowe/received_events","type":"User","site_admin":false},"body":"I'm still not happy with having a template parameter that must always be specified as 2, and would prefer that it were removed.  If we are going to keep it, it should be documented very clearly in the class documentation.","created_at":"2018-07-19T17:09:24Z","updated_at":"2018-07-19T17:13:39Z","html_url":"https://github.com/sxs-collaboration/spectre/pull/816#discussion_r203804137","pull_request_url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/816","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/comments/203804137"},"html":{"href":"https://github.com/sxs-collaboration/spectre/pull/816#discussion_r203804137"},"pull_request":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/816"}}},"pull_request":{"url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/816","id":200584048,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAwNTg0MDQ4","html_url":"https://github.com/sxs-collaboration/spectre/pull/816","diff_url":"https://github.com/sxs-collaboration/spectre/pull/816.diff","patch_url":"https://github.com/sxs-collaboration/spectre/pull/816.patch","issue_url":"https://api.github.com/repos/sxs-collaboration/spectre/issues/816","number":816,"state":"open","locked":false,"title":"Add Averager and tests","user":{"login":"mgiesler","id":4701610,"node_id":"MDQ6VXNlcjQ3MDE2MTA=","avatar_url":"https://avatars1.githubusercontent.com/u/4701610?v=4","gravatar_id":"","url":"https://api.github.com/users/mgiesler","html_url":"https://github.com/mgiesler","followers_url":"https://api.github.com/users/mgiesler/followers","following_url":"https://api.github.com/users/mgiesler/following{/other_user}","gists_url":"https://api.github.com/users/mgiesler/gists{/gist_id}","starred_url":"https://api.github.com/users/mgiesler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mgiesler/subscriptions","organizations_url":"https://api.github.com/users/mgiesler/orgs","repos_url":"https://api.github.com/users/mgiesler/repos","events_url":"https://api.github.com/users/mgiesler/events{/privacy}","received_events_url":"https://api.github.com/users/mgiesler/received_events","type":"User","site_admin":false},"body":"## Proposed changes\r\n\r\nAdd a time-weighted exponential averager for the control system.\r\n\r\n### Types of changes:\r\n\r\n- [ ] Bugfix\r\n- [X] New feature\r\n\r\n### Component:\r\n\r\n- [X] Code\r\n- [ ] Documentation\r\n- [ ] Build system\r\n- [ ] Continuous integration\r\n\r\n### Code review checklist\r\n\r\n- [X] The PR passes all checks, including unit tests, `clang-tidy` and `IWYU`. For\r\n  instructions on how to perform the CI checks locally refer to the [Dev guide\r\n  on the Travis CI](https://spectre-code.org/travis_guide.html).\r\n- [X] The code is documented and the documentation renders correctly. Run `make doc`\r\n  to generate the documentation locally into `BUILD_DIR/docs/html`. Then open\r\n  `index.html`.\r\n- [X] The code follows the stylistic and code quality guidelines listed in the\r\n  [code review guide](https://spectre-code.org/code_review_guide.html).\r\n\r\n### Further comments\r\n\r\n<!--\r\nIf this is a relatively large or complex change, kick off the discussion by\r\nexplaining why you chose the solution you did and what alternatives you\r\nconsidered, etc...\r\n-->\r\n","created_at":"2018-07-11T04:29:13Z","updated_at":"2018-07-19T17:13:39Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a624a71f46a442835158a991c041751a7fff8918","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/816/commits","review_comments_url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/816/comments","review_comment_url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/comments{/number}","comments_url":"https://api.github.com/repos/sxs-collaboration/spectre/issues/816/comments","statuses_url":"https://api.github.com/repos/sxs-collaboration/spectre/statuses/2246062c19408775d9a55eb80301a3824e42debd","head":{"label":"mgiesler:Averager","ref":"Averager","sha":"2246062c19408775d9a55eb80301a3824e42debd","user":{"login":"mgiesler","id":4701610,"node_id":"MDQ6VXNlcjQ3MDE2MTA=","avatar_url":"https://avatars1.githubusercontent.com/u/4701610?v=4","gravatar_id":"","url":"https://api.github.com/users/mgiesler","html_url":"https://github.com/mgiesler","followers_url":"https://api.github.com/users/mgiesler/followers","following_url":"https://api.github.com/users/mgiesler/following{/other_user}","gists_url":"https://api.github.com/users/mgiesler/gists{/gist_id}","starred_url":"https://api.github.com/users/mgiesler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mgiesler/subscriptions","organizations_url":"https://api.github.com/users/mgiesler/orgs","repos_url":"https://api.github.com/users/mgiesler/repos","events_url":"https://api.github.com/users/mgiesler/events{/privacy}","received_events_url":"https://api.github.com/users/mgiesler/received_events","type":"User","site_admin":false},"repo":{"id":102661535,"node_id":"MDEwOlJlcG9zaXRvcnkxMDI2NjE1MzU=","name":"spectre","full_name":"mgiesler/spectre","owner":{"login":"mgiesler","id":4701610,"node_id":"MDQ6VXNlcjQ3MDE2MTA=","avatar_url":"https://avatars1.githubusercontent.com/u/4701610?v=4","gravatar_id":"","url":"https://api.github.com/users/mgiesler","html_url":"https://github.com/mgiesler","followers_url":"https://api.github.com/users/mgiesler/followers","following_url":"https://api.github.com/users/mgiesler/following{/other_user}","gists_url":"https://api.github.com/users/mgiesler/gists{/gist_id}","starred_url":"https://api.github.com/users/mgiesler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mgiesler/subscriptions","organizations_url":"https://api.github.com/users/mgiesler/orgs","repos_url":"https://api.github.com/users/mgiesler/repos","events_url":"https://api.github.com/users/mgiesler/events{/privacy}","received_events_url":"https://api.github.com/users/mgiesler/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mgiesler/spectre","description":null,"fork":true,"url":"https://api.github.com/repos/mgiesler/spectre","forks_url":"https://api.github.com/repos/mgiesler/spectre/forks","keys_url":"https://api.github.com/repos/mgiesler/spectre/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mgiesler/spectre/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mgiesler/spectre/teams","hooks_url":"https://api.github.com/repos/mgiesler/spectre/hooks","issue_events_url":"https://api.github.com/repos/mgiesler/spectre/issues/events{/number}","events_url":"https://api.github.com/repos/mgiesler/spectre/events","assignees_url":"https://api.github.com/repos/mgiesler/spectre/assignees{/user}","branches_url":"https://api.github.com/repos/mgiesler/spectre/branches{/branch}","tags_url":"https://api.github.com/repos/mgiesler/spectre/tags","blobs_url":"https://api.github.com/repos/mgiesler/spectre/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mgiesler/spectre/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mgiesler/spectre/git/refs{/sha}","trees_url":"https://api.github.com/repos/mgiesler/spectre/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mgiesler/spectre/statuses/{sha}","languages_url":"https://api.github.com/repos/mgiesler/spectre/languages","stargazers_url":"https://api.github.com/repos/mgiesler/spectre/stargazers","contributors_url":"https://api.github.com/repos/mgiesler/spectre/contributors","subscribers_url":"https://api.github.com/repos/mgiesler/spectre/subscribers","subscription_url":"https://api.github.com/repos/mgiesler/spectre/subscription","commits_url":"https://api.github.com/repos/mgiesler/spectre/commits{/sha}","git_commits_url":"https://api.github.com/repos/mgiesler/spectre/git/commits{/sha}","comments_url":"https://api.github.com/repos/mgiesler/spectre/comments{/number}","issue_comment_url":"https://api.github.com/repos/mgiesler/spectre/issues/comments{/number}","contents_url":"https://api.github.com/repos/mgiesler/spectre/contents/{+path}","compare_url":"https://api.github.com/repos/mgiesler/spectre/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mgiesler/spectre/merges","archive_url":"https://api.github.com/repos/mgiesler/spectre/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mgiesler/spectre/downloads","issues_url":"https://api.github.com/repos/mgiesler/spectre/issues{/number}","pulls_url":"https://api.github.com/repos/mgiesler/spectre/pulls{/number}","milestones_url":"https://api.github.com/repos/mgiesler/spectre/milestones{/number}","notifications_url":"https://api.github.com/repos/mgiesler/spectre/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mgiesler/spectre/labels{/name}","releases_url":"https://api.github.com/repos/mgiesler/spectre/releases{/id}","deployments_url":"https://api.github.com/repos/mgiesler/spectre/deployments","created_at":"2017-09-06T21:48:07Z","updated_at":"2018-07-17T21:34:00Z","pushed_at":"2018-07-19T01:51:41Z","git_url":"git://github.com/mgiesler/spectre.git","ssh_url":"git@github.com:mgiesler/spectre.git","clone_url":"https://github.com/mgiesler/spectre.git","svn_url":"https://github.com/mgiesler/spectre","homepage":null,"size":38431,"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":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"sxs-collaboration:develop","ref":"develop","sha":"d38436e217a414aacb55d66d4cb9b34db7c6b262","user":{"login":"sxs-collaboration","id":26882595,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI2ODgyNTk1","avatar_url":"https://avatars2.githubusercontent.com/u/26882595?v=4","gravatar_id":"","url":"https://api.github.com/users/sxs-collaboration","html_url":"https://github.com/sxs-collaboration","followers_url":"https://api.github.com/users/sxs-collaboration/followers","following_url":"https://api.github.com/users/sxs-collaboration/following{/other_user}","gists_url":"https://api.github.com/users/sxs-collaboration/gists{/gist_id}","starred_url":"https://api.github.com/users/sxs-collaboration/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sxs-collaboration/subscriptions","organizations_url":"https://api.github.com/users/sxs-collaboration/orgs","repos_url":"https://api.github.com/users/sxs-collaboration/repos","events_url":"https://api.github.com/users/sxs-collaboration/events{/privacy}","received_events_url":"https://api.github.com/users/sxs-collaboration/received_events","type":"Organization","site_admin":false},"repo":{"id":87570510,"node_id":"MDEwOlJlcG9zaXRvcnk4NzU3MDUxMA==","name":"spectre","full_name":"sxs-collaboration/spectre","owner":{"login":"sxs-collaboration","id":26882595,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI2ODgyNTk1","avatar_url":"https://avatars2.githubusercontent.com/u/26882595?v=4","gravatar_id":"","url":"https://api.github.com/users/sxs-collaboration","html_url":"https://github.com/sxs-collaboration","followers_url":"https://api.github.com/users/sxs-collaboration/followers","following_url":"https://api.github.com/users/sxs-collaboration/following{/other_user}","gists_url":"https://api.github.com/users/sxs-collaboration/gists{/gist_id}","starred_url":"https://api.github.com/users/sxs-collaboration/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sxs-collaboration/subscriptions","organizations_url":"https://api.github.com/users/sxs-collaboration/orgs","repos_url":"https://api.github.com/users/sxs-collaboration/repos","events_url":"https://api.github.com/users/sxs-collaboration/events{/privacy}","received_events_url":"https://api.github.com/users/sxs-collaboration/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/sxs-collaboration/spectre","description":"SpECTRE is a code for multi-scale, multi-physics problems in astrophysics and gravitational physics.","fork":false,"url":"https://api.github.com/repos/sxs-collaboration/spectre","forks_url":"https://api.github.com/repos/sxs-collaboration/spectre/forks","keys_url":"https://api.github.com/repos/sxs-collaboration/spectre/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sxs-collaboration/spectre/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sxs-collaboration/spectre/teams","hooks_url":"https://api.github.com/repos/sxs-collaboration/spectre/hooks","issue_events_url":"https://api.github.com/repos/sxs-collaboration/spectre/issues/events{/number}","events_url":"https://api.github.com/repos/sxs-collaboration/spectre/events","assignees_url":"https://api.github.com/repos/sxs-collaboration/spectre/assignees{/user}","branches_url":"https://api.github.com/repos/sxs-collaboration/spectre/branches{/branch}","tags_url":"https://api.github.com/repos/sxs-collaboration/spectre/tags","blobs_url":"https://api.github.com/repos/sxs-collaboration/spectre/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sxs-collaboration/spectre/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sxs-collaboration/spectre/git/refs{/sha}","trees_url":"https://api.github.com/repos/sxs-collaboration/spectre/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sxs-collaboration/spectre/statuses/{sha}","languages_url":"https://api.github.com/repos/sxs-collaboration/spectre/languages","stargazers_url":"https://api.github.com/repos/sxs-collaboration/spectre/stargazers","contributors_url":"https://api.github.com/repos/sxs-collaboration/spectre/contributors","subscribers_url":"https://api.github.com/repos/sxs-collaboration/spectre/subscribers","subscription_url":"https://api.github.com/repos/sxs-collaboration/spectre/subscription","commits_url":"https://api.github.com/repos/sxs-collaboration/spectre/commits{/sha}","git_commits_url":"https://api.github.com/repos/sxs-collaboration/spectre/git/commits{/sha}","comments_url":"https://api.github.com/repos/sxs-collaboration/spectre/comments{/number}","issue_comment_url":"https://api.github.com/repos/sxs-collaboration/spectre/issues/comments{/number}","contents_url":"https://api.github.com/repos/sxs-collaboration/spectre/contents/{+path}","compare_url":"https://api.github.com/repos/sxs-collaboration/spectre/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sxs-collaboration/spectre/merges","archive_url":"https://api.github.com/repos/sxs-collaboration/spectre/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sxs-collaboration/spectre/downloads","issues_url":"https://api.github.com/repos/sxs-collaboration/spectre/issues{/number}","pulls_url":"https://api.github.com/repos/sxs-collaboration/spectre/pulls{/number}","milestones_url":"https://api.github.com/repos/sxs-collaboration/spectre/milestones{/number}","notifications_url":"https://api.github.com/repos/sxs-collaboration/spectre/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sxs-collaboration/spectre/labels{/name}","releases_url":"https://api.github.com/repos/sxs-collaboration/spectre/releases{/id}","deployments_url":"https://api.github.com/repos/sxs-collaboration/spectre/deployments","created_at":"2017-04-07T17:28:20Z","updated_at":"2018-07-17T01:11:10Z","pushed_at":"2018-07-19T06:10:51Z","git_url":"git://github.com/sxs-collaboration/spectre.git","ssh_url":"git@github.com:sxs-collaboration/spectre.git","clone_url":"https://github.com/sxs-collaboration/spectre.git","svn_url":"https://github.com/sxs-collaboration/spectre","homepage":"","size":12285,"stargazers_count":26,"watchers_count":26,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":25,"mirror_url":null,"archived":false,"open_issues_count":99,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":25,"open_issues":99,"watchers":26,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/816"},"html":{"href":"https://github.com/sxs-collaboration/spectre/pull/816"},"issue":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/issues/816"},"comments":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/issues/816/comments"},"review_comments":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/816/comments"},"review_comment":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/pulls/816/commits"},"statuses":{"href":"https://api.github.com/repos/sxs-collaboration/spectre/statuses/2246062c19408775d9a55eb80301a3824e42debd"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"wthrowe"}}