{"action":"created","comment":{"url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls/comments/167102456","pull_request_review_id":95273961,"id":167102456,"diff_hunk":"@@ -0,0 +1,332 @@\n+//===--------------------------------------------------------------------------------*- C++ -*-===//\n+//                          _\n+//                         | |\n+//                       __| | __ ___      ___ ___\n+//                      / _` |/ _` \\ \\ /\\ / / '_  |\n+//                     | (_| | (_| |\\ V  V /| | | |\n+//                      \\__,_|\\__,_| \\_/\\_/ |_| |_| - Compiler Toolchain\n+//\n+//\n+//  This file is distributed under the MIT License (MIT).\n+//  See LICENSE.txt for details.\n+//\n+//===------------------------------------------------------------------------------------------===//\n+\n+#include \"dawn/Optimizer/PassSetBoundaryCondition.h\"\n+#include \"dawn/Optimizer/OptimizerContext.h\"\n+#include \"dawn/Optimizer/Stencil.h\"\n+#include \"dawn/Optimizer/StencilInstantiation.h\"\n+#include \"dawn/SIR/ASTExpr.h\"\n+#include \"dawn/SIR/ASTStmt.h\"\n+#include \"dawn/SIR/ASTUtil.h\"\n+#include \"dawn/SIR/ASTVisitor.h\"\n+#include \"dawn/Support/Assert.h\"\n+#include \"dawn/Support/Logging.h\"\n+#include <iostream>\n+#include <set>\n+#include <unordered_map>\n+#include <vector>\n+\n+namespace dawn {\n+\n+namespace {\n+/// @brief This method analyzes the Extents in which a field with a given ID is used within a a\n+/// Stencil. This is used to compute how big the halo exchanges need to be.\n+/// @param s A shared ptr to the stencil to be analyzed\n+/// @param ID the FieldID of the Field to be analized\n+/// @return the full extent of the field in the stencil\n+static dawn::Extents analyzeStencilExtents(const std::shared_ptr<Stencil>& s, int fieldID) {\n+  Extents fullExtents;\n+  Stencil& stencil = *s;\n+\n+  int numStages = stencil.getNumStages();\n+\n+  // loop over stages\n+  for(int i = 0; i < numStages; ++i) {\n+    Stage& stage = *(stencil.getStage(i));\n+\n+    Extents const& stageExtent = stage.getExtents();\n+    for(auto& field : stage.getFields()) {\n+      fullExtents.merge(field.Extent);\n+      fullExtents.add(stageExtent);\n+    }\n+  }\n+\n+  return fullExtents;\n+}\n+\n+enum FieldType{ FT_NotOriginal=-1};\n+}\n+///\n+/// @brief The VisitStencilCalls class traverses the StencilDescAST to determine an order of the\n+/// stencil calls. This is required to properly evaluate boundary conditions\n+///\n+class VisitStencilCalls : public ASTVisitorForwarding {\n+  std::vector<std::shared_ptr<StencilCallDeclStmt>> stencilCallsInOrder_;\n+\n+public:\n+  const std::vector<std::shared_ptr<StencilCallDeclStmt>>& getStencilCalls() const {\n+    return stencilCallsInOrder_;\n+  }\n+  std::vector<std::shared_ptr<StencilCallDeclStmt>>& getStencilCalls() {\n+    return stencilCallsInOrder_;\n+  }\n+\n+  void visit(const std::shared_ptr<StencilCallDeclStmt>& stmt) {\n+    stencilCallsInOrder_.push_back(stmt);\n+  }\n+};\n+\n+/// @brief The AddBoundaryConditions class traverses the StencilDescAST to extract all the\n+/// StencilCallStmts for a stencili with a given ID. This is required to properly insert boundary\n+/// conditions.\n+class AddBoundaryConditions : public ASTVisitorForwarding {\n+  StencilInstantiation* instantiation_;\n+  int StencilID_;\n+\n+  std::vector<std::shared_ptr<StencilCallDeclStmt>> stencilCallsToReplace_;\n+\n+public:\n+  AddBoundaryConditions(StencilInstantiation* instantiation, int StencilID)\n+      : instantiation_(instantiation), StencilID_(StencilID) {}\n+\n+  void visit(const std::shared_ptr<StencilCallDeclStmt>& stmt) override {\n+    if(instantiation_->getStencilIDFromStmt(stmt) == StencilID_)\n+      stencilCallsToReplace_.emplace_back(stmt);\n+  }\n+\n+  std::vector<std::shared_ptr<StencilCallDeclStmt>>& getStencilCallsToReplace() {\n+    return stencilCallsToReplace_;\n+  }\n+\n+  void reset() { stencilCallsToReplace_.clear(); }\n+};\n+\n+PassSetBoundaryCondition::PassSetBoundaryCondition() : Pass(\"PassSetBoundaryCondition\") {}\n+\n+bool PassSetBoundaryCondition::run(StencilInstantiation* stencilInstantiation) {\n+\n+  // check if we need to run this pass\n+  if(stencilInstantiation->getStencils().size() == 1) {\n+    if(stencilInstantiation->getOptimizerContext()->getOptions().ReportBoundaryConditions) {\n+      std::cout << \"\\nPASS: \" << getName() << \": \" << stencilInstantiation->getName() << \" :\";\n+      std::cout << \" No boundary conditions applied\\n\";\n+    }\n+    return true;\n+  }\n+  // returns the original ID of a variable\n+  auto getOriginalID = [&](int ID) {\n+    // check if the variable exists to be sure not to assert\n+    auto it = stencilInstantiation->getNameToAccessIDMap().find(\n+        stencilInstantiation->getOriginalNameFromAccessID(ID));\n+    if(it != stencilInstantiation->getNameToAccessIDMap().end()) {\n+      if(stencilInstantiation->isField(ID)) {\n+        return stencilInstantiation->getAccessIDFromName(\n+            stencilInstantiation->getOriginalNameFromAccessID(ID));\n+      } else {\n+        return (int) FieldType::FT_NotOriginal;\n+      }\n+    } else {\n+      return (int) FieldType::FT_NotOriginal;\n+    }\n+\n+  };\n+\n+  std::unordered_map<int, Extents> dirtyFields;\n+  std::unordered_map<int, std::shared_ptr<BoundaryConditionDeclStmt>> allBCs;\n+\n+  // Fetch all the boundary conditions stored in the instantiation\n+  for(const auto& bc : stencilInstantiation->getBoundaryConditions()) {\n+    auto it = stencilInstantiation->getNameToAccessIDMap().find(bc.first);\n+    if(it != stencilInstantiation->getNameToAccessIDMap().end()) {\n+      int ID = stencilInstantiation->getAccessIDFromName(bc.first);\n+      allBCs.emplace(ID, bc.second);\n+    }\n+  }\n+\n+  // Get the order in which the stencils are called:\n+  VisitStencilCalls findStencilCalls;\n+\n+  for(const std::shared_ptr<Statement>& statement :\n+      stencilInstantiation->getStencilDescStatements()) {\n+    statement->ASTStmt->accept(findStencilCalls);\n+  }\n+  std::vector<int> StencilIDsVisited_;\n+  for(const auto& stencilcall : findStencilCalls.getStencilCalls()) {\n+    StencilIDsVisited_.push_back(\n+        stencilInstantiation->getStencilCallToStencilIDMap().find(stencilcall)->second);\n+  }","path":"src/dawn/Optimizer/PassSetBoundaryCondition.cpp","position":158,"original_position":158,"commit_id":"3445f6b03a231d3a71a80ad7b296d48a75821e3e","original_commit_id":"3445f6b03a231d3a71a80ad7b296d48a75821e3e","user":{"login":"cosunae","id":6085761,"avatar_url":"https://avatars3.githubusercontent.com/u/6085761?v=4","gravatar_id":"","url":"https://api.github.com/users/cosunae","html_url":"https://github.com/cosunae","followers_url":"https://api.github.com/users/cosunae/followers","following_url":"https://api.github.com/users/cosunae/following{/other_user}","gists_url":"https://api.github.com/users/cosunae/gists{/gist_id}","starred_url":"https://api.github.com/users/cosunae/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cosunae/subscriptions","organizations_url":"https://api.github.com/users/cosunae/orgs","repos_url":"https://api.github.com/users/cosunae/repos","events_url":"https://api.github.com/users/cosunae/events{/privacy}","received_events_url":"https://api.github.com/users/cosunae/received_events","type":"User","site_admin":false},"body":"why do we need to store all the stencil calls in a vector, and traverse it again to store later the ID? \r\nWhy not directly storing the IDs by the visitor? `findStencilCalls.getStencilCalls()` is not used later one anyhow","created_at":"2018-02-08T23:42:57Z","updated_at":"2018-02-08T23:42:57Z","html_url":"https://github.com/MeteoSwiss-APN/dawn/pull/49#discussion_r167102456","pull_request_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls/49","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls/comments/167102456"},"html":{"href":"https://github.com/MeteoSwiss-APN/dawn/pull/49#discussion_r167102456"},"pull_request":{"href":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls/49"}}},"pull_request":{"url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls/49","id":164282137,"html_url":"https://github.com/MeteoSwiss-APN/dawn/pull/49","diff_url":"https://github.com/MeteoSwiss-APN/dawn/pull/49.diff","patch_url":"https://github.com/MeteoSwiss-APN/dawn/pull/49.patch","issue_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/issues/49","number":49,"state":"open","locked":false,"title":"Added Functionality of Boundary Conditions","user":{"login":"twicki","id":5988437,"avatar_url":"https://avatars3.githubusercontent.com/u/5988437?v=4","gravatar_id":"","url":"https://api.github.com/users/twicki","html_url":"https://github.com/twicki","followers_url":"https://api.github.com/users/twicki/followers","following_url":"https://api.github.com/users/twicki/following{/other_user}","gists_url":"https://api.github.com/users/twicki/gists{/gist_id}","starred_url":"https://api.github.com/users/twicki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/twicki/subscriptions","organizations_url":"https://api.github.com/users/twicki/orgs","repos_url":"https://api.github.com/users/twicki/repos","events_url":"https://api.github.com/users/twicki/events{/privacy}","received_events_url":"https://api.github.com/users/twicki/received_events","type":"User","site_admin":false},"body":"## Technical Description\r\n\r\nImplementation of boundary conditions.\r\nNow in the stencil description, one can specify boundary conditions:\r\n```\r\nstencil_function zero{\r\n  storage a;\r\n  Do {\r\n    a = 0;\r\n  }\r\n};\r\n\r\nstencil Test{\r\n  storage a;\r\n\r\n  boundary_condition(zero(), a);\r\n\r\n  Do{\r\n    .....\r\n  }\r\n};\r\n```\r\n\r\nThese boundary conditions are ignored when they are not used but if stencils are split (for whatever reason) and fields need to be updated between those, halo updates and boundary conditions are automatically inserted (if a specification is available, otherwise, a compile-time error is thrown)","created_at":"2018-01-22T11:27:03Z","updated_at":"2018-02-08T23:42:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1f85c023bc096d4100ef7b54b1adaaffd399d920","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"milestone":null,"commits_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls/49/commits","review_comments_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls/49/comments","review_comment_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls/comments{/number}","comments_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/issues/49/comments","statuses_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/statuses/3445f6b03a231d3a71a80ad7b296d48a75821e3e","head":{"label":"twicki:proposal_BC","ref":"proposal_BC","sha":"3445f6b03a231d3a71a80ad7b296d48a75821e3e","user":{"login":"twicki","id":5988437,"avatar_url":"https://avatars3.githubusercontent.com/u/5988437?v=4","gravatar_id":"","url":"https://api.github.com/users/twicki","html_url":"https://github.com/twicki","followers_url":"https://api.github.com/users/twicki/followers","following_url":"https://api.github.com/users/twicki/following{/other_user}","gists_url":"https://api.github.com/users/twicki/gists{/gist_id}","starred_url":"https://api.github.com/users/twicki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/twicki/subscriptions","organizations_url":"https://api.github.com/users/twicki/orgs","repos_url":"https://api.github.com/users/twicki/repos","events_url":"https://api.github.com/users/twicki/events{/privacy}","received_events_url":"https://api.github.com/users/twicki/received_events","type":"User","site_admin":false},"repo":{"id":104907412,"name":"dawn","full_name":"twicki/dawn","owner":{"login":"twicki","id":5988437,"avatar_url":"https://avatars3.githubusercontent.com/u/5988437?v=4","gravatar_id":"","url":"https://api.github.com/users/twicki","html_url":"https://github.com/twicki","followers_url":"https://api.github.com/users/twicki/followers","following_url":"https://api.github.com/users/twicki/following{/other_user}","gists_url":"https://api.github.com/users/twicki/gists{/gist_id}","starred_url":"https://api.github.com/users/twicki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/twicki/subscriptions","organizations_url":"https://api.github.com/users/twicki/orgs","repos_url":"https://api.github.com/users/twicki/repos","events_url":"https://api.github.com/users/twicki/events{/privacy}","received_events_url":"https://api.github.com/users/twicki/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/twicki/dawn","description":"Compiler toolchain to enable generation of high-level DSLs for geophysical fluid dynamics models  ","fork":true,"url":"https://api.github.com/repos/twicki/dawn","forks_url":"https://api.github.com/repos/twicki/dawn/forks","keys_url":"https://api.github.com/repos/twicki/dawn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/twicki/dawn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/twicki/dawn/teams","hooks_url":"https://api.github.com/repos/twicki/dawn/hooks","issue_events_url":"https://api.github.com/repos/twicki/dawn/issues/events{/number}","events_url":"https://api.github.com/repos/twicki/dawn/events","assignees_url":"https://api.github.com/repos/twicki/dawn/assignees{/user}","branches_url":"https://api.github.com/repos/twicki/dawn/branches{/branch}","tags_url":"https://api.github.com/repos/twicki/dawn/tags","blobs_url":"https://api.github.com/repos/twicki/dawn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/twicki/dawn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/twicki/dawn/git/refs{/sha}","trees_url":"https://api.github.com/repos/twicki/dawn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/twicki/dawn/statuses/{sha}","languages_url":"https://api.github.com/repos/twicki/dawn/languages","stargazers_url":"https://api.github.com/repos/twicki/dawn/stargazers","contributors_url":"https://api.github.com/repos/twicki/dawn/contributors","subscribers_url":"https://api.github.com/repos/twicki/dawn/subscribers","subscription_url":"https://api.github.com/repos/twicki/dawn/subscription","commits_url":"https://api.github.com/repos/twicki/dawn/commits{/sha}","git_commits_url":"https://api.github.com/repos/twicki/dawn/git/commits{/sha}","comments_url":"https://api.github.com/repos/twicki/dawn/comments{/number}","issue_comment_url":"https://api.github.com/repos/twicki/dawn/issues/comments{/number}","contents_url":"https://api.github.com/repos/twicki/dawn/contents/{+path}","compare_url":"https://api.github.com/repos/twicki/dawn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/twicki/dawn/merges","archive_url":"https://api.github.com/repos/twicki/dawn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/twicki/dawn/downloads","issues_url":"https://api.github.com/repos/twicki/dawn/issues{/number}","pulls_url":"https://api.github.com/repos/twicki/dawn/pulls{/number}","milestones_url":"https://api.github.com/repos/twicki/dawn/milestones{/number}","notifications_url":"https://api.github.com/repos/twicki/dawn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/twicki/dawn/labels{/name}","releases_url":"https://api.github.com/repos/twicki/dawn/releases{/id}","deployments_url":"https://api.github.com/repos/twicki/dawn/deployments","created_at":"2017-09-26T16:02:55Z","updated_at":"2017-09-26T16:02:57Z","pushed_at":"2018-02-07T15:05:29Z","git_url":"git://github.com/twicki/dawn.git","ssh_url":"git@github.com:twicki/dawn.git","clone_url":"https://github.com/twicki/dawn.git","svn_url":"https://github.com/twicki/dawn","homepage":null,"size":14578,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"MeteoSwiss-APN:master","ref":"master","sha":"75118145a4407dbfa6ead93df612766622766df7","user":{"login":"MeteoSwiss-APN","id":15251199,"avatar_url":"https://avatars0.githubusercontent.com/u/15251199?v=4","gravatar_id":"","url":"https://api.github.com/users/MeteoSwiss-APN","html_url":"https://github.com/MeteoSwiss-APN","followers_url":"https://api.github.com/users/MeteoSwiss-APN/followers","following_url":"https://api.github.com/users/MeteoSwiss-APN/following{/other_user}","gists_url":"https://api.github.com/users/MeteoSwiss-APN/gists{/gist_id}","starred_url":"https://api.github.com/users/MeteoSwiss-APN/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MeteoSwiss-APN/subscriptions","organizations_url":"https://api.github.com/users/MeteoSwiss-APN/orgs","repos_url":"https://api.github.com/users/MeteoSwiss-APN/repos","events_url":"https://api.github.com/users/MeteoSwiss-APN/events{/privacy}","received_events_url":"https://api.github.com/users/MeteoSwiss-APN/received_events","type":"Organization","site_admin":false},"repo":{"id":104239379,"name":"dawn","full_name":"MeteoSwiss-APN/dawn","owner":{"login":"MeteoSwiss-APN","id":15251199,"avatar_url":"https://avatars0.githubusercontent.com/u/15251199?v=4","gravatar_id":"","url":"https://api.github.com/users/MeteoSwiss-APN","html_url":"https://github.com/MeteoSwiss-APN","followers_url":"https://api.github.com/users/MeteoSwiss-APN/followers","following_url":"https://api.github.com/users/MeteoSwiss-APN/following{/other_user}","gists_url":"https://api.github.com/users/MeteoSwiss-APN/gists{/gist_id}","starred_url":"https://api.github.com/users/MeteoSwiss-APN/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MeteoSwiss-APN/subscriptions","organizations_url":"https://api.github.com/users/MeteoSwiss-APN/orgs","repos_url":"https://api.github.com/users/MeteoSwiss-APN/repos","events_url":"https://api.github.com/users/MeteoSwiss-APN/events{/privacy}","received_events_url":"https://api.github.com/users/MeteoSwiss-APN/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/MeteoSwiss-APN/dawn","description":"Compiler toolchain to enable generation of high-level DSLs for geophysical fluid dynamics models  ","fork":false,"url":"https://api.github.com/repos/MeteoSwiss-APN/dawn","forks_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/forks","keys_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/teams","hooks_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/hooks","issue_events_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/issues/events{/number}","events_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/events","assignees_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/assignees{/user}","branches_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/branches{/branch}","tags_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/tags","blobs_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/git/refs{/sha}","trees_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/statuses/{sha}","languages_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/languages","stargazers_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/stargazers","contributors_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/contributors","subscribers_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/subscribers","subscription_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/subscription","commits_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/commits{/sha}","git_commits_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/git/commits{/sha}","comments_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/comments{/number}","issue_comment_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/issues/comments{/number}","contents_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/contents/{+path}","compare_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/merges","archive_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/downloads","issues_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/issues{/number}","pulls_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls{/number}","milestones_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/milestones{/number}","notifications_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/labels{/name}","releases_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/releases{/id}","deployments_url":"https://api.github.com/repos/MeteoSwiss-APN/dawn/deployments","created_at":"2017-09-20T16:17:56Z","updated_at":"2017-09-28T14:23:54Z","pushed_at":"2018-02-08T20:19:41Z","git_url":"git://github.com/MeteoSwiss-APN/dawn.git","ssh_url":"git@github.com:MeteoSwiss-APN/dawn.git","clone_url":"https://github.com/MeteoSwiss-APN/dawn.git","svn_url":"https://github.com/MeteoSwiss-APN/dawn","homepage":null,"size":18727,"stargazers_count":1,"watchers_count":1,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":7,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":3,"open_issues":7,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls/49"},"html":{"href":"https://github.com/MeteoSwiss-APN/dawn/pull/49"},"issue":{"href":"https://api.github.com/repos/MeteoSwiss-APN/dawn/issues/49"},"comments":{"href":"https://api.github.com/repos/MeteoSwiss-APN/dawn/issues/49/comments"},"review_comments":{"href":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls/49/comments"},"review_comment":{"href":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/MeteoSwiss-APN/dawn/pulls/49/commits"},"statuses":{"href":"https://api.github.com/repos/MeteoSwiss-APN/dawn/statuses/3445f6b03a231d3a71a80ad7b296d48a75821e3e"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"cosunae"}}