From 839be5335da083962cb0da9a641693b1d483a6b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana=20G=C3=B3mez?= Date: Tue, 1 Jul 2025 19:16:48 +0200 Subject: [PATCH] Fix smell issues in markdown and python --- CLAUDE.md | 21 ++++++++++++++++++--- CONAN_README.md | 38 +++++++++++++++++++------------------- conanfile.py | 6 +++--- 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 9d294cd..347e617 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,14 +9,17 @@ BayesNet is a C++ library implementing Bayesian Network Classifiers. It provides ## Build System & Dependencies ### Dependency Management + The project supports **two package managers**: #### vcpkg (Default) -- Uses vcpkg with private registry at https://github.com/rmontanana/vcpkg-stash + +- Uses vcpkg with private registry at - Core dependencies: libtorch, nlohmann-json, folding, fimdlp, arff-files, catch2 - All dependencies defined in `vcpkg.json` with version overrides #### Conan (Alternative) + - Modern C++ package manager with better dependency resolution - Configured via `conanfile.py` for packaging and distribution - Supports subset of dependencies (libtorch, nlohmann-json, catch2) @@ -25,6 +28,7 @@ The project supports **two package managers**: ### Build Commands #### Using vcpkg (Default) + ```bash # Initialize dependencies make init @@ -49,6 +53,7 @@ make clean ``` #### Using Conan + ```bash # Install Conan first: pip install conan @@ -74,6 +79,7 @@ make conan-clean ``` ### CMake Configuration + - Uses CMake 3.27+ with C++17 standard - Debug builds automatically enable testing and coverage - Release builds optimize with `-Ofast` @@ -89,6 +95,7 @@ make conan-clean - Coverage reporting with lcov/genhtml ### Test Categories + - A2DE, BoostA2DE, BoostAODE, XSPODE, XSPnDE, XBAODE, XBA2DE - Classifier, Ensemble, FeatureSelection, Metrics, Models - Network, Node, MST, Modules @@ -96,6 +103,7 @@ make conan-clean ## Code Architecture ### Core Structure + ``` bayesnet/ ├── BaseClassifier.h # Abstract base for all classifiers @@ -107,12 +115,14 @@ bayesnet/ ``` ### Key Design Patterns + - **BaseClassifier** abstract interface for all algorithms - Template-based design with both std::vector and torch::Tensor support - Network/Node abstraction for Bayesian network representation - Feature selection as separate, composable modules ### Data Handling + - Supports both discrete integer data and continuous data with discretization - ARFF file format support through arff-files library - Tensor operations via PyTorch C++ (libtorch) @@ -128,6 +138,7 @@ bayesnet/ ## Sample Applications Sample code in `sample/` directory demonstrates library usage: + ```bash make sample fname=tests/data/iris.arff model=TANLd ``` @@ -135,6 +146,7 @@ make sample fname=tests/data/iris.arff model=TANLd ## Package Distribution ### Creating Conan Packages + ```bash # Create package locally make conan-create @@ -148,7 +160,9 @@ make conan-upload remote=myremote profile=myprofile ``` ### Using the Library + With Conan: + ```python # conanfile.txt or conanfile.py [requires] @@ -159,6 +173,7 @@ cmake ``` With vcpkg: + ```json { "dependencies": ["bayesnet"] @@ -170,7 +185,7 @@ With vcpkg: - **Add new classifier**: Extend BaseClassifier, implement in appropriate subdirectory - **Add new test**: Update `tests/CMakeLists.txt` and create test in `tests/` - **Modify build**: Edit main `CMakeLists.txt` or use Makefile targets -- **Update dependencies**: +- **Update dependencies**: - vcpkg: Modify `vcpkg.json` and run `make init` - Conan: Modify `conanfile.py` and run `make conan-init` -- **Package for distribution**: Use `make conan-create` for Conan packaging \ No newline at end of file +- **Package for distribution**: Use `make conan-create` for Conan packaging diff --git a/CONAN_README.md b/CONAN_README.md index a563cdd..fdfe193 100644 --- a/CONAN_README.md +++ b/CONAN_README.md @@ -16,29 +16,29 @@ conan profile new default --detect 1. Create a `conanfile.txt` in your project: -```ini -[requires] -libtorch/2.7.0 -bayesnet/1.2.0 + ```ini + [requires] + libtorch/2.7.0 + bayesnet/1.2.0 -[generators] -CMakeDeps -CMakeToolchain + [generators] + CMakeDeps + CMakeToolchain -``` + ``` -2. Install dependencies: +1. Install dependencies: -```bash -conan install . --build=missing -``` + ```bash + conan install . --build=missing + ``` -3. In your CMakeLists.txt: +1. In your CMakeLists.txt: -```cmake -find_package(bayesnet REQUIRED) -target_link_libraries(your_target bayesnet::bayesnet) -``` + ```cmake + find_package(bayesnet REQUIRED) + target_link_libraries(your_target bayesnet::bayesnet) + ``` ### Building BayesNet with Conan @@ -69,8 +69,8 @@ make conan-create For the custom dependencies, you'll need to create Conan recipes: 1. **folding**: Cross-validation library -2. **fimdlp**: Discretization library -3. **arff-files**: ARFF file format parser +1. **fimdlp**: Discretization library +1. **arff-files**: ARFF file format parser Contact the maintainer or create custom recipes for these packages. diff --git a/conanfile.py b/conanfile.py index 9821866..d300869 100644 --- a/conanfile.py +++ b/conanfile.py @@ -18,7 +18,7 @@ class BayesNetConan(ConanFile): "enable_testing": False, "enable_coverage": False } - + # Sources are located in the same place as this recipe, copy them to the recipe exports_sources = "CMakeLists.txt", "bayesnet/*", "config/*", "cmake/*", "docs/*", "tests/*", "bayesnetConfig.cmake.in" @@ -35,7 +35,7 @@ class BayesNetConan(ConanFile): self.version = match.group(1) else: raise Exception("Version not found in CMakeLists.txt") - self.version = match.group(1) + self.version = match.group(1) def config_options(self): if self.settings.os == "Windows": @@ -50,7 +50,7 @@ class BayesNetConan(ConanFile): self.requires("libtorch/2.7.0") self.requires("nlohmann_json/3.11.3") self.requires("folding/1.1.1") # Custom package - self.requires("fimdlp/2.1.0") # Custom package + self.requires("fimdlp/2.1.0") # Custom package def build_requirements(self): self.build_requires("cmake/[>=3.27]")