Skip to content
Closed
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
16 changes: 8 additions & 8 deletions .github/changelog.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
Release History
===============

[Release 3.12.0rc1](https://github.com/GUDHI/gudhi-devel/releases/tag/tags%2Fgudhi-release-3.12.0rc1)
[Release 3.12.0rc3](https://github.com/GUDHI/gudhi-devel/releases/tag/tags%2Fgudhi-release-3.12.0rc3)
-----------

Release date: February 2026

Below is a list of changes made since GUDHI 3.11.0:

- [Čech complex](https://gudhi.inria.fr/python/3.12.0rc1/delaunay_complex_sklearn_itf_ref.html) `[Python]`
- [Čech complex](https://gudhi.inria.fr/python/3.12.0rc3/delaunay_complex_sklearn_itf_ref.html) `[Python]`
- Čech complex persistence scikit-learn like interface provides 2 new classes:
* [CechPersistence](https://gudhi.inria.fr/python/3.12.0rc1/delaunay_complex_sklearn_itf_ref.html#gudhi.sklearn.CechPersistence) for computing the same persistent homology as the Čech complex, while being significantly smaller, using internally a [DelaunayCechComplex](https://gudhi.inria.fr/python/3.12.0rc1/delaunay_complex_ref.html#gudhi.DelaunayCechComplex).
* [WeightedCechPersistence](https://gudhi.inria.fr/python/3.12.0rc1/delaunay_complex_sklearn_itf_ref.html#gudhi.sklearn.WeightedCechPersistence) for computing the same persistent homology as the Weighted Čech complex, while being significantly smaller, using internally a Weighted version of [AlphaComplex](https://gudhi.inria.fr/python/3.12.0rc1/delaunay_complex_ref.html#gudhi.AlphaComplex).
* [CechPersistence](https://gudhi.inria.fr/python/3.12.0rc3/delaunay_complex_sklearn_itf_ref.html#gudhi.sklearn.CechPersistence) for computing the same persistent homology as the Čech complex, while being significantly smaller, using internally a [DelaunayCechComplex](https://gudhi.inria.fr/python/3.12.0rc3/delaunay_complex_ref.html#gudhi.DelaunayCechComplex).
* [WeightedCechPersistence](https://gudhi.inria.fr/python/3.12.0rc3/delaunay_complex_sklearn_itf_ref.html#gudhi.sklearn.WeightedCechPersistence) for computing the same persistent homology as the Weighted Čech complex, while being significantly smaller, using internally a Weighted version of [AlphaComplex](https://gudhi.inria.fr/python/3.12.0rc3/delaunay_complex_ref.html#gudhi.AlphaComplex).

- [Alpha complex dD](https://gudhi.inria.fr/doc/3.12.0rc1/class_gudhi_1_1alpha__complex_1_1_alpha__complex.html) `[C++]`
- [Alpha complex dD](https://gudhi.inria.fr/doc/3.12.0rc3/class_gudhi_1_1alpha__complex_1_1_alpha__complex.html) `[C++]`
- **API break:** The simplicial complex for the Alpha complex concept has been changed to
`dimension_simplex_range` (that must returns a range of simplices of a given dimension) instead of
`skeleton_simplex_range` (that was returning a range of simplices lower or equal to a given dimension)

- [Simplex_tree](https://gudhi.inria.fr/doc/3.12.0rc1/class_gudhi_1_1_simplex__tree.html) `[C++]`
- [Simplex_tree](https://gudhi.inria.fr/doc/3.12.0rc3/class_gudhi_1_1_simplex__tree.html) `[C++]`
- A new iterator over the simplices of the simplicial complex that match a given dimension

- [Persistence matrix](https://gudhi.inria.fr/doc/3.12.0rc1/group__persistence__matrix.html) `[C++]`
- [Persistence matrix](https://gudhi.inria.fr/doc/3.12.0rc3/group__persistence__matrix.html) `[C++]`
> Matrix API is in a beta version and may change in incompatible ways in the near future.
- A new function to insert a maximal cell using swaps.

- [Representations](https://gudhi.inria.fr/python/3.12.0rc1/representations.html) `[Python]`
- [Representations](https://gudhi.inria.fr/python/3.12.0rc3/representations.html) `[Python]`
- in metrics, `BottleneckDistance` argument `epsilon` is deprecrated and renamed `e` to be consistent with `bottleneck_distance` and `pairwise_persistence_diagram_distances`

- Installation
Expand Down
2 changes: 1 addition & 1 deletion .github/for_maintainers/new_gudhi_version_creation.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ nor [unlabelled closed PRs](https://github.com/GUDHI/gudhi-devel/pulls?q=is%3Apr

## Version file modification

**Edit the file CMakeGUDHIVersion.txt**, and increment major, minor, or patch version number, in function of the version new delivery.
**Edit the file CMakeGUDHIVersion.txt and the file pyproject.toml**, and increment major, minor, or patch version number, in function of the version new delivery.
```bash
# cf. .gitignore - ignore this if it is a fresh clone version
rm -rf data/points/COIL_database/lucky_cat.off_dist data/points/COIL_database/lucky_cat.off_sc.dot data/points/KleinBottle5D.off_dist data/points/KleinBottle5D.off_sc.dot data/points/human.off_dist data/points/human.off_sc.off data/points/human.off_sc.txt src/python/test/__pycache__
Expand Down
14 changes: 7 additions & 7 deletions .github/next_release.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,24 @@ From a user point of view, we recommend to download GUDHI user version (gudhi.3.

Below is a list of changes:

- [Čech complex](https://gudhi.inria.fr/python/3.12.0rc1/delaunay_complex_sklearn_itf_ref.html) `[Python]`
- [Čech complex](https://gudhi.inria.fr/python/3.12.0rc3/delaunay_complex_sklearn_itf_ref.html) `[Python]`
- Čech complex persistence scikit-learn like interface provides 2 new classes:
* [CechPersistence](https://gudhi.inria.fr/python/3.12.0rc1/delaunay_complex_sklearn_itf_ref.html#gudhi.sklearn.CechPersistence) for computing the same persistent homology as the Čech complex, while being significantly smaller, using internally a [DelaunayCechComplex](https://gudhi.inria.fr/python/3.12.0rc1/delaunay_complex_ref.html#gudhi.DelaunayCechComplex).
* [WeightedCechPersistence](https://gudhi.inria.fr/python/3.12.0rc1/delaunay_complex_sklearn_itf_ref.html#gudhi.sklearn.WeightedCechPersistence) for computing the same persistent homology as the Weighted Čech complex, while being significantly smaller, using internally a Weighted version of [AlphaComplex](https://gudhi.inria.fr/python/3.12.0rc1/delaunay_complex_ref.html#gudhi.AlphaComplex).
* [CechPersistence](https://gudhi.inria.fr/python/3.12.0rc3/delaunay_complex_sklearn_itf_ref.html#gudhi.sklearn.CechPersistence) for computing the same persistent homology as the Čech complex, while being significantly smaller, using internally a [DelaunayCechComplex](https://gudhi.inria.fr/python/3.12.0rc3/delaunay_complex_ref.html#gudhi.DelaunayCechComplex).
* [WeightedCechPersistence](https://gudhi.inria.fr/python/3.12.0rc3/delaunay_complex_sklearn_itf_ref.html#gudhi.sklearn.WeightedCechPersistence) for computing the same persistent homology as the Weighted Čech complex, while being significantly smaller, using internally a Weighted version of [AlphaComplex](https://gudhi.inria.fr/python/3.12.0rc3/delaunay_complex_ref.html#gudhi.AlphaComplex).

- [Alpha complex dD](https://gudhi.inria.fr/doc/3.12.0rc1/class_gudhi_1_1alpha__complex_1_1_alpha__complex.html) `[C++]`
- [Alpha complex dD](https://gudhi.inria.fr/doc/3.12.0rc3/class_gudhi_1_1alpha__complex_1_1_alpha__complex.html) `[C++]`
- **API break:** The simplicial complex for the Alpha complex concept has been changed to
`dimension_simplex_range` (that must returns a range of simplices of a given dimension) instead of
`skeleton_simplex_range` (that was returning a range of simplices lower or equal to a given dimension)

- [Simplex_tree](https://gudhi.inria.fr/doc/3.12.0rc1/class_gudhi_1_1_simplex__tree.html) `[C++]`
- [Simplex_tree](https://gudhi.inria.fr/doc/3.12.0rc3/class_gudhi_1_1_simplex__tree.html) `[C++]`
- A new iterator over the simplices of the simplicial complex that match a given dimension

- [Persistence matrix](https://gudhi.inria.fr/doc/3.12.0rc1/group__persistence__matrix.html) `[C++]`
- [Persistence matrix](https://gudhi.inria.fr/doc/3.12.0rc3/group__persistence__matrix.html) `[C++]`
> Matrix API is in a beta version and may change in incompatible ways in the near future.
- A new function to insert a maximal cell using swaps.

- [Representations](https://gudhi.inria.fr/python/3.12.0rc1/representations.html) `[Python]`
- [Representations](https://gudhi.inria.fr/python/3.12.0rc3/representations.html) `[Python]`
- in metrics, `BottleneckDistance` argument `epsilon` is deprecrated and renamed `e` to be consistent with `bottleneck_distance` and `pairwise_persistence_diagram_distances`

- Installation
Expand Down
53 changes: 29 additions & 24 deletions .github/workflows/pip-build-osx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,32 @@ name: pip build osx

on: [push, pull_request]

env:
MACOSX_DEPLOYMENT_TARGET: 14.0
_PYTHON_HOST_PLATFORM: macosx-14.0-universal2
ARCHFLAGS: "-arch arm64 -arch x86_64"
strategy:
max-parallel: 4
matrix:
os: [macos-14, macos-14-large]
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
include:
- python-version: "3.10"
numpy-version: "1.21.6"
- python-version: "3.11"
numpy-version: "1.23.2"
- python-version: "3.12"
numpy-version: "1.26.0"
- python-version: "3.13"
numpy-version: "2.1.0"
- python-version: "3.14"
numpy-version: "2.3.4"
# Python 3.11+ is only available for MacOS free version cf. https://github.com/actions/runner-images
exclude:
- os: macos-14
python-version: "3.10"

jobs:
build:
# Python 3.11+ is only available for MacOS free version cf. https://github.com/actions/runner-images
runs-on: macos-14
strategy:
max-parallel: 4
matrix:
python-version: ["3.11"]
include:
- python-version: "3.11"
numpy-version: "1.23.2"
name: Build wheels for Python ${{ matrix.python-version }}
# Build with minimal supported version of NumPy 1.X with ABI compatibility feature
wheels:
runs-on: ${{ matrix.os }}
name: Build wheels on ${{ matrix.os }} for Python ${{ matrix.python-version }}
steps:
- uses: actions/checkout@v6
with:
Expand All @@ -35,23 +44,19 @@ jobs:
brew install boost eigen gmp mpfr cgal || echo "brew install failed, continuing..."
python -m pip install --user numpy>=2.0
python -m pip install --user -r ext/gudhi-deploy/build-requirements.txt
python -m pip install --user delocate
./scripts/build_osx_universal_gmpfr.sh
# Now the universal libraries are in $PWD/deps-uni/lib
python -m pip install --user twine delocate
- name: Build python wheel
run: |
export GMP_LIB_DIR=$PWD/deps-uni/lib
export GMPXX_LIB_DIR=$PWD/deps-uni/lib
export MPFR_LIB_DIR=$PWD/deps-uni/lib
python --version
python -m pip wheel -ve .
export PATH="$PATH:`python -m site --user-base`/bin"
delocate-listdeps --depending *.whl
delocate-wheel --require-archs universal2 -w wheelhouse -v *.whl
- name: Upload OSx python wheel
mkdir wheelhouse || true
delocate-wheel -w wheelhouse -v *.whl
- name: Upload linux python wheel
uses: actions/upload-artifact@v6
with:
name: osx python wheel
name: linux python wheel
path: wheelhouse/*.whl
# Test ABI compatibility with numpy 1.X
- name: Install and test python wheel
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/pip-packaging-osx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ jobs:
./scripts/build_osx_universal_gmpfr.sh
# Now the universal libraries are in $PWD/deps-uni/lib
- name: Build python wheel
# To workaround an issue on Sonoma where mixing ar from brew install
env:
SKBUILD_CMAKE_DEFINE: "CMAKE_AR=/usr/bin/ar"
run: |
export GMP_LIB_DIR=$PWD/deps-uni/lib
export GMPXX_LIB_DIR=$PWD/deps-uni/lib
Expand Down
2 changes: 1 addition & 1 deletion CMakeGUDHIVersion.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
set (GUDHI_MAJOR_VERSION 3)
set (GUDHI_MINOR_VERSION 12)
# GUDHI_PATCH_VERSION can be 'ZaN' for Alpha release, 'ZbN' for Beta release, 'ZrcN' for release candidate or 'Z' for a final release.
set (GUDHI_PATCH_VERSION 0rc2)
set (GUDHI_PATCH_VERSION 0rc3)
set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION})

message(STATUS "GUDHI version : ${GUDHI_VERSION}")
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ wheel.packages = []

[project]
name = "gudhi"
version = "3.12.0a1"
version = "3.12.0rc3"
description = "The Gudhi library is an open source library for Computational Topology and Topological Data Analysis (TDA)."
# readme = "doc/pypi_introduction.inc"
readme = "src/python/doc/pypi_introduction.rst"
requires-python = ">=3.10"
authors = [{ name = "GUDHI Editorial Board <https://gudhi.inria.fr/contact/>" }]
classifiers = [
Expand Down
8 changes: 6 additions & 2 deletions src/cmake/modules/GUDHI_user_version_target.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,12 @@ add_custom_command(TARGET user_version PRE_BUILD COMMAND ${CMAKE_COMMAND} -E
add_custom_command(TARGET user_version PRE_BUILD COMMAND ${CMAKE_COMMAND} -E
copy ${CMAKE_SOURCE_DIR}/src/Doxyfile.in ${GUDHI_USER_VERSION_DIR}/Doxyfile.in)

add_custom_command(TARGET user_version PRE_BUILD COMMAND ${CMAKE_COMMAND} -E
copy ${CMAKE_SOURCE_DIR}/pyproject.toml ${GUDHI_USER_VERSION_DIR}/pyproject.toml)
# readme is not in the same place in developper and user version
file(READ "${CMAKE_SOURCE_DIR}/pyproject.toml" PYPROJECT_TOML)
string(REGEX REPLACE "readme = \"src/python/doc/pypi_introduction.rst\""
"readme = \"python/doc/pypi_introduction.rst\"" MODIFIED_PYPROJECT_TOML "${PYPROJECT_TOML}")
file(WRITE "${GUDHI_USER_VERSION_DIR}/pyproject.toml" "${MODIFIED_PYPROJECT_TOML}")

file(GLOB_RECURSE PYTHON_FILES ${CMAKE_SOURCE_DIR}/${GUDHI_PYTHON_PATH}/*)
foreach(PYTHON_FILE ${PYTHON_FILES})
string(REPLACE "${CMAKE_SOURCE_DIR}/${GUDHI_PYTHON_PATH}/" "" RELATIVE_PYTHON_FILE ${PYTHON_FILE})
Expand Down