splinekit 0.2.7__tar.gz → 0.2.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {splinekit-0.2.7 → splinekit-0.2.8}/PKG-INFO +8 -5
- {splinekit-0.2.7 → splinekit-0.2.8}/README.md +5 -2
- {splinekit-0.2.7 → splinekit-0.2.8/dev/Accelerated}/pyproject.toml +1 -1
- splinekit-0.2.8/dev/Jupyter/periodic-spline/calculus/spline_antigrad.ipynb +146 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/calculus/spline_derivative.ipynb +165 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/calculus/spline_fourier_diff.ipynb +239 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/calculus/spline_gradient.ipynb +173 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/calculus/spline_integrate.ipynb +185 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/construct/spline_from_c.ipynb +244 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/conv_corr/spline_autocorr.ipynb +178 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/conv_corr/spline_convolve.ipynb +190 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/conv_corr/spline_correlate.ipynb +211 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/extrema/spline_curated_xtrm.ipynb +205 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/extrema/spline_xtrm.ipynb +186 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/fourier/spline_fourier.ipynb +4 -6
- splinekit-0.2.8/dev/Jupyter/periodic-spline/fourier/spline_smoothness.ipynb +139 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/sgn/spline_curated_zeros.ipynb +220 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/sgn/spline_sgn.ipynb +168 -0
- splinekit-0.2.8/dev/Jupyter/periodic-spline/sgn/spline_zeros.ipynb +365 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/PurePython/pyproject.toml +1 -1
- splinekit-0.2.8/docs/bibliography.rst +10 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/bspline/bspline_bases.rst +27 -27
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/bspline/bspline_inverse.rst +7 -7
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/bspline/bspline_m_scale.rst +1 -1
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/bspline/bspline_poles.rst +13 -13
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/bspline/bspline_stability.rst +5 -5
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/bspline/bspline_vs_pi.rst +2 -2
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/bspline/spline_engineer_func.rst +5 -5
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/bspline/spline_vs_poly.rst +11 -11
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/padding/change_basis.rst +1 -1
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/padding/padding.rst +34 -34
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/spline1d/bounds.rst +16 -16
- splinekit-0.2.8/docs/demos/spline1d/calculus.rst +133 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/spline1d/constructors.rst +14 -5
- splinekit-0.2.8/docs/demos/spline1d/conv_corr.rst +148 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/spline1d/evaluation.rst +5 -5
- splinekit-0.2.8/docs/demos/spline1d/extrema.rst +23 -0
- splinekit-0.2.8/docs/demos/spline1d/fourier.rst +123 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/spline1d/index.rst +5 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/spline1d/plot.rst +1 -1
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/spline1d/polynomials.rst +13 -13
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/spline1d/random1d.rst +1 -1
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/spline1d/random2d.rst +1 -1
- splinekit-0.2.8/docs/demos/spline1d/signum.rst +78 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/spline1d/stats.rst +1 -1
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/index.rst +1 -0
- {splinekit-0.2.7/dev/Accelerated → splinekit-0.2.8}/pyproject.toml +1 -1
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/periodic_spline_1d.py +5 -5
- splinekit-0.2.7/.virtual_documents/dev/Jupyter/spline_plot.ipynb +0 -323
- {splinekit-0.2.7 → splinekit-0.2.8}/.github/workflows/deploy-docs.yml +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/.github/workflows/release.yml +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/.github/workflows/test.yml +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/.gitignore +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/.jupyterlite.doit.db +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/CMakeLists.txt +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/LICENSE +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/api/translations/all.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/api/translations/en.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/api/workspaces/all.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/bootstrap.js +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/config-utils.js +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/consoles/favicon.ico +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/consoles/index.html +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/consoles/jupyter-lite.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/consoles/jupyter-lite.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/consoles/package.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/doc/tree/index.html +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/doc/workspaces/index.html +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/edit/favicon.ico +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/edit/index.html +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/edit/jupyter-lite.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/edit/jupyter-lite.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/edit/package.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/install.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/package.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/schemas/jupyterlab-jupytext/package.json.orig +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/schemas/jupyterlab-jupytext/plugin.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/48.0570848d2b31a5354b7d.js +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/48.0570848d2b31a5354b7d.js.LICENSE.txt +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/509.d51a8122d1920ac82323.js +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/720.094c38d70b1dec0ceea7.js +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/remoteEntry.94495aac41d2fef6ad41.js +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/style.js +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab-jupytext/static/third-party-licenses.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/install.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/package.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/static/568.1e2faa2ba0bbe59c4780.js +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/static/747.67662283a5707eeb4d4c.js +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/static/remoteEntry.5cbb9d2323598fbda535.js +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/static/style.js +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/extensions/jupyterlab_pygments/static/third-party-licenses.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/icon-120x120.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/icon-512x512.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/index.html +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/jupyter-lite.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/jupyter-lite.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/jupyterlite.schema.v0.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/lab/favicon.ico +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/lab/index.html +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/lab/jupyter-lite.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/lab/jupyter-lite.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/lab/package.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/lab/tree/index.html +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/lab/workspaces/index.html +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/manifest.webmanifest +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/notebooks/favicon.ico +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/notebooks/index.html +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/notebooks/jupyter-lite.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/notebooks/jupyter-lite.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/notebooks/package.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/package.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/repl/index.html +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/repl/jupyter-lite.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/repl/jupyter-lite.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/repl/package.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/service-worker.js +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/static/favicons/favicon-busy-1.ico +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/static/favicons/favicon-busy-2.ico +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/static/favicons/favicon-busy-3.ico +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/static/favicons/favicon-file.ico +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/static/favicons/favicon-notebook.ico +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/static/favicons/favicon-terminal.ico +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/static/favicons/favicon.ico +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/tree/favicon.ico +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/tree/index.html +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/tree/jupyter-lite.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/tree/jupyter-lite.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/_output/tree/package.json +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/ansi_c/spline_padding/src/spline_padding.c +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/ansi_c/spline_padding/src/spline_padding.h +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_cmake/CMakeLists.txt +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_cmake/spline_padding.c +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_cmake/spline_padding.h +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/libspline_padding.dylib +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/spline_padding.c +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/spline_padding.h +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/project.pbxproj +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/project.xcworkspace/xcuserdata/pthevena.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/ANSI-C/spline_padding_xcode/spline_padding.xcodeproj/xcuserdata/pthevena.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Accelerated/dispatch.sh +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Accelerated/release.yml +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Accelerated/spline_padding.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/bases/bspline_cardinal.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/bases/bspline_dual.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/bases/bspline_dual_property.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/bases/bspline_member.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/bases/bspline_ortho.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/bases/bspline_ortho_property.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/bases/bspline_sinc.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/hello/bspline_hello.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/hello/bspline_hello_grad.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/hello/bspline_hello_integral.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/inverse/bspline_inv.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/inverse/bspline_periodic_inv.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/m-scale/bspline_m_scale.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/mathfunc/bspline_gauss_exo.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/mathfunc/bspline_trigo_exo.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/mathfunc/bspline_vs_cos.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/mathfunc/bspline_vs_erf.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/mathfunc/bspline_vs_exp.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/mathfunc/bspline_vs_sin.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/members/bspline_member.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/members/bspline_member_diff.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/members/bspline_member_integral.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/poles/bspline_annihilate.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/poles/bspline_poles.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/poly/bspline_convolve_mono.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/poly/bspline_partition_mono.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/poly/bspline_spline_poly.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/stability/bspline_numeric_stability.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/vs-pi/bspline_vs_pi_as_sum.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/bspline/vs-pi/bspline_vs_pi_at0.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/padding/change-basis/padding_bases.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/padding/padding/padding_data.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/padding/padding/padding_speed.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/bounds/spline_bounds.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/construct/spline_approximation.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/construct/spline_interpolation.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/eval/spline_at_array.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/eval/spline_at_scalar.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/eval/spline_evaluation_speed.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/ops/spline_simple_ops.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/plot/spline_plot.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/poly/spline_polynomials.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/random-1d/spline_random_1d.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/random-2d/spline_random_2d.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Jupyter/periodic-spline/stats/spline_stats.ipynb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/PurePython/dispatch.sh +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/PurePython/release.yml +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/PurePython/spline_padding.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Wolfram/Bspline Poles.nb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Wolfram/IntervalChecks.nb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Wolfram/PeriodicSplinesChecks.nb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Wolfram/SplinePaddingChecks.nb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Wolfram/Test BSplines.nb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Wolfram/Test PeriodicNonuniformPiecewise.nb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Wolfram/Test PeriodicSpline1D.nb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Wolfram/Test SplinePadding.nb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Wolfram/Test SplineUtilities.nb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Wolfram/Verify doc.nb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/dev/Wolfram/rescued Test SplinePadding.nb +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/.jupyterlite.doit.db +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/_static/custom.css +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/bases/01_bases.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/bases/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/bases/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/bsplines/01_bsplines.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/bsplines/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/bsplines/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/conf.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/bspline/bspline_members.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/bspline/bspline_numeric_stability.ipynb.gz +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/bspline/hello_bspline.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/bspline/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/padding/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/padding/padding_speed.ipynb.gz +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/spline1d/simple_ops.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/demos/spline1d/spline_evaluation_speed.ipynb.gz +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/environment.yml +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/glossary/glossary-numbers.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/glossary/glossary-polynomials.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/glossary/glossary-splines.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/glossary/glossary-terminology.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/glossary/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/installation/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/bounded/01_bounded.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/bounded/02_open.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/bounded/03_open_closed.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/bounded/04_closed.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/bounded/05_closed_open.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/bounded/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/bounded/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/degenerate/01_degenerate.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/degenerate/02_singleton.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/degenerate/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/degenerate/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/half_bounded/01_half_bounded.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/half_bounded/02_above.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/half_bounded/03_not_below.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/half_bounded/04_not_above.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/half_bounded/05_below.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/half_bounded/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/half_bounded/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/interval/01_interval.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/interval/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/interval/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/universal/01_universal.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/universal/02_empty.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/universal/03_rr.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/universal/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/interval/universal/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_nonuniform_piecewise/01_periodic_nonuniform_piecewise.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_nonuniform_piecewise/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_nonuniform_piecewise/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/01_periodic_spline_1d.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m00.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m01.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m02.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m03.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m04.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m05.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m06.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m07.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m08.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m09.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m10.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m11.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m12.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m13.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m14.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m15.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m16.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m17.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m18.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m19.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m20.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m21.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m22.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m23.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/m24.png +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/matplotlib-color.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/matplotlib-linestyle.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/matplotlib-marker.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/periodic_spline_1d/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/spline_padding/01_spline_padding.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/spline_padding/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/spline_padding/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/spline_utilities/01_spline_utilities.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/spline_utilities/index.rst +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/docs/spline_utilities/noxfile.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/__init__.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/bases.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/bsplines.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/__init__.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/_known_intervals.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/above.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/below.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/bounded.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/closed.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/closed_open.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/degenerate.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/empty.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/half_bounded.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/interval.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/mypy.ini +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/not_above.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/not_below.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/open.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/open_closed.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/rr.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/singleton.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/interval/universal.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/mypy.ini +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/periodic_nonuniform_piecewise.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/spline_padding.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/src/splinekit/spline_utilities.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/temp/bspline_stability.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/tests/test_bsplines.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/tests/test_periodic_nonuniform_piecewise.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/tests/test_periodic_spline_1d.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/tests/test_spline_padding.py +0 -0
- {splinekit-0.2.7 → splinekit-0.2.8}/tests/test_spline_utilities.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: splinekit
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.8
|
|
4
4
|
Summary: A set of functions and classes to handle periodic 1D polynomial splines
|
|
5
|
-
Author-Email:
|
|
6
|
-
Maintainer-Email:
|
|
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.
|
|
54
|
+
# Version 0.2.8
|
|
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
|
|
119
|
+
### 0.1.*
|
|
120
120
|
First stable version. Pure Python.
|
|
121
121
|
|
|
122
122
|
### 0.2.1
|
|
@@ -133,3 +133,6 @@ 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.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!-- splinekit/README.md -->
|
|
2
2
|
|
|
3
|
-
# Version 0.2.
|
|
3
|
+
# Version 0.2.8
|
|
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
|
|
68
|
+
### 0.1.*
|
|
69
69
|
First stable version. Pure Python.
|
|
70
70
|
|
|
71
71
|
### 0.2.1
|
|
@@ -82,3 +82,6 @@ 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.
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cells": [
|
|
3
|
+
{
|
|
4
|
+
"cell_type": "markdown",
|
|
5
|
+
"id": "02240a05-3526-4530-ae12-d9522465b594",
|
|
6
|
+
"metadata": {},
|
|
7
|
+
"source": [
|
|
8
|
+
"# Derivatives of Periodic Splines\n",
|
|
9
|
+
"We show in the <span style=\"color:#c20078\">**fuchsia**</span> color the spline $f$ of degree $n\\in{\\mathbb{N}}$ whose derivative of order $m\\in[0\\ldots n]$ is sought. The data samples of $f$ at the integers are represented with circles and stem lines. The sample at the origin, as well as its periodized replicates, is indicated by a red circle and stem line. The small black disks depict the knots of the spline. The derivative $\\frac{{\\mathrm{d}}^{m}f(x)}{{\\mathrm{d}}x^{m}}$ is shown in the <span style=\"color:#2ca02c\">**green**</span> color."
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"cell_type": "code",
|
|
14
|
+
"execution_count": null,
|
|
15
|
+
"id": "230ca8a8-c806-4207-b416-9954d55f1377",
|
|
16
|
+
"metadata": {},
|
|
17
|
+
"outputs": [],
|
|
18
|
+
"source": [
|
|
19
|
+
"# Load the required libraries\n",
|
|
20
|
+
"import ipywidgets as widgets\n",
|
|
21
|
+
"import matplotlib.pyplot as plt\n",
|
|
22
|
+
"import numpy as np\n",
|
|
23
|
+
"\n",
|
|
24
|
+
"import splinekit as sk # This library\n",
|
|
25
|
+
"\n",
|
|
26
|
+
"# Setup\n",
|
|
27
|
+
"max_period = 15 # Maximal period\n",
|
|
28
|
+
"max_degree = 5 # Maximal degree of the spline\n",
|
|
29
|
+
"max_delay = 2.0 # Maximal absolute delay\n",
|
|
30
|
+
"plotpoints = 200 + 1 # Number of rendered samples\n",
|
|
31
|
+
"\n",
|
|
32
|
+
"# Initialize the generator of random numbers\n",
|
|
33
|
+
"rng = np.random.default_rng()\n",
|
|
34
|
+
"\n",
|
|
35
|
+
"# Initial random periodic cubic splines with normal Gaussian coefficients\n",
|
|
36
|
+
"f = sk.PeriodicSpline1D.from_spline_coeff(rng.standard_normal(6), degree = 3)\n",
|
|
37
|
+
"\n",
|
|
38
|
+
"# Plot\n",
|
|
39
|
+
"def update_plot (\n",
|
|
40
|
+
" degree = 3,\n",
|
|
41
|
+
" order = 2,\n",
|
|
42
|
+
" period = 6,\n",
|
|
43
|
+
" delay = 0.0\n",
|
|
44
|
+
"):\n",
|
|
45
|
+
" global f\n",
|
|
46
|
+
"\n",
|
|
47
|
+
" # Update of the spline\n",
|
|
48
|
+
" if f.period != period:\n",
|
|
49
|
+
" f = sk.PeriodicSpline1D.from_spline_coeff(\n",
|
|
50
|
+
" rng.standard_normal(period),\n",
|
|
51
|
+
" degree = f.degree\n",
|
|
52
|
+
" )\n",
|
|
53
|
+
" f.degree = degree\n",
|
|
54
|
+
" f.delay = delay\n",
|
|
55
|
+
"\n",
|
|
56
|
+
" # Derivative of the specified order\n",
|
|
57
|
+
" g = f.differentiated(order)\n",
|
|
58
|
+
"\n",
|
|
59
|
+
" # Dynamic range\n",
|
|
60
|
+
" image = {f.image(), g.image()}\n",
|
|
61
|
+
" plotrange = sk.interval.Interval.enclosure(image)\n",
|
|
62
|
+
" plotrange = sk.interval.Closed((\n",
|
|
63
|
+
" plotrange.midpoint - 0.55 * plotrange.diameter,\n",
|
|
64
|
+
" plotrange.midpoint + 0.55 * plotrange.diameter\n",
|
|
65
|
+
" ))\n",
|
|
66
|
+
"\n",
|
|
67
|
+
" # Plot of the spline\n",
|
|
68
|
+
" subplot = plt.subplots()\n",
|
|
69
|
+
" f.plot(\n",
|
|
70
|
+
" subplot,\n",
|
|
71
|
+
" plotrange = plotrange,\n",
|
|
72
|
+
" plotpoints = 200 + 1,\n",
|
|
73
|
+
" curve_fmt = \"#eccdef\" if order == 0 else \"-m\",\n",
|
|
74
|
+
" curve_lw = 7.0 if order == 0 else 0.75\n",
|
|
75
|
+
" )\n",
|
|
76
|
+
" # Plot of the gradient\n",
|
|
77
|
+
" g.plot(\n",
|
|
78
|
+
" subplot,\n",
|
|
79
|
+
" plotrange = plotrange,\n",
|
|
80
|
+
" plotpoints = 200 + 1,\n",
|
|
81
|
+
" curve_fmt = \"-C2\",\n",
|
|
82
|
+
" curve_markerfmt = \" \",\n",
|
|
83
|
+
" curvestem_linefmt = \"None\",\n",
|
|
84
|
+
" knot_marker = \" \",\n",
|
|
85
|
+
" periodbound_markerfmt = \" \",\n",
|
|
86
|
+
" periodboundstem_linefmt = \"None\"\n",
|
|
87
|
+
" )\n",
|
|
88
|
+
" plt.show()\n",
|
|
89
|
+
"\n",
|
|
90
|
+
"# Interaction\n",
|
|
91
|
+
"degree_widget = widgets.IntSlider(min = 0, max = max_degree, value = 3)\n",
|
|
92
|
+
"order_widget = widgets.IntSlider(min = 0, max = 3, value = 2)\n",
|
|
93
|
+
"def update_order_range (\n",
|
|
94
|
+
" *args\n",
|
|
95
|
+
"):\n",
|
|
96
|
+
" order_widget.max = degree_widget.value\n",
|
|
97
|
+
"degree_widget.observe(update_order_range, \"value\")\n",
|
|
98
|
+
"widgets.interactive(\n",
|
|
99
|
+
" update_plot,\n",
|
|
100
|
+
" degree = degree_widget,\n",
|
|
101
|
+
" order = order_widget,\n",
|
|
102
|
+
" period = (1, max_period),\n",
|
|
103
|
+
" delay = (-max_delay, max_delay)\n",
|
|
104
|
+
")\n"
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"cell_type": "code",
|
|
109
|
+
"execution_count": null,
|
|
110
|
+
"id": "c719d9b2-273a-431b-9812-11db4edcb69c",
|
|
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,239 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cells": [
|
|
3
|
+
{
|
|
4
|
+
"cell_type": "markdown",
|
|
5
|
+
"id": "02240a05-3526-4530-ae12-d9522465b594",
|
|
6
|
+
"metadata": {},
|
|
7
|
+
"source": [
|
|
8
|
+
"# Fourier Coefficients of Splines Derivatives\n",
|
|
9
|
+
"The disks with a notch represent a complex value. The phase is suggested by the orientation of the notch. The modulus is suggested by the color density, with a dense <span style=\"color:#1f77b4\">**blue**</span> color depicting a large modulus. As the modulus dwindles, the blue color fades into the white background. When the modulus becomes negligible, the phase becomes indefinite and the color turns to <span style=\"color:#d3d3d3\">**light gray**</span>.\n",
|
|
10
|
+
"\n",
|
|
11
|
+
"* The top row of complex numbers gives the first few Fourier coefficients of the gradient of a spline, as obtained through the proper adjustment of the Fourier coefficients $F\\{f\\}$ of the *spline* itself.\n",
|
|
12
|
+
"* The bottom row of complex numbers gives the first few Fourier coefficients $F\\{{\\mathrm{D}}^{m}\\{f\\}\\}$ of the *gradient of a spline*, as obtained directly.\n",
|
|
13
|
+
"* The two rows do match perfectly, which provides a visual illustration of the mathematical equivalence between the two computational methods.\n",
|
|
14
|
+
"\n",
|
|
15
|
+
"The spline $f$ of degree $n\\in{\\mathbb{N}}$ is shown in the <span style=\"color:#c20078\">**fuchsia**</span> color. Its derivative of order $m\\in[0\\ldots n]$ is ${\\mathrm{D}}^{m}\\{f\\}(x)=\\frac{{\\mathrm{d}}^{m}f(x)}{{\\mathrm{d}}x^{m}}$ and is shown in the <span style=\"color:#2ca02c\">**green**</span> color."
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"cell_type": "code",
|
|
20
|
+
"execution_count": null,
|
|
21
|
+
"id": "230ca8a8-c806-4207-b416-9954d55f1377",
|
|
22
|
+
"metadata": {},
|
|
23
|
+
"outputs": [],
|
|
24
|
+
"source": [
|
|
25
|
+
"# Load the required libraries\n",
|
|
26
|
+
"import cmath\n",
|
|
27
|
+
"import ipywidgets as widgets\n",
|
|
28
|
+
"import math\n",
|
|
29
|
+
"import matplotlib.patches as patches\n",
|
|
30
|
+
"import matplotlib.pyplot as plt\n",
|
|
31
|
+
"import matplotlib.ticker as ticker\n",
|
|
32
|
+
"import numpy as np\n",
|
|
33
|
+
"\n",
|
|
34
|
+
"import splinekit as sk # This library\n",
|
|
35
|
+
"\n",
|
|
36
|
+
"# Setup\n",
|
|
37
|
+
"max_period = 15 # Maximal period\n",
|
|
38
|
+
"max_degree = 9 # Maximal degree of the spline\n",
|
|
39
|
+
"max_delay = 2.0 # Maximal absolute delay\n",
|
|
40
|
+
"max_coeff = 15 # Maximal absolute Fourier index\n",
|
|
41
|
+
"\n",
|
|
42
|
+
"# Initialize the generator of random numbers\n",
|
|
43
|
+
"rng = np.random.default_rng()\n",
|
|
44
|
+
"\n",
|
|
45
|
+
"# Initial random periodic cubic splines with normal Gaussian coefficients\n",
|
|
46
|
+
"f = sk.PeriodicSpline1D.from_spline_coeff(rng.standard_normal(6), degree = 3)\n",
|
|
47
|
+
"\n",
|
|
48
|
+
"# Plot\n",
|
|
49
|
+
"def update_plot (\n",
|
|
50
|
+
" degree = 3,\n",
|
|
51
|
+
" order = 2,\n",
|
|
52
|
+
" period = 6,\n",
|
|
53
|
+
" delay = 0.0\n",
|
|
54
|
+
"):\n",
|
|
55
|
+
" global f\n",
|
|
56
|
+
"\n",
|
|
57
|
+
" # Update of the spline\n",
|
|
58
|
+
" if f.period != period:\n",
|
|
59
|
+
" f = sk.PeriodicSpline1D.from_spline_coeff(\n",
|
|
60
|
+
" rng.standard_normal(period),\n",
|
|
61
|
+
" degree = f.degree\n",
|
|
62
|
+
" )\n",
|
|
63
|
+
" f.degree = degree\n",
|
|
64
|
+
" f.delay = delay\n",
|
|
65
|
+
"\n",
|
|
66
|
+
" # Differentiation applied in the Fourier-series domain\n",
|
|
67
|
+
" def jw (\n",
|
|
68
|
+
" nu\n",
|
|
69
|
+
" ):\n",
|
|
70
|
+
" if 0 == order:\n",
|
|
71
|
+
" return(1.0)\n",
|
|
72
|
+
" return(((0 + 1j) * nu * 2.0 * np.pi / period) ** order)\n",
|
|
73
|
+
" ff = np.array(\n",
|
|
74
|
+
" [jw(nu) * f.fourier_coeff(nu) for nu in range(-max_coeff, max_coeff + 1)],\n",
|
|
75
|
+
" dtype = complex\n",
|
|
76
|
+
" )\n",
|
|
77
|
+
"\n",
|
|
78
|
+
" # Differentiation applied in the native (time or space) domain\n",
|
|
79
|
+
" g = f.differentiated(order)\n",
|
|
80
|
+
" fg = np.array(\n",
|
|
81
|
+
" [g.fourier_coeff(nu) for nu in range(-max_coeff, max_coeff + 1)],\n",
|
|
82
|
+
" dtype = complex\n",
|
|
83
|
+
" )\n",
|
|
84
|
+
"\n",
|
|
85
|
+
" # Plots\n",
|
|
86
|
+
" (fig, (ax1, ax2)) = plt.subplots(nrows = 2)\n",
|
|
87
|
+
" r = 0.48\n",
|
|
88
|
+
" # Caption\n",
|
|
89
|
+
" ax1.text(\n",
|
|
90
|
+
" -max_coeff,\n",
|
|
91
|
+
" 4.0 * r,\n",
|
|
92
|
+
" r\"$\\left({{\\mathrm{{j}}}}\\,\\nu\\,\\frac{{2\\,\\pi}}{{{}}}\\right)^{{{}}}\\,F\\{{f\\}}[\\nu]$\"\n",
|
|
93
|
+
" .format(period, order)\n",
|
|
94
|
+
" )\n",
|
|
95
|
+
" ax1.text(\n",
|
|
96
|
+
" -max_coeff,\n",
|
|
97
|
+
" -5.0 * r,\n",
|
|
98
|
+
" r\"$F\\{{{{\\mathrm{{D}}}}^{{{}}}\\{{f\\}}\\}}[\\nu]$\".format(order)\n",
|
|
99
|
+
" )\n",
|
|
100
|
+
" # Fourier coefficients\n",
|
|
101
|
+
" ax1.set_xlim(left = -max_coeff, right = max_coeff)\n",
|
|
102
|
+
" ax1.set_ylim(bottom = -2.0 * r - 0.1, top = 2.0 * r + 0.1)\n",
|
|
103
|
+
" ax1.set_aspect(1.0)\n",
|
|
104
|
+
" ax1.spines[:].set_color(\"None\")\n",
|
|
105
|
+
" ax1.tick_params(\n",
|
|
106
|
+
" bottom = True,\n",
|
|
107
|
+
" labelbottom = True,\n",
|
|
108
|
+
" top = True,\n",
|
|
109
|
+
" labeltop = False,\n",
|
|
110
|
+
" left = False,\n",
|
|
111
|
+
" labelleft = False\n",
|
|
112
|
+
" )\n",
|
|
113
|
+
" ax1.xaxis.set_major_locator(ticker.FixedLocator([-5, 0, 5, 10]))\n",
|
|
114
|
+
" ax1.xaxis.set_minor_locator(ticker.AutoMinorLocator())\n",
|
|
115
|
+
" a0 = math.log(min(abs(ff)) + 0.01)\n",
|
|
116
|
+
" a1 = math.log(max(abs(ff)) + 0.01)\n",
|
|
117
|
+
" af = (np.log(abs(ff) + 0.01) - a0) / (a1 - a0) if a1 > a0 else np.ones(len(ff))\n",
|
|
118
|
+
" ag = (np.log(abs(fg) + 0.01) - a0) / (a1 - a0) if a1 > a0 else np.ones(len(fg))\n",
|
|
119
|
+
" for k1 in range(len(ff)):\n",
|
|
120
|
+
" if cmath.isclose(\n",
|
|
121
|
+
" 0.0,\n",
|
|
122
|
+
" ff[k1],\n",
|
|
123
|
+
" rel_tol = math.sqrt(math.ulp(1.0)),\n",
|
|
124
|
+
" abs_tol = math.sqrt(math.ulp(1.0))\n",
|
|
125
|
+
" ):\n",
|
|
126
|
+
" ax1.add_patch(patches.Circle((k1 - max_coeff, 0.55), r, color = \"lightgray\"))\n",
|
|
127
|
+
" else:\n",
|
|
128
|
+
" ax1.add_patch(patches.Wedge(\n",
|
|
129
|
+
" (k1 - max_coeff, 0.55),\n",
|
|
130
|
+
" r,\n",
|
|
131
|
+
" cmath.phase(ff[k1]) * 180.0 / math.pi + 22.5,\n",
|
|
132
|
+
" cmath.phase(ff[k1]) * 180.0 / math.pi - 22.5,\n",
|
|
133
|
+
" color = \"C0\",\n",
|
|
134
|
+
" alpha = min(max(0.0, af[k1]), 1.0)\n",
|
|
135
|
+
" ))\n",
|
|
136
|
+
" for k1 in range(len(fg)):\n",
|
|
137
|
+
" if cmath.isclose(\n",
|
|
138
|
+
" 0.0,\n",
|
|
139
|
+
" fg[k1],\n",
|
|
140
|
+
" rel_tol = math.sqrt(math.ulp(1.0)),\n",
|
|
141
|
+
" abs_tol = math.sqrt(math.ulp(1.0))\n",
|
|
142
|
+
" ):\n",
|
|
143
|
+
" ax1.add_patch(patches.Circle((k1 - max_coeff, -0.55), r, color = \"lightgray\"))\n",
|
|
144
|
+
" else:\n",
|
|
145
|
+
" ax1.add_patch(patches.Wedge(\n",
|
|
146
|
+
" (k1 - max_coeff, -0.55),\n",
|
|
147
|
+
" r,\n",
|
|
148
|
+
" cmath.phase(fg[k1]) * 180.0 / math.pi + 22.5,\n",
|
|
149
|
+
" cmath.phase(fg[k1]) * 180.0 / math.pi - 22.5,\n",
|
|
150
|
+
" color = \"C0\",\n",
|
|
151
|
+
" alpha = min(max(0.0, ag[k1]), 1.0)\n",
|
|
152
|
+
" ))\n",
|
|
153
|
+
" # Splines\n",
|
|
154
|
+
" image = {f.image(), g.image()}\n",
|
|
155
|
+
" plotrange = sk.interval.Interval.enclosure(image)\n",
|
|
156
|
+
" plotrange = sk.interval.Closed((\n",
|
|
157
|
+
" plotrange.midpoint - 0.55 * plotrange.diameter,\n",
|
|
158
|
+
" plotrange.midpoint + 0.55 * plotrange.diameter\n",
|
|
159
|
+
" ))\n",
|
|
160
|
+
" g.plot((fig, ax2), plotpoints = 201, plotrange = plotrange, curve_fmt = \"-C2\")\n",
|
|
161
|
+
" f.plot((fig, ax2), plotpoints = 201, plotrange = plotrange, curve_fmt = \"-m\")\n",
|
|
162
|
+
" plt.show()\n",
|
|
163
|
+
"\n",
|
|
164
|
+
"# Interaction\n",
|
|
165
|
+
"degree_widget = widgets.IntSlider(min = 0, max = max_degree, value = 3)\n",
|
|
166
|
+
"order_widget = widgets.IntSlider(min = 0, max = 3, value = 2)\n",
|
|
167
|
+
"def update_order_range (\n",
|
|
168
|
+
" *args\n",
|
|
169
|
+
"):\n",
|
|
170
|
+
" order_widget.max = degree_widget.value\n",
|
|
171
|
+
"degree_widget.observe(update_order_range, \"value\")\n",
|
|
172
|
+
"widgets.interactive(\n",
|
|
173
|
+
" update_plot,\n",
|
|
174
|
+
" degree = degree_widget,\n",
|
|
175
|
+
" order = order_widget,\n",
|
|
176
|
+
" period = (1, max_period),\n",
|
|
177
|
+
" delay = (-max_delay, max_delay)\n",
|
|
178
|
+
")\n"
|
|
179
|
+
]
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"cell_type": "code",
|
|
183
|
+
"execution_count": null,
|
|
184
|
+
"id": "c719d9b2-273a-431b-9812-11db4edcb69c",
|
|
185
|
+
"metadata": {},
|
|
186
|
+
"outputs": [],
|
|
187
|
+
"source": [
|
|
188
|
+
"\n",
|
|
189
|
+
"\n",
|
|
190
|
+
"\n",
|
|
191
|
+
"\n",
|
|
192
|
+
"\n",
|
|
193
|
+
"\n",
|
|
194
|
+
"\n",
|
|
195
|
+
"\n",
|
|
196
|
+
"\n",
|
|
197
|
+
"\n",
|
|
198
|
+
"\n",
|
|
199
|
+
"\n",
|
|
200
|
+
"\n",
|
|
201
|
+
"\n",
|
|
202
|
+
"\n",
|
|
203
|
+
"\n",
|
|
204
|
+
"\n",
|
|
205
|
+
"\n",
|
|
206
|
+
"\n",
|
|
207
|
+
"\n"
|
|
208
|
+
]
|
|
209
|
+
}
|
|
210
|
+
],
|
|
211
|
+
"metadata": {
|
|
212
|
+
"kernelspec": {
|
|
213
|
+
"display_name": "Python 3 (ipykernel)",
|
|
214
|
+
"language": "python",
|
|
215
|
+
"name": "python3"
|
|
216
|
+
},
|
|
217
|
+
"language_info": {
|
|
218
|
+
"codemirror_mode": {
|
|
219
|
+
"name": "ipython",
|
|
220
|
+
"version": 3
|
|
221
|
+
},
|
|
222
|
+
"file_extension": ".py",
|
|
223
|
+
"mimetype": "text/x-python",
|
|
224
|
+
"name": "python",
|
|
225
|
+
"nbconvert_exporter": "python",
|
|
226
|
+
"pygments_lexer": "ipython3",
|
|
227
|
+
"version": "3.12.6"
|
|
228
|
+
},
|
|
229
|
+
"widgets": {
|
|
230
|
+
"application/vnd.jupyter.widget-state+json": {
|
|
231
|
+
"state": {},
|
|
232
|
+
"version_major": 2,
|
|
233
|
+
"version_minor": 0
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
"nbformat": 4,
|
|
238
|
+
"nbformat_minor": 5
|
|
239
|
+
}
|