)]}'
{
  "commit": "04938efe4bedec112083c5ceb227ba004f96bd01",
  "tree": "cc66749a6d74384cb9304bf19673042e1a7bc86b",
  "parents": [
    "fa21df8cd969bb257b87c9ef7c0147d8d5ea8725"
  ],
  "author": {
    "name": "Keir Mierle",
    "email": "mierle@gmail.com",
    "time": "Sun Feb 17 12:37:55 2013 -0800"
  },
  "committer": {
    "name": "Keir Mierle",
    "email": "mierle@gmail.com",
    "time": "Mon Feb 18 15:00:30 2013 -0800"
  },
  "message": "Add support for removing parameter and residual blocks.\n\nThis adds support for removing parameter and residual blocks.\nThere are two modes of operation: in the first, removals of\nparemeter blocks are expensive, since each remove requires\nscanning all residual blocks to find ones that depend on the\nremoved parameter. In the other, extra memory is sacrificed to\nmaintain a list of the residuals a parameter block depends on,\nremoving the need to scan. In both cases, removing residual blocks\nis fast.\n\nAs a caveat, any removals destroys the ordering of the parameters,\nso the residuals or jacobian returned from Solver::Solve() is\nmeaningless. There is some debate on the best way to handle this;\nthe details remain for a future change.\n\nThis also adds some overhead, even in the case that fast removals\nare not requested:\n\n- 1 int32 to each residual, to track its position in the program.\n- 1 pointer to each parameter, to store the dependent residuals.\n\nChange-Id: I71dcac8656679329a15ee7fc12c0df07030c12af\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a8645c64c2f3875313f747fd9ad45eaf81651bb6",
      "old_mode": 33188,
      "old_path": "include/ceres/problem.h",
      "new_id": "f0ed1b00a7badb8eabd5352f37993dbada1cecd0",
      "new_mode": 33188,
      "new_path": "include/ceres/problem.h"
    },
    {
      "type": "modify",
      "old_id": "f20805ca873dc80947a1f397151faaa5adf574e5",
      "old_mode": 33188,
      "old_path": "internal/ceres/parameter_block.h",
      "new_id": "4fcafe0210ffff2fc34ccfdf5c164a782ab54fa2",
      "new_mode": 33188,
      "new_path": "internal/ceres/parameter_block.h"
    },
    {
      "type": "modify",
      "old_id": "35998dc451c19c352e160a5d3adc6abdb442e739",
      "old_mode": 33188,
      "old_path": "internal/ceres/parameter_block_test.cc",
      "new_id": "09156f866a53f8d36af5cf4eadb461b14a747a80",
      "new_mode": 33188,
      "new_path": "internal/ceres/parameter_block_test.cc"
    },
    {
      "type": "modify",
      "old_id": "7ee5b5c15c0dc9a3a0932b9a2aacad83be2fc1eb",
      "old_mode": 33188,
      "old_path": "internal/ceres/problem.cc",
      "new_id": "c8f4a21eb2e2dc1a9466843afad97f57695d67c9",
      "new_mode": 33188,
      "new_path": "internal/ceres/problem.cc"
    },
    {
      "type": "modify",
      "old_id": "e9d23ece079ea6232d45b710a96d691634aa2b70",
      "old_mode": 33188,
      "old_path": "internal/ceres/problem_impl.cc",
      "new_id": "6154ddf65bf145a24f087645fde55a834521063e",
      "new_mode": 33188,
      "new_path": "internal/ceres/problem_impl.cc"
    },
    {
      "type": "modify",
      "old_id": "82a19561c0bb91ddbfa63aead072842eb00aa617",
      "old_mode": 33188,
      "old_path": "internal/ceres/problem_impl.h",
      "new_id": "536e73a12ab60eea02a4a76a927b820dc0a2144b",
      "new_mode": 33188,
      "new_path": "internal/ceres/problem_impl.h"
    },
    {
      "type": "modify",
      "old_id": "4afe1b55ae422ff7a35fa0b2d03da20f1a1af0c8",
      "old_mode": 33188,
      "old_path": "internal/ceres/problem_test.cc",
      "new_id": "55f355bde990d916dff2202dbfef93ecf86cbc81",
      "new_mode": 33188,
      "new_path": "internal/ceres/problem_test.cc"
    },
    {
      "type": "modify",
      "old_id": "bdb88b1dd978e4de5b3b174fd99f51d8d0fdbb0e",
      "old_mode": 33188,
      "old_path": "internal/ceres/residual_block.cc",
      "new_id": "7f789605e5f2d07fe3629a90976543780c9d7a3d",
      "new_mode": 33188,
      "new_path": "internal/ceres/residual_block.cc"
    },
    {
      "type": "modify",
      "old_id": "e0a06e789581b4be0f8ebb3e2d397633614f2e18",
      "old_mode": 33188,
      "old_path": "internal/ceres/residual_block.h",
      "new_id": "3921d1d467894c9c9dd5b065ddf7ef6acda4ae7e",
      "new_mode": 33188,
      "new_path": "internal/ceres/residual_block.h"
    },
    {
      "type": "modify",
      "old_id": "92b79f6bf3e350dacf2c7fc6a8e9af0e877bec84",
      "old_mode": 33188,
      "old_path": "internal/ceres/residual_block_test.cc",
      "new_id": "fddd44ea738f496d8ef12ba16c84e00e135d7f5f",
      "new_mode": 33188,
      "new_path": "internal/ceres/residual_block_test.cc"
    },
    {
      "type": "modify",
      "old_id": "db9ad6d06b58c13fa54229f2cfbaa0c74b67c5a8",
      "old_mode": 33188,
      "old_path": "internal/ceres/residual_block_utils_test.cc",
      "new_id": "24723b3239463b98e8b2d0097e3a6666366672f3",
      "new_mode": 33188,
      "new_path": "internal/ceres/residual_block_utils_test.cc"
    }
  ]
}
