summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2020-06-19 15:33:43 +0200
committerMarc Glisse <marc.glisse@inria.fr>2020-06-19 15:33:43 +0200
commitf2ebd5d52eb2005d84c4abb631aaae6caf1f0157 (patch)
treeee5a0d2fc100265a464b073004b0a763f7483522
parentdd39431320e8c219b1eab9265c1a41aa53172ee5 (diff)
parentc43010ec0244748c2f86a2b6622713f68fbd6cb8 (diff)
Merge remote-tracking branch 'origin/master' into tomato2
-rw-r--r--.github/test-requirements.txt2
-rw-r--r--.github/workflows/pip-packaging-linux.yml56
-rw-r--r--.github/workflows/pip-packaging-osx.yml44
-rw-r--r--.github/workflows/pip-packaging-windows.yml42
-rw-r--r--Dockerfile_for_circleci_image2
-rw-r--r--Dockerfile_for_pip49
-rw-r--r--Dockerfile_gudhi_installation2
-rw-r--r--src/python/CMakeLists.txt3
-rw-r--r--src/python/doc/installation.rst37
-rw-r--r--src/python/introduction.rst24
-rw-r--r--src/python/setup.py.in21
11 files changed, 271 insertions, 11 deletions
diff --git a/.github/test-requirements.txt b/.github/test-requirements.txt
index fb1df134..98f1007e 100644
--- a/.github/test-requirements.txt
+++ b/.github/test-requirements.txt
@@ -7,7 +7,7 @@ scipy
scikit-learn
POT
tensorflow
-torch
+torch<1.5
pykeops
hnswlib
eagerpy
diff --git a/.github/workflows/pip-packaging-linux.yml b/.github/workflows/pip-packaging-linux.yml
new file mode 100644
index 00000000..bd524af9
--- /dev/null
+++ b/.github/workflows/pip-packaging-linux.yml
@@ -0,0 +1,56 @@
+name: pip packaging linux
+
+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/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
new file mode 100644
index 00000000..85c3c807
--- /dev/null
+++ b/.github/workflows/pip-packaging-osx.yml
@@ -0,0 +1,44 @@
+name: pip packaging osx
+
+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 delocate
+ - 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: |
+ 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 wheelhouse/* \ 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..1cadf6b1
--- /dev/null
+++ b/.github/workflows/pip-packaging-windows.yml
@@ -0,0 +1,42 @@
+name: pip packaging windows
+
+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 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
+ run: |
+ python --version
+ mkdir build
+ 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/
+ cp c:/vcpkg/installed/x64-windows/bin/mpir.dll gudhi/
+ python setup.py bdist_wheel
+ - name: Publish on PyPi
+ env:
+ TWINE_USERNAME: __token__
+ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
+ run: python -m twine upload build/src/python/dist/*
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_for_pip b/Dockerfile_for_pip
new file mode 100644
index 00000000..8f60e37c
--- /dev/null
+++ b/Dockerfile_for_pip
@@ -0,0 +1,49 @@
+FROM quay.io/pypa/manylinux2014_x86_64
+
+RUN yum -y update && yum -y install \
+ wget \
+ zlib-devel \
+ eigen3-devel \
+ mpfr-devel \
+ gmp-devel \
+ devtoolset-8 \
+ && 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 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
+
+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}"
+ENV PATH="/opt/rh/devtoolset-8/root/usr/bin:${PATH}"
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 && \
diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt
index f5e1b12b..04f64ce3 100644
--- a/src/python/CMakeLists.txt
+++ b/src/python/CMakeLists.txt
@@ -242,6 +242,9 @@ if(PYTHONINTERP_FOUND)
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")
+ # Some files for pip package
+ file(COPY "introduction.rst" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/")
+
add_custom_command(
OUTPUT gudhi.so
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
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 <https://gudhi.inria.fr/conda/>`_.
+Packages
+********
+The easiest way to install the Python version of GUDHI is using pre-built packages.
+We recommend `conda <https://gudhi.inria.fr/conda/>`_
+
+.. code-block:: bash
+
+ conda install -c conda-forge gudhi
+
+Gudhi is also available on `PyPI <https://pypi.org/project/gudhi/>`_
+
+.. 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 <https://github.com/GUDHI/gudhi-devel/releases>`_,
+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 <https://www.boost.org/>`_ :math:`\geq` 1.56.0,
`CMake <https://www.cmake.org/>`_ :math:`\geq` 3.1 to generate makefiles,
`NumPy <http://numpy.org>`_, `Cython <https://www.cython.org/>`_ and
`pybind11 <https://github.com/pybind/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 <https://wiki.python.org/moin/WindowsCompilers>`_ , only Python
:math:`\geq` 3.5 are available because of the required Visual Studio version.
diff --git a/src/python/introduction.rst b/src/python/introduction.rst
new file mode 100644
index 00000000..11c06ac5
--- /dev/null
+++ b/src/python/introduction.rst
@@ -0,0 +1,24 @@
+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 <https://en.wikipedia.org/wiki/Topological_data_analysis>`_.
diff --git a/src/python/setup.py.in b/src/python/setup.py.in
index 9b3c7521..98d058fc 100644
--- a/src/python/setup.py.in
+++ b/src/python/setup.py.in
@@ -64,14 +64,29 @@ for module in pybind11_modules:
runtime_library_dirs=runtime_library_dirs,
))
+# read the contents of introduction.rst
+with open("introduction.rst", "r") as fh:
+ long_description = fh.read()
+
setup(
name = 'gudhi',
packages=find_packages(), # find_namespace_packages(include=["gudhi*"])
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).',
+ 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',],
+ package_data={"": ["*.dll"], },
)