)]}'
{
  "commit": "1da72ac39e098f477601953784ee3467a593fe56",
  "tree": "ca524f2664f250e5c994663840d386ea09633601",
  "parents": [
    "f62dccdb37f2104856c621bce7fd79e7c92d5a9b"
  ],
  "author": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Mon Aug 08 11:42:49 2022 -0700"
  },
  "committer": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Tue Aug 09 13:33:08 2022 +0000"
  },
  "message": "Refactor ConjugateGradientsSolver\n\n1. Convert it from a class to a template function. Where the\n   template parameter is \"DenseVectorType\". This allows us\n   to have a single implementation of Conjugate Gradients\n   without worrying about where the matrix and the vectors\n   are stored or what their internal representation is.\n\n   For the case of CPU based vectors, we abstract operations\n   on Eigen vectors using eigen_vector_ops.\n2. Introduce ConjugateGradientsLinearOperator which is\n   templated on DenseVectorType. It is the matrix vector\n   multiplication abstraction.\n3. Port the tests and all usages of ConjugateGradientsSolver\n   to this new implementation.\n4. Introduce Eigen::Vector based RightMultiply and LeftMultiply\n   methods into LinearOperator which by default delete to the\n   bare pointer based interfaces.\n5. Add an identity preconditioner.\n\nThese changes are being made in preparation for adding a CUDA\nbased CGNR solver.\n\nChange-Id: I9da36dc6c131856dd1a4aa7e645aaf12d25dd79b\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ea21df285e250f9ce037682ec801450b09b437b6",
      "old_mode": 33188,
      "old_path": "internal/ceres/CMakeLists.txt",
      "new_id": "e4ef4c02187b3426079a2cc6ae1b2b4921007bc1",
      "new_mode": 33188,
      "new_path": "internal/ceres/CMakeLists.txt"
    },
    {
      "type": "delete",
      "old_id": "4e47aff15d95594b77bf625f3b0213f6b784d989",
      "old_mode": 33188,
      "old_path": "internal/ceres/cgnr_linear_operator.h",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "12e2ef9a5206b8be5c413c6850bc8f4323e89735",
      "old_mode": 33188,
      "old_path": "internal/ceres/cgnr_solver.cc",
      "new_id": "f79b897e3c837607915c5b2655d9a46893c94fc0",
      "new_mode": 33188,
      "new_path": "internal/ceres/cgnr_solver.cc"
    },
    {
      "type": "modify",
      "old_id": "119f83841380fe8eae17c6220c9ca1dc8cbafd8d",
      "old_mode": 33188,
      "old_path": "internal/ceres/cgnr_solver.h",
      "new_id": "698229658f2412d6c0e23572233a8089efa4fc86",
      "new_mode": 33188,
      "new_path": "internal/ceres/cgnr_solver.h"
    },
    {
      "type": "delete",
      "old_id": "2a0c3ab22852c07617f2bff8767dc64b0fbe0130",
      "old_mode": 33188,
      "old_path": "internal/ceres/conjugate_gradients_solver.cc",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "c5efac734bc391eb3602f5d35e33adca6a73a7a9",
      "old_mode": 33188,
      "old_path": "internal/ceres/conjugate_gradients_solver.h",
      "new_id": "6254d2cb37831a61fd075472384e180f2d776d8a",
      "new_mode": 33188,
      "new_path": "internal/ceres/conjugate_gradients_solver.h"
    },
    {
      "type": "modify",
      "old_id": "b27fee066a3738d72bd783b5a781a30d16394a9f",
      "old_mode": 33188,
      "old_path": "internal/ceres/conjugate_gradients_solver_test.cc",
      "new_id": "a01dfc9480684606b4b3cd1c2b3f7b159f46fcf6",
      "new_mode": 33188,
      "new_path": "internal/ceres/conjugate_gradients_solver_test.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5bcf49db449d5ccb3ce2baa9d3164a457e749ea7",
      "new_mode": 33188,
      "new_path": "internal/ceres/eigen_vector_ops.h"
    },
    {
      "type": "modify",
      "old_id": "9cacf0b189890d80d88fb2414a637be79c1f6aab",
      "old_mode": 33188,
      "old_path": "internal/ceres/iterative_schur_complement_solver.cc",
      "new_id": "0d0daaacb17e78c2c446f4fe7985be02cf5c9634",
      "new_mode": 33188,
      "new_path": "internal/ceres/iterative_schur_complement_solver.cc"
    },
    {
      "type": "modify",
      "old_id": "f8f2208af298f5aed618c8258a52e75d1e3f75d4",
      "old_mode": 33188,
      "old_path": "internal/ceres/linear_operator.h",
      "new_id": "cab87e7aaa2479715090426db511423021efb5db",
      "new_mode": 33188,
      "new_path": "internal/ceres/linear_operator.h"
    },
    {
      "type": "modify",
      "old_id": "68b575f6f499c4c8debacffc8339d8bb9f6842ee",
      "old_mode": 33188,
      "old_path": "internal/ceres/preconditioner.h",
      "new_id": "75613fb50ef60dcf6e41b1a776b3e7a8af3629af",
      "new_mode": 33188,
      "new_path": "internal/ceres/preconditioner.h"
    },
    {
      "type": "modify",
      "old_id": "28e6a5d9bd05bd30d24788530788e2ad57180f22",
      "old_mode": 33188,
      "old_path": "internal/ceres/schur_complement_solver.cc",
      "new_id": "da52b7840a013710be57d6592379a3c6eeac1c35",
      "new_mode": 33188,
      "new_path": "internal/ceres/schur_complement_solver.cc"
    },
    {
      "type": "modify",
      "old_id": "cbccc75afeff5ca7ee7fa27d824193454b04d774",
      "old_mode": 33188,
      "old_path": "internal/ceres/schur_complement_solver.h",
      "new_id": "4fde69cb5b72f7a0d8a972058275d87a304c00af",
      "new_mode": 33188,
      "new_path": "internal/ceres/schur_complement_solver.h"
    }
  ]
}
