{"action":"created","comment":{"url":"https://api.github.com/repos/dealii/dealii/pulls/comments/28307350","id":28307350,"diff_hunk":"@@ -0,0 +1,1175 @@\n+// ---------------------------------------------------------------------\n+//\n+// Copyright (C) 2010 - 2015 by the deal.II authors\n+//\n+// This file is part of the deal.II library.\n+//\n+// The deal.II library is free software; you can use it, redistribute\n+// it, and/or modify it under the terms of the GNU Lesser General\n+// Public License as published by the Free Software Foundation; either\n+// version 2.1 of the License, or (at your option) any later version.\n+// The full text of the license can be found in the file LICENSE at\n+// the top level of the deal.II distribution.\n+//\n+// ---------------------------------------------------------------------\n+\n+#ifndef __deal2__linear_operator_h\n+#define __deal2__linear_operator_h\n+\n+#include <deal.II/base/config.h>\n+#include <deal.II/base/exceptions.h>\n+#include <deal.II/lac/vector_memory.h>\n+\n+#ifdef DEAL_II_WITH_CXX11\n+\n+#include <functional>\n+#include <array>\n+\n+DEAL_II_NAMESPACE_OPEN\n+\n+// Forward declarations:\n+\n+template <typename Number> class Vector;\n+template <typename Number> class BlockVector;\n+\n+template <typename Range, typename Domain> class LinearOperator;\n+\n+template <typename Range = Vector<double>,\n+          typename Domain = Range,\n+          typename Exemplar,\n+          typename Matrix>\n+LinearOperator<Range, Domain> linop (const Exemplar &, const Matrix &);\n+\n+template <typename Range = Vector<double>,\n+          typename Domain = Range,\n+          typename Matrix>\n+LinearOperator<Range, Domain> linop (const Matrix &);\n+\n+/**\n+ * A class to store the abstract concept of a linear operator.\n+ *\n+ * The class essentially consists of <code>std::function</code> objects\n+ * that store the knowledge of how to apply the linear operator by\n+ * implementing the abstract @ref Matrix interface:\n+ * @code\n+ * std::function<const void(Range &, const Domain &)> vmult;\n+ * std::function<const void(Range &, const Domain &)> vmult_add;\n+ * std::function<const void(Domain &, const Range &)> Tvmult;\n+ * std::function<const void(Domain &, const Range &)> Tvmult_add;\n+ * @endcode\n+ *\n+ * But, in contrast to a usual matrix object, the domain and range of the\n+ * linear operator are also bound to the LinearOperator class on the type\n+ * level. Because of this, <code>LinearOperator <@tref Range, @tref\n+ * Domain></code> has two additional function objects\n+ * @code\n+ *   std::function<void(Range &, bool)> reinit_range_vector;\n+ *   std::function<void(Domain &, bool)> reinit_domain_vector;\n+ * @endcode\n+ * that store the knowledge how to initialize (resize + internal data structures)\n+ * an arbitrary vector of the @tref Range and @tref Domain space.\n+ *\n+ * The primary purpose of this class is to provide syntactic sugar for\n+ * complex matrix-vector operations and free the user from having to\n+ * create, set up and handle intermediate storage locations by hand.\n+ *\n+ * As an example consider the operation $(A+k\\,B)\\,C$, where $A$, $B$ and\n+ * $C$ denote (possible different) matrices. In order to construct a\n+ * LinearOperator <code>op</code> that stores the knowledge of this\n+ * operation, one can write:\n+ *\n+ * @code\n+ * dealii::SparseMatrix<double> A, B, C;\n+ * const double k = ...;\n+ *\n+ * // Setup and assembly of matrices\n+ *\n+ * const auto op_a = linop(A);\n+ * const auto op_b = linop(B);\n+ * const auto op_c = linop(C);\n+ *\n+ * const auto op = (op_a + k * op_b) * op_c;\n+ * @endcode\n+ *\n+ * @note: This class is only available if deal.II was configured with C++11\n+ * support, i.e., if <code>DEAL_II_WITH_CXX11</code> is enabled during\n+ * cmake configure.\n+ *\n+ * @author Luca Heltai, Matthias Maier, 2015\n+ */\n+template <typename Range, typename Domain> class LinearOperator\n+{\n+public:\n+\n+  /**\n+   * Create an empty LinearOperator object. All <code>std::function</code>\n+   * member objects are initialized with default variants that throw an\n+   * exception upon invocation.\n+   */\n+  LinearOperator ()\n+  {\n+    vmult = [](Range &, const Domain &)\n+    {\n+      Assert(false, ExcMessage(\"Uninitialized LinearOperator<Range, \"\n+                               \"Domain>::vmult called\"));\n+    };\n+\n+    vmult_add = [](Range &, const Domain &)\n+    {\n+      Assert(false, ExcMessage(\"Uninitialized LinearOperator<Range, \"\n+                               \"Domain>::vmult_add called\"));\n+    };\n+\n+    Tvmult = [](Domain &, const Range &)\n+    {\n+      Assert(false, ExcMessage(\"Uninitialized LinearOperator<Range, \"\n+                               \"Domain>::Tvmult called\"));\n+    };\n+\n+    Tvmult_add = [](Domain &, const Range &)\n+    {\n+      Assert(false, ExcMessage(\"Uninitialized LinearOperator<Range, \"\n+                               \"Domain>::Tvmult_add called\"));\n+    };\n+\n+    reinit_range_vector = [](Range &, bool)\n+    {\n+      Assert(false, ExcMessage(\"Uninitialized LinearOperator<Range, \"\n+                               \"Domain>::reinit_range_vector method called\"));\n+    };\n+\n+    reinit_domain_vector = [](Domain &, bool)\n+    {\n+      Assert(false, ExcMessage(\"Uninitialized LinearOperator<Range, \"\n+                               \"Domain>::reinit_domain_vector method called\"));\n+    };\n+  }\n+\n+  /**\n+   * Create a LinearOperator object from an object @p op for which the\n+   * conversion function <code>linop</code> is defined.\n+   */\n+  template<typename Op>\n+  LinearOperator (const Op &op)\n+  {\n+    *this = linop<Range, Domain, Op>(op);\n+  }\n+\n+  /**\n+   * Copy assignment operator for an object @p op for which the conversion\n+   * function <code>linop</code> is defined.\n+   */\n+  template <typename Op>\n+  LinearOperator<Range, Domain> &operator=(const Op &op)\n+  {\n+    return *this = linop<Range, Domain, Op>(op);\n+  }\n+\n+  /**\n+   * Application of the LinearOperator object to a vector u of the @tref\n+   * Domain space giving a vector v of the @tref Range space.\n+   */\n+  std::function<const void(Range &v, const Domain &u)> vmult;\n+\n+  /**\n+   * Application of the LinearOperator object to a vector u of the @tref\n+   * Domain space. The result is added to the vector v.\n+   */\n+  std::function<const void(Range &v, const Domain &u)> vmult_add;\n+\n+  /**\n+   * Application of the transpose LinearOperator object to a vector u of\n+   * the @tref Range space giving a vector v of the @tref Domain\n+   * space.\n+   */\n+  std::function<const void(Domain &v, const Range &u)> Tvmult;\n+\n+  /**\n+   * Application of the transpose LinearOperator object to a vector @p u of\n+   * the @tref Range space.The result is added to the vector @p v.\n+   */\n+  std::function<const void(Domain &v, const Range &u)> Tvmult_add;\n+\n+  /**\n+   * Initializes a vector v of the Range space to be directly usable\n+   * as the destination parameter in an application of vmult. Similar to\n+   * the reinit functions of the vector classes, the boolean determines\n+   * whether a fast initalization is done, i.e., if it is set to false the\n+   * content of the vector is set to 0.\n+   */\n+  std::function<void(Range &v, bool fast)> reinit_range_vector;\n+\n+  /**\n+   * Initializes a vector of the Domain space to be directly usable as the\n+   * source parameter in an application of vmult. Similar to the reinit\n+   * functions of the vector classes, the boolean determines whether a fast\n+   * initalization is done, i.e., if it is set to false the content of the\n+   * vector is set to 0.\n+   */\n+  std::function<void(Domain &v, bool fast)> reinit_domain_vector;\n+\n+  /**\n+   * A memory object for vectors of @tref Range space used for intermediate\n+   * storage during computations in @ref vmult, etc.\n+   */\n+  mutable GrowingVectorMemory<Range> range_vector_memory;","path":"include/deal.II/lac/linear_operator.h","position":226,"original_position":215,"commit_id":"d9bd0e9eff4b83d459446d03726334da8a647708","original_commit_id":"25f9db64e4a4a0ee7c784c7aec0ca0ff97f4804c","user":{"login":"tamiko","id":3432917,"avatar_url":"https://avatars.githubusercontent.com/u/3432917?v=3","gravatar_id":"","url":"https://api.github.com/users/tamiko","html_url":"https://github.com/tamiko","followers_url":"https://api.github.com/users/tamiko/followers","following_url":"https://api.github.com/users/tamiko/following{/other_user}","gists_url":"https://api.github.com/users/tamiko/gists{/gist_id}","starred_url":"https://api.github.com/users/tamiko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tamiko/subscriptions","organizations_url":"https://api.github.com/users/tamiko/orgs","repos_url":"https://api.github.com/users/tamiko/repos","events_url":"https://api.github.com/users/tamiko/events{/privacy}","received_events_url":"https://api.github.com/users/tamiko/received_events","type":"User","site_admin":false},"body":"*ugh* Indeed, the Pool class is static.","created_at":"2015-04-14T08:06:57Z","updated_at":"2015-04-14T08:06:57Z","html_url":"https://github.com/dealii/dealii/pull/750#discussion_r28307350","pull_request_url":"https://api.github.com/repos/dealii/dealii/pulls/750","_links":{"self":{"href":"https://api.github.com/repos/dealii/dealii/pulls/comments/28307350"},"html":{"href":"https://github.com/dealii/dealii/pull/750#discussion_r28307350"},"pull_request":{"href":"https://api.github.com/repos/dealii/dealii/pulls/750"}}},"pull_request":{"url":"https://api.github.com/repos/dealii/dealii/pulls/750","id":32859035,"html_url":"https://github.com/dealii/dealii/pull/750","diff_url":"https://github.com/dealii/dealii/pull/750.diff","patch_url":"https://github.com/dealii/dealii/pull/750.patch","issue_url":"https://api.github.com/repos/dealii/dealii/issues/750","number":750,"state":"open","locked":false,"title":"Implement a LinearOperator class","user":{"login":"tamiko","id":3432917,"avatar_url":"https://avatars.githubusercontent.com/u/3432917?v=3","gravatar_id":"","url":"https://api.github.com/users/tamiko","html_url":"https://github.com/tamiko","followers_url":"https://api.github.com/users/tamiko/followers","following_url":"https://api.github.com/users/tamiko/following{/other_user}","gists_url":"https://api.github.com/users/tamiko/gists{/gist_id}","starred_url":"https://api.github.com/users/tamiko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tamiko/subscriptions","organizations_url":"https://api.github.com/users/tamiko/orgs","repos_url":"https://api.github.com/users/tamiko/repos","events_url":"https://api.github.com/users/tamiko/events{/privacy}","received_events_url":"https://api.github.com/users/tamiko/received_events","type":"User","site_admin":false},"body":"This pull requests introduces a templated <code>LinearOperator</code> class\r\nthat stores the concept of a linear operator. The class essentially consists of\r\n4 <code>std::function</code> objects implementing the abstract Matrix\r\ninterface:\r\n```\r\n  std::function<const void(Range &, const Domain &)> vmult;\r\n  std::function<const void(Range &, const Domain &)> vmult_add;\r\n  std::function<const void(Domain &, const Range &)> Tvmult;\r\n  std::function<const void(Domain &, const Range &)> Tvmult_add;\r\n```\r\n\r\nBut, in contrast to a usual matrix object, the domain and range of the linear\r\noperator are also bound to the <code>LinearOperator</code> class on the type\r\nlevel. Because of this, the <code>LinearOperator<Range, Domain></code> has two\r\nadditional function objects\r\n```\r\n  std::function<void(Range &, bool)> reinit_range_vector;\r\n  std::function<void(Domain &, bool)> reinit_domain_vector;\r\n```\r\nthat store the knowledge how to initialize (resize + internal data structures)\r\nan arbitrary vector of the Range and Domain space.\r\n\r\n[<i>Note: Such reinit functions are not part of the matrix interface because\r\nthose usually have templated <code>vmult</code> (etc.) functions making it\r\narbitrarily difficult to know which vectors they can be applied to --- end\r\nnote</i>]\r\n\r\n\r\nFurther, a templated <code>linop</code> function is provided that encapsulates\r\ngeneric matrix objects that act on compatible vectors into a\r\n<code>LinearOperator</code>. The necessary low level functionality is\r\nimplemented for all dealii matrix and vector types and the ones found in\r\n<code>TrilinosWrapper::</code>.\r\n\r\n[<i>Note: This is done with the help of a <code>ReinitDomainFactory</code> and\r\n<code>ReinitRangeFactory</code> class. That has a general implementation for\r\nsimple vector and matrix types and specializations for more complex vectors\r\nthat need, e.g., an <code>Epetra_Map</code> supplied to their\r\n<code>reinit</code> functions. --- end note</i>]\r\n\r\n<b>TODO (for future pull-requests):</b>\r\n\r\n - Specialize the <code>ReinitRangeFactor</code> and\r\n   <code>ReinitDomainFactory</code> classes for <code>PETScWrappers::</code> and\r\n   <code>parallel::distributed::Vector</code>","created_at":"2015-04-08T13:23:03Z","updated_at":"2015-04-14T08:06:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b5b00d8ab9313d16d21343a7b8866c0240eda675","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/dealii/dealii/pulls/750/commits","review_comments_url":"https://api.github.com/repos/dealii/dealii/pulls/750/comments","review_comment_url":"https://api.github.com/repos/dealii/dealii/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dealii/dealii/issues/750/comments","statuses_url":"https://api.github.com/repos/dealii/dealii/statuses/d9bd0e9eff4b83d459446d03726334da8a647708","head":{"label":"tamiko:linear_operator","ref":"linear_operator","sha":"d9bd0e9eff4b83d459446d03726334da8a647708","user":{"login":"tamiko","id":3432917,"avatar_url":"https://avatars.githubusercontent.com/u/3432917?v=3","gravatar_id":"","url":"https://api.github.com/users/tamiko","html_url":"https://github.com/tamiko","followers_url":"https://api.github.com/users/tamiko/followers","following_url":"https://api.github.com/users/tamiko/following{/other_user}","gists_url":"https://api.github.com/users/tamiko/gists{/gist_id}","starred_url":"https://api.github.com/users/tamiko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tamiko/subscriptions","organizations_url":"https://api.github.com/users/tamiko/orgs","repos_url":"https://api.github.com/users/tamiko/repos","events_url":"https://api.github.com/users/tamiko/events{/privacy}","received_events_url":"https://api.github.com/users/tamiko/received_events","type":"User","site_admin":false},"repo":{"id":22046756,"name":"dealii","full_name":"tamiko/dealii","owner":{"login":"tamiko","id":3432917,"avatar_url":"https://avatars.githubusercontent.com/u/3432917?v=3","gravatar_id":"","url":"https://api.github.com/users/tamiko","html_url":"https://github.com/tamiko","followers_url":"https://api.github.com/users/tamiko/followers","following_url":"https://api.github.com/users/tamiko/following{/other_user}","gists_url":"https://api.github.com/users/tamiko/gists{/gist_id}","starred_url":"https://api.github.com/users/tamiko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tamiko/subscriptions","organizations_url":"https://api.github.com/users/tamiko/orgs","repos_url":"https://api.github.com/users/tamiko/repos","events_url":"https://api.github.com/users/tamiko/events{/privacy}","received_events_url":"https://api.github.com/users/tamiko/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/tamiko/dealii","description":"","fork":true,"url":"https://api.github.com/repos/tamiko/dealii","forks_url":"https://api.github.com/repos/tamiko/dealii/forks","keys_url":"https://api.github.com/repos/tamiko/dealii/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tamiko/dealii/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tamiko/dealii/teams","hooks_url":"https://api.github.com/repos/tamiko/dealii/hooks","issue_events_url":"https://api.github.com/repos/tamiko/dealii/issues/events{/number}","events_url":"https://api.github.com/repos/tamiko/dealii/events","assignees_url":"https://api.github.com/repos/tamiko/dealii/assignees{/user}","branches_url":"https://api.github.com/repos/tamiko/dealii/branches{/branch}","tags_url":"https://api.github.com/repos/tamiko/dealii/tags","blobs_url":"https://api.github.com/repos/tamiko/dealii/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tamiko/dealii/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tamiko/dealii/git/refs{/sha}","trees_url":"https://api.github.com/repos/tamiko/dealii/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tamiko/dealii/statuses/{sha}","languages_url":"https://api.github.com/repos/tamiko/dealii/languages","stargazers_url":"https://api.github.com/repos/tamiko/dealii/stargazers","contributors_url":"https://api.github.com/repos/tamiko/dealii/contributors","subscribers_url":"https://api.github.com/repos/tamiko/dealii/subscribers","subscription_url":"https://api.github.com/repos/tamiko/dealii/subscription","commits_url":"https://api.github.com/repos/tamiko/dealii/commits{/sha}","git_commits_url":"https://api.github.com/repos/tamiko/dealii/git/commits{/sha}","comments_url":"https://api.github.com/repos/tamiko/dealii/comments{/number}","issue_comment_url":"https://api.github.com/repos/tamiko/dealii/issues/comments{/number}","contents_url":"https://api.github.com/repos/tamiko/dealii/contents/{+path}","compare_url":"https://api.github.com/repos/tamiko/dealii/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tamiko/dealii/merges","archive_url":"https://api.github.com/repos/tamiko/dealii/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tamiko/dealii/downloads","issues_url":"https://api.github.com/repos/tamiko/dealii/issues{/number}","pulls_url":"https://api.github.com/repos/tamiko/dealii/pulls{/number}","milestones_url":"https://api.github.com/repos/tamiko/dealii/milestones{/number}","notifications_url":"https://api.github.com/repos/tamiko/dealii/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tamiko/dealii/labels{/name}","releases_url":"https://api.github.com/repos/tamiko/dealii/releases{/id}","created_at":"2014-07-21T00:21:17Z","updated_at":"2015-04-13T17:36:47Z","pushed_at":"2015-04-14T07:58:04Z","git_url":"git://github.com/tamiko/dealii.git","ssh_url":"git@github.com:tamiko/dealii.git","clone_url":"https://github.com/tamiko/dealii.git","svn_url":"https://github.com/tamiko/dealii","homepage":null,"size":112730,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dealii:master","ref":"master","sha":"efdacd1efc2f0fe91bbaecde0511a0b2c78ff227","user":{"login":"dealii","id":7506070,"avatar_url":"https://avatars.githubusercontent.com/u/7506070?v=3","gravatar_id":"","url":"https://api.github.com/users/dealii","html_url":"https://github.com/dealii","followers_url":"https://api.github.com/users/dealii/followers","following_url":"https://api.github.com/users/dealii/following{/other_user}","gists_url":"https://api.github.com/users/dealii/gists{/gist_id}","starred_url":"https://api.github.com/users/dealii/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dealii/subscriptions","organizations_url":"https://api.github.com/users/dealii/orgs","repos_url":"https://api.github.com/users/dealii/repos","events_url":"https://api.github.com/users/dealii/events{/privacy}","received_events_url":"https://api.github.com/users/dealii/received_events","type":"Organization","site_admin":false},"repo":{"id":21943980,"name":"dealii","full_name":"dealii/dealii","owner":{"login":"dealii","id":7506070,"avatar_url":"https://avatars.githubusercontent.com/u/7506070?v=3","gravatar_id":"","url":"https://api.github.com/users/dealii","html_url":"https://github.com/dealii","followers_url":"https://api.github.com/users/dealii/followers","following_url":"https://api.github.com/users/dealii/following{/other_user}","gists_url":"https://api.github.com/users/dealii/gists{/gist_id}","starred_url":"https://api.github.com/users/dealii/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dealii/subscriptions","organizations_url":"https://api.github.com/users/dealii/orgs","repos_url":"https://api.github.com/users/dealii/repos","events_url":"https://api.github.com/users/dealii/events{/privacy}","received_events_url":"https://api.github.com/users/dealii/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dealii/dealii","description":"The development repository for the deal.II finite element library.","fork":false,"url":"https://api.github.com/repos/dealii/dealii","forks_url":"https://api.github.com/repos/dealii/dealii/forks","keys_url":"https://api.github.com/repos/dealii/dealii/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dealii/dealii/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dealii/dealii/teams","hooks_url":"https://api.github.com/repos/dealii/dealii/hooks","issue_events_url":"https://api.github.com/repos/dealii/dealii/issues/events{/number}","events_url":"https://api.github.com/repos/dealii/dealii/events","assignees_url":"https://api.github.com/repos/dealii/dealii/assignees{/user}","branches_url":"https://api.github.com/repos/dealii/dealii/branches{/branch}","tags_url":"https://api.github.com/repos/dealii/dealii/tags","blobs_url":"https://api.github.com/repos/dealii/dealii/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dealii/dealii/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dealii/dealii/git/refs{/sha}","trees_url":"https://api.github.com/repos/dealii/dealii/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dealii/dealii/statuses/{sha}","languages_url":"https://api.github.com/repos/dealii/dealii/languages","stargazers_url":"https://api.github.com/repos/dealii/dealii/stargazers","contributors_url":"https://api.github.com/repos/dealii/dealii/contributors","subscribers_url":"https://api.github.com/repos/dealii/dealii/subscribers","subscription_url":"https://api.github.com/repos/dealii/dealii/subscription","commits_url":"https://api.github.com/repos/dealii/dealii/commits{/sha}","git_commits_url":"https://api.github.com/repos/dealii/dealii/git/commits{/sha}","comments_url":"https://api.github.com/repos/dealii/dealii/comments{/number}","issue_comment_url":"https://api.github.com/repos/dealii/dealii/issues/comments{/number}","contents_url":"https://api.github.com/repos/dealii/dealii/contents/{+path}","compare_url":"https://api.github.com/repos/dealii/dealii/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dealii/dealii/merges","archive_url":"https://api.github.com/repos/dealii/dealii/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dealii/dealii/downloads","issues_url":"https://api.github.com/repos/dealii/dealii/issues{/number}","pulls_url":"https://api.github.com/repos/dealii/dealii/pulls{/number}","milestones_url":"https://api.github.com/repos/dealii/dealii/milestones{/number}","notifications_url":"https://api.github.com/repos/dealii/dealii/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dealii/dealii/labels{/name}","releases_url":"https://api.github.com/repos/dealii/dealii/releases{/id}","created_at":"2014-07-17T14:00:26Z","updated_at":"2015-04-14T06:48:32Z","pushed_at":"2015-04-14T06:49:03Z","git_url":"git://github.com/dealii/dealii.git","ssh_url":"git@github.com:dealii/dealii.git","clone_url":"https://github.com/dealii/dealii.git","svn_url":"https://github.com/dealii/dealii","homepage":"http://www.dealii.org/","size":141273,"stargazers_count":50,"watchers_count":50,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":71,"mirror_url":null,"open_issues_count":86,"forks":71,"open_issues":86,"watchers":50,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dealii/dealii/pulls/750"},"html":{"href":"https://github.com/dealii/dealii/pull/750"},"issue":{"href":"https://api.github.com/repos/dealii/dealii/issues/750"},"comments":{"href":"https://api.github.com/repos/dealii/dealii/issues/750/comments"},"review_comments":{"href":"https://api.github.com/repos/dealii/dealii/pulls/750/comments"},"review_comment":{"href":"https://api.github.com/repos/dealii/dealii/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dealii/dealii/pulls/750/commits"},"statuses":{"href":"https://api.github.com/repos/dealii/dealii/statuses/d9bd0e9eff4b83d459446d03726334da8a647708"}}}}