Skip to content

Commit

Permalink
Merge branch 'GUDHI:master' into persistence_matrix
Browse files Browse the repository at this point in the history
  • Loading branch information
hschreiber authored Feb 16, 2024
2 parents 499972c + 579cfa5 commit 865e396
Show file tree
Hide file tree
Showing 45 changed files with 1,096 additions and 444 deletions.
52 changes: 50 additions & 2 deletions .github/changelog.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,63 @@
Release History
===============


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

Release date: December 2023

Below is a list of changes made since GUDHI 3.8.0:

- [CubicalPersistence](https://gudhi.inria.fr/python/latest/cubical_complex_sklearn_itf_ref.html)
- Much faster implementation for the 2d case with input from top-dimensional cells.

- [Simplex_tree](https://gudhi.inria.fr/doc/latest/group__simplex__tree.html)
- A helper `for_each_simplex` that applies a given function object on each simplex
- A new method `num_simplices_by_dimension` is now available thanks to this helper.
- A `clear` method to empty the data stucture.
- A new argument `ignore_infinite_values` for `initialize_filtration` method to skip infinite values. As a side effect, this change enhances the persistence computation.
- `Simplex_tree_options_full_featured` has been renamed `Simplex_tree_options_default` and `Simplex_tree_options_python`.
These are respectively the default options used by the `Simplex_tree` and by the python interface of the `SimplexTree` (as before this version).
- From GUDHI 3.9.0, `Simplex_tree_options_full_featured` now activates `link_nodes_by_label` and `stable_simplex_handles` (making it slower, except for browsing cofaces).

| Simplex_tree_options_* | :warning: full_featured | default | python | minimal |
| ---- | ---- | ---- | ---- | ---- |
| store_key | 1 | 1 | 1 | 0 |
| store_filtration | 1 | 1 | 1 | 0 |
| contiguous_vertices | 0 | 0 | 0 | 0 |
| link_nodes_by_label | ***1*** | 0 | 0 | 0 |
| stable_simplex_handles | ***1*** | 0 | 0 | 0 |
| Filtration_value | double | double | double | |

- [Simplex_tree options](https://gudhi.inria.fr/doc/latest/struct_simplex_tree_options.html)
- A new option `link_nodes_by_label` to speed up cofaces and stars access, when set to true.
- A new option `stable_simplex_handles` to keep Simplex handles valid even after insertions or removals, when set to true.

- [Čech complex](https://gudhi.inria.fr/doc/latest/group__cech__complex.html)
- A function `assign_MEB_filtration` that assigns to each simplex a filtration value equal to the squared radius of its minimal enclosing ball (MEB), given a simplicial complex and an embedding of its vertices. Applied on a Delaunay triangulation, it computes the Delaunay-Čech filtration.

- [Edge collapse](https://gudhi.inria.fr/python/latest/edge_collapse.html)
- A Python function `reduce_graph` to simplify a clique filtration (represented as a sparse weighted graph), while preserving its persistent homology.

- [Mapper/GIC/Nerve complexes](https://gudhi.inria.fr/python/latest/cover_complex_sklearn_isk_ref.html)
- A new method `save_to_html` to ease the Keppler Mapper visualization

- Installation
- Boost ≥ 1.71.0 is now required (was ≥ 1.66.0).
- cython >= 3.0.0 is now supported.
- Python 3.12 pip package.

- Miscellaneous
- The [list of bugs that were solved since GUDHI-3.8.0](https://github.com/GUDHI/gudhi-devel/issues?q=label%3A3.9.0+is%3Aclosed) is available on GitHub.

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

Release date: April 2023

As a major new feature, the GUDHI library now offers Perslay, a Tensorflow model for the representations module, scikit-learn like interfaces for Cover Complexes, a new function to compute persistence of a function on ℝ and the possibility to build a Cubical Complex as a lower-star filtration from vertices.

We are now using GitHub to develop the GUDHI library, do not hesitate to [fork the GUDHI project on GitHub](https://github.com/GUDHI/gudhi-devel). From a user point of view, we recommend to download GUDHI user version (gudhi.3.X.X.tar.gz).

Below is a list of changes made since GUDHI 3.7.1:

- [Perslay](https://gudhi.inria.fr/python/latest/representations_tflow_itf_ref.html)
Expand Down
9 changes: 7 additions & 2 deletions .github/for_maintainers/switcher.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
[
{
"name": "v3.8.0 (latest)",
"version": "3.8.0",
"name": "v3.9.0 (latest)",
"version": "3.9.0",
"url": "https://gudhi.inria.fr/python/latest/"
},
{
"name": "v3.8.0",
"version": "3.8.0",
"url": "https://gudhi.inria.fr/python/3.8.0/"
},
{
"name": "v3.7.1",
"version": "3.7.1",
Expand Down
21 changes: 6 additions & 15 deletions .github/next_release.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,17 @@
We are pleased to announce the release 3.9.0 of the GUDHI library.

As a major new feature, the GUDHI library now offers ...
We are pleased to announce the release 3.10.0 of the GUDHI library.

We are now using GitHub to develop the GUDHI library, do not hesitate to [fork the GUDHI project on GitHub](https://github.com/GUDHI/gudhi-devel). From a user point of view, we recommend to download GUDHI user version (gudhi.3.X.X.tar.gz).

Below is a list of changes made since GUDHI 3.8.0:
Below is a list of changes made since GUDHI 3.9.0:

- [Module](link)
- **...**
- [Rips complex](https://gudhi.inria.fr/python/latest/rips_complex_sklearn_itf_ref.html)
- Rips complex persistence scikit-learn like interface

- [Module](link)
- **...**

- [CubicalPersistence](https://gudhi.inria.fr/python/latest/cubical_complex_sklearn_itf_ref.html)
- Much faster implementation for the 2d case with input from top-dimensional cells.

- Installation
- Boost ≥ 1.71.0 is now required (was ≥ 1.66.0).
- cython >= 3.0.0 is now supported.

- Miscellaneous
- The [list of bugs that were solved since GUDHI-3.8.0](https://github.com/GUDHI/gudhi-devel/issues?q=label%3A3.9.0+is%3Aclosed) is available on GitHub.
- The [list of bugs that were solved since GUDHI-3.9.0](https://github.com/GUDHI/gudhi-devel/issues?q=label%3A3.10.0+is%3Aclosed) is available on GitHub.

All modules are distributed under the terms of the MIT license.
However, there are still GPL dependencies for many modules. We invite you to check our [license dedicated web page](https://gudhi.inria.fr/licensing/) for further details.
Expand All @@ -36,4 +27,4 @@ For further information about downloading and installing the library ([C++](http
## Contributors

- **...**
- **...**
- **...**
30 changes: 15 additions & 15 deletions .github/workflows/pip-build-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,30 @@ jobs:
name: build pip wheel
runs-on: ubuntu-latest
# cf. https://github.com/GUDHI/gudhi-deploy/blob/main/Dockerfile_for_pip
container: gudhi/pip_for_gudhi:latest
container: gudhi/pip_for_gudhi:2023.12.01
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Build wheel for Python 3.6
- name: Build wheel for Python 3.8
run: |
mkdir build_36
cd build_36
cmake -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=$PYTHON36/bin/python ..
mkdir build_38
cd build_38
cmake -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=$PYTHON38/bin/python ..
cd src/python
$PYTHON36/bin/python -m build -n -w
$PYTHON38/bin/python -m build -n -w
auditwheel repair dist/*.whl
- name: Install and test wheel for Python 3.6
- name: Install and test wheel for Python 3.8
run: |
$PYTHON36/bin/python -m pip install --user pytest build_36/src/python/dist/*.whl
$PYTHON36/bin/python -m pip install numpy --upgrade
$PYTHON36/bin/python -c "import gudhi; print(gudhi.__version__)"
$PYTHON36/bin/python -m pytest -v src/python/test/test_alpha_complex.py
$PYTHON36/bin/python -m pytest -v src/python/test/test_bottleneck_distance.py
$PYTHON36/bin/python -m pytest -v src/python/test/test_cubical_complex.py
$PYTHON36/bin/python -m pytest -v src/python/test/test_rips_complex.py
$PYTHON38/bin/python -m pip install --user pytest build_38/src/python/dist/*.whl
$PYTHON38/bin/python -m pip install numpy --upgrade
$PYTHON38/bin/python -c "import gudhi; print(gudhi.__version__)"
$PYTHON38/bin/python -m pytest -v src/python/test/test_alpha_complex.py
$PYTHON38/bin/python -m pytest -v src/python/test/test_bottleneck_distance.py
$PYTHON38/bin/python -m pytest -v src/python/test/test_cubical_complex.py
$PYTHON38/bin/python -m pytest -v src/python/test/test_rips_complex.py
- name: Upload linux python wheel
uses: actions/upload-artifact@v3
with:
name: linux python wheel
path: build_36/src/python/wheelhouse/*.whl
path: build_38/src/python/wheelhouse/*.whl
6 changes: 3 additions & 3 deletions .github/workflows/pip-build-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ jobs:
strategy:
max-parallel: 4
matrix:
python-version: ['3.7']
python-version: ['3.8']
include:
- python-version: '3.7'
numpy-version: '1.15.0'
- python-version: '3.8'
numpy-version: '1.21.4'
name: Build wheels for Python ${{ matrix.python-version }}
steps:
- uses: actions/checkout@v3
Expand Down
64 changes: 23 additions & 41 deletions .github/workflows/pip-packaging-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,45 +9,11 @@ jobs:
name: build pip wheel
runs-on: ubuntu-latest
# cf. https://github.com/GUDHI/gudhi-deploy/blob/main/Dockerfile_for_pip
container: gudhi/pip_for_gudhi:latest
container: gudhi/pip_for_gudhi:2023.12.01
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Build wheel for Python 3.6
run: |
mkdir build_36
cd build_36
cmake -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=$PYTHON36/bin/python ..
cd src/python
$PYTHON36/bin/python -m build -n -w
auditwheel repair dist/*.whl
- name: Install and test wheel for Python 3.6
run: |
$PYTHON36/bin/python -m pip install --user pytest build_36/src/python/dist/*.whl
$PYTHON36/bin/python -m pip install numpy --upgrade
$PYTHON36/bin/python -c "import gudhi; print(gudhi.__version__)"
$PYTHON36/bin/python -m pytest -v src/python/test/test_alpha_complex.py
$PYTHON36/bin/python -m pytest -v src/python/test/test_bottleneck_distance.py
$PYTHON36/bin/python -m pytest -v src/python/test/test_cubical_complex.py
$PYTHON36/bin/python -m pytest -v src/python/test/test_rips_complex.py
- name: Build wheel for Python 3.7
run: |
mkdir build_37
cd build_37
cmake -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=$PYTHON37/bin/python ..
cd src/python
$PYTHON37/bin/python -m build -n -w
auditwheel repair dist/*.whl
- name: Install and test wheel for Python 3.7
run: |
$PYTHON37/bin/python -m pip install --user pytest build_37/src/python/dist/*.whl
$PYTHON37/bin/python -m pip install numpy --upgrade
$PYTHON37/bin/python -c "import gudhi; print(gudhi.__version__)"
$PYTHON37/bin/python -m pytest -v src/python/test/test_alpha_complex.py
$PYTHON37/bin/python -m pytest -v src/python/test/test_bottleneck_distance.py
$PYTHON37/bin/python -m pytest -v src/python/test/test_cubical_complex.py
$PYTHON37/bin/python -m pytest -v src/python/test/test_rips_complex.py
- name: Build wheel for Python 3.8
run: |
mkdir build_38
Expand Down Expand Up @@ -116,14 +82,30 @@ jobs:
$PYTHON311/bin/python -m pytest -v src/python/test/test_bottleneck_distance.py
$PYTHON311/bin/python -m pytest -v src/python/test/test_cubical_complex.py
$PYTHON311/bin/python -m pytest -v src/python/test/test_rips_complex.py
- name: Build wheel for Python 3.12
run: |
mkdir build_312
cd build_312
cmake -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=$PYTHON312/bin/python ..
cd src/python
$PYTHON312/bin/python -m build -n -w
auditwheel repair dist/*.whl
- name: Install and test wheel for Python 3.12
run: |
$PYTHON312/bin/python -m pip install --user pytest build_312/src/python/dist/*.whl
$PYTHON312/bin/python -m pip install numpy --upgrade
$PYTHON312/bin/python -c "import gudhi; print(gudhi.__version__)"
$PYTHON312/bin/python -m pytest -v src/python/test/test_alpha_complex.py
$PYTHON312/bin/python -m pytest -v src/python/test/test_bottleneck_distance.py
$PYTHON312/bin/python -m pytest -v src/python/test/test_cubical_complex.py
$PYTHON312/bin/python -m pytest -v src/python/test/test_rips_complex.py
- name: Publish on PyPi
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
$PYTHON36/bin/python -m twine upload build_36/src/python/wheelhouse/*.whl
$PYTHON36/bin/python -m twine upload build_37/src/python/wheelhouse/*.whl
$PYTHON36/bin/python -m twine upload build_38/src/python/wheelhouse/*.whl
$PYTHON36/bin/python -m twine upload build_39/src/python/wheelhouse/*.whl
$PYTHON36/bin/python -m twine upload build_310/src/python/wheelhouse/*.whl
$PYTHON36/bin/python -m twine upload build_311/src/python/wheelhouse/*.whl
$PYTHON38/bin/python -m twine upload build_38/src/python/wheelhouse/*.whl
$PYTHON38/bin/python -m twine upload build_39/src/python/wheelhouse/*.whl
$PYTHON38/bin/python -m twine upload build_310/src/python/wheelhouse/*.whl
$PYTHON38/bin/python -m twine upload build_311/src/python/wheelhouse/*.whl
$PYTHON38/bin/python -m twine upload build_312/src/python/wheelhouse/*.whl
4 changes: 3 additions & 1 deletion .github/workflows/pip-packaging-osx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
matrix:
# numpy packages for osx x86 and arm are only available from 1.21.2, but stable for both versions from 1.21.4
# and python 3.8+
python-version: ['3.8', '3.9', '3.10', '3.11']
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
include:
# numpy >= 1.21.4 fort osx x86 and arm, but minimal numpy version for python 3.10 is 1.21.6 for instance
# numpy~=1.21.6 means any numpy=1.21.*, but also numpy>=1.21.6 (numpy~=1.21 do not work as it means any numpy==1.*)
Expand All @@ -29,6 +29,8 @@ jobs:
numpy-version: '1.21.6'
- python-version: '3.11'
numpy-version: '1.23.2'
- python-version: '3.12'
numpy-version: '1.26.0'
name: Build wheels for Python ${{ matrix.python-version }}
steps:
- uses: actions/checkout@v3
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/pip-packaging-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,10 @@ jobs:
strategy:
max-parallel: 4
matrix:
python-version: ['3.7', '3.8', '3.9', '3.10', '3.11']
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
# gudhi requires numpy >= 1.15.0, but minimal numpy version for python 3.8 is 1.17.3 for instance
# numpy~=1.17.3 means any numpy=1.17.*, but also numpy>=1.17.3 (numpy~=1.17 do not work as it means any numpy==1.*)
include:
- python-version: '3.7'
numpy-version: '1.15.0'
- python-version: '3.8'
numpy-version: '1.17.3'
- python-version: '3.9'
Expand All @@ -24,6 +22,8 @@ jobs:
numpy-version: '1.21.6'
- python-version: '3.11'
numpy-version: '1.23.2'
- python-version: '3.12'
numpy-version: '1.26.0'
name: Build wheels for Python ${{ matrix.python-version }}
steps:
- uses: actions/checkout@v3
Expand Down
2 changes: 1 addition & 1 deletion CMakeGUDHIVersion.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Must be conform to pep440 - https://www.python.org/dev/peps/pep-0440/#pre-releases
set (GUDHI_MAJOR_VERSION 3)
set (GUDHI_MINOR_VERSION 9)
set (GUDHI_MINOR_VERSION 10)
# 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 0a1)
set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION})
Expand Down
12 changes: 12 additions & 0 deletions biblio/bibliography.bib
Original file line number Diff line number Diff line change
Expand Up @@ -1387,6 +1387,18 @@ @misc{arxivpers1d
year = {2023},
copyright = {arXiv.org perpetual, non-exclusive license}
}

@misc{icml2014,
doi = {10.48550/ARXIV.1406.1901},
url = {https://arxiv.org/abs/1406.1901},
author = {Chazal, Frédéric and Fasy, Brittany Terese and Lecci, Fabrizio and Michel, Bertrand and Rinaldo, Alessandro and Wasserman, Larry},
keywords = {Algebraic Topology (math.AT), Computational Geometry (cs.CG), Applications (stat.AP), FOS: Mathematics, FOS: Mathematics, FOS: Computer and information sciences, FOS: Computer and information sciences},
title = {Subsampling Methods for Persistent Homology},
publisher = {arXiv},
year = {2014},
copyright = {arXiv.org perpetual, non-exclusive license}
}

@InProceedings{chubet_et_al:LIPIcs.SoCG.2023.64,
author = {Chubet, Oliver A. and Macnichol, Paul and Parikh, Parth and Sheehy, Donald R. and Sheth, Siddharth S.},
title = {{Greedy Permutations and Finite Voronoi Diagrams}},
Expand Down
7 changes: 6 additions & 1 deletion src/Alpha_complex/utilities/alpha_complex_3d_persistence.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,12 @@ void program_options(int argc, char *argv[], std::string &off_file_points, bool
std::clog << std::endl;
std::clog << "Compute the persistent homology with coefficient field Z/pZ \n";
std::clog << "of a 3D Alpha complex defined on a set of input points.\n";
std::clog << "3D Alpha complex can be safe (by default) exact or fast, weighted and/or periodic\n\n";
std::clog << "Different versions of 3D Alpha complex computation are available:\n";
std::clog << " * fast: right combinatorics, values can be arbitrarily bad\n";
std::clog << " * safe (default): values can have a relative error at most 1e-5\n";
std::clog << " * exact: true values rounded to double.\n \n";
std::clog << "3D Alpha complex can be, or not, weighted (requires a file containing weights values)\n";
std::clog << "and/or periodic (requires a file describing the periodic domain).\n\n";
std::clog << "The output diagram contains one bar per line, written with the convention: \n";
std::clog << " p dim b d \n";
std::clog << "where dim is the dimension of the homological feature,\n";
Expand Down
5 changes: 5 additions & 0 deletions src/Alpha_complex/utilities/alpha_complex_persistence.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,11 @@ void program_options(int argc, char *argv[], std::string &off_file_points, bool
std::clog << std::endl;
std::clog << "Compute the persistent homology with coefficient field Z/pZ \n";
std::clog << "of an Alpha complex defined on a set of input points.\n \n";
std::clog << "Different versions of Alpha complex computation are available:\n";
std::clog << " * fast: right combinatorics, values can be arbitrarily bad\n";
std::clog << " * safe (default): values can have a relative error at most 1e-5\n";
std::clog << " * exact: true values rounded to double.\n \n";
std::clog << "Alpha complex can be, or not, weighted (requires a file containing weights values).\n\n";
std::clog << "The output diagram contains one bar per line, written with the convention: \n";
std::clog << " p dim b d \n";
std::clog << "where dim is the dimension of the homological feature,\n";
Expand Down
Loading

0 comments on commit 865e396

Please sign in to comment.