From 1b410e85b87f8667a62ea9ed7038fc0cf9402e9a Mon Sep 17 00:00:00 2001 From: FrancoisCarouge Date: Fri, 27 Oct 2023 23:33:18 -0700 Subject: [PATCH] [filter] declarative paradigm --- benchmark/CMakeLists.txt | 110 ++++----- include/fcarouge/internal/format.hpp | 44 ++-- include/fcarouge/internal/kalman.hpp | 140 +++++++++++- include/fcarouge/internal/kalman.tpp | 214 ++++++------------ include/fcarouge/kalman.hpp | 94 +++++--- sample/CMakeLists.txt | 8 +- sample/kf_1x1x0_building_height.cpp | 31 +-- sample/kf_1x1x0_liquid_temperature.cpp | 29 +-- sample/kf_1x1x1_dog_position.cpp | 15 +- sample/kf_2x1x1_rocket_altitude.cpp | 11 +- test/CMakeLists.txt | 23 +- ...kalman_constructor_default_float_1x1x1.cpp | 3 +- test/kalman_f.cpp | 10 +- test/kalman_format_arguments.cpp | 10 +- test/kalman_format_float_1x1x1.cpp | 2 +- test/kalman_h.cpp | 14 +- test/kalman_println.cpp | 4 +- 17 files changed, 407 insertions(+), 355 deletions(-) diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 306c36160..67f07bfe9 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -54,8 +54,12 @@ FetchContent_MakeAvailable(google_benchmark) set(PROCESSOR_AFFINITY TRUE) -foreach(BENCHMARK "baseline.cpp" "predict_1x1x0.cpp" "predict_1x1x1.cpp" - "update_1x1x0.cpp" "update_1x1x1.cpp") +foreach( + BENCHMARK + "baseline.cpp" + # "predict_1x1x0.cpp" "predict_1x1x1.cpp" # "update_1x1x0.cpp" + # "update_1x1x1.cpp" +) get_filename_component(NAME ${BENCHMARK} NAME_WE) add_executable(kalman_benchmark_${NAME}_driver ${BENCHMARK}) target_include_directories(kalman_benchmark_${NAME}_driver PRIVATE "include") @@ -75,66 +79,44 @@ foreach(BENCHMARK "baseline.cpp" "predict_1x1x0.cpp" "predict_1x1x1.cpp" "--benchmark_out=${NAME}.json") endforeach() -foreach(BACKEND IN ITEMS "eigen" "naive") - foreach(STATE_SIZE RANGE 1 2) - foreach(INPUT_SIZE RANGE 1 2) - configure_file(predict_linalg_x1x.cpp - predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}.cpp) - add_executable( - kalman_benchmark_predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}_driver - predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}.cpp) - target_include_directories( - kalman_benchmark_predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}_driver - PRIVATE "include") - set_target_properties( - kalman_benchmark_predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}_driver - PROPERTIES CXX_STANDARD 23 - CXX_EXTENSIONS OFF - INTERPROCEDURAL_OPTIMIZATION TRUE) - target_link_libraries( - kalman_benchmark_predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}_driver - PRIVATE benchmark::benchmark benchmark::benchmark_main kalman - kalman_linalg_${BACKEND} kalman_options) - separate_arguments(TEST_COMMAND UNIX_COMMAND $ENV{COMMAND}) - add_test( - NAME kalman_benchmark_predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE} - COMMAND - ${TEST_COMMAND} - $ - "--benchmark_out=predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}.json" - ) - endforeach() - endforeach() -endforeach() +# foreach(BACKEND IN ITEMS "eigen" "naive") foreach(STATE_SIZE RANGE 1 2) +# foreach(INPUT_SIZE RANGE 1 2) configure_file(predict_linalg_x1x.cpp +# predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}.cpp) add_executable( +# kalman_benchmark_predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}_driver +# predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}.cpp) +# target_include_directories( +# kalman_benchmark_predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}_driver +# PRIVATE "include") set_target_properties( +# kalman_benchmark_predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}_driver +# PROPERTIES CXX_STANDARD 23 CXX_EXTENSIONS OFF INTERPROCEDURAL_OPTIMIZATION +# TRUE) target_link_libraries( +# kalman_benchmark_predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}_driver +# PRIVATE benchmark::benchmark benchmark::benchmark_main kalman +# kalman_linalg_${BACKEND} kalman_options) separate_arguments(TEST_COMMAND +# UNIX_COMMAND $ENV{COMMAND}) add_test( NAME +# kalman_benchmark_predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE} COMMAND +# ${TEST_COMMAND} +# $ +# "--benchmark_out=predict_${BACKEND}_${STATE_SIZE}x1x${INPUT_SIZE}.json" ) +# endforeach() endforeach() endforeach() -foreach(BACKEND IN ITEMS "eigen") - foreach(STATE_SIZE RANGE 1 2) - foreach(OUTPUT_SIZE RANGE 1 2) - configure_file(update_linalg_xx0.cpp - update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0.cpp) - add_executable( - kalman_benchmark_update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0_driver - update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0.cpp) - target_include_directories( - kalman_benchmark_update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0_driver - PRIVATE "include") - set_target_properties( - kalman_benchmark_update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0_driver - PROPERTIES CXX_STANDARD 23 - CXX_EXTENSIONS OFF - INTERPROCEDURAL_OPTIMIZATION TRUE) - target_link_libraries( - kalman_benchmark_update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0_driver - PRIVATE benchmark::benchmark benchmark::benchmark_main kalman - kalman_linalg_${BACKEND} kalman_options) - separate_arguments(TEST_COMMAND UNIX_COMMAND $ENV{COMMAND}) - add_test( - NAME kalman_benchmark_update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0 - COMMAND - ${TEST_COMMAND} - $ - "--benchmark_out=update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0.json" - ) - endforeach() - endforeach() -endforeach() +# foreach(BACKEND IN ITEMS "eigen") foreach(STATE_SIZE RANGE 1 2) +# foreach(OUTPUT_SIZE RANGE 1 2) configure_file(update_linalg_xx0.cpp +# update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0.cpp) add_executable( +# kalman_benchmark_update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0_driver +# update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0.cpp) +# target_include_directories( +# kalman_benchmark_update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0_driver +# PRIVATE "include") set_target_properties( +# kalman_benchmark_update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0_driver +# PROPERTIES CXX_STANDARD 23 CXX_EXTENSIONS OFF INTERPROCEDURAL_OPTIMIZATION +# TRUE) target_link_libraries( +# kalman_benchmark_update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0_driver +# PRIVATE benchmark::benchmark benchmark::benchmark_main kalman +# kalman_linalg_${BACKEND} kalman_options) separate_arguments(TEST_COMMAND +# UNIX_COMMAND $ENV{COMMAND}) add_test( NAME +# kalman_benchmark_update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0 COMMAND +# ${TEST_COMMAND} +# $ +# "--benchmark_out=update_${BACKEND}_${STATE_SIZE}x${OUTPUT_SIZE}x0.json" ) +# endforeach() endforeach() endforeach() diff --git a/include/fcarouge/internal/format.hpp b/include/fcarouge/internal/format.hpp index 405bce16e..06316a5e4 100644 --- a/include/fcarouge/internal/format.hpp +++ b/include/fcarouge/internal/format.hpp @@ -45,27 +45,23 @@ For more information, please refer to */ #include namespace fcarouge { -template class kalman; +template class kalman; } // namespace fcarouge -template +template // It is allowed to add template specializations for any standard library class // template to the namespace std only if the declaration depends on at least one // program-defined type and the specialization satisfies all requirements for // the original template, except where such specializations are prohibited. // NOLINTNEXTLINE(cert-dcl58-cpp) -struct std::formatter< - fcarouge::kalman, - Char> { +struct std::formatter, Char> { constexpr auto parse(std::basic_format_parse_context &parse_context) { return parse_context.begin(); } //! @todo P2585 may be useful in simplifying and standardizing the support. template - auto format(const fcarouge::kalman &filter, + auto format(const fcarouge::kalman &filter, std::basic_format_context &format_context) const -> OutputIt { format_context.advance_to( @@ -80,17 +76,19 @@ struct std::formatter< R"("h": {}, "k": {}, "p": {}, )", filter.h(), filter.k(), filter.p())); - { - constexpr auto end{fcarouge::internal::repack_s}; + [&]