From 17ffc79e1db329fa4366666a15b373d200df90b1 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Fri, 29 May 2020 22:23:31 +0200 Subject: Try to build wheels --- Dockerfile_for_pip | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Dockerfile_for_pip diff --git a/Dockerfile_for_pip b/Dockerfile_for_pip new file mode 100644 index 00000000..0f4fa8a0 --- /dev/null +++ b/Dockerfile_for_pip @@ -0,0 +1,46 @@ +FROM quay.io/pypa/manylinux2014_x86_64 + +RUN yum -y update && yum -y install \ + wget \ + zlib-devel \ + eigen3-devel \ + mpfr-devel \ + gmp-devel \ + && yum clean all + +RUN mkdir -p /opt/cmake \ + && wget https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2-Linux-x86_64.sh \ + && sh cmake-3.16.2-Linux-x86_64.sh --skip-license --prefix=/opt/cmake \ + && rm -f cmake-3.16.2-Linux-x86_64.sh + +RUN wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gz \ + && tar xf boost_1_64_0.tar.gz \ + && cd boost_1_64_0 \ + && ./bootstrap.sh --with-libraries=filesystem,program_options,system,thread,test \ + && ./b2 install \ + && cd .. \ + && rm -rf boost_1_64_0 + +RUN wget https://github.com/CGAL/cgal/releases/download/releases%2FCGAL-5.0.2/CGAL-5.0.2.tar.xz \ + && tar xf CGAL-5.0.2.tar.xz \ + && mkdir build \ + && cd build \ + && /opt/cmake/bin/cmake -DCMAKE_BUILD_TYPE=Release ../CGAL-5.0.2/ \ + && make install \ + && cd .. \ + && rm -rf build CGAL-5.0.2 + +ADD .github/build-requirements.txt / + +RUN /opt/python/cp35-cp35m/bin/pip install -r build-requirements.txt \ + && /opt/python/cp36-cp36m/bin/pip install -r build-requirements.txt\ + && /opt/python/cp37-cp37m/bin/pip install -r build-requirements.txt\ + && /opt/python/cp38-cp38/bin/pip install -r build-requirements.txt\ + && /opt/python/cp38-cp38/bin/pip install twine + +ENV PYTHON35="/opt/python/cp35-cp35m/" +ENV PYTHON36="/opt/python/cp36-cp36m/" +ENV PYTHON37="/opt/python/cp37-cp37m/" +ENV PYTHON38="/opt/python/cp38-cp38/" + +ENV PATH="/opt/cmake/bin:${PATH}" -- cgit v1.2.3 From 5140e8571d15fb0026dd63a67a75d0ef770a1751 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sat, 30 May 2020 07:45:15 +0200 Subject: Add github actions --- .github/workflows/pip-packaging-linux.yml | 59 +++++++++++++++++++++++++++++ .github/workflows/pip-packaging-osx.yml | 43 +++++++++++++++++++++ .github/workflows/pip-packaging-windows.yml | 43 +++++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 .github/workflows/pip-packaging-linux.yml create mode 100644 .github/workflows/pip-packaging-osx.yml create mode 100644 .github/workflows/pip-packaging-windows.yml diff --git a/.github/workflows/pip-packaging-linux.yml b/.github/workflows/pip-packaging-linux.yml new file mode 100644 index 00000000..6ca28588 --- /dev/null +++ b/.github/workflows/pip-packaging-linux.yml @@ -0,0 +1,59 @@ +name: pip packaging linux + +on: + push: {} + pull_request: {} +# on: +# release: +# types: [published] + +jobs: + build: + name: build pip wheels + runs-on: ubuntu-latest + container: gudhi/pip_for_gudhi + steps: + - uses: actions/checkout@v1 + with: + submodules: true + - name: Build wheels for Python 3.5 + run: | + mkdir build_35 + cd build_35 + cmake -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=$PYTHON35/bin/python .. + cd src/python + $PYTHON35/bin/python setup.py bdist_wheel + auditwheel repair dist/*.whl + - name: Build wheels 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 setup.py bdist_wheel + auditwheel repair dist/*.whl + - name: Build wheels 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 setup.py bdist_wheel + auditwheel repair dist/*.whl + - name: Build wheels for Python 3.8 + run: | + mkdir build_38 + cd build_38 + cmake -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=$PYTHON38/bin/python .. + cd src/python + $PYTHON38/bin/python setup.py bdist_wheel + auditwheel repair dist/*.whl + - name: Publish on PyPi + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + run: | + $PYTHON38/bin/twine upload build_35/src/python/wheelhouse/* + $PYTHON38/bin/twine upload build_36/src/python/wheelhouse/* + $PYTHON38/bin/twine upload build_37/src/python/wheelhouse/* + $PYTHON38/bin/twine upload build_38/src/python/wheelhouse/* \ No newline at end of file diff --git a/.github/workflows/pip-packaging-osx.yml b/.github/workflows/pip-packaging-osx.yml new file mode 100644 index 00000000..a571f8e0 --- /dev/null +++ b/.github/workflows/pip-packaging-osx.yml @@ -0,0 +1,43 @@ +name: pip packaging osx + +on: + push: {} + pull_request: {} +# on: +# release: +# types: [published] + +jobs: + build: + runs-on: macos-latest + strategy: + max-parallel: 4 + matrix: + python-version: ['3.5', '3.6', '3.7', '3.8'] + name: Build wheels for Python ${{ matrix.python-version }} + steps: + - uses: actions/checkout@v1 + with: + submodules: true + - uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + architecture: x64 + - name: Install dependencies + run: | + brew update && brew install boost eigen gmp mpfr cgal + python -m pip install --user -r .github/build-requirements.txt + python -m pip install --user twine + - name: Build python wheel + run: | + python --version + mkdir build + cd build + cmake -DCMAKE_BUILD_TYPE=Release -DPython_ADDITIONAL_VERSIONS=3 .. + cd src/python + python setup.py bdist_wheel + - name: Publish on PyPi + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + run: twine upload dist/* \ No newline at end of file diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml new file mode 100644 index 00000000..18c6aa94 --- /dev/null +++ b/.github/workflows/pip-packaging-windows.yml @@ -0,0 +1,43 @@ +name: pip packaging osx + +on: + push: {} + pull_request: {} +# on: +# release: +# types: [published] + +jobs: + build: + runs-on: windows-latest + strategy: + max-parallel: 4 + matrix: + python-version: ['3.5', '3.6', '3.7', '3.8'] + name: Build wheels for Python ${{ matrix.python-version }} + steps: + - uses: actions/checkout@v1 + with: + submodules: true + - uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + architecture: x64 + - name: Install dependencies + run: | + vcpkg install tbb:x64-windows boost-disjoint-sets:x64-windows boost-serialization:x64-windows boost-date-time:x64-windows boost-system:x64-windows boost-filesystem:x64-windows boost-units:x64-windows boost-thread:x64-windows boost-program-options:x64-windows eigen3:x64-windows mpfr:x64-windows mpir:x64-windows cgal:x64-windows + python -m pip install --user -r .github/build-requirements.txt + python -m pip install --user twine + - name: Build python wheel + run: | + python --version + mkdir build + cd build + cmake -DCMAKE_BUILD_TYPE=Release -DPython_ADDITIONAL_VERSIONS=3 .. + cd src/python + python setup.py bdist_wheel + - name: Publish on PyPi + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + run: twine upload dist/* \ No newline at end of file -- cgit v1.2.3 From 22132d53dd343f0d5f6515cfc2c692b3c3a9a93d Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sat, 30 May 2020 08:01:19 +0200 Subject: name typo --- .github/workflows/pip-packaging-windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index 18c6aa94..ccd1e647 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -1,4 +1,4 @@ -name: pip packaging osx +name: pip packaging windows on: push: {} -- cgit v1.2.3 From 93cd84c7421340ce66f80509856fb43e7cb72803 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sat, 30 May 2020 08:09:44 +0200 Subject: help cmake to find vcpkg installations --- .github/workflows/pip-packaging-windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index ccd1e647..a718c8f9 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -33,7 +33,7 @@ jobs: python --version mkdir build cd build - cmake -DCMAKE_BUILD_TYPE=Release -DPython_ADDITIONAL_VERSIONS=3 .. + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DPython_ADDITIONAL_VERSIONS=3 .. cd src/python python setup.py bdist_wheel - name: Publish on PyPi -- cgit v1.2.3 From 769bd322ace39ea712d0a21cd02f3598fd8ac149 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sat, 30 May 2020 08:28:46 +0200 Subject: use python -m twine as recommended --- .github/workflows/pip-packaging-linux.yml | 8 ++++---- .github/workflows/pip-packaging-osx.yml | 2 +- .github/workflows/pip-packaging-windows.yml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pip-packaging-linux.yml b/.github/workflows/pip-packaging-linux.yml index 6ca28588..7f5a8df6 100644 --- a/.github/workflows/pip-packaging-linux.yml +++ b/.github/workflows/pip-packaging-linux.yml @@ -53,7 +53,7 @@ jobs: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | - $PYTHON38/bin/twine upload build_35/src/python/wheelhouse/* - $PYTHON38/bin/twine upload build_36/src/python/wheelhouse/* - $PYTHON38/bin/twine upload build_37/src/python/wheelhouse/* - $PYTHON38/bin/twine upload build_38/src/python/wheelhouse/* \ No newline at end of file + $PYTHON38/bin/python -m twine upload build_35/src/python/wheelhouse/* + $PYTHON38/bin/python -m twine upload build_36/src/python/wheelhouse/* + $PYTHON38/bin/python -m twine upload build_37/src/python/wheelhouse/* + $PYTHON38/bin/python -m twine upload build_38/src/python/wheelhouse/* \ No newline at end of file diff --git a/.github/workflows/pip-packaging-osx.yml b/.github/workflows/pip-packaging-osx.yml index a571f8e0..97a3c7ea 100644 --- a/.github/workflows/pip-packaging-osx.yml +++ b/.github/workflows/pip-packaging-osx.yml @@ -40,4 +40,4 @@ jobs: env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: twine upload dist/* \ No newline at end of file + run: python -m twine upload dist/* \ No newline at end of file diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index a718c8f9..5c890b68 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -40,4 +40,4 @@ jobs: env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: twine upload dist/* \ No newline at end of file + run: python -m twine upload dist/* \ No newline at end of file -- cgit v1.2.3 From 9813f905ac8dbc814d3ff4f078df4125779b467f Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sun, 31 May 2020 08:22:02 +0200 Subject: Upload on testpypi --- .github/workflows/pip-packaging-linux.yml | 8 ++++---- .github/workflows/pip-packaging-osx.yml | 2 +- .github/workflows/pip-packaging-windows.yml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pip-packaging-linux.yml b/.github/workflows/pip-packaging-linux.yml index 7f5a8df6..485ef643 100644 --- a/.github/workflows/pip-packaging-linux.yml +++ b/.github/workflows/pip-packaging-linux.yml @@ -53,7 +53,7 @@ jobs: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | - $PYTHON38/bin/python -m twine upload build_35/src/python/wheelhouse/* - $PYTHON38/bin/python -m twine upload build_36/src/python/wheelhouse/* - $PYTHON38/bin/python -m twine upload build_37/src/python/wheelhouse/* - $PYTHON38/bin/python -m twine upload build_38/src/python/wheelhouse/* \ No newline at end of file + $PYTHON38/bin/python -m twine upload --repository-url https://test.pypi.org/legacy/ build_35/src/python/wheelhouse/* + $PYTHON38/bin/python -m twine upload --repository-url https://test.pypi.org/legacy/ build_36/src/python/wheelhouse/* + $PYTHON38/bin/python -m twine upload --repository-url https://test.pypi.org/legacy/ build_37/src/python/wheelhouse/* + $PYTHON38/bin/python -m twine upload --repository-url https://test.pypi.org/legacy/ build_38/src/python/wheelhouse/* \ No newline at end of file diff --git a/.github/workflows/pip-packaging-osx.yml b/.github/workflows/pip-packaging-osx.yml index 97a3c7ea..c5b99ab6 100644 --- a/.github/workflows/pip-packaging-osx.yml +++ b/.github/workflows/pip-packaging-osx.yml @@ -40,4 +40,4 @@ jobs: env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: python -m twine upload dist/* \ No newline at end of file + run: python -m twine upload --repository-url https://test.pypi.org/legacy/ dist/* \ No newline at end of file diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index 5c890b68..3a70a142 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -40,4 +40,4 @@ jobs: env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: python -m twine upload dist/* \ No newline at end of file + run: python -m twine upload --repository-url https://test.pypi.org/legacy/ dist/* \ No newline at end of file -- cgit v1.2.3 From 884b53725f76c85196e783d7853ea9cc6d207378 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sun, 31 May 2020 08:38:51 +0200 Subject: Debug traces on osx --- .github/workflows/pip-packaging-osx.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pip-packaging-osx.yml b/.github/workflows/pip-packaging-osx.yml index c5b99ab6..28dd1d53 100644 --- a/.github/workflows/pip-packaging-osx.yml +++ b/.github/workflows/pip-packaging-osx.yml @@ -36,8 +36,11 @@ jobs: cmake -DCMAKE_BUILD_TYPE=Release -DPython_ADDITIONAL_VERSIONS=3 .. cd src/python python setup.py bdist_wheel + pwd - name: Publish on PyPi env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: python -m twine upload --repository-url https://test.pypi.org/legacy/ dist/* \ No newline at end of file + run: | + pwd + python -m twine upload --repository-url https://test.pypi.org/legacy/ build/src/python/dist/* \ No newline at end of file -- cgit v1.2.3 From c4c2e870662528467ef130b3e6a9f76682a86fd1 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sun, 31 May 2020 08:50:33 +0200 Subject: no disjoint sets found --- .github/workflows/pip-packaging-windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index 3a70a142..33ba0de9 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -25,7 +25,7 @@ jobs: architecture: x64 - name: Install dependencies run: | - vcpkg install tbb:x64-windows boost-disjoint-sets:x64-windows boost-serialization:x64-windows boost-date-time:x64-windows boost-system:x64-windows boost-filesystem:x64-windows boost-units:x64-windows boost-thread:x64-windows boost-program-options:x64-windows eigen3:x64-windows mpfr:x64-windows mpir:x64-windows cgal:x64-windows + vcpkg install tbb:x64-windows boost-serialization:x64-windows boost-date-time:x64-windows boost-system:x64-windows boost-filesystem:x64-windows boost-units:x64-windows boost-thread:x64-windows boost-program-options:x64-windows eigen3:x64-windows mpfr:x64-windows mpir:x64-windows cgal:x64-windows python -m pip install --user -r .github/build-requirements.txt python -m pip install --user twine - name: Build python wheel -- cgit v1.2.3 From 974a045acfdae6a9980d9473f9dc3ece716aa0e1 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sun, 31 May 2020 09:23:14 +0200 Subject: Add some fields for PyPi nice render --- .github/workflows/pip-packaging-osx.yml | 2 -- .github/workflows/pip-packaging-windows.yml | 4 ++-- src/python/setup.py.in | 12 +++++++++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pip-packaging-osx.yml b/.github/workflows/pip-packaging-osx.yml index 28dd1d53..f30b89d8 100644 --- a/.github/workflows/pip-packaging-osx.yml +++ b/.github/workflows/pip-packaging-osx.yml @@ -36,11 +36,9 @@ jobs: cmake -DCMAKE_BUILD_TYPE=Release -DPython_ADDITIONAL_VERSIONS=3 .. cd src/python python setup.py bdist_wheel - pwd - name: Publish on PyPi env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | - pwd python -m twine upload --repository-url https://test.pypi.org/legacy/ build/src/python/dist/* \ No newline at end of file diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index 33ba0de9..687d62a9 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -25,7 +25,7 @@ jobs: architecture: x64 - name: Install dependencies run: | - vcpkg install tbb:x64-windows boost-serialization:x64-windows boost-date-time:x64-windows boost-system:x64-windows boost-filesystem:x64-windows boost-units:x64-windows boost-thread:x64-windows boost-program-options:x64-windows eigen3:x64-windows mpfr:x64-windows mpir:x64-windows cgal:x64-windows + vcpkg install tbb:x64-windows boost-graph:x64-windows boost-serialization:x64-windows boost-date-time:x64-windows boost-system:x64-windows boost-filesystem:x64-windows boost-units:x64-windows boost-thread:x64-windows boost-program-options:x64-windows eigen3:x64-windows mpfr:x64-windows mpir:x64-windows cgal:x64-windows python -m pip install --user -r .github/build-requirements.txt python -m pip install --user twine - name: Build python wheel @@ -40,4 +40,4 @@ jobs: env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: python -m twine upload --repository-url https://test.pypi.org/legacy/ dist/* \ No newline at end of file + run: python -m twine upload --repository-url https://test.pypi.org/legacy/ build/src/python/dist/* \ No newline at end of file diff --git a/src/python/setup.py.in b/src/python/setup.py.in index b9f4e3f0..55d2b604 100644 --- a/src/python/setup.py.in +++ b/src/python/setup.py.in @@ -68,7 +68,17 @@ setup( author='GUDHI Editorial Board', author_email='gudhi-contact@lists.gforge.inria.fr', version='@GUDHI_VERSION@', - url='http://gudhi.gforge.inria.fr/', + url='https://gudhi.inria.fr/', + project_urls={ + 'Bug Tracker': 'https://github.com/GUDHI/gudhi-devel/issues', + 'Documentation': 'https://gudhi.inria.fr/python/latest/', + 'Source Code': 'https://github.com/GUDHI/gudhi-devel', + 'License': 'https://gudhi.inria.fr/licensing/' + }, + description='The Gudhi library is an open source library for Computational Topology and Topological Data ' \ + 'Analysis (TDA). It offers state-of-the-art algorithms to construct various types of simplicial complexes, ' \ + 'data structures to represent them, and algorithms to compute geometric approximations of shapes and ' \ + 'persistent homology.', ext_modules = ext_modules, install_requires = ['cython','numpy >= 1.9',], setup_requires = ['numpy >= 1.9','pybind11',], -- cgit v1.2.3 From 7bc7712b14501c212e5b162d7317f118c6586546 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sun, 31 May 2020 09:28:54 +0200 Subject: Try to find gmp --- .github/workflows/pip-packaging-windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index 687d62a9..53abc036 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -33,7 +33,7 @@ jobs: python --version mkdir build cd build - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DPython_ADDITIONAL_VERSIONS=3 .. + cmake -DCMAKE_BUILD_TYPE=Release -DGMP_INCLUDE_DIR="c:/vcpkg/installed/x64-windows/include" -DGMP_LIBRARIES="c:/vcpkg/installed/x64-windows/lib/mpir.lib" -DGMP_LIBRARIES_DIR="c:/vcpkg/installed/x64-windows/lib" -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DPython_ADDITIONAL_VERSIONS=3 .. cd src/python python setup.py bdist_wheel - name: Publish on PyPi -- cgit v1.2.3 From cfee936a422733f995fd1f7ae2ea7baa0cc07deb Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sun, 31 May 2020 09:54:19 +0200 Subject: Re-build all from scratch --- .github/workflows/pip-packaging-linux.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pip-packaging-linux.yml b/.github/workflows/pip-packaging-linux.yml index 485ef643..6b099243 100644 --- a/.github/workflows/pip-packaging-linux.yml +++ b/.github/workflows/pip-packaging-linux.yml @@ -3,6 +3,7 @@ name: pip packaging linux on: push: {} pull_request: {} + # on: # release: # types: [published] -- cgit v1.2.3 From be25848cb28a4f7bde1d21afef1bbb6fe0ba4a5b Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sun, 31 May 2020 10:04:58 +0200 Subject: Cannot use a version already used... Even on testpypi... --- CMakeGUDHIVersion.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index ac89fa4d..59226274 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0) +set (GUDHI_PATCH_VERSION 0a0) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") -- cgit v1.2.3 From 433a8cdaa111ebb777450fc1ee2e316480e4b46a Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sun, 31 May 2020 10:36:47 +0200 Subject: Add introduction to pypi description and new release version --- CMakeGUDHIVersion.txt | 2 +- src/python/CMakeLists.txt | 3 +++ src/python/setup.py.in | 14 ++++++++++---- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index 59226274..3d8be42d 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a0) +set (GUDHI_PATCH_VERSION 0a1) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index ab08cd6d..d4cb7477 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -235,6 +235,9 @@ if(PYTHONINTERP_FOUND) file(COPY "gudhi/point_cloud" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gudhi") file(COPY "gudhi/weighted_rips_complex.py" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gudhi") + # Other .py files + file(COPY "introduction.md" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/") + add_custom_command( OUTPUT gudhi.so WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} diff --git a/src/python/setup.py.in b/src/python/setup.py.in index 55d2b604..ff000a2c 100644 --- a/src/python/setup.py.in +++ b/src/python/setup.py.in @@ -13,6 +13,7 @@ from Cython.Build import cythonize from numpy import get_include as numpy_get_include import sys import pybind11 +from os import path __author__ = "Vincent Rouvreau" __copyright__ = "Copyright (C) 2016 Inria" @@ -62,6 +63,11 @@ for module in pybind11_modules: runtime_library_dirs=runtime_library_dirs, )) +# read the contents of introduction.md +this_directory = path.abspath(path.dirname(__file__)) +with open(path.join(this_directory, 'introduction.md'), encoding='utf-8') as f: + long_description = f.read() + setup( name = 'gudhi', packages=find_packages(), # find_namespace_packages(include=["gudhi*"]) @@ -75,10 +81,10 @@ setup( 'Source Code': 'https://github.com/GUDHI/gudhi-devel', 'License': 'https://gudhi.inria.fr/licensing/' }, - description='The Gudhi library is an open source library for Computational Topology and Topological Data ' \ - 'Analysis (TDA). It offers state-of-the-art algorithms to construct various types of simplicial complexes, ' \ - 'data structures to represent them, and algorithms to compute geometric approximations of shapes and ' \ - 'persistent homology.', + description='The Gudhi library is an open source library for ' \ + 'Computational Topology and Topological Data Analysis (TDA).', + long_description=long_description, + long_description_content_type='text/markdown', ext_modules = ext_modules, install_requires = ['cython','numpy >= 1.9',], setup_requires = ['numpy >= 1.9','pybind11',], -- cgit v1.2.3 From 3b91ae863718c402a991c5807579f578d266a04b Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sun, 31 May 2020 10:43:07 +0200 Subject: add md file --- src/python/introduction.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/python/introduction.md diff --git a/src/python/introduction.md b/src/python/introduction.md new file mode 100644 index 00000000..3277e0ac --- /dev/null +++ b/src/python/introduction.md @@ -0,0 +1,30 @@ +![](https://gudhi.inria.fr/images/gudhi_architecture.png) + +#Introduction + +The Gudhi library is an open source library for Computational Topology and +Topological Data Analysis (TDA). It offers state-of-the-art algorithms +to construct various types of simplicial complexes, data structures to +represent them, and algorithms to compute geometric approximations of shapes +and persistent homology. + +The GUDHI library offers the following interoperable modules: +* Complexes: + * Cubical + * Simplicial: Rips, Witness, Alpha and Čech complexes + * Cover: Nerve and Graph induced complexes +* Data structures and basic operations: + * Simplex tree, Skeleton blockers and Toplex map + * Construction, update, filtration and simplification +* Topological descriptors computation +* Manifold reconstruction +* Topological descriptors tools: + * Bottleneck distance + * Statistical tools + * Persistence diagram and barcode + +For more information about Topological Data Analysis and its workflow, please +refer to the [Wikipedia TDA dedicated page][1]. + + [1]: https://en.wikipedia.org/wiki/Topological_data_analysis + -- cgit v1.2.3 From 5141caeff03f1e8c8c4ccae1ee7ca43fbcb2925f Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sun, 31 May 2020 11:01:24 +0200 Subject: It was not markdown but rst... --- src/python/CMakeLists.txt | 2 +- src/python/introduction.md | 30 ------------------------------ src/python/introduction.rst | 33 +++++++++++++++++++++++++++++++++ src/python/setup.py.in | 2 +- 4 files changed, 35 insertions(+), 32 deletions(-) delete mode 100644 src/python/introduction.md create mode 100644 src/python/introduction.rst diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index d4cb7477..fee6b6f5 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -236,7 +236,7 @@ if(PYTHONINTERP_FOUND) file(COPY "gudhi/weighted_rips_complex.py" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gudhi") # Other .py files - file(COPY "introduction.md" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/") + file(COPY "introduction.rst" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/") add_custom_command( OUTPUT gudhi.so diff --git a/src/python/introduction.md b/src/python/introduction.md deleted file mode 100644 index 3277e0ac..00000000 --- a/src/python/introduction.md +++ /dev/null @@ -1,30 +0,0 @@ -![](https://gudhi.inria.fr/images/gudhi_architecture.png) - -#Introduction - -The Gudhi library is an open source library for Computational Topology and -Topological Data Analysis (TDA). It offers state-of-the-art algorithms -to construct various types of simplicial complexes, data structures to -represent them, and algorithms to compute geometric approximations of shapes -and persistent homology. - -The GUDHI library offers the following interoperable modules: -* Complexes: - * Cubical - * Simplicial: Rips, Witness, Alpha and Čech complexes - * Cover: Nerve and Graph induced complexes -* Data structures and basic operations: - * Simplex tree, Skeleton blockers and Toplex map - * Construction, update, filtration and simplification -* Topological descriptors computation -* Manifold reconstruction -* Topological descriptors tools: - * Bottleneck distance - * Statistical tools - * Persistence diagram and barcode - -For more information about Topological Data Analysis and its workflow, please -refer to the [Wikipedia TDA dedicated page][1]. - - [1]: https://en.wikipedia.org/wiki/Topological_data_analysis - diff --git a/src/python/introduction.rst b/src/python/introduction.rst new file mode 100644 index 00000000..2cc4642e --- /dev/null +++ b/src/python/introduction.rst @@ -0,0 +1,33 @@ +.. figure:: + https://gudhi.inria.fr/images/gudhi_architecture.png + :figclass: align-center + :width: 100 % + :alt: GUDHI + +Introduction +============ + +The Gudhi library is an open source library for Computational Topology and +Topological Data Analysis (TDA). It offers state-of-the-art algorithms +to construct various types of simplicial complexes, data structures to +represent them, and algorithms to compute geometric approximations of shapes +and persistent homology. + +The GUDHI library offers the following interoperable modules: + +* Complexes: + * Cubical + * Simplicial: Rips, Witness, Alpha and Čech complexes + * Cover: Nerve and Graph induced complexes +* Data structures and basic operations: + * Simplex tree, Skeleton blockers and Toplex map + * Construction, update, filtration and simplification +* Topological descriptors computation +* Manifold reconstruction +* Topological descriptors tools: + * Bottleneck distance + * Statistical tools + * Persistence diagram and barcode + +For more information about Topological Data Analysis and its workflow, please +refer to the `Wikipedia TDA dedicated page `_. diff --git a/src/python/setup.py.in b/src/python/setup.py.in index ff000a2c..4725bb44 100644 --- a/src/python/setup.py.in +++ b/src/python/setup.py.in @@ -65,7 +65,7 @@ for module in pybind11_modules: # read the contents of introduction.md this_directory = path.abspath(path.dirname(__file__)) -with open(path.join(this_directory, 'introduction.md'), encoding='utf-8') as f: +with open(path.join(this_directory, 'introduction.rst'), encoding='utf-8') as f: long_description = f.read() setup( -- cgit v1.2.3 From b5dd88baaad901a66e047caef9a4ea72af00b6e6 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sun, 31 May 2020 11:13:43 +0200 Subject: release increment --- CMakeGUDHIVersion.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index 3d8be42d..3ebdf68c 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a1) +set (GUDHI_PATCH_VERSION 0a2) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") -- cgit v1.2.3 From 524c5f3e8c48c25ad96d2e43634e73c18d8805c5 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Mon, 1 Jun 2020 08:26:48 +0200 Subject: try to fix pypi doc --- CMakeGUDHIVersion.txt | 2 +- src/python/introduction.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index 3ebdf68c..d344f04f 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a2) +set (GUDHI_PATCH_VERSION 0a3) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") diff --git a/src/python/introduction.rst b/src/python/introduction.rst index 2cc4642e..adfed36e 100644 --- a/src/python/introduction.rst +++ b/src/python/introduction.rst @@ -1,4 +1,4 @@ -.. figure:: +.. image:: https://gudhi.inria.fr/images/gudhi_architecture.png :figclass: align-center :width: 100 % -- cgit v1.2.3 From 999ca34a509f6f6222a343306b725ce0bbbce795 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Mon, 1 Jun 2020 10:12:45 +0200 Subject: Try to fix rst doc for Pypi --- CMakeGUDHIVersion.txt | 2 +- src/python/introduction.rst | 1 - src/python/setup.py.in | 4 ++-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index d344f04f..75aedb74 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a3) +set (GUDHI_PATCH_VERSION 0a4) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") diff --git a/src/python/introduction.rst b/src/python/introduction.rst index adfed36e..3e9faae9 100644 --- a/src/python/introduction.rst +++ b/src/python/introduction.rst @@ -1,6 +1,5 @@ .. image:: https://gudhi.inria.fr/images/gudhi_architecture.png - :figclass: align-center :width: 100 % :alt: GUDHI diff --git a/src/python/setup.py.in b/src/python/setup.py.in index 4725bb44..f8eeafc4 100644 --- a/src/python/setup.py.in +++ b/src/python/setup.py.in @@ -63,7 +63,7 @@ for module in pybind11_modules: runtime_library_dirs=runtime_library_dirs, )) -# read the contents of introduction.md +# read the contents of introduction.rst this_directory = path.abspath(path.dirname(__file__)) with open(path.join(this_directory, 'introduction.rst'), encoding='utf-8') as f: long_description = f.read() @@ -83,8 +83,8 @@ setup( }, description='The Gudhi library is an open source library for ' \ 'Computational Topology and Topological Data Analysis (TDA).', + long_description_content_type='text/x-rst', long_description=long_description, - long_description_content_type='text/markdown', ext_modules = ext_modules, install_requires = ['cython','numpy >= 1.9',], setup_requires = ['numpy >= 1.9','pybind11',], -- cgit v1.2.3 From 6d113d120d7e07df4909a7de1ae014cfb3571f38 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Mon, 1 Jun 2020 10:30:02 +0200 Subject: Try to fix rst doc for Pypi --- CMakeGUDHIVersion.txt | 2 +- src/python/introduction.rst | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index 75aedb74..b790b828 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a4) +set (GUDHI_PATCH_VERSION 0a5) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") diff --git a/src/python/introduction.rst b/src/python/introduction.rst index 3e9faae9..90d9a381 100644 --- a/src/python/introduction.rst +++ b/src/python/introduction.rst @@ -1,7 +1,4 @@ -.. image:: - https://gudhi.inria.fr/images/gudhi_architecture.png - :width: 100 % - :alt: GUDHI +.. image:: https://gudhi.inria.fr/images/gudhi_architecture.png Introduction ============ -- cgit v1.2.3 From 7ff9d4ceeb659cac3af10a9f9d80c7267c47363a Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Mon, 1 Jun 2020 14:46:40 +0200 Subject: Let's go like this --- CMakeGUDHIVersion.txt | 2 +- src/python/introduction.rst | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index b790b828..ffcbc53e 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a5) +set (GUDHI_PATCH_VERSION 0a6) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") diff --git a/src/python/introduction.rst b/src/python/introduction.rst index 90d9a381..11c06ac5 100644 --- a/src/python/introduction.rst +++ b/src/python/introduction.rst @@ -1,8 +1,3 @@ -.. image:: https://gudhi.inria.fr/images/gudhi_architecture.png - -Introduction -============ - The Gudhi library is an open source library for Computational Topology and Topological Data Analysis (TDA). It offers state-of-the-art algorithms to construct various types of simplicial complexes, data structures to -- cgit v1.2.3 From 4aff8dc700a0790373d82ae24076359c09ee04c8 Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Mon, 1 Jun 2020 15:24:28 +0200 Subject: Interface for hera's bottleneck_distance --- ext/hera | 2 +- .../modules/GUDHI_third_party_libraries.cmake | 1 + src/cmake/modules/GUDHI_user_version_target.cmake | 2 +- src/python/CMakeLists.txt | 8 +++- src/python/doc/bottleneck_distance_user.rst | 18 +++++-- src/python/gudhi/hera.cc | 56 ---------------------- src/python/gudhi/hera/__init__.py | 2 + src/python/gudhi/hera/bottleneck.cc | 45 +++++++++++++++++ src/python/gudhi/hera/wasserstein.cc | 56 ++++++++++++++++++++++ src/python/setup.py.in | 6 ++- src/python/test/test_bottleneck_distance.py | 6 ++- 11 files changed, 134 insertions(+), 68 deletions(-) delete mode 100644 src/python/gudhi/hera.cc create mode 100644 src/python/gudhi/hera/__init__.py create mode 100644 src/python/gudhi/hera/bottleneck.cc create mode 100644 src/python/gudhi/hera/wasserstein.cc diff --git a/ext/hera b/ext/hera index 0019cae9..2c5e6c60 160000 --- a/ext/hera +++ b/ext/hera @@ -1 +1 @@ -Subproject commit 0019cae9dc1e9d11aa03bc59681435ba7f21eea8 +Subproject commit 2c5e6c606ee37cd68bbe9f9915dba99f7677dd87 diff --git a/src/cmake/modules/GUDHI_third_party_libraries.cmake b/src/cmake/modules/GUDHI_third_party_libraries.cmake index f92fe93e..d80283d2 100644 --- a/src/cmake/modules/GUDHI_third_party_libraries.cmake +++ b/src/cmake/modules/GUDHI_third_party_libraries.cmake @@ -69,6 +69,7 @@ endif() # For those who dislike bundled dependencies, this indicates where to find a preinstalled Hera. set(HERA_WASSERSTEIN_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/ext/hera/wasserstein/include CACHE PATH "Directory where one can find Hera's wasserstein.h") +set(HERA_BOTTLENECK_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/ext/hera/bottleneck/include CACHE PATH "Directory where one can find Hera's bottleneck.h") option(WITH_GUDHI_USE_TBB "Build with Intel TBB parallelization" ON) diff --git a/src/cmake/modules/GUDHI_user_version_target.cmake b/src/cmake/modules/GUDHI_user_version_target.cmake index e99bb42d..491fa459 100644 --- a/src/cmake/modules/GUDHI_user_version_target.cmake +++ b/src/cmake/modules/GUDHI_user_version_target.cmake @@ -68,7 +68,7 @@ add_custom_command(TARGET user_version PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/src/GudhUI ${GUDHI_USER_VERSION_DIR}/GudhUI) add_custom_command(TARGET user_version PRE_BUILD COMMAND ${CMAKE_COMMAND} -E - copy_directory ${CMAKE_SOURCE_DIR}/ext/hera/wasserstein/include ${GUDHI_USER_VERSION_DIR}/ext/hera/wasserstein/include) + copy_directory ${CMAKE_SOURCE_DIR}/ext/hera ${GUDHI_USER_VERSION_DIR}/ext/hera) set(GUDHI_DIRECTORIES "doc;example;concept;utilities") diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index 96dd3f6f..1e81cac8 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -130,7 +130,8 @@ if(PYTHONINTERP_FOUND) set(GUDHI_CYTHON_MODULES "${GUDHI_CYTHON_MODULES}'reader_utils', ") set(GUDHI_CYTHON_MODULES "${GUDHI_CYTHON_MODULES}'witness_complex', ") set(GUDHI_CYTHON_MODULES "${GUDHI_CYTHON_MODULES}'strong_witness_complex', ") - set(GUDHI_PYBIND11_MODULES "${GUDHI_PYBIND11_MODULES}'hera', ") + set(GUDHI_PYBIND11_MODULES "${GUDHI_PYBIND11_MODULES}'hera/wasserstein', ") + set(GUDHI_PYBIND11_MODULES "${GUDHI_PYBIND11_MODULES}'hera/bottleneck', ") if (NOT CGAL_VERSION VERSION_LESS 4.11.0) set(GUDHI_PYBIND11_MODULES "${GUDHI_PYBIND11_MODULES}'bottleneck', ") set(GUDHI_CYTHON_MODULES "${GUDHI_CYTHON_MODULES}'nerve_gic', ") @@ -236,6 +237,7 @@ if(PYTHONINTERP_FOUND) file(COPY "gudhi/point_cloud" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gudhi") file(COPY "gudhi/weighted_rips_complex.py" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gudhi") file(COPY "gudhi/dtm_rips_complex.py" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gudhi") + file(COPY "gudhi/hera/__init__.py" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gudhi/hera") add_custom_command( OUTPUT gudhi.so @@ -355,7 +357,9 @@ if(PYTHONINTERP_FOUND) COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}" ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/example/bottleneck_basic_example.py") - add_gudhi_py_test(test_bottleneck_distance) + if (PYBIND11_FOUND) + add_gudhi_py_test(test_bottleneck_distance) + endif() # Cover complex file(COPY ${CMAKE_SOURCE_DIR}/data/points/human.off DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) diff --git a/src/python/doc/bottleneck_distance_user.rst b/src/python/doc/bottleneck_distance_user.rst index 89da89d3..49bd3706 100644 --- a/src/python/doc/bottleneck_distance_user.rst +++ b/src/python/doc/bottleneck_distance_user.rst @@ -9,14 +9,22 @@ Definition .. include:: bottleneck_distance_sum.inc -This implementation is based on ideas from "Geometry Helps in Bottleneck Matching and Related Problems" -:cite:`DBLP:journals/algorithmica/EfratIK01`. Another relevant publication, although it was not used is -"Geometry Helps to Compare Persistence Diagrams" :cite:`Kerber:2017:GHC:3047249.3064175`. +This implementation by François Godi is based on ideas from "Geometry Helps in Bottleneck Matching and Related Problems" +:cite:`DBLP:journals/algorithmica/EfratIK01` and requires `CGAL `_. -Function --------- .. autofunction:: gudhi.bottleneck_distance +This other implementation comes from `Hera +`_ (BSD-3-Clause) which is +based on "Geometry Helps to Compare Persistence Diagrams" +:cite:`Kerber:2017:GHC:3047249.3064175` by Michael Kerber, Dmitriy +Morozov, and Arnur Nigmetov. + +Beware that its approximation allows for a multiplicative error, while the function above uses an additive error. + +.. autofunction:: gudhi.hera.bottleneck_distance + + Distance computation -------------------- diff --git a/src/python/gudhi/hera.cc b/src/python/gudhi/hera.cc deleted file mode 100644 index ea80a9a8..00000000 --- a/src/python/gudhi/hera.cc +++ /dev/null @@ -1,56 +0,0 @@ -/* This file is part of the Gudhi Library - https://gudhi.inria.fr/ - which is released under MIT. - * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details. - * Author(s): Marc Glisse - * - * Copyright (C) 2020 Inria - * - * Modification(s): - * - YYYY/MM Author: Description of the modification - */ - -#include // Hera - -#include - -double wasserstein_distance( - Dgm d1, Dgm d2, - double wasserstein_power, double internal_p, - double delta) -{ - // I *think* the call to request() has to be before releasing the GIL. - auto diag1 = numpy_to_range_of_pairs(d1); - auto diag2 = numpy_to_range_of_pairs(d2); - - py::gil_scoped_release release; - - hera::AuctionParams params; - params.wasserstein_power = wasserstein_power; - // hera encodes infinity as -1... - if(std::isinf(internal_p)) internal_p = hera::get_infinity(); - params.internal_p = internal_p; - params.delta = delta; - // The extra parameters are purposedly not exposed for now. - return hera::wasserstein_dist(diag1, diag2, params); -} - -PYBIND11_MODULE(hera, m) { - m.def("wasserstein_distance", &wasserstein_distance, - py::arg("X"), py::arg("Y"), - py::arg("order") = 1, - py::arg("internal_p") = std::numeric_limits::infinity(), - py::arg("delta") = .01, - R"pbdoc( - Compute the Wasserstein distance between two diagrams. - Points at infinity are supported. - - Parameters: - X (n x 2 numpy array): First diagram - Y (n x 2 numpy array): Second diagram - order (float): Wasserstein exponent W_q - internal_p (float): Internal Minkowski norm L^p in R^2 - delta (float): Relative error 1+delta - - Returns: - float: Approximate Wasserstein distance W_q(X,Y) - )pbdoc"); -} diff --git a/src/python/gudhi/hera/__init__.py b/src/python/gudhi/hera/__init__.py new file mode 100644 index 00000000..044f81cd --- /dev/null +++ b/src/python/gudhi/hera/__init__.py @@ -0,0 +1,2 @@ +from .wasserstein import wasserstein_distance +from .bottleneck import bottleneck_distance diff --git a/src/python/gudhi/hera/bottleneck.cc b/src/python/gudhi/hera/bottleneck.cc new file mode 100644 index 00000000..e00b4682 --- /dev/null +++ b/src/python/gudhi/hera/bottleneck.cc @@ -0,0 +1,45 @@ +/* This file is part of the Gudhi Library - https://gudhi.inria.fr/ - which is released under MIT. + * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details. + * Author(s): Marc Glisse + * + * Copyright (C) 2020 Inria + * + * Modification(s): + * - YYYY/MM Author: Description of the modification + */ + +#include // Hera + +#include + +double bottleneck_distance(Dgm d1, Dgm d2, double delta) +{ + // I *think* the call to request() has to be before releasing the GIL. + auto diag1 = numpy_to_range_of_pairs(d1); + auto diag2 = numpy_to_range_of_pairs(d2); + + py::gil_scoped_release release; + + if (delta == 0) + return hera::bottleneckDistExact(diag1, diag2); + else + return hera::bottleneckDistApprox(diag1, diag2, delta); +} + +PYBIND11_MODULE(bottleneck, m) { + m.def("bottleneck_distance", &bottleneck_distance, + py::arg("X"), py::arg("Y"), + py::arg("delta") = .01, + R"pbdoc( + Compute the Bottleneck distance between two diagrams. + Points at infinity are supported. + + Parameters: + X (n x 2 numpy array): First diagram + Y (n x 2 numpy array): Second diagram + delta (float): Relative error 1+delta + + Returns: + float: (approximate) bottleneck distance d_B(X,Y) + )pbdoc"); +} diff --git a/src/python/gudhi/hera/wasserstein.cc b/src/python/gudhi/hera/wasserstein.cc new file mode 100644 index 00000000..1a21f02f --- /dev/null +++ b/src/python/gudhi/hera/wasserstein.cc @@ -0,0 +1,56 @@ +/* This file is part of the Gudhi Library - https://gudhi.inria.fr/ - which is released under MIT. + * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details. + * Author(s): Marc Glisse + * + * Copyright (C) 2020 Inria + * + * Modification(s): + * - YYYY/MM Author: Description of the modification + */ + +#include // Hera + +#include + +double wasserstein_distance( + Dgm d1, Dgm d2, + double wasserstein_power, double internal_p, + double delta) +{ + // I *think* the call to request() has to be before releasing the GIL. + auto diag1 = numpy_to_range_of_pairs(d1); + auto diag2 = numpy_to_range_of_pairs(d2); + + py::gil_scoped_release release; + + hera::AuctionParams params; + params.wasserstein_power = wasserstein_power; + // hera encodes infinity as -1... + if(std::isinf(internal_p)) internal_p = hera::get_infinity(); + params.internal_p = internal_p; + params.delta = delta; + // The extra parameters are purposedly not exposed for now. + return hera::wasserstein_dist(diag1, diag2, params); +} + +PYBIND11_MODULE(wasserstein, m) { + m.def("wasserstein_distance", &wasserstein_distance, + py::arg("X"), py::arg("Y"), + py::arg("order") = 1, + py::arg("internal_p") = std::numeric_limits::infinity(), + py::arg("delta") = .01, + R"pbdoc( + Compute the Wasserstein distance between two diagrams. + Points at infinity are supported. + + Parameters: + X (n x 2 numpy array): First diagram + Y (n x 2 numpy array): Second diagram + order (float): Wasserstein exponent W_q + internal_p (float): Internal Minkowski norm L^p in R^2 + delta (float): Relative error 1+delta + + Returns: + float: Approximate Wasserstein distance W_q(X,Y) + )pbdoc"); +} diff --git a/src/python/setup.py.in b/src/python/setup.py.in index b9f4e3f0..9b3c7521 100644 --- a/src/python/setup.py.in +++ b/src/python/setup.py.in @@ -48,10 +48,12 @@ ext_modules = cythonize(ext_modules) for module in pybind11_modules: my_include_dirs = include_dirs + [pybind11.get_include(False), pybind11.get_include(True)] - if module == 'hera': + if module == 'hera/wasserstein': my_include_dirs = ['@HERA_WASSERSTEIN_INCLUDE_DIR@'] + my_include_dirs + elif module == 'hera/bottleneck': + my_include_dirs = ['@HERA_BOTTLENECK_INCLUDE_DIR@'] + my_include_dirs ext_modules.append(Extension( - 'gudhi.' + module, + 'gudhi.' + module.replace('/', '.'), sources = [source_dir + module + '.cc'], language = 'c++', include_dirs = my_include_dirs, diff --git a/src/python/test/test_bottleneck_distance.py b/src/python/test/test_bottleneck_distance.py index 70b2abad..6915bea8 100755 --- a/src/python/test/test_bottleneck_distance.py +++ b/src/python/test/test_bottleneck_distance.py @@ -9,6 +9,8 @@ """ import gudhi +import gudhi.hera +import pytest __author__ = "Vincent Rouvreau" __copyright__ = "Copyright (C) 2016 Inria" @@ -19,5 +21,7 @@ def test_basic_bottleneck(): diag1 = [[2.7, 3.7], [9.6, 14.0], [34.2, 34.974], [3.0, float("Inf")]] diag2 = [[2.8, 4.45], [9.5, 14.1], [3.2, float("Inf")]] - assert gudhi.bottleneck_distance(diag1, diag2, 0.1) == 0.8081763781405569 assert gudhi.bottleneck_distance(diag1, diag2) == 0.75 + assert gudhi.bottleneck_distance(diag1, diag2, 0.1) == pytest.approx(0.75, abs=0.1) + assert gudhi.hera.bottleneck_distance(diag1, diag2, 0) == 0.75 + assert gudhi.hera.bottleneck_distance(diag1, diag2, 0.1) == pytest.approx(0.75, rel=0.1) -- cgit v1.2.3 From 59d3fa0aa4ed6628f0dfbe3424c1d7a5c6f9a382 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Mon, 1 Jun 2020 16:05:32 +0200 Subject: Simplify setup.py to read introduction.rst --- CMakeGUDHIVersion.txt | 2 +- src/python/setup.py.in | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index ffcbc53e..95e67372 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a6) +set (GUDHI_PATCH_VERSION 0a7) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") diff --git a/src/python/setup.py.in b/src/python/setup.py.in index f8eeafc4..dc163a37 100644 --- a/src/python/setup.py.in +++ b/src/python/setup.py.in @@ -13,7 +13,6 @@ from Cython.Build import cythonize from numpy import get_include as numpy_get_include import sys import pybind11 -from os import path __author__ = "Vincent Rouvreau" __copyright__ = "Copyright (C) 2016 Inria" @@ -64,9 +63,8 @@ for module in pybind11_modules: )) # read the contents of introduction.rst -this_directory = path.abspath(path.dirname(__file__)) -with open(path.join(this_directory, 'introduction.rst'), encoding='utf-8') as f: - long_description = f.read() +with open("introduction.rst", "r") as fh: + long_description = fh.read() setup( name = 'gudhi', -- cgit v1.2.3 From 18619efce47ef7fc44ba97e9b37b7f6162f5fe1b Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Thu, 4 Jun 2020 16:41:53 +0200 Subject: Workaround for ssize_t on windows --- src/python/gudhi/hera/bottleneck.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/python/gudhi/hera/bottleneck.cc b/src/python/gudhi/hera/bottleneck.cc index e00b4682..f543613e 100644 --- a/src/python/gudhi/hera/bottleneck.cc +++ b/src/python/gudhi/hera/bottleneck.cc @@ -8,6 +8,14 @@ * - YYYY/MM Author: Description of the modification */ +// https://github.com/grey-narn/hera/issues/3 +// ssize_t is a non-standard type (well, posix) +// BaseTsd.h provides SSIZE_T on windows, this one should be the same there. +#ifdef _MSC_VER +#include +typedef std::ptrdiff_t ssize_t; +#endif + #include // Hera #include -- cgit v1.2.3 From e84f5d1b3c753147ac1601537b2be15ec118144e Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Thu, 4 Jun 2020 17:01:33 +0200 Subject: user_version: don't copy hera if an external version is specified --- src/cmake/modules/GUDHI_third_party_libraries.cmake | 6 ++++-- src/cmake/modules/GUDHI_user_version_target.cmake | 7 +++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/cmake/modules/GUDHI_third_party_libraries.cmake b/src/cmake/modules/GUDHI_third_party_libraries.cmake index d80283d2..a56a2756 100644 --- a/src/cmake/modules/GUDHI_third_party_libraries.cmake +++ b/src/cmake/modules/GUDHI_third_party_libraries.cmake @@ -68,8 +68,10 @@ if(CGAL_FOUND) endif() # For those who dislike bundled dependencies, this indicates where to find a preinstalled Hera. -set(HERA_WASSERSTEIN_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/ext/hera/wasserstein/include CACHE PATH "Directory where one can find Hera's wasserstein.h") -set(HERA_BOTTLENECK_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/ext/hera/bottleneck/include CACHE PATH "Directory where one can find Hera's bottleneck.h") +set(HERA_WASSERSTEIN_INTERNAL_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/ext/hera/wasserstein/include) +set(HERA_WASSERSTEIN_INCLUDE_DIR ${HERA_WASSERSTEIN_INTERNAL_INCLUDE_DIR} CACHE PATH "Directory where one can find Hera's wasserstein.h") +set(HERA_BOTTLENECK_INTERNAL_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/ext/hera/bottleneck/include) +set(HERA_BOTTLENECK_INCLUDE_DIR ${HERA_BOTTLENECK_INTERNAL_INCLUDE_DIR} CACHE PATH "Directory where one can find Hera's bottleneck.h") option(WITH_GUDHI_USE_TBB "Build with Intel TBB parallelization" ON) diff --git a/src/cmake/modules/GUDHI_user_version_target.cmake b/src/cmake/modules/GUDHI_user_version_target.cmake index 491fa459..e4f39aae 100644 --- a/src/cmake/modules/GUDHI_user_version_target.cmake +++ b/src/cmake/modules/GUDHI_user_version_target.cmake @@ -67,8 +67,11 @@ 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_directory ${CMAKE_SOURCE_DIR}/src/GudhUI ${GUDHI_USER_VERSION_DIR}/GudhUI) -add_custom_command(TARGET user_version PRE_BUILD COMMAND ${CMAKE_COMMAND} -E - copy_directory ${CMAKE_SOURCE_DIR}/ext/hera ${GUDHI_USER_VERSION_DIR}/ext/hera) +if(HERA_WASSERSTEIN_INCLUDE_DIR STREQUAL HERA_WASSERSTEIN_INTERNAL_INCLUDE_DIR OR + HERA_BOTTLENECK_INCLUDE_DIR STREQUAL HERA_BOTTLENECK_INTERNAL_INCLUDE_DIR) + add_custom_command(TARGET user_version PRE_BUILD COMMAND ${CMAKE_COMMAND} -E + copy_directory ${CMAKE_SOURCE_DIR}/ext/hera ${GUDHI_USER_VERSION_DIR}/ext/hera) +endif() set(GUDHI_DIRECTORIES "doc;example;concept;utilities") -- cgit v1.2.3 From bea81f2d7bc53876a6f071c919663261314965ab Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Thu, 4 Jun 2020 17:21:05 +0200 Subject: Use ssize_t from pybind11 --- src/python/gudhi/hera/bottleneck.cc | 10 ++++------ src/python/include/pybind11_diagram_utils.h | 8 ++++---- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/python/gudhi/hera/bottleneck.cc b/src/python/gudhi/hera/bottleneck.cc index f543613e..846a3525 100644 --- a/src/python/gudhi/hera/bottleneck.cc +++ b/src/python/gudhi/hera/bottleneck.cc @@ -8,18 +8,16 @@ * - YYYY/MM Author: Description of the modification */ +#include + +#ifdef _MSC_VER // https://github.com/grey-narn/hera/issues/3 // ssize_t is a non-standard type (well, posix) -// BaseTsd.h provides SSIZE_T on windows, this one should be the same there. -#ifdef _MSC_VER -#include -typedef std::ptrdiff_t ssize_t; +using py::ssize_t; #endif #include // Hera -#include - double bottleneck_distance(Dgm d1, Dgm d2, double delta) { // I *think* the call to request() has to be before releasing the GIL. diff --git a/src/python/include/pybind11_diagram_utils.h b/src/python/include/pybind11_diagram_utils.h index d9627258..2d5194f4 100644 --- a/src/python/include/pybind11_diagram_utils.h +++ b/src/python/include/pybind11_diagram_utils.h @@ -18,8 +18,8 @@ namespace py = pybind11; typedef py::array_t Dgm; // Get m[i,0] and m[i,1] as a pair -static auto pairify(void* p, ssize_t h, ssize_t w) { - return [=](ssize_t i){ +static auto pairify(void* p, py::ssize_t h, py::ssize_t w) { + return [=](py::ssize_t i){ char* birth = (char*)p + i * h; char* death = birth + w; return std::make_pair(*(double*)birth, *(double*)death); @@ -32,8 +32,8 @@ inline auto numpy_to_range_of_pairs(py::array_t dgm) { if((buf.ndim!=2 || buf.shape[1]!=2) && (buf.ndim!=1 || buf.shape[0]!=0)) throw std::runtime_error("Diagram must be an array of size n x 2"); // In the case of shape (0), avoid reading non-existing strides[1] even if we won't use it. - ssize_t stride1 = buf.ndim == 2 ? buf.strides[1] : 0; - auto cnt = boost::counting_range(0, buf.shape[0]); + py::ssize_t stride1 = buf.ndim == 2 ? buf.strides[1] : 0; + auto cnt = boost::counting_range(0, buf.shape[0]); return boost::adaptors::transform(cnt, pairify(buf.ptr, buf.strides[0], stride1)); // Be careful that the returned range cannot contain references to dead temporaries. } -- cgit v1.2.3 From 82dc35dd749a1f388be268d7a7e3bd22f18afcf7 Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Fri, 5 Jun 2020 20:16:38 +0200 Subject: Doc changes after Vincent's review --- src/python/doc/bottleneck_distance_user.rst | 5 +++-- src/python/gudhi/bottleneck.cc | 3 ++- src/python/gudhi/hera/bottleneck.cc | 3 +++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/python/doc/bottleneck_distance_user.rst b/src/python/doc/bottleneck_distance_user.rst index 49bd3706..6c6e08d9 100644 --- a/src/python/doc/bottleneck_distance_user.rst +++ b/src/python/doc/bottleneck_distance_user.rst @@ -10,7 +10,7 @@ Definition .. include:: bottleneck_distance_sum.inc This implementation by François Godi is based on ideas from "Geometry Helps in Bottleneck Matching and Related Problems" -:cite:`DBLP:journals/algorithmica/EfratIK01` and requires `CGAL `_. +:cite:`DBLP:journals/algorithmica/EfratIK01` and requires `CGAL `_ (`GPL v3 `_). .. autofunction:: gudhi.bottleneck_distance @@ -20,7 +20,8 @@ based on "Geometry Helps to Compare Persistence Diagrams" :cite:`Kerber:2017:GHC:3047249.3064175` by Michael Kerber, Dmitriy Morozov, and Arnur Nigmetov. -Beware that its approximation allows for a multiplicative error, while the function above uses an additive error. +.. warning:: + Beware that its approximation allows for a multiplicative error, while the function above uses an additive error. .. autofunction:: gudhi.hera.bottleneck_distance diff --git a/src/python/gudhi/bottleneck.cc b/src/python/gudhi/bottleneck.cc index 732cb9a8..59be6088 100644 --- a/src/python/gudhi/bottleneck.cc +++ b/src/python/gudhi/bottleneck.cc @@ -29,7 +29,8 @@ PYBIND11_MODULE(bottleneck, m) { py::arg("diagram_1"), py::arg("diagram_2"), py::arg("e") = (std::numeric_limits::min)(), R"pbdoc( - This function returns the point corresponding to a given vertex. + Compute the Bottleneck distance between two diagrams. + Points at infinity and on the diagonal are supported. :param diagram_1: The first diagram. :type diagram_1: numpy array of shape (m,2) diff --git a/src/python/gudhi/hera/bottleneck.cc b/src/python/gudhi/hera/bottleneck.cc index 846a3525..0cb562ce 100644 --- a/src/python/gudhi/hera/bottleneck.cc +++ b/src/python/gudhi/hera/bottleneck.cc @@ -40,6 +40,9 @@ PYBIND11_MODULE(bottleneck, m) { Compute the Bottleneck distance between two diagrams. Points at infinity are supported. + .. note:: + Points on the diagonal are not supported and must be filtered out before calling this function. + Parameters: X (n x 2 numpy array): First diagram Y (n x 2 numpy array): Second diagram -- cgit v1.2.3 From cd0287d0d64a1227a665ff54f80a3e8ad44a7041 Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Fri, 5 Jun 2020 20:24:46 +0200 Subject: Update hera --- ext/hera | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/hera b/ext/hera index 2c5e6c60..b73ed1fa 160000 --- a/ext/hera +++ b/ext/hera @@ -1 +1 @@ -Subproject commit 2c5e6c606ee37cd68bbe9f9915dba99f7677dd87 +Subproject commit b73ed1face2c609958556e6f2b7704bbd8aaa263 -- cgit v1.2.3 From dacc3e363ded8b68bb4b71c1602e2c52b10b36e5 Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Fri, 5 Jun 2020 22:29:32 +0200 Subject: author, etc --- src/python/gudhi/hera/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/python/gudhi/hera/__init__.py b/src/python/gudhi/hera/__init__.py index 044f81cd..f70b92b9 100644 --- a/src/python/gudhi/hera/__init__.py +++ b/src/python/gudhi/hera/__init__.py @@ -1,2 +1,7 @@ from .wasserstein import wasserstein_distance from .bottleneck import bottleneck_distance + + +__author__ = "Marc Glisse" +__copyright__ = "Copyright (C) 2020 Inria" +__license__ = "MIT" -- cgit v1.2.3 From 4559eccd8b1c3610f7a82a709929013303368506 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sat, 6 Jun 2020 12:06:33 +0200 Subject: Try with devtoolset-8 and boost clone from git --- .github/workflows/pip-packaging-osx.yml | 4 +++- CMakeGUDHIVersion.txt | 2 +- Dockerfile_for_pip | 11 +++++++---- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pip-packaging-osx.yml b/.github/workflows/pip-packaging-osx.yml index f30b89d8..1f669a5e 100644 --- a/.github/workflows/pip-packaging-osx.yml +++ b/.github/workflows/pip-packaging-osx.yml @@ -41,4 +41,6 @@ jobs: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | - python -m twine upload --repository-url https://test.pypi.org/legacy/ build/src/python/dist/* \ No newline at end of file + mkdir wheelhouse + delocate-listdeps build/src/python/dist/* && delocate-wheel --require-archs x86_64 -w wheelhouse build/src/python/dist/* + python -m twine upload --repository-url https://test.pypi.org/legacy/ wheelhouse/* \ No newline at end of file diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index 95e67372..d1490bd3 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a7) +set (GUDHI_PATCH_VERSION 0a8) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") diff --git a/Dockerfile_for_pip b/Dockerfile_for_pip index 0f4fa8a0..8f60e37c 100644 --- a/Dockerfile_for_pip +++ b/Dockerfile_for_pip @@ -6,6 +6,7 @@ RUN yum -y update && yum -y install \ eigen3-devel \ mpfr-devel \ gmp-devel \ + devtoolset-8 \ && yum clean all RUN mkdir -p /opt/cmake \ @@ -13,13 +14,14 @@ RUN mkdir -p /opt/cmake \ && sh cmake-3.16.2-Linux-x86_64.sh --skip-license --prefix=/opt/cmake \ && rm -f cmake-3.16.2-Linux-x86_64.sh -RUN wget https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gz \ - && tar xf boost_1_64_0.tar.gz \ - && cd boost_1_64_0 \ +RUN git clone -b boost-1.73.0 --depth 1 https://github.com/boostorg/boost.git \ + && cd boost \ + && git submodule update --init \ && ./bootstrap.sh --with-libraries=filesystem,program_options,system,thread,test \ + && ./b2 headers \ && ./b2 install \ && cd .. \ - && rm -rf boost_1_64_0 + && rm -rf boost RUN wget https://github.com/CGAL/cgal/releases/download/releases%2FCGAL-5.0.2/CGAL-5.0.2.tar.xz \ && tar xf CGAL-5.0.2.tar.xz \ @@ -44,3 +46,4 @@ ENV PYTHON37="/opt/python/cp37-cp37m/" ENV PYTHON38="/opt/python/cp38-cp38/" ENV PATH="/opt/cmake/bin:${PATH}" +ENV PATH="/opt/rh/devtoolset-8/root/usr/bin:${PATH}" -- cgit v1.2.3 From 1a853df5745576f5e18b7c820c6cf5e5e2885169 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sat, 6 Jun 2020 14:42:04 +0200 Subject: Needs to install delocate --- .github/workflows/pip-packaging-osx.yml | 2 +- CMakeGUDHIVersion.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pip-packaging-osx.yml b/.github/workflows/pip-packaging-osx.yml index 1f669a5e..68fae138 100644 --- a/.github/workflows/pip-packaging-osx.yml +++ b/.github/workflows/pip-packaging-osx.yml @@ -27,7 +27,7 @@ jobs: run: | brew update && brew install boost eigen gmp mpfr cgal python -m pip install --user -r .github/build-requirements.txt - python -m pip install --user twine + python -m pip install --user twine delocate - name: Build python wheel run: | python --version diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index d1490bd3..3834c59c 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a8) +set (GUDHI_PATCH_VERSION 0a9) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") -- cgit v1.2.3 From 37991af75b7834a40dc014518d1943eea802a16b Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sat, 6 Jun 2020 14:55:30 +0200 Subject: Add some debug traces for osx --- CMakeGUDHIVersion.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index 3834c59c..537feeb9 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a9) +set (GUDHI_PATCH_VERSION 0a10) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") -- cgit v1.2.3 From e822b2f1e68feebccf9dd069447c5df5574dc650 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Sat, 6 Jun 2020 14:55:58 +0200 Subject: Add some debug traces for osx --- .github/workflows/pip-packaging-osx.yml | 5 ++++- CMakeGUDHIVersion.txt | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pip-packaging-osx.yml b/.github/workflows/pip-packaging-osx.yml index 68fae138..d7bfc66b 100644 --- a/.github/workflows/pip-packaging-osx.yml +++ b/.github/workflows/pip-packaging-osx.yml @@ -42,5 +42,8 @@ jobs: TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | mkdir wheelhouse - delocate-listdeps build/src/python/dist/* && delocate-wheel --require-archs x86_64 -w wheelhouse build/src/python/dist/* + type delocate-listdeps + type delocate-wheel + delocate-listdeps build/src/python/dist/* + delocate-wheel --require-archs x86_64 -w wheelhouse build/src/python/dist/* python -m twine upload --repository-url https://test.pypi.org/legacy/ wheelhouse/* \ No newline at end of file diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index 537feeb9..c2c68a2e 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a10) +set (GUDHI_PATCH_VERSION 0a11) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") -- cgit v1.2.3 From 8f8b0965ac79f4051fc321a6f4714082624d6561 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Mon, 8 Jun 2020 08:02:20 +0200 Subject: Use full path for delocate --- .github/workflows/pip-packaging-osx.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pip-packaging-osx.yml b/.github/workflows/pip-packaging-osx.yml index d7bfc66b..199e6f01 100644 --- a/.github/workflows/pip-packaging-osx.yml +++ b/.github/workflows/pip-packaging-osx.yml @@ -42,8 +42,6 @@ jobs: TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | mkdir wheelhouse - type delocate-listdeps - type delocate-wheel - delocate-listdeps build/src/python/dist/* - delocate-wheel --require-archs x86_64 -w wheelhouse build/src/python/dist/* + /Users/runner/.local/bin/delocate-listdeps build/src/python/dist/* + /Users/runner/.local/bin/delocate-wheel --require-archs x86_64 -w wheelhouse build/src/python/dist/* python -m twine upload --repository-url https://test.pypi.org/legacy/ wheelhouse/* \ No newline at end of file -- cgit v1.2.3 From 31e7f07ce852644f287f81e727eff7eef3756d12 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Mon, 8 Jun 2020 08:15:05 +0200 Subject: Forgot to increase release number --- CMakeGUDHIVersion.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index c2c68a2e..857b0056 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a11) +set (GUDHI_PATCH_VERSION 0a12) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") -- cgit v1.2.3 From d46bfa4c50cc3bb52eaee5dffc6b798b0ae236f6 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Tue, 9 Jun 2020 07:49:45 +0200 Subject: move cython from install_requires to setup_requires --- CMakeGUDHIVersion.txt | 2 +- src/python/setup.py.in | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index 857b0056..d2d98dea 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a12) +set (GUDHI_PATCH_VERSION 0a13) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") diff --git a/src/python/setup.py.in b/src/python/setup.py.in index dc163a37..875f1577 100644 --- a/src/python/setup.py.in +++ b/src/python/setup.py.in @@ -84,6 +84,6 @@ setup( long_description_content_type='text/x-rst', long_description=long_description, ext_modules = ext_modules, - install_requires = ['cython','numpy >= 1.9',], - setup_requires = ['numpy >= 1.9','pybind11',], + install_requires = ['numpy >= 1.9',], + setup_requires = ['cython','numpy >= 1.9','pybind11',], ) -- cgit v1.2.3 From fff2aee667a674b7da2889abdafd8cec360ef621 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Wed, 10 Jun 2020 08:08:50 +0200 Subject: Remove tbb to see if module import works better --- .github/workflows/pip-packaging-windows.yml | 2 +- CMakeGUDHIVersion.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index 53abc036..96ac05c0 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -25,7 +25,7 @@ jobs: architecture: x64 - name: Install dependencies run: | - vcpkg install tbb:x64-windows boost-graph:x64-windows boost-serialization:x64-windows boost-date-time:x64-windows boost-system:x64-windows boost-filesystem:x64-windows boost-units:x64-windows boost-thread:x64-windows boost-program-options:x64-windows eigen3:x64-windows mpfr:x64-windows mpir:x64-windows cgal:x64-windows + vcpkg install boost-graph:x64-windows boost-serialization:x64-windows boost-date-time:x64-windows boost-system:x64-windows boost-filesystem:x64-windows boost-units:x64-windows boost-thread:x64-windows boost-program-options:x64-windows eigen3:x64-windows mpfr:x64-windows mpir:x64-windows cgal:x64-windows python -m pip install --user -r .github/build-requirements.txt python -m pip install --user twine - name: Build python wheel diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index d2d98dea..d93850cd 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a13) +set (GUDHI_PATCH_VERSION 0a14) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") -- cgit v1.2.3 From d52a7dc4c5d0a1a3de3cdb1074182079c0827c2f Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Wed, 10 Jun 2020 15:56:00 +0200 Subject: Add dependencies as artifacts to be able to download them --- .github/workflows/pip-packaging-windows.yml | 7 ++++++- CMakeGUDHIVersion.txt | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index 96ac05c0..5d9eafe7 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -40,4 +40,9 @@ jobs: env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: python -m twine upload --repository-url https://test.pypi.org/legacy/ build/src/python/dist/* \ No newline at end of file + run: python -m twine upload --repository-url https://test.pypi.org/legacy/ build/src/python/dist/* + - name: Upload artifacts + uses: actions/upload-artifact@v1 + with: + name: dependencies + path: c:/vcpkg/installed/x64-windows/lib/ diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index d93850cd..b00d82d0 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a14) +set (GUDHI_PATCH_VERSION 0a15) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") -- cgit v1.2.3 From 70caa9be348c87526e2d41194a3618d14633b7dc Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Wed, 10 Jun 2020 17:00:40 +0200 Subject: Add dependencies as artifacts to be able to download them --- .github/workflows/pip-packaging-windows.yml | 2 +- CMakeGUDHIVersion.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index 5d9eafe7..95205258 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -45,4 +45,4 @@ jobs: uses: actions/upload-artifact@v1 with: name: dependencies - path: c:/vcpkg/installed/x64-windows/lib/ + path: c:/vcpkg/installed/x64-windows/bin/ diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index b00d82d0..4ad3921d 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a15) +set (GUDHI_PATCH_VERSION 0a16) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") -- cgit v1.2.3 From e4a59f9ec6685534b03474cbcfe9395d601516e2 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Thu, 11 Jun 2020 07:23:23 +0200 Subject: Add distributor the right to add dll to the package --- .github/workflows/pip-packaging-windows.yml | 7 ++----- CMakeGUDHIVersion.txt | 2 +- src/python/CMakeLists.txt | 5 ++++- src/python/gudhi/__init__.py.in | 3 +++ src/python/gudhi/_distributor_init.py | 18 ++++++++++++++++++ 5 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 src/python/gudhi/_distributor_init.py diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index 95205258..fe4d0227 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -35,14 +35,11 @@ jobs: cd build cmake -DCMAKE_BUILD_TYPE=Release -DGMP_INCLUDE_DIR="c:/vcpkg/installed/x64-windows/include" -DGMP_LIBRARIES="c:/vcpkg/installed/x64-windows/lib/mpir.lib" -DGMP_LIBRARIES_DIR="c:/vcpkg/installed/x64-windows/lib" -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DPython_ADDITIONAL_VERSIONS=3 .. cd src/python + cp c:/vcpkg/installed/x64-windows/bin/mpfr.dll .libs/ + cp c:/vcpkg/installed/x64-windows/bin/mpir.dll .libs/ python setup.py bdist_wheel - name: Publish on PyPi env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: python -m twine upload --repository-url https://test.pypi.org/legacy/ build/src/python/dist/* - - name: Upload artifacts - uses: actions/upload-artifact@v1 - with: - name: dependencies - path: c:/vcpkg/installed/x64-windows/bin/ diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index 4ad3921d..794b6ebf 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a16) +set (GUDHI_PATCH_VERSION 0a17) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index fee6b6f5..b35c8de7 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -235,8 +235,11 @@ if(PYTHONINTERP_FOUND) file(COPY "gudhi/point_cloud" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gudhi") file(COPY "gudhi/weighted_rips_complex.py" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gudhi") - # Other .py files + # Some files for pip package file(COPY "introduction.rst" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/") + file(COPY "gudhi/_distributor_init.py" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gudhi") + file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/gudhi/.libs") + message(" o o o ${CMAKE_CURRENT_BINARY_DIR}/gudhi/.libs") add_custom_command( OUTPUT gudhi.so diff --git a/src/python/gudhi/__init__.py.in b/src/python/gudhi/__init__.py.in index 79e12fbc..e4198dcf 100644 --- a/src/python/gudhi/__init__.py.in +++ b/src/python/gudhi/__init__.py.in @@ -10,6 +10,9 @@ from importlib import import_module from sys import exc_info +# Allow distributors to run custom init code +from . import _distributor_init + __author__ = "GUDHI Editorial Board" __copyright__ = "Copyright (C) 2016 Inria" __license__ = "https://gudhi.inria.fr/licensing/" diff --git a/src/python/gudhi/_distributor_init.py b/src/python/gudhi/_distributor_init.py new file mode 100644 index 00000000..0ed451f9 --- /dev/null +++ b/src/python/gudhi/_distributor_init.py @@ -0,0 +1,18 @@ +''' +Helper to preload windows dlls to prevent dll not found errors. +Once a DLL is preloaded, its namespace is made available to any subsequent DLL. +''' +import os +from ctypes import WinDLL +import glob +if os.name == 'nt': + # convention for storing / loading the DLL from gudhi/.libs/, if present + try: + basedir = os.path.dirname(__file__) + except: + pass + else: + libs_dir = os.path.abspath(os.path.join(basedir, '.libs')) + if os.path.isdir(libs_dir): + for filename in glob.glob(os.path.join(libs_dir, '*dll')): + WinDLL(os.path.abspath(filename)) -- cgit v1.2.3 From c04ff4c1f5c6aa7115c2e0e57f5ecc3ebb153fb2 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Thu, 11 Jun 2020 07:48:59 +0200 Subject: bad destination --- .github/workflows/pip-packaging-windows.yml | 4 ++-- CMakeGUDHIVersion.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index fe4d0227..f229b74f 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -35,8 +35,8 @@ jobs: cd build cmake -DCMAKE_BUILD_TYPE=Release -DGMP_INCLUDE_DIR="c:/vcpkg/installed/x64-windows/include" -DGMP_LIBRARIES="c:/vcpkg/installed/x64-windows/lib/mpir.lib" -DGMP_LIBRARIES_DIR="c:/vcpkg/installed/x64-windows/lib" -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DPython_ADDITIONAL_VERSIONS=3 .. cd src/python - cp c:/vcpkg/installed/x64-windows/bin/mpfr.dll .libs/ - cp c:/vcpkg/installed/x64-windows/bin/mpir.dll .libs/ + cp c:/vcpkg/installed/x64-windows/bin/mpfr.dll gudhi/.libs/ + cp c:/vcpkg/installed/x64-windows/bin/mpir.dll gudhi/.libs/ python setup.py bdist_wheel - name: Publish on PyPi env: diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index 794b6ebf..fab3ee75 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a17) +set (GUDHI_PATCH_VERSION 0a18) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") -- cgit v1.2.3 From 0f7cc48907e1b28e114d37e3bd30a2237d9f6c8c Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Thu, 11 Jun 2020 08:09:01 +0200 Subject: cannot import WinDLL from ctypes on non-windows systems --- CMakeGUDHIVersion.txt | 2 +- src/python/gudhi/_distributor_init.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index fab3ee75..21f3d58c 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a18) +set (GUDHI_PATCH_VERSION 0a19) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") diff --git a/src/python/gudhi/_distributor_init.py b/src/python/gudhi/_distributor_init.py index 0ed451f9..6f3dc8a2 100644 --- a/src/python/gudhi/_distributor_init.py +++ b/src/python/gudhi/_distributor_init.py @@ -3,8 +3,6 @@ Helper to preload windows dlls to prevent dll not found errors. Once a DLL is preloaded, its namespace is made available to any subsequent DLL. ''' import os -from ctypes import WinDLL -import glob if os.name == 'nt': # convention for storing / loading the DLL from gudhi/.libs/, if present try: @@ -14,5 +12,7 @@ if os.name == 'nt': else: libs_dir = os.path.abspath(os.path.join(basedir, '.libs')) if os.path.isdir(libs_dir): + from ctypes import WinDLL + import glob for filename in glob.glob(os.path.join(libs_dir, '*dll')): WinDLL(os.path.abspath(filename)) -- cgit v1.2.3 From aec85514aeaeac51d1589e6a24c4c393df892f91 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Thu, 11 Jun 2020 12:03:49 +0200 Subject: Upload dlls from gudhi directory --- .github/workflows/pip-packaging-windows.yml | 4 ++-- CMakeGUDHIVersion.txt | 2 +- src/python/CMakeLists.txt | 3 --- src/python/gudhi/__init__.py.in | 3 --- src/python/gudhi/_distributor_init.py | 18 ------------------ src/python/setup.py.in | 1 + 6 files changed, 4 insertions(+), 27 deletions(-) delete mode 100644 src/python/gudhi/_distributor_init.py diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index f229b74f..d529d4f3 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -35,8 +35,8 @@ jobs: cd build cmake -DCMAKE_BUILD_TYPE=Release -DGMP_INCLUDE_DIR="c:/vcpkg/installed/x64-windows/include" -DGMP_LIBRARIES="c:/vcpkg/installed/x64-windows/lib/mpir.lib" -DGMP_LIBRARIES_DIR="c:/vcpkg/installed/x64-windows/lib" -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DPython_ADDITIONAL_VERSIONS=3 .. cd src/python - cp c:/vcpkg/installed/x64-windows/bin/mpfr.dll gudhi/.libs/ - cp c:/vcpkg/installed/x64-windows/bin/mpir.dll gudhi/.libs/ + cp c:/vcpkg/installed/x64-windows/bin/mpfr.dll gudhi/ + cp c:/vcpkg/installed/x64-windows/bin/mpir.dll gudhi/ python setup.py bdist_wheel - name: Publish on PyPi env: diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index 21f3d58c..85d69190 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a19) +set (GUDHI_PATCH_VERSION 0a20) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index b35c8de7..966f5ef0 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -237,9 +237,6 @@ if(PYTHONINTERP_FOUND) # Some files for pip package file(COPY "introduction.rst" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/") - file(COPY "gudhi/_distributor_init.py" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gudhi") - file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/gudhi/.libs") - message(" o o o ${CMAKE_CURRENT_BINARY_DIR}/gudhi/.libs") add_custom_command( OUTPUT gudhi.so diff --git a/src/python/gudhi/__init__.py.in b/src/python/gudhi/__init__.py.in index e4198dcf..79e12fbc 100644 --- a/src/python/gudhi/__init__.py.in +++ b/src/python/gudhi/__init__.py.in @@ -10,9 +10,6 @@ from importlib import import_module from sys import exc_info -# Allow distributors to run custom init code -from . import _distributor_init - __author__ = "GUDHI Editorial Board" __copyright__ = "Copyright (C) 2016 Inria" __license__ = "https://gudhi.inria.fr/licensing/" diff --git a/src/python/gudhi/_distributor_init.py b/src/python/gudhi/_distributor_init.py deleted file mode 100644 index 6f3dc8a2..00000000 --- a/src/python/gudhi/_distributor_init.py +++ /dev/null @@ -1,18 +0,0 @@ -''' -Helper to preload windows dlls to prevent dll not found errors. -Once a DLL is preloaded, its namespace is made available to any subsequent DLL. -''' -import os -if os.name == 'nt': - # convention for storing / loading the DLL from gudhi/.libs/, if present - try: - basedir = os.path.dirname(__file__) - except: - pass - else: - libs_dir = os.path.abspath(os.path.join(basedir, '.libs')) - if os.path.isdir(libs_dir): - from ctypes import WinDLL - import glob - for filename in glob.glob(os.path.join(libs_dir, '*dll')): - WinDLL(os.path.abspath(filename)) diff --git a/src/python/setup.py.in b/src/python/setup.py.in index 875f1577..07ad818f 100644 --- a/src/python/setup.py.in +++ b/src/python/setup.py.in @@ -86,4 +86,5 @@ setup( ext_modules = ext_modules, install_requires = ['numpy >= 1.9',], setup_requires = ['cython','numpy >= 1.9','pybind11',], + package_data={"": ["*.dll"], }, ) -- cgit v1.2.3 From cae2ab045cfb801c8f0990bf96c6a52b8c7bac65 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Fri, 12 Jun 2020 07:42:45 +0200 Subject: Release candidate 1 on pypi.org, no more test --- CMakeGUDHIVersion.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index 85d69190..a06e871c 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0a20) +set (GUDHI_PATCH_VERSION 0rc1) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") -- cgit v1.2.3 From 891c4ab74faa07e0e5a10cc054cf57e5f77fdc95 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Fri, 12 Jun 2020 08:07:14 +0200 Subject: No more on test.pypi.org --- .github/workflows/pip-packaging-linux.yml | 8 ++++---- .github/workflows/pip-packaging-osx.yml | 2 +- .github/workflows/pip-packaging-windows.yml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pip-packaging-linux.yml b/.github/workflows/pip-packaging-linux.yml index 6b099243..f82122b4 100644 --- a/.github/workflows/pip-packaging-linux.yml +++ b/.github/workflows/pip-packaging-linux.yml @@ -54,7 +54,7 @@ jobs: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | - $PYTHON38/bin/python -m twine upload --repository-url https://test.pypi.org/legacy/ build_35/src/python/wheelhouse/* - $PYTHON38/bin/python -m twine upload --repository-url https://test.pypi.org/legacy/ build_36/src/python/wheelhouse/* - $PYTHON38/bin/python -m twine upload --repository-url https://test.pypi.org/legacy/ build_37/src/python/wheelhouse/* - $PYTHON38/bin/python -m twine upload --repository-url https://test.pypi.org/legacy/ build_38/src/python/wheelhouse/* \ No newline at end of file + $PYTHON38/bin/python -m twine upload build_35/src/python/wheelhouse/* + $PYTHON38/bin/python -m twine upload build_36/src/python/wheelhouse/* + $PYTHON38/bin/python -m twine upload build_37/src/python/wheelhouse/* + $PYTHON38/bin/python -m twine upload build_38/src/python/wheelhouse/* \ No newline at end of file diff --git a/.github/workflows/pip-packaging-osx.yml b/.github/workflows/pip-packaging-osx.yml index 199e6f01..6861b65a 100644 --- a/.github/workflows/pip-packaging-osx.yml +++ b/.github/workflows/pip-packaging-osx.yml @@ -44,4 +44,4 @@ jobs: mkdir wheelhouse /Users/runner/.local/bin/delocate-listdeps build/src/python/dist/* /Users/runner/.local/bin/delocate-wheel --require-archs x86_64 -w wheelhouse build/src/python/dist/* - python -m twine upload --repository-url https://test.pypi.org/legacy/ wheelhouse/* \ No newline at end of file + python -m twine upload wheelhouse/* \ No newline at end of file diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index d529d4f3..68add90a 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -42,4 +42,4 @@ jobs: env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: python -m twine upload --repository-url https://test.pypi.org/legacy/ build/src/python/dist/* + run: python -m twine upload build/src/python/dist/* -- cgit v1.2.3 From 472c8d61db3e918ed6ad647e0330fdb68c7d5ac5 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Fri, 12 Jun 2020 08:53:24 +0200 Subject: Official version 3.2.0 as tests on OSx, Win and Linux pass --- CMakeGUDHIVersion.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index a06e871c..ac89fa4d 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 3) set (GUDHI_MINOR_VERSION 2) -set (GUDHI_PATCH_VERSION 0rc1) +set (GUDHI_PATCH_VERSION 0) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") -- cgit v1.2.3 From 4ae747be301f1f159f36bd9d3c103774e1ad80ac Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Fri, 12 Jun 2020 09:19:19 +0200 Subject: Build pip packages on releases --- .github/workflows/pip-packaging-linux.yml | 8 ++------ .github/workflows/pip-packaging-osx.yml | 7 ++----- .github/workflows/pip-packaging-windows.yml | 7 ++----- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/.github/workflows/pip-packaging-linux.yml b/.github/workflows/pip-packaging-linux.yml index f82122b4..bd524af9 100644 --- a/.github/workflows/pip-packaging-linux.yml +++ b/.github/workflows/pip-packaging-linux.yml @@ -1,12 +1,8 @@ name: pip packaging linux on: - push: {} - pull_request: {} - -# on: -# release: -# types: [published] + release: + types: [published] jobs: build: diff --git a/.github/workflows/pip-packaging-osx.yml b/.github/workflows/pip-packaging-osx.yml index 6861b65a..85c3c807 100644 --- a/.github/workflows/pip-packaging-osx.yml +++ b/.github/workflows/pip-packaging-osx.yml @@ -1,11 +1,8 @@ name: pip packaging osx on: - push: {} - pull_request: {} -# on: -# release: -# types: [published] + release: + types: [published] jobs: build: diff --git a/.github/workflows/pip-packaging-windows.yml b/.github/workflows/pip-packaging-windows.yml index 68add90a..1cadf6b1 100644 --- a/.github/workflows/pip-packaging-windows.yml +++ b/.github/workflows/pip-packaging-windows.yml @@ -1,11 +1,8 @@ name: pip packaging windows on: - push: {} - pull_request: {} -# on: -# release: -# types: [published] + release: + types: [published] jobs: build: -- cgit v1.2.3 From b50a41f53af6937c6f030d08f2b969b9024e17ac Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Fri, 12 Jun 2020 23:10:37 +0200 Subject: Mention pip package --- src/python/doc/installation.rst | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/python/doc/installation.rst b/src/python/doc/installation.rst index a66e910e..525ca84e 100644 --- a/src/python/doc/installation.rst +++ b/src/python/doc/installation.rst @@ -5,20 +5,47 @@ Installation ############ -Conda -***** -The easiest way to install the Python version of GUDHI is using -`conda `_. +Packages +******** +The easiest way to install the Python version of GUDHI is using pre-built packages. +We recommend `conda `_ + +.. code-block:: bash + + conda install -c conda-forge gudhi + +Gudhi is also available on `PyPI `_ + +.. code-block:: bash + + pip install gudhi + +Third party packages are also available, for instance on Debian or Ubuntu + +.. code-block:: bash + + apt install python3-gudhi + +In all cases, you may still want to install some of the optional `run time dependencies`_. Compiling ********* +These instructions are for people who want to compile gudhi from source, they are +unnecessary if you installed a binary package of Gudhi as above. They assume that +you have downloaded a `release `_, +with a name like `gudhi.3.2.0.tar.gz`, then run `tar xf gudhi.3.2.0.tar.gz`, which +created a directory `gudhi.3.2.0`, hereinafter referred to as `/path-to-gudhi/`. +If you are instead using a git checkout, beware that the paths are a bit +different, and in particular the `python/` subdirectory is actually `src/python/` +there. + The library uses c++14 and requires `Boost `_ :math:`\geq` 1.56.0, `CMake `_ :math:`\geq` 3.1 to generate makefiles, `NumPy `_, `Cython `_ and `pybind11 `_ to compile the GUDHI Python module. It is a multi-platform library and compiles on Linux, Mac OSX and Visual -Studio 2017. +Studio 2017 or later. On `Windows `_ , only Python :math:`\geq` 3.5 are available because of the required Visual Studio version. -- cgit v1.2.3 From 509963769e6e9d29e70dcc20118ea29f785b0a51 Mon Sep 17 00:00:00 2001 From: ROUVREAU Vincent Date: Tue, 16 Jun 2020 10:38:03 +0200 Subject: Fix #352 --- Dockerfile_for_circleci_image | 2 +- Dockerfile_gudhi_installation | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile_for_circleci_image b/Dockerfile_for_circleci_image index c2e8a8f5..464097e7 100644 --- a/Dockerfile_for_circleci_image +++ b/Dockerfile_for_circleci_image @@ -1,4 +1,4 @@ -FROM ubuntu:19.04 +FROM ubuntu:20.04 # Update and upgrade distribution RUN apt-get update && \ diff --git a/Dockerfile_gudhi_installation b/Dockerfile_gudhi_installation index 461a8a19..996dd06b 100644 --- a/Dockerfile_gudhi_installation +++ b/Dockerfile_gudhi_installation @@ -1,4 +1,4 @@ -FROM ubuntu:19.04 +FROM ubuntu:20.04 # Update and upgrade distribution RUN apt-get update && \ -- cgit v1.2.3