Skip to main content

Python Unit Testing using Conda codecov

cached_interpolate

Efficient evaluation of interpolants at fixed points.

When performing a Bayesian analysis with a stochastic sampler however, one sometimes has to evaluate many interpolants (representing the parameterized model) at the same set of points (the data) with the same knot points.

Evaluating interpolants typically requires two stages:

  1. finding the closest knot of the interpolant to the new point and the distance from that knot.
  2. evaluating the interpolant at that point.

When we have identical knots and evaluation points but different functions being approximated the first of these stages is done many times unnecessarily. This can be made more efficient by caching the locations of the evaluation points leaving just the evaluation of the interpolation coefficients to be done at each iteration.

A further advantage of this, is that it allows trivially parallelising the interpolation using JAX, cupy, or torch.

This package implements this caching for nearest neighbour, linear, and cubic interpolation.

Installation

$ pip install cached_interpolate

Or to install from source:

$ git clone git@github.com:ColmTalbot/cached_interpolation.git
$ cd cached_interpolation
$ pip install .

Demonstration

We can compare the interpolation to the scipy.interpolate.CubicSpline implementation.

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import CubicSpline

from cached_interpolate import CachingInterpolant

x_nodes = np.linspace(0, 1, 10)
y_nodes = np.random.uniform(-1, 1, 10)
evaluation_points = np.sort(np.random.uniform(0, 1, 10000))

interpolant = CachingInterpolant(x=x_nodes, y=y_nodes, kind="cubic")
sp_interpolant = CubicSpline(x=x_nodes, y=y_nodes, bc_type="natural")

figure, axes = plt.subplots(nrows=2, gridspec_kw={'height_ratios': [3, 1]}, sharex=True)
axes[0].plot(evaluation_points, interpolant(evaluation_points))
axes[0].plot(evaluation_points, sp_interpolant(evaluation_points))
axes[0].scatter(x_nodes, y_nodes, color="k")
axes[1].plot(evaluation_points, interpolant(evaluation_points) - sp_interpolant(evaluation_points))
axes[0].set_ylabel("$y$")
axes[1].set_xlabel("$x$")
axes[1].set_ylabel("$\\Delta y$")
axes[1].set_xlim(0, 1)
plt.tight_layout()
plt.show()
plt.close(figure)

comparison

I note here that we use the "natural" boundary condition. This means that first and second derivatives of the spline vanish at the endpoints. This is different from the default "not-a-knot" boundary condition used in scipy.

We can now evaluate this interpolant in a loop to demonstrate the performance of the caching. At every iteration we change the function being interpolated by randomly setting the y argument. Before the loop, we add an initial call to set up the cache as this will be much slower than the following iterations.

import time

import numpy as np
from scipy.interpolate import CubicSpline

from cached_interpolate import CachingInterpolant

x_nodes = np.linspace(0, 1, 10)
y_nodes = np.random.uniform(-1, 1, 10)
evaluation_points = np.random.uniform(0, 1, 10000)

interpolant = CachingInterpolant(x=x_nodes, y=y_nodes, kind="cubic")
sp_interpolant = CubicSpline(x=x_nodes, y=y_nodes, bc_type="natural")

interpolant(x=evaluation_points, y=y_nodes)

n_iterations = 1000

start = time.time()
for _ in range(n_iterations):
    y_nodes = np.random.uniform(-1, 1, 10)
    interpolant(x=evaluation_points, y=y_nodes)
stop = time.time()
print(f"Cached time = {(stop - start):.3f}s for {n_iterations} iterations.")

start = time.time()
for _ in range(n_iterations):
    y_nodes = np.random.uniform(-1, 1, 10)
    CubicSpline(x=x_nodes, y=y_nodes, bc_type="natural")(evaluation_points)
stop = time.time()
print(f"Scipy time = {(stop - start):.3f}s for {n_iterations} iterations.")
Cached time = 0.187s for 1000 iterations.
Scipy time = 0.450s for 1000 iterations.

We've gained a factor of ~2.5 over the scipy version without caching. If this is the dominant cost in a simulation that takes a week to run, this is a big improvement.

If we need to evaluate for a new set of points, we have to tell the interpolant to reset the cache. There are two ways to do this:

  • create a new interpolant, this will require reevaluating the interpolation coefficients.
  • disable the evaluation point caching.
import numpy as np
from scipy.interpolate import CubicSpline

from cached_interpolate import CachingInterpolant

x_nodes = np.linspace(0, 1, 10)
y_nodes = np.random.uniform(-1, 1, 10)
evaluation_points = np.random.uniform(0, 1, 10000)

interpolant = CachingInterpolant(x=x_nodes, y=y_nodes, kind="cubic")
interpolated_values = interpolant(evaluation_points)

new_evaluation_points = np.random.uniform(0, 1, 1000)
interpolant(x=new_evaluation_points, use_cache=False)

Using the code in this way is much slower than scipy and so not practically very useful.

Any array-API-compatible module can be used as the backend parameter, enabling evaluation on GPUs or via JIT compilation. For example, to use cupy on an Nvidia GPU or torch:

import cupy as cp
import numpy as np

from cached_interpolate import CachingInterpolant

x_nodes = np.linspace(0, 1, 10)
y_nodes = np.random.uniform(-1, 1, 10)
evaluation_points = np.random.uniform(0, 1, 10000)
evaluation_points = cp.asarray(evaluation_points)

interpolant = CachingInterpolant(x=x_nodes, y=y_nodes, backend=cp)
interpolated_values = interpolant(evaluation_points)
import torch
import numpy as np

from cached_interpolate import CachingInterpolant

x_nodes = np.linspace(0, 1, 10)
y_nodes = np.random.uniform(-1, 1, 10)
evaluation_points = torch.tensor(np.random.uniform(0, 1, 10000))

interpolant = CachingInterpolant(x=x_nodes, y=y_nodes, backend=torch)
interpolated_values = interpolant(evaluation_points)

We can now repeat our timing test. To make the use of a GPU more realistic we'll increase the number of evaluation points.

import time

import cupy as cp
import numpy as np
from scipy.interpolate import CubicSpline

from cached_interpolate import CachingInterpolant

x_nodes = np.linspace(0, 1, 10)
y_nodes = np.random.uniform(-1, 1, 10)
evaluation_points = np.random.uniform(0, 1, 100000)
cp_evaluation_points = cp.asarray(evaluation_points)

interpolant = CachingInterpolant(x=x_nodes, y=y_nodes, kind="cubic")
cp_interpolant = CachingInterpolant(x=x_nodes, y=y_nodes, kind="cubic", backend=cp)
sp_interpolant = CubicSpline(x=x_nodes, y=y_nodes, bc_type="natural")

interpolant(x=evaluation_points)
cp_interpolant(x=cp_evaluation_points)

n_iterations = 1000

start = time.time()
for _ in range(n_iterations):
    y_nodes = np.random.uniform(-1, 1, 10)
    interpolant(x=evaluation_points, y=np.random.uniform(-1, 1, 10))
stop = time.time()
print(f"CPU cached time = {(stop - start):.3f}s for {n_iterations} iterations.")

start = time.time()
for _ in range(n_iterations):
    y_nodes = np.random.uniform(-1, 1, 10)
    CubicSpline(x=x_nodes, y=y_nodes, bc_type="natural")(evaluation_points)
stop = time.time()
print(f"Scipy time = {(stop - start):.3f}s for {n_iterations} iterations.")

start = time.time()
for _ in range(n_iterations):
    y_nodes = np.random.uniform(-1, 1, 10)
    cp_interpolant(x=cp_evaluation_points, y=np.random.uniform(-1, 1, 10))
stop = time.time()
print(f"GPU cached time = {(stop - start):.3f}s for {n_iterations} iterations.")
CPU cached time = 3.367s for 1000 iterations.
Scipy time = 4.213s for 1000 iterations.
GPU cached time = 0.212s for 1000 iterations.

While there are likely more optimizations that can be made and improved flexibility in the implementation, we can see that the GPU version is well over an order of magnitude faster than either of the CPU versions.

RegularCachingInterpolant

For the common case where the knot points are regularly spaced, the RegularCachingInterpolant class is available. It uses an analytical formula to find the nearest knot rather than a binary search, making it faster and fully differentiable through JIT-compiled backends such as jax or torch. It also supports a wider set of boundary conditions for cubic splines: "clamped", "natural", "not-a-knot" (default), and "periodic".

import numpy as np

from cached_interpolate import RegularCachingInterpolant

x_nodes = np.linspace(0, 1, 10)
y_nodes = np.random.uniform(-1, 1, 10)
evaluation_points = np.random.uniform(0, 1, 10000)

interpolant = RegularCachingInterpolant(x=x_nodes, y=y_nodes, kind="cubic")
interpolated_values = interpolant(evaluation_points)

The same backend parameter and loop-with-caching pattern described above apply equally to RegularCachingInterpolant.

If you have any comments/questions feel free to contact me through the issue tracker or a pull request.

Metadata

Release files for cached-interpolate 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cached-interpolate 0.4.0
File Size Uploaded
cached_interpolate-0.4.0.tar.gz 231.0 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for cached-interpolate 0.4.0
File
cached_interpolate-0.4.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
cached_interpolate-0.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
cached_interpolate-0.4.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
cached_interpolate-0.4.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
cached_interpolate-0.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
cached_interpolate-0.4.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
cached_interpolate-0.4.0-cp313-cp313t-win_amd64.whl CPython 3.13 CPython 3.13 free-threading Windows x86-64 Details
cached_interpolate-0.4.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 free-threading Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details
cached_interpolate-0.4.0-cp313-cp313t-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 free-threading macOS 11.0+ ARM64 Details
cached_interpolate-0.4.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
cached_interpolate-0.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
cached_interpolate-0.4.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
cached_interpolate-0.4.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
cached_interpolate-0.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details
cached_interpolate-0.4.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
cached_interpolate-0.4.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
cached_interpolate-0.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
cached_interpolate-0.4.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
cached_interpolate-0.4.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
cached_interpolate-0.4.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
cached_interpolate-0.4.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 9.5 MB

Release files / cached_interpolate-0.4.0.tar.gz

Download URL cached_interpolate-0.4.0.tar.gz
Size 231.0 kB
Tags Source
SHA-256 checksum
How to use checksums
115c4d305120b98756a2bfc5d3cf532437cc874bec7a69c2ccf43bc0e0fc0cca
BLAKE2b-256 checksum
How to use checksums
be0539f0e344a27c15ad4fbe252e4884b8046ae86d3876d04ea32edf8902efa8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp314-cp314t-win_amd64.whl

Download URL cached_interpolate-0.4.0-cp314-cp314t-win_amd64.whl
Size 278.6 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
db4e8074a867776f83ef267a0ff257470783f210d1806c15f863227d46f72658
BLAKE2b-256 checksum
How to use checksums
f9f6ba6402cbe6d2578e43cec3f18bffc4bcf35d45db073ebc7354bfa89c147a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cached_interpolate-0.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 789.7 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6979417f6597957e4e0c04b896e9921a4cdddf317d07c169d1fbbeb1507598c6
BLAKE2b-256 checksum
How to use checksums
ca73808f01b0670b9dd9418346a236e8b038509a85bc047a08019264b5e2f93b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL cached_interpolate-0.4.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 290.4 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
82db80f285e8c88147b3e56decb49f66e2503f40eaa0aed5e5a5060fcf6e31b0
BLAKE2b-256 checksum
How to use checksums
aa21e22b1e629add66a1a056a9fe2326e4a70a5662e3835a8f4d0034c29f8e6b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp314-cp314-win_amd64.whl

Download URL cached_interpolate-0.4.0-cp314-cp314-win_amd64.whl
Size 271.8 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
654e71a03905ca0dc6dc2996b8e172757c13307b3e01cf6d012d3961e48d7f04
BLAKE2b-256 checksum
How to use checksums
4757b56e2fdb0486fff2bff5f77cd1bff31586350efb8db9c26c94d40e67589a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cached_interpolate-0.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 760.7 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
379946f897129744f8bade9ec1f4ab34b1882cfc0b19d3062a01e54b8b985bb2
BLAKE2b-256 checksum
How to use checksums
4eab28cd82a936c1950062a7d730c793bd57abb90ee97f3def2b062d651e4104
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL cached_interpolate-0.4.0-cp314-cp314-macosx_11_0_arm64.whl
Size 283.4 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8cfd18b90068fb477337563332a4fd7acf12115e1dda8bb67cb8bf221b512b68
BLAKE2b-256 checksum
How to use checksums
176923e28fc9e3fd7b0eae08f9beffa99b6e41907c7b8e6a7c3b3084e6e44491
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp313-cp313t-win_amd64.whl

Download URL cached_interpolate-0.4.0-cp313-cp313t-win_amd64.whl
Size 274.7 kB
Tags CPython 3.13 CPython 3.13 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
f2516f33ec7b583ac42d4ac7fc769ab65aaaf0fb351f8d27f164507c4a6f6a5e
BLAKE2b-256 checksum
How to use checksums
e4dd5ff05a8c07b3b121094dd9ec423c0ef10b55ae38f63eff012c16ea8decbc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cached_interpolate-0.4.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 785.9 kB
Tags CPython 3.13 CPython 3.13 free-threading Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
87bad926394d6d7f88d29d3995d89300c0cab204b0ad1ab73089a263595c637e
BLAKE2b-256 checksum
How to use checksums
857782fa832c91df1a436c1d8753360f2000079d3a5bde1517bea0de12e4407e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp313-cp313t-macosx_11_0_arm64.whl

Download URL cached_interpolate-0.4.0-cp313-cp313t-macosx_11_0_arm64.whl
Size 287.7 kB
Tags CPython 3.13 CPython 3.13 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
9774bbf2960c5114d6068f9815411421a571114a4fc70606c90d55c71ec9936c
BLAKE2b-256 checksum
How to use checksums
b8b9a2e6bc5534c4a46cf24a4fed4bf25827271e243380703bac64e1add35aef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp313-cp313-win_amd64.whl

Download URL cached_interpolate-0.4.0-cp313-cp313-win_amd64.whl
Size 268.2 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
4eb484dc815d14ff017af5b0eb9c29c238210945935b04ad8174af95999f0950
BLAKE2b-256 checksum
How to use checksums
85a425cef148876fa21c115982280153956925981dcf42db38436b5ed3b337c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cached_interpolate-0.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 763.2 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
13583bb345563cd9aef0986cfa988466f7f8eeebe7ecf3ba07c5ab21b11ba144
BLAKE2b-256 checksum
How to use checksums
8a83f3452be55a358e30fa620bf45b61bb929de8e701b0e82beb558ac9cf67fe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL cached_interpolate-0.4.0-cp313-cp313-macosx_11_0_arm64.whl
Size 280.6 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
33fba183c5780d92df9e1cab98945a2bec7f497025a7b61d8b5ee3c566f7998f
BLAKE2b-256 checksum
How to use checksums
9d6eb3fffbdaf66892cd1201f4ba805dcb63c4aef43f0433ce1751677bd477dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp312-cp312-win_amd64.whl

Download URL cached_interpolate-0.4.0-cp312-cp312-win_amd64.whl
Size 268.4 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
3e459b5b388a74001bbbdc78fe699d97cb0b295ffeec47377d297c654fb8fede
BLAKE2b-256 checksum
How to use checksums
88be3c2eff1af0d43c28d79ad6013aafb02459e49efecc4a1f56064aa1555ac1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cached_interpolate-0.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 778.3 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
17ff4f9dc6eb3013b39a6e5c1ca41cf1bccf51224b853fdabd301f3c84996f9a
BLAKE2b-256 checksum
How to use checksums
b83a367f829d33754252d319b5c97755433563b151b286a29cea296e4b3e335c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL cached_interpolate-0.4.0-cp312-cp312-macosx_11_0_arm64.whl
Size 281.1 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c6b576f675848f114cfc3f722ca7de0400bf334999a725e0289dd54975db40f4
BLAKE2b-256 checksum
How to use checksums
9a1851468874a3cd1fdabbdc2778f6c0555cd4344131ebb8d1fe08b581151679
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp311-cp311-win_amd64.whl

Download URL cached_interpolate-0.4.0-cp311-cp311-win_amd64.whl
Size 268.9 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
6d450056ecd77fd3c5a29aa04dfd82b919bdd17bf2a3d91724674f1c521c1a3e
BLAKE2b-256 checksum
How to use checksums
1f40361201c816fb99811f8bfb1ea057f971efcc4b02b6bd02f023c264edc3e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cached_interpolate-0.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 777.9 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
aadd56c58e94abbd6ddfeec8dc25ad983035c359762849274a65bf2649d44acb
BLAKE2b-256 checksum
How to use checksums
d83947b2a112c076a825afbf965bc682e0ca773293e2468ea20a6d93f1a959b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL cached_interpolate-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
Size 280.4 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
cd8f6493b54a4904655441fdd39be3f0e2168bb048b8c28b75c27adf10e3f753
BLAKE2b-256 checksum
How to use checksums
af5dc5071cb9473e5d1761e35ad9b11eb4eddf04ddcc662b27b66189757d58f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp310-cp310-win_amd64.whl

Download URL cached_interpolate-0.4.0-cp310-cp310-win_amd64.whl
Size 268.8 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
83a8eed12ff7794a56a4a954e28a9c5f5e680fbed349b549afc703594082f8aa
BLAKE2b-256 checksum
How to use checksums
64c00b9d3bb869b88bd381ba68e036793a2f4ff7af7c7e50cf0e20c813b34568
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL cached_interpolate-0.4.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 747.1 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c46f3101742f9af8b6742c0ceec813f96bc574c5d072adc9d16940be4d73a0f5
BLAKE2b-256 checksum
How to use checksums
be7fe5984c51e0d41f6e84d639ff785c45cb283b256ece74a772f45c318c5aad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / cached_interpolate-0.4.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL cached_interpolate-0.4.0-cp310-cp310-macosx_11_0_arm64.whl
Size 280.6 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
97f1b43d27ab9a43b8558450fba93b3ed92daf19aeb1e3b4e7b4b635c298ef94
BLAKE2b-256 checksum
How to use checksums
08131681935f5068b7c16495cf52e25ad1fedd0673fd2963d7127d186987c3b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

0.4.0 This release

22 release files

0.3.2

10 release files

0.3.1

9 release files

0.3.0

12 release files

0.2.1

12 release files

0.2.0

10 release files

0.1.0

7 release files

0.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page