)]}'
{
  "commit": "f06b9face5bfbbc2b338aa2460bee2298a3865c5",
  "tree": "590910785a7437c2a0164a37e56851075fe423b0",
  "parents": [
    "5a161a2b9653489ee9040f054b24df971e6b9bbc"
  ],
  "author": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Sun Oct 27 21:38:13 2013 -0700"
  },
  "committer": {
    "name": "Sameer Agarwal",
    "email": "sameeragarwal@google.com",
    "time": "Thu Oct 31 13:22:57 2013 -0700"
  },
  "message": "Add support for multiple visibility clustering algorithms.\n\nThe original visibility based preconditioning paper and\nimplementation only used the canonical views algorithm.\n\nThis algorithm for large dense graphs can be particularly\nexpensive. As its worst case complexity is cubic in size\nof the graph.\n\nFurther, for many uses the SCHUR_JACOBI preconditioner\nwas both effective enough while being cheap. It however\nsuffers from a fatal flaw. If the camera parameter blocks\nare split between two or more parameter blocks, e.g,\nextrinsics and intrinsics. The preconditioner because\nit is block diagonal will not capture the interactions\nbetween them.\n\nUsing CLUSTER_JACOBI or CLUSTER_TRIDIAGONAL will fix\nthis problem but as mentioned above this can be quite\nexpensive depending on the problem.\n\nThis change extends the visibility based preconditioner\nto allow for multiple clustering algorithms. And adds\na simple thresholded single linkage clustering algorithm\nwhich allows you to construct versions of CLUSTER_JACOBI\nand CLUSTER_TRIDIAGONAL preconditioners that are cheap\nto construct and are more effective than SCHUR_JACOBI.\n\nCurrently the constants controlling the threshold above\nwhich edges are considered in the single linkage algorithm\nare not exposed. This would be done in a future change.\n\nChange-Id: I7ddc36790943f24b19c7f08b10694ae9a822f5c9\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f9d4fb36f3f9f745a68b7cfdcf7c51bc50f5b01d",
      "old_mode": 33188,
      "old_path": "docs/source/solving.rst",
      "new_id": "8202d1664dc870392aeca157cbaeb1bedb463325",
      "new_mode": 33188,
      "new_path": "docs/source/solving.rst"
    },
    {
      "type": "modify",
      "old_id": "224ad748ed32f6dd650ba89e406a2f8100de5c44",
      "old_mode": 33188,
      "old_path": "examples/bundle_adjuster.cc",
      "new_id": "fb827194be670bbebeba0afd4bddc7ec27421a58",
      "new_mode": 33188,
      "new_path": "examples/bundle_adjuster.cc"
    },
    {
      "type": "modify",
      "old_id": "0b3a18e5bdaa6cfb94b0eb0a186cbb2fc3c04489",
      "old_mode": 33188,
      "old_path": "include/ceres/solver.h",
      "new_id": "7d8e4e28b583b0d073a1ad0a927dadb25dd1810e",
      "new_mode": 33188,
      "new_path": "include/ceres/solver.h"
    },
    {
      "type": "modify",
      "old_id": "ffa743a2d97678156d2662729c34c6698756bf55",
      "old_mode": 33188,
      "old_path": "include/ceres/types.h",
      "new_id": "c8c9cfed96e7e14a04d1ebd7d8ded4a3e967ec65",
      "new_mode": 33188,
      "new_path": "include/ceres/types.h"
    },
    {
      "type": "modify",
      "old_id": "d963fd64ac6a752e551dd64b294b82d305dfdf0e",
      "old_mode": 33188,
      "old_path": "internal/ceres/CMakeLists.txt",
      "new_id": "f4a4578191f43f707a05bb4aaa225674ddc23d72",
      "new_mode": 33188,
      "new_path": "internal/ceres/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "653194571b1865173bd27ddf4050f6c0f8828a6f",
      "old_mode": 33188,
      "old_path": "internal/ceres/canonical_views_clustering.cc",
      "new_id": "044d4381b119a4973ac4065cc02113cd64f6d5e1",
      "new_mode": 33188,
      "new_path": "internal/ceres/canonical_views_clustering.cc"
    },
    {
      "type": "modify",
      "old_id": "48d1ed210c926da32254feeaea99a6846eb24348",
      "old_mode": 33188,
      "old_path": "internal/ceres/canonical_views_clustering.h",
      "new_id": "06d80c89e922756e5f1a695340a65bf2d6b8971c",
      "new_mode": 33188,
      "new_path": "internal/ceres/canonical_views_clustering.h"
    },
    {
      "type": "modify",
      "old_id": "78d5635632776eda43c0eda708b6e75e8f68c2d3",
      "old_mode": 33188,
      "old_path": "internal/ceres/canonical_views_clustering_test.cc",
      "new_id": "f4f9e2debee7dbfb2e2cdbe629ef8c7560b7263e",
      "new_mode": 33188,
      "new_path": "internal/ceres/canonical_views_clustering_test.cc"
    },
    {
      "type": "modify",
      "old_id": "90013ff165ae1d0ca761fb6d7d0aeb554b66e034",
      "old_mode": 33188,
      "old_path": "internal/ceres/iterative_schur_complement_solver.cc",
      "new_id": "e9c54c86c22c074031881908cba9f6de533b2b1d",
      "new_mode": 33188,
      "new_path": "internal/ceres/iterative_schur_complement_solver.cc"
    },
    {
      "type": "modify",
      "old_id": "22691b33e44487ee046fab1876f076c9d375f9d4",
      "old_mode": 33188,
      "old_path": "internal/ceres/linear_solver.h",
      "new_id": "b0ab80dd76350415121cbe28696df1d4ed9fd080",
      "new_mode": 33188,
      "new_path": "internal/ceres/linear_solver.h"
    },
    {
      "type": "modify",
      "old_id": "af64e3c9a44c14dc53d99bdc8c687c2bdbc4f993",
      "old_mode": 33188,
      "old_path": "internal/ceres/preconditioner.h",
      "new_id": "21cbc00b54272baaaf2b6868ee30d7c8e480dac5",
      "new_mode": 33188,
      "new_path": "internal/ceres/preconditioner.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "54b4379d5f2eb21c5164e7f62b165fe6df25d0d9",
      "new_mode": 33188,
      "new_path": "internal/ceres/single_linkage_clustering.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a0fe8f96cbfef1b880f3e50b39ede63b68339372",
      "new_mode": 33188,
      "new_path": "internal/ceres/single_linkage_clustering.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8fbf84be2687a8f7fa402bdaa6ca13696261f052",
      "new_mode": 33188,
      "new_path": "internal/ceres/single_linkage_clustering_test.cc"
    },
    {
      "type": "modify",
      "old_id": "3b67746044c5202006888b344ff9930a3958477d",
      "old_mode": 33188,
      "old_path": "internal/ceres/solver.cc",
      "new_id": "2750e230004146566e676778d3f1905e9581614c",
      "new_mode": 33188,
      "new_path": "internal/ceres/solver.cc"
    },
    {
      "type": "modify",
      "old_id": "ae7fc3ffc9b4fbb602fd62cc8ccf092ed5fe3514",
      "old_mode": 33188,
      "old_path": "internal/ceres/solver_impl.cc",
      "new_id": "f544f8f5c5dfd149212389f19f8a7805cda681e2",
      "new_mode": 33188,
      "new_path": "internal/ceres/solver_impl.cc"
    },
    {
      "type": "modify",
      "old_id": "a97f1a55e6ba45a7d0e4e19bfb7138a7ee36271e",
      "old_mode": 33188,
      "old_path": "internal/ceres/types.cc",
      "new_id": "80f8d39e8430d7b11bc596b2ea12a79ba4d3fba5",
      "new_mode": 33188,
      "new_path": "internal/ceres/types.cc"
    },
    {
      "type": "modify",
      "old_id": "6535b4252975fd21b638caaf7aaa03698b4fb288",
      "old_mode": 33188,
      "old_path": "internal/ceres/visibility_based_preconditioner.cc",
      "new_id": "c760c5b51a2e151e819b71249e2c90c748ff52ec",
      "new_mode": 33188,
      "new_path": "internal/ceres/visibility_based_preconditioner.cc"
    }
  ]
}
