Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion .github/workflows/macos-linux-windows-pixi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,15 @@ jobs:
CCACHE_DIR: "${GITHUB_WORKSPACE}/.ccache"
CCACHE_COMPRESS: true
CCACHE_COMPRESSLEVEL: 6
# Since pixi will install a compiler, the compiler mtime will be changed.
# This can invalidate the cache (https://ccache.dev/manual/latest.html#config_compiler_check)
CCACHE_COMPILERCHECK: content

strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, macos-15-intel]
environment: [all, all-py39]
environment: [all, all-python-oldest]
build_type: [Release, Debug]
cxx_options: ['', '-mavx2']

Expand Down Expand Up @@ -75,6 +78,10 @@ jobs:
cache: true
environments: ${{ matrix.environment }}

- name: Clear ccache statistics [MacOS/Linux/Windows]
run: |
pixi run -e ${{ matrix.environment }} ccache -z

- name: Build EigenPy [MacOS/Linux/Windows]
env:
CMAKE_BUILD_PARALLEL_LEVEL: 2
Expand All @@ -83,6 +90,10 @@ jobs:
run: |
pixi run -e ${{ matrix.environment }} test

- name: Show ccache statistics [MacOS/Linux/Windows]
run: |
pixi run -e ${{ matrix.environment }} ccache -sv

check:
if: always()
name: check-macos-linux-windows-pixi
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Changed
- Remove `accelerate.hpp` header that clash with Accelerate.hpp in non case sensitive OS ([#593](https://github.com/stack-of-tasks/eigenpy/pull/593)
We don't consider it an API break since this header was rarely used.
- Python version update ([#603](https://github.com/stack-of-tasks/eigenpy/pull/603)):
- Project is now tested with Python 3.10 and 3.14
- Python 3.10 is the minimal supported Python version

### Added
- Support for Python slice, tuple and list indexing for `std::vector` bindings ([#592](https://github.com/stack-of-tasks/eigenpy/pull/592))
- ROS: jrl_cmakmodules dependency + kilted CI ([#602](https://github.com/stack-of-tasks/eigenpy/pull/602))
- Add pixi-build support ([#603](https://github.com/stack-of-tasks/eigenpy/pull/603)):

### Fixed
- Fix partly the support of the change of API of GeneralizedEigenSolver in Eigen 5+ ([#594](https://github.com/stack-of-tasks/eigenpy/pull/594))
- Fix Eigen decompositions and solvers for Eigen 5 ([#596](https://github.com/stack-of-tasks/eigenpy/pull/596))
- Remove pixi 0.57 warnings ([#603](https://github.com/stack-of-tasks/eigenpy/pull/603)):

## [3.12.0] - 2025-08-12

Expand Down
2 changes: 1 addition & 1 deletion development/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
To create a release with Pixi run the following commands on the **devel** branch:

```bash
EIGENPY_VERSION=X.Y.Z pixi run release_new_version
EIGENPY_VERSION=X.Y.Z pixi run release-new-version
git push origin
git push origin vX.Y.Z
```
Expand Down
9 changes: 0 additions & 9 deletions development/scripts/pixi/activation.bat
Original file line number Diff line number Diff line change
@@ -1,12 +1,3 @@
:: Setup ccache
set CMAKE_CXX_COMPILER_LAUNCHER=ccache

:: Create compile_commands.json for language server
set CMAKE_EXPORT_COMPILE_COMMANDS=1

:: Activate color output with Ninja
set CMAKE_COLOR_DIAGNOSTICS=1

:: Set default build value only if not previously set
if not defined EIGENPY_BUILD_TYPE (set EIGENPY_BUILD_TYPE=Release)
if not defined EIGENPY_PYTHON_STUBS (set EIGENPY_PYTHON_STUBS=ON)
Expand Down
14 changes: 5 additions & 9 deletions development/scripts/pixi/activation.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,12 @@ then
# On GNU/Linux, I don't know if these flags are mandatory with g++ but
# it allow to use clang++ as compiler
export LDFLAGS="-Wl,-rpath,$CONDA_PREFIX/lib -Wl,-rpath-link,$CONDA_PREFIX/lib -L$CONDA_PREFIX/lib"
# Conda compiler is named x86_64-conda-linux-gnu-c++, ccache can't resolve it
# (https://ccache.dev/manual/latest.html#config_compiler_type)
export CCACHE_COMPILERTYPE=gcc
fi

# Setup ccache
export CMAKE_CXX_COMPILER_LAUNCHER=ccache

# Create compile_commands.json for language server
export CMAKE_EXPORT_COMPILE_COMMANDS=1

# Activate color output with Ninja
export CMAKE_COLOR_DIAGNOSTICS=1
# Without -isystem, some LSP can't find headers
export EIGENPY_CXX_FLAGS="$CXXFLAGS -isystem $CONDA_PREFIX/include"

# Set default build value only if not previously set
export EIGENPY_BUILD_TYPE=${EIGENPY_BUILD_TYPE:=Release}
Expand Down
5 changes: 0 additions & 5 deletions development/scripts/pixi/activation_clang.sh

This file was deleted.

3 changes: 0 additions & 3 deletions development/scripts/pixi/activation_clang_cl.bat

This file was deleted.

3,410 changes: 2,232 additions & 1,178 deletions pixi.lock

Large diffs are not rendered by default.

119 changes: 86 additions & 33 deletions pixi.toml
Original file line number Diff line number Diff line change
@@ -1,33 +1,70 @@
[project]
[workspace]
name = "eigenpy"
version = "3.12.0"
description = "Bindings between Numpy and Eigen using Boost.Python"
platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"]
channels = ["conda-forge"]
license = "BSD-2-Clause"
license-file = "LICENSE"
preview = ["pixi-build"]

[build-dependencies]
[dependencies]
ccache = ">=4.9.1"
cmake = ">=3.10"
cxx-compiler = ">=1.7.0"
ninja = ">=1.11"
pkg-config = ">=0.29.2"
git = ">=2.47.0"
libboost-devel = ">=1.80.0"
libboost-python-devel = ">=1.80.0"
eigen = ">=3.4.0"
numpy = ">=1.22.0"
python = ">=3.9.0"
scipy = ">=1.10.0"

[dependencies]
[package]
name = { workspace = true }
version = { workspace = true }

[package.build]
backend = { name = "pixi-build-cmake", version = "0.3.*" }

[package.build.config]
extra-args = [
"-DGENERATE_PYTHON_STUBS=ON",
"-DBUILD_TESTING=OFF",
"-DBUILD_TESTING_SCIPY=OFF",
]

[package.build-dependencies]
pkg-config = ">=0.29.2"

[package.host-dependencies]
libboost-devel = ">=1.80.0"
libboost-python-devel = ">=1.80.0"
eigen = ">=3.4.0"
numpy = ">=1.22.0"
scipy = ">=1.10.0"
python = ">=3.9.0"

[package.run-dependencies]
scipy = ">=1.10.0"

[activation]
scripts = ["development/scripts//pixi/activation.sh"]
[target.unix.activation]
scripts = ["development/scripts/pixi/activation.sh"]

[target.win-64.activation]
scripts = ["development/scripts//pixi/activation.bat"]
scripts = ["development/scripts/pixi/activation.bat"]

[activation.env]
# Setup ccache
CMAKE_CXX_COMPILER_LAUNCHER = "ccache"
# Create compile_commands.json for language server
CMAKE_EXPORT_COMPILE_COMMANDS = "ON"
# Activate color output with Ninja
CMAKE_COLOR_DIAGNOSTICS = "ON"
# Help ccache manage generated files and PCH (https://ccache.dev/manual/latest.html#_precompiled_headers)
CCACHE_SLOPPINESS = "include_file_ctime,include_file_mtime,pch_defines,time_macros"

[tasks]
# We must avoid to set CMAKE_CXX_FLAGS because of WIN32
Expand All @@ -41,6 +78,8 @@ configure = { cmd = [
"build",
"-S",
".",
# Don't use standard layout because it's not well implemented on Windows
"-DPYTHON_STANDARD_LAYOUT=OFF",
"-DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX",
"-DCMAKE_BUILD_TYPE=$EIGENPY_BUILD_TYPE",
"-DGENERATE_PYTHON_STUBS=$EIGENPY_PYTHON_STUBS",
Expand All @@ -62,7 +101,7 @@ tasks = { lint = { cmd = "pre-commit run --all" } }
tomlkit = ">=0.13.2"

[feature.new-version.tasks]
configure_new_version = { cmd = [
configure-new-version = { cmd = [
"CXXFLAGS=$EIGENPY_CXX_FLAGS",
"cmake",
"-G",
Expand All @@ -71,14 +110,16 @@ configure_new_version = { cmd = [
"build_new_version",
"-S",
".",
# Don't use standard layout because it's not well implemented on Windows
"-DPYTHON_STANDARD_LAYOUT=OFF",
"-DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX",
"-DCMAKE_BUILD_TYPE=$EIGENPY_BUILD_TYPE",
"-DGENERATE_PYTHON_STUBS=ON",
"-DBUILD_WITH_CHOLMOD_SUPPORT=ON",
"-DBUILD_WITH_ACCELERATE_SUPPORT=OFF",
] }
release_new_version = { cmd = "VERSION=$EIGENPY_VERSION cmake --build build_new_version --target release", depends-on = [
"configure_new_version",
release-new-version = { cmd = "VERSION=$EIGENPY_VERSION cmake --build build_new_version --target release", depends-on = [
"configure-new-version",
] }

# Cholmod support
Expand All @@ -91,45 +132,57 @@ activation = { env = { EIGENPY_CHOLMOD_SUPPORT = "ON" } }
[feature.accelerate.target.osx-arm64]
activation = { env = { EIGENPY_ACCELERATE_SUPPORT = "ON" } }

[feature.py312.dependencies]
python = "3.12.*"
[feature.python-latest.dependencies]
python = "3.14.*"

[feature.py39.dependencies]
python = "3.9.*"
[feature.python-oldest.dependencies]
python = "3.10.*"

# Use clang-cl on Windows.
# We must use scripts instead of env to setup CC and CXX
# to avoid cxx-compiler to overwrite them.
# Use clang-cl on Windows
# If something go wrong, we can check this repository:
# https://github.com/conda-forge/clang-win-activation-feedstock/tree/main
[feature.clang-cl]
platforms = ["win-64"]
activation = { scripts = ["development/scripts//pixi/activation_clang_cl.bat"] }
dependencies = { clangxx = "*", lld = "*" }

# Absolute path is needed to avoid using system clang-cl
[feature.clang-cl.activation.env]
CC = "%CONDA_PREFIX%\\Library\\bin\\clang-cl"
CXX = "%CONDA_PREFIX%\\Library\\bin\\clang-cl"

# Use clang on GNU/Linux.
# We must use scripts instead of env to setup CC and CXX
# to avoid cxx-compiler to overwrite them.
# Use clang on GNU/Linux
[feature.clang]
platforms = ["linux-64"]
activation = { scripts = ["development/scripts//pixi/activation_clang.sh"] }
activation = { env = { CC = "clang", CXX = "clang++" } }
dependencies = { clangxx = "*" }

[environments]
default = { features = ["py312"], solve-group = "py312" }
clang = { features = ["clang", "py312"] }
lint = { features = ["lint"], solve-group = "py312" }
cholmod = { features = ["cholmod", "py312"], solve-group = "py312" }
accelerate = { features = ["accelerate", "py312"], solve-group = "py312" }
py39 = { features = ["py39"], solve-group = "py39" }
default = { features = ["python-latest"], solve-group = "python-latest" }
clang = { features = ["clang", "python-latest"] }
lint = { features = ["lint"], solve-group = "python-latest" }
cholmod = { features = [
"cholmod",
"python-latest",
], solve-group = "python-latest" }
accelerate = { features = [
"accelerate",
"python-latest",
], solve-group = "python-latest" }
python-oldest = { features = ["python-oldest"], solve-group = "python-oldest" }
# Accelerate will only work in Eigen next release
all = { features = ["cholmod", "py312"], solve-group = "py312" }
all-py39 = { features = ["cholmod", "py39"], solve-group = "py39" }
all = { features = ["cholmod", "python-latest"], solve-group = "python-latest" }
all-python-oldest = { features = [
"cholmod",
"python-oldest",
], solve-group = "python-oldest" }
all-clang-cl = { features = [
"cholmod",
"clang-cl",
"py312",
], solve-group = "py312" }
"python-latest",
], solve-group = "python-latest" }
# Release a new software version
new-version = { features = [
"new-version",
"cholmod",
"py312",
], solve-group = "py312" }
"python-latest",
], solve-group = "python-latest" }
Loading