splinekit 0.2.7__tar.gz → 0.2.10__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 (346) hide show
  1. {splinekit-0.2.7 → splinekit-0.2.10}/.gitignore +3 -0
  2. {splinekit-0.2.7 → splinekit-0.2.10}/PKG-INFO +11 -5
  3. {splinekit-0.2.7 → splinekit-0.2.10}/README.md +8 -2
  4. {splinekit-0.2.7 → splinekit-0.2.10/dev/Accelerated}/pyproject.toml +1 -1
  5. splinekit-0.2.10/dev/Jupyter/periodic-spline/addition/spline_add_prjct.ipynb +173 -0
  6. splinekit-0.2.10/dev/Jupyter/periodic-spline/addition/spline_addition.ipynb +165 -0
  7. splinekit-0.2.10/dev/Jupyter/periodic-spline/calculus/spline_antigrad.ipynb +146 -0
  8. splinekit-0.2.10/dev/Jupyter/periodic-spline/calculus/spline_derivative.ipynb +165 -0
  9. splinekit-0.2.10/dev/Jupyter/periodic-spline/calculus/spline_fourier_diff.ipynb +239 -0
  10. splinekit-0.2.10/dev/Jupyter/periodic-spline/calculus/spline_gradient.ipynb +173 -0
  11. splinekit-0.2.10/dev/Jupyter/periodic-spline/calculus/spline_integrate.ipynb +185 -0
  12. splinekit-0.2.10/dev/Jupyter/periodic-spline/construct/spline_from_c.ipynb +244 -0
  13. splinekit-0.2.10/dev/Jupyter/periodic-spline/conv_corr/spline_autocorr.ipynb +178 -0
  14. splinekit-0.2.10/dev/Jupyter/periodic-spline/conv_corr/spline_convolve.ipynb +190 -0
  15. splinekit-0.2.10/dev/Jupyter/periodic-spline/conv_corr/spline_correlate.ipynb +211 -0
  16. splinekit-0.2.10/dev/Jupyter/periodic-spline/extrema/spline_curated_xtrm.ipynb +205 -0
  17. splinekit-0.2.10/dev/Jupyter/periodic-spline/extrema/spline_xtrm.ipynb +186 -0
  18. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/fourier/spline_fourier.ipynb +4 -6
  19. splinekit-0.2.10/dev/Jupyter/periodic-spline/fourier/spline_from_fourier.ipynb +188 -0
  20. splinekit-0.2.10/dev/Jupyter/periodic-spline/fourier/spline_smoothness.ipynb +139 -0
  21. splinekit-0.2.10/dev/Jupyter/periodic-spline/multiresolution/spline_down.ipynb +309 -0
  22. splinekit-0.2.10/dev/Jupyter/periodic-spline/multiresolution/spline_down_divisible.ipynb +279 -0
  23. splinekit-0.2.10/dev/Jupyter/periodic-spline/multiresolution/spline_rescale.ipynb +207 -0
  24. splinekit-0.2.10/dev/Jupyter/periodic-spline/multiresolution/spline_up.ipynb +207 -0
  25. splinekit-0.2.10/dev/Jupyter/periodic-spline/multiresolution/spline_up_proj.ipynb +204 -0
  26. splinekit-0.2.10/dev/Jupyter/periodic-spline/projection/spline_projection.ipynb +145 -0
  27. splinekit-0.2.10/dev/Jupyter/periodic-spline/sgn/spline_curated_zeros.ipynb +220 -0
  28. splinekit-0.2.10/dev/Jupyter/periodic-spline/sgn/spline_sgn.ipynb +168 -0
  29. splinekit-0.2.10/dev/Jupyter/periodic-spline/sgn/spline_zeros.ipynb +365 -0
  30. {splinekit-0.2.7 → splinekit-0.2.10}/dev/PurePython/pyproject.toml +1 -1
  31. splinekit-0.2.10/dev/Wolfram/Generic Projection Infinite Support.nb +14906 -0
  32. splinekit-0.2.10/dev/Wolfram/Generic Projection Periodic coefficients.nb +2710 -0
  33. splinekit-0.2.10/dev/Wolfram/Generic Projection.nb +8513 -0
  34. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Wolfram/Test PeriodicSpline1D.nb +293 -169
  35. splinekit-0.2.10/dev/Wolfram/Verify Upscale Projected.nb +16267 -0
  36. splinekit-0.2.10/dev/Wolfram/Verify Upscale.nb +1650 -0
  37. splinekit-0.2.10/dev/Wolfram/Verify downscale_projected.nb +1897 -0
  38. splinekit-0.2.10/docs/bibliography.rst +15 -0
  39. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/bspline/bspline_bases.rst +27 -27
  40. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/bspline/bspline_inverse.rst +7 -7
  41. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/bspline/bspline_m_scale.rst +1 -1
  42. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/bspline/bspline_poles.rst +13 -13
  43. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/bspline/bspline_stability.rst +5 -5
  44. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/bspline/bspline_vs_pi.rst +2 -2
  45. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/bspline/spline_engineer_func.rst +5 -5
  46. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/bspline/spline_vs_poly.rst +11 -11
  47. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/padding/change_basis.rst +1 -1
  48. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/padding/padding.rst +34 -34
  49. splinekit-0.2.10/docs/demos/spline1d/addition.rst +80 -0
  50. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/spline1d/bounds.rst +16 -16
  51. splinekit-0.2.10/docs/demos/spline1d/calculus.rst +133 -0
  52. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/spline1d/constructors.rst +14 -5
  53. splinekit-0.2.10/docs/demos/spline1d/conv_corr.rst +148 -0
  54. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/spline1d/evaluation.rst +5 -5
  55. splinekit-0.2.10/docs/demos/spline1d/extrema.rst +23 -0
  56. splinekit-0.2.10/docs/demos/spline1d/fourier.rst +143 -0
  57. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/spline1d/index.rst +8 -0
  58. splinekit-0.2.10/docs/demos/spline1d/multires.rst +247 -0
  59. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/spline1d/plot.rst +1 -1
  60. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/spline1d/polynomials.rst +13 -13
  61. splinekit-0.2.10/docs/demos/spline1d/projection.rst +39 -0
  62. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/spline1d/random1d.rst +1 -1
  63. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/spline1d/random2d.rst +1 -1
  64. splinekit-0.2.10/docs/demos/spline1d/signum.rst +78 -0
  65. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/spline1d/stats.rst +1 -1
  66. {splinekit-0.2.7 → splinekit-0.2.10}/docs/index.rst +1 -0
  67. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/01_periodic_spline_1d.rst +1 -1
  68. {splinekit-0.2.7/dev/Accelerated → splinekit-0.2.10}/pyproject.toml +1 -1
  69. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/periodic_spline_1d.py +686 -61
  70. {splinekit-0.2.7 → splinekit-0.2.10}/tests/test_periodic_spline_1d.py +240 -0
  71. splinekit-0.2.7/.virtual_documents/dev/Jupyter/spline_plot.ipynb +0 -323
  72. splinekit-0.2.7/_output/api/translations/all.json +0 -9
  73. splinekit-0.2.7/_output/api/translations/en.json +0 -4
  74. splinekit-0.2.7/_output/api/workspaces/all.json +0 -1
  75. splinekit-0.2.7/_output/bootstrap.js +0 -180
  76. splinekit-0.2.7/_output/config-utils.js +0 -267
  77. splinekit-0.2.7/_output/consoles/favicon.ico +0 -0
  78. splinekit-0.2.7/_output/consoles/index.html +0 -126
  79. splinekit-0.2.7/_output/consoles/jupyter-lite.ipynb +0 -55
  80. splinekit-0.2.7/_output/consoles/jupyter-lite.json +0 -11
  81. splinekit-0.2.7/_output/consoles/package.json +0 -350
  82. splinekit-0.2.7/_output/doc/tree/index.html +0 -14
  83. splinekit-0.2.7/_output/doc/workspaces/index.html +0 -28
  84. splinekit-0.2.7/_output/edit/favicon.ico +0 -0
  85. splinekit-0.2.7/_output/edit/index.html +0 -126
  86. splinekit-0.2.7/_output/edit/jupyter-lite.ipynb +0 -55
  87. splinekit-0.2.7/_output/edit/jupyter-lite.json +0 -11
  88. splinekit-0.2.7/_output/edit/package.json +0 -366
  89. splinekit-0.2.7/_output/extensions/jupyterlab-jupytext/install.json +0 -5
  90. splinekit-0.2.7/_output/extensions/jupyterlab-jupytext/package.json +0 -96
  91. splinekit-0.2.7/_output/extensions/jupyterlab-jupytext/schemas/jupyterlab-jupytext/package.json.orig +0 -92
  92. splinekit-0.2.7/_output/extensions/jupyterlab-jupytext/schemas/jupyterlab-jupytext/plugin.json +0 -57
  93. splinekit-0.2.7/_output/extensions/jupyterlab-jupytext/static/48.0570848d2b31a5354b7d.js +0 -2
  94. splinekit-0.2.7/_output/extensions/jupyterlab-jupytext/static/48.0570848d2b31a5354b7d.js.LICENSE.txt +0 -8
  95. splinekit-0.2.7/_output/extensions/jupyterlab-jupytext/static/509.d51a8122d1920ac82323.js +0 -1
  96. splinekit-0.2.7/_output/extensions/jupyterlab-jupytext/static/720.094c38d70b1dec0ceea7.js +0 -1
  97. splinekit-0.2.7/_output/extensions/jupyterlab-jupytext/static/remoteEntry.94495aac41d2fef6ad41.js +0 -1
  98. splinekit-0.2.7/_output/extensions/jupyterlab-jupytext/static/style.js +0 -4
  99. splinekit-0.2.7/_output/extensions/jupyterlab-jupytext/static/third-party-licenses.json +0 -28
  100. splinekit-0.2.7/_output/extensions/jupyterlab_pygments/install.json +0 -5
  101. splinekit-0.2.7/_output/extensions/jupyterlab_pygments/package.json +0 -205
  102. splinekit-0.2.7/_output/extensions/jupyterlab_pygments/static/568.1e2faa2ba0bbe59c4780.js +0 -1
  103. splinekit-0.2.7/_output/extensions/jupyterlab_pygments/static/747.67662283a5707eeb4d4c.js +0 -1
  104. splinekit-0.2.7/_output/extensions/jupyterlab_pygments/static/remoteEntry.5cbb9d2323598fbda535.js +0 -1
  105. splinekit-0.2.7/_output/extensions/jupyterlab_pygments/static/style.js +0 -4
  106. splinekit-0.2.7/_output/extensions/jupyterlab_pygments/static/third-party-licenses.json +0 -16
  107. splinekit-0.2.7/_output/icon-120x120.png +0 -0
  108. splinekit-0.2.7/_output/icon-512x512.png +0 -0
  109. splinekit-0.2.7/_output/index.html +0 -68
  110. splinekit-0.2.7/_output/jupyter-lite.ipynb +0 -55
  111. splinekit-0.2.7/_output/jupyter-lite.json +0 -400
  112. splinekit-0.2.7/_output/jupyterlite.schema.v0.json +0 -325
  113. splinekit-0.2.7/_output/lab/favicon.ico +0 -0
  114. splinekit-0.2.7/_output/lab/index.html +0 -126
  115. splinekit-0.2.7/_output/lab/jupyter-lite.ipynb +0 -55
  116. splinekit-0.2.7/_output/lab/jupyter-lite.json +0 -10
  117. splinekit-0.2.7/_output/lab/package.json +0 -362
  118. splinekit-0.2.7/_output/lab/tree/index.html +0 -14
  119. splinekit-0.2.7/_output/lab/workspaces/index.html +0 -28
  120. splinekit-0.2.7/_output/manifest.webmanifest +0 -32
  121. splinekit-0.2.7/_output/notebooks/favicon.ico +0 -0
  122. splinekit-0.2.7/_output/notebooks/index.html +0 -126
  123. splinekit-0.2.7/_output/notebooks/jupyter-lite.ipynb +0 -55
  124. splinekit-0.2.7/_output/notebooks/jupyter-lite.json +0 -11
  125. splinekit-0.2.7/_output/notebooks/package.json +0 -375
  126. splinekit-0.2.7/_output/package.json +0 -44
  127. splinekit-0.2.7/_output/repl/index.html +0 -126
  128. splinekit-0.2.7/_output/repl/jupyter-lite.ipynb +0 -55
  129. splinekit-0.2.7/_output/repl/jupyter-lite.json +0 -7
  130. splinekit-0.2.7/_output/repl/package.json +0 -289
  131. splinekit-0.2.7/_output/service-worker.js +0 -1
  132. splinekit-0.2.7/_output/static/favicons/favicon-busy-1.ico +0 -0
  133. splinekit-0.2.7/_output/static/favicons/favicon-busy-2.ico +0 -0
  134. splinekit-0.2.7/_output/static/favicons/favicon-busy-3.ico +0 -0
  135. splinekit-0.2.7/_output/static/favicons/favicon-file.ico +0 -0
  136. splinekit-0.2.7/_output/static/favicons/favicon-notebook.ico +0 -0
  137. splinekit-0.2.7/_output/static/favicons/favicon-terminal.ico +0 -0
  138. splinekit-0.2.7/_output/static/favicons/favicon.ico +0 -0
  139. splinekit-0.2.7/_output/tree/favicon.ico +0 -0
  140. splinekit-0.2.7/_output/tree/index.html +0 -115
  141. splinekit-0.2.7/_output/tree/jupyter-lite.ipynb +0 -55
  142. splinekit-0.2.7/_output/tree/jupyter-lite.json +0 -10
  143. splinekit-0.2.7/_output/tree/package.json +0 -333
  144. {splinekit-0.2.7 → splinekit-0.2.10}/.github/workflows/deploy-docs.yml +0 -0
  145. {splinekit-0.2.7 → splinekit-0.2.10}/.github/workflows/release.yml +0 -0
  146. {splinekit-0.2.7 → splinekit-0.2.10}/.github/workflows/test.yml +0 -0
  147. {splinekit-0.2.7 → splinekit-0.2.10}/.jupyterlite.doit.db +0 -0
  148. {splinekit-0.2.7 → splinekit-0.2.10}/CMakeLists.txt +0 -0
  149. {splinekit-0.2.7 → splinekit-0.2.10}/LICENSE +0 -0
  150. {splinekit-0.2.7 → splinekit-0.2.10}/ansi_c/spline_padding/src/spline_padding.c +0 -0
  151. {splinekit-0.2.7 → splinekit-0.2.10}/ansi_c/spline_padding/src/spline_padding.h +0 -0
  152. {splinekit-0.2.7 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_cmake/CMakeLists.txt +0 -0
  153. {splinekit-0.2.7 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_cmake/spline_padding.c +0 -0
  154. {splinekit-0.2.7 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_cmake/spline_padding.h +0 -0
  155. {splinekit-0.2.7 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/libspline_padding.dylib +0 -0
  156. {splinekit-0.2.7 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/spline_padding.c +0 -0
  157. {splinekit-0.2.7 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/spline_padding.h +0 -0
  158. {splinekit-0.2.7 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/project.pbxproj +0 -0
  159. {splinekit-0.2.7 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  160. {splinekit-0.2.7 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/project.xcworkspace/xcuserdata/pthevena.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  161. {splinekit-0.2.7 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/xcuserdata/pthevena.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  162. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Accelerated/dispatch.sh +0 -0
  163. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Accelerated/release.yml +0 -0
  164. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Accelerated/spline_padding.py +0 -0
  165. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_cardinal.ipynb +0 -0
  166. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_dual.ipynb +0 -0
  167. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_dual_property.ipynb +0 -0
  168. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_member.ipynb +0 -0
  169. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_ortho.ipynb +0 -0
  170. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_ortho_property.ipynb +0 -0
  171. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_sinc.ipynb +0 -0
  172. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/hello/bspline_hello.ipynb +0 -0
  173. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/hello/bspline_hello_grad.ipynb +0 -0
  174. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/hello/bspline_hello_integral.ipynb +0 -0
  175. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/inverse/bspline_inv.ipynb +0 -0
  176. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/inverse/bspline_periodic_inv.ipynb +0 -0
  177. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/m-scale/bspline_m_scale.ipynb +0 -0
  178. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/mathfunc/bspline_gauss_exo.ipynb +0 -0
  179. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/mathfunc/bspline_trigo_exo.ipynb +0 -0
  180. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/mathfunc/bspline_vs_cos.ipynb +0 -0
  181. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/mathfunc/bspline_vs_erf.ipynb +0 -0
  182. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/mathfunc/bspline_vs_exp.ipynb +0 -0
  183. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/mathfunc/bspline_vs_sin.ipynb +0 -0
  184. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/members/bspline_member.ipynb +0 -0
  185. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/members/bspline_member_diff.ipynb +0 -0
  186. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/members/bspline_member_integral.ipynb +0 -0
  187. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/poles/bspline_annihilate.ipynb +0 -0
  188. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/poles/bspline_poles.ipynb +0 -0
  189. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/poly/bspline_convolve_mono.ipynb +0 -0
  190. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/poly/bspline_partition_mono.ipynb +0 -0
  191. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/poly/bspline_spline_poly.ipynb +0 -0
  192. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/stability/bspline_numeric_stability.ipynb +0 -0
  193. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/vs-pi/bspline_vs_pi_as_sum.ipynb +0 -0
  194. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/bspline/vs-pi/bspline_vs_pi_at0.ipynb +0 -0
  195. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/padding/change-basis/padding_bases.ipynb +0 -0
  196. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/padding/padding/padding_data.ipynb +0 -0
  197. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/padding/padding/padding_speed.ipynb +0 -0
  198. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/bounds/spline_bounds.ipynb +0 -0
  199. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/construct/spline_approximation.ipynb +0 -0
  200. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/construct/spline_interpolation.ipynb +0 -0
  201. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/eval/spline_at_array.ipynb +0 -0
  202. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/eval/spline_at_scalar.ipynb +0 -0
  203. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/eval/spline_evaluation_speed.ipynb +0 -0
  204. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/ops/spline_simple_ops.ipynb +0 -0
  205. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/plot/spline_plot.ipynb +0 -0
  206. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/poly/spline_polynomials.ipynb +0 -0
  207. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/random-1d/spline_random_1d.ipynb +0 -0
  208. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/random-2d/spline_random_2d.ipynb +0 -0
  209. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/stats/spline_stats.ipynb +0 -0
  210. {splinekit-0.2.7 → splinekit-0.2.10}/dev/PurePython/dispatch.sh +0 -0
  211. {splinekit-0.2.7 → splinekit-0.2.10}/dev/PurePython/release.yml +0 -0
  212. {splinekit-0.2.7 → splinekit-0.2.10}/dev/PurePython/spline_padding.py +0 -0
  213. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Wolfram/Bspline Poles.nb +0 -0
  214. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Wolfram/IntervalChecks.nb +0 -0
  215. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Wolfram/PeriodicSplinesChecks.nb +0 -0
  216. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Wolfram/SplinePaddingChecks.nb +0 -0
  217. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Wolfram/Test BSplines.nb +0 -0
  218. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Wolfram/Test PeriodicNonuniformPiecewise.nb +0 -0
  219. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Wolfram/Test SplinePadding.nb +0 -0
  220. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Wolfram/Test SplineUtilities.nb +0 -0
  221. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Wolfram/Verify doc.nb +0 -0
  222. {splinekit-0.2.7 → splinekit-0.2.10}/dev/Wolfram/rescued Test SplinePadding.nb +0 -0
  223. {splinekit-0.2.7 → splinekit-0.2.10}/docs/.jupyterlite.doit.db +0 -0
  224. {splinekit-0.2.7 → splinekit-0.2.10}/docs/_static/custom.css +0 -0
  225. {splinekit-0.2.7 → splinekit-0.2.10}/docs/bases/01_bases.rst +0 -0
  226. {splinekit-0.2.7 → splinekit-0.2.10}/docs/bases/index.rst +0 -0
  227. {splinekit-0.2.7 → splinekit-0.2.10}/docs/bases/noxfile.py +0 -0
  228. {splinekit-0.2.7 → splinekit-0.2.10}/docs/bsplines/01_bsplines.rst +0 -0
  229. {splinekit-0.2.7 → splinekit-0.2.10}/docs/bsplines/index.rst +0 -0
  230. {splinekit-0.2.7 → splinekit-0.2.10}/docs/bsplines/noxfile.py +0 -0
  231. {splinekit-0.2.7 → splinekit-0.2.10}/docs/conf.py +0 -0
  232. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/bspline/bspline_members.rst +0 -0
  233. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/bspline/bspline_numeric_stability.ipynb.gz +0 -0
  234. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/bspline/hello_bspline.rst +0 -0
  235. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/bspline/index.rst +0 -0
  236. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/index.rst +0 -0
  237. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/padding/index.rst +0 -0
  238. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/padding/padding_speed.ipynb.gz +0 -0
  239. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/spline1d/simple_ops.rst +0 -0
  240. {splinekit-0.2.7 → splinekit-0.2.10}/docs/demos/spline1d/spline_evaluation_speed.ipynb.gz +0 -0
  241. {splinekit-0.2.7 → splinekit-0.2.10}/docs/environment.yml +0 -0
  242. {splinekit-0.2.7 → splinekit-0.2.10}/docs/glossary/glossary-numbers.rst +0 -0
  243. {splinekit-0.2.7 → splinekit-0.2.10}/docs/glossary/glossary-polynomials.rst +0 -0
  244. {splinekit-0.2.7 → splinekit-0.2.10}/docs/glossary/glossary-splines.rst +0 -0
  245. {splinekit-0.2.7 → splinekit-0.2.10}/docs/glossary/glossary-terminology.rst +0 -0
  246. {splinekit-0.2.7 → splinekit-0.2.10}/docs/glossary/index.rst +0 -0
  247. {splinekit-0.2.7 → splinekit-0.2.10}/docs/installation/index.rst +0 -0
  248. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/bounded/01_bounded.rst +0 -0
  249. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/bounded/02_open.rst +0 -0
  250. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/bounded/03_open_closed.rst +0 -0
  251. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/bounded/04_closed.rst +0 -0
  252. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/bounded/05_closed_open.rst +0 -0
  253. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/bounded/index.rst +0 -0
  254. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/bounded/noxfile.py +0 -0
  255. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/degenerate/01_degenerate.rst +0 -0
  256. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/degenerate/02_singleton.rst +0 -0
  257. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/degenerate/index.rst +0 -0
  258. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/degenerate/noxfile.py +0 -0
  259. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/half_bounded/01_half_bounded.rst +0 -0
  260. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/half_bounded/02_above.rst +0 -0
  261. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/half_bounded/03_not_below.rst +0 -0
  262. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/half_bounded/04_not_above.rst +0 -0
  263. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/half_bounded/05_below.rst +0 -0
  264. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/half_bounded/index.rst +0 -0
  265. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/half_bounded/noxfile.py +0 -0
  266. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/index.rst +0 -0
  267. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/interval/01_interval.rst +0 -0
  268. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/interval/index.rst +0 -0
  269. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/interval/noxfile.py +0 -0
  270. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/noxfile.py +0 -0
  271. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/universal/01_universal.rst +0 -0
  272. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/universal/02_empty.rst +0 -0
  273. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/universal/03_rr.rst +0 -0
  274. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/universal/index.rst +0 -0
  275. {splinekit-0.2.7 → splinekit-0.2.10}/docs/interval/universal/noxfile.py +0 -0
  276. {splinekit-0.2.7 → splinekit-0.2.10}/docs/noxfile.py +0 -0
  277. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_nonuniform_piecewise/01_periodic_nonuniform_piecewise.rst +0 -0
  278. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_nonuniform_piecewise/index.rst +0 -0
  279. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_nonuniform_piecewise/noxfile.py +0 -0
  280. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/index.rst +0 -0
  281. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m00.png +0 -0
  282. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m01.png +0 -0
  283. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m02.png +0 -0
  284. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m03.png +0 -0
  285. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m04.png +0 -0
  286. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m05.png +0 -0
  287. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m06.png +0 -0
  288. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m07.png +0 -0
  289. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m08.png +0 -0
  290. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m09.png +0 -0
  291. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m10.png +0 -0
  292. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m11.png +0 -0
  293. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m12.png +0 -0
  294. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m13.png +0 -0
  295. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m14.png +0 -0
  296. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m15.png +0 -0
  297. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m16.png +0 -0
  298. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m17.png +0 -0
  299. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m18.png +0 -0
  300. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m19.png +0 -0
  301. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m20.png +0 -0
  302. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m21.png +0 -0
  303. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m22.png +0 -0
  304. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m23.png +0 -0
  305. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/m24.png +0 -0
  306. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/matplotlib-color.rst +0 -0
  307. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/matplotlib-linestyle.rst +0 -0
  308. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/matplotlib-marker.rst +0 -0
  309. {splinekit-0.2.7 → splinekit-0.2.10}/docs/periodic_spline_1d/noxfile.py +0 -0
  310. {splinekit-0.2.7 → splinekit-0.2.10}/docs/spline_padding/01_spline_padding.rst +0 -0
  311. {splinekit-0.2.7 → splinekit-0.2.10}/docs/spline_padding/index.rst +0 -0
  312. {splinekit-0.2.7 → splinekit-0.2.10}/docs/spline_padding/noxfile.py +0 -0
  313. {splinekit-0.2.7 → splinekit-0.2.10}/docs/spline_utilities/01_spline_utilities.rst +0 -0
  314. {splinekit-0.2.7 → splinekit-0.2.10}/docs/spline_utilities/index.rst +0 -0
  315. {splinekit-0.2.7 → splinekit-0.2.10}/docs/spline_utilities/noxfile.py +0 -0
  316. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/__init__.py +0 -0
  317. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/bases.py +0 -0
  318. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/bsplines.py +0 -0
  319. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/__init__.py +0 -0
  320. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/_known_intervals.py +0 -0
  321. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/above.py +0 -0
  322. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/below.py +0 -0
  323. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/bounded.py +0 -0
  324. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/closed.py +0 -0
  325. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/closed_open.py +0 -0
  326. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/degenerate.py +0 -0
  327. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/empty.py +0 -0
  328. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/half_bounded.py +0 -0
  329. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/interval.py +0 -0
  330. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/mypy.ini +0 -0
  331. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/not_above.py +0 -0
  332. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/not_below.py +0 -0
  333. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/open.py +0 -0
  334. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/open_closed.py +0 -0
  335. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/rr.py +0 -0
  336. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/singleton.py +0 -0
  337. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/interval/universal.py +0 -0
  338. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/mypy.ini +0 -0
  339. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/periodic_nonuniform_piecewise.py +0 -0
  340. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/spline_padding.py +0 -0
  341. {splinekit-0.2.7 → splinekit-0.2.10}/src/splinekit/spline_utilities.py +0 -0
  342. {splinekit-0.2.7 → splinekit-0.2.10}/temp/bspline_stability.py +0 -0
  343. {splinekit-0.2.7 → splinekit-0.2.10}/tests/test_bsplines.py +0 -0
  344. {splinekit-0.2.7 → splinekit-0.2.10}/tests/test_periodic_nonuniform_piecewise.py +0 -0
  345. {splinekit-0.2.7 → splinekit-0.2.10}/tests/test_spline_padding.py +0 -0
  346. {splinekit-0.2.7 → splinekit-0.2.10}/tests/test_spline_utilities.py +0 -0
@@ -94,6 +94,9 @@ target/
94
94
  # Jupyter Notebook
95
95
  .ipynb_checkpoints
96
96
 
97
+ # Jupyterlite
98
+ _output/
99
+
97
100
  # IPython
98
101
  profile_default/
99
102
  ipython_config.py
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splinekit
3
- Version: 0.2.7
3
+ Version: 0.2.10
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,7 +51,7 @@ Description-Content-Type: text/markdown
51
51
 
52
52
  <!-- splinekit/README.md -->
53
53
 
54
- # Version 0.2.7
54
+ # Version 0.2.10
55
55
 
56
56
  # splinekit: Spline Operations
57
57
  `splinekit` is a Python-based open-source software library aimed at the manipulation of one-dimensional periodic splines.
@@ -116,7 +116,7 @@ pip install -e .[dev]
116
116
 
117
117
  ## Release Notes
118
118
 
119
- ### 0.1.0
119
+ ### 0.1.*
120
120
  First stable version. Pure Python.
121
121
 
122
122
  ### 0.2.1
@@ -133,3 +133,9 @@ Some demos added. Documentation minor updates.
133
133
 
134
134
  ### 0.2.7
135
135
  Upgraded to jupyterlite 0.7
136
+
137
+ ### 0.2.8
138
+ Some demos added.
139
+
140
+ ### 0.2.9 — 0.2.10
141
+ All demos added. Operators. Faster execution.
@@ -1,6 +1,6 @@
1
1
  <!-- splinekit/README.md -->
2
2
 
3
- # Version 0.2.7
3
+ # Version 0.2.10
4
4
 
5
5
  # splinekit: Spline Operations
6
6
  `splinekit` is a Python-based open-source software library aimed at the manipulation of one-dimensional periodic splines.
@@ -65,7 +65,7 @@ pip install -e .[dev]
65
65
 
66
66
  ## Release Notes
67
67
 
68
- ### 0.1.0
68
+ ### 0.1.*
69
69
  First stable version. Pure Python.
70
70
 
71
71
  ### 0.2.1
@@ -82,3 +82,9 @@ Some demos added. Documentation minor updates.
82
82
 
83
83
  ### 0.2.7
84
84
  Upgraded to jupyterlite 0.7
85
+
86
+ ### 0.2.8
87
+ Some demos added.
88
+
89
+ ### 0.2.9 — 0.2.10
90
+ All demos added. Operators. Faster execution.
@@ -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.7"
13
+ version = "0.2.10"
14
14
  dependencies = [
15
15
  "numpy >=1.26",
16
16
  "scipy >=1.15",
@@ -0,0 +1,173 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "006cebf8-f66b-48aa-9f8b-0840d37ca07d",
6
+ "metadata": {},
7
+ "source": [
8
+ "# Addition of Splines of Identical Period\n",
9
+ "We display the augend in the <span style=\"color:#1f77b4\">**azure**</span> color; it is the realization of a random periodic polynomial spline of a specified degree $n_{1}$ and delay $\\delta x_{1}.$ For some other (independent) degree $n_{2}$ and delay $\\delta x_{2},$ we display the addend in the <span style=\"color:#17becf\">**aqua**</span> color; it is another realization of a random periodic polynomial spline. We then plot as a thick curve in the <span style=\"color:#8c564b\">**sepia**</span> color the spline of specified degree $n$ and delay $\\delta x$ that best approximates the addition of the addend to the augend. The augend, the addend, and the approximation of their sum have the same period, but may not share the location of their knots."
10
+ ]
11
+ },
12
+ {
13
+ "cell_type": "code",
14
+ "execution_count": null,
15
+ "id": "b3185aea-65df-4ca8-8011-efe4d523876c",
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_period = 15 # Maximal period\n",
28
+ "max_degree = 9 # Maximal spline degree\n",
29
+ "max_delay = 3.0 # Maximal absolute delay\n",
30
+ "\n",
31
+ "# Initialize the generator of random numbers\n",
32
+ "rng = np.random.default_rng()\n",
33
+ "\n",
34
+ "# Initial random periodic splines\n",
35
+ "f1 = sk.PeriodicSpline1D.from_spline_coeff(rng.standard_normal(6), degree = 2)\n",
36
+ "f2 = sk.PeriodicSpline1D.from_spline_coeff(rng.standard_normal(6), degree = 3)\n",
37
+ "\n",
38
+ "# Plot\n",
39
+ "def update_plot (\n",
40
+ " period = 6,\n",
41
+ " degree_1 = 2,\n",
42
+ " delay_1 = 0.0,\n",
43
+ " degree_2 = 3,\n",
44
+ " delay_2 = 0.0,\n",
45
+ " degree = 1,\n",
46
+ " delay = 0.0\n",
47
+ "):\n",
48
+ " global f1\n",
49
+ " global f2\n",
50
+ "\n",
51
+ " # Update of the splines\n",
52
+ " if f1.period != period:\n",
53
+ " f1 = sk.PeriodicSpline1D.from_spline_coeff(\n",
54
+ " rng.standard_normal(period),\n",
55
+ " degree = f1.degree\n",
56
+ " )\n",
57
+ " f1.degree = degree_1\n",
58
+ " f1.delay = delay_1\n",
59
+ " if f2.period != period:\n",
60
+ " f2 = sk.PeriodicSpline1D.from_spline_coeff(\n",
61
+ " rng.standard_normal(period),\n",
62
+ " degree = f2.degree\n",
63
+ " )\n",
64
+ " f2.degree = degree_2\n",
65
+ " f2.delay = delay_2\n",
66
+ "\n",
67
+ " # Addition\n",
68
+ " f = sk.PeriodicSpline1D.add_projected(f1, f2, degree = degree, delay = delay)\n",
69
+ "\n",
70
+ " # Dynamic range\n",
71
+ " image = {f1.image(), f2.image(), f.image()}\n",
72
+ " plotrange = sk.interval.Interval.enclosure(image)\n",
73
+ " plotrange = sk.interval.Closed((\n",
74
+ " plotrange.midpoint - 0.55 * plotrange.diameter,\n",
75
+ " plotrange.midpoint + 0.55 * plotrange.diameter\n",
76
+ " ))\n",
77
+ "\n",
78
+ " # Plots\n",
79
+ " subplot = plt.subplots()\n",
80
+ " # Augend\n",
81
+ " f1.plot(subplot, plotrange = plotrange, plotpoints = 200 + 1)\n",
82
+ " # Addend\n",
83
+ " f2.plot(\n",
84
+ " subplot,\n",
85
+ " plotrange = plotrange,\n",
86
+ " plotpoints = 200 + 1,\n",
87
+ " curve_fmt = \"-C9\",\n",
88
+ " curve_markerfmt = \"oC9\",\n",
89
+ " )\n",
90
+ " # Sum\n",
91
+ " f.plot(\n",
92
+ " subplot,\n",
93
+ " plotrange = plotrange,\n",
94
+ " plotpoints = 200 + 1,\n",
95
+ " curve_fmt = \"-C5\",\n",
96
+ " curve_markerfmt = \"oC5\",\n",
97
+ " curve_lw = 2.0\n",
98
+ " )\n",
99
+ "\n",
100
+ " # Final display\n",
101
+ " plt.show()\n",
102
+ "\n",
103
+ "widgets.interactive(\n",
104
+ " update_plot,\n",
105
+ " period = (1, max_period),\n",
106
+ " degree_1 = (0, max_degree),\n",
107
+ " delay_1 = (-max_delay, max_delay),\n",
108
+ " degree_2 = (0, max_degree),\n",
109
+ " delay_2 = (-max_delay, max_delay),\n",
110
+ " degree = (0, max_degree),\n",
111
+ " delay = (-max_delay, max_delay)\n",
112
+ ")\n"
113
+ ]
114
+ },
115
+ {
116
+ "cell_type": "code",
117
+ "execution_count": null,
118
+ "id": "b5490a8b-70d3-4b94-a4ad-ea140f8cd9de",
119
+ "metadata": {},
120
+ "outputs": [],
121
+ "source": [
122
+ "\n",
123
+ "\n",
124
+ "\n",
125
+ "\n",
126
+ "\n",
127
+ "\n",
128
+ "\n",
129
+ "\n",
130
+ "\n",
131
+ "\n",
132
+ "\n",
133
+ "\n",
134
+ "\n",
135
+ "\n",
136
+ "\n",
137
+ "\n",
138
+ "\n",
139
+ "\n",
140
+ "\n",
141
+ "\n"
142
+ ]
143
+ }
144
+ ],
145
+ "metadata": {
146
+ "kernelspec": {
147
+ "display_name": "Python 3 (ipykernel)",
148
+ "language": "python",
149
+ "name": "python3"
150
+ },
151
+ "language_info": {
152
+ "codemirror_mode": {
153
+ "name": "ipython",
154
+ "version": 3
155
+ },
156
+ "file_extension": ".py",
157
+ "mimetype": "text/x-python",
158
+ "name": "python",
159
+ "nbconvert_exporter": "python",
160
+ "pygments_lexer": "ipython3",
161
+ "version": "3.12.6"
162
+ },
163
+ "widgets": {
164
+ "application/vnd.jupyter.widget-state+json": {
165
+ "state": {},
166
+ "version_major": 2,
167
+ "version_minor": 0
168
+ }
169
+ }
170
+ },
171
+ "nbformat": 4,
172
+ "nbformat_minor": 5
173
+ }
@@ -0,0 +1,165 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "006cebf8-f66b-48aa-9f8b-0840d37ca07d",
6
+ "metadata": {},
7
+ "source": [
8
+ "# Addition of Two Compatible Splines\n",
9
+ "We display the augend in the <span style=\"color:#1f77b4\">**azure**</span> color; it is the realization of a random periodic polynomial spline of a specified period, degree, and delay. For the same period, degree, and delay, we display the addend in the <span style=\"color:#17becf\">**aqua**</span> color; it is another realization of a random periodic polynomial spline. We then plot as a thick curve in the <span style=\"color:#8c564b\">**sepia**</span> color the sum resulting from the addition of the addend to the augend."
10
+ ]
11
+ },
12
+ {
13
+ "cell_type": "code",
14
+ "execution_count": null,
15
+ "id": "b3185aea-65df-4ca8-8011-efe4d523876c",
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_period = 15 # Maximal period\n",
28
+ "max_degree = 9 # Maximal spline degree\n",
29
+ "max_delay = 3.0 # Maximal absolute delay\n",
30
+ "\n",
31
+ "# Initialize the generator of random numbers\n",
32
+ "rng = np.random.default_rng()\n",
33
+ "\n",
34
+ "# Initial random periodic cubic splines\n",
35
+ "f1 = sk.PeriodicSpline1D.from_spline_coeff(rng.standard_normal(6), degree = 3)\n",
36
+ "f2 = sk.PeriodicSpline1D.from_spline_coeff(rng.standard_normal(6), degree = 3)\n",
37
+ "\n",
38
+ "# Plot\n",
39
+ "def update_plot (\n",
40
+ " period = 6,\n",
41
+ " degree = 3,\n",
42
+ " delay = 0.0\n",
43
+ "):\n",
44
+ " global f1\n",
45
+ " global f2\n",
46
+ "\n",
47
+ " # Update of the splines\n",
48
+ " if f1.period != period:\n",
49
+ " f1 = sk.PeriodicSpline1D.from_spline_coeff(\n",
50
+ " rng.standard_normal(period),\n",
51
+ " degree = f1.degree\n",
52
+ " )\n",
53
+ " f1.degree = degree\n",
54
+ " f1.delay = delay\n",
55
+ " if f2.period != period:\n",
56
+ " f2 = sk.PeriodicSpline1D.from_spline_coeff(\n",
57
+ " rng.standard_normal(period),\n",
58
+ " degree = f2.degree\n",
59
+ " )\n",
60
+ " f2.degree = degree\n",
61
+ " f2.delay = delay\n",
62
+ "\n",
63
+ " # Addition\n",
64
+ " f = sk.PeriodicSpline1D.add(f1, f2)\n",
65
+ "\n",
66
+ " # Dynamic range\n",
67
+ " image = {f1.image(), f2.image(), f.image()}\n",
68
+ " plotrange = sk.interval.Interval.enclosure(image)\n",
69
+ " plotrange = sk.interval.Closed((\n",
70
+ " plotrange.midpoint - 0.55 * plotrange.diameter,\n",
71
+ " plotrange.midpoint + 0.55 * plotrange.diameter\n",
72
+ " ))\n",
73
+ "\n",
74
+ " # Plots\n",
75
+ " subplot = plt.subplots()\n",
76
+ " # Augend\n",
77
+ " f1.plot(subplot, plotrange = plotrange, plotpoints = 200 + 1)\n",
78
+ " # Addend\n",
79
+ " f2.plot(\n",
80
+ " subplot,\n",
81
+ " plotrange = plotrange,\n",
82
+ " plotpoints = 200 + 1,\n",
83
+ " curve_fmt = \"-C9\",\n",
84
+ " curve_markerfmt = \"oC9\",\n",
85
+ " )\n",
86
+ " # Sum\n",
87
+ " f.plot(\n",
88
+ " subplot,\n",
89
+ " plotrange = plotrange,\n",
90
+ " plotpoints = 200 + 1,\n",
91
+ " curve_fmt = \"-C5\",\n",
92
+ " curve_markerfmt = \"oC5\",\n",
93
+ " curve_lw = 2.0\n",
94
+ " )\n",
95
+ "\n",
96
+ " # Final display\n",
97
+ " plt.show()\n",
98
+ "\n",
99
+ "widgets.interactive(\n",
100
+ " update_plot,\n",
101
+ " period = (1, max_period),\n",
102
+ " degree = (0, max_degree),\n",
103
+ " delay = (-max_delay, max_delay)\n",
104
+ ")\n"
105
+ ]
106
+ },
107
+ {
108
+ "cell_type": "code",
109
+ "execution_count": null,
110
+ "id": "b5490a8b-70d3-4b94-a4ad-ea140f8cd9de",
111
+ "metadata": {},
112
+ "outputs": [],
113
+ "source": [
114
+ "\n",
115
+ "\n",
116
+ "\n",
117
+ "\n",
118
+ "\n",
119
+ "\n",
120
+ "\n",
121
+ "\n",
122
+ "\n",
123
+ "\n",
124
+ "\n",
125
+ "\n",
126
+ "\n",
127
+ "\n",
128
+ "\n",
129
+ "\n",
130
+ "\n",
131
+ "\n",
132
+ "\n",
133
+ "\n"
134
+ ]
135
+ }
136
+ ],
137
+ "metadata": {
138
+ "kernelspec": {
139
+ "display_name": "Python 3 (ipykernel)",
140
+ "language": "python",
141
+ "name": "python3"
142
+ },
143
+ "language_info": {
144
+ "codemirror_mode": {
145
+ "name": "ipython",
146
+ "version": 3
147
+ },
148
+ "file_extension": ".py",
149
+ "mimetype": "text/x-python",
150
+ "name": "python",
151
+ "nbconvert_exporter": "python",
152
+ "pygments_lexer": "ipython3",
153
+ "version": "3.12.6"
154
+ },
155
+ "widgets": {
156
+ "application/vnd.jupyter.widget-state+json": {
157
+ "state": {},
158
+ "version_major": 2,
159
+ "version_minor": 0
160
+ }
161
+ }
162
+ },
163
+ "nbformat": 4,
164
+ "nbformat_minor": 5
165
+ }
@@ -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
+ }