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