Commit Graph

2207 Commits

Author SHA1 Message Date
Sergiu Deitsch 8ff216cef6 Add ReadTheDocs support
Mirror versioned documentation at https://ceres-solver.readthedocs.io.

Change-Id: I180e8fc32d05a0fa7dce09f77dbe38c5ca207420
2025-02-17 07:44:20 -08:00
Sergiu Deitsch fc3699d675 Cleanup Sphinx config
Change-Id: Iea63ec709fda82685c5f484d643627213cdc1496
2025-02-17 07:42:57 -08:00
Sergiu Deitsch 533bcfd694 Avoid incorrect member reference warning
Change-Id: I6f1b271c3a7b805dd4e539d0d44e2cbc626ef1f7
2025-02-17 07:41:21 -08:00
Sergiu Deitsch f86747f66d Remove unreferenced footnote
Change-Id: I6988ef4f0c6a98c7cbf44a45c3c11c81ab26466e
2025-02-17 11:20:54 +01:00
Sergiu Deitsch 018bb49e80 Use subsections instead of an enumeration for FAQs
Change-Id: I37c1256417240bf7decec1f756df8a8402f5c586
2025-02-16 15:35:49 -08:00
Sergiu Deitsch 80e466994b Fix FAQs spelling
Change-Id: I53f69875cc8e82e39602f0aae80e30d456c933c1
2025-02-16 15:35:04 -08:00
Sergiu Deitsch 3fb154795d Use console syntax highlighting for application output
Change-Id: I75c5a4bef55416e456528fde5485264c8c7545aa
2025-02-16 15:34:34 -08:00
Sergiu Deitsch d1c79cbd1c Fix docs indent
Change-Id: I4cc8bfb1883439cf91322e6383fb5107e31cc7d4
2025-02-16 15:34:04 -08:00
Sergiu Deitsch 32df9c52c3 Replace macos-12 runner by macos-15
The macos-12 runner is no longer available.

Change-Id: Ib559bf949f423d2bcc350686dbc829b72fe9a9bb
2025-02-16 16:59:40 +01:00
connorlee77 2c90a63af9 Add residuals and jacobian getters to TinySolver.
- Add methods to aceess the cached residuals and jacobian computed in
the optimization process in TinySolver. Usage of such methods will
retrieve the corresponding values associated with the converged
parameter.
- Reorder the Update() call to ensure that the jacobian/residuals
associated with the converged parameter are computed and cached.

Change-Id: If82e19d67d28b057833357f2c9a75b2d0fd139af
2025-02-11 21:07:58 +00:00
Sameer Agarwal c29b5257e2 Fix the Bazel build
Change-Id: I864c1a10e21a4d0e985262c61e7fd270da452d05
2024-09-29 13:44:55 -07:00
Sameer Agarwal 3db40b8013 Use std::string_view in EventLogger
Change-Id: If23504e146826f143220b031a5fbc2be2013d127
2024-09-29 09:43:26 -07:00
Sameer Agarwal 01a06ef7b1 Add an EventLogger to TrustRegionPreprocessor
Change-Id: I808567a6462f9326f385e88fdf2849537595ef7b
2024-09-28 13:19:09 -07:00
Reinhold Gschweicher a0dc19eb52 Fix Abseil usage of installed cmake-config
Fix the generated cmake-config file to look for the used Abseil-cpp
config files providing the needed targets.

When using Abseil from system (or locally installed and set via
`absl_DIR`) the used targets like `absl::log` need to be made available
in downstream projects using `ceres-solver`.

For system packages with no `absl_VERSION` info check for the required
target `absl::absl_vlog_is_on`, just like we do in `CMakeLists.txt`.

Error on installation/export of "no-absl-VERSION" as we can't check
version mismatches.

When using `abseil-cpp` as submodule the abseil-configs are added to the
install target as well. Use these config files to make the needed Abseil
targets available.

In the submodule case extract the `absl_VERSION` variable from its
`CMakeLists.txt` file for us to check against in the generated
cmake-config-file.

Fixes: https://github.com/ceres-solver/ceres-solver/issues/1089

Change-Id: I3e3d079ddf931e7fe1b57783471c32c19e4d31b6
2024-09-25 08:00:24 +02:00
Sameer Agarwal 8c740b83ee ClangTidy fixes
Change-Id: I8d1a0258fc586040bd1cb5cc6131fdad2fe134eb
2024-09-18 21:41:18 -07:00
Sameer Agarwal 42475eec77 Use absl::btree_map instead of std::map
Change-Id: Iece280a6cb0f37fa0bc572046b9d7f79ca825ebc
2024-09-17 12:18:31 -07:00
Sameer Agarwal dcce78b8df Add some time logging to bundle_adjuster.cc
Change-Id: I0deec65ec8d612a133748a242fe50d8e154f2704
2024-09-17 12:17:34 -07:00
Sergiu Deitsch e1385cc7e7 Fix MSVC build
Previously missed instance of preprocessor directives used in a macro
expansion.

Change-Id: I2f1e4ad95036851fa502a9ea01d2a9684a3e0f9d
2024-09-17 00:00:37 +02:00
Sameer Agarwal 39b7cbaa5d Use absl hash containers for graph algorithms
This reduces pre-processor time when finding an
ordering automatically substantially.

Before:

ComputeStableSchurOrdering
                                        Delta   Cumulative
              CreateHessianGraph :    0.50324      0.50324
                     Preordering :    0.00692      0.51017
            StableIndependentSet :    0.26341      0.77358
         ConstantParameterBlocks :    0.00095      0.77453
                           Total :    0.23978      1.01431

After:

ComputeStableSchurOrdering
                                        Delta   Cumulative
              CreateHessianGraph :    0.17183      0.17183
                     Preordering :    0.00226      0.17409
            StableIndependentSet :    0.12510      0.29919
         ConstantParameterBlocks :    0.00073      0.29991
                           Total :    0.01638      0.31629

Change-Id: I50bbac69f8b3f19240a61a218913cebf34da0db5
2024-09-16 21:51:54 +00:00
Sergiu Deitsch 00b33b6523 Fix MSVC build
Using preprocessor directives in a macro expansion is a (non-standard)
language extension that is not supported by MSVC.

Change-Id: I6e158b108a9c13cd277afb96cab2017ac192e3a2
2024-09-16 23:16:07 +02:00
Sameer Agarwal 0a7845fef4 Unbreak the build due to a silly typo
Change-Id: Ib05cb3ceeb974b1099bc7b090f77e109ddcd7166
2024-09-15 21:24:47 -07:00
Sameer Agarwal 88f2cb32cd ClangTidy fixes
Change-Id: I1f4d6975fd1b9629d1db0d529d9ee92d79c11e84
2024-09-15 20:12:27 -07:00
Sameer Agarwal c59882eca0 ClangTidy fixes
Change-Id: I421b29e218c045c5d8bef42c840fa366d7c011fc
2024-09-15 22:29:56 +00:00
Sameer Agarwal 793efde013 Fix Abseil version checking
Previously the find_package call was followed by a manual version
check because we were using a Major.Minor version. Just checking
for Major version works.

Change-Id: If83f8d1c6001d0ac3d53d9b24946b9168eb4932b
2024-09-15 15:13:13 -07:00
Sameer Agarwal 07651df0ad Partially update the installation docs
1. Update dependencies
2. Mention submodules

Change-Id: I2f238c92a3a1eeee3277e3ec6f973fc2d50fe008
2024-09-15 15:00:25 -07:00
Sameer Agarwal 8f1b6123ad GradientProblem & related classes use std::unique_ptr
Previously these classes in analogy with ceres::Problem's interface
had interfaces to allow bare pointers as well as unique_ptrs. This
CL changes the API to always use unique_ptr, this is less error prone
and makes the default ownership semantics clearer.

Change-Id: I7577a90761f341c7e009c248c820f0fec2e6f32d
2024-09-15 21:57:23 +00:00
Reinhold Gschweicher 487ce37fa7 Allow system/local Abseil master
Add special handling when `absl_VERSION` is empty. This is
the case when the `master` branch of `abseil-cpp` was installed using
`CMake`. In that case check for VLOG availability through the CMake
target `absl::absl_vlog_is_on`.

Fixes: https://github.com/ceres-solver/ceres-solver/issues/1098
Change-Id: I3367aeb65caceb11558d8d6265dafe3ecc9a4875
2024-09-11 08:06:36 +02:00
Sameer Agarwal 6aa7df9650 Reduce the minimum required version of Abseil
1. The required version of Abseil is now 20240116.0 instead of 20240116.2.
   This was an oversight. Thanks to @NeroBurner for pointing this out.
   Both CMake and Bazel builds are updated.

2. Unbreak the Bazel build which had become stale.

Change-Id: I274bbad2f94f7710387f9693de9c66b035758970
2024-09-09 08:48:58 -07:00
Ian Muldoon ea4400cd57 Update reference from Project Tango to ARCore
Change-Id: Idcba8afc980561bfc9444c375f573e388a53e85f
2024-09-05 10:23:05 -07:00
Sameer Agarwal ecae3de151 Fix a declaration order problem in sparse_cholesky_test.cc
Change-Id: Ie74069e8716145c244955bf907e2bae79f48972f
2024-08-26 16:57:17 +00:00
Sameer Agarwal 8964e52b01 ClangTidy fixes
Change-Id: Id7358fcdccae69b46b479d55ed6aee80efd3431e
2024-08-26 09:18:17 -07:00
Sameer Agarwal 80fce72bfd Add mixed precision solves for SUITE_SPARSE
Starting with SuiteSparse version 7.4.0 CHOLMOD has support for single
precision matrices. This allows us to have single precision and mixed
precision solves when using the SUITE_SPARSE backend.

This CL also fixes sparse_cholesky_test which was completely broken for
single precision testing.

Sample performance on my Mac.
/usr/bin/time -l ./bin/bundle_adjuster --input=../../Downloads/problem-3068-310854-pre.txt
<SNIP>

Cost:
Initial                          9.099334e+07
Final                            4.161838e+06
Change                           8.683150e+07

Minimizer iterations                        6
Successful steps                            4
Unsuccessful steps                          2

Time (in seconds):
Preprocessor                         2.528222

  Residual only evaluation           0.142804 (5)
  Jacobian & residual evaluation     0.424014 (4)
  Linear solver                     54.083396 (5)
Minimizer                           54.895752

Postprocessor                        0.024564
Total                               57.448539

Termination:                   NO_CONVERGENCE (Maximum number of iterations reached. Number of iterations: 5.)

       59.04 real       341.24 user         5.49 sys
          5776375808  maximum resident set size
<SNIP>
        616329634071  instructions retired
        929475980510  cycles elapsed
          5375034560  peak memory footprint

/usr/bin/time -l ./bin/bundle_adjuster --input=../../Downloads/problem-3068-310854-pre.txt  -mixed_precision_solves
<SNIP>

Cost:
Initial                          9.099334e+07
Final                            4.148930e+06
Change                           8.684441e+07

Minimizer iterations                        6
Successful steps                            4
Unsuccessful steps                          2

Time (in seconds):
Preprocessor                         2.580217

  Residual only evaluation           0.144098 (5)
  Jacobian & residual evaluation     0.396723 (4)
  Linear solver                     23.636074 (5)
Minimizer                           24.427163

Postprocessor                        0.023790
Total                               27.031170

Termination:                   NO_CONVERGENCE (Maximum number of iterations reached. Number of iterations: 5.)

       28.58 real       128.53 user         2.37 sys
          4818386944  maximum resident set size
<SNIP>
        395186936091  instructions retired
        368802808856  cycles elapsed
          4327029824  peak memory footprint

Change-Id: I1f137b0dd12da8da7f9ced338dd8f20f4bbdf99d
2024-08-24 21:12:54 -07:00
Sameer Agarwal 8f85014dcf Change the version from 2.2.0 to 2.3.0
The dependencies and the API have changed enough that
it is worth incrementing the version number.

Change-Id: I4e2911a91988d97f47320c56072ad1546e20030b
2024-08-24 09:29:51 -07:00
Sameer Agarwal 9186dcc49c Add the ability to use system installed versions of abseil and googletest
If the user has checked out the submodules in third_party, they will be
used, otherwise we will try and find the system installed versions of
these dependencies and use them if they are modern enough.

Change-Id: I52164bc48a6ea804b85cdda05fee9cb94632f6c0
2024-08-14 21:16:57 -07:00
Sameer Agarwal 6726cd5073 Fix absl::log_flags linking on Linux
Generator expressions were introduced in CMake version 3.24. Without
them including absl::log_flags as an internal dependency causes
linking problems on some platforms. So for platforms with an older
CMake version we make absl::log_flags a public dependency.

Change-Id: I686f41e76b0ac17a03f1cd1d614372a7f130dfd9
2024-08-12 07:06:34 -07:00
Sameer Agarwal 4aa57d8096 Replace string_view with string.
The use of string_view causes problems with absl::StrCat
in certain compilation configurations.

Change-Id: I1beda82692378bf9cf378a7d42df46de8491d1c9
2024-08-09 17:02:53 -07:00
Sameer Agarwal f45b98709d More ClangTidy Fixes
Change-Id: I286a9b6402812707e64f71952eeb79b755ec43d9
2024-08-09 16:35:09 -07:00
Sameer Agarwal a3afe3d724 ClangTidy fixes
Change-Id: I2ed57cd6f84bae81686a833834bf00ddef91f61b
2024-08-09 16:24:07 -07:00
Sameer Agarwal 0bd9e63dcc Add absl/log/vlog_is_on.h when using VLOG_IS_ON
Previously this header was included in absl/log/log.h
but going forward this header will not be included.

Change-Id: Ie663b221d90e32a852fb00dfe20f731dcd1dcf6b
2024-08-09 16:15:22 -07:00
Sameer Agarwal b97ffeadbb Use absl::time
Replace WallTimeInSeconds with absl::Now and use
absl::Time and absl::Duration objects instead of doubles.

wall_time.h/cc -> event_logger.h/cc

Change-Id: I41279961368840fbdf6bb3456ffdbdf2f9bfb85b
2024-08-08 07:18:44 -07:00
Sameer Agarwal 03caeed1c6 ceres/stringprintf -> absl::strings
Replace ceres::String* with their more modern and performant
absl strings library equivalent and delete our string
manipulation library.

Change-Id: Iecbdba9864e0abf329778f81fdc0708f78f7594f
2024-08-08 07:05:23 -07:00
Sameer Agarwal 0ecdb82616 Link to absl::log_flags
This enables control of logging using commandline flags.

Fixes https://github.com/ceres-solver/ceres-solver/issues/1090

Change-Id: Ia0fd6abf4a8e6dfa8bc4e71d2263d622a28b0268
2024-08-08 06:59:39 -07:00
Sameer Agarwal 9503130830 Delete an unused file memory.h
Change-Id: I7824315b42ff72645f59256e64cf6e82f16af82f
2024-07-23 13:52:46 -07:00
Sameer Agarwal ebb66e655f ceres::internal::FixedArray -> absl::FixedArray
Ceres Solver was using an old forked version of FixedArray,
now that we are using absl, we can use the official version
that ships with it.

Change-Id: Ic88d7f6e8a49b928d611f7cbb04172452b322b01
2024-07-23 13:45:45 -07:00
Sameer Agarwal c181b6dbc4 ClangTidy fixes part 3
Change-Id: I69587f663b8d91a465ed068a82f9e09e3b7a72e2
2024-07-22 07:25:14 -07:00
Sameer Agarwal 3c4f012606 ClangTidy fixes #2
Change-Id: Ib3baa62248342276d63b900b45561323fd81402d
2024-07-21 20:31:32 -07:00
Sameer Agarwal 0ca2db57c7 Fix a number of typos
Change-Id: I0038f9c91dc70c422c01305dc10fca5a22a2f0d0
2024-07-21 15:15:36 -07:00
Sameer Agarwal 6b9a690009 ClangTidy cleanup part 1
Change-Id: Id592fc68b8f184cd002df9d94a68d05fbbf9c24d
2024-07-21 14:55:46 -07:00
Sameer Agarwal 68eeba2c2c Add a missing include
Change-Id: I3060e80a69374f7a2db31121715d0d892a54d311
2024-07-21 13:25:45 -07:00
Sameer Agarwal 1e19a11f5f Add a missing include
Change-Id: I0a3fa842183bc7cb9ba00b17d6181cebc3eac50d
2024-07-21 08:24:31 -07:00