)]}'
{
  "commit": "2dd907744d83fd0bd3f58d1397be0a162f19a423",
  "tree": "f8ea66339168bbbef82a3694edfb4e99ec699ac6",
  "parents": [
    "7b4ec98ea9cd32be826365f37621f9232d95c15b"
  ],
  "author": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Sun Jan 15 15:46:56 2017 -0800"
  },
  "committer": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Mon Jan 16 10:00:36 2017 -0800"
  },
  "message": "Ensure that partial evaluation of residuals triggers an error\n\nResidualBlock evaluation has logic to ensure that CostFunction\nshould always fill out the residual and jacobian arrays completely\nby using a special value to pre-populate these arrays.\n\nThis works for CostFunctions with analytical Jacobians but not for\nAutoDiffCostFunction and NumericDiffCostFunction Jacobians.\n\nThere is no way to fix this for NumericDiffCostFunctions without\nintroducing significant performance penalties but the residual\nevaluation fails, which should be enough to catch such errors.\n\nFor AutoDiffCostFunction the way the Jets are default initialized\nwas sidestepping this check. So now, the Jet that is used to\ncapture the output residuals is now initialized with\nkImpossibleValue, which will ensure that if the user forgets\nto fill all output fields, it triggers an evaluation error.\n\nThis change required that ceres::internal::kImpossibleValue be moved\nout of array_utils.h/cc to types.h.\n\nChange-Id: I35bb0946cf0785a5d43c7b5459a2272848fb2a9b\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "136152a36cdc2e01454961b80c72587465af4045",
      "old_mode": 33188,
      "old_path": "include/ceres/internal/autodiff.h",
      "new_id": "bf5fb774ed3cf653d31585078788226f28c904b6",
      "new_mode": 33188,
      "new_path": "include/ceres/internal/autodiff.h"
    },
    {
      "type": "modify",
      "old_id": "2ea418036297b28fd44868ac38785775907c6032",
      "old_mode": 33188,
      "old_path": "include/ceres/types.h",
      "new_id": "6b9da8498bdda49b81d37146e05f1e248401e5f5",
      "new_mode": 33188,
      "new_path": "include/ceres/types.h"
    },
    {
      "type": "modify",
      "old_id": "7be3c78ce24b90c02b1075ca8a8f3967e63b1fc2",
      "old_mode": 33188,
      "old_path": "internal/ceres/array_utils.cc",
      "new_id": "a165a1bdf60a746477e554e143c9133da746e8a3",
      "new_mode": 33188,
      "new_path": "internal/ceres/array_utils.cc"
    },
    {
      "type": "modify",
      "old_id": "2d2ffca88091b39bd222ab37b6b6ccd3af934b1a",
      "old_mode": 33188,
      "old_path": "internal/ceres/array_utils.h",
      "new_id": "baf112e712c83ee29db5752e11e164b160077324",
      "new_mode": 33188,
      "new_path": "internal/ceres/array_utils.h"
    },
    {
      "type": "modify",
      "old_id": "241fa0f6726f7539ba50b138c12a3a766388060c",
      "old_mode": 33188,
      "old_path": "internal/ceres/autodiff_cost_function_test.cc",
      "new_id": "d14fb8289949db8f4d4d9497242ffd11d4d7ab49",
      "new_mode": 33188,
      "new_path": "internal/ceres/autodiff_cost_function_test.cc"
    },
    {
      "type": "modify",
      "old_id": "13ab1069c26b31ec7a87c07ef29421ce5725a377",
      "old_mode": 33188,
      "old_path": "internal/ceres/numeric_diff_cost_function_test.cc",
      "new_id": "983f11e114a7de565323e40cd0bbe84da141eb85",
      "new_mode": 33188,
      "new_path": "internal/ceres/numeric_diff_cost_function_test.cc"
    }
  ]
}
