splinekit 0.2.6__tar.gz → 0.2.8__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 (333) hide show
  1. {splinekit-0.2.6 → splinekit-0.2.8}/PKG-INFO +11 -4
  2. {splinekit-0.2.6 → splinekit-0.2.8}/README.md +8 -1
  3. {splinekit-0.2.6 → splinekit-0.2.8/dev/Accelerated}/pyproject.toml +1 -1
  4. splinekit-0.2.8/dev/Jupyter/bspline/members/bspline_member.ipynb +109 -0
  5. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/stability}/bspline_numeric_stability.ipynb +6 -3
  6. splinekit-0.2.8/dev/Jupyter/padding/change-basis/padding_bases.ipynb +222 -0
  7. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/padding/padding}/padding_data.ipynb +6 -2
  8. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/padding/padding}/padding_speed.ipynb +2 -1
  9. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/periodic-spline/bounds}/spline_bounds.ipynb +4 -1
  10. splinekit-0.2.8/dev/Jupyter/periodic-spline/calculus/spline_antigrad.ipynb +146 -0
  11. splinekit-0.2.8/dev/Jupyter/periodic-spline/calculus/spline_derivative.ipynb +165 -0
  12. splinekit-0.2.8/dev/Jupyter/periodic-spline/calculus/spline_fourier_diff.ipynb +239 -0
  13. splinekit-0.2.8/dev/Jupyter/periodic-spline/calculus/spline_gradient.ipynb +173 -0
  14. splinekit-0.2.8/dev/Jupyter/periodic-spline/calculus/spline_integrate.ipynb +185 -0
  15. splinekit-0.2.8/dev/Jupyter/periodic-spline/construct/spline_from_c.ipynb +244 -0
  16. splinekit-0.2.8/dev/Jupyter/periodic-spline/conv_corr/spline_autocorr.ipynb +178 -0
  17. splinekit-0.2.8/dev/Jupyter/periodic-spline/conv_corr/spline_convolve.ipynb +190 -0
  18. splinekit-0.2.8/dev/Jupyter/periodic-spline/conv_corr/spline_correlate.ipynb +211 -0
  19. splinekit-0.2.8/dev/Jupyter/periodic-spline/eval/spline_at_array.ipynb +149 -0
  20. splinekit-0.2.8/dev/Jupyter/periodic-spline/eval/spline_at_scalar.ipynb +162 -0
  21. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/periodic-spline/eval}/spline_evaluation_speed.ipynb +8 -4
  22. splinekit-0.2.8/dev/Jupyter/periodic-spline/extrema/spline_curated_xtrm.ipynb +205 -0
  23. splinekit-0.2.8/dev/Jupyter/periodic-spline/extrema/spline_xtrm.ipynb +186 -0
  24. splinekit-0.2.8/dev/Jupyter/periodic-spline/fourier/spline_fourier.ipynb +184 -0
  25. splinekit-0.2.8/dev/Jupyter/periodic-spline/fourier/spline_smoothness.ipynb +139 -0
  26. splinekit-0.2.8/dev/Jupyter/periodic-spline/ops/spline_simple_ops.ipynb +192 -0
  27. splinekit-0.2.8/dev/Jupyter/periodic-spline/plot/spline_plot.ipynb +562 -0
  28. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/periodic-spline/poly}/spline_polynomials.ipynb +5 -2
  29. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/periodic-spline/random-1d}/spline_random_1d.ipynb +5 -2
  30. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/periodic-spline/random-2d}/spline_random_2d.ipynb +7 -4
  31. splinekit-0.2.8/dev/Jupyter/periodic-spline/sgn/spline_curated_zeros.ipynb +220 -0
  32. splinekit-0.2.8/dev/Jupyter/periodic-spline/sgn/spline_sgn.ipynb +168 -0
  33. splinekit-0.2.8/dev/Jupyter/periodic-spline/sgn/spline_zeros.ipynb +365 -0
  34. splinekit-0.2.8/dev/Jupyter/periodic-spline/stats/spline_stats.ipynb +218 -0
  35. {splinekit-0.2.6 → splinekit-0.2.8}/dev/PurePython/dispatch.sh +1 -0
  36. {splinekit-0.2.6 → splinekit-0.2.8}/dev/PurePython/pyproject.toml +1 -1
  37. {splinekit-0.2.6 → splinekit-0.2.8}/dev/PurePython/spline_padding.py +35 -7
  38. splinekit-0.2.8/docs/bibliography.rst +10 -0
  39. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/bspline/bspline_bases.rst +34 -35
  40. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/bspline/bspline_inverse.rst +9 -9
  41. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/bspline/bspline_m_scale.rst +3 -2
  42. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/bspline/bspline_members.rst +3 -3
  43. splinekit-0.2.8/docs/demos/bspline/bspline_numeric_stability.ipynb.gz +0 -0
  44. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/bspline/bspline_poles.rst +15 -15
  45. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/bspline/bspline_stability.rst +6 -6
  46. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/bspline/bspline_vs_pi.rst +4 -4
  47. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/bspline/hello_bspline.rst +3 -3
  48. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/bspline/spline_engineer_func.rst +11 -13
  49. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/bspline/spline_vs_poly.rst +14 -14
  50. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/padding/change_basis.rst +2 -3
  51. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/padding/padding.rst +40 -40
  52. splinekit-0.2.8/docs/demos/padding/padding_speed.ipynb.gz +0 -0
  53. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/spline1d/bounds.rst +17 -17
  54. splinekit-0.2.8/docs/demos/spline1d/calculus.rst +133 -0
  55. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/spline1d/constructors.rst +18 -9
  56. splinekit-0.2.8/docs/demos/spline1d/conv_corr.rst +148 -0
  57. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/spline1d/evaluation.rst +9 -9
  58. splinekit-0.2.8/docs/demos/spline1d/extrema.rst +23 -0
  59. splinekit-0.2.8/docs/demos/spline1d/fourier.rst +123 -0
  60. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/spline1d/index.rst +8 -0
  61. splinekit-0.2.8/docs/demos/spline1d/plot.rst +23 -0
  62. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/spline1d/polynomials.rst +14 -14
  63. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/spline1d/random1d.rst +2 -2
  64. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/spline1d/random2d.rst +2 -2
  65. splinekit-0.2.8/docs/demos/spline1d/signum.rst +78 -0
  66. splinekit-0.2.8/docs/demos/spline1d/simple_ops.rst +41 -0
  67. splinekit-0.2.8/docs/demos/spline1d/spline_evaluation_speed.ipynb.gz +0 -0
  68. splinekit-0.2.8/docs/demos/spline1d/stats.rst +47 -0
  69. {splinekit-0.2.6 → splinekit-0.2.8}/docs/index.rst +1 -0
  70. {splinekit-0.2.6/dev/Accelerated → splinekit-0.2.8}/pyproject.toml +1 -1
  71. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/periodic_spline_1d.py +6 -6
  72. splinekit-0.2.6/dev/Jupyter/padding_bases.ipynb +0 -353
  73. splinekit-0.2.6/dev/Jupyter/spline_at_array.ipynb +0 -365
  74. splinekit-0.2.6/dev/Jupyter/spline_at_scalar.ipynb +0 -1107
  75. splinekit-0.2.6/docs/demos/bspline/bspline_numeric_stability.ipynb.gz +0 -0
  76. splinekit-0.2.6/docs/demos/padding/padding_speed.ipynb.gz +0 -0
  77. splinekit-0.2.6/docs/demos/spline1d/spline_evaluation_speed.ipynb.gz +0 -0
  78. {splinekit-0.2.6 → splinekit-0.2.8}/.github/workflows/deploy-docs.yml +0 -0
  79. {splinekit-0.2.6 → splinekit-0.2.8}/.github/workflows/release.yml +0 -0
  80. {splinekit-0.2.6 → splinekit-0.2.8}/.github/workflows/test.yml +0 -0
  81. {splinekit-0.2.6 → splinekit-0.2.8}/.gitignore +0 -0
  82. {splinekit-0.2.6 → splinekit-0.2.8}/.jupyterlite.doit.db +0 -0
  83. {splinekit-0.2.6 → splinekit-0.2.8}/CMakeLists.txt +0 -0
  84. {splinekit-0.2.6 → splinekit-0.2.8}/LICENSE +0 -0
  85. {splinekit-0.2.6 → splinekit-0.2.8}/_output/api/translations/all.json +0 -0
  86. {splinekit-0.2.6 → splinekit-0.2.8}/_output/api/translations/en.json +0 -0
  87. {splinekit-0.2.6 → splinekit-0.2.8}/_output/api/workspaces/all.json +0 -0
  88. {splinekit-0.2.6 → splinekit-0.2.8}/_output/bootstrap.js +0 -0
  89. {splinekit-0.2.6 → splinekit-0.2.8}/_output/config-utils.js +0 -0
  90. {splinekit-0.2.6 → splinekit-0.2.8}/_output/consoles/favicon.ico +0 -0
  91. {splinekit-0.2.6 → splinekit-0.2.8}/_output/consoles/index.html +0 -0
  92. {splinekit-0.2.6 → splinekit-0.2.8}/_output/consoles/jupyter-lite.ipynb +0 -0
  93. {splinekit-0.2.6 → splinekit-0.2.8}/_output/consoles/jupyter-lite.json +0 -0
  94. {splinekit-0.2.6 → splinekit-0.2.8}/_output/consoles/package.json +0 -0
  95. {splinekit-0.2.6 → splinekit-0.2.8}/_output/doc/tree/index.html +0 -0
  96. {splinekit-0.2.6 → splinekit-0.2.8}/_output/doc/workspaces/index.html +0 -0
  97. {splinekit-0.2.6 → splinekit-0.2.8}/_output/edit/favicon.ico +0 -0
  98. {splinekit-0.2.6 → splinekit-0.2.8}/_output/edit/index.html +0 -0
  99. {splinekit-0.2.6 → splinekit-0.2.8}/_output/edit/jupyter-lite.ipynb +0 -0
  100. {splinekit-0.2.6 → splinekit-0.2.8}/_output/edit/jupyter-lite.json +0 -0
  101. {splinekit-0.2.6 → splinekit-0.2.8}/_output/edit/package.json +0 -0
  102. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/install.json +0 -0
  103. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/package.json +0 -0
  104. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/schemas/jupyterlab-jupytext/package.json.orig +0 -0
  105. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/schemas/jupyterlab-jupytext/plugin.json +0 -0
  106. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/48.0570848d2b31a5354b7d.js +0 -0
  107. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/48.0570848d2b31a5354b7d.js.LICENSE.txt +0 -0
  108. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/509.d51a8122d1920ac82323.js +0 -0
  109. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/720.094c38d70b1dec0ceea7.js +0 -0
  110. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/remoteEntry.94495aac41d2fef6ad41.js +0 -0
  111. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/style.js +0 -0
  112. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/third-party-licenses.json +0 -0
  113. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/install.json +0 -0
  114. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/package.json +0 -0
  115. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/static/568.1e2faa2ba0bbe59c4780.js +0 -0
  116. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/static/747.67662283a5707eeb4d4c.js +0 -0
  117. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/static/remoteEntry.5cbb9d2323598fbda535.js +0 -0
  118. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/static/style.js +0 -0
  119. {splinekit-0.2.6 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/static/third-party-licenses.json +0 -0
  120. {splinekit-0.2.6 → splinekit-0.2.8}/_output/icon-120x120.png +0 -0
  121. {splinekit-0.2.6 → splinekit-0.2.8}/_output/icon-512x512.png +0 -0
  122. {splinekit-0.2.6 → splinekit-0.2.8}/_output/index.html +0 -0
  123. {splinekit-0.2.6 → splinekit-0.2.8}/_output/jupyter-lite.ipynb +0 -0
  124. {splinekit-0.2.6 → splinekit-0.2.8}/_output/jupyter-lite.json +0 -0
  125. {splinekit-0.2.6 → splinekit-0.2.8}/_output/jupyterlite.schema.v0.json +0 -0
  126. {splinekit-0.2.6 → splinekit-0.2.8}/_output/lab/favicon.ico +0 -0
  127. {splinekit-0.2.6 → splinekit-0.2.8}/_output/lab/index.html +0 -0
  128. {splinekit-0.2.6 → splinekit-0.2.8}/_output/lab/jupyter-lite.ipynb +0 -0
  129. {splinekit-0.2.6 → splinekit-0.2.8}/_output/lab/jupyter-lite.json +0 -0
  130. {splinekit-0.2.6 → splinekit-0.2.8}/_output/lab/package.json +0 -0
  131. {splinekit-0.2.6 → splinekit-0.2.8}/_output/lab/tree/index.html +0 -0
  132. {splinekit-0.2.6 → splinekit-0.2.8}/_output/lab/workspaces/index.html +0 -0
  133. {splinekit-0.2.6 → splinekit-0.2.8}/_output/manifest.webmanifest +0 -0
  134. {splinekit-0.2.6 → splinekit-0.2.8}/_output/notebooks/favicon.ico +0 -0
  135. {splinekit-0.2.6 → splinekit-0.2.8}/_output/notebooks/index.html +0 -0
  136. {splinekit-0.2.6 → splinekit-0.2.8}/_output/notebooks/jupyter-lite.ipynb +0 -0
  137. {splinekit-0.2.6 → splinekit-0.2.8}/_output/notebooks/jupyter-lite.json +0 -0
  138. {splinekit-0.2.6 → splinekit-0.2.8}/_output/notebooks/package.json +0 -0
  139. {splinekit-0.2.6 → splinekit-0.2.8}/_output/package.json +0 -0
  140. {splinekit-0.2.6 → splinekit-0.2.8}/_output/repl/index.html +0 -0
  141. {splinekit-0.2.6 → splinekit-0.2.8}/_output/repl/jupyter-lite.ipynb +0 -0
  142. {splinekit-0.2.6 → splinekit-0.2.8}/_output/repl/jupyter-lite.json +0 -0
  143. {splinekit-0.2.6 → splinekit-0.2.8}/_output/repl/package.json +0 -0
  144. {splinekit-0.2.6 → splinekit-0.2.8}/_output/service-worker.js +0 -0
  145. {splinekit-0.2.6 → splinekit-0.2.8}/_output/static/favicons/favicon-busy-1.ico +0 -0
  146. {splinekit-0.2.6 → splinekit-0.2.8}/_output/static/favicons/favicon-busy-2.ico +0 -0
  147. {splinekit-0.2.6 → splinekit-0.2.8}/_output/static/favicons/favicon-busy-3.ico +0 -0
  148. {splinekit-0.2.6 → splinekit-0.2.8}/_output/static/favicons/favicon-file.ico +0 -0
  149. {splinekit-0.2.6 → splinekit-0.2.8}/_output/static/favicons/favicon-notebook.ico +0 -0
  150. {splinekit-0.2.6 → splinekit-0.2.8}/_output/static/favicons/favicon-terminal.ico +0 -0
  151. {splinekit-0.2.6 → splinekit-0.2.8}/_output/static/favicons/favicon.ico +0 -0
  152. {splinekit-0.2.6 → splinekit-0.2.8}/_output/tree/favicon.ico +0 -0
  153. {splinekit-0.2.6 → splinekit-0.2.8}/_output/tree/index.html +0 -0
  154. {splinekit-0.2.6 → splinekit-0.2.8}/_output/tree/jupyter-lite.ipynb +0 -0
  155. {splinekit-0.2.6 → splinekit-0.2.8}/_output/tree/jupyter-lite.json +0 -0
  156. {splinekit-0.2.6 → splinekit-0.2.8}/_output/tree/package.json +0 -0
  157. {splinekit-0.2.6 → splinekit-0.2.8}/ansi_c/spline_padding/src/spline_padding.c +0 -0
  158. {splinekit-0.2.6 → splinekit-0.2.8}/ansi_c/spline_padding/src/spline_padding.h +0 -0
  159. {splinekit-0.2.6 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_cmake/CMakeLists.txt +0 -0
  160. {splinekit-0.2.6 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_cmake/spline_padding.c +0 -0
  161. {splinekit-0.2.6 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_cmake/spline_padding.h +0 -0
  162. {splinekit-0.2.6 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/libspline_padding.dylib +0 -0
  163. {splinekit-0.2.6 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/spline_padding.c +0 -0
  164. {splinekit-0.2.6 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/spline_padding.h +0 -0
  165. {splinekit-0.2.6 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/project.pbxproj +0 -0
  166. {splinekit-0.2.6 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  167. {splinekit-0.2.6 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/project.xcworkspace/xcuserdata/pthevena.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  168. {splinekit-0.2.6 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/xcuserdata/pthevena.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  169. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Accelerated/dispatch.sh +0 -0
  170. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Accelerated/release.yml +0 -0
  171. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Accelerated/spline_padding.py +0 -0
  172. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/bases}/bspline_cardinal.ipynb +0 -0
  173. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/bases}/bspline_dual.ipynb +0 -0
  174. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/bases}/bspline_dual_property.ipynb +0 -0
  175. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/bases}/bspline_member.ipynb +0 -0
  176. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/bases}/bspline_ortho.ipynb +0 -0
  177. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/bases}/bspline_ortho_property.ipynb +0 -0
  178. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/bases}/bspline_sinc.ipynb +0 -0
  179. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/hello}/bspline_hello.ipynb +0 -0
  180. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/hello}/bspline_hello_grad.ipynb +0 -0
  181. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/hello}/bspline_hello_integral.ipynb +0 -0
  182. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/inverse}/bspline_inv.ipynb +0 -0
  183. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/inverse}/bspline_periodic_inv.ipynb +0 -0
  184. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/m-scale}/bspline_m_scale.ipynb +0 -0
  185. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/mathfunc}/bspline_gauss_exo.ipynb +0 -0
  186. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/mathfunc}/bspline_trigo_exo.ipynb +0 -0
  187. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/mathfunc}/bspline_vs_cos.ipynb +0 -0
  188. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/mathfunc}/bspline_vs_erf.ipynb +0 -0
  189. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/mathfunc}/bspline_vs_exp.ipynb +0 -0
  190. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/mathfunc}/bspline_vs_sin.ipynb +0 -0
  191. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/members}/bspline_member_diff.ipynb +0 -0
  192. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/members}/bspline_member_integral.ipynb +0 -0
  193. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/poles}/bspline_annihilate.ipynb +0 -0
  194. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/poles}/bspline_poles.ipynb +0 -0
  195. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/poly}/bspline_convolve_mono.ipynb +0 -0
  196. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/poly}/bspline_partition_mono.ipynb +0 -0
  197. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/poly}/bspline_spline_poly.ipynb +0 -0
  198. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/vs-pi}/bspline_vs_pi_as_sum.ipynb +0 -0
  199. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/bspline/vs-pi}/bspline_vs_pi_at0.ipynb +0 -0
  200. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/periodic-spline/construct}/spline_approximation.ipynb +0 -0
  201. {splinekit-0.2.6/dev/Jupyter → splinekit-0.2.8/dev/Jupyter/periodic-spline/construct}/spline_interpolation.ipynb +0 -0
  202. {splinekit-0.2.6 → splinekit-0.2.8}/dev/PurePython/release.yml +0 -0
  203. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Wolfram/Bspline Poles.nb +0 -0
  204. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Wolfram/IntervalChecks.nb +0 -0
  205. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Wolfram/PeriodicSplinesChecks.nb +0 -0
  206. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Wolfram/SplinePaddingChecks.nb +0 -0
  207. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Wolfram/Test BSplines.nb +0 -0
  208. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Wolfram/Test PeriodicNonuniformPiecewise.nb +0 -0
  209. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Wolfram/Test PeriodicSpline1D.nb +0 -0
  210. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Wolfram/Test SplinePadding.nb +0 -0
  211. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Wolfram/Test SplineUtilities.nb +0 -0
  212. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Wolfram/Verify doc.nb +0 -0
  213. {splinekit-0.2.6 → splinekit-0.2.8}/dev/Wolfram/rescued Test SplinePadding.nb +0 -0
  214. {splinekit-0.2.6 → splinekit-0.2.8}/docs/.jupyterlite.doit.db +0 -0
  215. {splinekit-0.2.6 → splinekit-0.2.8}/docs/_static/custom.css +0 -0
  216. {splinekit-0.2.6 → splinekit-0.2.8}/docs/bases/01_bases.rst +0 -0
  217. {splinekit-0.2.6 → splinekit-0.2.8}/docs/bases/index.rst +0 -0
  218. {splinekit-0.2.6 → splinekit-0.2.8}/docs/bases/noxfile.py +0 -0
  219. {splinekit-0.2.6 → splinekit-0.2.8}/docs/bsplines/01_bsplines.rst +0 -0
  220. {splinekit-0.2.6 → splinekit-0.2.8}/docs/bsplines/index.rst +0 -0
  221. {splinekit-0.2.6 → splinekit-0.2.8}/docs/bsplines/noxfile.py +0 -0
  222. {splinekit-0.2.6 → splinekit-0.2.8}/docs/conf.py +0 -0
  223. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/bspline/index.rst +0 -0
  224. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/index.rst +0 -0
  225. {splinekit-0.2.6 → splinekit-0.2.8}/docs/demos/padding/index.rst +0 -0
  226. {splinekit-0.2.6 → splinekit-0.2.8}/docs/environment.yml +0 -0
  227. {splinekit-0.2.6 → splinekit-0.2.8}/docs/glossary/glossary-numbers.rst +0 -0
  228. {splinekit-0.2.6 → splinekit-0.2.8}/docs/glossary/glossary-polynomials.rst +0 -0
  229. {splinekit-0.2.6 → splinekit-0.2.8}/docs/glossary/glossary-splines.rst +0 -0
  230. {splinekit-0.2.6 → splinekit-0.2.8}/docs/glossary/glossary-terminology.rst +0 -0
  231. {splinekit-0.2.6 → splinekit-0.2.8}/docs/glossary/index.rst +0 -0
  232. {splinekit-0.2.6 → splinekit-0.2.8}/docs/installation/index.rst +0 -0
  233. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/bounded/01_bounded.rst +0 -0
  234. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/bounded/02_open.rst +0 -0
  235. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/bounded/03_open_closed.rst +0 -0
  236. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/bounded/04_closed.rst +0 -0
  237. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/bounded/05_closed_open.rst +0 -0
  238. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/bounded/index.rst +0 -0
  239. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/bounded/noxfile.py +0 -0
  240. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/degenerate/01_degenerate.rst +0 -0
  241. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/degenerate/02_singleton.rst +0 -0
  242. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/degenerate/index.rst +0 -0
  243. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/degenerate/noxfile.py +0 -0
  244. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/half_bounded/01_half_bounded.rst +0 -0
  245. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/half_bounded/02_above.rst +0 -0
  246. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/half_bounded/03_not_below.rst +0 -0
  247. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/half_bounded/04_not_above.rst +0 -0
  248. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/half_bounded/05_below.rst +0 -0
  249. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/half_bounded/index.rst +0 -0
  250. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/half_bounded/noxfile.py +0 -0
  251. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/index.rst +0 -0
  252. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/interval/01_interval.rst +0 -0
  253. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/interval/index.rst +0 -0
  254. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/interval/noxfile.py +0 -0
  255. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/noxfile.py +0 -0
  256. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/universal/01_universal.rst +0 -0
  257. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/universal/02_empty.rst +0 -0
  258. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/universal/03_rr.rst +0 -0
  259. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/universal/index.rst +0 -0
  260. {splinekit-0.2.6 → splinekit-0.2.8}/docs/interval/universal/noxfile.py +0 -0
  261. {splinekit-0.2.6 → splinekit-0.2.8}/docs/noxfile.py +0 -0
  262. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_nonuniform_piecewise/01_periodic_nonuniform_piecewise.rst +0 -0
  263. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_nonuniform_piecewise/index.rst +0 -0
  264. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_nonuniform_piecewise/noxfile.py +0 -0
  265. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/01_periodic_spline_1d.rst +0 -0
  266. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/index.rst +0 -0
  267. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m00.png +0 -0
  268. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m01.png +0 -0
  269. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m02.png +0 -0
  270. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m03.png +0 -0
  271. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m04.png +0 -0
  272. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m05.png +0 -0
  273. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m06.png +0 -0
  274. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m07.png +0 -0
  275. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m08.png +0 -0
  276. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m09.png +0 -0
  277. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m10.png +0 -0
  278. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m11.png +0 -0
  279. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m12.png +0 -0
  280. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m13.png +0 -0
  281. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m14.png +0 -0
  282. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m15.png +0 -0
  283. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m16.png +0 -0
  284. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m17.png +0 -0
  285. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m18.png +0 -0
  286. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m19.png +0 -0
  287. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m20.png +0 -0
  288. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m21.png +0 -0
  289. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m22.png +0 -0
  290. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m23.png +0 -0
  291. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/m24.png +0 -0
  292. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/matplotlib-color.rst +0 -0
  293. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/matplotlib-linestyle.rst +0 -0
  294. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/matplotlib-marker.rst +0 -0
  295. {splinekit-0.2.6 → splinekit-0.2.8}/docs/periodic_spline_1d/noxfile.py +0 -0
  296. {splinekit-0.2.6 → splinekit-0.2.8}/docs/spline_padding/01_spline_padding.rst +0 -0
  297. {splinekit-0.2.6 → splinekit-0.2.8}/docs/spline_padding/index.rst +0 -0
  298. {splinekit-0.2.6 → splinekit-0.2.8}/docs/spline_padding/noxfile.py +0 -0
  299. {splinekit-0.2.6 → splinekit-0.2.8}/docs/spline_utilities/01_spline_utilities.rst +0 -0
  300. {splinekit-0.2.6 → splinekit-0.2.8}/docs/spline_utilities/index.rst +0 -0
  301. {splinekit-0.2.6 → splinekit-0.2.8}/docs/spline_utilities/noxfile.py +0 -0
  302. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/__init__.py +0 -0
  303. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/bases.py +0 -0
  304. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/bsplines.py +0 -0
  305. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/__init__.py +0 -0
  306. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/_known_intervals.py +0 -0
  307. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/above.py +0 -0
  308. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/below.py +0 -0
  309. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/bounded.py +0 -0
  310. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/closed.py +0 -0
  311. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/closed_open.py +0 -0
  312. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/degenerate.py +0 -0
  313. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/empty.py +0 -0
  314. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/half_bounded.py +0 -0
  315. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/interval.py +0 -0
  316. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/mypy.ini +0 -0
  317. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/not_above.py +0 -0
  318. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/not_below.py +0 -0
  319. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/open.py +0 -0
  320. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/open_closed.py +0 -0
  321. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/rr.py +0 -0
  322. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/singleton.py +0 -0
  323. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/interval/universal.py +0 -0
  324. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/mypy.ini +0 -0
  325. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/periodic_nonuniform_piecewise.py +0 -0
  326. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/spline_padding.py +0 -0
  327. {splinekit-0.2.6 → splinekit-0.2.8}/src/splinekit/spline_utilities.py +0 -0
  328. {splinekit-0.2.6 → splinekit-0.2.8}/temp/bspline_stability.py +0 -0
  329. {splinekit-0.2.6 → splinekit-0.2.8}/tests/test_bsplines.py +0 -0
  330. {splinekit-0.2.6 → splinekit-0.2.8}/tests/test_periodic_nonuniform_piecewise.py +0 -0
  331. {splinekit-0.2.6 → splinekit-0.2.8}/tests/test_periodic_spline_1d.py +0 -0
  332. {splinekit-0.2.6 → splinekit-0.2.8}/tests/test_spline_padding.py +0 -0
  333. {splinekit-0.2.6 → splinekit-0.2.8}/tests/test_spline_utilities.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splinekit
3
- Version: 0.2.6
3
+ Version: 0.2.8
4
4
  Summary: A set of functions and classes to handle periodic 1D polynomial splines
5
- Author-Email: =?utf-8?q?Philippe_Th=C3=A9venaz?= <philippe.thevenaz@icloud.com>
6
- Maintainer-Email: =?utf-8?q?Philippe_Th=C3=A9venaz?= <philippe.thevenaz@icloud.com>
5
+ Author-Email: Philippe Thévenaz <philippe.thevenaz@icloud.com>
6
+ Maintainer-Email: Philippe Thévenaz <philippe.thevenaz@icloud.com>
7
7
  License-Expression: MIT
8
8
  License-File: LICENSE
9
9
  Classifier: Programming Language :: Python :: 3
@@ -51,6 +51,8 @@ Description-Content-Type: text/markdown
51
51
 
52
52
  <!-- splinekit/README.md -->
53
53
 
54
+ # Version 0.2.8
55
+
54
56
  # splinekit: Spline Operations
55
57
  `splinekit` is a Python-based open-source software library aimed at the manipulation of one-dimensional periodic splines.
56
58
 
@@ -114,7 +116,7 @@ pip install -e .[dev]
114
116
 
115
117
  ## Release Notes
116
118
 
117
- ### 0.1.0
119
+ ### 0.1.*
118
120
  First stable version. Pure Python.
119
121
 
120
122
  ### 0.2.1
@@ -129,3 +131,8 @@ Minor debug of least-significant-bit edge cases.
129
131
  ### 0.2.6
130
132
  Some demos added. Documentation minor updates.
131
133
 
134
+ ### 0.2.7
135
+ Upgraded to jupyterlite 0.7
136
+
137
+ ### 0.2.8
138
+ Some demos added.
@@ -1,5 +1,7 @@
1
1
  <!-- splinekit/README.md -->
2
2
 
3
+ # Version 0.2.8
4
+
3
5
  # splinekit: Spline Operations
4
6
  `splinekit` is a Python-based open-source software library aimed at the manipulation of one-dimensional periodic splines.
5
7
 
@@ -63,7 +65,7 @@ pip install -e .[dev]
63
65
 
64
66
  ## Release Notes
65
67
 
66
- ### 0.1.0
68
+ ### 0.1.*
67
69
  First stable version. Pure Python.
68
70
 
69
71
  ### 0.2.1
@@ -78,3 +80,8 @@ Minor debug of least-significant-bit edge cases.
78
80
  ### 0.2.6
79
81
  Some demos added. Documentation minor updates.
80
82
 
83
+ ### 0.2.7
84
+ Upgraded to jupyterlite 0.7
85
+
86
+ ### 0.2.8
87
+ Some demos added.
@@ -10,7 +10,7 @@ build-backend = "scikit_build_core.build" # Activate for C dynamic library
10
10
  # Project
11
11
  [project]
12
12
  name = "splinekit"
13
- version = "0.2.6"
13
+ version = "0.2.8"
14
14
  dependencies = [
15
15
  "numpy >=1.26",
16
16
  "scipy >=1.15",
@@ -0,0 +1,109 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "0c723be4-e5f6-4b5a-a6a2-11ece85e5f1b",
6
+ "metadata": {},
7
+ "source": [
8
+ "# Polynomial B-Spline\n",
9
+ "Here is the plot of a B-spline of a given degree, over precisely its support. The hollow (blue or red) circles indicate the samples at the integers. The function is made of polynomial pieces that lie between so-called knots. The small filled (black) discs indicate the location of the knots of the spline. They lie at the half integers for even degrees and at the integers for odd degrees."
10
+ ]
11
+ },
12
+ {
13
+ "cell_type": "code",
14
+ "execution_count": null,
15
+ "id": "65fb414e-a36a-4bff-ae5a-a03e6498deb8",
16
+ "metadata": {},
17
+ "outputs": [],
18
+ "source": [
19
+ "# Load the required libraries\n",
20
+ "from ipywidgets import interactive\n",
21
+ "import matplotlib.pyplot as plt\n",
22
+ "\n",
23
+ "import splinekit as sk # This library\n",
24
+ "\n",
25
+ "# Define the plot function\n",
26
+ "def b_spline_plot (\n",
27
+ " degree = 3\n",
28
+ "):\n",
29
+ " # Support of a B-spline\n",
30
+ " supp = sk.b_spline_support(degree)\n",
31
+ " # Avoid overlap and leave a margin\n",
32
+ " # The margin serves a purpose only for the B-spline of degree 0\n",
33
+ " period = supp.diameter + 1\n",
34
+ " # Construct a spline from a non-overlapping periodic B-spline\n",
35
+ " s = sk.PeriodicSpline1D.periodized_b_spline(\n",
36
+ " period = int(period),\n",
37
+ " degree = degree\n",
38
+ " )\n",
39
+ " # Plot the B-spline\n",
40
+ " s.plot(\n",
41
+ " plt.subplots(),\n",
42
+ " plotdomain = sk.interval.Closed((-0.5 * supp.diameter, 0.5 * supp.diameter)),\n",
43
+ " plotrange = sk.interval.Closed((-0.05, 1.05)),\n",
44
+ " plotpoints = 200 + 1\n",
45
+ " )\n",
46
+ "\n",
47
+ "# Interact with the degree\n",
48
+ "interactive(b_spline_plot, degree = (0, 30))\n"
49
+ ]
50
+ },
51
+ {
52
+ "cell_type": "code",
53
+ "execution_count": null,
54
+ "id": "b80ced66-8818-4b26-9ea0-effa40d17b3e",
55
+ "metadata": {},
56
+ "outputs": [],
57
+ "source": [
58
+ "\n",
59
+ "\n",
60
+ "\n",
61
+ "\n",
62
+ "\n",
63
+ "\n",
64
+ "\n",
65
+ "\n",
66
+ "\n",
67
+ "\n",
68
+ "\n",
69
+ "\n",
70
+ "\n",
71
+ "\n",
72
+ "\n",
73
+ "\n",
74
+ "\n",
75
+ "\n",
76
+ "\n",
77
+ "\n"
78
+ ]
79
+ }
80
+ ],
81
+ "metadata": {
82
+ "kernelspec": {
83
+ "display_name": "Python 3 (ipykernel)",
84
+ "language": "python",
85
+ "name": "python3"
86
+ },
87
+ "language_info": {
88
+ "codemirror_mode": {
89
+ "name": "ipython",
90
+ "version": 3
91
+ },
92
+ "file_extension": ".py",
93
+ "mimetype": "text/x-python",
94
+ "name": "python",
95
+ "nbconvert_exporter": "python",
96
+ "pygments_lexer": "ipython3",
97
+ "version": "3.12.6"
98
+ },
99
+ "widgets": {
100
+ "application/vnd.jupyter.widget-state+json": {
101
+ "state": {},
102
+ "version_major": 2,
103
+ "version_minor": 0
104
+ }
105
+ }
106
+ },
107
+ "nbformat": 4,
108
+ "nbformat_minor": 5
109
+ }
@@ -172,7 +172,8 @@
172
172
  "# #\n",
173
173
  "###################\n",
174
174
  "\n",
175
- "# Duration of the computations on a desktop computer of year 2021: ~20s\n",
175
+ "# Duration of the native computations on a desktop computer of year 2021: ~20s\n",
176
+ "# Duration of the WebAssembly computations: about twice\n",
176
177
  "\n",
177
178
  "\n"
178
179
  ]
@@ -321,7 +322,8 @@
321
322
  "# #\n",
322
323
  "###################\n",
323
324
  "\n",
324
- "# Duration of the computations on a desktop computer of year 2021: ~20s\n",
325
+ "# Duration of the native computations on a desktop computer of year 2021: ~20s\n",
326
+ "# Duration of the WebAssembly computations: about twice\n",
325
327
  "\n",
326
328
  "\n"
327
329
  ]
@@ -447,7 +449,8 @@
447
449
  "# #\n",
448
450
  "###################\n",
449
451
  "\n",
450
- "# Duration of the computations on a desktop computer of year 2021: ~5s\n",
452
+ "# Duration of the native computations on a desktop computer of year 2021: ~5s\n",
453
+ "# Duration of the WebAssembly computations: about twice\n",
451
454
  "\n",
452
455
  "\n"
453
456
  ]
@@ -0,0 +1,222 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "02240a05-3526-4530-ae12-d9522465b594",
6
+ "metadata": {},
7
+ "source": [
8
+ "# Change of Basis for Periodic Splines\n",
9
+ "The data samples at the integers are represented with circles and stem lines. The sample at the origin, as well as its periodized replicates, is indicated by a red circle and stem line. The thin colored curves are the weighted and shifted basis components whose sum is the curve depicted in thick blue."
10
+ ]
11
+ },
12
+ {
13
+ "cell_type": "code",
14
+ "execution_count": null,
15
+ "id": "230ca8a8-c806-4207-b416-9954d55f1377",
16
+ "metadata": {},
17
+ "outputs": [],
18
+ "source": [
19
+ "# Load the required libraries\n",
20
+ "import ipywidgets as widgets\n",
21
+ "import matplotlib.pyplot as plt\n",
22
+ "import numpy as np\n",
23
+ "\n",
24
+ "import splinekit as sk # This library\n",
25
+ "\n",
26
+ "# Setup\n",
27
+ "max_degree = 9 # Maximal spline degree\n",
28
+ "max_samples = 15 # Maximal support\n",
29
+ "\n",
30
+ "# Initialize the generator of random numbers\n",
31
+ "rng = np.random.default_rng()\n",
32
+ "\n",
33
+ "# Initial random periodic cubic spline\n",
34
+ "s0 = sk.PeriodicSpline1D.from_spline_coeff(rng.standard_normal(6), degree = 3)\n",
35
+ "\n",
36
+ "# Plot\n",
37
+ "def update_plot (\n",
38
+ " degree = 3,\n",
39
+ " samples = 6,\n",
40
+ " basis = 0\n",
41
+ "):\n",
42
+ " global s0\n",
43
+ "\n",
44
+ " # Update of the spline\n",
45
+ " f = s0.get_samples(0, support_length = s0.period)\n",
46
+ " if s0.period < samples:\n",
47
+ " f = np.append(f, rng.standard_normal(samples - len(f)))\n",
48
+ " else:\n",
49
+ " f = f[ : samples]\n",
50
+ " s0 = sk.PeriodicSpline1D.from_samples(f, degree = degree)\n",
51
+ "\n",
52
+ " # Decomposition according to the basis\n",
53
+ " weights = np.copy(s0.spline_coeff)\n",
54
+ " if 0 == basis: # BASIC\n",
55
+ " sk.change_basis_p(\n",
56
+ " weights,\n",
57
+ " degree = degree,\n",
58
+ " source_basis = sk.Bases.BASIC,\n",
59
+ " target_basis = sk.Bases.BASIC\n",
60
+ " )\n",
61
+ " bases = [\n",
62
+ " sk.PeriodicSpline1D.periodized_b_spline(\n",
63
+ " period = s0.period,\n",
64
+ " degree = degree\n",
65
+ " ).delayed_by(k).times(wk)\n",
66
+ " for (k, wk) in enumerate(weights)\n",
67
+ " ]\n",
68
+ " elif 1 == basis: # CARDINAL\n",
69
+ " sk.change_basis_p(\n",
70
+ " weights,\n",
71
+ " degree = degree,\n",
72
+ " source_basis = sk.Bases.BASIC,\n",
73
+ " target_basis = sk.Bases.CARDINAL\n",
74
+ " )\n",
75
+ " bases = [\n",
76
+ " sk.PeriodicSpline1D.periodized_cardinal_b_spline(\n",
77
+ " period = s0.period,\n",
78
+ " degree = degree\n",
79
+ " ).delayed_by(k).times(wk)\n",
80
+ " for (k, wk) in enumerate(weights)\n",
81
+ " ]\n",
82
+ " elif 2 == basis: # DUAL\n",
83
+ " sk.change_basis_p(\n",
84
+ " weights,\n",
85
+ " degree = degree,\n",
86
+ " source_basis = sk.Bases.BASIC,\n",
87
+ " target_basis = sk.Bases.DUAL\n",
88
+ " )\n",
89
+ " bases = [\n",
90
+ " sk.PeriodicSpline1D.periodized_dual_b_spline(\n",
91
+ " period = s0.period,\n",
92
+ " dual_degree = degree,\n",
93
+ " primal_degree = degree\n",
94
+ " ).delayed_by(k).times(wk)\n",
95
+ " for (k, wk) in enumerate(weights)\n",
96
+ " ]\n",
97
+ " elif 3 == basis: # ORTHONORMAL\n",
98
+ " sk.change_basis_p(\n",
99
+ " weights,\n",
100
+ " degree = degree,\n",
101
+ " source_basis = sk.Bases.BASIC,\n",
102
+ " target_basis = sk.Bases.ORTHONORMAL\n",
103
+ " )\n",
104
+ " bases = [\n",
105
+ " sk.PeriodicSpline1D.periodized_orthonormal_b_spline(\n",
106
+ " period = s0.period,\n",
107
+ " degree = degree\n",
108
+ " ).delayed_by(k).times(wk)\n",
109
+ " for (k, wk) in enumerate(weights)\n",
110
+ " ]\n",
111
+ "\n",
112
+ " # Dynamic range\n",
113
+ " image = {b.image() for b in bases}\n",
114
+ " image.add(s0.image())\n",
115
+ " plotrange = sk.interval.Interval.enclosure(image)\n",
116
+ " plotrange = sk.interval.Closed((\n",
117
+ " plotrange.midpoint - 0.55 * plotrange.diameter,\n",
118
+ " plotrange.midpoint + 0.55 * plotrange.diameter\n",
119
+ " ))\n",
120
+ "\n",
121
+ " # Plot of the spline\n",
122
+ " subplot = plt.subplots()\n",
123
+ " s0.plot(\n",
124
+ " subplot,\n",
125
+ " plotrange = plotrange,\n",
126
+ " plotpoints = 200 + 1,\n",
127
+ " curve_fmt = \"-C0\",\n",
128
+ " knot_marker = \"\"\n",
129
+ " )\n",
130
+ "\n",
131
+ " # Independent plot of each weighted basis component\n",
132
+ " for (k, b) in enumerate(bases):\n",
133
+ " b.plot(\n",
134
+ " subplot,\n",
135
+ " plotpoints = 200 + 1,\n",
136
+ " curve_fmt = \"-C\" + str(1 + k % 9),\n",
137
+ " curve_lw = 0.25,\n",
138
+ " curve_markerfmt = \"\",\n",
139
+ " curvestem_linefmt = \"None\",\n",
140
+ " knot_marker = \"\",\n",
141
+ " periodbound_markerfmt = \"\",\n",
142
+ " periodboundstem_linefmt = \"None\"\n",
143
+ " )\n",
144
+ " plt.show()\n",
145
+ "\n",
146
+ "widgets.interactive(\n",
147
+ " update_plot,\n",
148
+ " degree = (0, max_degree),\n",
149
+ " samples = (1, max_samples),\n",
150
+ " basis = widgets.RadioButtons(\n",
151
+ " options = [\n",
152
+ " (\"BASIC\", 0),\n",
153
+ " (\"CARDINAL\", 1),\n",
154
+ " (\"DUAL\", 2),\n",
155
+ " (\"ORTHONORMAL\", 3)\n",
156
+ " ],\n",
157
+ " value = 0,\n",
158
+ " description = \"Basis:\",\n",
159
+ " disabled = False\n",
160
+ " )\n",
161
+ ")\n"
162
+ ]
163
+ },
164
+ {
165
+ "cell_type": "code",
166
+ "execution_count": null,
167
+ "id": "c719d9b2-273a-431b-9812-11db4edcb69c",
168
+ "metadata": {},
169
+ "outputs": [],
170
+ "source": [
171
+ "\n",
172
+ "\n",
173
+ "\n",
174
+ "\n",
175
+ "\n",
176
+ "\n",
177
+ "\n",
178
+ "\n",
179
+ "\n",
180
+ "\n",
181
+ "\n",
182
+ "\n",
183
+ "\n",
184
+ "\n",
185
+ "\n",
186
+ "\n",
187
+ "\n",
188
+ "\n",
189
+ "\n",
190
+ "\n"
191
+ ]
192
+ }
193
+ ],
194
+ "metadata": {
195
+ "kernelspec": {
196
+ "display_name": "Python 3 (ipykernel)",
197
+ "language": "python",
198
+ "name": "python3"
199
+ },
200
+ "language_info": {
201
+ "codemirror_mode": {
202
+ "name": "ipython",
203
+ "version": 3
204
+ },
205
+ "file_extension": ".py",
206
+ "mimetype": "text/x-python",
207
+ "name": "python",
208
+ "nbconvert_exporter": "python",
209
+ "pygments_lexer": "ipython3",
210
+ "version": "3.12.6"
211
+ },
212
+ "widgets": {
213
+ "application/vnd.jupyter.widget-state+json": {
214
+ "state": {},
215
+ "version_major": 2,
216
+ "version_minor": 0
217
+ }
218
+ }
219
+ },
220
+ "nbformat": 4,
221
+ "nbformat_minor": 5
222
+ }
@@ -26,9 +26,13 @@
26
26
  "# Setup\n",
27
27
  "max_degree = 5 # Maximal spline degree\n",
28
28
  "max_samples = 12 # Maximal support of the observed data samples\n",
29
+ "\n",
30
+ "# Initialize the generator of random numbers\n",
31
+ "rng = np.random.default_rng()\n",
32
+ "\n",
29
33
  "# Random periodic cubic spline\n",
30
34
  "k0 = 6 # Initial number of observed samples\n",
31
- "s0 = sk.PeriodicSpline1D.from_spline_coeff(np.random.standard_normal(k0), degree = 3)\n",
35
+ "s0 = sk.PeriodicSpline1D.from_spline_coeff(rng.standard_normal(k0), degree = 3)\n",
32
36
  "\n",
33
37
  "# Plot\n",
34
38
  "def update_plot (\n",
@@ -47,7 +51,7 @@
47
51
  " # Update of the number of samples\n",
48
52
  " f0 = s0.get_samples(0, support_length = k0)\n",
49
53
  " if k0 < samples:\n",
50
- " f0 = np.append(f0, np.random.standard_normal(samples - len(f0)))\n",
54
+ " f0 = np.append(f0, rng.standard_normal(samples - len(f0)))\n",
51
55
  " else:\n",
52
56
  " f0 = f0[ : samples]\n",
53
57
  " k0 = len(f0) # Number of observed samples\n",
@@ -159,8 +159,9 @@
159
159
  "# #\n",
160
160
  "###################\n",
161
161
  "\n",
162
+ "# Duration of the native computations on a desktop computer of year 2021: ~25s\n",
163
+ "# Duration of the WebAssembly computations: about twice\n",
162
164
  "\n",
163
- "# Duration of the computations on a desktop computer of year 2021: ~25s\n",
164
165
  "\n"
165
166
  ]
166
167
  },
@@ -28,6 +28,9 @@
28
28
  "max_degree = 9 # Maximal spline degree\n",
29
29
  "max_delay = 3.0 # Maximal absolute delay\n",
30
30
  "\n",
31
+ "# Initialize the generator of random numbers\n",
32
+ "rng = np.random.default_rng()\n",
33
+ "\n",
31
34
  "# Persistent spline\n",
32
35
  "f = sk.PeriodicSpline1D()\n",
33
36
  "\n",
@@ -46,7 +49,7 @@
46
49
  " # Update of the period\n",
47
50
  " c = f.spline_coeff\n",
48
51
  " if f.period < period:\n",
49
- " c = np.append(c, np.random.standard_normal(period - f.period))\n",
52
+ " c = np.append(c, rng.standard_normal(period - f.period))\n",
50
53
  " else:\n",
51
54
  " c = c[ : period]\n",
52
55
  " # Spline being bounded\n",
@@ -0,0 +1,146 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "02240a05-3526-4530-ae12-d9522465b594",
6
+ "metadata": {},
7
+ "source": [
8
+ "# Anti-Gradient of Periodic Splines\n",
9
+ "The spline $f$ whose anti-gradient is sought is shown as a <span style=\"color:#c20078\">**fuchsia**</span> curve, with data samples at the integers represented with circles and stem lines. The sample at the origin, as well as its periodized replicates, is indicated by a red circle and stem line. The small black disks depict the knots of the spline. The anti-gradient is shown in the <span style=\"color:#1f77b4\">**azure**</span> color, while the gradient of the anti-gradient is shown in <span style=\"color:#2ca02c\">**green**</span>. Up to some value offset that depends on $E\\{f\\},$ the green and the fuchsia curves are identical.\n",
10
+ "\n",
11
+ "It is instructive to realize that the knots of all three splines share their abscissa. This indicates that the delay associated to the anti-gradient is a half-integer away from the delay associated to the spline $f$ because the degree of one of these two splines is even when the degree of the other one is odd, and reciprocally."
12
+ ]
13
+ },
14
+ {
15
+ "cell_type": "code",
16
+ "execution_count": null,
17
+ "id": "230ca8a8-c806-4207-b416-9954d55f1377",
18
+ "metadata": {},
19
+ "outputs": [],
20
+ "source": [
21
+ "# Load the required libraries\n",
22
+ "import ipywidgets as widgets\n",
23
+ "import matplotlib.pyplot as plt\n",
24
+ "import numpy as np\n",
25
+ "\n",
26
+ "import splinekit as sk # This library\n",
27
+ "\n",
28
+ "# Setup\n",
29
+ "max_period = 15 # Maximal period\n",
30
+ "max_degree = 5 # Maximal spline degree\n",
31
+ "max_delay = 8.0 # Maximal absolute delay\n",
32
+ "\n",
33
+ "# Initialize the generator of random numbers\n",
34
+ "rng = np.random.default_rng()\n",
35
+ "\n",
36
+ "# Initial random periodic cubic splines with normal Gaussian coefficients\n",
37
+ "f0 = sk.PeriodicSpline1D.from_spline_coeff(rng.standard_normal(6), degree = 3)\n",
38
+ "f0 = f0.plus(rng.choice([-1.0, 1.0]) * rng.uniform(0.05, 0.15) - f0.mean())\n",
39
+ "\n",
40
+ "# Plot\n",
41
+ "def update_plot (\n",
42
+ " period = 6,\n",
43
+ " degree = 1,\n",
44
+ " delay = 0.0\n",
45
+ "):\n",
46
+ " global f0\n",
47
+ "\n",
48
+ " # Update of the spline\n",
49
+ " if f0.period != period:\n",
50
+ " f0 = sk.PeriodicSpline1D.from_spline_coeff(\n",
51
+ " rng.standard_normal(period),\n",
52
+ " degree = f0.degree\n",
53
+ " )\n",
54
+ " # Slight departure from zero-mean\n",
55
+ " f0 = f0.plus(rng.choice([-1.0, 1.0]) * rng.uniform(0.05, 0.15) - f0.mean())\n",
56
+ " f0.degree = degree\n",
57
+ " f0.delay = delay\n",
58
+ "\n",
59
+ " # Anti-gradient\n",
60
+ " g0 = f0.anti_grad()\n",
61
+ " # Gradient of the anti-gradient\n",
62
+ " f = g0.gradient()\n",
63
+ "\n",
64
+ " # Dynamic range\n",
65
+ " image = {f0.image(), g0.image(), f.image()}\n",
66
+ " plotrange = sk.interval.Interval.enclosure(image)\n",
67
+ " plotrange = sk.interval.Closed((\n",
68
+ " plotrange.midpoint - 0.55 * plotrange.diameter,\n",
69
+ " plotrange.midpoint + 0.55 * plotrange.diameter\n",
70
+ " ))\n",
71
+ "\n",
72
+ " # Plot of the spline\n",
73
+ " subplot = plt.subplots()\n",
74
+ " f0.plot(subplot, plotrange = plotrange, plotpoints = 200 + 1, curve_fmt = \"-m\")\n",
75
+ " g0.plot(subplot, plotrange = plotrange, plotpoints = 200 + 1, curve_fmt = \"-C0\")\n",
76
+ " f.plot(subplot, plotrange = plotrange, plotpoints = 200 + 1, curve_fmt = \"-C2\")\n",
77
+ " plt.show()\n",
78
+ "\n",
79
+ "# Interaction\n",
80
+ "widgets.interactive(\n",
81
+ " update_plot,\n",
82
+ " period = (1, max_period),\n",
83
+ " degree = (0, max_degree),\n",
84
+ " delay = (-max_delay, max_delay)\n",
85
+ ")\n"
86
+ ]
87
+ },
88
+ {
89
+ "cell_type": "code",
90
+ "execution_count": null,
91
+ "id": "c719d9b2-273a-431b-9812-11db4edcb69c",
92
+ "metadata": {},
93
+ "outputs": [],
94
+ "source": [
95
+ "\n",
96
+ "\n",
97
+ "\n",
98
+ "\n",
99
+ "\n",
100
+ "\n",
101
+ "\n",
102
+ "\n",
103
+ "\n",
104
+ "\n",
105
+ "\n",
106
+ "\n",
107
+ "\n",
108
+ "\n",
109
+ "\n",
110
+ "\n",
111
+ "\n",
112
+ "\n",
113
+ "\n",
114
+ "\n"
115
+ ]
116
+ }
117
+ ],
118
+ "metadata": {
119
+ "kernelspec": {
120
+ "display_name": "Python 3 (ipykernel)",
121
+ "language": "python",
122
+ "name": "python3"
123
+ },
124
+ "language_info": {
125
+ "codemirror_mode": {
126
+ "name": "ipython",
127
+ "version": 3
128
+ },
129
+ "file_extension": ".py",
130
+ "mimetype": "text/x-python",
131
+ "name": "python",
132
+ "nbconvert_exporter": "python",
133
+ "pygments_lexer": "ipython3",
134
+ "version": "3.12.6"
135
+ },
136
+ "widgets": {
137
+ "application/vnd.jupyter.widget-state+json": {
138
+ "state": {},
139
+ "version_major": 2,
140
+ "version_minor": 0
141
+ }
142
+ }
143
+ },
144
+ "nbformat": 4,
145
+ "nbformat_minor": 5
146
+ }