commit aef9c9563b08d5f39eee1576af133a84749d1b48 Author: Alessandro Gentilini Date: Tue Oct 6 20:43:45 2015 +0200 Add test for Bessel functions. Change-Id: Ief5881e8027643d7ef627e60a88fdbad17f3d884 commit 49c86018e00f196c4aa9bd25daccb9919917efee Author: Alessandro Gentilini Date: Wed Sep 23 21:59:44 2015 +0200 Add Bessel functions in order to use them in residual code. See "How can I use the Bessel function in the residual function?" at https://groups.google.com/d/msg/ceres-solver/Vh1gpqac8v0/NIK1EiWJCAAJ Change-Id: I3e80d9f9d1cadaf7177076e493ff46ace5233b76 commit dfb201220c034fde00a242d0533bef3f73b2907d Author: Simon Rutishauser Date: Tue Oct 13 07:33:58 2015 +0200 Make miniglog threadsafe on non-windows system by using localtime_r() instead of localtime() for time formatting Change-Id: Ib8006c685cd8ed4f374893bef56c4061ca2c9747 commit 41455566ac633e55f222bce7c4d2cb4cc33d5c72 Author: Alex Stewart Date: Mon Sep 28 22:43:42 2015 +0100 Remove link-time optimisation (LTO). - 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. Change-Id: I17b52957faefbdeff0aa40846dc9b342db1b02e3 commit 89c40005bfceadb4163bd16b7464b3c2ce740daf Author: Alex Stewart 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 Author: Sameer Agarwal Date: Sat Sep 26 14:10:15 2015 -0700 Documentation updates. 1. Fix a typo in the Trust Region algorithm. 2. Add ARL in the list of users. 3. Update the version history. Change-Id: Ic286e8ef1a71af07f3890b7592dd3aed9c5f87ce commit 90e32a8dc437dfb0e6747ce15a1f3193c13b7d5b Author: Alex Stewart Date: Mon Sep 21 21:08:25 2015 +0100 Use old minimum iOS version flags on Xcode < 7.0. - The newer style, which are more specific and match the SDK names are not available on Xcode < 7.0. Change-Id: I2f07a0365183d2781157cdb05fd49b30ae001ac5 commit 26cd5326a1fb99ae02c667eab9942e1308046984 Author: Alex Stewart Date: Mon Sep 21 10:16:01 2015 +0100 Add gtest-specific flags when building/using as a shared library. - Currently these flags are only used to define the relevant DLL export prefix for Windows. Change-Id: I0c05207b512cb4a985390aefc779b91febdabb38 commit c4c79472112a49bc1340da0074af2d15b1c89749 Author: Alex Stewart Date: Sun Sep 20 18:26:59 2015 +0100 Clean up iOS.cmake to use xcrun/xcodebuild & libtool. - 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. Change-Id: I5f83a60607db34d461ebe85f9dce861f53d98277 commit 155765bbb358f1d19f072a4b54825faf1c059910 Author: Sameer Agarwal Date: Wed Sep 16 06:56:08 2015 -0700 Import the latest version of gtest and gmock. Change-Id: I4b686c44bba823cab1dae40efa99e31340d2b52a commit 0c4647b8f1496c97c6b9376d9c49ddc204aa08dd Author: Alex Stewart Date: Wed Sep 16 20:01:11 2015 +0100 Remove FAQ about increasing inlining threshold for Clang. - 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 commit f4b768b69afcf282568f9ab3a3f0eb8078607468 Author: Sameer Agarwal Date: Mon Sep 14 13:53:24 2015 -0700 Lint changes from William Rucklidge Change-Id: I0dac2549a8fa2bfd12f745a8d8a0db623b7ec1ac commit 5f2f05c726443e35767d677daba6d25dbc2d7ff8 Author: Sameer Agarwal Date: Fri Sep 11 22:19:38 2015 -0700 Refactor system_test 1. Move common test infrastructure into test_util. 2. system_test now only contains powells function. 3. Add bundle_adjustment_test. 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. Change-Id: I16a9a9a83a845a7aaf28762bcecf1a8ff5aee805 commit 1936d47e213142b8bf29d3f548905116092b093d Author: Alex Stewart Date: Tue Sep 8 23:27:42 2015 +0100 Revert increased inline threshold (iff Clang) to exported Ceres target. - 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. Change-Id: I88e2e0001e4586ba2718535845ed1e4b1a5b72bc commit a66d89dcda47cefda83758bfb9e7374bec4ce866 Author: Sameer Agarwal Date: Sat Sep 5 16:50:20 2015 -0700 Get ready for 1.11.0RC1 Update version numbers. Drop CERES_VERSION_ABI macro. Change-Id: Ib3eadabb318afe206bb196a5221b195d26cbeaa0 commit 1ac3dd223c179fbadaed568ac532af4139c75d84 Author: Sameer Agarwal Date: Sat Sep 5 15:30:01 2015 -0700 Fix a bug in CompressedRowSparseMatrix::AppendRows 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. Change-Id: I97dba37082bd5dad242ae1af0447a9178cd92027 commit 67622b080c8d37b5e932120a53d4ce76b80543e5 Author: Sameer Agarwal Date: Sat Sep 5 13:18:38 2015 -0700 Fix a pointer access bug in Ridders' algorithm. A pointer to an Eigen matrix was being used as an array. Change-Id: Ifaea14fa3416eda5953de49afb78dc5a6ea816eb commit 5742b7d0f14d2d170054623ccfee09ea214b8ed9 Author: Sameer Agarwal Date: Wed Aug 26 09:24:33 2015 -0700 Improve performance of SPARSE_NORMAL_CHOLESKY + dynamic_sparsity 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. For Eigen and for CXSparse we now explicitly compute the normal equations using their respective matrix-matrix product routines and solve. Change-Id: Ifbd8ed78987cdf71640e66ed69500442526a23d4 commit d0b6cf657d6ef0dd739e958af9a5768f2eecfd35 Author: Keir Mierle Date: Fri Sep 4 18:43:41 2015 -0700 Fix incorrect detect structure test Change-Id: I7062f3639147c40b57947790d3b18331a39a366b commit 0e8264cc47661651a11e2dd8570c210082963545 Author: Alex Stewart Date: Sat Aug 22 16:23:05 2015 +0100 Add increased inline threshold (iff Clang) to exported Ceres target. - 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. Change-Id: I31e8f1abfda140d22e85bb48aa57f028a68a415e commit a1b3fce9e0a4141b973f6b4dd9b08c4c13052d52 Author: Alex Stewart Date: Mon Aug 31 14:14:56 2015 +0100 Add optional export of Ceres build directory to new features list. Change-Id: I6f1e42b41957ae9cc98fd9dcd1969ef64c4cd96f commit e46777d8df068866ef80902401a03e29348d11ae Author: Alex Stewart Date: Mon Aug 31 12:41:54 2015 +0100 Credit reporters of buildsystem bugs in version history. Change-Id: I16fe7973534cd556d97215e84268ae0b8ec4e11a commit 01548282cb620e5e3ac79a63a391cd0afd5433e4 Author: Sameer Agarwal Date: Sun Aug 30 22:29:27 2015 -0700 Update the version history. Change-Id: I29873bed31675e0108f1a44f53f7bc68976b7f98 commit 2701429f770fce69ed0c77523fa43d7bc20ac6dc Author: Sameer Agarwal Date: Sun Aug 30 21:33:57 2015 -0700 Use Eigen::Dynamic instead of ceres::DYNAMIC in numeric_diff.h Change-Id: Iccb0284a8fb4c2160748dfae24bcd595f1d4cb5c commit 4f049db7c2a3ee8cf9910c6eac96be6a28a5999c Author: Tal Ben-Nun Date: Wed May 13 15:43:51 2015 +0300 Adaptive numeric differentiation using Ridders' method. 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. 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). Change-Id: I2d6e924d7ff686650272f29a8c981351e6f72091 commit 070bba4b43b4b7449628bf456a10452fd2b34d28 Author: Sameer Agarwal Date: Tue Aug 25 13:37:33 2015 -0700 Lint fixes from William Rucklidge Change-Id: I719e8852859c970091df842e59c44e02e2c65827 commit 887a20ca7f02a1504e35f7cabbdfb2e0842a0b0b Author: Alex Stewart Date: Wed Aug 12 21:41:43 2015 +0100 Build position independent code when compiling Ceres statically. - 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). [1] https://github.com/Itseez/opencv_contrib/pull/290#issuecomment-130389471 Change-Id: I99388f1784ece688f91b162d009578c5c97ddaf6 commit 860bba588b981a5718f6b73e7e840e5b8757fe65 Author: Sameer Agarwal Date: Tue Aug 25 09:43:21 2015 -0700 Fix a bug in DetectStructure 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 commit b0cbc0f0b0a22f01724b7b647a4a94db959cc4e4 Author: Johannes Schönberger Date: Thu Aug 20 14:21:30 2015 -0400 Reduce memory footprint of SubsetParameterization Change-Id: If113cb4696d5aef3e50eed01fba7a3d4143b7ec8 commit ad2a99777786101411a971e59576ca533a297013 Author: Sergey Sharybin Date: Sat Aug 22 11:18:45 2015 +0200 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. Change-Id: Ia23ae8dfd20c482cb9cd1301f17edf9a34df3235 commit 4bf3868beca9c17615f72ec03730cddb3676acaa Author: Sameer Agarwal Date: Sun Aug 9 15:24:45 2015 -0700 Fix a bug in the Schur eliminator 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. 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. 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. 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. Thanks to Werner Trobin for reporting this bug. Change-Id: I8ae7aabf8eed8c3f9cf74b6c74d632ba44f82581 commit 1635ce726078f00264b89d7fb6e76fd1c2796e59 Author: Sameer Agarwal Date: Wed Aug 19 00:26:02 2015 -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. Change-Id: I5cfae222d701dfdb8e1bda7f0b4670a30417aa89 commit 4c3f8987e7f0c51fd367cf6d43d7eb879e79589f Author: Simon Rutishauser Date: Thu Aug 13 11:10:44 2015 +0200 Add missing CERES_EXPORT to ComposedLoss Change-Id: Id7db388d41bf53e6e5704039040c9d2c6bf4c29c commit 1a740cc787b85b883a0703403a99fe49662acb79 Author: Sameer Agarwal Date: Tue Aug 11 18:08:05 2015 -0700 Add the option to use numeric differentiation to nist and more_garbow_hillstrom Change-Id: If0a5caef90b524dcf5e2567c5b681987f5459401 commit ea667ede5c038d6bf3d1c9ec3dbdc5072d1beec6 Author: Alex Stewart Date: Sun Aug 9 16:56:13 2015 +0100 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). Change-Id: I11678a9cbc7a817133c22128da01055a3cb8a26d commit a14ec27fb28ab2e8d7f1c9d88e41101dc6c0aab5 Author: Richard Stebbing Date: Fri Aug 7 08:42:03 2015 -0700 Fix SparseNormalCholeskySolver with dynamic sparsity. The previous implementation incorrectly cached the outer product matrix pattern even when `dynamic_sparsity = true`. Change-Id: I1e58315a9b44f2f457d07c56b203ab2668bfb8a2 commit 3dd7fced44ff00197fa9fcb1f2081d12be728062 Author: Alex Stewart Date: Sun Aug 9 16:38:50 2015 +0100 Remove legacy dependency detection macros. - 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 commit 8b32e258ccce1eed2a50bb002add16cad13aff1e Author: Alex Stewart Date: Sun Aug 9 15:42:39 2015 +0100 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. Change-Id: Ia92e97523d7a1478ab36539726b9540d7cfee5d0 commit cc8d47aabb9d63ba4588ba7295058a6191c2df83 Author: Alex Stewart Date: Sun Aug 9 15:18:42 2015 +0100 Update all CMake to lowercase function name style. - 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. Change-Id: If7219816f560270e59212813aeb021353a64a0e2 commit 1f106904c1f47460c35ac03258d6506bb2d60838 Author: Alex Stewart Date: Sun Aug 9 14:55:02 2015 +0100 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+. Change-Id: Iefec8f03408b8cdc7a495f442ebba081f800adb0 commit 16ecd40523a408e7705c9fdb0e159cef2007b8ab Author: Alex Stewart Date: Sat Aug 8 17:32:31 2015 +0100 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. Change-Id: Iceccc3ee53c7c2010e41cc45255f966e7b13d526 commit 56be8de007dfd65ed5a31c795eb4a08ad765f411 Author: Alex Stewart Date: Thu Jun 25 21:31:00 2015 +0100 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. Change-Id: I38925ae3bb8c16682d404468ba95c611a519b9b9 commit cf863b6415ac4dbf3626e70adeac1ac0f3d87ee5 Author: Sameer Agarwal Date: Thu Aug 6 14:52:18 2015 -0700 Remove the spec file needed for generating RPMs. Now that ceres is part of RawHide, there is no need to carry this spec file with the ceres distribution. Change-Id: Icc400b9874ba05ba05b353e2658f1de94c72299e commit 560940fa277a469c1ab34f1aa303ff1af9c3cacf Author: Sameer Agarwal Date: Sat Jul 11 22:21:31 2015 -0700 A refactor of the cubic interpolation code 1. Push the boundary handling logic into the underlying array object. This has two very significant impacts: a. The interpolation code becomes extremely simple to write and to test. b. The user has more flexibility in implementing how out of bounds values are handled. We provide one default implementation. Change-Id: Ic2f6cf9257ce7110c62e492688e5a6c8be1e7df2 commit dfdf19e111c2b0e6daeb6007728ec2f784106d49 Author: Sameer Agarwal Date: Wed Aug 5 15:20:57 2015 -0700 Lint cleanup from Jim Roseborough Change-Id: Id6845c85644d40e635ed196ca74fc51a387aade4 commit 7444f23ae245476a7ac8421cc2f88d6947fd3e5f Author: Sameer Agarwal Date: Mon Aug 3 12:22:44 2015 -0700 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. Thanks to Werner Trobin for pointing this out. Change-Id: Id2b4d9326ec21baec8a85423e3270aefbafb611e commit 5a48b92123b30a437f031eb24b0deaadc8f60d26 Author: Alex Stewart Date: Sat Jul 4 17:59:52 2015 +0100 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. Change-Id: Ib5a7588446f490e1b405878475b6b1dd13accd1f commit d9790e77894ea99d38137d359d6118315b2d1601 Author: Sameer Agarwal Date: Sun Jul 12 19:39:47 2015 -0700 Add ProductParameterization 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: I4b5bcbd2407a38739c7725b129789db5c3d65a20 commit 7b4fb69dad49eaefb5d2d47ef0d76f48ad7fef73 Author: Alex Stewart 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 Date: Wed Jul 15 20:56:56 2015 +0100 Add default glog install location on Windows to search paths. Change-Id: I083d368be48986e6780c11460f5a07b2f3b6c900