From 1d4cad93e44d4093c0fc0b15e6f6d060379447d7 Mon Sep 17 00:00:00 2001 From: Kyle Knoepfel Date: Fri, 20 Mar 2026 14:23:28 -0500 Subject: [PATCH 1/2] Add C++ header-guard checks/fixes to pre-commit --- .pre-commit-config.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e3d6073f..39e25e91 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,6 +22,13 @@ repos: hooks: - id: clang-format types_or: [c++, c, cuda] + - repo: local + hooks: + - id: fix-header-guards + name: fix C++ header guards + entry: python3 scripts/fix_header_guards.py + language: system + files: \.(h|hpp)$ - repo: https://github.com/BlankSpruce/gersemi rev: 0.26.0 hooks: From 3a7ceaff4ad088054ffd35ac2042246f951646b2 Mon Sep 17 00:00:00 2001 From: Kyle Knoepfel Date: Fri, 20 Mar 2026 14:28:31 -0500 Subject: [PATCH 2/2] Update pre-commit versions and apply changes --- .github/workflows/cmake-build.yaml | 5 +- .pre-commit-config.yaml | 6 +- .../extra_member/track_start.hpp | 6 +- test/form/data_products/track_start.hpp | 6 +- test/form/test_helpers.hpp | 6 +- test/form/test_utils.hpp | 6 +- test/form/toy_tracker.hpp | 6 +- test/python/suffix.py | 146 ++++++++++++------ 8 files changed, 115 insertions(+), 72 deletions(-) diff --git a/.github/workflows/cmake-build.yaml b/.github/workflows/cmake-build.yaml index d68ea35e..5741ad3a 100644 --- a/.github/workflows/cmake-build.yaml +++ b/.github/workflows/cmake-build.yaml @@ -218,9 +218,8 @@ jobs: cmake-build-skipped: needs: [setup] if: > - needs.setup.result == 'success' && github.event_name != 'workflow_dispatch' && - !inputs.skip-relevance-check && needs.setup.outputs.is_act != 'true' && - needs.setup.outputs.has_changes != 'true' + needs.setup.result == 'success' && github.event_name != 'workflow_dispatch' && !inputs.skip-relevance-check && + needs.setup.outputs.is_act != 'true' && needs.setup.outputs.has_changes != 'true' runs-on: ubuntu-latest permissions: contents: read diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 39e25e91..17d55f89 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,7 +13,7 @@ repos: - id: check-executables-have-shebangs - id: mixed-line-ending - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.6 + rev: v0.15.7 hooks: - id: ruff-format types_or: [python, pyi] @@ -30,11 +30,11 @@ repos: language: system files: \.(h|hpp)$ - repo: https://github.com/BlankSpruce/gersemi - rev: 0.26.0 + rev: 0.26.1 hooks: - id: gersemi - repo: https://github.com/google/go-jsonnet - rev: v0.21.0 + rev: v0.22.0-rc1 hooks: - id: jsonnet-format - id: jsonnet-lint diff --git a/test/form/data_products/extra_member/track_start.hpp b/test/form/data_products/extra_member/track_start.hpp index b93e744a..5e425b0d 100644 --- a/test/form/data_products/extra_member/track_start.hpp +++ b/test/form/data_products/extra_member/track_start.hpp @@ -3,8 +3,8 @@ #include -#ifndef TRACKSTART_HPP -#define TRACKSTART_HPP +#ifndef TEST_FORM_DATA_PRODUCTS_EXTRA_MEMBER_TRACK_START_HPP +#define TEST_FORM_DATA_PRODUCTS_EXTRA_MEMBER_TRACK_START_HPP class TrackStart { public: @@ -36,4 +36,4 @@ class TrackStart { std::ostream& operator<<(std::ostream& os, TrackStart const& track); -#endif //TRACKSTART_HPP +#endif // TEST_FORM_DATA_PRODUCTS_EXTRA_MEMBER_TRACK_START_HPP diff --git a/test/form/data_products/track_start.hpp b/test/form/data_products/track_start.hpp index bafbe92a..ceb08e4f 100644 --- a/test/form/data_products/track_start.hpp +++ b/test/form/data_products/track_start.hpp @@ -3,8 +3,8 @@ #include -#ifndef __TRACK_START_H__ -#define __TRACK_START_H__ +#ifndef TEST_FORM_DATA_PRODUCTS_TRACK_START_HPP +#define TEST_FORM_DATA_PRODUCTS_TRACK_START_HPP class TrackStart { public: @@ -28,4 +28,4 @@ class TrackStart { std::ostream& operator<<(std::ostream& os, TrackStart const& track); -#endif //__TRACK_START_H__ +#endif // TEST_FORM_DATA_PRODUCTS_TRACK_START_HPP diff --git a/test/form/test_helpers.hpp b/test/form/test_helpers.hpp index 7a831766..57292251 100644 --- a/test/form/test_helpers.hpp +++ b/test/form/test_helpers.hpp @@ -1,7 +1,7 @@ -#ifndef TEST_HELPERS_HPP -#define TEST_HELPERS_HPP +#ifndef TEST_FORM_TEST_HELPERS_HPP +#define TEST_FORM_TEST_HELPERS_HPP #include "data_products/track_start.hpp" #include "form/form.hpp" -#endif +#endif // TEST_FORM_TEST_HELPERS_HPP diff --git a/test/form/test_utils.hpp b/test/form/test_utils.hpp index f1c10d36..88ace4b8 100644 --- a/test/form/test_utils.hpp +++ b/test/form/test_utils.hpp @@ -1,7 +1,7 @@ //Utilities to make FORM unit tests easier to write and maintain -#ifndef FORM_TEST_UTILS_HPP -#define FORM_TEST_UTILS_HPP +#ifndef TEST_FORM_TEST_UTILS_HPP +#define TEST_FORM_TEST_UTILS_HPP #include "storage/istorage.hpp" #include "storage/storage_associative_container.hpp" @@ -124,4 +124,4 @@ namespace form::test { } // namespace form::test -#endif // FORM_TEST_UTILS_HPP +#endif // TEST_FORM_TEST_UTILS_HPP diff --git a/test/form/toy_tracker.hpp b/test/form/toy_tracker.hpp index 6d069baf..d978171e 100644 --- a/test/form/toy_tracker.hpp +++ b/test/form/toy_tracker.hpp @@ -1,6 +1,6 @@ //A toy PHLEX algorithm that takes a maximum number of TrackStarts to generate and generates random points for them. -#ifndef __TOY_TRACKER_H__ -#define __TOY_TRACKER_H__ +#ifndef TEST_FORM_TOY_TRACKER_HPP +#define TEST_FORM_TOY_TRACKER_HPP #include #include @@ -19,4 +19,4 @@ class ToyTracker { int32_t random_max = 32768 * 32768; }; -#endif +#endif // TEST_FORM_TOY_TRACKER_HPP diff --git a/test/python/suffix.py b/test/python/suffix.py index 4eefc264..0cae6a31 100644 --- a/test/python/suffix.py +++ b/test/python/suffix.py @@ -5,38 +5,44 @@ """ - def constant_one(i: int) -> int: """Constant 1.""" return 1 + def constant_two(i: int) -> int: """Constant 2.""" return 2 + def constant_three(i: int) -> int: """Constant 3.""" return 3 + def constant_four(i: int) -> int: """Constant 4.""" return 4 + def observe_one(i: int) -> None: """Observe i; expect 1.""" assert i == 1 + def observe_two(i: int, j: int) -> None: """Observe (i, j); expect (1, 2).""" assert i == 1 assert j == 2 + def observe_three(i: int, j: int, k: int) -> None: """Observe (i, j, k); expect (1, 2, 3).""" assert i == 1 assert j == 2 assert k == 3 + def observe_four(i: int, j: int, k: int, ll: int) -> None: """Observe (i, j, k, l); expect (1, 2, 3, 4).""" assert i == 1 @@ -59,10 +65,12 @@ def PHLEX_REGISTER_ALGORITHMS(m, config): None """ # tests for error handling of input specifications - for input_query in ({"creator": 42, "layer": "event", "suffix": "i"}, - {"creator": "input", "layer": 42, "suffix": "i"}, - {"layer": "event", "suffix": "i"}, - {"creator": "input", "suffix": "i"}): + for input_query in ( + {"creator": 42, "layer": "event", "suffix": "i"}, + {"creator": "input", "layer": 42, "suffix": "i"}, + {"layer": "event", "suffix": "i"}, + {"creator": "input", "suffix": "i"}, + ): try: m.transform(constant_one, input_family=[input_query], output_products=["output_one"]) assert not "supposed to be here" @@ -71,67 +79,103 @@ def PHLEX_REGISTER_ALGORITHMS(m, config): assert "or not a string" in str(e) # transforms with suffix to be used without suffix - m.transform(constant_one, input_family=[ - {"creator": "input", "layer": "event", "suffix": "i"}, - ], - output_products=["output_one"]) - m.transform(constant_two, input_family=[ - {"creator": "input", "layer": "event", "suffix": "i"}, - ], - output_products=["output_two"]) - m.transform(constant_three, input_family=[ - {"creator": "input", "layer": "event", "suffix": "i"}, - ], - output_products=["output_three"]) + m.transform( + constant_one, + input_family=[ + {"creator": "input", "layer": "event", "suffix": "i"}, + ], + output_products=["output_one"], + ) + m.transform( + constant_two, + input_family=[ + {"creator": "input", "layer": "event", "suffix": "i"}, + ], + output_products=["output_two"], + ) + m.transform( + constant_three, + input_family=[ + {"creator": "input", "layer": "event", "suffix": "i"}, + ], + output_products=["output_three"], + ) # observers without suffix # test for failing suffix (incorrect type: not a string) try: - m.observe(observe_one, input_family=[ - {"creator": "constant_one", "layer": "event", "suffix": 42}, - ]) + m.observe( + observe_one, + input_family=[ + {"creator": "constant_one", "layer": "event", "suffix": 42}, + ], + ) assert not "supposed to be here" except TypeError as e: assert "is not a string" in str(e) - m.observe(observe_one, input_family=[ - {"creator": "constant_one", "layer": "event"}, - ]) + m.observe( + observe_one, + input_family=[ + {"creator": "constant_one", "layer": "event"}, + ], + ) # regular - m.observe(observe_two, input_family=[ - {"creator": "constant_one", "layer": "event"}, - {"creator": "constant_two", "layer": "event"}, - ]) - m.observe(observe_three, input_family=[ - {"creator": "constant_one", "layer": "event"}, - {"creator": "constant_two", "layer": "event"}, - {"creator": "constant_three", "layer": "event"}, - ]) + m.observe( + observe_two, + input_family=[ + {"creator": "constant_one", "layer": "event"}, + {"creator": "constant_two", "layer": "event"}, + ], + ) + m.observe( + observe_three, + input_family=[ + {"creator": "constant_one", "layer": "event"}, + {"creator": "constant_two", "layer": "event"}, + {"creator": "constant_three", "layer": "event"}, + ], + ) # test for unsupported number of arguments (remove test once support # to arbitrary number of arguments becomes available try: - m.observe(observe_three, input_family=[ - {"creator": "constant_one", "layer": "event"}, - {"creator": "constant_two", "layer": "event"}, - {"creator": "constant_three", "layer": "event"}, - {"creator": "constant_four", "layer": "event"}, - ]) + m.observe( + observe_three, + input_family=[ + {"creator": "constant_one", "layer": "event"}, + {"creator": "constant_two", "layer": "event"}, + {"creator": "constant_three", "layer": "event"}, + {"creator": "constant_four", "layer": "event"}, + ], + ) assert not "supposed to be here" except TypeError: - pass # noqa + pass # noqa # observers with suffix - m.observe(observe_one, name="observe_one_ws", input_family=[ - {"creator": "constant_one", "layer": "event", "suffix": "output_one"}, - ]) - m.observe(observe_two, name="observe_two_ws", input_family=[ - {"creator": "constant_one", "layer": "event", "suffix": "output_one"}, - {"creator": "constant_two", "layer": "event", "suffix": "output_two"}, - ]) - m.observe(observe_three, name="observe_three_ws", input_family=[ - {"creator": "constant_one", "layer": "event", "suffix": "output_one"}, - {"creator": "constant_two", "layer": "event", "suffix": "output_two"}, - {"creator": "constant_three", "layer": "event", "suffix": "output_three"}, - ]) + m.observe( + observe_one, + name="observe_one_ws", + input_family=[ + {"creator": "constant_one", "layer": "event", "suffix": "output_one"}, + ], + ) + m.observe( + observe_two, + name="observe_two_ws", + input_family=[ + {"creator": "constant_one", "layer": "event", "suffix": "output_one"}, + {"creator": "constant_two", "layer": "event", "suffix": "output_two"}, + ], + ) + m.observe( + observe_three, + name="observe_three_ws", + input_family=[ + {"creator": "constant_one", "layer": "event", "suffix": "output_one"}, + {"creator": "constant_two", "layer": "event", "suffix": "output_two"}, + {"creator": "constant_three", "layer": "event", "suffix": "output_three"}, + ], + )