Simple, easily verified custom spline interpolation.
Project description
Extensible Splines
Python Spline Interpolation. Interactive plot for quick testing of new spline kernels or control point usage.
Why?
If you look at the source of extensible_splines/splines.py
you will notice that the most commonly used varieties of spline can be defined with only one or two of four possible overloads or attribute definitions relative to the base class.
- The kernel itself. That is, the square matrix by which we will multiply the powers of the parameter--in the form of a vector.
- The scaling factor. This defaults to 1.0, but supplying a value on the open unit interval is fine.
- Any filter on the segments themselves.
- How to transform the knots. In the case of the Hermite spline, this is p0, (δx,δy), p2, (δx,δy). Points p0 and p2 are unchanged, but p1 and p3 are tranformed to relative offsets from p0 and p2, respectively.
Installation
pip install extensible-splines
Usage
Create an instance of SplineMatrix
For example:
my_kernel = SplineMatrix(np.array([[1, 0, 0, 0],[0, 1, 0, 0],[-3, -2, 3, -1],[2, 1, -2, 1]],float))
Define a Subclass of BaseSpline
This can be as simple as (1) defining the abstract methods with super calls and (2) passing the kernel to the base constructor.
class MySpline(BaseSpline):
def __init__(self) -> None:
super().__init__(my_kernel)
def filter_segments(self, raw_segments: Iterable[Tuple[Tuple[int, int]]]):
return super().filter_segments(raw_segments)
def transform_control_points(self, points: Tuple[Tuple[int, int]]) -> np.ndarray:
return super().transform_control_points(points)
Notice that other than super() calls and type hinting, the kernel is the only aspect of the type definition to be handled above.
Test the New Spline Interactively
# Kernel instance and Spline class go here
# ....
##
def main():
editor = interactive.SplineEditor(MySpline())
editor.init_figure(caption='Testing New Splines')
if __name__ == '__main__':
main()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file extensible_splines-0.2.1.tar.gz
.
File metadata
- Download URL: extensible_splines-0.2.1.tar.gz
- Upload date:
- Size: 9.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b98115d3539ae49ebb266d78a8a65ce57b87f1695ab529fe1409475ea995c5fc |
|
MD5 | eb6008cd13075c82d0290dd849fe3014 |
|
BLAKE2b-256 | 96f667d3d353662106f2af5931cda621a6fdd14fe23d48aed74f7edeeff83255 |
File details
Details for the file extensible_splines-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: extensible_splines-0.2.1-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4070cf8a53941daf0ab2a3fa12a4ea35fc1c59c7e8ac85d7cb193b33105a8fdd |
|
MD5 | 20271bfc98c5c22a72779e65251af295 |
|
BLAKE2b-256 | 9ed645ac122488c4f5f06ce09cd8f53df8e75335a12950a016c085ae96e72bf3 |