)]}'
{
  "commit": "32530788d08c53f8d2c8a5f9bd61aa60a23d6e03",
  "tree": "df519f9957eebee9cd40b5a55fac486fca0bce9e",
  "parents": [
    "2569076ff0bf8ffb3938da8b5df7edc4883aa053"
  ],
  "author": {
    "name": "Richard Stebbing",
    "email": "richie.stebbing@gmail.com",
    "time": "Sat Apr 26 07:42:23 2014 +0100"
  },
  "committer": {
    "name": "Keir Mierle",
    "email": "mierle@gmail.com",
    "time": "Mon Apr 28 07:13:09 2014 +0000"
  },
  "message": "Add dynamic_sparsity option.\n\nThe standard sparse normal Cholesky solver assumes a fixed\nsparsity pattern which is useful for a large number of problems\npresented to Ceres. However, some problems are symbolically dense\nbut numerically sparse i.e. each residual is a function of a\nlarge number of parameters but at any given state the residual\nonly depends on a sparse subset of them. For these class of\nproblems it is faster to re-analyse the sparsity pattern of the\njacobian at each iteration of the non-linear optimisation instead\nof including all of the zero entries in the step computation.\n\nThe proposed solution adds the dynamic_sparsity option which can\nbe used with SPARSE_NORMAL_CHOLESKY. A\nDynamicCompressedRowSparseMatrix type (which extends\nCompressedRowSparseMatrix) has been introduced which allows\ndynamic addition and removal of elements. A Finalize method is\nprovided which then consolidates the matrix so that it can be\nused in place of a regular CompressedRowSparseMatrix. An\nassociated jacobian writer has also been provided.\n\nChanges that were required to make this extension were adding the\nSetMaxNumNonZeros method to CompressedRowSparseMatrix and adding\na JacobianFinalizer template parameter to the ProgramEvaluator.\n\nChange-Id: Ia5a8a9523fdae8d5b027bc35e70b4611ec2a8d01\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f388146873ed942b1a583b91e20665f340fca946",
      "old_mode": 33188,
      "old_path": "examples/CMakeLists.txt",
      "new_id": "60e464dad9444a92046ee3ee4a41e63227e8ae51",
      "new_mode": 33188,
      "new_path": "examples/CMakeLists.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a5bbe0206bf39d65c03887f5681a187618cbc330",
      "new_mode": 33188,
      "new_path": "examples/ellipse_approximation.cc"
    },
    {
      "type": "modify",
      "old_id": "c5bfadc220cf0316b27055e8d860e660edefc5a8",
      "old_mode": 33188,
      "old_path": "include/ceres/solver.h",
      "new_id": "3d63951e02365b48c4d3ad7c4ae8ac493ff87e66",
      "new_mode": 33188,
      "new_path": "include/ceres/solver.h"
    },
    {
      "type": "modify",
      "old_id": "87faf2b673f7a2fffa02755c23539881d663103f",
      "old_mode": 33188,
      "old_path": "internal/ceres/CMakeLists.txt",
      "new_id": "a9ec1c28d0ad85bc75f7eb32d91b3cabe84d8ce6",
      "new_mode": 33188,
      "new_path": "internal/ceres/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "bbadb7728056cd326f64f3e1dc984cb672e36296",
      "old_mode": 33188,
      "old_path": "internal/ceres/compressed_row_jacobian_writer.cc",
      "new_id": "ed8db14c99aed876de142a42a2a4107060565f7d",
      "new_mode": 33188,
      "new_path": "internal/ceres/compressed_row_jacobian_writer.cc"
    },
    {
      "type": "modify",
      "old_id": "c103165eaf1312b4c2e2d75e1542fa5bc8efa378",
      "old_mode": 33188,
      "old_path": "internal/ceres/compressed_row_jacobian_writer.h",
      "new_id": "935e6500cf585e11d6adf6eb6b46e86597c36b1b",
      "new_mode": 33188,
      "new_path": "internal/ceres/compressed_row_jacobian_writer.h"
    },
    {
      "type": "modify",
      "old_id": "bef98d6fa4b6dcb37329c7e91c06dad3649ed028",
      "old_mode": 33188,
      "old_path": "internal/ceres/compressed_row_sparse_matrix.cc",
      "new_id": "7993ed6917a570b9953444996284c17b0d8f145d",
      "new_mode": 33188,
      "new_path": "internal/ceres/compressed_row_sparse_matrix.cc"
    },
    {
      "type": "modify",
      "old_id": "06b86896f2344c8897abf49df3a774266208a1aa",
      "old_mode": 33188,
      "old_path": "internal/ceres/compressed_row_sparse_matrix.h",
      "new_id": "a0ba7eeb6ce38139085634dede5e79b83106ff74",
      "new_mode": 33188,
      "new_path": "internal/ceres/compressed_row_sparse_matrix.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5e6b0d84510a974716733f1312f7860cf8c2d1e9",
      "new_mode": 33188,
      "new_path": "internal/ceres/dynamic_compressed_row_finalizer.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2f01617749d8a10cc39adaf53640709b2b6cc963",
      "new_mode": 33188,
      "new_path": "internal/ceres/dynamic_compressed_row_jacobian_writer.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "df9581b145d48419096e0539aed6edf9b3b1c877",
      "new_mode": 33188,
      "new_path": "internal/ceres/dynamic_compressed_row_jacobian_writer.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f285d52a342d21b024b62c949b3c6690a1bfcad5",
      "new_mode": 33188,
      "new_path": "internal/ceres/dynamic_compressed_row_sparse_matrix.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7a89a708658c8bf0ab61d1628c4905435be19eeb",
      "new_mode": 33188,
      "new_path": "internal/ceres/dynamic_compressed_row_sparse_matrix.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "03bfcb6091f9d7c2a50212eb551c1d1591481a0a",
      "new_mode": 33188,
      "new_path": "internal/ceres/dynamic_compressed_row_sparse_matrix_test.cc"
    },
    {
      "type": "modify",
      "old_id": "31a417689e853e037a4d12c3e27c07681cf58a8f",
      "old_mode": 33188,
      "old_path": "internal/ceres/evaluator.cc",
      "new_id": "c94c62c29b500b2146c8490b889cb64d3e42d8d4",
      "new_mode": 33188,
      "new_path": "internal/ceres/evaluator.cc"
    },
    {
      "type": "modify",
      "old_id": "3d2546224b8232afdaf8b3c8106099c5d56b9e31",
      "old_mode": 33188,
      "old_path": "internal/ceres/evaluator.h",
      "new_id": "8fc60b87869c6d729ef2b590d926d533b0c737ce",
      "new_mode": 33188,
      "new_path": "internal/ceres/evaluator.h"
    },
    {
      "type": "modify",
      "old_id": "ea2450466c5fd32cd1cd6ebce8f07d14b4c1a2d3",
      "old_mode": 33188,
      "old_path": "internal/ceres/evaluator_test.cc",
      "new_id": "c0de3fc813957467c2751a4c9053adfa5feae563",
      "new_mode": 33188,
      "new_path": "internal/ceres/evaluator_test.cc"
    },
    {
      "type": "modify",
      "old_id": "8737c7cab5399e8b4484f97065415acdbc27c8cb",
      "old_mode": 33188,
      "old_path": "internal/ceres/linear_solver.h",
      "new_id": "f091bc5b187572078a6ef61dbc33793c1e84b50a",
      "new_mode": 33188,
      "new_path": "internal/ceres/linear_solver.h"
    },
    {
      "type": "modify",
      "old_id": "8aa2a3977c4f5f5e0fa077c375a7d8d2f462546b",
      "old_mode": 33188,
      "old_path": "internal/ceres/program_evaluator.h",
      "new_id": "a06dc8c51adcaa7aafd654e2392bd97774c0391a",
      "new_mode": 33188,
      "new_path": "internal/ceres/program_evaluator.h"
    },
    {
      "type": "modify",
      "old_id": "e85ffbf1a447ba7e055360ee3a9f34d97e1b427b",
      "old_mode": 33188,
      "old_path": "internal/ceres/solver_impl.cc",
      "new_id": "6ae2c90cddebb95b808e1ec0ade567a127d95e59",
      "new_mode": 33188,
      "new_path": "internal/ceres/solver_impl.cc"
    },
    {
      "type": "modify",
      "old_id": "880adf7ebca60573c15740a9272affcf1beba11f",
      "old_mode": 33188,
      "old_path": "internal/ceres/sparse_normal_cholesky_solver.cc",
      "new_id": "07537e3d1ec688dd4f51faccc7f1d2ef41cacc96",
      "new_mode": 33188,
      "new_path": "internal/ceres/sparse_normal_cholesky_solver.cc"
    },
    {
      "type": "modify",
      "old_id": "adca08a507f8b56b628441e3c16019ae99643057",
      "old_mode": 33188,
      "old_path": "internal/ceres/sparse_normal_cholesky_solver.h",
      "new_id": "ea91534b1babeade52bf958a73bd899e7e7541ce",
      "new_mode": 33188,
      "new_path": "internal/ceres/sparse_normal_cholesky_solver.h"
    },
    {
      "type": "modify",
      "old_id": "624db68bbdeb949fd10447ae8aac8c67a331aa16",
      "old_mode": 33188,
      "old_path": "internal/ceres/unsymmetric_linear_solver_test.cc",
      "new_id": "412e611b52ee605359851c40d14cc32d8c108a8f",
      "new_mode": 33188,
      "new_path": "internal/ceres/unsymmetric_linear_solver_test.cc"
    }
  ]
}
