diff options
Diffstat (limited to 'extern/ceres/ChangeLog')
-rw-r--r-- | extern/ceres/ChangeLog | 891 |
1 files changed, 410 insertions, 481 deletions
diff --git a/extern/ceres/ChangeLog b/extern/ceres/ChangeLog index 0e6c195174c..ae8d42a7c95 100644 --- a/extern/ceres/ChangeLog +++ b/extern/ceres/ChangeLog @@ -1,659 +1,588 @@ -commit aef9c9563b08d5f39eee1576af133a84749d1b48 -Author: Alessandro Gentilini <agentilini@gmail.com> -Date: Tue Oct 6 20:43:45 2015 +0200 +commit 8590e6e8e057adba4ec0083446d00268565bb444 +Author: Sameer Agarwal <sameeragarwal@google.com> +Date: Thu Oct 27 12:29:37 2016 -0700 - Add test for Bessel functions. + Remove two checks from rotation.h + + This allows rotation.h to remove its dependency on glog. - Change-Id: Ief5881e8027643d7ef627e60a88fdbad17f3d884 + Change-Id: Ia6aede93ee51a4bd4039570dc8edd100a7045329 -commit 49c86018e00f196c4aa9bd25daccb9919917efee -Author: Alessandro Gentilini <agentilini@gmail.com> -Date: Wed Sep 23 21:59:44 2015 +0200 +commit e892499e8d8977b9178a760348bdd201ec5f3489 +Author: Je Hyeong Hong <jhh37@outlook.com> +Date: Tue Oct 18 22:49:11 2016 +0100 - Add Bessel functions in order to use them in residual code. + Relax the tolerance in QuaternionParameterizationTestHelper. - See "How can I use the Bessel function in the residual function?" at - https://groups.google.com/d/msg/ceres-solver/Vh1gpqac8v0/NIK1EiWJCAAJ + This commit relaxes the tolerance value for comparing between the actual + local matrix and the expected local matrix. Without this fix, + EigenQuaternionParameterization.ZeroTest could fail as the difference + exactly matches the value of std::numeric_limits<double>::epsilon(). - Change-Id: I3e80d9f9d1cadaf7177076e493ff46ace5233b76 + Change-Id: Ic4d3f26c0acdf5f16fead80dfdc53df9e7dabbf9 -commit dfb201220c034fde00a242d0533bef3f73b2907d -Author: Simon Rutishauser <simon.rutishauser@pix4d.com> -Date: Tue Oct 13 07:33:58 2015 +0200 +commit 7ed9e2fb7f1dff264c5e4fbaa89ee1c4c99df269 +Author: Sameer Agarwal <sameeragarwal@google.com> +Date: Wed Oct 19 04:45:23 2016 -0700 - Make miniglog threadsafe on non-windows system by using - localtime_r() instead of localtime() for time formatting + Occured -> Occurred. - Change-Id: Ib8006c685cd8ed4f374893bef56c4061ca2c9747 + Thanks to Phillip Huebner for reporting this. + + Change-Id: I9cddfbb373aeb496961d08e434fe661bff4abd29 -commit 41455566ac633e55f222bce7c4d2cb4cc33d5c72 -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Mon Sep 28 22:43:42 2015 +0100 +commit b82f97279682962d8c8ae1b6d9e801ba072a0ab1 +Author: Je Hyeong Hong <jhh37@outlook.com> +Date: Tue Oct 18 21:18:32 2016 +0100 - Remove link-time optimisation (LTO). + Fix a test error in autodiff_test.cc. - - On GCC 4.9+ although GCC supports LTO, it requires use of the - non-default gcc-ar & gcc-ranlib. Whilst we can ensure Ceres is - compiled with these, doing so with GCC 4.9 causes multiple definition - linker errors of static ints inside Eigen when compiling the tests - and examples when they are not also built with LTO. - - On OS X (Xcode 6 & 7) after the latest update to gtest, if LTO - is used when compiling the tests (& examples), two tests fail - due to typeinfo::operator== (things are fine if only Ceres itself is - compiled with LTO). - - This patch disables LTO for all compilers. It should be revisited when - the performance is more stable across our supported compilers. + Previously, the test for the projective camera model would fail as no + tolerance is set in line 144. To resolve this, this commit changes + assert_equal to assert_near. - Change-Id: I17b52957faefbdeff0aa40846dc9b342db1b02e3 + Change-Id: I6cd3379083b1a10c7cd0a9cc83fd6962bb993cc9 -commit 89c40005bfceadb4163bd16b7464b3c2ce740daf -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Sun Sep 27 13:37:26 2015 +0100 - - Only use LTO when compiling Ceres itself, not tests or examples. - - - If Ceres is built as a shared library, and LTO is enabled for Ceres - and the tests, then type_info::operator==() incorrectly returns false - in gtests' CheckedDowncastToActualType() in the following tests: - -- levenberg_marquardt_strategy_test. - -- gradient_checking_cost_function_test. - on at least Xcode 6 & 7 as reported here: - https://github.com/google/googletest/issues/595. - - This does not appear to be a gtest issue, but is perhaps an LLVM bug - or an RTTI shared library issue. Either way, disabling the use of - LTO when compiling the test application resolves the issue. - - Allow LTO to be enabled for GCC, if it is supported. - - Add CMake function to allow easy appending to target properties s/t - Ceres library-specific compile flags can be iteratively constructed. - - Change-Id: I923e6aae4f7cefa098cf32b2f8fc19389e7918c9 - -commit 0794f41cca440f7f65d9a44e671f66f6e498ef7c +commit 5690b447de5beed6bdda99b7f30f372283c2fb1a Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Sat Sep 26 14:10:15 2015 -0700 +Date: Thu Oct 13 09:52:02 2016 -0700 - Documentation updates. + Fix documentation source for templated functions in rotation.h - 1. Fix a typo in the Trust Region algorithm. - 2. Add ARL in the list of users. - 3. Update the version history. + Change-Id: Ic1b2e6f0e6eb9914f419fd0bb5af77b66252e57c + +commit 2f8f98f7e8940e465de126fb51282396f42bea20 +Author: Sameer Agarwal <sameeragarwal@google.com> +Date: Thu Oct 13 09:35:18 2016 -0700 + + Prepare for 1.12.0RC1 - Change-Id: Ic286e8ef1a71af07f3890b7592dd3aed9c5f87ce + Change-Id: I23eaf0b46117a01440143001b74dacfa5e57cbf0 -commit 90e32a8dc437dfb0e6747ce15a1f3193c13b7d5b -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Mon Sep 21 21:08:25 2015 +0100 +commit 55c12d2e9569fe4aeac3ba688ac36810935a37ba +Author: Damon Kohler <damonkohler@google.com> +Date: Wed Oct 5 16:30:31 2016 +0200 + + Adds package.xml to support Catkin. + + Change-Id: I8ad4d36a8b036417604a54644e0bb70dd1615feb + +commit 0bcce6565202f5476e40f12afc0a99eb44bd9dfb +Author: Sameer Agarwal <sameeragarwal@google.com> +Date: Mon Oct 10 23:30:42 2016 -0700 - Use old minimum iOS version flags on Xcode < 7.0. + Fix tabs in Android.mk - - The newer style, which are more specific and match the SDK names - are not available on Xcode < 7.0. + Change-Id: Ie5ab9a8ba2b727721565e1ded242609b6df5f8f5 + +commit e6ffe2667170d2fc435443685c0163396fc52d7b +Author: Sameer Agarwal <sameeragarwal@google.com> +Date: Mon Oct 10 22:47:08 2016 -0700 + + Update the version history. - Change-Id: I2f07a0365183d2781157cdb05fd49b30ae001ac5 + Change-Id: I9a57b0541d6cebcb695ecb364a1d4ca04ea4e06c -commit 26cd5326a1fb99ae02c667eab9942e1308046984 -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Mon Sep 21 10:16:01 2015 +0100 +commit 0a4ccb7ee939ab35b22e26758401e039b033b176 +Author: David Gossow <dgossow@google.com> +Date: Wed Sep 7 21:38:12 2016 +0200 - Add gtest-specific flags when building/using as a shared library. + Relaxing Jacobian matching in Gradient Checker test. - - Currently these flags are only used to define the relevant DLL export - prefix for Windows. + Any result of an arithmetic operation on floating-point matrices + should never be checked for strict equality with some expected + value, due to limited floating point precision on different machines. + This fixes some occurences of exact checks in the gradient checker + unit test that were causing problems on some platforms. - Change-Id: I0c05207b512cb4a985390aefc779b91febdabb38 + Change-Id: I48e804c9c705dc485ce74ddfe51037d4957c8fcb -commit c4c79472112a49bc1340da0074af2d15b1c89749 -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Sun Sep 20 18:26:59 2015 +0100 +commit ee44fc91b59584921c1d1c8db153fda6d633b092 +Author: Je Hyeong Hong <jhh37@outlook.com> +Date: Mon Oct 3 12:19:30 2016 +0100 - Clean up iOS.cmake to use xcrun/xcodebuild & libtool. + Fix an Intel compiler error in covariance_impl.cc. - - Substantial cleanup of iOS.cmake to use xcrun & xcodebuild to - determine the SDK & tool paths. - - Use libtool -static to link libraries instead of ar + ranlib, which - is not compatible with Xcode 7+, this change should be backwards - compatible to at least Xcode 6. - - Force locations of unordered_map & shared_ptr on iOS to work around - check_cxx_source_compiles() running in a forked CMake instance without - access to the variables (IOS_PLATFORM) defined by the user. - - Minor CMake style updates. + Intel C compiler strictly asks for parallel loops with collapse to be + perfectly nested. Otherwise, compiling Ceres with ICC will throw an + error at line 348 of covariance_impl.cc. - Change-Id: I5f83a60607db34d461ebe85f9dce861f53d98277 + Change-Id: I1ecb68e89b7faf79e4153dfe6675c390d1780db4 -commit 155765bbb358f1d19f072a4b54825faf1c059910 +commit 9026d69d1ce1e0bcd21debd54a38246d85c7c6e4 Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Wed Sep 16 06:56:08 2015 -0700 +Date: Thu Sep 22 17:20:14 2016 -0700 + + Allow SubsetParameterization to hold all parameters constant + + 1. SubsetParameterization can now be constructed such that all + parameters are constant. This is required for it be used as part + of a ProductParameterization to hold a part of parameter block + constant. For example, a parameter block consisting of a rotation + as a quaternion and a translation vector can now have a local + parameterization where the translation part is constant and the + quaternion part has a QuaternionParameterization associated with it. + + 2. The check for the tangent space of a parameterization being + positive dimensional. We were not doing this check up till now + and the user could accidentally create parameterizations like this + and create a problem for themselves. This will ensure that even + though one can construct a SubsetParameterization where all + parameters are constant, you cannot actually use it as a local + parameterization for an entire parameter block. Which is how + it was before, but the check was inside the SubsetParameterization + constructor. + + 3. Added more tests and refactored existing tests to be more + granular. + + Change-Id: Ic0184a1f30e3bd8a416b02341781a9d98e855ff7 + +commit a36693f83da7a3fd19dce473d060231d4cc97499 +Author: Sameer Agarwal <sameeragarwal@google.com> +Date: Sat Sep 17 16:31:41 2016 -0700 - Import the latest version of gtest and gmock. + Update version history - Change-Id: I4b686c44bba823cab1dae40efa99e31340d2b52a + Change-Id: Ib2f0138ed7a1879ca3b2173e54092f7ae8dd5c9d -commit 0c4647b8f1496c97c6b9376d9c49ddc204aa08dd -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Wed Sep 16 20:01:11 2015 +0100 +commit 01e23e3d33178fdd050973666505c1080cfe04c3 +Author: David Gossow <dgossow@google.com> +Date: Thu Sep 8 12:22:28 2016 +0200 - Remove FAQ about increasing inlining threshold for Clang. + Removing duplicate include directive. - - Changing the inlining threshold for Clang as described has a minimal - effect on user performance. - - The problem that originally prompted the belief that it did was - due to an erroneous CXX flag configuration (in user code). - - Change-Id: I03017241c0f87b8dcefb8c984ec3b192afd97fc2 + Change-Id: I729ae6501497746d1bb615cb893ad592e16ddf3f -commit f4b768b69afcf282568f9ab3a3f0eb8078607468 +commit 99b8210cee92cb972267537fb44bebf56f812d52 Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Mon Sep 14 13:53:24 2015 -0700 +Date: Wed Sep 7 15:31:30 2016 -0700 - Lint changes from William Rucklidge + Update Android.mk to include new files. - Change-Id: I0dac2549a8fa2bfd12f745a8d8a0db623b7ec1ac + Change-Id: Id543ee7d2a65b65c868554a17f593c0a4958e873 -commit 5f2f05c726443e35767d677daba6d25dbc2d7ff8 +commit 195d8d13a6a3962ac39ef7fcdcc6add0216eb8bc Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Fri Sep 11 22:19:38 2015 -0700 +Date: Tue Sep 6 07:12:23 2016 -0700 - Refactor system_test + Remove two DCHECKs from CubicHermiteSpline. - 1. Move common test infrastructure into test_util. - 2. system_test now only contains powells function. - 3. Add bundle_adjustment_test. + They were present as debugging checks but were causing problems + with the build on 32bit i386 due to numerical cancellation issues, + where x ~ -epsilon. - Instead of a single function which computes everything, - there is now a test for each solver configuration which - uses the reference solution computed by the fixture. + Removing these checks only changes the behaviour in Debug mode. + We are already handling such small negative numbers in production + if they occur. All that this change does is to remove the crash. - Change-Id: I16a9a9a83a845a7aaf28762bcecf1a8ff5aee805 - -commit 1936d47e213142b8bf29d3f548905116092b093d -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Tue Sep 8 23:27:42 2015 +0100 - - Revert increased inline threshold (iff Clang) to exported Ceres target. + https://github.com/ceres-solver/ceres-solver/issues/212 - - Increasing the inline threshold results in very variable performance - improvements, and could potentially confuse users if they are trying - to set the inline threshold themselves. - - As such, we no longer export our inline threshold configuration for - Clang, but instead document how to change it in the FAQs. + Thanks to @NeroBurner and @debalance for reporting this. - Change-Id: I88e2e0001e4586ba2718535845ed1e4b1a5b72bc + Change-Id: I66480e86d4fa0a4b621204f2ff44cc3ff8d01c04 -commit a66d89dcda47cefda83758bfb9e7374bec4ce866 +commit 83041ac84f2d67c28559c67515e0e596a3f3aa20 Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Sat Sep 5 16:50:20 2015 -0700 +Date: Fri Sep 2 19:10:35 2016 -0700 - Get ready for 1.11.0RC1 + Fix some compiler warnings. - Update version numbers. - Drop CERES_VERSION_ABI macro. + Reported by Richard Trieu. - Change-Id: Ib3eadabb318afe206bb196a5221b195d26cbeaa0 + Change-Id: I202b7a7df09cc19c92582d276ccf171edf88a9fb -commit 1ac3dd223c179fbadaed568ac532af4139c75d84 +commit 8c4623c63a2676e79e7917bb0561f903760f19b9 Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Sat Sep 5 15:30:01 2015 -0700 +Date: Thu Sep 1 00:05:09 2016 -0700 - Fix a bug in CompressedRowSparseMatrix::AppendRows + Update ExpectArraysClose to use ExpectClose instead of EXPECT_NEAR - The test for CompressedRowSparseMatrix::AppendRows tries to add - a matrix of size zero, which results in an invalid pointer deferencing - even though that pointer is never written to. + The documentation for ExpectArraysClose and its implementation + did not match. - Change-Id: I97dba37082bd5dad242ae1af0447a9178cd92027 - -commit 67622b080c8d37b5e932120a53d4ce76b80543e5 -Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Sat Sep 5 13:18:38 2015 -0700 - - Fix a pointer access bug in Ridders' algorithm. + This change makes the polynomial_test not fail on 64bit AMD builds. - A pointer to an Eigen matrix was being used as an array. + Thanks to Phillip Huebner for reporting this. - Change-Id: Ifaea14fa3416eda5953de49afb78dc5a6ea816eb + Change-Id: I503f2d3317a28d5885a34f8bdbccd49d20ae9ba2 -commit 5742b7d0f14d2d170054623ccfee09ea214b8ed9 +commit 2fd39fcecb47eebce727081c9ffb8edf86c33669 Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Wed Aug 26 09:24:33 2015 -0700 +Date: Thu Sep 1 16:05:06 2016 -0700 - Improve performance of SPARSE_NORMAL_CHOLESKY + dynamic_sparsity + FindWithDefault returns by value rather than reference. + + Returning by reference leads to lifetime issues with the default + value which may go out of scope by the time it is used. + + Thanks to @Ardavel for reporting this, as this causes graph_test + to fail on VS2015x64. - The outer product computation logic in SparseNormalCholeskySolver - does not work well with dynamic sparsity. The overhead of computing - the sparsity pattern of the normal equations is only amortized if - the sparsity is constant. If the sparsity can change from call to call - SparseNormalCholeskySolver will actually be more expensive. + https://github.com/ceres-solver/ceres-solver/issues/216 - For Eigen and for CXSparse we now explicitly compute the normal - equations using their respective matrix-matrix product routines and solve. - Change-Id: Ifbd8ed78987cdf71640e66ed69500442526a23d4 + Change-Id: I596481219cfbf7622d49a6511ea29193b82c8ba3 -commit d0b6cf657d6ef0dd739e958af9a5768f2eecfd35 -Author: Keir Mierle <mierle@gmail.com> -Date: Fri Sep 4 18:43:41 2015 -0700 +commit 716f049a7b91a8f3a4632c367d9534d1d9190a81 +Author: Mike Vitus <vitus@google.com> +Date: Wed Aug 31 13:38:30 2016 -0700 - Fix incorrect detect structure test + Convert pose graph 2D example to glog and gflags. - Change-Id: I7062f3639147c40b57947790d3b18331a39a366b + Change-Id: I0ed75a60718ef95199bb36f33d9eb99157d11d40 -commit 0e8264cc47661651a11e2dd8570c210082963545 -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Sat Aug 22 16:23:05 2015 +0100 +commit 46c5ce89dda308088a5fdc238d0c126fdd2c2b58 +Author: David Gossow <dgossow@google.com> +Date: Wed Aug 31 18:40:57 2016 +0200 - Add increased inline threshold (iff Clang) to exported Ceres target. + Fix compiler errors on some systems - - When compiled with Clang, Ceres and all of the examples are compiled - with an increased inlining-threshold, as the default value can result - in poor Eigen performance. - - Previously, client code using Ceres would typically not use an - increased inlining-threshold (unless the user has specifically added - it themselves). However, increasing the inlining threshold can result - in significant performance improvements in auto-diffed CostFunctions. - - This patch adds the inlining-threshold flags to the interface flags - for the Ceres CMake target s/t any client code using Ceres (via - CMake), and compiled with Clang, will now be compiled with the same - increased inlining threshold as used by Ceres itself. + This fixes some signed-unsigned comparisons and a missing header + include. - Change-Id: I31e8f1abfda140d22e85bb48aa57f028a68a415e + Change-Id: Ieb2bf6e905faa74851bc4ac4658d2f1da24b6ecc -commit a1b3fce9e0a4141b973f6b4dd9b08c4c13052d52 -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Mon Aug 31 14:14:56 2015 +0100 +commit b102d53e1dd7dab132e58411183b6fffc2090590 +Author: David Gossow <dgossow@google.com> +Date: Wed Aug 31 10:21:20 2016 +0200 - Add optional export of Ceres build directory to new features list. + Gradient checker multithreading bugfix. - Change-Id: I6f1e42b41957ae9cc98fd9dcd1969ef64c4cd96f - -commit e46777d8df068866ef80902401a03e29348d11ae -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Mon Aug 31 12:41:54 2015 +0100 - - Credit reporters of buildsystem bugs in version history. + This is a follow-up on c/7470. GradientCheckingCostFunction calls + callback_->SetGradientErrorDetected() in its Evaluate method, + which will run in multiple threads simultaneously when enabling + this option in the solver. Thus, the string append operation + inside that method has to be protected by a mutex. - Change-Id: I16fe7973534cd556d97215e84268ae0b8ec4e11a + Change-Id: I314ef1df2be52595370d9af05851bf6da39bb45e -commit 01548282cb620e5e3ac79a63a391cd0afd5433e4 +commit 79a28d1e49af53f67af7f3387d07e7c9b7339433 Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Sun Aug 30 22:29:27 2015 -0700 +Date: Wed Aug 31 06:47:45 2016 -0700 - Update the version history. + Rename a confusingly named member of Solver::Options + + Solver::Options::numeric_derivative_relative_step_size to + Solver::Options::gradient_check_numeric_derivative_relative_step_size - Change-Id: I29873bed31675e0108f1a44f53f7bc68976b7f98 + Change-Id: Ib89ae3f87e588d4aba2a75361770d2cec26f07aa -commit 2701429f770fce69ed0c77523fa43d7bc20ac6dc +commit 358ae741c8c4545b03d95c91fa546d9a36683677 Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Sun Aug 30 21:33:57 2015 -0700 +Date: Wed Aug 31 06:58:41 2016 -0700 - Use Eigen::Dynamic instead of ceres::DYNAMIC in numeric_diff.h + Note that Problem::Evaluate cannot be called from an IterationCallback - Change-Id: Iccb0284a8fb4c2160748dfae24bcd595f1d4cb5c + Change-Id: Ieabdc2d40715e6b547ab22156ba32e9c8444b7ed -commit 4f049db7c2a3ee8cf9910c6eac96be6a28a5999c -Author: Tal Ben-Nun <tbennun@gmail.com> -Date: Wed May 13 15:43:51 2015 +0300 +commit 44044e25b14d7e623baae4505a17c913bdde59f8 +Author: Sameer Agarwal <sameeragarwal@google.com> +Date: Wed Aug 31 05:50:58 2016 -0700 - Adaptive numeric differentiation using Ridders' method. + Update the NumTraits for Jets - This method numerically computes function derivatives in different - scales, extrapolating between intermediate results to conserve function - evaluations. Adaptive differentiation is essential to produce accurate - results for functions with noisy derivatives. + 1. Use AVX if EIGEN_VECTORIZE_AVX is defined. + 2. Make the cost of division same as the cost of multiplication. - Full changelist: - -Created a new type of NumericDiffMethod (RIDDERS). - -Implemented EvaluateRiddersJacobianColumn in NumericDiff. - -Created unit tests with f(x) = x^2 + [random noise] and - f(x) = exp(x). + These are updates to the original numtraits update needed for eigen 3.3 + that Shaheen Gandhi sent out. - Change-Id: I2d6e924d7ff686650272f29a8c981351e6f72091 + Change-Id: Ic1e3ed7d05a659c7badc79a894679b2dd61c51b9 -commit 070bba4b43b4b7449628bf456a10452fd2b34d28 +commit 4b6ad5d88e45ce8638c882d3e8f08161089b6dba Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Tue Aug 25 13:37:33 2015 -0700 +Date: Sat Aug 27 23:21:55 2016 -0700 - Lint fixes from William Rucklidge + Use ProductParameterization in bundle_adjuster.cc - Change-Id: I719e8852859c970091df842e59c44e02e2c65827 - -commit 887a20ca7f02a1504e35f7cabbdfb2e0842a0b0b -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Wed Aug 12 21:41:43 2015 +0100 - - Build position independent code when compiling Ceres statically. + Previously, when using a quaternion to parameterize the camera + orientation, the camera parameter block was split into two + parameter blocks. One for the rotation and another for the + translation and intrinsics. This was to enable the use of the + Quaternion parameterization. - - Previously, when Ceres was built as a static library we did not - compile position independent code. This means that the resulting - static library could not be linked against shared libraries, but - could be used by executables. - - To enable the use of a static Ceres library by other shared libraries - as reported in [1], the static library must be generated from - position independent code (except on Windows, where PIC does not - apply). + Now that we have a ProductParameterization which allows us + to compose multiple parameterizations, this is no longer needed + and we use a size 10 parameter block instead. - [1] https://github.com/Itseez/opencv_contrib/pull/290#issuecomment-130389471 + This leads to a more than 2x improvements in the linear solver time. - Change-Id: I99388f1784ece688f91b162d009578c5c97ddaf6 + Change-Id: I78b8f06696f81fee54cfe1a4ae193ee8a5f8e920 -commit 860bba588b981a5718f6b73e7e840e5b8757fe65 -Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Tue Aug 25 09:43:21 2015 -0700 +commit bfc916cf1cf753b85c1e2ac037e2019ee891f6f9 +Author: Shaheen Gandhi <visigoth@gmail.com> +Date: Thu Aug 4 12:10:14 2016 -0700 - Fix a bug in DetectStructure + Allow ceres to be used with the latest version of Eigen - The logic for determing static/dynamic f-block size in - DetectStructure was broken in a corner case, where the very first - row block which was used to initialize the f_block_size contained - more than one f blocks of varying sizes. The way the if block - was structured, no iteration was performed on the remaining - f-blocks and the loop failed to detect that the f-block size - was actually changing. - - If in the remaining row blocks, there were no row blocks - with varying f-block sizes, the function will erroneously - return a static f-block size. - - Thanks to Johannes Schonberger for providing a reproduction for this - rather tricky corner case. - - Change-Id: Ib442a041d8b7efd29f9653be6a11a69d0eccd1ec + Change-Id: Ief3b0f6b405484ec04ecd9ab6a1e1e5409a594c2 -commit b0cbc0f0b0a22f01724b7b647a4a94db959cc4e4 -Author: Johannes Schönberger <hannesschoenberger@gmail.com> -Date: Thu Aug 20 14:21:30 2015 -0400 +commit edbd48ab502aa418ad9700ee5c3ada5f9268b90a +Author: Alex Stewart <alexs.mac@gmail.com> +Date: Sun Jul 10 14:13:51 2016 +0100 - Reduce memory footprint of SubsetParameterization + Enable support for OpenMP in Clang if detected. + + - Previously we disabled OpenMP if Clang was detected, as it did not + support it. However as of Clang 3.8 (and potentially Xcode 8) OpenMP + is supported. - Change-Id: If113cb4696d5aef3e50eed01fba7a3d4143b7ec8 + Change-Id: Ia39dac9fe746f1fc6310e08553f85f3c37349707 -commit ad2a99777786101411a971e59576ca533a297013 -Author: Sergey Sharybin <sergey.vfx@gmail.com> -Date: Sat Aug 22 11:18:45 2015 +0200 +commit f6df6c05dd83b19fa90044106ebaca40957998ae +Author: Mike Vitus <vitus@google.com> +Date: Thu Aug 18 19:27:43 2016 -0700 - Fix for reoder program unit test when built without suitesparse - - This commit fixes failure of reorder_program_test when Ceres is built without - any suitesparse. + Add an example for modeling and solving a 3D pose graph SLAM problem. - Change-Id: Ia23ae8dfd20c482cb9cd1301f17edf9a34df3235 + Change-Id: I750ca5f20c495edfee5f60ffedccc5bd8ba2bb37 -commit 4bf3868beca9c17615f72ec03730cddb3676acaa -Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Sun Aug 9 15:24:45 2015 -0700 +commit ac3b8e82175122e38bafaaa9cd419ba3cee11087 +Author: David Gossow <dgossow@google.com> +Date: Fri Apr 29 16:07:11 2016 +0200 - Fix a bug in the Schur eliminator + Gradient checking cleanup and local parameterization bugfix - The schur eliminator treats rows with e blocks and row with - no e blocks separately. The template specialization logic only - applies to the rows with e blocks. + Change the Ceres gradient checking API to make is useful for + unit testing, clean up code duplication and fix interaction between + gradient checking and local parameterizations. - So, in cases where the rows with e-blocks have a fixed size f-block - but the rows without e-blocks have f-blocks of varying sizes, - DetectStructure will return a static f-block size, but we need to be - careful that we do not blindly use that static f-block size everywhere. + There were two gradient checking implementations, one being used + when using the check_gradients flag in the Solver, the other + being a standalone class. The standalone version was restricted + to cost functions with fixed parameter sizes at compile time, which + is being lifted here. This enables it to be used inside the + GradientCheckingCostFunction as well. - This patch fixes a bug where such care was not being taken, where - it was assumed that the static f-block size could be assumed for all - f-block sizes. + In addition, this installs new hooks in the Solver to ensure + that Solve will fail if any incorrect gradients are detected. This + way, you can set the check_gradient flags to true and detect + errors in an automated way, instead of just printing error information + to the log. The error log is now also returned in the Solver summary + instead of being printed directly. The user can then decide what to + do with it. The existing hooks for user callbacks are used for + this purpose to keep the internal API changes minimal and non-invasive. - A new test is added, which triggers an exception in debug mode. In - release mode this error does not present itself, due to a peculiarity - of the way Eigen works. + The last and biggest change is the way the the interaction between + local parameterizations and the gradient checker works. Before, + local parameterizations would be ignored by the checker. However, + if a cost function does not compute its Jacobian along the null + space of the local parameterization, this wil not have any effect + on the solver, but would result in a gradient checker error. + With this change, the Jacobians are multiplied by the Jacobians + of the respective local parameterization and thus being compared + in the tangent space only. - Thanks to Werner Trobin for reporting this bug. + The typical use case for this are quaternion parameters, where + a cost function will typically assume that the quaternion is + always normalized, skipping the correct computation of the Jacobian + along the normal to save computation cost. - Change-Id: I8ae7aabf8eed8c3f9cf74b6c74d632ba44f82581 + Change-Id: I5e1bb97b8a899436cea25101efe5011b0bb13282 -commit 1635ce726078f00264b89d7fb6e76fd1c2796e59 -Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Wed Aug 19 00:26:02 2015 -0700 +commit d4264ec10d9a270b53b5db86c0245ae8cbd2cf18 +Author: Mike Vitus <vitus@google.com> +Date: Wed Aug 17 13:39:05 2016 -0700 - Fix a bug in the reordering code. - - When the user provides an ordering which starts at a non-zero group id, - or has gaps in the groups, then CAMD, the algorithm used to reorder - the program can crash or return garbage results. - - The solution is to map the ordering into grouping constraints, and then - to re-number the groups to be contiguous using a call to - MapValuesToContiguousRange. This was already done for CAMD based - ordering for Schur type solvers, but was not done for SPARSE_NORMAL_CHOLESKY. - - Thanks to Bernhard Zeisl for not only reporting the bug but also - providing a reproduction. + Add a quaternion local parameterization for Eigen's quaternion element convention. - Change-Id: I5cfae222d701dfdb8e1bda7f0b4670a30417aa89 + Change-Id: I7046e8b24805313c5fb6a767de581d0054fcdb83 -commit 4c3f8987e7f0c51fd367cf6d43d7eb879e79589f -Author: Simon Rutishauser <simon.rutishauser@pix4d.com> -Date: Thu Aug 13 11:10:44 2015 +0200 +commit fd7cab65ef30fbc33612220abed52dd5073413c4 +Author: Mike Vitus <vitus@google.com> +Date: Wed Aug 10 09:29:12 2016 -0700 - Add missing CERES_EXPORT to ComposedLoss + Fix typos in the pose graph 2D example. - Change-Id: Id7db388d41bf53e6e5704039040c9d2c6bf4c29c + Change-Id: Ie024ff6b6cab9f2e8011d21121a91931bd987bd1 -commit 1a740cc787b85b883a0703403a99fe49662acb79 -Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Tue Aug 11 18:08:05 2015 -0700 +commit 375dc348745081f89693607142d8b6744a7fb6b4 +Author: Mike Vitus <vitus@google.com> +Date: Wed Aug 3 18:51:16 2016 -0700 - Add the option to use numeric differentiation to nist and more_garbow_hillstrom + Remove duplicate entry for the NIST example in the docs. - Change-Id: If0a5caef90b524dcf5e2567c5b681987f5459401 + Change-Id: Ic4e8f9b68b77b5235b5c96fe588cc56866dab759 -commit ea667ede5c038d6bf3d1c9ec3dbdc5072d1beec6 -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Sun Aug 9 16:56:13 2015 +0100 +commit f554681bf22d769abc12dd6d346ef65f9bb22431 +Author: Mike Vitus <vitus@google.com> +Date: Mon Jul 25 18:30:48 2016 -0700 - Fix EIGENSPARSE option help s/t it displays in CMake ncurses GUI. - - - Shorten description for EIGENSPARSE to a single line, as otherwise - it is not correctly displayed in the ncurses CMake GUI. - - Made explicit in description that this results in an LGPL licensed - version of Ceres (this is also made clear in the CMake log output if - EIGENSPARSE is enabled). + Add an example for modeling and solving a 2D pose graph SLAM problem. - Change-Id: I11678a9cbc7a817133c22128da01055a3cb8a26d + Change-Id: Ia89b12af7afa33e7b1b9a68d69cf2a0b53416737 -commit a14ec27fb28ab2e8d7f1c9d88e41101dc6c0aab5 -Author: Richard Stebbing <richie.stebbing@gmail.com> -Date: Fri Aug 7 08:42:03 2015 -0700 +commit e1bcc6e0f51512f43aa7bfb7b0d62f7ac1d0cd4b +Author: Sameer Agarwal <sameeragarwal@google.com> +Date: Wed May 18 07:52:48 2016 -0700 - Fix SparseNormalCholeskySolver with dynamic sparsity. - - The previous implementation incorrectly cached the outer product matrix - pattern even when `dynamic_sparsity = true`. + Add additional logging for analyzing orderings - Change-Id: I1e58315a9b44f2f457d07c56b203ab2668bfb8a2 + Change-Id: Ic68d2959db35254e2895f11294fb25de4d4b8a81 -commit 3dd7fced44ff00197fa9fcb1f2081d12be728062 -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Sun Aug 9 16:38:50 2015 +0100 +commit 16980b4fec846f86910c18772b8145bcb55f4728 +Author: Mike Vitus <vitus@google.com> +Date: Fri Jul 15 13:37:49 2016 -0700 - Remove legacy dependency detection macros. + Delete the remove_definitons command from sampled_functions + CMakeLists.txt because it will be inherited from the top level examples + CMakeLists.txt. - - Before the new CMake buildsystem in 1.8, Ceres used non-standard - HINTS variables for dependencies. For backwards compatibility CMake - macros were added to translate these legacy variables into the new - (standard) variables. - - As it has now been multiple releases since the legacy variables - were used and they no longer appear in any of the documentation - support for them has now expired. - - Change-Id: I2cc72927ed711142ba7943df334ee008181f86a2 + Change-Id: I25593587df0ae84fd8ddddc589bc2a13f3777427 -commit 8b32e258ccce1eed2a50bb002add16cad13aff1e -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Sun Aug 9 15:42:39 2015 +0100 +commit a04490be97800e78e59db5eb67fa46226738ffba +Author: Mike Vitus <vitus@google.com> +Date: Thu Jul 14 10:10:13 2016 -0700 - Fix failed if() condition expansion if gflags is not found. - - - If a CMake-ified version of gflags is not detected, then - gflags_LIBRARIES is not set and the TARGET condition within a - multiconditional if() statement prevents configuration. + Add readme for the sampled_function example. - Change-Id: Ia92e97523d7a1478ab36539726b9540d7cfee5d0 + Change-Id: I9468b6a7b9f2ffdd2bf9f0dd1f4e1d5f894e540c -commit cc8d47aabb9d63ba4588ba7295058a6191c2df83 +commit ff11d0e63d4678188e8cabd40a532ba06912fe5a Author: Alex Stewart <alexs.mac@gmail.com> -Date: Sun Aug 9 15:18:42 2015 +0100 +Date: Wed Jun 29 09:31:45 2016 +0100 - Update all CMake to lowercase function name style. + Use _j[0,1,n]() Bessel functions on MSVC to avoid deprecation errors. - - Updated to new CMake style where function names are all lowercase, - this will be backwards compatible as CMake function names are - case insensitive. - - Updated using Emacs' M-x unscreamify-cmake-buffer. + - Microsoft deprecated the POSIX Bessel functions: j[0,1,n]() in favour + of _j[0,1,n](), it appears since at least MSVC 2005: + https://msdn.microsoft.com/en-us/library/ms235384(v=vs.100).aspx. + - As this occurs in jet.h (templated public header), although Ceres + suppresses the warning when it itself is built (to suppress a warning + about the insecurity of using std::copy), it will crop up again in + client code (without this fix) unless it is explicitly suppressed + there also. + - Raised as Issue #190: + https://github.com/ceres-solver/ceres-solver/issues/190. - Change-Id: If7219816f560270e59212813aeb021353a64a0e2 + Change-Id: If7ac5dbb856748f9900be93ec0452a40c0b00524 -commit 1f106904c1f47460c35ac03258d6506bb2d60838 -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Sun Aug 9 14:55:02 2015 +0100 +commit 8ea86e1614cf77644ce782e43cde6565a54444f5 +Author: Nicolai Wojke <nwojke@uni-koblenz.de> +Date: Mon Apr 25 14:24:41 2016 +0200 - Update minimum iOS version to 7.0 for shared_ptr/unordered_map. - - - In order to correctly detect shared_ptr (& unordered_map) - the iOS version must be >= 7.0 (Xcode 5.0+). This only affects the - SIMULATOR(64) platform builds, as the OS (device) build uses the - latest SDK which is now likely 8.0+. + Fix: Copy minimizer option 'is_silent' to LinSearchDirection::Options - Change-Id: Iefec8f03408b8cdc7a495f442ebba081f800adb0 + Change-Id: I23b4c3383cad30033c539ac93883d77c8dd4ba1a -commit 16ecd40523a408e7705c9fdb0e159cef2007b8ab -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Sat Aug 8 17:32:31 2015 +0100 +commit 080ca4c5f2ac42620971a07f06d2d13deb7befa8 +Author: Sameer Agarwal <sameeragarwal@google.com> +Date: Sun Apr 24 22:46:54 2016 -0700 - Fix bug in gflags' <= 2.1.2 exported CMake configuration. - - - gflags <= 2.1.2 has a bug in its exported gflags-config.cmake: - https://github.com/gflags/gflags/issues/110 whereby it sets - gflags_LIBRARIES to a non-existent 'gflags' target. - - This causes linker errors if gflags is installed in a non-standard - location (as otherwise CMake resolves gflags to -lgflags which - links if gflags is installed somewhere on the current path). - - We now check for this case, and search for the correct gflags imported - target and update gflags_LIBRARIES to reference it if found, otherwise - proceed on to the original manual search to try to find gflags. + Fix typos in users.rst - Change-Id: Iceccc3ee53c7c2010e41cc45255f966e7b13d526 + Change-Id: Ifdc67638a39403354bc9589f42a1b42cb9984dd2 -commit 56be8de007dfd65ed5a31c795eb4a08ad765f411 -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Thu Jun 25 21:31:00 2015 +0100 +commit 21ab397dc55335c147fdd795899b1f8981037b09 +Author: Sameer Agarwal <sameeragarwal@google.com> +Date: Sun Apr 24 21:13:00 2016 -0700 - Add docs for new CXX11 option & mask option for Windows. - - - The CXX11 option has no effect on Windows, as there, any new C++11 - features are enabled by default, as such to avoid confusion we only - present the option for non-Windows. + Make some Jet comparisons exact. - Change-Id: I38925ae3bb8c16682d404468ba95c611a519b9b9 + Change-Id: Ia08c72f3b8779df96f5c0d5a954b2c0a1dd3a061 -commit cf863b6415ac4dbf3626e70adeac1ac0f3d87ee5 +commit ee40f954cf464087eb8943abf4d9db8917a33fbe Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Thu Aug 6 14:52:18 2015 -0700 +Date: Sun Apr 24 07:49:55 2016 -0700 - Remove the spec file needed for generating RPMs. + Add colmap to users.rst - Now that ceres is part of RawHide, there is no need to carry - this spec file with the ceres distribution. - - Change-Id: Icc400b9874ba05ba05b353e2658f1de94c72299e + Change-Id: I452a8c1dc6a3bc55734b2fc3a4002ff7939ba863 -commit 560940fa277a469c1ab34f1aa303ff1af9c3cacf +commit 9665e099022bd06e53b0779550e9aebded7f274d Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Sat Jul 11 22:21:31 2015 -0700 +Date: Mon Apr 18 06:00:58 2016 -0700 - A refactor of the cubic interpolation code + Fix step norm evaluation in LineSearchMinimizer - 1. Push the boundary handling logic into the underlying array - object. This has two very significant impacts: + TrustRegionMinimizer evaluates the size of the step + taken in the ambient space, where as the LineSearchMinimizer + was using the norm in the tangent space. This change fixes + this discrepancy. - a. The interpolation code becomes extremely simple to write - and to test. + Change-Id: I9fef64cbb5622c9769c0413003cfb1dc6e89cfa3 + +commit 620ca9d0668cd4a00402264fddca3cf6bd2e7265 +Author: Alex Stewart <alexs.mac@gmail.com> +Date: Mon Apr 18 15:14:11 2016 +0100 + + Remove use of -Werror when compiling Ceres. - b. The user has more flexibility in implementing how out of bounds - values are handled. We provide one default implementation. + - As noted in Issue #193 (in that case for GCC 6), Ceres' use of -Werror + when compiling on *nix can prevent compilation on new compilers that + add new warnings and there is an inevitable delay between new compiler + versions and Ceres versions. + - Removing the explicit use of -Werror, and relying on indirect + verification by maintainers should fix build issues for Ceres releases + on newer compilers. - Change-Id: Ic2f6cf9257ce7110c62e492688e5a6c8be1e7df2 + Change-Id: I38e9ade28d4a90e53dcd918a7d470f1a1debd7b4 -commit dfdf19e111c2b0e6daeb6007728ec2f784106d49 -Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Wed Aug 5 15:20:57 2015 -0700 +commit 0c63bd3efbf1d41151c9fab41d4b77dc64c572c8 +Author: Mike Vitus <vitus@google.com> +Date: Thu Apr 14 10:25:52 2016 -0700 - Lint cleanup from Jim Roseborough + Add floor and ceil functions to the Jet implementation. - Change-Id: Id6845c85644d40e635ed196ca74fc51a387aade4 + Change-Id: I72ebfb0e9ade2964dbf3a014225ead345d5ae352 -commit 7444f23ae245476a7ac8421cc2f88d6947fd3e5f -Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Mon Aug 3 12:22:44 2015 -0700 +commit 9843f3280356c158d23c06a16085c6c5ba35e053 +Author: Alex Stewart <alexs.mac@gmail.com> +Date: Mon Mar 7 21:24:32 2016 +0000 - Fix a typo in small_blas.h - - The reason this rather serious looking typo has not - caused any problems uptil now is because NUM_ROW_B is - computed but never actually used. + Report Ceres compile options as components in find_package(). - Thanks to Werner Trobin for pointing this out. + - Users can now specify particular components from Ceres, such as + SuiteSparse support) that must be present in a detected version of + Ceres in order for it to be reported as found by find_package(). + - This allows users to specify for example that they require a version + of Ceres with SuiteSparse support at configure time, rather than + finding out only at run time that Ceres was not compiled with the + options they require. + - The list of available components are built directly from the Ceres + compile options. + - The meta-module SparseLinearAlgebraLibrary is present if at least + one sparse linear algebra backend is available. - Change-Id: Id2b4d9326ec21baec8a85423e3270aefbafb611e + Change-Id: I65f1ddfd7697e6dd25bb4ac7e54f5097d3ca6266 -commit 5a48b92123b30a437f031eb24b0deaadc8f60d26 -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Sat Jul 4 17:59:52 2015 +0100 +commit e4d4d88bbe51b9cc0f7450171511abbea0779790 +Author: Timer <linyicx@126.com> +Date: Fri Apr 8 15:42:18 2016 +0800 - Export Ceres build directory into local CMake package registry. - - - Optionally use CMake's export() functionality to export the Ceres - build directory as a package into the local CMake package registry. - - This enables the detection & use of Ceres from CMake *without* - requiring that Ceres be installed. + Fix a spelling error in nnls_modeling.rst - Change-Id: Ib5a7588446f490e1b405878475b6b1dd13accd1f + Change-Id: I341d901d3df993bc5397ed15e6cb330b0c38fd72 -commit d9790e77894ea99d38137d359d6118315b2d1601 -Author: Sameer Agarwal <sameeragarwal@google.com> -Date: Sun Jul 12 19:39:47 2015 -0700 +commit 5512f58536e1be0d92010d8325b606e7b4733a08 +Author: Keir Mierle <mierle@gmail.com> +Date: Thu Apr 7 12:03:16 2016 -0700 - Add ProductParameterization + Only use collapse() directive with OpenMP 3.0 or higher - Often a parameter block is the Cartesian product of a number of - manifolds. For example, a rigid transformation SE(3) = SO(3) x R^3 - In such cases, where you have the local parameterization - of the individual manifolds available, - ProductParameterization can be used to construct a local - parameterization of the cartesian product. + Change-Id: Icba544c0494763c57eb6dc61e98379312ca15972 + +commit d61e94da5225217cab7b4f93b72f97055094681f +Author: Thomas Schneider <schneith@ethz.ch> +Date: Wed Apr 6 10:40:29 2016 +0200 + + Add IsParameterBlockConstant to the ceres::Problem class. - Change-Id: I4b5bcbd2407a38739c7725b129789db5c3d65a20 + Change-Id: I7d0e828e81324443209c17fa54dd1d37605e5bfe -commit 7b4fb69dad49eaefb5d2d47ef0d76f48ad7fef73 +commit 77d94b34741574e958a417561702d6093fba87fb Author: Alex Stewart <alexs.mac@gmail.com> -Date: Sun Jun 28 21:43:46 2015 +0100 - - Cleanup FindGflags & use installed gflags CMake config if present. - - - Split out gflags namespace detection methods: - check_cxx_source_compiles() & regex, into separate functions. - - Use installed/exported gflags CMake configuration (present for - versions >= 2.1) if available, unless user expresses a preference not - to, or specifies search directories, in which case fall back to manual - search for components. - -- Prefer installed gflags CMake configurations over exported gflags - build directories on all OSs. - - Remove custom version of check_cxx_source_compiles() that attempted - to force the build type of the test project. This only worked for - NMake on Windows, not MSVC as msbuild ignored our attempts to force - the build type. Now we always use the regex method on Windows if - we cannot find an installed gflags CMake configuration which works - even on MSVC by bypassing msbuild. - - Add default search paths for gflags on Windows. - - Change-Id: I083b267d97a7a5838a1314f3d41a61ae48d5a2d7 - -commit b3063c047906d4a44503dc0187fdcbbfcdda5f38 -Author: Alex Stewart <alexs.mac@gmail.com> -Date: Wed Jul 15 20:56:56 2015 +0100 +Date: Sun Feb 14 16:54:03 2016 +0000 - Add default glog install location on Windows to search paths. + Fix install path for CeresConfig.cmake to be architecture-aware. + + - Previously we were auto-detecting a "64" suffix for the install path + for the Ceres library on non-Debian/Arch Linux distributions, but + we were installing CeresConfig.cmake to an architecture independent + location. + - We now install CeresConfig.cmake to lib${LIB_SUFFIX}/cmake/Ceres. + - Also make LIB_SUFFIX visible to the user in the CMake GUI s/t they can + easily override the auto-detected value if desired. + - Reported by jpgr87@gmail.com as Issue #194. - Change-Id: I083d368be48986e6780c11460f5a07b2f3b6c900 + Change-Id: If126260d7af685779487c01220ae178ac31f7aea |