splineops 0.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- splineops-0.0.0/.binder/requirements.txt +0 -0
- splineops-0.0.0/.github/workflows/deploy-docs.yml +45 -0
- splineops-0.0.0/.github/workflows/release.yml +102 -0
- splineops-0.0.0/.github/workflows/test.yml +57 -0
- splineops-0.0.0/.gitignore +179 -0
- splineops-0.0.0/CMakeLists.txt +53 -0
- splineops-0.0.0/LICENSE +30 -0
- splineops-0.0.0/PKG-INFO +220 -0
- splineops-0.0.0/README.md +140 -0
- splineops-0.0.0/cpp/lsresize/CMakeLists.txt +53 -0
- splineops-0.0.0/cpp/lsresize/run_demo.cpp +359 -0
- splineops-0.0.0/cpp/lsresize/src/bspline.h +58 -0
- splineops-0.0.0/cpp/lsresize/src/filters.cpp +162 -0
- splineops-0.0.0/cpp/lsresize/src/filters.h +101 -0
- splineops-0.0.0/cpp/lsresize/src/resize1d.cpp +138 -0
- splineops-0.0.0/cpp/lsresize/src/resize1d.h +20 -0
- splineops-0.0.0/cpp/lsresize/src/resizend.cpp +80 -0
- splineops-0.0.0/cpp/lsresize/src/resizend.h +16 -0
- splineops-0.0.0/cpp/lsresize/src/utils.h +63 -0
- splineops-0.0.0/cpp/pybind/_lsresize_bindings.cpp +98 -0
- splineops-0.0.0/docs/Makefile +31 -0
- splineops-0.0.0/docs/_static/background.svg +167 -0
- splineops-0.0.0/docs/_static/css/custom.css +186 -0
- splineops-0.0.0/docs/_static/feature_01.jpg +0 -0
- splineops-0.0.0/docs/_static/feature_02.jpg +0 -0
- splineops-0.0.0/docs/_static/feature_03.jpg +0 -0
- splineops-0.0.0/docs/_static/logo.ico +0 -0
- splineops-0.0.0/docs/_static/logo.png +0 -0
- splineops-0.0.0/docs/_static/waveletbird_full.jpeg +0 -0
- splineops-0.0.0/docs/api/01_interpolate.rst +16 -0
- splineops-0.0.0/docs/api/02_resize.rst +19 -0
- splineops-0.0.0/docs/api/03_rotate.rst +18 -0
- splineops-0.0.0/docs/api/04_regress.rst +13 -0
- splineops-0.0.0/docs/api/05_denoise.rst +13 -0
- splineops-0.0.0/docs/api/06_differentiate.rst +21 -0
- splineops-0.0.0/docs/api/07_decompose.rst +91 -0
- splineops-0.0.0/docs/api/index.rst +37 -0
- splineops-0.0.0/docs/conf.py +218 -0
- splineops-0.0.0/docs/index.rst +48 -0
- splineops-0.0.0/docs/installation/index.rst +7 -0
- splineops-0.0.0/docs/make.bat +36 -0
- splineops-0.0.0/docs/sphinxext/move_gallery_links.py +199 -0
- splineops-0.0.0/docs/user-guide/01_interpolate.rst +135 -0
- splineops-0.0.0/docs/user-guide/02_resize.rst +194 -0
- splineops-0.0.0/docs/user-guide/03_rotate.rst +114 -0
- splineops-0.0.0/docs/user-guide/04_regress.rst +128 -0
- splineops-0.0.0/docs/user-guide/05_denoise.rst +165 -0
- splineops-0.0.0/docs/user-guide/06_differentiate.rst +118 -0
- splineops-0.0.0/docs/user-guide/07_decompose.rst +89 -0
- splineops-0.0.0/docs/user-guide/Illustrations/interpolate.nb +53715 -0
- splineops-0.0.0/docs/user-guide/index.rst +20 -0
- splineops-0.0.0/docs/user-guide/interpolatefig01.png +0 -0
- splineops-0.0.0/docs/user-guide/interpolatefig02.png +0 -0
- splineops-0.0.0/docs/user-guide/interpolatefig03.png +0 -0
- splineops-0.0.0/docs/user-guide/interpolatefig04.png +0 -0
- splineops-0.0.0/docs/user-guide/interpolatefig05.png +0 -0
- splineops-0.0.0/docs/user-guide/interpolatefig06.png +0 -0
- splineops-0.0.0/docs/user-guide/interpolatefig07.png +0 -0
- splineops-0.0.0/docs/user-guide/interpolatefig08.png +0 -0
- splineops-0.0.0/docs/user-guide/interpolatefig09.png +0 -0
- splineops-0.0.0/docs/user-guide/resizefig01.png +0 -0
- splineops-0.0.0/examples/01_quick-start/01_01_tensorspline_class.py +134 -0
- splineops-0.0.0/examples/01_quick-start/01_02_spline_bases.py +76 -0
- splineops-0.0.0/examples/01_quick-start/01_03_extension_modes.py +81 -0
- splineops-0.0.0/examples/01_quick-start/GALLERY_HEADER.rst +6 -0
- splineops-0.0.0/examples/02_resampling_using_1d_interpolation/02_01_interpolate_1d_samples.py +161 -0
- splineops-0.0.0/examples/02_resampling_using_1d_interpolation/02_02_resample_a_1d_spline.py +193 -0
- splineops-0.0.0/examples/02_resampling_using_1d_interpolation/02_03_compare_different_splines.py +390 -0
- splineops-0.0.0/examples/02_resampling_using_1d_interpolation/GALLERY_HEADER.rst +6 -0
- splineops-0.0.0/examples/03_resampling_using_2D_interpolation/03_01_resize_module.py +111 -0
- splineops-0.0.0/examples/03_resampling_using_2D_interpolation/03_02_standard_interpolation.py +292 -0
- splineops-0.0.0/examples/03_resampling_using_2D_interpolation/03_03_least-squares_projection.py +302 -0
- splineops-0.0.0/examples/03_resampling_using_2D_interpolation/03_04_antialiasing.py +168 -0
- splineops-0.0.0/examples/03_resampling_using_2D_interpolation/03_05_oblique_projection.py +326 -0
- splineops-0.0.0/examples/03_resampling_using_2D_interpolation/03_06_compare_different_methods.py +205 -0
- splineops-0.0.0/examples/03_resampling_using_2D_interpolation/GALLERY_HEADER.rst +6 -0
- splineops-0.0.0/examples/04_rotate/04_01_rotate_image.py +102 -0
- splineops-0.0.0/examples/04_rotate/04_02_rotation_animation.py +153 -0
- splineops-0.0.0/examples/04_rotate/GALLERY_HEADER.rst +6 -0
- splineops-0.0.0/examples/05_regress/05_01_regress_module.py +124 -0
- splineops-0.0.0/examples/05_regress/GALLERY_HEADER.rst +6 -0
- splineops-0.0.0/examples/06_denoise/06_01_1d_fractional_brownian_motion.py +94 -0
- splineops-0.0.0/examples/06_denoise/06_02_2d_image_smoothing.py +108 -0
- splineops-0.0.0/examples/06_denoise/06_03_3d_volume_smoothing.py +101 -0
- splineops-0.0.0/examples/06_denoise/06_04_recursive_smoothing_spline.py +66 -0
- splineops-0.0.0/examples/06_denoise/GALLERY_HEADER.rst +6 -0
- splineops-0.0.0/examples/07_differentiate/07_01_differentiate_module.py +208 -0
- splineops-0.0.0/examples/07_differentiate/GALLERY_HEADER.rst +6 -0
- splineops-0.0.0/examples/08_decompose/08_01_pyramid_decomposition.py +189 -0
- splineops-0.0.0/examples/08_decompose/08_02_wavelet_decomposition.py +224 -0
- splineops-0.0.0/examples/08_decompose/GALLERY_HEADER.rst +6 -0
- splineops-0.0.0/examples/README.txt +4 -0
- splineops-0.0.0/pyproject.toml +110 -0
- splineops-0.0.0/scripts/compare_resize_python_cpp.py +168 -0
- splineops-0.0.0/scripts/magnify_from_tif.py +187 -0
- splineops-0.0.0/src/splineops/__init__.py +7 -0
- splineops-0.0.0/src/splineops/bases/__init__.py +0 -0
- splineops-0.0.0/src/splineops/bases/bspline0basis.py +61 -0
- splineops-0.0.0/src/splineops/bases/bspline1basis.py +31 -0
- splineops-0.0.0/src/splineops/bases/bspline2basis.py +40 -0
- splineops-0.0.0/src/splineops/bases/bspline3basis.py +39 -0
- splineops-0.0.0/src/splineops/bases/bspline4basis.py +55 -0
- splineops-0.0.0/src/splineops/bases/bspline5basis.py +64 -0
- splineops-0.0.0/src/splineops/bases/bspline6basis.py +99 -0
- splineops-0.0.0/src/splineops/bases/bspline7basis.py +97 -0
- splineops-0.0.0/src/splineops/bases/bspline8basis.py +142 -0
- splineops-0.0.0/src/splineops/bases/bspline9basis.py +168 -0
- splineops-0.0.0/src/splineops/bases/keysbasis.py +43 -0
- splineops-0.0.0/src/splineops/bases/linearbasis.py +5 -0
- splineops-0.0.0/src/splineops/bases/nearestneighborbasis.py +6 -0
- splineops-0.0.0/src/splineops/bases/omoms0basis.py +6 -0
- splineops-0.0.0/src/splineops/bases/omoms1basis.py +5 -0
- splineops-0.0.0/src/splineops/bases/omoms2basis.py +95 -0
- splineops-0.0.0/src/splineops/bases/omoms3basis.py +47 -0
- splineops-0.0.0/src/splineops/bases/omoms4basis.py +163 -0
- splineops-0.0.0/src/splineops/bases/omoms5basis.py +85 -0
- splineops-0.0.0/src/splineops/bases/splinebasis.py +94 -0
- splineops-0.0.0/src/splineops/bases/utils.py +79 -0
- splineops-0.0.0/src/splineops/decompose/__init__.py +0 -0
- splineops-0.0.0/src/splineops/decompose/pyramid.py +444 -0
- splineops-0.0.0/src/splineops/decompose/wavelets/__init__.py +0 -0
- splineops-0.0.0/src/splineops/decompose/wavelets/abstractwavelets.py +141 -0
- splineops-0.0.0/src/splineops/decompose/wavelets/haar.py +160 -0
- splineops-0.0.0/src/splineops/decompose/wavelets/splinefilter.py +159 -0
- splineops-0.0.0/src/splineops/decompose/wavelets/splinewavelets.py +293 -0
- splineops-0.0.0/src/splineops/decompose/wavelets/splinewaveletstool.py +272 -0
- splineops-0.0.0/src/splineops/denoise/__init__.py +0 -0
- splineops-0.0.0/src/splineops/denoise/fBmper.py +85 -0
- splineops-0.0.0/src/splineops/denoise/fractsplineautocorr.py +70 -0
- splineops-0.0.0/src/splineops/denoise/smoothing_spline.py +214 -0
- splineops-0.0.0/src/splineops/differentiate/__init__.py +0 -0
- splineops-0.0.0/src/splineops/differentiate/differentials.py +466 -0
- splineops-0.0.0/src/splineops/interpolate/__init__.py +0 -0
- splineops-0.0.0/src/splineops/interpolate/tensorspline.py +425 -0
- splineops-0.0.0/src/splineops/interpolate/utils.py +310 -0
- splineops-0.0.0/src/splineops/modes/__init__.py +0 -0
- splineops-0.0.0/src/splineops/modes/extensionmode.py +23 -0
- splineops-0.0.0/src/splineops/modes/finitesupportcoefficients.py +90 -0
- splineops-0.0.0/src/splineops/modes/narrowmirroring.py +55 -0
- splineops-0.0.0/src/splineops/modes/periodicpadding.py +92 -0
- splineops-0.0.0/src/splineops/modes/utils.py +38 -0
- splineops-0.0.0/src/splineops/regress/__init__.py +0 -0
- splineops-0.0.0/src/splineops/regress/denoising.py +195 -0
- splineops-0.0.0/src/splineops/regress/sparsification.py +242 -0
- splineops-0.0.0/src/splineops/resize/__init__.py +3 -0
- splineops-0.0.0/src/splineops/resize/ls_oblique_resize.py +490 -0
- splineops-0.0.0/src/splineops/resize/resize.py +222 -0
- splineops-0.0.0/src/splineops/resize/utils.py +581 -0
- splineops-0.0.0/src/splineops/rotate/__init__.py +0 -0
- splineops-0.0.0/src/splineops/rotate/rotate.py +134 -0
- splineops-0.0.0/src/splineops/utils/__init__.py +36 -0
- splineops-0.0.0/src/splineops/utils/diagram.py +483 -0
- splineops-0.0.0/src/splineops/utils/image.py +69 -0
- splineops-0.0.0/src/splineops/utils/interop.py +14 -0
- splineops-0.0.0/src/splineops/utils/metrics.py +55 -0
- splineops-0.0.0/src/splineops/utils/plotting.py +274 -0
- splineops-0.0.0/src/splineops/utils/resample.py +132 -0
- splineops-0.0.0/tests/test_01_01_interpolate.py +210 -0
- splineops-0.0.0/tests/test_02_01_resize_ls_oblique_java.py +325 -0
- splineops-0.0.0/tests/test_02_02_resize_ls_oblique.py +90 -0
- splineops-0.0.0/tests/test_02_03_resize_ls_oblique_cpp.py +84 -0
- splineops-0.0.0/tests/test_03_01_rotate_2d.py +88 -0
- splineops-0.0.0/tests/test_03_02_rotate_3d.py +107 -0
- splineops-0.0.0/tests/test_04_01_regress.py +57 -0
- splineops-0.0.0/tests/test_05_01_denoise.py +68 -0
- splineops-0.0.0/tests/test_06_01_differentiate.py +533 -0
- splineops-0.0.0/tests/test_07_01_decompose.py +149 -0
- splineops-0.0.0/tox.ini +36 -0
|
Binary file
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# splineops/.github/workflows/deploy-docs.yml
|
|
2
|
+
name: Deploy Sphinx Documentation to GitHub Pages
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
pages: write
|
|
11
|
+
id-token: write
|
|
12
|
+
|
|
13
|
+
concurrency:
|
|
14
|
+
group: pages
|
|
15
|
+
cancel-in-progress: false
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
build:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
|
|
21
|
+
steps:
|
|
22
|
+
- name: Checkout repository
|
|
23
|
+
uses: actions/checkout@v4
|
|
24
|
+
|
|
25
|
+
- name: Set up Python
|
|
26
|
+
uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: '3.12'
|
|
29
|
+
cache: 'pip'
|
|
30
|
+
|
|
31
|
+
- name: Install documentation requirements
|
|
32
|
+
run: |
|
|
33
|
+
python -m pip install --upgrade pip
|
|
34
|
+
pip install -e .[docs]
|
|
35
|
+
|
|
36
|
+
- name: Build Sphinx documentation
|
|
37
|
+
run: make -C docs html
|
|
38
|
+
|
|
39
|
+
- name: Deploy to GitHub Pages
|
|
40
|
+
uses: peaceiris/actions-gh-pages@v4
|
|
41
|
+
with:
|
|
42
|
+
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
|
43
|
+
external_repository: splineops/splineops.github.io
|
|
44
|
+
publish_branch: main
|
|
45
|
+
publish_dir: docs/_build/html
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# splineops/.github/workflows/release.yml
|
|
2
|
+
name: Build & publish to PyPI
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
tags:
|
|
7
|
+
- "v*"
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
id-token: write # OIDC for PyPI
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
build_wheels:
|
|
15
|
+
name: Build wheels on ${{ matrix.os }}
|
|
16
|
+
runs-on: ${{ matrix.os }}
|
|
17
|
+
strategy:
|
|
18
|
+
fail-fast: false
|
|
19
|
+
matrix:
|
|
20
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
|
|
25
|
+
- uses: actions/setup-python@v5
|
|
26
|
+
with:
|
|
27
|
+
python-version: "3.12"
|
|
28
|
+
|
|
29
|
+
# macOS only: try to install libomp. Non-fatal if it fails.
|
|
30
|
+
- name: (macOS) Try to install libomp (non-fatal)
|
|
31
|
+
if: matrix.os == 'macos-latest'
|
|
32
|
+
run: |
|
|
33
|
+
if command -v brew >/dev/null 2>&1; then
|
|
34
|
+
brew list libomp >/dev/null 2>&1 || brew install libomp || true
|
|
35
|
+
else
|
|
36
|
+
echo "Homebrew not available; building without libomp."
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
- name: Install cibuildwheel
|
|
40
|
+
run: python -m pip install -U pip cibuildwheel build
|
|
41
|
+
|
|
42
|
+
- name: Build wheels
|
|
43
|
+
run: python -m cibuildwheel --output-dir dist
|
|
44
|
+
env:
|
|
45
|
+
# CPython only, for versions we support
|
|
46
|
+
CIBW_BUILD: "cp310-* cp311-* cp312-*"
|
|
47
|
+
|
|
48
|
+
# Avoid unsupported/undesired targets
|
|
49
|
+
# - remove pp* warning by not listing it
|
|
50
|
+
# - skip musllinux explicitly (we don't ship those)
|
|
51
|
+
CIBW_SKIP: "*musllinux*"
|
|
52
|
+
|
|
53
|
+
# Limit architectures to where SciPy wheels exist & what we support
|
|
54
|
+
CIBW_ARCHS_LINUX: "x86_64"
|
|
55
|
+
CIBW_ARCHS_WINDOWS: "AMD64"
|
|
56
|
+
# macOS: leave default ("auto") or pin to arm64; arm64 is safest on Apple Silicon runners
|
|
57
|
+
CIBW_ARCHS_MACOS: "arm64"
|
|
58
|
+
|
|
59
|
+
# Simple smoke test: import and check native module presence
|
|
60
|
+
CIBW_TEST_COMMAND: >
|
|
61
|
+
python -c "import importlib.util, numpy as np, splineops;
|
|
62
|
+
print('ok', importlib.util.find_spec('splineops._lsresize') is not None)"
|
|
63
|
+
|
|
64
|
+
# Build sdist only once (Ubuntu)
|
|
65
|
+
- name: Build sdist (once on Ubuntu)
|
|
66
|
+
if: matrix.os == 'ubuntu-latest'
|
|
67
|
+
run: python -m build -s -o dist
|
|
68
|
+
|
|
69
|
+
# Upload wheels for this OS (unique name per matrix instance)
|
|
70
|
+
- name: Upload wheel artifacts
|
|
71
|
+
uses: actions/upload-artifact@v4
|
|
72
|
+
with:
|
|
73
|
+
name: wheels-${{ matrix.os }}
|
|
74
|
+
path: dist/*.whl
|
|
75
|
+
if-no-files-found: error
|
|
76
|
+
|
|
77
|
+
# Upload sdist only from Ubuntu
|
|
78
|
+
- name: Upload sdist artifact
|
|
79
|
+
if: matrix.os == 'ubuntu-latest'
|
|
80
|
+
uses: actions/upload-artifact@v4
|
|
81
|
+
with:
|
|
82
|
+
name: sdist
|
|
83
|
+
path: dist/*.tar.gz
|
|
84
|
+
if-no-files-found: error
|
|
85
|
+
|
|
86
|
+
publish:
|
|
87
|
+
needs: [build_wheels]
|
|
88
|
+
runs-on: ubuntu-latest
|
|
89
|
+
steps:
|
|
90
|
+
# Download all wheel artifacts from all OSes & the sdist, merged into ./dist
|
|
91
|
+
- uses: actions/download-artifact@v4
|
|
92
|
+
with:
|
|
93
|
+
pattern: wheels-*
|
|
94
|
+
merge-multiple: true
|
|
95
|
+
path: dist
|
|
96
|
+
- uses: actions/download-artifact@v4
|
|
97
|
+
with:
|
|
98
|
+
name: sdist
|
|
99
|
+
path: dist
|
|
100
|
+
|
|
101
|
+
- name: Publish to PyPI
|
|
102
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# splineops/.github/workflows/test.yml
|
|
2
|
+
name: Test Library
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
pull_request:
|
|
8
|
+
branches: [main]
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
matrix:
|
|
15
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
16
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
17
|
+
|
|
18
|
+
runs-on: ${{ matrix.os }}
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout repository
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
|
|
24
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
25
|
+
uses: actions/setup-python@v5
|
|
26
|
+
with:
|
|
27
|
+
python-version: ${{ matrix.python-version }}
|
|
28
|
+
cache: pip
|
|
29
|
+
|
|
30
|
+
- name: Install tox
|
|
31
|
+
run: python -m pip install --upgrade pip tox
|
|
32
|
+
|
|
33
|
+
# Build the package once (creates .pkg wheel) with C++ enabled
|
|
34
|
+
- name: Create tox env (build extension) — C++ path
|
|
35
|
+
env:
|
|
36
|
+
SPLINEOPS_ACCEL: always
|
|
37
|
+
OMP_NUM_THREADS: 1
|
|
38
|
+
OPENBLAS_NUM_THREADS: 1
|
|
39
|
+
MKL_NUM_THREADS: 1
|
|
40
|
+
NUMEXPR_NUM_THREADS: 1
|
|
41
|
+
run: tox -e py --notest
|
|
42
|
+
|
|
43
|
+
# Smoke check *inside the tox env* (no pytest! just the smoke env)
|
|
44
|
+
- name: Smoke check native extension (inside tox env)
|
|
45
|
+
env:
|
|
46
|
+
SPLINEOPS_ACCEL: always
|
|
47
|
+
run: tox -q -e smoke
|
|
48
|
+
|
|
49
|
+
# Run full test suite (C++ required)
|
|
50
|
+
- name: Run tests with tox (C++ required)
|
|
51
|
+
env:
|
|
52
|
+
SPLINEOPS_ACCEL: always
|
|
53
|
+
OMP_NUM_THREADS: 1
|
|
54
|
+
OPENBLAS_NUM_THREADS: 1
|
|
55
|
+
MKL_NUM_THREADS: 1
|
|
56
|
+
NUMEXPR_NUM_THREADS: 1
|
|
57
|
+
run: tox -e py
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# JetBrains
|
|
2
|
+
.idea/
|
|
3
|
+
|
|
4
|
+
# VS Code
|
|
5
|
+
.vscode/
|
|
6
|
+
|
|
7
|
+
# macOS
|
|
8
|
+
.DS_Store
|
|
9
|
+
|
|
10
|
+
# Byte-compiled / optimized / DLL files
|
|
11
|
+
__pycache__/
|
|
12
|
+
*.py[cod]
|
|
13
|
+
*$py.class
|
|
14
|
+
|
|
15
|
+
# C extensions
|
|
16
|
+
*.so
|
|
17
|
+
|
|
18
|
+
# Environments
|
|
19
|
+
splineops_env/
|
|
20
|
+
|
|
21
|
+
# Tex files
|
|
22
|
+
*.aux
|
|
23
|
+
*.fdb_latexmk
|
|
24
|
+
*.fls
|
|
25
|
+
*.synctex.gz
|
|
26
|
+
*.pdf
|
|
27
|
+
|
|
28
|
+
# Distribution / packaging
|
|
29
|
+
.Python
|
|
30
|
+
build/
|
|
31
|
+
develop-eggs/
|
|
32
|
+
dist/
|
|
33
|
+
downloads/
|
|
34
|
+
eggs/
|
|
35
|
+
.eggs/
|
|
36
|
+
lib/
|
|
37
|
+
lib64/
|
|
38
|
+
parts/
|
|
39
|
+
sdist/
|
|
40
|
+
var/
|
|
41
|
+
wheels/
|
|
42
|
+
share/python-wheels/
|
|
43
|
+
*.egg-info/
|
|
44
|
+
.installed.cfg
|
|
45
|
+
*.egg
|
|
46
|
+
MANIFEST
|
|
47
|
+
|
|
48
|
+
# PyInstaller
|
|
49
|
+
# Usually these files are written by a python script from a template
|
|
50
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
51
|
+
*.manifest
|
|
52
|
+
*.spec
|
|
53
|
+
|
|
54
|
+
# Installer logs
|
|
55
|
+
pip-log.txt
|
|
56
|
+
pip-delete-this-directory.txt
|
|
57
|
+
|
|
58
|
+
# Unit test / coverage reports
|
|
59
|
+
htmlcov/
|
|
60
|
+
.tox/
|
|
61
|
+
.nox/
|
|
62
|
+
.coverage
|
|
63
|
+
.coverage.*
|
|
64
|
+
.cache
|
|
65
|
+
nosetests.xml
|
|
66
|
+
coverage.xml
|
|
67
|
+
*.cover
|
|
68
|
+
*.py,cover
|
|
69
|
+
.hypothesis/
|
|
70
|
+
.pytest_cache/
|
|
71
|
+
cover/
|
|
72
|
+
|
|
73
|
+
# Translations
|
|
74
|
+
*.mo
|
|
75
|
+
*.pot
|
|
76
|
+
|
|
77
|
+
# Django stuff:
|
|
78
|
+
*.log
|
|
79
|
+
local_settings.py
|
|
80
|
+
db.sqlite3
|
|
81
|
+
db.sqlite3-journal
|
|
82
|
+
|
|
83
|
+
# Flask stuff:
|
|
84
|
+
instance/
|
|
85
|
+
.webassets-cache
|
|
86
|
+
|
|
87
|
+
# Scrapy stuff:
|
|
88
|
+
.scrapy
|
|
89
|
+
|
|
90
|
+
# Sphinx documentation
|
|
91
|
+
docs/_build/
|
|
92
|
+
docs/_contents/
|
|
93
|
+
docs/sg_execution_times.rst
|
|
94
|
+
docs/auto_examples/
|
|
95
|
+
docs/gen_modules/
|
|
96
|
+
docs/notebooks_binder/
|
|
97
|
+
docs/notebooks_jupyterlite/
|
|
98
|
+
|
|
99
|
+
# PyBuilder
|
|
100
|
+
.pybuilder/
|
|
101
|
+
target/
|
|
102
|
+
|
|
103
|
+
# Jupyter Notebook
|
|
104
|
+
.ipynb_checkpoints
|
|
105
|
+
|
|
106
|
+
# IPython
|
|
107
|
+
profile_default/
|
|
108
|
+
ipython_config.py
|
|
109
|
+
|
|
110
|
+
# pyenv
|
|
111
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
112
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
113
|
+
# .python-version
|
|
114
|
+
|
|
115
|
+
# pipenv
|
|
116
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
117
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
118
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
119
|
+
# install all needed dependencies.
|
|
120
|
+
#Pipfile.lock
|
|
121
|
+
|
|
122
|
+
# poetry
|
|
123
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
124
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
125
|
+
# commonly ignored for libraries.
|
|
126
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
127
|
+
#poetry.lock
|
|
128
|
+
|
|
129
|
+
# pdm
|
|
130
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
131
|
+
#pdm.lock
|
|
132
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
133
|
+
# in version control.
|
|
134
|
+
# https://pdm.fming.dev/#use-with-ide
|
|
135
|
+
.pdm.toml
|
|
136
|
+
|
|
137
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
138
|
+
__pypackages__/
|
|
139
|
+
|
|
140
|
+
# Celery stuff
|
|
141
|
+
celerybeat-schedule
|
|
142
|
+
celerybeat.pid
|
|
143
|
+
|
|
144
|
+
# SageMath parsed files
|
|
145
|
+
*.sage.py
|
|
146
|
+
|
|
147
|
+
# Environments
|
|
148
|
+
.env
|
|
149
|
+
.venv
|
|
150
|
+
env/
|
|
151
|
+
venv/
|
|
152
|
+
ENV/
|
|
153
|
+
env.bak/
|
|
154
|
+
venv.bak/
|
|
155
|
+
splineops-env
|
|
156
|
+
|
|
157
|
+
# Spyder project settings
|
|
158
|
+
.spyderproject
|
|
159
|
+
.spyproject
|
|
160
|
+
|
|
161
|
+
# Rope project settings
|
|
162
|
+
.ropeproject
|
|
163
|
+
|
|
164
|
+
# mkdocs documentation
|
|
165
|
+
/site
|
|
166
|
+
|
|
167
|
+
# mypy
|
|
168
|
+
.mypy_cache/
|
|
169
|
+
.dmypy.json
|
|
170
|
+
dmypy.json
|
|
171
|
+
|
|
172
|
+
# Pyre type checker
|
|
173
|
+
.pyre/
|
|
174
|
+
|
|
175
|
+
# pytype static type analyzer
|
|
176
|
+
.pytype/
|
|
177
|
+
|
|
178
|
+
# Cython debug symbols
|
|
179
|
+
cython_debug/
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# splineops/CMakeLists.txt
|
|
2
|
+
cmake_minimum_required(VERSION 3.20)
|
|
3
|
+
project(splineops_native LANGUAGES CXX)
|
|
4
|
+
|
|
5
|
+
option(LSRESIZE_USE_OPENMP "Enable OpenMP for parallel loops" ON)
|
|
6
|
+
|
|
7
|
+
set(CMAKE_CXX_STANDARD 17)
|
|
8
|
+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
9
|
+
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
10
|
+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
11
|
+
|
|
12
|
+
if (MSVC)
|
|
13
|
+
add_compile_options(/W4 /permissive- /Zc:preprocessor /Zc:__cplusplus)
|
|
14
|
+
else()
|
|
15
|
+
add_compile_options(-Wall -Wextra -Wpedantic)
|
|
16
|
+
endif()
|
|
17
|
+
|
|
18
|
+
# Let pybind11 find the matching Python
|
|
19
|
+
set(PYBIND11_FINDPYTHON ON)
|
|
20
|
+
find_package(Python REQUIRED COMPONENTS Interpreter Development.Module)
|
|
21
|
+
find_package(pybind11 CONFIG REQUIRED)
|
|
22
|
+
|
|
23
|
+
if (LSRESIZE_USE_OPENMP)
|
|
24
|
+
find_package(OpenMP QUIET)
|
|
25
|
+
endif()
|
|
26
|
+
|
|
27
|
+
# ---- Absolute source paths (robust on Windows) ----
|
|
28
|
+
set(LSRESIZE_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cpp/lsresize/src")
|
|
29
|
+
set(PYBIND_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cpp/pybind")
|
|
30
|
+
|
|
31
|
+
add_library(lsresize STATIC
|
|
32
|
+
"${LSRESIZE_SRC_DIR}/filters.cpp"
|
|
33
|
+
"${LSRESIZE_SRC_DIR}/resize1d.cpp"
|
|
34
|
+
"${LSRESIZE_SRC_DIR}/resizend.cpp"
|
|
35
|
+
)
|
|
36
|
+
target_include_directories(lsresize PUBLIC "${LSRESIZE_SRC_DIR}")
|
|
37
|
+
target_compile_features(lsresize PUBLIC cxx_std_17)
|
|
38
|
+
if (OpenMP_CXX_FOUND)
|
|
39
|
+
target_link_libraries(lsresize PUBLIC OpenMP::OpenMP_CXX)
|
|
40
|
+
target_compile_definitions(lsresize PUBLIC LSRESIZE_WITH_OPENMP=1)
|
|
41
|
+
endif()
|
|
42
|
+
|
|
43
|
+
pybind11_add_module(_lsresize
|
|
44
|
+
"${PYBIND_DIR}/_lsresize_bindings.cpp"
|
|
45
|
+
)
|
|
46
|
+
target_link_libraries(_lsresize PRIVATE lsresize)
|
|
47
|
+
|
|
48
|
+
install(TARGETS _lsresize
|
|
49
|
+
LIBRARY DESTINATION splineops
|
|
50
|
+
RUNTIME DESTINATION splineops
|
|
51
|
+
ARCHIVE DESTINATION splineops)
|
|
52
|
+
|
|
53
|
+
message(STATUS "OpenMP enabled: " $<BOOL:${OpenMP_CXX_FOUND}>)
|
splineops-0.0.0/LICENSE
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024, splineops
|
|
4
|
+
Copyright (c) 2023-2024, EPFL (Dimitris Perdios, Pablo Garcia-Amorena)
|
|
5
|
+
Copyright (c) 2021-2022, EPFL (Dimitris Perdios)
|
|
6
|
+
|
|
7
|
+
Redistribution and use in source and binary forms, with or without
|
|
8
|
+
modification, are permitted provided that the following conditions are met:
|
|
9
|
+
|
|
10
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
11
|
+
list of conditions and the following disclaimer.
|
|
12
|
+
|
|
13
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
14
|
+
this list of conditions and the following disclaimer in the documentation
|
|
15
|
+
and/or other materials provided with the distribution.
|
|
16
|
+
|
|
17
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
18
|
+
contributors may be used to endorse or promote products derived from
|
|
19
|
+
this software without specific prior written permission.
|
|
20
|
+
|
|
21
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
22
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
23
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
24
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
25
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
26
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
27
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
28
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
29
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
30
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
splineops-0.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
|
+
Name: splineops
|
|
3
|
+
Version: 0.0.0
|
|
4
|
+
Summary: Spline signal processing in N-D with support for GPU computing.
|
|
5
|
+
Author: Dimitris Perdios, Pablo Garcia-Amorena, Philippe Thévenaz
|
|
6
|
+
License: BSD 3-Clause License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2024, splineops
|
|
9
|
+
Copyright (c) 2023-2024, EPFL (Dimitris Perdios, Pablo Garcia-Amorena)
|
|
10
|
+
Copyright (c) 2021-2022, EPFL (Dimitris Perdios)
|
|
11
|
+
|
|
12
|
+
Redistribution and use in source and binary forms, with or without
|
|
13
|
+
modification, are permitted provided that the following conditions are met:
|
|
14
|
+
|
|
15
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
16
|
+
list of conditions and the following disclaimer.
|
|
17
|
+
|
|
18
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
19
|
+
this list of conditions and the following disclaimer in the documentation
|
|
20
|
+
and/or other materials provided with the distribution.
|
|
21
|
+
|
|
22
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
23
|
+
contributors may be used to endorse or promote products derived from
|
|
24
|
+
this software without specific prior written permission.
|
|
25
|
+
|
|
26
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
27
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
28
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
29
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
30
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
31
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
32
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
33
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
34
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
35
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
36
|
+
|
|
37
|
+
Classifier: Topic :: Scientific/Engineering
|
|
38
|
+
Classifier: Intended Audience :: Science/Research
|
|
39
|
+
Classifier: Development Status :: 4 - Beta
|
|
40
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
42
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
43
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
44
|
+
Project-URL: Homepage, https://splineops.github.io/
|
|
45
|
+
Project-URL: Source, https://github.com/splineops/splineops
|
|
46
|
+
Project-URL: Issues, https://github.com/splineops/splineops/issues
|
|
47
|
+
Project-URL: Download, https://github.com/splineops/splineops.git
|
|
48
|
+
Requires-Python: >=3.10
|
|
49
|
+
Requires-Dist: numpy>=1.26
|
|
50
|
+
Requires-Dist: scipy>=1.15
|
|
51
|
+
Requires-Dist: matplotlib>=3.8
|
|
52
|
+
Requires-Dist: requests>=2.32.3
|
|
53
|
+
Provides-Extra: visualization
|
|
54
|
+
Requires-Dist: pooch>=1.8; extra == "visualization"
|
|
55
|
+
Requires-Dist: IPython>=8.26; extra == "visualization"
|
|
56
|
+
Provides-Extra: tests
|
|
57
|
+
Requires-Dist: tox>=4.13; extra == "tests"
|
|
58
|
+
Requires-Dist: pytest>=6.0; extra == "tests"
|
|
59
|
+
Provides-Extra: dev
|
|
60
|
+
Requires-Dist: splineops[tests,visualization]; extra == "dev"
|
|
61
|
+
Requires-Dist: black>=23.10; extra == "dev"
|
|
62
|
+
Requires-Dist: mypy>=1.8; extra == "dev"
|
|
63
|
+
Requires-Dist: build; extra == "dev"
|
|
64
|
+
Provides-Extra: dev-cupy
|
|
65
|
+
Requires-Dist: splineops[dev]; extra == "dev-cupy"
|
|
66
|
+
Requires-Dist: cupy>=12.2; extra == "dev-cupy"
|
|
67
|
+
Provides-Extra: docs
|
|
68
|
+
Requires-Dist: splineops[visualization]; extra == "docs"
|
|
69
|
+
Requires-Dist: sphinx>=7.3; extra == "docs"
|
|
70
|
+
Requires-Dist: sphinx-gallery>=0.17; extra == "docs"
|
|
71
|
+
Requires-Dist: sphinx-prompt>=1.8; extra == "docs"
|
|
72
|
+
Requires-Dist: sphinx-copybutton>=0.5; extra == "docs"
|
|
73
|
+
Requires-Dist: sphinx-remove-toctrees>=1.0; extra == "docs"
|
|
74
|
+
Requires-Dist: sphinx-design>=0.6; extra == "docs"
|
|
75
|
+
Requires-Dist: pydata-sphinx-theme>=0.15; extra == "docs"
|
|
76
|
+
Requires-Dist: myst-parser>=3.0; extra == "docs"
|
|
77
|
+
Requires-Dist: jupyterlite-sphinx>=0.16; extra == "docs"
|
|
78
|
+
Requires-Dist: jupyterlite-pyodide-kernel>=0.4; extra == "docs"
|
|
79
|
+
Description-Content-Type: text/markdown
|
|
80
|
+
|
|
81
|
+
<!-- splineops/README.md -->
|
|
82
|
+
|
|
83
|
+
# SplineOps: Spline Operations
|
|
84
|
+
|
|
85
|
+
See https://splineops.github.io/ for the documentation.
|
|
86
|
+
|
|
87
|
+
`splineops` is a Python-based N-dimensional signal-processing library with
|
|
88
|
+
support for GPU computing.
|
|
89
|
+
|
|
90
|
+
## Installation
|
|
91
|
+
|
|
92
|
+
You need at least `Python 3.10` to install `splineops` (ideally `Python 3.12`). `Python 3.11` is also compatible.
|
|
93
|
+
|
|
94
|
+
Create and activate your Python virtual environment (on Unix or MacOS)
|
|
95
|
+
|
|
96
|
+
```shell
|
|
97
|
+
python -m venv splineops-env
|
|
98
|
+
source splineops-env/bin/activate
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
On Windows,
|
|
102
|
+
|
|
103
|
+
```shell
|
|
104
|
+
python -m venv splineops-env
|
|
105
|
+
.splineops-env/Scripts/Activate
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
To deactivate the environment use
|
|
109
|
+
|
|
110
|
+
```shell
|
|
111
|
+
deactivate
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Minimal requirement:
|
|
115
|
+
|
|
116
|
+
```shell
|
|
117
|
+
pip install numpy scipy matplotlib requests
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Simply install `splineops` using `pip`
|
|
121
|
+
|
|
122
|
+
```shell
|
|
123
|
+
pip install splineops
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Formatting, Type Checking, and Testing
|
|
127
|
+
|
|
128
|
+
Formatting and type checking is performed as
|
|
129
|
+
|
|
130
|
+
```shell
|
|
131
|
+
tox -e format
|
|
132
|
+
tox -e type
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
The testing requires a valid environment with a supported Python version and `tox`
|
|
136
|
+
installed. The tests are run with the following command (automatic pick of the
|
|
137
|
+
Python version)
|
|
138
|
+
|
|
139
|
+
```shell
|
|
140
|
+
tox
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
The tests can also be launched for a specific Python version (must match the one
|
|
144
|
+
installed in the active environment)
|
|
145
|
+
|
|
146
|
+
```shell
|
|
147
|
+
tox -e py310
|
|
148
|
+
tox -e py311
|
|
149
|
+
tox -e py312
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
*IMPORTANT:* Since CI is not implemented, make sure to run, pass, and/or fix
|
|
153
|
+
`tox -e format`, `tox -e type`, and `tox`.
|
|
154
|
+
|
|
155
|
+
## Packaging
|
|
156
|
+
|
|
157
|
+
Using `tox` (preferred)
|
|
158
|
+
|
|
159
|
+
```shell
|
|
160
|
+
tox -e build
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Using `hatch`
|
|
164
|
+
|
|
165
|
+
```shell
|
|
166
|
+
hatch build -t wheel
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Development Environment
|
|
170
|
+
|
|
171
|
+
Install `splineops` development environment in editable mode
|
|
172
|
+
|
|
173
|
+
```shell
|
|
174
|
+
pip install -e .[dev]
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## GPU Compatibility
|
|
178
|
+
|
|
179
|
+
You can benefit of `cupy` to deploy `splineops`. If a specific CUDA version is required, do
|
|
180
|
+
|
|
181
|
+
```shell
|
|
182
|
+
pip install cupy cuda-version=12.3
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Install `splineops` cupy development environment in editable mode
|
|
186
|
+
|
|
187
|
+
```shell
|
|
188
|
+
pip install -e .[dev_cupy]
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Potential other CuPy libraries
|
|
192
|
+
([CuPy from Conda-Forge](https://docs.cupy.dev/en/stable/install.html#installing-cupy-from-conda-forge))
|
|
193
|
+
|
|
194
|
+
```shell
|
|
195
|
+
pip install cupy cutensor cudnn nccl
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Building of the Documentation
|
|
199
|
+
|
|
200
|
+
To build the Sphinx documentation, install `splineops` doc dependencies
|
|
201
|
+
|
|
202
|
+
```shell
|
|
203
|
+
pip install -e .[docs]
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Navigate to the `docs` directory and run the `make html` command
|
|
207
|
+
|
|
208
|
+
```shell
|
|
209
|
+
cd docs
|
|
210
|
+
make html
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Then, go to `docs/_build/html` and open `index.html` to navigate the
|
|
214
|
+
documentation locally.
|
|
215
|
+
|
|
216
|
+
### Troubleshooting
|
|
217
|
+
|
|
218
|
+
If you want to make a "clean" build, go to `docs` and manually delete the folders `_build`, `auto_examples`, `gen_modules`, `notebooks_jupyterlite`, and the file `sg_execution_times.rst`.
|
|
219
|
+
Why isn't this done automatically? Because Sphinx optimizes speed and removes redundant tasks, by not re-creating the examples notebooks if they have already been created.
|
|
220
|
+
If you, for example, modify the name of the examples files, you will have to delete at least the folder `auto_examples`. Otherwise, the old examples files will not have disappeared automatically and Sphinx will raise an internal warning referring to a toctree.
|