diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 959641c..ca4f2cc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,26 +19,29 @@ jobs: submodules: recursive - name: Install sonar-scanner and build-wrapper uses: SonarSource/sonarcloud-github-c-cpp@v2 + - name: Install Python and Conan + run: | + sudo apt-get update + sudo apt-get -y install python3 python3-pip + pip3 install conan - name: Install lcov & gcovr run: | sudo apt-get -y install lcov sudo apt-get -y install gcovr - - name: Install Libtorch + - name: Setup Conan profileson run: | - wget https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-2.3.1%2Bcpu.zip - unzip libtorch-cxx11-abi-shared-with-deps-2.3.1+cpu.zip + conan profile detect --force + conan remote add cimmeria https://conan.rmontanana.es/artifactory/api/conan/Cimmeria + - name: Install dependencies with Conan + run: | + conan install . --build=missing -of build_debug -s build_type=Debug -o enable_testing=True + - name: Configure with CMake + run: | + cmake -S . -B build_debug -DCMAKE_TOOLCHAIN_FILE=build_debug/build/Debug/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_TESTING=ON - name: Tests & build-wrapper run: | - cmake -S . -B build -Wno-dev -DCMAKE_PREFIX_PATH=$(pwd)/libtorch -DCMAKE_BUILD_TYPE=Debug -DENABLE_TESTING=ON - build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build build/ --config Debug - cmake --build build -j 4 - cd build - ctest -C Debug --output-on-failure -j 4 - gcovr -f ../src/CPPFImdlp.cpp -f ../src/Metrics.cpp -f ../src/BinDisc.cpp -f ../src/Discretizer.cpp --txt --sonarqube=coverage.xml - - name: Run sonar-scanner - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: | - sonar-scanner --define sonar.cfamily.compile-commands="${{ env.BUILD_WRAPPER_OUT_DIR }}" \ - --define sonar.coverageReportPaths=build/coverage.xml \ No newline at end of file + build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build build_debug --config Debug -j 4 + cp -r tests/datasets build_debug/tests/datasets + cd build_debug/tests + ctest --output-on-failure -j 4 + \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d2075f..b2313f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.1.1] - 2025-07-17 + +### Internal Changes + +- Updated Libtorch to version 2.7.1 +- Updated ArffFiles library to version 1.2.1 +- Enhance CMake configuration for better compatibility + ## [2.1.0] - 2025-06-28 ### Added diff --git a/CMakeLists.txt b/CMakeLists.txt index 2adec91..445d718 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ project(fimdlp LANGUAGES CXX DESCRIPTION "Discretization algorithm based on the paper by Fayyad & Irani Multi-Interval Discretization of Continuous-Valued Attributes for Classification Learning." HOMEPAGE_URL "https://github.com/rmontanana/mdlp" - VERSION 2.1.0 + VERSION 2.1.1 ) set(CMAKE_CXX_STANDARD 17) cmake_policy(SET CMP0135 NEW) diff --git a/CONAN_README.md b/CONAN_README.md index 1b3f31c..b4982fc 100644 --- a/CONAN_README.md +++ b/CONAN_README.md @@ -7,9 +7,11 @@ This directory contains the Conan package configuration for the fimdlp library. The package manages the following dependencies: ### Build Requirements + - **libtorch/2.4.1** - PyTorch C++ library for tensor operations ### Test Requirements (when testing enabled) + - **catch2/3.8.1** - Modern C++ testing framework - **arff-files** - ARFF file format support (included locally in tests/lib/Files/) @@ -67,7 +69,7 @@ conan create . -o shared=True --profile:build=default --profile:host=default ```bash # Add Cimmeria remote -conan remote add cimmeria +conan remote add cimmeria https://conan.rmontanana.es/artifactory/api/conan/Cimmeria # Login to Cimmeria conan remote login cimmeria @@ -150,4 +152,4 @@ conan create . -o enable_testing=True - C++17 compatible compiler - CMake 3.20 or later -- Conan 2.0 or later \ No newline at end of file +- Conan 2.0 or later diff --git a/Makefile b/Makefile index 06f327e..4dfa757 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ SHELL := /bin/bash -.DEFAULT_GOAL := release +.DEFAULT_GOAL := help .PHONY: debug release install test conan-create viewcoverage lcov := lcov @@ -11,18 +11,18 @@ docscdir = docs define build_target @echo ">>> Building the project for $(1)..." @if [ -d $(2) ]; then rm -fr $(2); fi - @conan install . --build=missing -of $(2) -s build_type=$(1) + @conan install . --build=missing -of $(2) -s build_type=$(1) $(4) @cmake -S . -B $(2) -DCMAKE_TOOLCHAIN_FILE=$(2)/build/$(1)/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=$(1) -D$(3) @cmake --build $(2) --config $(1) -j 8 endef debug: ## Build Debug version of the library - @$(call build_target,"Debug","$(f_debug)", "ENABLE_TESTING=ON") + @$(call build_target,"Debug","$(f_debug)", "ENABLE_TESTING=ON", "-o enable_testing=True") release: ## Build Release version of the library - @$(call build_target,"Release","$(f_release)", "ENABLE_TESTING=OFF") + @$(call build_target,"Release","$(f_release)", "ENABLE_TESTING=OFF", "-o enable_testing=False") -install: ## Install the project +install: ## Install the library @echo ">>> Installing the project..." @cmake --build $(f_release) --target install -j 8 @@ -31,7 +31,8 @@ test: ## Build Debug version and run tests @$(MAKE) debug; @cp -r tests/datasets $(f_debug)/tests/datasets @cd $(f_debug)/tests && ctest --output-on-failure -j 8 - @cd $(f_debug)/tests && $(lcov) --capture --directory ../ --demangle-cpp --ignore-errors source,source --ignore-errors mismatch --output-file coverage.info >/dev/null 2>&1; \ + @echo ">>> Generating coverage report..." + @cd $(f_debug)/tests && $(lcov) --capture --directory ../ --demangle-cpp --ignore-errors source,source --ignore-errors mismatch --ignore-errors inconsistent --output-file coverage.info >/dev/null 2>&1; \ $(lcov) --remove coverage.info '/usr/*' --output-file coverage.info >/dev/null 2>&1; \ $(lcov) --remove coverage.info 'lib/*' --output-file coverage.info >/dev/null 2>&1; \ $(lcov) --remove coverage.info 'libtorch/*' --output-file coverage.info >/dev/null 2>&1; \ @@ -66,5 +67,19 @@ conan-create: ## Create the conan package conan create . --build=missing -tf "" -s:a build_type=Debug -o "&:enable_testing=False" @echo ">>> Done" - - +help: ## Show help message + @IFS=$$'\n' ; \ + help_lines=(`fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/\\$$//' | sed -e 's/##/:/'`); \ + printf "%s\n\n" "Usage: make [task]"; \ + printf "%-20s %s\n" "task" "help" ; \ + printf "%-20s %s\n" "------" "----" ; \ + for help_line in $${help_lines[@]}; do \ + IFS=$$':' ; \ + help_split=($$help_line) ; \ + help_command=`echo $${help_split[0]} | sed -e 's/^ *//' -e 's/ *$$//'` ; \ + help_info=`echo $${help_split[2]} | sed -e 's/^ *//' -e 's/ *$$//'` ; \ + printf '\033[36m'; \ + printf "%-20s %s" $$help_command ; \ + printf '\033[0m'; \ + printf "%s\n" $$help_info; \ + done \ No newline at end of file diff --git a/README.md b/README.md index a1e2a47..024c05b 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=rmontanana_mdlp&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=rmontanana_mdlp) [![Coverage Badge](https://img.shields.io/badge/Coverage-100,0%25-green)](html/index.html) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/rmontanana/mdlp) -[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.14245443.svg)](https://doi.org/10.5281/zenodo.14245443) +[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.16025501.svg)](https://doi.org/10.5281/zenodo.16025501) # logo mdlp @@ -18,9 +18,7 @@ Other features: - Intervals with the same value of the variable are not taken into account for cutpoints. - Intervals have to have more than two examples to be evaluated (mdlp). - - The algorithm returns the cut points for the variable. - - The transform method uses the cut points returning its index in the following way: cut[i - 1] <= x < cut[i] diff --git a/conanfile.py b/conanfile.py index 77a3989..834b90b 100644 --- a/conanfile.py +++ b/conanfile.py @@ -54,7 +54,7 @@ class FimdlpConan(ConanFile): self.requires("libtorch/2.7.1") def build_requirements(self): - self.requires("arff-files/1.2.0") # for tests and sample + self.requires("arff-files/1.2.1") # for tests and sample if self.options.enable_testing: self.test_requires("gtest/1.16.0") diff --git a/tests/Discretizer_unittest.cpp b/tests/Discretizer_unittest.cpp index 80b02b4..fe8cdbf 100644 --- a/tests/Discretizer_unittest.cpp +++ b/tests/Discretizer_unittest.cpp @@ -41,7 +41,7 @@ namespace mdlp { Discretizer* disc = new BinDisc(4, strategy_t::UNIFORM); auto version = disc->version(); delete disc; - EXPECT_EQ("2.1.0", version); + EXPECT_EQ("2.1.1", version); } TEST(Discretizer, BinIrisUniform) {