Skip to main content

A fast cubic spline interpolator for real and complex data.

Project description

fastcubicspline

a fast cubic spline interpolator for equally spaced values and complex data

Why not using scipy's Cubic Spline?

There are two reasons why fcSpline should be used instead of scipy.interpolate.CubicSpline.

  1. When called in a loop, fcSpline it 3 to 5 time faster than CubicSpline (see fcs_timing.py).
  2. Natively handles complex data.

What are the drawbacks? Well, fcSpline works on equally spaced data only. At the moment it supports 64-floats and 128-bit compex-values (however, generalization should be trivial).

Example

from fastcubicspline import FCS
# set up x-limits
x_low = 1
x_high = 5

# set up the y-data, here complex values
y_data = [9+9j, 4+4j, 0, 6+6j, 2+2j]

# class init
fcs = FCS(x_low, x_high, y_data)

# simply call the FCS-object like a regular function
# to get interpolated values
print(fcs(2.5))
# (0.921875+0.921875j)

For convenience, this package also provides a polynomial interpolator. Note that the NPointPoly class is not intended for time crucial applications.

from fastcubicspline import NPointPoly
# the x and y values
x = [1, 2, 4, 5, 8]
y = [9 + 9j, 4 + 4j, 0, 6 + 6j, 2 + 2j]

npp = NPointPoly(x, y)
# call the NPointPoly-object to get interpolated value at any x
print(npp(2.5))

(see also examples/examples.py)

Documentation

There is not much of an API, so there is no extra documentation page. Everything is, however, documented by means of function annotations and doc-strings within the code and should be visible when developing in a modern IDE.

Install

fastcubicspline is on PyPi. So you can simply install the latest release with

pip install fastcubicspline

From Source

Fetch the latest version (or check any previous stage) by cloning from https://github.com/cimatosa/fcSpline.

pip

Make sure pip is installed. Change into the fcSpline package directory and run:

python -m pip install .

See the option --user if you don't have the appropriate permission for an installation to the standard location.

poetry

Change into the fcSpline package directory. Install fastcubicspline and its dependencies into a virtual environment with

poetry install

and spawn a shell using that environment poetry shell. Now you can check if the tests pass with pytest. poetry install should build the cython extension which you cen check with pytest -v -k cython.

In case of poetry errors, you might want to get the latest poetry version with poetry self update.

Manually Build Cython Extension

Some distutils magic is contained in build_ext.py so you can simply call

python3 build_ext.py

to build the Cython extension inplace. Run pytest -v -k cython to verify that the Cython extension is available.

Clean the build files by calling

python3 build_ext.py clean

Testing

Run and list all tests with

pytest -v

References

* Press, W.H., Teukolsky, S.A., Vetterling, W.T., Flannery, B.P., 2007.
  Numerical Recipes 3rd Edition: The Art of Scientific Computing,
  Auflage: 3. ed. Cambridge University Press, Cambridge, UK; New York.

* Wikipedia, Retrieved September 1, 2023, from 
  https://en.wikipedia.org/wiki/Finite_difference_coefficient#Forward_finite_difference

MIT licence

Copyright (c) 2023 Richard Hartmann

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastcubicspline-1.1.5.tar.gz (164.7 kB view details)

Uploaded Source

Built Distribution

fastcubicspline-1.1.5-cp311-cp311-manylinux_2_36_x86_64.whl (293.9 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.36+ x86-64

File details

Details for the file fastcubicspline-1.1.5.tar.gz.

File metadata

  • Download URL: fastcubicspline-1.1.5.tar.gz
  • Upload date:
  • Size: 164.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.3 Linux/6.1.0-11-amd64

File hashes

Hashes for fastcubicspline-1.1.5.tar.gz
Algorithm Hash digest
SHA256 7b83ac18d1c06f0c1197ae6c628c9b74f0b55aae3f62c253165cb351f3354c73
MD5 63143a6a92b01781fc86431a7342f0cc
BLAKE2b-256 17836202c8b21a91c861b2da50845d79fa045461f4fb258b535088531dc79d1b

See more details on using hashes here.

File details

Details for the file fastcubicspline-1.1.5-cp311-cp311-manylinux_2_36_x86_64.whl.

File metadata

File hashes

Hashes for fastcubicspline-1.1.5-cp311-cp311-manylinux_2_36_x86_64.whl
Algorithm Hash digest
SHA256 cce5056ebc0623d2ce41689c22a5c47a1a84f6c3ce1e77240a4f80e4a0957091
MD5 d442785e5a827b331253c062c769ac9d
BLAKE2b-256 b7ceb9afac2564dbdfc510446e663cbdfb5fa6650f0d134306c232e68887dd82

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page