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.
Files changed (221) hide show
  1. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.github/workflows/docs.yml +3 -2
  2. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.github/workflows/pre-commit.yml +1 -1
  3. interpolatepy-3.0.0/.github/workflows/publish.yml +32 -0
  4. interpolatepy-3.0.0/.github/workflows/test.yml +40 -0
  5. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.gitignore +10 -0
  6. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.pre-commit-config.yaml +2 -2
  7. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/InterpolatePy.egg-info/PKG-INFO +33 -12
  8. interpolatepy-3.0.0/InterpolatePy.egg-info/SOURCES.txt +213 -0
  9. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/InterpolatePy.egg-info/requires.txt +10 -1
  10. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/PKG-INFO +33 -12
  11. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/README.md +22 -9
  12. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/codecov.yml +0 -2
  13. interpolatepy-3.0.0/cpp/CMakeLists.txt +169 -0
  14. interpolatepy-3.0.0/cpp/bindings/CMakeLists.txt +26 -0
  15. interpolatepy-3.0.0/cpp/bindings/bind_acc_splines.cpp +96 -0
  16. interpolatepy-3.0.0/cpp/bindings/bind_bspline.cpp +116 -0
  17. interpolatepy-3.0.0/cpp/bindings/bind_cubic_spline.cpp +39 -0
  18. interpolatepy-3.0.0/cpp/bindings/bind_motion.cpp +124 -0
  19. interpolatepy-3.0.0/cpp/bindings/bind_paths.cpp +73 -0
  20. interpolatepy-3.0.0/cpp/bindings/bind_quaternion.cpp +142 -0
  21. interpolatepy-3.0.0/cpp/bindings/bind_smoothing_search.cpp +40 -0
  22. interpolatepy-3.0.0/cpp/bindings/bind_smoothing_spline.cpp +52 -0
  23. interpolatepy-3.0.0/cpp/bindings/bind_tridiagonal.cpp +13 -0
  24. interpolatepy-3.0.0/cpp/bindings/module.cpp +45 -0
  25. interpolatepy-3.0.0/cpp/cmake/InterpolateCppConfig.cmake.in +5 -0
  26. interpolatepy-3.0.0/cpp/cmake/version.hpp.in +6 -0
  27. interpolatepy-3.0.0/cpp/examples/CMakeLists.txt +29 -0
  28. interpolatepy-3.0.0/cpp/examples/bspline_approx_smooth_example.cpp +387 -0
  29. interpolatepy-3.0.0/cpp/examples/bspline_cubic_example.cpp +182 -0
  30. interpolatepy-3.0.0/cpp/examples/bspline_example.cpp +229 -0
  31. interpolatepy-3.0.0/cpp/examples/bspline_interpolator_example.cpp +360 -0
  32. interpolatepy-3.0.0/cpp/examples/concepts_example.cpp +398 -0
  33. interpolatepy-3.0.0/cpp/examples/cubic_smoothing_example.cpp +178 -0
  34. interpolatepy-3.0.0/cpp/examples/cubic_spline_acc1_example.cpp +316 -0
  35. interpolatepy-3.0.0/cpp/examples/cubic_spline_acc2_example.cpp +113 -0
  36. interpolatepy-3.0.0/cpp/examples/cubic_spline_example.cpp +67 -0
  37. interpolatepy-3.0.0/cpp/examples/double_s_example.cpp +222 -0
  38. interpolatepy-3.0.0/cpp/examples/parabolic_linear_example.cpp +206 -0
  39. interpolatepy-3.0.0/cpp/examples/paths_example.cpp +326 -0
  40. interpolatepy-3.0.0/cpp/examples/polynomial_example.cpp +212 -0
  41. interpolatepy-3.0.0/cpp/examples/quaternion_example.cpp +429 -0
  42. interpolatepy-3.0.0/cpp/examples/shared/example_utils.hpp +101 -0
  43. interpolatepy-3.0.0/cpp/examples/trapezoidal_example.cpp +218 -0
  44. interpolatepy-3.0.0/cpp/include/interpolatecpp/bspline/approximation_bspline.hpp +58 -0
  45. interpolatepy-3.0.0/cpp/include/interpolatecpp/bspline/bspline.hpp +77 -0
  46. interpolatepy-3.0.0/cpp/include/interpolatecpp/bspline/bspline_interpolator.hpp +61 -0
  47. interpolatepy-3.0.0/cpp/include/interpolatecpp/bspline/bspline_parameters.hpp +27 -0
  48. interpolatepy-3.0.0/cpp/include/interpolatecpp/bspline/cubic_bspline_interpolation.hpp +57 -0
  49. interpolatepy-3.0.0/cpp/include/interpolatecpp/bspline/smoothing_cubic_bspline.hpp +62 -0
  50. interpolatepy-3.0.0/cpp/include/interpolatecpp/concepts.hpp +56 -0
  51. interpolatepy-3.0.0/cpp/include/interpolatecpp/config.hpp +15 -0
  52. interpolatepy-3.0.0/cpp/include/interpolatecpp/motion/double_s_trajectory.hpp +57 -0
  53. interpolatepy-3.0.0/cpp/include/interpolatecpp/motion/motion_types.hpp +64 -0
  54. interpolatepy-3.0.0/cpp/include/interpolatecpp/motion/parabolic_blend_trajectory.hpp +52 -0
  55. interpolatepy-3.0.0/cpp/include/interpolatecpp/motion/polynomial_trajectory.hpp +63 -0
  56. interpolatepy-3.0.0/cpp/include/interpolatecpp/motion/trapezoidal_trajectory.hpp +66 -0
  57. interpolatepy-3.0.0/cpp/include/interpolatecpp/path/circular_path.hpp +29 -0
  58. interpolatepy-3.0.0/cpp/include/interpolatecpp/path/frenet_frame.hpp +49 -0
  59. interpolatepy-3.0.0/cpp/include/interpolatecpp/path/linear_path.hpp +25 -0
  60. interpolatepy-3.0.0/cpp/include/interpolatecpp/path/linear_traj.hpp +21 -0
  61. interpolatepy-3.0.0/cpp/include/interpolatecpp/quat/log_quaternion_interpolation.hpp +42 -0
  62. interpolatepy-3.0.0/cpp/include/interpolatecpp/quat/modified_log_quaternion_interpolation.hpp +58 -0
  63. interpolatepy-3.0.0/cpp/include/interpolatecpp/quat/quaternion.hpp +99 -0
  64. interpolatepy-3.0.0/cpp/include/interpolatecpp/quat/quaternion_spline.hpp +40 -0
  65. interpolatepy-3.0.0/cpp/include/interpolatecpp/quat/squad_c2.hpp +61 -0
  66. interpolatepy-3.0.0/cpp/include/interpolatecpp/spline/cubic_smoothing_spline.hpp +82 -0
  67. interpolatepy-3.0.0/cpp/include/interpolatecpp/spline/cubic_spline.hpp +71 -0
  68. interpolatepy-3.0.0/cpp/include/interpolatecpp/spline/cubic_spline_with_acc1.hpp +76 -0
  69. interpolatepy-3.0.0/cpp/include/interpolatecpp/spline/cubic_spline_with_acc2.hpp +53 -0
  70. interpolatepy-3.0.0/cpp/include/interpolatecpp/spline/smoothing_search.hpp +35 -0
  71. interpolatepy-3.0.0/cpp/include/interpolatecpp/spline/spline_parameters.hpp +28 -0
  72. interpolatepy-3.0.0/cpp/include/interpolatecpp/tridiagonal.hpp +47 -0
  73. interpolatepy-3.0.0/cpp/src/approximation_bspline.cpp +208 -0
  74. interpolatepy-3.0.0/cpp/src/bspline.cpp +308 -0
  75. interpolatepy-3.0.0/cpp/src/bspline_interpolator.cpp +261 -0
  76. interpolatepy-3.0.0/cpp/src/circular_path.cpp +61 -0
  77. interpolatepy-3.0.0/cpp/src/cubic_bspline_interpolation.cpp +213 -0
  78. interpolatepy-3.0.0/cpp/src/cubic_smoothing_spline.cpp +270 -0
  79. interpolatepy-3.0.0/cpp/src/cubic_spline.cpp +199 -0
  80. interpolatepy-3.0.0/cpp/src/cubic_spline_with_acc1.cpp +280 -0
  81. interpolatepy-3.0.0/cpp/src/cubic_spline_with_acc2.cpp +175 -0
  82. interpolatepy-3.0.0/cpp/src/double_s_trajectory.cpp +379 -0
  83. interpolatepy-3.0.0/cpp/src/frenet_frame.cpp +73 -0
  84. interpolatepy-3.0.0/cpp/src/linear_path.cpp +36 -0
  85. interpolatepy-3.0.0/cpp/src/linear_traj.cpp +31 -0
  86. interpolatepy-3.0.0/cpp/src/log_quaternion_interpolation.cpp +132 -0
  87. interpolatepy-3.0.0/cpp/src/modified_log_quaternion_interpolation.cpp +163 -0
  88. interpolatepy-3.0.0/cpp/src/parabolic_blend_trajectory.cpp +189 -0
  89. interpolatepy-3.0.0/cpp/src/polynomial_trajectory.cpp +227 -0
  90. interpolatepy-3.0.0/cpp/src/quaternion.cpp +252 -0
  91. interpolatepy-3.0.0/cpp/src/quaternion_spline.cpp +101 -0
  92. interpolatepy-3.0.0/cpp/src/smoothing_cubic_bspline.cpp +395 -0
  93. interpolatepy-3.0.0/cpp/src/smoothing_search.cpp +96 -0
  94. interpolatepy-3.0.0/cpp/src/squad_c2.cpp +192 -0
  95. interpolatepy-3.0.0/cpp/src/trapezoidal_trajectory.cpp +252 -0
  96. interpolatepy-3.0.0/cpp/tests/CMakeLists.txt +49 -0
  97. interpolatepy-3.0.0/cpp/tests/shared/test_data.hpp +37 -0
  98. interpolatepy-3.0.0/cpp/tests/test_bspline.cpp +449 -0
  99. interpolatepy-3.0.0/cpp/tests/test_bspline_variants.cpp +558 -0
  100. interpolatepy-3.0.0/cpp/tests/test_concepts.cpp +67 -0
  101. interpolatepy-3.0.0/cpp/tests/test_cubic_smoothing_spline.cpp +176 -0
  102. interpolatepy-3.0.0/cpp/tests/test_cubic_spline.cpp +266 -0
  103. interpolatepy-3.0.0/cpp/tests/test_cubic_spline_with_acc1.cpp +125 -0
  104. interpolatepy-3.0.0/cpp/tests/test_cubic_spline_with_acc2.cpp +171 -0
  105. interpolatepy-3.0.0/cpp/tests/test_double_s_trajectory.cpp +157 -0
  106. interpolatepy-3.0.0/cpp/tests/test_parabolic_blend_trajectory.cpp +122 -0
  107. interpolatepy-3.0.0/cpp/tests/test_paths.cpp +292 -0
  108. interpolatepy-3.0.0/cpp/tests/test_polynomial_trajectory.cpp +223 -0
  109. interpolatepy-3.0.0/cpp/tests/test_quaternion.cpp +161 -0
  110. interpolatepy-3.0.0/cpp/tests/test_quaternion_spline.cpp +334 -0
  111. interpolatepy-3.0.0/cpp/tests/test_smoothing_search.cpp +129 -0
  112. interpolatepy-3.0.0/cpp/tests/test_trapezoidal_trajectory.cpp +115 -0
  113. interpolatepy-3.0.0/cpp/tests/test_tridiagonal.cpp +103 -0
  114. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/api-reference.md +164 -4
  115. interpolatepy-3.0.0/docs/architecture.md +122 -0
  116. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/changelog.md +32 -8
  117. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/contributing.md +65 -13
  118. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/index.md +8 -4
  119. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/installation.md +86 -13
  120. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/quickstart.md +16 -19
  121. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/troubleshooting.md +30 -1
  122. interpolatepy-3.0.0/docs/tutorials/path-planning.md +248 -0
  123. interpolatepy-3.0.0/docs/tutorials/quaternion-interpolation.md +212 -0
  124. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/user-guide.md +2 -2
  125. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/double_s_ex.py +4 -4
  126. interpolatepy-3.0.0/examples/protocols_ex.py +476 -0
  127. interpolatepy-3.0.0/interpolatepy/__init__.py +111 -0
  128. interpolatepy-3.0.0/interpolatepy/_adapters/__init__.py +100 -0
  129. interpolatepy-3.0.0/interpolatepy/_adapters/_bspline.py +77 -0
  130. interpolatepy-3.0.0/interpolatepy/_adapters/_direct.py +23 -0
  131. interpolatepy-3.0.0/interpolatepy/_adapters/_motion.py +461 -0
  132. interpolatepy-3.0.0/interpolatepy/_adapters/_paths.py +130 -0
  133. interpolatepy-3.0.0/interpolatepy/_adapters/_quaternion.py +177 -0
  134. interpolatepy-3.0.0/interpolatepy/_adapters/_spline.py +68 -0
  135. interpolatepy-3.0.0/interpolatepy/_api.py +133 -0
  136. interpolatepy-3.0.0/interpolatepy/_backend.py +36 -0
  137. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/c_s_smoothing.py +2 -2
  138. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/double_s.py +81 -13
  139. interpolatepy-3.0.0/interpolatepy/protocols.py +116 -0
  140. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/quat_spline.py +114 -0
  141. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/simple_paths.py +1 -2
  142. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/version.py +1 -1
  143. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/mkdocs.yml +3 -0
  144. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/pyproject.toml +17 -25
  145. interpolatepy-3.0.0/tests/test_backend.py +151 -0
  146. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_motion_profiles.py +14 -14
  147. interpolatepy-3.0.0/tests/test_protocols.py +349 -0
  148. interpolatepy-2.0.1/.github/workflows/publish.yml +0 -29
  149. interpolatepy-2.0.1/.github/workflows/test.yml +0 -63
  150. interpolatepy-2.0.1/InterpolatePy.egg-info/SOURCES.txt +0 -98
  151. interpolatepy-2.0.1/interpolatepy/__init__.py +0 -100
  152. interpolatepy-2.0.1/requirements-dev.txt +0 -28
  153. interpolatepy-2.0.1/requirements.txt +0 -4
  154. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.editorconfig +0 -0
  155. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.gitattributes +0 -0
  156. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/.github/FUNDING.yml +0 -0
  157. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/ALGORITHMS.md +0 -0
  158. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/InterpolatePy.egg-info/dependency_links.txt +0 -0
  159. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/InterpolatePy.egg-info/top_level.txt +0 -0
  160. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/LICENSE +0 -0
  161. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/algorithms.md +0 -0
  162. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/assets/extra.css +0 -0
  163. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/assets/extra.js +0 -0
  164. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/examples.md +0 -0
  165. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/tutorials/motion-profiles.md +0 -0
  166. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/docs/tutorials/spline-interpolation.md +0 -0
  167. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/b_spline_approx_ex.py +0 -0
  168. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/b_spline_cubic_ex.py +0 -0
  169. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/b_spline_ex.py +0 -0
  170. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/b_spline_interpolate_ex.py +0 -0
  171. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/b_spline_smooth_ex.py +0 -0
  172. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/c_s_smoot_search_ex.py +0 -0
  173. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/c_s_smoothing_ex.py +0 -0
  174. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/c_s_with_acc1_ex.py +0 -0
  175. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/c_s_with_acc2_ex.py +0 -0
  176. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/cubic_spline_ex.py +0 -0
  177. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/frenet_frame_ex.py +0 -0
  178. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/lin_poly_parabolic_ex.py +0 -0
  179. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/linear_ex.py +0 -0
  180. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/log_quat_ex.py +0 -0
  181. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/log_quat_new_ex.py +0 -0
  182. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/main.py +0 -0
  183. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/polynomials_ex.py +0 -0
  184. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/quat_visualization_ex.py +0 -0
  185. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/simple_paths_ex.py +0 -0
  186. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/squad_c2_ex.py +0 -0
  187. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/examples/trapezoidal_ex.py +0 -0
  188. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/b_spline.py +0 -0
  189. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/b_spline_approx.py +0 -0
  190. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/b_spline_cubic.py +0 -0
  191. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/b_spline_interpolate.py +0 -0
  192. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/b_spline_smooth.py +0 -0
  193. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/c_s_smoot_search.py +0 -0
  194. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/c_s_with_acc1.py +0 -0
  195. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/c_s_with_acc2.py +0 -0
  196. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/cubic_spline.py +0 -0
  197. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/frenet_frame.py +0 -0
  198. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/lin_poly_parabolic.py +0 -0
  199. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/linear.py +0 -0
  200. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/log_quat.py +0 -0
  201. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/polynomials.py +0 -0
  202. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/quat_core.py +0 -0
  203. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/quat_visualization.py +0 -0
  204. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/squad_c2.py +0 -0
  205. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/trapezoidal.py +0 -0
  206. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/interpolatepy/tridiagonal_inv.py +0 -0
  207. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/setup.cfg +0 -0
  208. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/__init__.py +0 -0
  209. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/inv_test.py +0 -0
  210. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_b_spline.py +0 -0
  211. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_b_spline_variants.py +0 -0
  212. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_cubic_spline.py +0 -0
  213. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_lin_poly_parabolic.py +0 -0
  214. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_linear.py +0 -0
  215. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_log_quat.py +0 -0
  216. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_path_planning.py +0 -0
  217. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_polynomials.py +0 -0
  218. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_quat_interp.py +0 -0
  219. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_quat_visualization.py +0 -0
  220. {interpolatepy-2.0.1 → interpolatepy-3.0.0}/tests/test_smoothing.py +0 -0
  221. {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 -r requirements-dev.txt
46
- pip install -e .
47
+ pip install -e '.[docs]'
47
48
 
48
49
  - name: Build documentation
49
50
  run: |
@@ -13,5 +13,5 @@ jobs:
13
13
  - name: Set up Python
14
14
  uses: actions/setup-python@v5
15
15
  with:
16
- python-version: '3.11'
16
+ python-version: '3.12'
17
17
  - uses: pre-commit/action@v3.0.1
@@ -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
@@ -141,3 +141,13 @@ venv.bak/
141
141
  .history
142
142
 
143
143
  CLAUDE.md
144
+
145
+ ################################
146
+ ########### C++ BUILD ##########
147
+ ################################
148
+ cpp/build/
149
+ *.o
150
+ *.a
151
+ *.so
152
+ *.dylib
153
+ compile_commands.json
@@ -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.12.8'
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.17.1
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: 2.0.1
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
- ![Python](https://img.shields.io/badge/python-3.10+-blue)
67
+ ![Python](https://img.shields.io/badge/python-3.11+-blue)
60
68
  [![PyPI Downloads](https://static.pepy.tech/badge/interpolatepy)](https://pepy.tech/projects/interpolatepy)
61
69
  [![pre-commit](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/pre-commit.yml)
62
70
  [![ci-test](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/test.yml/badge.svg)](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:** Vectorized NumPy operations, ~1ms for 1000-point cubic splines
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.10, NumPy ≥2.0, SciPy ≥1.15, Matplotlib ≥3.10
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:** Vectorized NumPy operations, optimized algorithms
282
- - **Reliable:** 85%+ test coverage, continuous integration
283
- - **Modern:** Python 3.10+, strict typing, dataclass-based APIs
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
- **Typical Performance:**
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: 2.0.1
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
- ![Python](https://img.shields.io/badge/python-3.10+-blue)
67
+ ![Python](https://img.shields.io/badge/python-3.11+-blue)
60
68
  [![PyPI Downloads](https://static.pepy.tech/badge/interpolatepy)](https://pepy.tech/projects/interpolatepy)
61
69
  [![pre-commit](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/pre-commit.yml)
62
70
  [![ci-test](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/test.yml/badge.svg)](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:** Vectorized NumPy operations, ~1ms for 1000-point cubic splines
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.10, NumPy ≥2.0, SciPy ≥1.15, Matplotlib ≥3.10
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:** Vectorized NumPy operations, optimized algorithms
282
- - **Reliable:** 85%+ test coverage, continuous integration
283
- - **Modern:** Python 3.10+, strict typing, dataclass-based APIs
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
- **Typical Performance:**
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
- ![Python](https://img.shields.io/badge/python-3.10+-blue)
3
+ ![Python](https://img.shields.io/badge/python-3.11+-blue)
4
4
  [![PyPI Downloads](https://static.pepy.tech/badge/interpolatepy)](https://pepy.tech/projects/interpolatepy)
5
5
  [![pre-commit](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/pre-commit.yml)
6
6
  [![ci-test](https://github.com/GiorgioMedico/InterpolatePy/actions/workflows/test.yml/badge.svg)](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:** Vectorized NumPy operations, ~1ms for 1000-point cubic splines
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.10, NumPy ≥2.0, SciPy ≥1.15, Matplotlib ≥3.10
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:** Vectorized NumPy operations, optimized algorithms
226
- - **Reliable:** 85%+ test coverage, continuous integration
227
- - **Modern:** Python 3.10+, strict typing, dataclass-based APIs
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
- **Typical Performance:**
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
 
@@ -23,5 +23,3 @@ ignore:
23
23
  - "tests/*"
24
24
  - "docs/*"
25
25
  - "examples/*"
26
- - "setup.py"
27
- - "**/__init__.py"