| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 | # Ceres Solver - A fast non-linear least squares minimizer# Copyright 2023 Google Inc. All rights reserved.# http://ceres-solver.org/## Redistribution and use in source and binary forms, with or without# modification, are permitted provided that the following conditions are met:## * Redistributions of source code must retain the above copyright notice,#   this list of conditions and the following disclaimer.# * Redistributions in binary form must reproduce the above copyright notice,#   this list of conditions and the following disclaimer in the documentation#   and/or other materials provided with the distribution.# * Neither the name of Google Inc. nor the names of its contributors may be#   used to endorse or promote products derived from this software without#   specific prior written permission.## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE# POSSIBILITY OF SUCH DAMAGE.## Author: mierle@gmail.com (Keir Mierle)## These are Bazel rules to build Ceres. It's currently in Alpha state, and does# not support parameterization around threading choice or sparse backends.load("//:bazel/ceres.bzl", "ceres_library")ceres_library(    name = "ceres",    restrict_schur_specializations = False,)cc_library(    name = "test_util",    srcs = ["internal/ceres/" + x for x in [        "evaluator_test_utils.cc",        "numeric_diff_test_utils.cc",        "test_util.cc",        "gmock_gtest_all.cc",        "gmock_main.cc",        "gmock/gmock.h",        "gmock/mock-log.h",        "gtest/gtest.h",    ]],    hdrs = [        "internal/ceres/gmock/gmock.h",        "internal/ceres/gmock/mock-log.h",        "internal/ceres/gtest/gtest.h",    ],    copts = [        "-Wno-sign-compare",        "-DCERES_TEST_SRCDIR_SUFFIX=\\\"data/\\\"",    ],    includes = [        "internal",        "internal/ceres",    ],    deps = [        "//:ceres",        "@com_github_gflags_gflags//:gflags",    ],)CERES_TESTS = [    "array_utils",    "autodiff_cost_function",    "autodiff_manifold",    "autodiff",    "block_jacobi_preconditioner",    "block_random_access_dense_matrix",    "block_random_access_diagonal_matrix",    "block_random_access_sparse_matrix",    "block_sparse_matrix",    "canonical_views_clustering",    "c_api",    "compressed_col_sparse_matrix_utils",    "compressed_row_sparse_matrix",    "concurrent_queue",    "conditioned_cost_function",    "conjugate_gradients_solver",    "corrector",    "cost_function_to_functor",    "covariance",    "cubic_interpolation",    "dense_cholesky",    "dense_linear_solver",    "dense_sparse_matrix",    "detect_structure",    "dogleg_strategy",    "dynamic_autodiff_cost_function",    "dynamic_compressed_row_sparse_matrix",    "dynamic_numeric_diff_cost_function",    "dynamic_sparse_normal_cholesky_solver",    "dynamic_sparsity",    "evaluation_callback",    "evaluator",    "gradient_checker",    "gradient_checking_cost_function",    "gradient_problem_solver",    "gradient_problem",    "graph_algorithms",    "graph",    "householder_vector",    "implicit_schur_complement",    "inner_product_computer",    "invert_psd_matrix",    "is_close",    "iterative_refiner",    "iterative_schur_complement_solver",    "jet",    "levenberg_marquardt_strategy",    "line_search_minimizer",    "line_search_preprocessor",    "loss_function",    "minimizer",    "normal_prior",    "numeric_diff_cost_function",    "ordered_groups",    "parallel_for",    "parallel_utils",    "parameter_block_ordering",    "parameter_block",    "partitioned_matrix_view",    "polynomial",    "problem",    "program",    "reorder_program",    "residual_block",    "residual_block_utils",    "rotation",    "schur_complement_solver",    "schur_eliminator",    "single_linkage_clustering",    "small_blas",    "solver",    "sparse_cholesky",    "sparse_normal_cholesky_solver",    "subset_preconditioner",    "system",    "thread_pool",    "tiny_solver_autodiff_function",    "tiny_solver_cost_function_adapter",    "tiny_solver",    "triplet_sparse_matrix",    "trust_region_minimizer",    "trust_region_preprocessor",    "visibility_based_preconditioner",    "visibility",]TEST_COPTS = [    # Needed to silence GFlags complaints.    "-Wno-sign-compare",    # These two warnings don't work well in conjunction with GMock, and    # trigger incorrectly on parts of rotation_test. For now, disable them,    # but in the future disable these warnings only for rotation_test.    # TODO(keir): When the tests are macro-ified, apply these selectively.    "-Wno-address",]TEST_DEPS = [    "//:ceres",    "//:test_util",    "@com_gitlab_libeigen_eigen//:eigen",    "@com_github_gflags_gflags//:gflags",]# Instantiate all the tests with a template.[cc_test(    name = test_name + "_test",    timeout = "short",    srcs = ["internal/ceres/" + test_name + "_test.cc"],    copts = TEST_COPTS,    deps = TEST_DEPS,) for test_name in CERES_TESTS]# Instantiate all the bundle adjustment tests. These are separate to# parallelize the execution of the tests; otherwise the tests take a long time.## Note: While it is possible to run the Python script to generate the .cc files# as part of the build, it introduces an undesirable build-time Python# dependency that we'd prefer to avoid.[cc_test(    name = test_filename.split("/")[-1][:-3],  # Remove .cc.    timeout = "long",    srcs = [test_filename],    copts = TEST_COPTS,    # This is the data set that is bundled for the testing.    data = [":data/problem-16-22106-pre.txt"],    deps = TEST_DEPS,) for test_filename in glob([    "internal/ceres/generated_bundle_adjustment_tests/*_test.cc",])]# Build the benchmarks.[cc_binary(    name = benchmark_name,    srcs = ["internal/ceres/" + benchmark_name + ".cc"],    copts = TEST_COPTS,    deps = TEST_DEPS + ["@com_github_google_benchmark//:benchmark"],) for benchmark_name in [    "small_blas_gemm_benchmark",    "small_blas_gemv_benchmark",]]
 |