splinekit 0.2.8__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.8 → splinekit-0.2.10}/.gitignore +3 -0
  2. {splinekit-0.2.8 → splinekit-0.2.10}/PKG-INFO +5 -2
  3. {splinekit-0.2.8 → splinekit-0.2.10}/README.md +4 -1
  4. {splinekit-0.2.8 → 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/fourier/spline_from_fourier.ipynb +188 -0
  8. splinekit-0.2.10/dev/Jupyter/periodic-spline/multiresolution/spline_down.ipynb +309 -0
  9. splinekit-0.2.10/dev/Jupyter/periodic-spline/multiresolution/spline_down_divisible.ipynb +279 -0
  10. splinekit-0.2.10/dev/Jupyter/periodic-spline/multiresolution/spline_rescale.ipynb +207 -0
  11. splinekit-0.2.10/dev/Jupyter/periodic-spline/multiresolution/spline_up.ipynb +207 -0
  12. splinekit-0.2.10/dev/Jupyter/periodic-spline/multiresolution/spline_up_proj.ipynb +204 -0
  13. splinekit-0.2.10/dev/Jupyter/periodic-spline/projection/spline_projection.ipynb +145 -0
  14. {splinekit-0.2.8 → splinekit-0.2.10}/dev/PurePython/pyproject.toml +1 -1
  15. splinekit-0.2.10/dev/Wolfram/Generic Projection Infinite Support.nb +14906 -0
  16. splinekit-0.2.10/dev/Wolfram/Generic Projection Periodic coefficients.nb +2710 -0
  17. splinekit-0.2.10/dev/Wolfram/Generic Projection.nb +8513 -0
  18. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Wolfram/Test PeriodicSpline1D.nb +293 -169
  19. splinekit-0.2.10/dev/Wolfram/Verify Upscale Projected.nb +16267 -0
  20. splinekit-0.2.10/dev/Wolfram/Verify Upscale.nb +1650 -0
  21. splinekit-0.2.10/dev/Wolfram/Verify downscale_projected.nb +1897 -0
  22. splinekit-0.2.10/docs/bibliography.rst +15 -0
  23. splinekit-0.2.10/docs/demos/spline1d/addition.rst +80 -0
  24. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/fourier.rst +25 -5
  25. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/index.rst +3 -0
  26. splinekit-0.2.10/docs/demos/spline1d/multires.rst +247 -0
  27. splinekit-0.2.10/docs/demos/spline1d/projection.rst +39 -0
  28. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/01_periodic_spline_1d.rst +1 -1
  29. {splinekit-0.2.8/dev/Accelerated → splinekit-0.2.10}/pyproject.toml +1 -1
  30. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/periodic_spline_1d.py +681 -56
  31. {splinekit-0.2.8 → splinekit-0.2.10}/tests/test_periodic_spline_1d.py +240 -0
  32. splinekit-0.2.8/_output/api/translations/all.json +0 -9
  33. splinekit-0.2.8/_output/api/translations/en.json +0 -4
  34. splinekit-0.2.8/_output/api/workspaces/all.json +0 -1
  35. splinekit-0.2.8/_output/bootstrap.js +0 -180
  36. splinekit-0.2.8/_output/config-utils.js +0 -267
  37. splinekit-0.2.8/_output/consoles/favicon.ico +0 -0
  38. splinekit-0.2.8/_output/consoles/index.html +0 -126
  39. splinekit-0.2.8/_output/consoles/jupyter-lite.ipynb +0 -55
  40. splinekit-0.2.8/_output/consoles/jupyter-lite.json +0 -11
  41. splinekit-0.2.8/_output/consoles/package.json +0 -350
  42. splinekit-0.2.8/_output/doc/tree/index.html +0 -14
  43. splinekit-0.2.8/_output/doc/workspaces/index.html +0 -28
  44. splinekit-0.2.8/_output/edit/favicon.ico +0 -0
  45. splinekit-0.2.8/_output/edit/index.html +0 -126
  46. splinekit-0.2.8/_output/edit/jupyter-lite.ipynb +0 -55
  47. splinekit-0.2.8/_output/edit/jupyter-lite.json +0 -11
  48. splinekit-0.2.8/_output/edit/package.json +0 -366
  49. splinekit-0.2.8/_output/extensions/jupyterlab-jupytext/install.json +0 -5
  50. splinekit-0.2.8/_output/extensions/jupyterlab-jupytext/package.json +0 -96
  51. splinekit-0.2.8/_output/extensions/jupyterlab-jupytext/schemas/jupyterlab-jupytext/package.json.orig +0 -92
  52. splinekit-0.2.8/_output/extensions/jupyterlab-jupytext/schemas/jupyterlab-jupytext/plugin.json +0 -57
  53. splinekit-0.2.8/_output/extensions/jupyterlab-jupytext/static/48.0570848d2b31a5354b7d.js +0 -2
  54. splinekit-0.2.8/_output/extensions/jupyterlab-jupytext/static/48.0570848d2b31a5354b7d.js.LICENSE.txt +0 -8
  55. splinekit-0.2.8/_output/extensions/jupyterlab-jupytext/static/509.d51a8122d1920ac82323.js +0 -1
  56. splinekit-0.2.8/_output/extensions/jupyterlab-jupytext/static/720.094c38d70b1dec0ceea7.js +0 -1
  57. splinekit-0.2.8/_output/extensions/jupyterlab-jupytext/static/remoteEntry.94495aac41d2fef6ad41.js +0 -1
  58. splinekit-0.2.8/_output/extensions/jupyterlab-jupytext/static/style.js +0 -4
  59. splinekit-0.2.8/_output/extensions/jupyterlab-jupytext/static/third-party-licenses.json +0 -28
  60. splinekit-0.2.8/_output/extensions/jupyterlab_pygments/install.json +0 -5
  61. splinekit-0.2.8/_output/extensions/jupyterlab_pygments/package.json +0 -205
  62. splinekit-0.2.8/_output/extensions/jupyterlab_pygments/static/568.1e2faa2ba0bbe59c4780.js +0 -1
  63. splinekit-0.2.8/_output/extensions/jupyterlab_pygments/static/747.67662283a5707eeb4d4c.js +0 -1
  64. splinekit-0.2.8/_output/extensions/jupyterlab_pygments/static/remoteEntry.5cbb9d2323598fbda535.js +0 -1
  65. splinekit-0.2.8/_output/extensions/jupyterlab_pygments/static/style.js +0 -4
  66. splinekit-0.2.8/_output/extensions/jupyterlab_pygments/static/third-party-licenses.json +0 -16
  67. splinekit-0.2.8/_output/icon-120x120.png +0 -0
  68. splinekit-0.2.8/_output/icon-512x512.png +0 -0
  69. splinekit-0.2.8/_output/index.html +0 -68
  70. splinekit-0.2.8/_output/jupyter-lite.ipynb +0 -55
  71. splinekit-0.2.8/_output/jupyter-lite.json +0 -400
  72. splinekit-0.2.8/_output/jupyterlite.schema.v0.json +0 -325
  73. splinekit-0.2.8/_output/lab/favicon.ico +0 -0
  74. splinekit-0.2.8/_output/lab/index.html +0 -126
  75. splinekit-0.2.8/_output/lab/jupyter-lite.ipynb +0 -55
  76. splinekit-0.2.8/_output/lab/jupyter-lite.json +0 -10
  77. splinekit-0.2.8/_output/lab/package.json +0 -362
  78. splinekit-0.2.8/_output/lab/tree/index.html +0 -14
  79. splinekit-0.2.8/_output/lab/workspaces/index.html +0 -28
  80. splinekit-0.2.8/_output/manifest.webmanifest +0 -32
  81. splinekit-0.2.8/_output/notebooks/favicon.ico +0 -0
  82. splinekit-0.2.8/_output/notebooks/index.html +0 -126
  83. splinekit-0.2.8/_output/notebooks/jupyter-lite.ipynb +0 -55
  84. splinekit-0.2.8/_output/notebooks/jupyter-lite.json +0 -11
  85. splinekit-0.2.8/_output/notebooks/package.json +0 -375
  86. splinekit-0.2.8/_output/package.json +0 -44
  87. splinekit-0.2.8/_output/repl/index.html +0 -126
  88. splinekit-0.2.8/_output/repl/jupyter-lite.ipynb +0 -55
  89. splinekit-0.2.8/_output/repl/jupyter-lite.json +0 -7
  90. splinekit-0.2.8/_output/repl/package.json +0 -289
  91. splinekit-0.2.8/_output/service-worker.js +0 -1
  92. splinekit-0.2.8/_output/static/favicons/favicon-busy-1.ico +0 -0
  93. splinekit-0.2.8/_output/static/favicons/favicon-busy-2.ico +0 -0
  94. splinekit-0.2.8/_output/static/favicons/favicon-busy-3.ico +0 -0
  95. splinekit-0.2.8/_output/static/favicons/favicon-file.ico +0 -0
  96. splinekit-0.2.8/_output/static/favicons/favicon-notebook.ico +0 -0
  97. splinekit-0.2.8/_output/static/favicons/favicon-terminal.ico +0 -0
  98. splinekit-0.2.8/_output/static/favicons/favicon.ico +0 -0
  99. splinekit-0.2.8/_output/tree/favicon.ico +0 -0
  100. splinekit-0.2.8/_output/tree/index.html +0 -115
  101. splinekit-0.2.8/_output/tree/jupyter-lite.ipynb +0 -55
  102. splinekit-0.2.8/_output/tree/jupyter-lite.json +0 -10
  103. splinekit-0.2.8/_output/tree/package.json +0 -333
  104. splinekit-0.2.8/docs/bibliography.rst +0 -10
  105. {splinekit-0.2.8 → splinekit-0.2.10}/.github/workflows/deploy-docs.yml +0 -0
  106. {splinekit-0.2.8 → splinekit-0.2.10}/.github/workflows/release.yml +0 -0
  107. {splinekit-0.2.8 → splinekit-0.2.10}/.github/workflows/test.yml +0 -0
  108. {splinekit-0.2.8 → splinekit-0.2.10}/.jupyterlite.doit.db +0 -0
  109. {splinekit-0.2.8 → splinekit-0.2.10}/CMakeLists.txt +0 -0
  110. {splinekit-0.2.8 → splinekit-0.2.10}/LICENSE +0 -0
  111. {splinekit-0.2.8 → splinekit-0.2.10}/ansi_c/spline_padding/src/spline_padding.c +0 -0
  112. {splinekit-0.2.8 → splinekit-0.2.10}/ansi_c/spline_padding/src/spline_padding.h +0 -0
  113. {splinekit-0.2.8 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_cmake/CMakeLists.txt +0 -0
  114. {splinekit-0.2.8 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_cmake/spline_padding.c +0 -0
  115. {splinekit-0.2.8 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_cmake/spline_padding.h +0 -0
  116. {splinekit-0.2.8 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/libspline_padding.dylib +0 -0
  117. {splinekit-0.2.8 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/spline_padding.c +0 -0
  118. {splinekit-0.2.8 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/spline_padding.h +0 -0
  119. {splinekit-0.2.8 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/project.pbxproj +0 -0
  120. {splinekit-0.2.8 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  121. {splinekit-0.2.8 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/project.xcworkspace/xcuserdata/pthevena.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  122. {splinekit-0.2.8 → splinekit-0.2.10}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/xcuserdata/pthevena.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  123. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Accelerated/dispatch.sh +0 -0
  124. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Accelerated/release.yml +0 -0
  125. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Accelerated/spline_padding.py +0 -0
  126. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_cardinal.ipynb +0 -0
  127. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_dual.ipynb +0 -0
  128. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_dual_property.ipynb +0 -0
  129. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_member.ipynb +0 -0
  130. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_ortho.ipynb +0 -0
  131. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_ortho_property.ipynb +0 -0
  132. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/bases/bspline_sinc.ipynb +0 -0
  133. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/hello/bspline_hello.ipynb +0 -0
  134. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/hello/bspline_hello_grad.ipynb +0 -0
  135. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/hello/bspline_hello_integral.ipynb +0 -0
  136. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/inverse/bspline_inv.ipynb +0 -0
  137. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/inverse/bspline_periodic_inv.ipynb +0 -0
  138. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/m-scale/bspline_m_scale.ipynb +0 -0
  139. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/mathfunc/bspline_gauss_exo.ipynb +0 -0
  140. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/mathfunc/bspline_trigo_exo.ipynb +0 -0
  141. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/mathfunc/bspline_vs_cos.ipynb +0 -0
  142. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/mathfunc/bspline_vs_erf.ipynb +0 -0
  143. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/mathfunc/bspline_vs_exp.ipynb +0 -0
  144. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/mathfunc/bspline_vs_sin.ipynb +0 -0
  145. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/members/bspline_member.ipynb +0 -0
  146. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/members/bspline_member_diff.ipynb +0 -0
  147. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/members/bspline_member_integral.ipynb +0 -0
  148. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/poles/bspline_annihilate.ipynb +0 -0
  149. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/poles/bspline_poles.ipynb +0 -0
  150. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/poly/bspline_convolve_mono.ipynb +0 -0
  151. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/poly/bspline_partition_mono.ipynb +0 -0
  152. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/poly/bspline_spline_poly.ipynb +0 -0
  153. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/stability/bspline_numeric_stability.ipynb +0 -0
  154. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/vs-pi/bspline_vs_pi_as_sum.ipynb +0 -0
  155. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/bspline/vs-pi/bspline_vs_pi_at0.ipynb +0 -0
  156. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/padding/change-basis/padding_bases.ipynb +0 -0
  157. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/padding/padding/padding_data.ipynb +0 -0
  158. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/padding/padding/padding_speed.ipynb +0 -0
  159. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/bounds/spline_bounds.ipynb +0 -0
  160. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/calculus/spline_antigrad.ipynb +0 -0
  161. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/calculus/spline_derivative.ipynb +0 -0
  162. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/calculus/spline_fourier_diff.ipynb +0 -0
  163. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/calculus/spline_gradient.ipynb +0 -0
  164. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/calculus/spline_integrate.ipynb +0 -0
  165. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/construct/spline_approximation.ipynb +0 -0
  166. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/construct/spline_from_c.ipynb +0 -0
  167. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/construct/spline_interpolation.ipynb +0 -0
  168. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/conv_corr/spline_autocorr.ipynb +0 -0
  169. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/conv_corr/spline_convolve.ipynb +0 -0
  170. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/conv_corr/spline_correlate.ipynb +0 -0
  171. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/eval/spline_at_array.ipynb +0 -0
  172. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/eval/spline_at_scalar.ipynb +0 -0
  173. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/eval/spline_evaluation_speed.ipynb +0 -0
  174. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/extrema/spline_curated_xtrm.ipynb +0 -0
  175. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/extrema/spline_xtrm.ipynb +0 -0
  176. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/fourier/spline_fourier.ipynb +0 -0
  177. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/fourier/spline_smoothness.ipynb +0 -0
  178. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/ops/spline_simple_ops.ipynb +0 -0
  179. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/plot/spline_plot.ipynb +0 -0
  180. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/poly/spline_polynomials.ipynb +0 -0
  181. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/random-1d/spline_random_1d.ipynb +0 -0
  182. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/random-2d/spline_random_2d.ipynb +0 -0
  183. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/sgn/spline_curated_zeros.ipynb +0 -0
  184. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/sgn/spline_sgn.ipynb +0 -0
  185. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/sgn/spline_zeros.ipynb +0 -0
  186. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Jupyter/periodic-spline/stats/spline_stats.ipynb +0 -0
  187. {splinekit-0.2.8 → splinekit-0.2.10}/dev/PurePython/dispatch.sh +0 -0
  188. {splinekit-0.2.8 → splinekit-0.2.10}/dev/PurePython/release.yml +0 -0
  189. {splinekit-0.2.8 → splinekit-0.2.10}/dev/PurePython/spline_padding.py +0 -0
  190. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Wolfram/Bspline Poles.nb +0 -0
  191. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Wolfram/IntervalChecks.nb +0 -0
  192. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Wolfram/PeriodicSplinesChecks.nb +0 -0
  193. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Wolfram/SplinePaddingChecks.nb +0 -0
  194. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Wolfram/Test BSplines.nb +0 -0
  195. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Wolfram/Test PeriodicNonuniformPiecewise.nb +0 -0
  196. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Wolfram/Test SplinePadding.nb +0 -0
  197. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Wolfram/Test SplineUtilities.nb +0 -0
  198. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Wolfram/Verify doc.nb +0 -0
  199. {splinekit-0.2.8 → splinekit-0.2.10}/dev/Wolfram/rescued Test SplinePadding.nb +0 -0
  200. {splinekit-0.2.8 → splinekit-0.2.10}/docs/.jupyterlite.doit.db +0 -0
  201. {splinekit-0.2.8 → splinekit-0.2.10}/docs/_static/custom.css +0 -0
  202. {splinekit-0.2.8 → splinekit-0.2.10}/docs/bases/01_bases.rst +0 -0
  203. {splinekit-0.2.8 → splinekit-0.2.10}/docs/bases/index.rst +0 -0
  204. {splinekit-0.2.8 → splinekit-0.2.10}/docs/bases/noxfile.py +0 -0
  205. {splinekit-0.2.8 → splinekit-0.2.10}/docs/bsplines/01_bsplines.rst +0 -0
  206. {splinekit-0.2.8 → splinekit-0.2.10}/docs/bsplines/index.rst +0 -0
  207. {splinekit-0.2.8 → splinekit-0.2.10}/docs/bsplines/noxfile.py +0 -0
  208. {splinekit-0.2.8 → splinekit-0.2.10}/docs/conf.py +0 -0
  209. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/bspline/bspline_bases.rst +0 -0
  210. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/bspline/bspline_inverse.rst +0 -0
  211. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/bspline/bspline_m_scale.rst +0 -0
  212. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/bspline/bspline_members.rst +0 -0
  213. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/bspline/bspline_numeric_stability.ipynb.gz +0 -0
  214. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/bspline/bspline_poles.rst +0 -0
  215. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/bspline/bspline_stability.rst +0 -0
  216. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/bspline/bspline_vs_pi.rst +0 -0
  217. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/bspline/hello_bspline.rst +0 -0
  218. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/bspline/index.rst +0 -0
  219. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/bspline/spline_engineer_func.rst +0 -0
  220. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/bspline/spline_vs_poly.rst +0 -0
  221. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/index.rst +0 -0
  222. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/padding/change_basis.rst +0 -0
  223. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/padding/index.rst +0 -0
  224. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/padding/padding.rst +0 -0
  225. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/padding/padding_speed.ipynb.gz +0 -0
  226. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/bounds.rst +0 -0
  227. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/calculus.rst +0 -0
  228. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/constructors.rst +0 -0
  229. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/conv_corr.rst +0 -0
  230. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/evaluation.rst +0 -0
  231. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/extrema.rst +0 -0
  232. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/plot.rst +0 -0
  233. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/polynomials.rst +0 -0
  234. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/random1d.rst +0 -0
  235. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/random2d.rst +0 -0
  236. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/signum.rst +0 -0
  237. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/simple_ops.rst +0 -0
  238. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/spline_evaluation_speed.ipynb.gz +0 -0
  239. {splinekit-0.2.8 → splinekit-0.2.10}/docs/demos/spline1d/stats.rst +0 -0
  240. {splinekit-0.2.8 → splinekit-0.2.10}/docs/environment.yml +0 -0
  241. {splinekit-0.2.8 → splinekit-0.2.10}/docs/glossary/glossary-numbers.rst +0 -0
  242. {splinekit-0.2.8 → splinekit-0.2.10}/docs/glossary/glossary-polynomials.rst +0 -0
  243. {splinekit-0.2.8 → splinekit-0.2.10}/docs/glossary/glossary-splines.rst +0 -0
  244. {splinekit-0.2.8 → splinekit-0.2.10}/docs/glossary/glossary-terminology.rst +0 -0
  245. {splinekit-0.2.8 → splinekit-0.2.10}/docs/glossary/index.rst +0 -0
  246. {splinekit-0.2.8 → splinekit-0.2.10}/docs/index.rst +0 -0
  247. {splinekit-0.2.8 → splinekit-0.2.10}/docs/installation/index.rst +0 -0
  248. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/bounded/01_bounded.rst +0 -0
  249. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/bounded/02_open.rst +0 -0
  250. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/bounded/03_open_closed.rst +0 -0
  251. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/bounded/04_closed.rst +0 -0
  252. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/bounded/05_closed_open.rst +0 -0
  253. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/bounded/index.rst +0 -0
  254. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/bounded/noxfile.py +0 -0
  255. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/degenerate/01_degenerate.rst +0 -0
  256. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/degenerate/02_singleton.rst +0 -0
  257. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/degenerate/index.rst +0 -0
  258. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/degenerate/noxfile.py +0 -0
  259. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/half_bounded/01_half_bounded.rst +0 -0
  260. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/half_bounded/02_above.rst +0 -0
  261. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/half_bounded/03_not_below.rst +0 -0
  262. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/half_bounded/04_not_above.rst +0 -0
  263. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/half_bounded/05_below.rst +0 -0
  264. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/half_bounded/index.rst +0 -0
  265. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/half_bounded/noxfile.py +0 -0
  266. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/index.rst +0 -0
  267. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/interval/01_interval.rst +0 -0
  268. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/interval/index.rst +0 -0
  269. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/interval/noxfile.py +0 -0
  270. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/noxfile.py +0 -0
  271. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/universal/01_universal.rst +0 -0
  272. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/universal/02_empty.rst +0 -0
  273. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/universal/03_rr.rst +0 -0
  274. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/universal/index.rst +0 -0
  275. {splinekit-0.2.8 → splinekit-0.2.10}/docs/interval/universal/noxfile.py +0 -0
  276. {splinekit-0.2.8 → splinekit-0.2.10}/docs/noxfile.py +0 -0
  277. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_nonuniform_piecewise/01_periodic_nonuniform_piecewise.rst +0 -0
  278. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_nonuniform_piecewise/index.rst +0 -0
  279. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_nonuniform_piecewise/noxfile.py +0 -0
  280. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/index.rst +0 -0
  281. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m00.png +0 -0
  282. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m01.png +0 -0
  283. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m02.png +0 -0
  284. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m03.png +0 -0
  285. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m04.png +0 -0
  286. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m05.png +0 -0
  287. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m06.png +0 -0
  288. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m07.png +0 -0
  289. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m08.png +0 -0
  290. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m09.png +0 -0
  291. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m10.png +0 -0
  292. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m11.png +0 -0
  293. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m12.png +0 -0
  294. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m13.png +0 -0
  295. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m14.png +0 -0
  296. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m15.png +0 -0
  297. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m16.png +0 -0
  298. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m17.png +0 -0
  299. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m18.png +0 -0
  300. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m19.png +0 -0
  301. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m20.png +0 -0
  302. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m21.png +0 -0
  303. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m22.png +0 -0
  304. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m23.png +0 -0
  305. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/m24.png +0 -0
  306. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/matplotlib-color.rst +0 -0
  307. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/matplotlib-linestyle.rst +0 -0
  308. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/matplotlib-marker.rst +0 -0
  309. {splinekit-0.2.8 → splinekit-0.2.10}/docs/periodic_spline_1d/noxfile.py +0 -0
  310. {splinekit-0.2.8 → splinekit-0.2.10}/docs/spline_padding/01_spline_padding.rst +0 -0
  311. {splinekit-0.2.8 → splinekit-0.2.10}/docs/spline_padding/index.rst +0 -0
  312. {splinekit-0.2.8 → splinekit-0.2.10}/docs/spline_padding/noxfile.py +0 -0
  313. {splinekit-0.2.8 → splinekit-0.2.10}/docs/spline_utilities/01_spline_utilities.rst +0 -0
  314. {splinekit-0.2.8 → splinekit-0.2.10}/docs/spline_utilities/index.rst +0 -0
  315. {splinekit-0.2.8 → splinekit-0.2.10}/docs/spline_utilities/noxfile.py +0 -0
  316. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/__init__.py +0 -0
  317. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/bases.py +0 -0
  318. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/bsplines.py +0 -0
  319. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/__init__.py +0 -0
  320. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/_known_intervals.py +0 -0
  321. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/above.py +0 -0
  322. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/below.py +0 -0
  323. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/bounded.py +0 -0
  324. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/closed.py +0 -0
  325. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/closed_open.py +0 -0
  326. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/degenerate.py +0 -0
  327. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/empty.py +0 -0
  328. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/half_bounded.py +0 -0
  329. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/interval.py +0 -0
  330. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/mypy.ini +0 -0
  331. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/not_above.py +0 -0
  332. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/not_below.py +0 -0
  333. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/open.py +0 -0
  334. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/open_closed.py +0 -0
  335. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/rr.py +0 -0
  336. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/singleton.py +0 -0
  337. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/interval/universal.py +0 -0
  338. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/mypy.ini +0 -0
  339. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/periodic_nonuniform_piecewise.py +0 -0
  340. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/spline_padding.py +0 -0
  341. {splinekit-0.2.8 → splinekit-0.2.10}/src/splinekit/spline_utilities.py +0 -0
  342. {splinekit-0.2.8 → splinekit-0.2.10}/temp/bspline_stability.py +0 -0
  343. {splinekit-0.2.8 → splinekit-0.2.10}/tests/test_bsplines.py +0 -0
  344. {splinekit-0.2.8 → splinekit-0.2.10}/tests/test_periodic_nonuniform_piecewise.py +0 -0
  345. {splinekit-0.2.8 → splinekit-0.2.10}/tests/test_spline_padding.py +0 -0
  346. {splinekit-0.2.8 → 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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splinekit
3
- Version: 0.2.8
3
+ Version: 0.2.10
4
4
  Summary: A set of functions and classes to handle periodic 1D polynomial splines
5
5
  Author-Email: Philippe Thévenaz <philippe.thevenaz@icloud.com>
6
6
  Maintainer-Email: Philippe Thévenaz <philippe.thevenaz@icloud.com>
@@ -51,7 +51,7 @@ Description-Content-Type: text/markdown
51
51
 
52
52
  <!-- splinekit/README.md -->
53
53
 
54
- # Version 0.2.8
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.
@@ -136,3 +136,6 @@ Upgraded to jupyterlite 0.7
136
136
 
137
137
  ### 0.2.8
138
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.8
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.
@@ -85,3 +85,6 @@ Upgraded to jupyterlite 0.7
85
85
 
86
86
  ### 0.2.8
87
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.8"
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,188 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "006cebf8-f66b-48aa-9f8b-0840d37ca07d",
6
+ "metadata": {},
7
+ "source": [
8
+ "# Periodic Splines from Fourier Coefficients\n",
9
+ "We display in thick gray the realization of a random periodic polynomial spline of a specified period $K,$ degree $n,$ and delay $\\delta x;$ the red stemlines indicate the extent of one period. This periodic spline possesses an infinite-length series of Fourier coefficients that can be summarized without loss by the combination of, on one hand, a finite-dimensional vector $\\hat{\\mathbf{f}}$ of the first $\\left\\lfloor K/2\\right\\rfloor$ complex-valued Fourier coefficients of nonnegative indices and, on the other hand, of the three ancillary parameters $\\{K,n,\\delta x\\}.$\n",
10
+ "\n",
11
+ "We manipulate $\\hat{\\mathbf{f}}$ by setting a few of its components to zero. This corresponds to the application of a band-pass filter to the spline. The manipulated finite-dimensional vector of spline coefficients is then used to virtually reconstruct an infinite series of spline coefficients, and from them a spline, which we plot in blue.\n",
12
+ "\n",
13
+ "It is sometimes desirable to handle in independent fashion the average value of the reconstructed spline. Here, the field ``keep_dc`` takes precedence over the specification of the bandpass range."
14
+ ]
15
+ },
16
+ {
17
+ "cell_type": "code",
18
+ "execution_count": null,
19
+ "id": "b3185aea-65df-4ca8-8011-efe4d523876c",
20
+ "metadata": {},
21
+ "outputs": [],
22
+ "source": [
23
+ "# Load the required libraries\n",
24
+ "import ipywidgets as widgets\n",
25
+ "import matplotlib.pyplot as plt\n",
26
+ "import numpy as np\n",
27
+ "\n",
28
+ "import splinekit as sk # This library\n",
29
+ "\n",
30
+ "# Setup\n",
31
+ "max_period = 20 # Maximal period\n",
32
+ "max_degree = 9 # Maximal spline degree\n",
33
+ "max_delay = 3.0 # Maximal absolute delay\n",
34
+ "\n",
35
+ "# Initialize the generator of random numbers\n",
36
+ "rng = np.random.default_rng()\n",
37
+ "\n",
38
+ "# Initial random periodic cubic spline\n",
39
+ "s0 = sk.PeriodicSpline1D.from_spline_coeff(rng.standard_normal(9), degree = 3)\n",
40
+ "\n",
41
+ "# Plot\n",
42
+ "def update_plot (\n",
43
+ " period = 9,\n",
44
+ " degree = 3,\n",
45
+ " delay = 0.0,\n",
46
+ " bandpass = (9 // 6, 18 // 6),\n",
47
+ " keep_dc = False\n",
48
+ "):\n",
49
+ " global s0\n",
50
+ "\n",
51
+ " # Update of the spline\n",
52
+ " if s0.period != period:\n",
53
+ " s0 = sk.PeriodicSpline1D.from_spline_coeff(\n",
54
+ " rng.standard_normal(period),\n",
55
+ " degree = s0.degree\n",
56
+ " )\n",
57
+ " s0.degree = degree\n",
58
+ " s0.delay = delay\n",
59
+ "\n",
60
+ " # Fourier series\n",
61
+ " f0 = s0.fourier_series()\n",
62
+ " erase = f0.copy()\n",
63
+ " erase[bandpass_widget.value[0] : bandpass_widget.value[1] + 1] = 0\n",
64
+ " erase[0] = 0 if keep_dc else f0[0]\n",
65
+ " s = sk.PeriodicSpline1D.from_fourier_series(\n",
66
+ " f0 - erase,\n",
67
+ " period = period,\n",
68
+ " degree = degree,\n",
69
+ " delay = delay\n",
70
+ " )\n",
71
+ "\n",
72
+ " # Dynamic range\n",
73
+ " image = {s0.image(), s.image()}\n",
74
+ " plotrange = sk.interval.Interval.enclosure(image)\n",
75
+ " if isinstance(plotrange, sk.interval.Singleton):\n",
76
+ " plotrange = sk.interval.Closed((\n",
77
+ " plotrange.midpoint - 0.5,\n",
78
+ " plotrange.midpoint + 0.5\n",
79
+ " ))\n",
80
+ " else:\n",
81
+ " plotrange = sk.interval.Closed((\n",
82
+ " plotrange.midpoint - 0.55 * plotrange.diameter,\n",
83
+ " plotrange.midpoint + 0.55 * plotrange.diameter\n",
84
+ " ))\n",
85
+ "\n",
86
+ " # Plot of the splines\n",
87
+ " subplot = plt.subplots()\n",
88
+ " s0.plot(\n",
89
+ " subplot,\n",
90
+ " plotpoints = 200 + 1,\n",
91
+ " plotrange = plotrange,\n",
92
+ " curve_fmt = \"#E0E0E0\",\n",
93
+ " curve_lw = 7.0,\n",
94
+ " curve_markerfmt = \"oC7\",\n",
95
+ " curvestem_linefmt = \"-C7\",\n",
96
+ " knot_marker = \" \"\n",
97
+ " )\n",
98
+ " s.plot(subplot, plotpoints = 200 + 1, plotrange = plotrange)\n",
99
+ " # Final display\n",
100
+ " plt.show()\n",
101
+ "\n",
102
+ "# Interactions\n",
103
+ "period_widget = widgets.IntSlider(\n",
104
+ " value = s0.period,\n",
105
+ " min = 1,\n",
106
+ " max = max_period,\n",
107
+ " description = \"period\"\n",
108
+ ")\n",
109
+ "bandpass_widget = widgets.IntRangeSlider(\n",
110
+ " value = (s0.period // 6, (2 * s0.period) // 6),\n",
111
+ " min = 0,\n",
112
+ " max = s0.period // 2,\n",
113
+ " description = \"bandpass\"\n",
114
+ ")\n",
115
+ "def period_change (\n",
116
+ " change\n",
117
+ "):\n",
118
+ " bandpass_widget.max = change.new // 2\n",
119
+ "period_widget.observe(period_change, \"value\")\n",
120
+ "widgets.interactive(\n",
121
+ " update_plot,\n",
122
+ " period = period_widget,\n",
123
+ " degree = (0, max_degree),\n",
124
+ " delay = (-max_delay, max_delay),\n",
125
+ " bandpass = bandpass_widget,\n",
126
+ " keep_dc = False\n",
127
+ ")\n"
128
+ ]
129
+ },
130
+ {
131
+ "cell_type": "code",
132
+ "execution_count": null,
133
+ "id": "b5490a8b-70d3-4b94-a4ad-ea140f8cd9de",
134
+ "metadata": {},
135
+ "outputs": [],
136
+ "source": [
137
+ "\n",
138
+ "\n",
139
+ "\n",
140
+ "\n",
141
+ "\n",
142
+ "\n",
143
+ "\n",
144
+ "\n",
145
+ "\n",
146
+ "\n",
147
+ "\n",
148
+ "\n",
149
+ "\n",
150
+ "\n",
151
+ "\n",
152
+ "\n",
153
+ "\n",
154
+ "\n",
155
+ "\n",
156
+ "\n"
157
+ ]
158
+ }
159
+ ],
160
+ "metadata": {
161
+ "kernelspec": {
162
+ "display_name": "Python 3 (ipykernel)",
163
+ "language": "python",
164
+ "name": "python3"
165
+ },
166
+ "language_info": {
167
+ "codemirror_mode": {
168
+ "name": "ipython",
169
+ "version": 3
170
+ },
171
+ "file_extension": ".py",
172
+ "mimetype": "text/x-python",
173
+ "name": "python",
174
+ "nbconvert_exporter": "python",
175
+ "pygments_lexer": "ipython3",
176
+ "version": "3.12.6"
177
+ },
178
+ "widgets": {
179
+ "application/vnd.jupyter.widget-state+json": {
180
+ "state": {},
181
+ "version_major": 2,
182
+ "version_minor": 0
183
+ }
184
+ }
185
+ },
186
+ "nbformat": 4,
187
+ "nbformat_minor": 5
188
+ }