Skip to content

Commit

Permalink
Github build and pip actions, clang bug, change to py3.8
Browse files Browse the repository at this point in the history
  • Loading branch information
kjgm committed Oct 30, 2023
2 parents fcd9548 + 2753efa commit 39fec55
Show file tree
Hide file tree
Showing 6 changed files with 158 additions and 6 deletions.
80 changes: 80 additions & 0 deletions .github/workflows/cmake.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# This provided workflow file is focused on testing a Python project using pip, the package installer for Python.
# There's also a specialized job for building and testing the package in a Mingw64 environment on Windows.
name: CMake build

on:
workflow_dispatch:
pull_request:
push:
branches:
- master

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
runs-on: ${{ matrix.os }}

strategy:
# Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable.
fail-fast: false

# Set up a matrix to run the following 3 configurations:
# 1. <Windows, Release, latest MSVC compiler toolchain on the default runner image, default generator>
# 2. <Linux, Release, latest GCC compiler toolchain on the default runner image, default generator>
# 3. <Linux, Release, latest Clang compiler toolchain on the default runner image, default generator>
#
# To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list.
matrix:
os: [ubuntu-latest, windows-latest]
build_type: [Release]
c_compiler: [gcc, clang, cl]
include:
- os: windows-latest
c_compiler: cl
cpp_compiler: cl
- os: ubuntu-latest
c_compiler: gcc
cpp_compiler: g++
- os: ubuntu-latest
c_compiler: clang
cpp_compiler: clang++
exclude:
- os: windows-latest
c_compiler: gcc
- os: windows-latest
c_compiler: clang
- os: ubuntu-latest
c_compiler: cl

steps:
- uses: actions/checkout@v3

- name: Set reusable strings
# Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file.
id: strings
shell: bash
run: |
echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT"
- name: Configure CMake
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: >
cmake -B ${{ steps.strings.outputs.build-output-dir }}
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }}
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }}
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-S ${{ github.workspace }}
- name: Build
# Build your program with the given configuration. Note that --config is needed because the default Windows generator is a multi-config generator (Visual Studio generator).
run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }}

- name: Test
working-directory: ${{ steps.strings.outputs.build-output-dir }}
# Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator).
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ctest --build-config ${{ matrix.build_type }}
69 changes: 69 additions & 0 deletions .github/workflows/pip.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# This provided workflow file is focused on testing a Python project using pip, the package installer for Python.
# There's also a specialized job for building and testing the package in a Mingw64 environment on Windows.
name: Pip install

on:
workflow_dispatch:
pull_request:
push:
branches:
- master

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
strategy:
fail-fast: false
matrix:
platform: [windows-latest, macos-latest, ubuntu-latest]
python-version: ["3.8", "3.11"]

runs-on: ${{ matrix.platform }}

steps:
- uses: actions/checkout@v3

- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}

- name: Add requirements
run: python -m pip install --upgrade wheel setuptools

- name: Build and install
run: pip install --verbose .

build-mingw64:
runs-on: windows-latest
defaults:
run:
shell: msys2 {0}
steps:
- uses: msys2/setup-msys2@v2
with:
update: true
install: >-
mingw-w64-x86_64-gcc
mingw-w64-x86_64-python-pip
mingw-w64-x86_64-python-wheel
mingw-w64-x86_64-python-pandas
mingw-w64-x86_64-meson
mingw-w64-x86_64-python-scikit-learn
- uses: actions/checkout@v3

- name: Add requirements
# This is required because --no-build-isolation disable dependences
# installation
run: python -m pip install pybind11 meson-python

- name: Build and install
# --no-build-isolation is required because the vanilla setuptool does not
# support Mingw64.See patches here:
# https://github.com/msys2/MINGW-packages/tree/master/mingw-w64-python-setuptools
# Without those patches build_ext fails with:
# error: --plat-name must be one of ('win32', 'win-amd64', 'win-arm32', 'win-arm64')
run: pip install --no-build-isolation .
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
[![CMake build](https://github.com/algtudelft/pystreed/actions/workflows/cmake.yml/badge.svg)](https://github.com/algtudelft/pystreed/actions/workflows/cmake.yml)
[![Pip install](https://github.com/algtudelft/pystreed/actions/workflows/pip.yml/badge.svg)](https://github.com/algtudelft/pystreed/actions/workflows/pip.yml)

# STreeD: Separable Trees with Dynamic programming
By: Jacobus G. M. van der Linden

Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ requires = [
"pybind11>=2.10.0"
]
build-backend = "setuptools.build_meta"
target-version = "py37"
target-version = "py38"

[project]
name = "pystreed"
Expand All @@ -22,7 +22,7 @@ maintainers = [
dependencies =[
"pandas>=1.0.0",
"numpy>=1.18.0",
"scikit-learn >=1.2.0,<1.3"
"scikit-learn >=1.2.0"
]
classifiers = [
"Programming Language :: Python :: 3",
Expand Down
6 changes: 3 additions & 3 deletions src/bindings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ void NumpyToSTreeDData(const py::array_t<int, py::array::c_style>& _X,
AData& data, ADataView& data_view) {
const bool regression = std::is_same<LT, double>::value;
std::vector<const AInstance*> instances;
auto X = _X.unchecked<2>();
auto y = _y.unchecked<1>();
auto X = _X.template unchecked<2>(); // Template keyword because of a bug in the clang compiler
auto y = _y.template unchecked<1>(); // Template keyword because of a bug in the clang compiler
const int num_instances = int(X.shape(0));
const int num_features = int(X.shape(1));

Expand Down Expand Up @@ -74,7 +74,7 @@ void NumpyToSTreeDData(const py::array_t<int, py::array::c_style>& _X,
}

std::vector<bool> NumpyRowToBoolVector(const py::array_t<int, py::array::c_style>& _X) {
auto X = _X.unchecked<1>();
auto X = _X.template unchecked<1>(); // Template keyword because of a bug in the clang compiler
std::vector<bool> v(X.shape(0));
for (py::size_t j = 0; j < X.shape(0); j++) {
v[j] = X(j);
Expand Down
2 changes: 1 addition & 1 deletion test/correct_solution_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ void EnumerateSolverSetupOptions(std::vector<SolverSetup>& solver_setups) {

void GetF1ScoreTests(std::vector<F1ScoreTestSetup>& f1_score_tests) {
f1_score_tests.push_back({
"data/f1score/yeast.csv", 2, 3, { /*
"data/classification/yeast.csv", 2, 3, { /*
{0, 823}, {1, 784}, {2, 756}, {6, 753}, {9, 733}, {11, 701}, {18, 692}, {21, 679}, {22, 663}, {26, 628},
{33, 605}, {35, 573}, {42, 564}, {45, 551}, {54, 548}, {59, 532}, {64, 521}, {67, 501}, {73, 491}, {77, 463},
{96, 460}, {97, 456}, {104, 420}, {113, 377}, {139, 372}, {140, 367}, {147, 364}, {154, 358}, {156, 321}, {167, 301},
Expand Down

0 comments on commit 39fec55

Please sign in to comment.