diff options
-rw-r--r-- | .github/workflows/pip-packaging-linux.yml | 56 | ||||
-rw-r--r-- | .github/workflows/pip-packaging-osx.yml | 44 | ||||
-rw-r--r-- | .github/workflows/pip-packaging-windows.yml | 42 | ||||
-rw-r--r-- | Dockerfile_for_pip | 49 | ||||
-rw-r--r-- | src/python/CMakeLists.txt | 3 | ||||
-rw-r--r-- | src/python/introduction.rst | 24 | ||||
-rw-r--r-- | src/python/setup.py.in | 21 |
7 files changed, 236 insertions, 3 deletions
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_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/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index 1e81cac8..81be1b76 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -239,6 +239,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/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"], }, ) |