Cette issue présente la série de pull-requests #407 à #469 , qui remplace #403 . Elles viennent de la branche dev-clean de Jordan08/codac , partent de l'état actuel de codac2 et y apportent, en 63 commits d'une taille relisible, le travail fait dans les branches fix-warnings-v2 puis GAOL-v2.
Démarche
Remplacer IBEX par GAOL. Codac ne se servait d'IBEX que pour GAOL, sur lequel repose codac2::Interval. Codac trouve maintenant GAOL sur le système ou compile le master du fork Jordan08/GAOL , qui porte les correctifs dont Codac a besoin : les garde-fous que Codac maintenait autour de GAOL disparaissent, et les options de compilation (arrondi, FMA) viennent de GAOL lui-même.
Outiller le debug et la CI. ASan/UBSan en Debug, couverture de code (WITH_COVERAGE), exemples lancés comme tests, workflows Debug sous Linux, macOS et Windows, vérification du paquet installé (find_package et pkg-config).
Reprendre le reste de Fix warnings v2 #403 . Corrections de bugs relevés par les sanitizers, corrections d'avertissements, packaging CMake, opérateur @ en Python, documentation.
Chaque commit correspond à une PR, dont la description explique d'où vient la modification et à quoi elle sert. Chaque commit qui touche au code ou au build a été compilé et testé seul (Linux, Clang 18, Release, avec les bindings Python et les exemples) : la suite de tests passe à chaque étape. L'extension CAPD, non installée, n'a pas été compilée : #423 n'est vérifiée que par relecture. L'état final a en plus passé la CI complète du fork (Linux, macOS, Windows, Docker, Debug sous sanitizers) sur la branche GAOL-v2, qui a le même contenu ; celle de dev-clean est en cours.
Organisation de la série
Bloc
Rangs
PR
Contenu
0
1
#407
.gitignore
1 – GAOL
2–10
#408 –#416
Conversions IBEX retirées, Approx relatif, passage à GAOL, CI et manuel sans IBEX, std::abs, garde-fous retirés, atan2 de GAOL
2 – FMA
11–12
#417 –#418
Activation de GAOL_FMA, export de Threads
3 – Debug
13–28
#419 –#434
Les 10 correctifs C++, puis ASan/UBSan, en-têtes dans src/, WITH_COVERAGE, exemples, make check
4 – CI
29–37
#435 –#443
Workflows sur toutes les branches, Doxygen, wheels, workflows Debug, doc des tests
5
38–62
#444 –#468
CMake et packaging, warnings, opérateur @, documentation
6
63
#469
Page de couverture
Merger dans l'ordre
Les PR se suivent : chacune part de la précédente. Il faut donc les merger dans l'ordre de la liste ci-dessous , en commençant par #407 .
Tant que les PR précédentes ne sont pas mergées, une PR affiche aussi leurs commits ; le sien est toujours le dernier. Une fois la précédente mergée, elle ne montre plus que le sien.
Pour que cela marche, il faut merger avec « Create a merge commit » ou « Rebase and merge » . Avec « Squash and merge », les PR suivantes ne reconnaîtraient plus les commits déjà intégrés et devraient être rebasées.
Les workflows d'une PR venant d'un fork attendent l'approbation d'un mainteneur avant de tourner.
Liste des PR à valider, dans l'ordre
Ignore .pydevproject and CMakePresets.json #407 Ignore .pydevproject and CMakePresets.json
Remove the IBEX conversions and the IBEX functions of vibes.h #408 Remove the IBEX conversions and the IBEX functions of vibes.h
Make Approx<double> relative for large values, handle NaN and inf #409 Make Approx relative for large values, handle NaN and inf
Build Codac on GAOL from Jordan Ninin's fork instead of IBEX #410 Build Codac on GAOL from Jordan Ninin's fork instead of IBEX
Stop installing IBEX in the workflows, Docker scripts and packages #411 Stop installing IBEX in the workflows, Docker scripts and packages
Drop the MinGW jobs whose mingw-w64 the GAOL fork refuses #412 Drop the MinGW jobs whose mingw-w64 the GAOL fork refuses
Document in the manual that Codac depends on GAOL instead of IBEX #413 Document in the manual that Codac depends on GAOL instead of IBEX
Call std::abs in Interval::smag() #414 Call std::abs in Interval::smag()
Call GAOL directly, without the guards its fork makes unnecessary #415 Call GAOL directly, without the guards its fork makes unnecessary
Take atan2 from GAOL, whose fork now implements it #416 Take atan2 from GAOL, whose fork now implements it
Build GAOL with the FMA instructions and pass its flags on #417 Build GAOL with the FMA instructions and pass its flags on
Hand Threads to the users of codac-config.cmake #418 Hand Threads to the users of codac-config.cmake
Add assert_release_unreachable and fix Interval::init_from_list #419 Add assert_release_unreachable and fix Interval::init_from_list
Break the shared_ptr cycle between PavingNode parents and children #420 Break the shared_ptr cycle between PavingNode parents and children
Fix object ownership in the tube and contractor Python bindings #421 Fix object ownership in the tube and contractor Python bindings
Fix the acos/sinh bindings and the | in the cart_prod assertions #422 Fix the acos/sinh bindings and the | in the cart_prod assertions
Rename the CAPD PEIBOS result alias T to PEIBOS_CAPD_Result #423 Rename the CAPD PEIBOS result alias T to PEIBOS_CAPD_Result
Avoid log10(0) when formatting integer values in IPE figures #424 Avoid log10(0) when formatting integer values in IPE figures
Replace resize_save_values with Eigen's conservativeResize #425 Replace resize_save_values with Eigen's conservativeResize
Define Eigen's MADD and ASSUME_ALIGNED macros for MSVC arm64 and UBSan #426 Define Eigen's MADD and ASSUME_ALIGNED macros for MSVC arm64 and UBSan
Generalize IsIntervalDomain to any type flagged is_interval_based #427 Generalize IsIntervalDomain to any type flagged is_interval_based
Use the portable PI constant instead of the non-standard M_PI #428 Use the portable PI constant instead of the non-standard M_PI
Enable ASan/UBSan in Debug builds when the toolchain ships the runtime #429 Enable ASan/UBSan in Debug builds when the toolchain ships the runtime
Compile against the headers in src/ instead of build/include copies #430 Compile against the headers in src/ instead of build/include copies
Add the WITH_COVERAGE option and the coverage targets #431 Add the WITH_COVERAGE option and the coverage targets
Update the examples to axis() in set_axes and draw every subset #432 Update the examples to axis() in set_axes and draw every subset
Build and run the examples as ctest tests when TEST_EXAMPLES is ON #433 Build and run the examples as ctest tests when TEST_EXAMPLES is ON
Fix make check stopping on a non-existent codac target #434 Fix make check stopping on a non-existent codac target
Run the workflows on every branch and cancel superseded runs #435 Run the workflows on every branch and cancel superseded runs
Retry the Doxygen install on Windows, pin 1.17.0 on Intel macOS #436 Retry the Doxygen install on Windows, pin 1.17.0 on Intel macOS
Build the wheels with python -m build and an SPDX license #437 Build the wheels with python -m build and an SPDX license
Run only the Python tests in the wheel-building matrices #438 Run only the Python tests in the wheel-building matrices
Add Debug workflows with sanitizers and coverage #439 Add Debug workflows with sanitizers and coverage
Run the examples in every workflow job that runs the tests #440 Run the examples in every workflow job that runs the tests
Build Catch2 for the macOS deployment target, not Homebrew's #441 Build Catch2 for the macOS deployment target, not Homebrew's
Request the arm64 Python interpreter on Apple Silicon runners #442 Request the arm64 Python interpreter on Apple Silicon runners
Document the tests, sanitized Debug builds, examples and coverage #443 Document the tests, sanitized Debug builds, examples and coverage
Set C++20 without compiler extensions on every target #444 Set C++20 without compiler extensions on every target
Treat the Eigen and Catch2 headers from FetchContent as system headers #445 Treat the Eigen and Catch2 headers from FetchContent as system headers
Set CMP0156 so that each static library is linked once #446 Set CMP0156 so that each static library is linked once
Add the DEB CPack generator only when dpkg-deb is available #447 Add the DEB CPack generator only when dpkg-deb is available
Set CMAKE_POSITION_INDEPENDENT_CODE before src/, drop the manual -fPIC #448 Set CMAKE_POSITION_INDEPENDENT_CODE before src/, drop the manual -fPIC
Initialize PYTHON_EXECUTABLE from the interpreter pybind11 found #449 Initialize PYTHON_EXECUTABLE from the interpreter pybind11 found
Require CMake 3.10 in the standalone example and test projects #450 Require CMake 3.10 in the standalone example and test projects
Export the Codac targets and fix codac.pc for installed consumers #451 Export the Codac targets and fix codac.pc for installed consumers
Check in CI that find_package and pkg-config consumers agree #452 Check in CI that find_package and pkg-config consumers agree
Fix missing override, class/struct mismatch and hidden overloads #453 Fix missing override, class/struct mismatch and hidden overloads
Fix C++20 operator== ambiguity, static functions in headers, printf #454 Fix C++20 operator== ambiguity, static functions in headers, printf
Fix unused-parameter warnings in CtcDeriv binding and style parsing #455 Fix unused-parameter warnings in CtcDeriv binding and style parsing
Fix braced-scalar-init, shadowing and unused variables in tests #456 Fix braced-scalar-init, shadowing and unused variables in tests
Fix the misleading-indentation warning in convex_hull #457 Fix the misleading-indentation warning in convex_hull
Fix Visual C++ warnings and the extra semicolons of vibes.h #458 Fix Visual C++ warnings and the extra semicolons of vibes.h
Disable Clang's -Wself-assign-overloaded in in-place operator bindings #459 Disable Clang's -Wself-assign-overloaded in in-place operator bindings
Add the @ operator for matrix products to the Python binding #460 Add the @ operator for matrix products to the Python binding
Upgrade the Doxyfile to 1.17 and expand the operator macros #461 Upgrade the Doxyfile to 1.17 and expand the operator macros
Make doxygen2docstring independent of the Doxygen version #462 Make doxygen2docstring independent of the Doxygen version
Fail the configuration when Doxygen or doxygen2docstring.py fails #463 Fail the configuration when Doxygen or doxygen2docstring.py fails
Fix the Sphinx warnings and build the manual into manual/html #464 Fix the Sphinx warnings and build the manual into manual/html
Compile the parallelepiped, peibos and shape snippets as tests #465 Compile the parallelepiped, peibos and shape snippets as tests
Add the Python pendulum stability analysis to the Ellipsoid manual #466 Add the Python pendulum stability analysis to the Ellipsoid manual
Document how to use Codac from an external C++ or Python project #467 Document how to use Codac from an external C++ or Python project
Add an Examples section and the 2.0.3 to 2.1.1 changelog #468 Add an Examples section and the 2.0.3 to 2.1.1 changelog
Add the summary page of the code coverage #469 Add the summary page of the code coverage
Cette issue présente la série de pull-requests #407 à #469, qui remplace #403. Elles viennent de la branche
dev-cleande Jordan08/codac, partent de l'état actuel decodac2et y apportent, en 63 commits d'une taille relisible, le travail fait dans les branchesfix-warnings-v2puisGAOL-v2.Démarche
codac2::Interval. Codac trouve maintenant GAOL sur le système ou compile le master du fork Jordan08/GAOL, qui porte les correctifs dont Codac a besoin : les garde-fous que Codac maintenait autour de GAOL disparaissent, et les options de compilation (arrondi, FMA) viennent de GAOL lui-même.WITH_COVERAGE), exemples lancés comme tests, workflows Debug sous Linux, macOS et Windows, vérification du paquet installé (find_packageet pkg-config).@en Python, documentation.Chaque commit correspond à une PR, dont la description explique d'où vient la modification et à quoi elle sert. Chaque commit qui touche au code ou au build a été compilé et testé seul (Linux, Clang 18, Release, avec les bindings Python et les exemples) : la suite de tests passe à chaque étape. L'extension CAPD, non installée, n'a pas été compilée : #423 n'est vérifiée que par relecture. L'état final a en plus passé la CI complète du fork (Linux, macOS, Windows, Docker, Debug sous sanitizers) sur la branche
GAOL-v2, qui a le même contenu ; celle dedev-cleanest en cours.Organisation de la série
.gitignoreApproxrelatif, passage à GAOL, CI et manuel sans IBEX,std::abs, garde-fous retirés,atan2de GAOLGAOL_FMA, export deThreadssrc/,WITH_COVERAGE, exemples,make check@, documentationMerger dans l'ordre
Les PR se suivent : chacune part de la précédente. Il faut donc les merger dans l'ordre de la liste ci-dessous, en commençant par #407.
Liste des PR à valider, dans l'ordre