InterpolatePy 2.0.1__tar.gz → 3.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.
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.github/workflows/docs.yml +3 -2
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.github/workflows/pre-commit.yml +1 -1
- interpolatepy-3.0.0/.github/workflows/publish.yml +32 -0
- interpolatepy-3.0.0/.github/workflows/test.yml +40 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.gitignore +10 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.pre-commit-config.yaml +2 -2
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/InterpolatePy.egg-info/PKG-INFO +33 -12
- interpolatepy-3.0.0/InterpolatePy.egg-info/SOURCES.txt +213 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/InterpolatePy.egg-info/requires.txt +10 -1
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/PKG-INFO +33 -12
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/README.md +22 -9
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/codecov.yml +0 -2
- interpolatepy-3.0.0/cpp/CMakeLists.txt +169 -0
- interpolatepy-3.0.0/cpp/bindings/CMakeLists.txt +26 -0
- interpolatepy-3.0.0/cpp/bindings/bind_acc_splines.cpp +96 -0
- interpolatepy-3.0.0/cpp/bindings/bind_bspline.cpp +116 -0
- interpolatepy-3.0.0/cpp/bindings/bind_cubic_spline.cpp +39 -0
- interpolatepy-3.0.0/cpp/bindings/bind_motion.cpp +124 -0
- interpolatepy-3.0.0/cpp/bindings/bind_paths.cpp +73 -0
- interpolatepy-3.0.0/cpp/bindings/bind_quaternion.cpp +142 -0
- interpolatepy-3.0.0/cpp/bindings/bind_smoothing_search.cpp +40 -0
- interpolatepy-3.0.0/cpp/bindings/bind_smoothing_spline.cpp +52 -0
- interpolatepy-3.0.0/cpp/bindings/bind_tridiagonal.cpp +13 -0
- interpolatepy-3.0.0/cpp/bindings/module.cpp +45 -0
- interpolatepy-3.0.0/cpp/cmake/InterpolateCppConfig.cmake.in +5 -0
- interpolatepy-3.0.0/cpp/cmake/version.hpp.in +6 -0
- interpolatepy-3.0.0/cpp/examples/CMakeLists.txt +29 -0
- interpolatepy-3.0.0/cpp/examples/bspline_approx_smooth_example.cpp +387 -0
- interpolatepy-3.0.0/cpp/examples/bspline_cubic_example.cpp +182 -0
- interpolatepy-3.0.0/cpp/examples/bspline_example.cpp +229 -0
- interpolatepy-3.0.0/cpp/examples/bspline_interpolator_example.cpp +360 -0
- interpolatepy-3.0.0/cpp/examples/concepts_example.cpp +398 -0
- interpolatepy-3.0.0/cpp/examples/cubic_smoothing_example.cpp +178 -0
- interpolatepy-3.0.0/cpp/examples/cubic_spline_acc1_example.cpp +316 -0
- interpolatepy-3.0.0/cpp/examples/cubic_spline_acc2_example.cpp +113 -0
- interpolatepy-3.0.0/cpp/examples/cubic_spline_example.cpp +67 -0
- interpolatepy-3.0.0/cpp/examples/double_s_example.cpp +222 -0
- interpolatepy-3.0.0/cpp/examples/parabolic_linear_example.cpp +206 -0
- interpolatepy-3.0.0/cpp/examples/paths_example.cpp +326 -0
- interpolatepy-3.0.0/cpp/examples/polynomial_example.cpp +212 -0
- interpolatepy-3.0.0/cpp/examples/quaternion_example.cpp +429 -0
- interpolatepy-3.0.0/cpp/examples/shared/example_utils.hpp +101 -0
- interpolatepy-3.0.0/cpp/examples/trapezoidal_example.cpp +218 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/bspline/approximation_bspline.hpp +58 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/bspline/bspline.hpp +77 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/bspline/bspline_interpolator.hpp +61 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/bspline/bspline_parameters.hpp +27 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/bspline/cubic_bspline_interpolation.hpp +57 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/bspline/smoothing_cubic_bspline.hpp +62 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/concepts.hpp +56 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/config.hpp +15 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/motion/double_s_trajectory.hpp +57 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/motion/motion_types.hpp +64 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/motion/parabolic_blend_trajectory.hpp +52 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/motion/polynomial_trajectory.hpp +63 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/motion/trapezoidal_trajectory.hpp +66 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/path/circular_path.hpp +29 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/path/frenet_frame.hpp +49 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/path/linear_path.hpp +25 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/path/linear_traj.hpp +21 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/quat/log_quaternion_interpolation.hpp +42 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/quat/modified_log_quaternion_interpolation.hpp +58 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/quat/quaternion.hpp +99 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/quat/quaternion_spline.hpp +40 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/quat/squad_c2.hpp +61 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/spline/cubic_smoothing_spline.hpp +82 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/spline/cubic_spline.hpp +71 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/spline/cubic_spline_with_acc1.hpp +76 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/spline/cubic_spline_with_acc2.hpp +53 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/spline/smoothing_search.hpp +35 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/spline/spline_parameters.hpp +28 -0
- interpolatepy-3.0.0/cpp/include/interpolatecpp/tridiagonal.hpp +47 -0
- interpolatepy-3.0.0/cpp/src/approximation_bspline.cpp +208 -0
- interpolatepy-3.0.0/cpp/src/bspline.cpp +308 -0
- interpolatepy-3.0.0/cpp/src/bspline_interpolator.cpp +261 -0
- interpolatepy-3.0.0/cpp/src/circular_path.cpp +61 -0
- interpolatepy-3.0.0/cpp/src/cubic_bspline_interpolation.cpp +213 -0
- interpolatepy-3.0.0/cpp/src/cubic_smoothing_spline.cpp +270 -0
- interpolatepy-3.0.0/cpp/src/cubic_spline.cpp +199 -0
- interpolatepy-3.0.0/cpp/src/cubic_spline_with_acc1.cpp +280 -0
- interpolatepy-3.0.0/cpp/src/cubic_spline_with_acc2.cpp +175 -0
- interpolatepy-3.0.0/cpp/src/double_s_trajectory.cpp +379 -0
- interpolatepy-3.0.0/cpp/src/frenet_frame.cpp +73 -0
- interpolatepy-3.0.0/cpp/src/linear_path.cpp +36 -0
- interpolatepy-3.0.0/cpp/src/linear_traj.cpp +31 -0
- interpolatepy-3.0.0/cpp/src/log_quaternion_interpolation.cpp +132 -0
- interpolatepy-3.0.0/cpp/src/modified_log_quaternion_interpolation.cpp +163 -0
- interpolatepy-3.0.0/cpp/src/parabolic_blend_trajectory.cpp +189 -0
- interpolatepy-3.0.0/cpp/src/polynomial_trajectory.cpp +227 -0
- interpolatepy-3.0.0/cpp/src/quaternion.cpp +252 -0
- interpolatepy-3.0.0/cpp/src/quaternion_spline.cpp +101 -0
- interpolatepy-3.0.0/cpp/src/smoothing_cubic_bspline.cpp +395 -0
- interpolatepy-3.0.0/cpp/src/smoothing_search.cpp +96 -0
- interpolatepy-3.0.0/cpp/src/squad_c2.cpp +192 -0
- interpolatepy-3.0.0/cpp/src/trapezoidal_trajectory.cpp +252 -0
- interpolatepy-3.0.0/cpp/tests/CMakeLists.txt +49 -0
- interpolatepy-3.0.0/cpp/tests/shared/test_data.hpp +37 -0
- interpolatepy-3.0.0/cpp/tests/test_bspline.cpp +449 -0
- interpolatepy-3.0.0/cpp/tests/test_bspline_variants.cpp +558 -0
- interpolatepy-3.0.0/cpp/tests/test_concepts.cpp +67 -0
- interpolatepy-3.0.0/cpp/tests/test_cubic_smoothing_spline.cpp +176 -0
- interpolatepy-3.0.0/cpp/tests/test_cubic_spline.cpp +266 -0
- interpolatepy-3.0.0/cpp/tests/test_cubic_spline_with_acc1.cpp +125 -0
- interpolatepy-3.0.0/cpp/tests/test_cubic_spline_with_acc2.cpp +171 -0
- interpolatepy-3.0.0/cpp/tests/test_double_s_trajectory.cpp +157 -0
- interpolatepy-3.0.0/cpp/tests/test_parabolic_blend_trajectory.cpp +122 -0
- interpolatepy-3.0.0/cpp/tests/test_paths.cpp +292 -0
- interpolatepy-3.0.0/cpp/tests/test_polynomial_trajectory.cpp +223 -0
- interpolatepy-3.0.0/cpp/tests/test_quaternion.cpp +161 -0
- interpolatepy-3.0.0/cpp/tests/test_quaternion_spline.cpp +334 -0
- interpolatepy-3.0.0/cpp/tests/test_smoothing_search.cpp +129 -0
- interpolatepy-3.0.0/cpp/tests/test_trapezoidal_trajectory.cpp +115 -0
- interpolatepy-3.0.0/cpp/tests/test_tridiagonal.cpp +103 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/api-reference.md +164 -4
- interpolatepy-3.0.0/docs/architecture.md +122 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/changelog.md +32 -8
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/contributing.md +65 -13
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/index.md +8 -4
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/installation.md +86 -13
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/quickstart.md +16 -19
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/troubleshooting.md +30 -1
- interpolatepy-3.0.0/docs/tutorials/path-planning.md +248 -0
- interpolatepy-3.0.0/docs/tutorials/quaternion-interpolation.md +212 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/user-guide.md +2 -2
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/double_s_ex.py +4 -4
- interpolatepy-3.0.0/examples/protocols_ex.py +476 -0
- interpolatepy-3.0.0/interpolatepy/__init__.py +111 -0
- interpolatepy-3.0.0/interpolatepy/_adapters/__init__.py +100 -0
- interpolatepy-3.0.0/interpolatepy/_adapters/_bspline.py +77 -0
- interpolatepy-3.0.0/interpolatepy/_adapters/_direct.py +23 -0
- interpolatepy-3.0.0/interpolatepy/_adapters/_motion.py +461 -0
- interpolatepy-3.0.0/interpolatepy/_adapters/_paths.py +130 -0
- interpolatepy-3.0.0/interpolatepy/_adapters/_quaternion.py +177 -0
- interpolatepy-3.0.0/interpolatepy/_adapters/_spline.py +68 -0
- interpolatepy-3.0.0/interpolatepy/_api.py +133 -0
- interpolatepy-3.0.0/interpolatepy/_backend.py +36 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/c_s_smoothing.py +2 -2
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/double_s.py +81 -13
- interpolatepy-3.0.0/interpolatepy/protocols.py +116 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/quat_spline.py +114 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/simple_paths.py +1 -2
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/version.py +1 -1
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/mkdocs.yml +3 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/pyproject.toml +17 -25
- interpolatepy-3.0.0/tests/test_backend.py +151 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_motion_profiles.py +14 -14
- interpolatepy-3.0.0/tests/test_protocols.py +349 -0
- interpolatepy-2.0.1/.github/workflows/publish.yml +0 -29
- interpolatepy-2.0.1/.github/workflows/test.yml +0 -63
- interpolatepy-2.0.1/InterpolatePy.egg-info/SOURCES.txt +0 -98
- interpolatepy-2.0.1/interpolatepy/__init__.py +0 -100
- interpolatepy-2.0.1/requirements-dev.txt +0 -28
- interpolatepy-2.0.1/requirements.txt +0 -4
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.editorconfig +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.gitattributes +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.github/FUNDING.yml +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/ALGORITHMS.md +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/InterpolatePy.egg-info/dependency_links.txt +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/InterpolatePy.egg-info/top_level.txt +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/LICENSE +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/algorithms.md +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/assets/extra.css +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/assets/extra.js +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/examples.md +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/tutorials/motion-profiles.md +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/tutorials/spline-interpolation.md +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/b_spline_approx_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/b_spline_cubic_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/b_spline_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/b_spline_interpolate_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/b_spline_smooth_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/c_s_smoot_search_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/c_s_smoothing_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/c_s_with_acc1_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/c_s_with_acc2_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/cubic_spline_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/frenet_frame_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/lin_poly_parabolic_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/linear_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/log_quat_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/log_quat_new_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/main.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/polynomials_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/quat_visualization_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/simple_paths_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/squad_c2_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/trapezoidal_ex.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/b_spline.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/b_spline_approx.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/b_spline_cubic.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/b_spline_interpolate.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/b_spline_smooth.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/c_s_smoot_search.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/c_s_with_acc1.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/c_s_with_acc2.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/cubic_spline.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/frenet_frame.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/lin_poly_parabolic.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/linear.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/log_quat.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/polynomials.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/quat_core.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/quat_visualization.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/squad_c2.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/trapezoidal.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/tridiagonal_inv.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/setup.cfg +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/__init__.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/inv_test.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_b_spline.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_b_spline_variants.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_cubic_spline.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_lin_poly_parabolic.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_linear.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_log_quat.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_path_planning.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_polynomials.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_quat_interp.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_quat_visualization.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_smoothing.py +0 -0
- {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_squad_c2.py +0 -0
|
@@ -32,6 +32,8 @@ jobs:
|
|
|
32
32
|
steps:
|
|
33
33
|
- name: Checkout repository
|
|
34
34
|
uses: actions/checkout@v4
|
|
35
|
+
with:
|
|
36
|
+
fetch-depth: 0
|
|
35
37
|
|
|
36
38
|
- name: Set up Python
|
|
37
39
|
uses: actions/setup-python@v5
|
|
@@ -42,8 +44,7 @@ jobs:
|
|
|
42
44
|
- name: Install dependencies
|
|
43
45
|
run: |
|
|
44
46
|
python -m pip install --upgrade pip
|
|
45
|
-
pip install -
|
|
46
|
-
pip install -e .
|
|
47
|
+
pip install -e '.[docs]'
|
|
47
48
|
|
|
48
49
|
- name: Build documentation
|
|
49
50
|
run: |
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [created]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
deploy:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
permissions:
|
|
11
|
+
id-token: write
|
|
12
|
+
contents: read
|
|
13
|
+
environment: pypi
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
with:
|
|
17
|
+
fetch-depth: 0
|
|
18
|
+
- name: Set up Python
|
|
19
|
+
uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: '3.12'
|
|
22
|
+
cache: 'pip'
|
|
23
|
+
- name: Install build tools
|
|
24
|
+
run: |
|
|
25
|
+
python -m pip install --upgrade pip
|
|
26
|
+
pip install build twine
|
|
27
|
+
- name: Build package
|
|
28
|
+
run: python -m build
|
|
29
|
+
- name: Verify package
|
|
30
|
+
run: twine check dist/*
|
|
31
|
+
- name: Publish to PyPI
|
|
32
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
|
|
2
|
+
name: ci-test
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [ main, master ]
|
|
7
|
+
pull_request:
|
|
8
|
+
branches: [ main, master ]
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
runs-on: ${{ matrix.os }}
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
os: [ubuntu-latest, macos-latest]
|
|
16
|
+
python-version: ['3.11', '3.12', '3.13']
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 0
|
|
21
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
22
|
+
uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: ${{ matrix.python-version }}
|
|
25
|
+
cache: 'pip'
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: |
|
|
28
|
+
python -m pip install --upgrade pip
|
|
29
|
+
pip install -e '.[test]'
|
|
30
|
+
- name: Testing with coverage
|
|
31
|
+
run: |
|
|
32
|
+
python -m pytest tests --cov=interpolatepy --cov-report=xml --cov-report=term-missing
|
|
33
|
+
- name: Upload coverage to Codecov
|
|
34
|
+
uses: codecov/codecov-action@v5
|
|
35
|
+
with:
|
|
36
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
37
|
+
file: ./coverage.xml
|
|
38
|
+
flags: unittests
|
|
39
|
+
name: codecov-umbrella
|
|
40
|
+
fail_ci_if_error: false
|
|
@@ -12,14 +12,14 @@ repos:
|
|
|
12
12
|
- id: check-toml
|
|
13
13
|
|
|
14
14
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
15
|
-
rev: 'v0.
|
|
15
|
+
rev: 'v0.15.7'
|
|
16
16
|
hooks:
|
|
17
17
|
- id: ruff
|
|
18
18
|
types_or: [python, pyi, jupyter]
|
|
19
19
|
args: [ --fix, --exit-non-zero-on-fix, --preview ]
|
|
20
20
|
|
|
21
21
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
22
|
-
rev: v1.
|
|
22
|
+
rev: v1.19.1
|
|
23
23
|
hooks:
|
|
24
24
|
- id: mypy
|
|
25
25
|
args: [--ignore-missing-imports]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: InterpolatePy
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.0
|
|
4
4
|
Summary: A comprehensive Python library for generating smooth trajectories and curves with precise control over position, velocity, acceleration, and jerk profiles
|
|
5
5
|
Author-email: Giorgio Medico <giorgio.medico11@gmail.com>
|
|
6
6
|
Maintainer-email: Giorgio Medico <giorgio.medico11@gmail.com>
|
|
@@ -17,7 +17,6 @@ Classifier: Intended Audience :: Science/Research
|
|
|
17
17
|
Classifier: Intended Audience :: Developers
|
|
18
18
|
Classifier: Intended Audience :: Education
|
|
19
19
|
Classifier: Programming Language :: Python :: 3
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
@@ -31,6 +30,7 @@ Classifier: Topic :: Scientific/Engineering :: Physics
|
|
|
31
30
|
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
32
31
|
Classifier: Topic :: Software Development :: Libraries
|
|
33
32
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
33
|
+
Classifier: Programming Language :: C++
|
|
34
34
|
Requires-Python: >=3.11
|
|
35
35
|
Description-Content-Type: text/markdown
|
|
36
36
|
License-File: LICENSE
|
|
@@ -50,13 +50,21 @@ Requires-Dist: pre-commit>=4.2.0; extra == "dev"
|
|
|
50
50
|
Requires-Dist: pyright>=1.1.400; extra == "dev"
|
|
51
51
|
Requires-Dist: build>=1.0.3; extra == "dev"
|
|
52
52
|
Requires-Dist: twine>=4.0.2; extra == "dev"
|
|
53
|
+
Provides-Extra: docs
|
|
54
|
+
Requires-Dist: mkdocs>=1.5.3; extra == "docs"
|
|
55
|
+
Requires-Dist: mkdocs-material>=9.4.8; extra == "docs"
|
|
56
|
+
Requires-Dist: pymdown-extensions>=10.3.0; extra == "docs"
|
|
57
|
+
Requires-Dist: mkdocs-autorefs>=0.5.0; extra == "docs"
|
|
58
|
+
Requires-Dist: mkdocstrings>=0.23.0; extra == "docs"
|
|
59
|
+
Requires-Dist: mkdocstrings-python>=1.7.3; extra == "docs"
|
|
60
|
+
Requires-Dist: Pygments>=2.16.1; extra == "docs"
|
|
53
61
|
Provides-Extra: all
|
|
54
|
-
Requires-Dist: interpolatepy[dev,test]; extra == "all"
|
|
62
|
+
Requires-Dist: interpolatepy[dev,docs,test]; extra == "all"
|
|
55
63
|
Dynamic: license-file
|
|
56
64
|
|
|
57
65
|
# InterpolatePy
|
|
58
66
|
|
|
59
|
-

|
|
60
68
|
[](https://pepy.tech/projects/interpolatepy)
|
|
61
69
|
[](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/pre-commit.yml)
|
|
62
70
|
[](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/test.yml)
|
|
@@ -66,9 +74,9 @@ Dynamic: license-file
|
|
|
66
74
|
|
|
67
75
|
InterpolatePy provides 20+ algorithms for smooth trajectory generation with precise control over position, velocity, acceleration, and jerk. From cubic splines and B-curves to quaternion interpolation and S-curve motion profiles — everything you need for professional motion control.
|
|
68
76
|
|
|
69
|
-
**⚡ Fast:**
|
|
70
|
-
**🎯 Precise:** Research-grade algorithms with C² continuity and bounded derivatives
|
|
71
|
-
**📊 Visual:** Built-in plotting for every algorithm
|
|
77
|
+
**⚡ Fast:** Optional C++ backend with pybind11; pure-Python fallback uses vectorized NumPy
|
|
78
|
+
**🎯 Precise:** Research-grade algorithms with C² continuity and bounded derivatives
|
|
79
|
+
**📊 Visual:** Built-in plotting for every algorithm
|
|
72
80
|
**🔧 Complete:** Splines, motion profiles, quaternions, and path planning in one library
|
|
73
81
|
|
|
74
82
|
---
|
|
@@ -79,7 +87,7 @@ InterpolatePy provides 20+ algorithms for smooth trajectory generation with prec
|
|
|
79
87
|
pip install InterpolatePy
|
|
80
88
|
```
|
|
81
89
|
|
|
82
|
-
**Requirements:** Python ≥3.
|
|
90
|
+
**Requirements:** Python ≥3.11, NumPy ≥2.3, SciPy ≥1.16, Matplotlib ≥3.10.5
|
|
83
91
|
|
|
84
92
|
<details>
|
|
85
93
|
<summary><strong>Development Installation</strong></summary>
|
|
@@ -278,12 +286,23 @@ plt.show()
|
|
|
278
286
|
|
|
279
287
|
## Performance & Quality
|
|
280
288
|
|
|
281
|
-
- **Fast:**
|
|
282
|
-
- **Reliable:** 85%+ test coverage, continuous integration
|
|
283
|
-
- **Modern:** Python 3.
|
|
289
|
+
- **Fast:** Optional C++ backend (Eigen + pybind11) for maximum performance; pure-Python fallback uses vectorized NumPy
|
|
290
|
+
- **Reliable:** 85%+ test coverage, continuous integration, 142 additional C++ unit tests
|
|
291
|
+
- **Modern:** Python 3.11+, strict typing, dataclass-based APIs
|
|
284
292
|
- **Research-grade:** Peer-reviewed algorithms from robotics literature
|
|
285
293
|
|
|
286
|
-
**
|
|
294
|
+
**C++ Backend:**
|
|
295
|
+
|
|
296
|
+
InterpolatePy includes an optional compiled C++ extension for performance-critical workloads. The API is identical regardless of backend:
|
|
297
|
+
|
|
298
|
+
```python
|
|
299
|
+
import interpolatepy
|
|
300
|
+
print(f"C++ backend: {interpolatepy.HAS_CPP}") # True if extension is available
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Set `INTERPOLATEPY_NO_CPP=1` to force pure-Python mode.
|
|
304
|
+
|
|
305
|
+
**Typical Performance (pure-Python):**
|
|
287
306
|
- Cubic spline (1000 points): ~1ms
|
|
288
307
|
- B-spline evaluation (10k points): ~5ms
|
|
289
308
|
- S-curve trajectory planning: ~0.5ms
|
|
@@ -312,6 +331,8 @@ ruff format interpolatepy/
|
|
|
312
331
|
ruff check interpolatepy/
|
|
313
332
|
mypy interpolatepy/
|
|
314
333
|
|
|
334
|
+
# Run all pre-commit hooks
|
|
335
|
+
pre-commit run --all-files
|
|
315
336
|
```
|
|
316
337
|
</details>
|
|
317
338
|
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
.editorconfig
|
|
2
|
+
.gitattributes
|
|
3
|
+
.gitignore
|
|
4
|
+
.pre-commit-config.yaml
|
|
5
|
+
ALGORITHMS.md
|
|
6
|
+
LICENSE
|
|
7
|
+
README.md
|
|
8
|
+
codecov.yml
|
|
9
|
+
mkdocs.yml
|
|
10
|
+
pyproject.toml
|
|
11
|
+
.github/FUNDING.yml
|
|
12
|
+
.github/workflows/docs.yml
|
|
13
|
+
.github/workflows/pre-commit.yml
|
|
14
|
+
.github/workflows/publish.yml
|
|
15
|
+
.github/workflows/test.yml
|
|
16
|
+
InterpolatePy.egg-info/PKG-INFO
|
|
17
|
+
InterpolatePy.egg-info/SOURCES.txt
|
|
18
|
+
InterpolatePy.egg-info/dependency_links.txt
|
|
19
|
+
InterpolatePy.egg-info/requires.txt
|
|
20
|
+
InterpolatePy.egg-info/top_level.txt
|
|
21
|
+
cpp/CMakeLists.txt
|
|
22
|
+
cpp/bindings/CMakeLists.txt
|
|
23
|
+
cpp/bindings/bind_acc_splines.cpp
|
|
24
|
+
cpp/bindings/bind_bspline.cpp
|
|
25
|
+
cpp/bindings/bind_cubic_spline.cpp
|
|
26
|
+
cpp/bindings/bind_motion.cpp
|
|
27
|
+
cpp/bindings/bind_paths.cpp
|
|
28
|
+
cpp/bindings/bind_quaternion.cpp
|
|
29
|
+
cpp/bindings/bind_smoothing_search.cpp
|
|
30
|
+
cpp/bindings/bind_smoothing_spline.cpp
|
|
31
|
+
cpp/bindings/bind_tridiagonal.cpp
|
|
32
|
+
cpp/bindings/module.cpp
|
|
33
|
+
cpp/cmake/InterpolateCppConfig.cmake.in
|
|
34
|
+
cpp/cmake/version.hpp.in
|
|
35
|
+
cpp/examples/CMakeLists.txt
|
|
36
|
+
cpp/examples/bspline_approx_smooth_example.cpp
|
|
37
|
+
cpp/examples/bspline_cubic_example.cpp
|
|
38
|
+
cpp/examples/bspline_example.cpp
|
|
39
|
+
cpp/examples/bspline_interpolator_example.cpp
|
|
40
|
+
cpp/examples/concepts_example.cpp
|
|
41
|
+
cpp/examples/cubic_smoothing_example.cpp
|
|
42
|
+
cpp/examples/cubic_spline_acc1_example.cpp
|
|
43
|
+
cpp/examples/cubic_spline_acc2_example.cpp
|
|
44
|
+
cpp/examples/cubic_spline_example.cpp
|
|
45
|
+
cpp/examples/double_s_example.cpp
|
|
46
|
+
cpp/examples/parabolic_linear_example.cpp
|
|
47
|
+
cpp/examples/paths_example.cpp
|
|
48
|
+
cpp/examples/polynomial_example.cpp
|
|
49
|
+
cpp/examples/quaternion_example.cpp
|
|
50
|
+
cpp/examples/trapezoidal_example.cpp
|
|
51
|
+
cpp/examples/shared/example_utils.hpp
|
|
52
|
+
cpp/include/interpolatecpp/concepts.hpp
|
|
53
|
+
cpp/include/interpolatecpp/config.hpp
|
|
54
|
+
cpp/include/interpolatecpp/tridiagonal.hpp
|
|
55
|
+
cpp/include/interpolatecpp/bspline/approximation_bspline.hpp
|
|
56
|
+
cpp/include/interpolatecpp/bspline/bspline.hpp
|
|
57
|
+
cpp/include/interpolatecpp/bspline/bspline_interpolator.hpp
|
|
58
|
+
cpp/include/interpolatecpp/bspline/bspline_parameters.hpp
|
|
59
|
+
cpp/include/interpolatecpp/bspline/cubic_bspline_interpolation.hpp
|
|
60
|
+
cpp/include/interpolatecpp/bspline/smoothing_cubic_bspline.hpp
|
|
61
|
+
cpp/include/interpolatecpp/motion/double_s_trajectory.hpp
|
|
62
|
+
cpp/include/interpolatecpp/motion/motion_types.hpp
|
|
63
|
+
cpp/include/interpolatecpp/motion/parabolic_blend_trajectory.hpp
|
|
64
|
+
cpp/include/interpolatecpp/motion/polynomial_trajectory.hpp
|
|
65
|
+
cpp/include/interpolatecpp/motion/trapezoidal_trajectory.hpp
|
|
66
|
+
cpp/include/interpolatecpp/path/circular_path.hpp
|
|
67
|
+
cpp/include/interpolatecpp/path/frenet_frame.hpp
|
|
68
|
+
cpp/include/interpolatecpp/path/linear_path.hpp
|
|
69
|
+
cpp/include/interpolatecpp/path/linear_traj.hpp
|
|
70
|
+
cpp/include/interpolatecpp/quat/log_quaternion_interpolation.hpp
|
|
71
|
+
cpp/include/interpolatecpp/quat/modified_log_quaternion_interpolation.hpp
|
|
72
|
+
cpp/include/interpolatecpp/quat/quaternion.hpp
|
|
73
|
+
cpp/include/interpolatecpp/quat/quaternion_spline.hpp
|
|
74
|
+
cpp/include/interpolatecpp/quat/squad_c2.hpp
|
|
75
|
+
cpp/include/interpolatecpp/spline/cubic_smoothing_spline.hpp
|
|
76
|
+
cpp/include/interpolatecpp/spline/cubic_spline.hpp
|
|
77
|
+
cpp/include/interpolatecpp/spline/cubic_spline_with_acc1.hpp
|
|
78
|
+
cpp/include/interpolatecpp/spline/cubic_spline_with_acc2.hpp
|
|
79
|
+
cpp/include/interpolatecpp/spline/smoothing_search.hpp
|
|
80
|
+
cpp/include/interpolatecpp/spline/spline_parameters.hpp
|
|
81
|
+
cpp/src/approximation_bspline.cpp
|
|
82
|
+
cpp/src/bspline.cpp
|
|
83
|
+
cpp/src/bspline_interpolator.cpp
|
|
84
|
+
cpp/src/circular_path.cpp
|
|
85
|
+
cpp/src/cubic_bspline_interpolation.cpp
|
|
86
|
+
cpp/src/cubic_smoothing_spline.cpp
|
|
87
|
+
cpp/src/cubic_spline.cpp
|
|
88
|
+
cpp/src/cubic_spline_with_acc1.cpp
|
|
89
|
+
cpp/src/cubic_spline_with_acc2.cpp
|
|
90
|
+
cpp/src/double_s_trajectory.cpp
|
|
91
|
+
cpp/src/frenet_frame.cpp
|
|
92
|
+
cpp/src/linear_path.cpp
|
|
93
|
+
cpp/src/linear_traj.cpp
|
|
94
|
+
cpp/src/log_quaternion_interpolation.cpp
|
|
95
|
+
cpp/src/modified_log_quaternion_interpolation.cpp
|
|
96
|
+
cpp/src/parabolic_blend_trajectory.cpp
|
|
97
|
+
cpp/src/polynomial_trajectory.cpp
|
|
98
|
+
cpp/src/quaternion.cpp
|
|
99
|
+
cpp/src/quaternion_spline.cpp
|
|
100
|
+
cpp/src/smoothing_cubic_bspline.cpp
|
|
101
|
+
cpp/src/smoothing_search.cpp
|
|
102
|
+
cpp/src/squad_c2.cpp
|
|
103
|
+
cpp/src/trapezoidal_trajectory.cpp
|
|
104
|
+
cpp/tests/CMakeLists.txt
|
|
105
|
+
cpp/tests/test_bspline.cpp
|
|
106
|
+
cpp/tests/test_bspline_variants.cpp
|
|
107
|
+
cpp/tests/test_concepts.cpp
|
|
108
|
+
cpp/tests/test_cubic_smoothing_spline.cpp
|
|
109
|
+
cpp/tests/test_cubic_spline.cpp
|
|
110
|
+
cpp/tests/test_cubic_spline_with_acc1.cpp
|
|
111
|
+
cpp/tests/test_cubic_spline_with_acc2.cpp
|
|
112
|
+
cpp/tests/test_double_s_trajectory.cpp
|
|
113
|
+
cpp/tests/test_parabolic_blend_trajectory.cpp
|
|
114
|
+
cpp/tests/test_paths.cpp
|
|
115
|
+
cpp/tests/test_polynomial_trajectory.cpp
|
|
116
|
+
cpp/tests/test_quaternion.cpp
|
|
117
|
+
cpp/tests/test_quaternion_spline.cpp
|
|
118
|
+
cpp/tests/test_smoothing_search.cpp
|
|
119
|
+
cpp/tests/test_trapezoidal_trajectory.cpp
|
|
120
|
+
cpp/tests/test_tridiagonal.cpp
|
|
121
|
+
cpp/tests/shared/test_data.hpp
|
|
122
|
+
docs/algorithms.md
|
|
123
|
+
docs/api-reference.md
|
|
124
|
+
docs/architecture.md
|
|
125
|
+
docs/changelog.md
|
|
126
|
+
docs/contributing.md
|
|
127
|
+
docs/examples.md
|
|
128
|
+
docs/index.md
|
|
129
|
+
docs/installation.md
|
|
130
|
+
docs/quickstart.md
|
|
131
|
+
docs/troubleshooting.md
|
|
132
|
+
docs/user-guide.md
|
|
133
|
+
docs/assets/extra.css
|
|
134
|
+
docs/assets/extra.js
|
|
135
|
+
docs/tutorials/motion-profiles.md
|
|
136
|
+
docs/tutorials/path-planning.md
|
|
137
|
+
docs/tutorials/quaternion-interpolation.md
|
|
138
|
+
docs/tutorials/spline-interpolation.md
|
|
139
|
+
examples/b_spline_approx_ex.py
|
|
140
|
+
examples/b_spline_cubic_ex.py
|
|
141
|
+
examples/b_spline_ex.py
|
|
142
|
+
examples/b_spline_interpolate_ex.py
|
|
143
|
+
examples/b_spline_smooth_ex.py
|
|
144
|
+
examples/c_s_smoot_search_ex.py
|
|
145
|
+
examples/c_s_smoothing_ex.py
|
|
146
|
+
examples/c_s_with_acc1_ex.py
|
|
147
|
+
examples/c_s_with_acc2_ex.py
|
|
148
|
+
examples/cubic_spline_ex.py
|
|
149
|
+
examples/double_s_ex.py
|
|
150
|
+
examples/frenet_frame_ex.py
|
|
151
|
+
examples/lin_poly_parabolic_ex.py
|
|
152
|
+
examples/linear_ex.py
|
|
153
|
+
examples/log_quat_ex.py
|
|
154
|
+
examples/log_quat_new_ex.py
|
|
155
|
+
examples/main.py
|
|
156
|
+
examples/polynomials_ex.py
|
|
157
|
+
examples/protocols_ex.py
|
|
158
|
+
examples/quat_visualization_ex.py
|
|
159
|
+
examples/simple_paths_ex.py
|
|
160
|
+
examples/squad_c2_ex.py
|
|
161
|
+
examples/trapezoidal_ex.py
|
|
162
|
+
interpolatepy/__init__.py
|
|
163
|
+
interpolatepy/_api.py
|
|
164
|
+
interpolatepy/_backend.py
|
|
165
|
+
interpolatepy/b_spline.py
|
|
166
|
+
interpolatepy/b_spline_approx.py
|
|
167
|
+
interpolatepy/b_spline_cubic.py
|
|
168
|
+
interpolatepy/b_spline_interpolate.py
|
|
169
|
+
interpolatepy/b_spline_smooth.py
|
|
170
|
+
interpolatepy/c_s_smoot_search.py
|
|
171
|
+
interpolatepy/c_s_smoothing.py
|
|
172
|
+
interpolatepy/c_s_with_acc1.py
|
|
173
|
+
interpolatepy/c_s_with_acc2.py
|
|
174
|
+
interpolatepy/cubic_spline.py
|
|
175
|
+
interpolatepy/double_s.py
|
|
176
|
+
interpolatepy/frenet_frame.py
|
|
177
|
+
interpolatepy/lin_poly_parabolic.py
|
|
178
|
+
interpolatepy/linear.py
|
|
179
|
+
interpolatepy/log_quat.py
|
|
180
|
+
interpolatepy/polynomials.py
|
|
181
|
+
interpolatepy/protocols.py
|
|
182
|
+
interpolatepy/quat_core.py
|
|
183
|
+
interpolatepy/quat_spline.py
|
|
184
|
+
interpolatepy/quat_visualization.py
|
|
185
|
+
interpolatepy/simple_paths.py
|
|
186
|
+
interpolatepy/squad_c2.py
|
|
187
|
+
interpolatepy/trapezoidal.py
|
|
188
|
+
interpolatepy/tridiagonal_inv.py
|
|
189
|
+
interpolatepy/version.py
|
|
190
|
+
interpolatepy/_adapters/__init__.py
|
|
191
|
+
interpolatepy/_adapters/_bspline.py
|
|
192
|
+
interpolatepy/_adapters/_direct.py
|
|
193
|
+
interpolatepy/_adapters/_motion.py
|
|
194
|
+
interpolatepy/_adapters/_paths.py
|
|
195
|
+
interpolatepy/_adapters/_quaternion.py
|
|
196
|
+
interpolatepy/_adapters/_spline.py
|
|
197
|
+
tests/__init__.py
|
|
198
|
+
tests/inv_test.py
|
|
199
|
+
tests/test_b_spline.py
|
|
200
|
+
tests/test_b_spline_variants.py
|
|
201
|
+
tests/test_backend.py
|
|
202
|
+
tests/test_cubic_spline.py
|
|
203
|
+
tests/test_lin_poly_parabolic.py
|
|
204
|
+
tests/test_linear.py
|
|
205
|
+
tests/test_log_quat.py
|
|
206
|
+
tests/test_motion_profiles.py
|
|
207
|
+
tests/test_path_planning.py
|
|
208
|
+
tests/test_polynomials.py
|
|
209
|
+
tests/test_protocols.py
|
|
210
|
+
tests/test_quat_interp.py
|
|
211
|
+
tests/test_quat_visualization.py
|
|
212
|
+
tests/test_smoothing.py
|
|
213
|
+
tests/test_squad_c2.py
|
|
@@ -3,7 +3,7 @@ matplotlib>=3.10.5
|
|
|
3
3
|
scipy>=1.16.0
|
|
4
4
|
|
|
5
5
|
[all]
|
|
6
|
-
interpolatepy[dev,test]
|
|
6
|
+
interpolatepy[dev,docs,test]
|
|
7
7
|
|
|
8
8
|
[dev]
|
|
9
9
|
ruff>=0.12.8
|
|
@@ -13,6 +13,15 @@ pyright>=1.1.400
|
|
|
13
13
|
build>=1.0.3
|
|
14
14
|
twine>=4.0.2
|
|
15
15
|
|
|
16
|
+
[docs]
|
|
17
|
+
mkdocs>=1.5.3
|
|
18
|
+
mkdocs-material>=9.4.8
|
|
19
|
+
pymdown-extensions>=10.3.0
|
|
20
|
+
mkdocs-autorefs>=0.5.0
|
|
21
|
+
mkdocstrings>=0.23.0
|
|
22
|
+
mkdocstrings-python>=1.7.3
|
|
23
|
+
Pygments>=2.16.1
|
|
24
|
+
|
|
16
25
|
[test]
|
|
17
26
|
pytest>=8.4.0
|
|
18
27
|
pytest-cov>=4.1.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: InterpolatePy
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.0
|
|
4
4
|
Summary: A comprehensive Python library for generating smooth trajectories and curves with precise control over position, velocity, acceleration, and jerk profiles
|
|
5
5
|
Author-email: Giorgio Medico <giorgio.medico11@gmail.com>
|
|
6
6
|
Maintainer-email: Giorgio Medico <giorgio.medico11@gmail.com>
|
|
@@ -17,7 +17,6 @@ Classifier: Intended Audience :: Science/Research
|
|
|
17
17
|
Classifier: Intended Audience :: Developers
|
|
18
18
|
Classifier: Intended Audience :: Education
|
|
19
19
|
Classifier: Programming Language :: Python :: 3
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
@@ -31,6 +30,7 @@ Classifier: Topic :: Scientific/Engineering :: Physics
|
|
|
31
30
|
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
32
31
|
Classifier: Topic :: Software Development :: Libraries
|
|
33
32
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
33
|
+
Classifier: Programming Language :: C++
|
|
34
34
|
Requires-Python: >=3.11
|
|
35
35
|
Description-Content-Type: text/markdown
|
|
36
36
|
License-File: LICENSE
|
|
@@ -50,13 +50,21 @@ Requires-Dist: pre-commit>=4.2.0; extra == "dev"
|
|
|
50
50
|
Requires-Dist: pyright>=1.1.400; extra == "dev"
|
|
51
51
|
Requires-Dist: build>=1.0.3; extra == "dev"
|
|
52
52
|
Requires-Dist: twine>=4.0.2; extra == "dev"
|
|
53
|
+
Provides-Extra: docs
|
|
54
|
+
Requires-Dist: mkdocs>=1.5.3; extra == "docs"
|
|
55
|
+
Requires-Dist: mkdocs-material>=9.4.8; extra == "docs"
|
|
56
|
+
Requires-Dist: pymdown-extensions>=10.3.0; extra == "docs"
|
|
57
|
+
Requires-Dist: mkdocs-autorefs>=0.5.0; extra == "docs"
|
|
58
|
+
Requires-Dist: mkdocstrings>=0.23.0; extra == "docs"
|
|
59
|
+
Requires-Dist: mkdocstrings-python>=1.7.3; extra == "docs"
|
|
60
|
+
Requires-Dist: Pygments>=2.16.1; extra == "docs"
|
|
53
61
|
Provides-Extra: all
|
|
54
|
-
Requires-Dist: interpolatepy[dev,test]; extra == "all"
|
|
62
|
+
Requires-Dist: interpolatepy[dev,docs,test]; extra == "all"
|
|
55
63
|
Dynamic: license-file
|
|
56
64
|
|
|
57
65
|
# InterpolatePy
|
|
58
66
|
|
|
59
|
-

|
|
60
68
|
[](https://pepy.tech/projects/interpolatepy)
|
|
61
69
|
[](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/pre-commit.yml)
|
|
62
70
|
[](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/test.yml)
|
|
@@ -66,9 +74,9 @@ Dynamic: license-file
|
|
|
66
74
|
|
|
67
75
|
InterpolatePy provides 20+ algorithms for smooth trajectory generation with precise control over position, velocity, acceleration, and jerk. From cubic splines and B-curves to quaternion interpolation and S-curve motion profiles — everything you need for professional motion control.
|
|
68
76
|
|
|
69
|
-
**⚡ Fast:**
|
|
70
|
-
**🎯 Precise:** Research-grade algorithms with C² continuity and bounded derivatives
|
|
71
|
-
**📊 Visual:** Built-in plotting for every algorithm
|
|
77
|
+
**⚡ Fast:** Optional C++ backend with pybind11; pure-Python fallback uses vectorized NumPy
|
|
78
|
+
**🎯 Precise:** Research-grade algorithms with C² continuity and bounded derivatives
|
|
79
|
+
**📊 Visual:** Built-in plotting for every algorithm
|
|
72
80
|
**🔧 Complete:** Splines, motion profiles, quaternions, and path planning in one library
|
|
73
81
|
|
|
74
82
|
---
|
|
@@ -79,7 +87,7 @@ InterpolatePy provides 20+ algorithms for smooth trajectory generation with prec
|
|
|
79
87
|
pip install InterpolatePy
|
|
80
88
|
```
|
|
81
89
|
|
|
82
|
-
**Requirements:** Python ≥3.
|
|
90
|
+
**Requirements:** Python ≥3.11, NumPy ≥2.3, SciPy ≥1.16, Matplotlib ≥3.10.5
|
|
83
91
|
|
|
84
92
|
<details>
|
|
85
93
|
<summary><strong>Development Installation</strong></summary>
|
|
@@ -278,12 +286,23 @@ plt.show()
|
|
|
278
286
|
|
|
279
287
|
## Performance & Quality
|
|
280
288
|
|
|
281
|
-
- **Fast:**
|
|
282
|
-
- **Reliable:** 85%+ test coverage, continuous integration
|
|
283
|
-
- **Modern:** Python 3.
|
|
289
|
+
- **Fast:** Optional C++ backend (Eigen + pybind11) for maximum performance; pure-Python fallback uses vectorized NumPy
|
|
290
|
+
- **Reliable:** 85%+ test coverage, continuous integration, 142 additional C++ unit tests
|
|
291
|
+
- **Modern:** Python 3.11+, strict typing, dataclass-based APIs
|
|
284
292
|
- **Research-grade:** Peer-reviewed algorithms from robotics literature
|
|
285
293
|
|
|
286
|
-
**
|
|
294
|
+
**C++ Backend:**
|
|
295
|
+
|
|
296
|
+
InterpolatePy includes an optional compiled C++ extension for performance-critical workloads. The API is identical regardless of backend:
|
|
297
|
+
|
|
298
|
+
```python
|
|
299
|
+
import interpolatepy
|
|
300
|
+
print(f"C++ backend: {interpolatepy.HAS_CPP}") # True if extension is available
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Set `INTERPOLATEPY_NO_CPP=1` to force pure-Python mode.
|
|
304
|
+
|
|
305
|
+
**Typical Performance (pure-Python):**
|
|
287
306
|
- Cubic spline (1000 points): ~1ms
|
|
288
307
|
- B-spline evaluation (10k points): ~5ms
|
|
289
308
|
- S-curve trajectory planning: ~0.5ms
|
|
@@ -312,6 +331,8 @@ ruff format interpolatepy/
|
|
|
312
331
|
ruff check interpolatepy/
|
|
313
332
|
mypy interpolatepy/
|
|
314
333
|
|
|
334
|
+
# Run all pre-commit hooks
|
|
335
|
+
pre-commit run --all-files
|
|
315
336
|
```
|
|
316
337
|
</details>
|
|
317
338
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# InterpolatePy
|
|
2
2
|
|
|
3
|
-

|
|
4
4
|
[](https://pepy.tech/projects/interpolatepy)
|
|
5
5
|
[](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/pre-commit.yml)
|
|
6
6
|
[](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/test.yml)
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
|
|
11
11
|
InterpolatePy provides 20+ algorithms for smooth trajectory generation with precise control over position, velocity, acceleration, and jerk. From cubic splines and B-curves to quaternion interpolation and S-curve motion profiles — everything you need for professional motion control.
|
|
12
12
|
|
|
13
|
-
**⚡ Fast:**
|
|
14
|
-
**🎯 Precise:** Research-grade algorithms with C² continuity and bounded derivatives
|
|
15
|
-
**📊 Visual:** Built-in plotting for every algorithm
|
|
13
|
+
**⚡ Fast:** Optional C++ backend with pybind11; pure-Python fallback uses vectorized NumPy
|
|
14
|
+
**🎯 Precise:** Research-grade algorithms with C² continuity and bounded derivatives
|
|
15
|
+
**📊 Visual:** Built-in plotting for every algorithm
|
|
16
16
|
**🔧 Complete:** Splines, motion profiles, quaternions, and path planning in one library
|
|
17
17
|
|
|
18
18
|
---
|
|
@@ -23,7 +23,7 @@ InterpolatePy provides 20+ algorithms for smooth trajectory generation with prec
|
|
|
23
23
|
pip install InterpolatePy
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
**Requirements:** Python ≥3.
|
|
26
|
+
**Requirements:** Python ≥3.11, NumPy ≥2.3, SciPy ≥1.16, Matplotlib ≥3.10.5
|
|
27
27
|
|
|
28
28
|
<details>
|
|
29
29
|
<summary><strong>Development Installation</strong></summary>
|
|
@@ -222,12 +222,23 @@ plt.show()
|
|
|
222
222
|
|
|
223
223
|
## Performance & Quality
|
|
224
224
|
|
|
225
|
-
- **Fast:**
|
|
226
|
-
- **Reliable:** 85%+ test coverage, continuous integration
|
|
227
|
-
- **Modern:** Python 3.
|
|
225
|
+
- **Fast:** Optional C++ backend (Eigen + pybind11) for maximum performance; pure-Python fallback uses vectorized NumPy
|
|
226
|
+
- **Reliable:** 85%+ test coverage, continuous integration, 142 additional C++ unit tests
|
|
227
|
+
- **Modern:** Python 3.11+, strict typing, dataclass-based APIs
|
|
228
228
|
- **Research-grade:** Peer-reviewed algorithms from robotics literature
|
|
229
229
|
|
|
230
|
-
**
|
|
230
|
+
**C++ Backend:**
|
|
231
|
+
|
|
232
|
+
InterpolatePy includes an optional compiled C++ extension for performance-critical workloads. The API is identical regardless of backend:
|
|
233
|
+
|
|
234
|
+
```python
|
|
235
|
+
import interpolatepy
|
|
236
|
+
print(f"C++ backend: {interpolatepy.HAS_CPP}") # True if extension is available
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Set `INTERPOLATEPY_NO_CPP=1` to force pure-Python mode.
|
|
240
|
+
|
|
241
|
+
**Typical Performance (pure-Python):**
|
|
231
242
|
- Cubic spline (1000 points): ~1ms
|
|
232
243
|
- B-spline evaluation (10k points): ~5ms
|
|
233
244
|
- S-curve trajectory planning: ~0.5ms
|
|
@@ -256,6 +267,8 @@ ruff format interpolatepy/
|
|
|
256
267
|
ruff check interpolatepy/
|
|
257
268
|
mypy interpolatepy/
|
|
258
269
|
|
|
270
|
+
# Run all pre-commit hooks
|
|
271
|
+
pre-commit run --all-files
|
|
259
272
|
```
|
|
260
273
|
</details>
|
|
261
274
|
|