{"action":"created","comment":{"url":"https://api.github.com/repos/chapel-lang/chapel/pulls/comments/93453745","pull_request_review_id":13981608,"id":93453745,"diff_hunk":"@@ -0,0 +1,324 @@\n+:title: Users Guide: Promotion\n+\n+.. _ug-promotion:\n+\n+Promotion: implicit data parallelism\n+====================================\n+\n+In Chapel, *function promotion* (or simply *promotion*) refers to an\n+implicit form of data parallelism that is triggered by passing a\n+collection of values to an argument that expects a single value.  More\n+precisely, when an array of type *t* (or a range or domain whose index\n+type is *t*) is passed to a function argument of type *t*, that\n+function will be called in a data-parallel manner for all values in\n+the collection.\n+\n+As a simple example, consider the following function, ``negate()``\n+which takes a ``real`` value by reference and negates it:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :caption:\n+  :language: chapel\n+  :lines: 1-3\n+\n+In addition to calling the function with a single ``real`` variable,\n+we can also call the function in a promoted manner using an array of\n+reals, as follows:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 9-10\n+\n+If we print out the array after making this call, we can see that each\n+element has been negated, as expected:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.good\n+   :language: text\n+   :lines: 3\n+\n+Moreover, the execution will be equivalent to the following\n+data-parallel forall-loop:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 14-15\n+\n+Nothing about the above requires using a 1D array.  We could also\n+promote ``negate()`` by passing it a multidimensional array of reals:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 19-22\n+\n+which would again be equivalent to the loop:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 25-26\n+\n+\n+Multi-Argument Promotion\n+------------------------\n+\n+When multiple function arguments are promoted in a single call, the\n+result is equivalent to a zippered forall-loop.  As an example,\n+consider the following function which takes two ``real`` arguments by\n+``ref`` and sorts them relative to one another using a swap\n+assignment:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 30-33\n+\n+This function can be promoted using two arrays of reals as follows:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 35-38\n+\n+This promotion is equivalent to the following zippered forall-loop:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 45-46\n+\n+Either form will leave the arrays as follows:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.good\n+   :language: text\n+   :lines: 15-16\n+\n+Promoting multiple arguments simultaneously requires that the\n+arguments can legally be zippered together, as in an explicit\n+forall-loop.\n+\n+All of a function's arguments need not be promoted simultaneously.\n+Any arguments that are promoted define the implicit, potentially\n+zippered forall-loop.  All others are simply passed through to their\n+formal argument normally.  For example, consider the following\n+function which assigns its *y* argument into its *x* argument only if\n+the third argument, *b*, is true:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 51-54\n+\n+The following four calls demonstrate that various combinations of\n+arguments may be promoted, where *Mask* is an array of ``bool``\n+values:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 67,76,85,94\n+\n+These calls are equivalent to the following forall-loops:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 71-72,80-81,89-90,98-99\n+\n+If *A*, *B*, and *Mask* hold the following values before each of\n+these calls:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 63-65\n+\n+Then *A* will store the following values afterward:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.good\n+  :language: text\n+  :lines: 23,25,27,29\n+\n+\n+Promoted Calls and Forall Intents\n+---------------------------------\n+\n+Note that default forall intents apply to promoted calls as they would\n+to the equivalent forall-loop.  As an example, consider the following\n+call.  It is promoted due to its second and third arguments, and tries\n+to pass a scalar *r* into the first argument which has ``ref`` intent:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 105-106\n+  :dedent: 2\n+\n+Attempting to compile this promoted call results in a compile-time\n+error.  To see the reason, consider the equivalent forall-loop:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 108-109\n+  :dedent: 2\n+\n+On the way into the loop, a ``const`` shadow copy of *r* is created as\n+with any other forall-loop.  But since constants can't be passed by\n+``ref`` argument intent, an error is triggered.  As with forall\n+intents on explicit loops, these rules prevent common race conditions.\n+For example, if the call had been executed, it would be a race as to\n+which of *B*'s values would be stored into *r*.\n+\n+Promoted calls do not support a mechanism to override default forall\n+intents.  Thus, in order to override the default and enable the race,\n+a user would need to write the loop out explicitly and add a ``with``\n+clause as follows:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 114-115\n+\n+\n+Promoting Using Ranges and Domains\n+----------------------------------\n+\n+As mentioned at the outset, not only can arrays be used to promote\n+functions, but ranges and domains can as well.  For example, the\n+following two calls promote ``maybeCopy()`` using a range and a\n+domain, respectively:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 185,189\n+\n+The contents of *A* after these calls is as follows:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.good\n+  :language: text\n+  :lines: 45,46\n+\n+At the time of this writing, Chapel does not support an official way\n+for users to create their own collection types that support promotion.\n+We expect to support this in the future by having the collection type\n+support certain well-defined iterator methods.\n+\n+\n+Promoted Library Routines and Operators\n+---------------------------------------\n+\n+All of the examples above illustrate promotion on procedures written\n+by a user.  Yet any procedure is a candidate for promotion in Chapel,\n+including library routines and operators.  As an example, consider the\n+following lines of code:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.chpl\n+  :language: chapel\n+  :lines: 119-120,127\n+\n+The second statement promotes the standard ``sqrt()`` library routine,\n+resulting in an array of results, stored in *B*:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.good\n+  :language: text\n+  :lines: 32\n+\n+The third statement doubles the array *A* and stores the result in *B*\n+as expected:\n+\n+.. literalinclude:: examples/users-guide/datapar/promotion.good\n+  :language: text\n+  :lines: 34\n+\n+Note that Chapel does not support an explicit ``+`` operator for\n+arrays of reals.  Rather, Chapel implements this operation by\n+promoting the standard ``+`` operator for scalar values of type\n+``real``.  For this reason, applying ``*`` to Chapel arrays results in","path":"doc/users-guide/datapar/promotion.rst","position":225,"original_position":225,"commit_id":"4f1b39339627670e74caa5769ee033c0dead8a7a","original_commit_id":"4f1b39339627670e74caa5769ee033c0dead8a7a","user":{"login":"mppf","id":3653132,"avatar_url":"https://avatars.githubusercontent.com/u/3653132?v=3","gravatar_id":"","url":"https://api.github.com/users/mppf","html_url":"https://github.com/mppf","followers_url":"https://api.github.com/users/mppf/followers","following_url":"https://api.github.com/users/mppf/following{/other_user}","gists_url":"https://api.github.com/users/mppf/gists{/gist_id}","starred_url":"https://api.github.com/users/mppf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mppf/subscriptions","organizations_url":"https://api.github.com/users/mppf/orgs","repos_url":"https://api.github.com/users/mppf/repos","events_url":"https://api.github.com/users/mppf/events{/privacy}","received_events_url":"https://api.github.com/users/mppf/received_events","type":"User","site_admin":false},"body":"I was initially confused by the switch from ``+`` to ``*``. Maybe instead of \"For this reason\" it should say \"Similarly, ``*`` on arrays is implemented with promotion. For this reason, ...\"","created_at":"2016-12-21T15:05:19Z","updated_at":"2016-12-21T15:05:19Z","html_url":"https://github.com/chapel-lang/chapel/pull/5065#discussion_r93453745","pull_request_url":"https://api.github.com/repos/chapel-lang/chapel/pulls/5065","_links":{"self":{"href":"https://api.github.com/repos/chapel-lang/chapel/pulls/comments/93453745"},"html":{"href":"https://github.com/chapel-lang/chapel/pull/5065#discussion_r93453745"},"pull_request":{"href":"https://api.github.com/repos/chapel-lang/chapel/pulls/5065"}}},"pull_request":{"url":"https://api.github.com/repos/chapel-lang/chapel/pulls/5065","id":98451421,"html_url":"https://github.com/chapel-lang/chapel/pull/5065","diff_url":"https://github.com/chapel-lang/chapel/pull/5065.diff","patch_url":"https://github.com/chapel-lang/chapel/pull/5065.patch","issue_url":"https://api.github.com/repos/chapel-lang/chapel/issues/5065","number":5065,"state":"open","locked":false,"title":"Users guide: promotion","user":{"login":"bradcray","id":7536222,"avatar_url":"https://avatars.githubusercontent.com/u/7536222?v=3","gravatar_id":"","url":"https://api.github.com/users/bradcray","html_url":"https://github.com/bradcray","followers_url":"https://api.github.com/users/bradcray/followers","following_url":"https://api.github.com/users/bradcray/following{/other_user}","gists_url":"https://api.github.com/users/bradcray/gists{/gist_id}","starred_url":"https://api.github.com/users/bradcray/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bradcray/subscriptions","organizations_url":"https://api.github.com/users/bradcray/orgs","repos_url":"https://api.github.com/users/bradcray/repos","events_url":"https://api.github.com/users/bradcray/events{/privacy}","received_events_url":"https://api.github.com/users/bradcray/received_events","type":"User","site_admin":false},"body":"This is a first draft of a promotion section for the Chapel Users Guide with accompanying test from which code excerpts are pulled.\r\n\r\nTODO:\r\n- [X] write draft of section\r\n- [ ] learn how to run Paul's spell checker and use it on this section","created_at":"2016-12-17T18:21:16Z","updated_at":"2016-12-21T15:05:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"39d924471c8e617209f1ae1f8fc3ce2b926f88e7","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/chapel-lang/chapel/pulls/5065/commits","review_comments_url":"https://api.github.com/repos/chapel-lang/chapel/pulls/5065/comments","review_comment_url":"https://api.github.com/repos/chapel-lang/chapel/pulls/comments{/number}","comments_url":"https://api.github.com/repos/chapel-lang/chapel/issues/5065/comments","statuses_url":"https://api.github.com/repos/chapel-lang/chapel/statuses/4f1b39339627670e74caa5769ee033c0dead8a7a","head":{"label":"bradcray:users-guide-promotion","ref":"users-guide-promotion","sha":"4f1b39339627670e74caa5769ee033c0dead8a7a","user":{"login":"bradcray","id":7536222,"avatar_url":"https://avatars.githubusercontent.com/u/7536222?v=3","gravatar_id":"","url":"https://api.github.com/users/bradcray","html_url":"https://github.com/bradcray","followers_url":"https://api.github.com/users/bradcray/followers","following_url":"https://api.github.com/users/bradcray/following{/other_user}","gists_url":"https://api.github.com/users/bradcray/gists{/gist_id}","starred_url":"https://api.github.com/users/bradcray/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bradcray/subscriptions","organizations_url":"https://api.github.com/users/bradcray/orgs","repos_url":"https://api.github.com/users/bradcray/repos","events_url":"https://api.github.com/users/bradcray/events{/privacy}","received_events_url":"https://api.github.com/users/bradcray/received_events","type":"User","site_admin":false},"repo":{"id":21837395,"name":"chapel","full_name":"bradcray/chapel","owner":{"login":"bradcray","id":7536222,"avatar_url":"https://avatars.githubusercontent.com/u/7536222?v=3","gravatar_id":"","url":"https://api.github.com/users/bradcray","html_url":"https://github.com/bradcray","followers_url":"https://api.github.com/users/bradcray/followers","following_url":"https://api.github.com/users/bradcray/following{/other_user}","gists_url":"https://api.github.com/users/bradcray/gists{/gist_id}","starred_url":"https://api.github.com/users/bradcray/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bradcray/subscriptions","organizations_url":"https://api.github.com/users/bradcray/orgs","repos_url":"https://api.github.com/users/bradcray/repos","events_url":"https://api.github.com/users/bradcray/events{/privacy}","received_events_url":"https://api.github.com/users/bradcray/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bradcray/chapel","description":"a Productive Parallel Programming Language","fork":true,"url":"https://api.github.com/repos/bradcray/chapel","forks_url":"https://api.github.com/repos/bradcray/chapel/forks","keys_url":"https://api.github.com/repos/bradcray/chapel/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bradcray/chapel/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bradcray/chapel/teams","hooks_url":"https://api.github.com/repos/bradcray/chapel/hooks","issue_events_url":"https://api.github.com/repos/bradcray/chapel/issues/events{/number}","events_url":"https://api.github.com/repos/bradcray/chapel/events","assignees_url":"https://api.github.com/repos/bradcray/chapel/assignees{/user}","branches_url":"https://api.github.com/repos/bradcray/chapel/branches{/branch}","tags_url":"https://api.github.com/repos/bradcray/chapel/tags","blobs_url":"https://api.github.com/repos/bradcray/chapel/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bradcray/chapel/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bradcray/chapel/git/refs{/sha}","trees_url":"https://api.github.com/repos/bradcray/chapel/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bradcray/chapel/statuses/{sha}","languages_url":"https://api.github.com/repos/bradcray/chapel/languages","stargazers_url":"https://api.github.com/repos/bradcray/chapel/stargazers","contributors_url":"https://api.github.com/repos/bradcray/chapel/contributors","subscribers_url":"https://api.github.com/repos/bradcray/chapel/subscribers","subscription_url":"https://api.github.com/repos/bradcray/chapel/subscription","commits_url":"https://api.github.com/repos/bradcray/chapel/commits{/sha}","git_commits_url":"https://api.github.com/repos/bradcray/chapel/git/commits{/sha}","comments_url":"https://api.github.com/repos/bradcray/chapel/comments{/number}","issue_comment_url":"https://api.github.com/repos/bradcray/chapel/issues/comments{/number}","contents_url":"https://api.github.com/repos/bradcray/chapel/contents/{+path}","compare_url":"https://api.github.com/repos/bradcray/chapel/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bradcray/chapel/merges","archive_url":"https://api.github.com/repos/bradcray/chapel/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bradcray/chapel/downloads","issues_url":"https://api.github.com/repos/bradcray/chapel/issues{/number}","pulls_url":"https://api.github.com/repos/bradcray/chapel/pulls{/number}","milestones_url":"https://api.github.com/repos/bradcray/chapel/milestones{/number}","notifications_url":"https://api.github.com/repos/bradcray/chapel/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bradcray/chapel/labels{/name}","releases_url":"https://api.github.com/repos/bradcray/chapel/releases{/id}","deployments_url":"https://api.github.com/repos/bradcray/chapel/deployments","created_at":"2014-07-14T22:08:29Z","updated_at":"2016-01-30T16:15:15Z","pushed_at":"2016-12-20T15:33:09Z","git_url":"git://github.com/bradcray/chapel.git","ssh_url":"git@github.com:bradcray/chapel.git","clone_url":"https://github.com/bradcray/chapel.git","svn_url":"https://github.com/bradcray/chapel","homepage":"http://chapel.cray.com/","size":396678,"stargazers_count":2,"watchers_count":2,"language":"Chapel","has_issues":false,"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":2,"default_branch":"master"}},"base":{"label":"chapel-lang:master","ref":"master","sha":"7d0505083d5a672268281144bc179afbbcd58d76","user":{"login":"chapel-lang","id":7597261,"avatar_url":"https://avatars.githubusercontent.com/u/7597261?v=3","gravatar_id":"","url":"https://api.github.com/users/chapel-lang","html_url":"https://github.com/chapel-lang","followers_url":"https://api.github.com/users/chapel-lang/followers","following_url":"https://api.github.com/users/chapel-lang/following{/other_user}","gists_url":"https://api.github.com/users/chapel-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/chapel-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chapel-lang/subscriptions","organizations_url":"https://api.github.com/users/chapel-lang/orgs","repos_url":"https://api.github.com/users/chapel-lang/repos","events_url":"https://api.github.com/users/chapel-lang/events{/privacy}","received_events_url":"https://api.github.com/users/chapel-lang/received_events","type":"Organization","site_admin":false},"repo":{"id":21663285,"name":"chapel","full_name":"chapel-lang/chapel","owner":{"login":"chapel-lang","id":7597261,"avatar_url":"https://avatars.githubusercontent.com/u/7597261?v=3","gravatar_id":"","url":"https://api.github.com/users/chapel-lang","html_url":"https://github.com/chapel-lang","followers_url":"https://api.github.com/users/chapel-lang/followers","following_url":"https://api.github.com/users/chapel-lang/following{/other_user}","gists_url":"https://api.github.com/users/chapel-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/chapel-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chapel-lang/subscriptions","organizations_url":"https://api.github.com/users/chapel-lang/orgs","repos_url":"https://api.github.com/users/chapel-lang/repos","events_url":"https://api.github.com/users/chapel-lang/events{/privacy}","received_events_url":"https://api.github.com/users/chapel-lang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/chapel-lang/chapel","description":"a Productive Parallel Programming Language","fork":false,"url":"https://api.github.com/repos/chapel-lang/chapel","forks_url":"https://api.github.com/repos/chapel-lang/chapel/forks","keys_url":"https://api.github.com/repos/chapel-lang/chapel/keys{/key_id}","collaborators_url":"https://api.github.com/repos/chapel-lang/chapel/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/chapel-lang/chapel/teams","hooks_url":"https://api.github.com/repos/chapel-lang/chapel/hooks","issue_events_url":"https://api.github.com/repos/chapel-lang/chapel/issues/events{/number}","events_url":"https://api.github.com/repos/chapel-lang/chapel/events","assignees_url":"https://api.github.com/repos/chapel-lang/chapel/assignees{/user}","branches_url":"https://api.github.com/repos/chapel-lang/chapel/branches{/branch}","tags_url":"https://api.github.com/repos/chapel-lang/chapel/tags","blobs_url":"https://api.github.com/repos/chapel-lang/chapel/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/chapel-lang/chapel/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/chapel-lang/chapel/git/refs{/sha}","trees_url":"https://api.github.com/repos/chapel-lang/chapel/git/trees{/sha}","statuses_url":"https://api.github.com/repos/chapel-lang/chapel/statuses/{sha}","languages_url":"https://api.github.com/repos/chapel-lang/chapel/languages","stargazers_url":"https://api.github.com/repos/chapel-lang/chapel/stargazers","contributors_url":"https://api.github.com/repos/chapel-lang/chapel/contributors","subscribers_url":"https://api.github.com/repos/chapel-lang/chapel/subscribers","subscription_url":"https://api.github.com/repos/chapel-lang/chapel/subscription","commits_url":"https://api.github.com/repos/chapel-lang/chapel/commits{/sha}","git_commits_url":"https://api.github.com/repos/chapel-lang/chapel/git/commits{/sha}","comments_url":"https://api.github.com/repos/chapel-lang/chapel/comments{/number}","issue_comment_url":"https://api.github.com/repos/chapel-lang/chapel/issues/comments{/number}","contents_url":"https://api.github.com/repos/chapel-lang/chapel/contents/{+path}","compare_url":"https://api.github.com/repos/chapel-lang/chapel/compare/{base}...{head}","merges_url":"https://api.github.com/repos/chapel-lang/chapel/merges","archive_url":"https://api.github.com/repos/chapel-lang/chapel/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/chapel-lang/chapel/downloads","issues_url":"https://api.github.com/repos/chapel-lang/chapel/issues{/number}","pulls_url":"https://api.github.com/repos/chapel-lang/chapel/pulls{/number}","milestones_url":"https://api.github.com/repos/chapel-lang/chapel/milestones{/number}","notifications_url":"https://api.github.com/repos/chapel-lang/chapel/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/chapel-lang/chapel/labels{/name}","releases_url":"https://api.github.com/repos/chapel-lang/chapel/releases{/id}","deployments_url":"https://api.github.com/repos/chapel-lang/chapel/deployments","created_at":"2014-07-09T18:15:54Z","updated_at":"2016-12-20T18:53:01Z","pushed_at":"2016-12-21T14:46:34Z","git_url":"git://github.com/chapel-lang/chapel.git","ssh_url":"git@github.com:chapel-lang/chapel.git","clone_url":"https://github.com/chapel-lang/chapel.git","svn_url":"https://github.com/chapel-lang/chapel","homepage":"http://chapel.cray.com/","size":399274,"stargazers_count":351,"watchers_count":351,"language":"Chapel","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":110,"mirror_url":null,"open_issues_count":59,"forks":110,"open_issues":59,"watchers":351,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/chapel-lang/chapel/pulls/5065"},"html":{"href":"https://github.com/chapel-lang/chapel/pull/5065"},"issue":{"href":"https://api.github.com/repos/chapel-lang/chapel/issues/5065"},"comments":{"href":"https://api.github.com/repos/chapel-lang/chapel/issues/5065/comments"},"review_comments":{"href":"https://api.github.com/repos/chapel-lang/chapel/pulls/5065/comments"},"review_comment":{"href":"https://api.github.com/repos/chapel-lang/chapel/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/chapel-lang/chapel/pulls/5065/commits"},"statuses":{"href":"https://api.github.com/repos/chapel-lang/chapel/statuses/4f1b39339627670e74caa5769ee033c0dead8a7a"}}}}
{"actor":{"display_login":"mppf"}}