interpn 0.6.2__tar.gz → 0.6.3__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.
- {interpn-0.6.2 → interpn-0.6.3}/.github/workflows/release-python.yml +4 -8
- {interpn-0.6.2 → interpn-0.6.3}/.github/workflows/release-rust.yml +0 -1
- {interpn-0.6.2 → interpn-0.6.3}/.github/workflows/test-python.yml +8 -2
- {interpn-0.6.2 → interpn-0.6.3}/CHANGELOG.md +20 -0
- interpn-0.6.3/PKG-INFO +227 -0
- {interpn-0.6.2 → interpn-0.6.3}/pyproject.toml +10 -8
- {interpn-0.6.2 → interpn-0.6.3}/uv.lock +308 -110
- interpn-0.6.2/PKG-INFO +0 -30
- {interpn-0.6.2 → interpn-0.6.3}/.cargo/config.toml +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/.github/workflows/test-rust.yml +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/.gitignore +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/.readthedocs.yml +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/Cargo.lock +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/Cargo.toml +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/LICENSE-APACHE +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/LICENSE-MIT +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/README.md +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/benches/bench.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/benches/bench_cpu.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/benches/bench_mem.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/1d_quality_of_fit_Rectilinear.svg +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/1d_quality_of_fit_Regular.svg +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/2d_quality_of_fit_Rectilinear.svg +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/2d_quality_of_fit_Regular.svg +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/3d_throughput_vs_nobs.svg +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/3d_throughput_vs_nobs_prealloc.svg +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/4d_throughput_vs_nobs.svg +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/4d_throughput_vs_nobs_prealloc.svg +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/API_Docs.md +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/index.md +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/perf.md +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/ram_vs_dims.svg +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/requirements.txt +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/throughput_vs_dims_1000_obs.svg +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/docs/throughput_vs_dims_1_obs.svg +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/examples/cubic_comparison.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/mkdocs.yml +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/scripts/distr_pgo.sh +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/scripts/distr_pgo_install.sh +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/scripts/distr_pgo_profile.sh +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/scripts/native_pgo.sh +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/scripts/native_pgo_install.sh +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/scripts/native_pgo_profile.sh +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/scripts/pgo-profiles/pgo.profdata +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/scripts/profile_workload.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/interpn/__init__.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/interpn/multicubic_rectilinear.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/interpn/multicubic_regular.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/interpn/multilinear_rectilinear.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/interpn/multilinear_regular.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/interpn/py.typed +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/interpn/raw.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/interpn/serialization.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/lib.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/multicubic/mod.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/multicubic/rectilinear.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/multicubic/rectilinear_recursive.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/multicubic/regular.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/multicubic/regular_recursive.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/multilinear/mod.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/multilinear/rectilinear.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/multilinear/rectilinear_recursive.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/multilinear/regular.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/multilinear/regular_recursive.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/one_dim/hold.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/one_dim/linear.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/one_dim/mod.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/python.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/testing.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/src/utils.rs +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/test/test_docs.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/test/test_examples.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/test/test_multicubic_rectilinear.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/test/test_multicubic_regular.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/test/test_multilinear_rectilinear.py +0 -0
- {interpn-0.6.2 → interpn-0.6.3}/test/test_multilinear_regular.py +0 -0
|
@@ -6,18 +6,14 @@
|
|
|
6
6
|
name: release-python
|
|
7
7
|
|
|
8
8
|
on:
|
|
9
|
-
push:
|
|
10
|
-
branches:
|
|
11
|
-
- main
|
|
12
9
|
workflow_dispatch:
|
|
13
10
|
|
|
14
11
|
permissions:
|
|
15
12
|
contents: read
|
|
16
13
|
|
|
17
14
|
jobs:
|
|
18
|
-
|
|
19
|
-
uses: ./.github/workflows/
|
|
20
|
-
secrets: inherit
|
|
15
|
+
test_python:
|
|
16
|
+
uses: ./.github/workflows/test-python.yml
|
|
21
17
|
|
|
22
18
|
linux:
|
|
23
19
|
runs-on: ${{ matrix.platform.runner }}
|
|
@@ -124,7 +120,7 @@ jobs:
|
|
|
124
120
|
strategy:
|
|
125
121
|
matrix:
|
|
126
122
|
platform:
|
|
127
|
-
- runner: macos-
|
|
123
|
+
- runner: macos-15-intel
|
|
128
124
|
target: x86_64
|
|
129
125
|
- runner: macos-14
|
|
130
126
|
target: aarch64
|
|
@@ -163,7 +159,7 @@ jobs:
|
|
|
163
159
|
name: Release
|
|
164
160
|
runs-on: ubuntu-latest
|
|
165
161
|
# if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
|
|
166
|
-
needs: [
|
|
162
|
+
needs: [test_python, linux, musllinux, windows, macos, sdist]
|
|
167
163
|
permissions:
|
|
168
164
|
# Use to sign the release artifacts
|
|
169
165
|
id-token: write
|
|
@@ -11,7 +11,13 @@ jobs:
|
|
|
11
11
|
strategy:
|
|
12
12
|
matrix:
|
|
13
13
|
target: [x86_64]
|
|
14
|
-
python-version:
|
|
14
|
+
python-version:
|
|
15
|
+
- "3.9"
|
|
16
|
+
- "3.10"
|
|
17
|
+
- "3.11"
|
|
18
|
+
- "3.12"
|
|
19
|
+
- "3.13"
|
|
20
|
+
- "3.14"
|
|
15
21
|
steps:
|
|
16
22
|
- uses: actions/checkout@v3
|
|
17
23
|
- name: Install uv
|
|
@@ -42,7 +48,7 @@ jobs:
|
|
|
42
48
|
- runner: windows-latest
|
|
43
49
|
- runner: ubuntu-latest
|
|
44
50
|
- runner: ubuntu-24.04-arm # aarch64
|
|
45
|
-
- runner: macos-
|
|
51
|
+
- runner: macos-15-intel # x86_64
|
|
46
52
|
- runner: macos-14 # aarch64
|
|
47
53
|
python-version: ["3.9"]
|
|
48
54
|
steps:
|
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.6.3 2025-10-22
|
|
4
|
+
|
|
5
|
+
Unpin max supported python version due to use of stable ABI3,
|
|
6
|
+
along with a host of other improvements to packaging and actions workflows.
|
|
7
|
+
|
|
8
|
+
### New Contributors
|
|
9
|
+
|
|
10
|
+
* [Clément Robert](https://github.com/neutrinoceros) contributed PRs 30,32,33,36 making up all the substantial changes in this release. Thanks, Clément!
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
* Python
|
|
15
|
+
* Unpin max python version
|
|
16
|
+
* Roll forward pydantic version for python 3.14 compatibility
|
|
17
|
+
* Update package metadata
|
|
18
|
+
* Add python 3.14 to test matrix
|
|
19
|
+
* Workflows
|
|
20
|
+
* Reconfigure from single-contributor to commons-project by segmenting release workflows to be dispatched manually only
|
|
21
|
+
* Update python release workflow to depend on test-python instead of release-rust to support separate releases
|
|
22
|
+
|
|
3
23
|
## 0.6.2 2025-10-20
|
|
4
24
|
|
|
5
25
|
Add optional use of fused multiply-add, enabled for python distributions.
|
interpn-0.6.3/PKG-INFO
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: interpn
|
|
3
|
+
Version: 0.6.3
|
|
4
|
+
Classifier: Programming Language :: Rust
|
|
5
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
|
+
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
7
|
+
Requires-Dist: numpy>=2
|
|
8
|
+
Requires-Dist: pydantic>=2.12
|
|
9
|
+
Requires-Dist: pytest>=8.4.2 ; extra == 'test'
|
|
10
|
+
Requires-Dist: pytest-cov>=7.0.0 ; extra == 'test'
|
|
11
|
+
Requires-Dist: ruff>=0.13.3 ; extra == 'test'
|
|
12
|
+
Requires-Dist: pyright==1.1.337 ; extra == 'test'
|
|
13
|
+
Requires-Dist: mktestdocs>=0.2.1 ; extra == 'test'
|
|
14
|
+
Requires-Dist: scipy>=1.11.4 ; extra == 'test'
|
|
15
|
+
Requires-Dist: matplotlib>=3.8 ; extra == 'test'
|
|
16
|
+
Requires-Dist: scipy>=1.11.4 ; extra == 'bench'
|
|
17
|
+
Requires-Dist: matplotlib>=3.8 ; extra == 'bench'
|
|
18
|
+
Requires-Dist: memory-profiler>=0.61.0 ; extra == 'bench'
|
|
19
|
+
Requires-Dist: mkdocs>=1.5.3 ; extra == 'doc'
|
|
20
|
+
Requires-Dist: mkdocstrings-python>=1.7.5 ; extra == 'doc'
|
|
21
|
+
Requires-Dist: mkdocs-material>=9.4.10 ; extra == 'doc'
|
|
22
|
+
Provides-Extra: test
|
|
23
|
+
Provides-Extra: bench
|
|
24
|
+
Provides-Extra: doc
|
|
25
|
+
License-File: LICENSE-MIT
|
|
26
|
+
License-File: LICENSE-APACHE
|
|
27
|
+
Summary: N-dimensional interpolation/extrapolation methods
|
|
28
|
+
Home-Page: https://github.com/jlogan03/interpn/
|
|
29
|
+
Author-email: James Logan <jlogan03@gmail.com>
|
|
30
|
+
License-Expression: MIT OR Apache-2.0
|
|
31
|
+
Requires-Python: >=3.9
|
|
32
|
+
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
33
|
+
Project-URL: repository, https://github.com/jlogan03/interpn
|
|
34
|
+
Project-URL: documentation, https://interpn.readthedocs.io/
|
|
35
|
+
|
|
36
|
+
# InterpN
|
|
37
|
+
|
|
38
|
+
[Repo](https://github.com/jlogan03/interpn) |
|
|
39
|
+
[Python Docs](https://interpnpy.readthedocs.io/en/latest/) |
|
|
40
|
+
[Rust Docs](https://docs.rs/interpn/latest/interpn/)
|
|
41
|
+
|
|
42
|
+
N-dimensional interpolation/extrapolation methods, no-std and no-alloc compatible,
|
|
43
|
+
prioritizing correctness, performance, and compatiblity with memory-constrained environments.
|
|
44
|
+
|
|
45
|
+
Available as a rust crate and python library.
|
|
46
|
+
|
|
47
|
+
These methods perform zero allocation when evaluated (except, optionally, for the output).
|
|
48
|
+
Because of this, they have minimal per-call overhead, and are particularly
|
|
49
|
+
effective when examining small numbers of observation points. See the
|
|
50
|
+
[performance](https://interpnpy.readthedocs.io/en/latest/perf/) page for detailed benchmarks.
|
|
51
|
+
|
|
52
|
+
## Features
|
|
53
|
+
|
|
54
|
+
| Feature →<br>↓ Interpolant Method | Regular<br>Grid | Rectilinear<br>Grid | Json<br>Serialization |
|
|
55
|
+
|-----------------------------------|-----------------|---------------------|-----------------------|
|
|
56
|
+
| Linear | ✅ | ✅ | ✅ |
|
|
57
|
+
| Cubic | ✅ | ✅ | ✅ |
|
|
58
|
+
|
|
59
|
+
The methods provided here, while more limited in scope than scipy's,
|
|
60
|
+
|
|
61
|
+
* are significantly faster under most conditions
|
|
62
|
+
* use almost no RAM (and perform no heap allocations at all)
|
|
63
|
+
* produce significantly improved floating-point error (by several orders of magnitude)
|
|
64
|
+
* are json-serializable using Pydantic
|
|
65
|
+
* can also be used easily in web and embedded applications via the Rust library
|
|
66
|
+
* are permissively licensed
|
|
67
|
+
|
|
68
|
+

|
|
69
|
+
|
|
70
|
+
See [here](https://interpnpy.readthedocs.io/en/latest/perf/) for more info about quality-of-fit, throughput, and memory usage.
|
|
71
|
+
|
|
72
|
+
## Installation
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
pip install interpn
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Profile-Guided Optimization
|
|
79
|
+
|
|
80
|
+
To build the extension with profile-guided optimization using pre-built profiles, do `sh ./scripts/pgo_install.sh`.
|
|
81
|
+
You can also generate your own PGO profiles like `sh ./scripts/pgo_profile.sh`.
|
|
82
|
+
after installing these extra compiler dependencies:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
rustup component add llvm-tools-preview
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Rust Examples
|
|
89
|
+
|
|
90
|
+
### Regular Grid
|
|
91
|
+
```rust
|
|
92
|
+
use interpn::{multilinear, multicubic};
|
|
93
|
+
|
|
94
|
+
// Define a grid
|
|
95
|
+
let x = [1.0_f64, 2.0, 3.0, 4.0];
|
|
96
|
+
let y = [0.0_f64, 1.0, 2.0, 3.0];
|
|
97
|
+
|
|
98
|
+
// Grid input for rectilinear method
|
|
99
|
+
let grids = &[&x[..], &y[..]];
|
|
100
|
+
|
|
101
|
+
// Grid input for regular grid method
|
|
102
|
+
let dims = [x.len(), y.len()];
|
|
103
|
+
let starts = [x[0], y[0]];
|
|
104
|
+
let steps = [x[1] - x[0], y[1] - y[0]];
|
|
105
|
+
|
|
106
|
+
// Values at grid points
|
|
107
|
+
let z = [2.0; 16];
|
|
108
|
+
|
|
109
|
+
// Observation points to interpolate/extrapolate
|
|
110
|
+
let xobs = [0.0_f64, 5.0];
|
|
111
|
+
let yobs = [-1.0, 3.0];
|
|
112
|
+
let obs = [&xobs[..], &yobs[..]];
|
|
113
|
+
|
|
114
|
+
// Storage for output
|
|
115
|
+
let mut out = [0.0; 2];
|
|
116
|
+
|
|
117
|
+
// Do interpolation
|
|
118
|
+
multilinear::regular::interpn(&dims, &starts, &steps, &z, &obs, &mut out);
|
|
119
|
+
multicubic::regular::interpn(&dims, &starts, &steps, &z, false, &obs, &mut out);
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Rectilinear Grid
|
|
123
|
+
```rust
|
|
124
|
+
use interpn::{multilinear, multicubic};
|
|
125
|
+
|
|
126
|
+
// Define a grid
|
|
127
|
+
let x = [1.0_f64, 2.0, 3.0, 4.0];
|
|
128
|
+
let y = [0.0_f64, 1.0, 2.0, 3.0];
|
|
129
|
+
|
|
130
|
+
// Grid input for rectilinear method
|
|
131
|
+
let grids = &[&x[..], &y[..]];
|
|
132
|
+
|
|
133
|
+
// Values at grid points
|
|
134
|
+
let z = [2.0; 16];
|
|
135
|
+
|
|
136
|
+
// Points to interpolate/extrapolate
|
|
137
|
+
let xobs = [0.0_f64, 5.0];
|
|
138
|
+
let yobs = [-1.0, 3.0];
|
|
139
|
+
let obs = [&xobs[..], &yobs[..]];
|
|
140
|
+
|
|
141
|
+
// Storage for output
|
|
142
|
+
let mut out = [0.0; 2];
|
|
143
|
+
|
|
144
|
+
// Do interpolation
|
|
145
|
+
multilinear::rectilinear::interpn(grids, &z, &obs, &mut out).unwrap();
|
|
146
|
+
multicubic::rectilinear::interpn(grids, &z, false, &obs, &mut out).unwrap();
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Python Examples
|
|
150
|
+
|
|
151
|
+
### Available Methods
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
import interpn
|
|
155
|
+
import numpy as np
|
|
156
|
+
|
|
157
|
+
# Build grid
|
|
158
|
+
x = np.linspace(0.0, 10.0, 5)
|
|
159
|
+
y = np.linspace(20.0, 30.0, 4)
|
|
160
|
+
grids = [x, y]
|
|
161
|
+
|
|
162
|
+
xgrid, ygrid = np.meshgrid(x, y, indexing="ij")
|
|
163
|
+
zgrid = (xgrid + 2.0 * ygrid) # Values at grid points
|
|
164
|
+
|
|
165
|
+
# Grid inputs for true regular grid
|
|
166
|
+
dims = [x.size, y.size]
|
|
167
|
+
starts = np.array([x[0], y[0]])
|
|
168
|
+
steps = np.array([x[1] - x[0], y[1] - y[0]])
|
|
169
|
+
|
|
170
|
+
# Initialize different interpolators
|
|
171
|
+
# Call like `linear_regular.eval([xs, ys])`
|
|
172
|
+
linear_regular = interpn.MultilinearRegular.new(dims, starts, steps, zgrid)
|
|
173
|
+
cubic_regular = interpn.MulticubicRegular.new(dims, starts, steps, zgrid)
|
|
174
|
+
linear_rectilinear = interpn.MultilinearRectilinear.new(grids, zgrid)
|
|
175
|
+
cubic_rectilinear = interpn.MulticubicRectilinear.new(grids, zgrid)
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Multilinear Interpolation
|
|
179
|
+
|
|
180
|
+
```python
|
|
181
|
+
import interpn
|
|
182
|
+
import numpy as np
|
|
183
|
+
|
|
184
|
+
# Build grid
|
|
185
|
+
x = np.linspace(0.0, 10.0, 5)
|
|
186
|
+
y = np.linspace(20.0, 30.0, 4)
|
|
187
|
+
|
|
188
|
+
xgrid, ygrid = np.meshgrid(x, y, indexing="ij")
|
|
189
|
+
zgrid = (xgrid + 2.0 * ygrid) # Values at grid points
|
|
190
|
+
|
|
191
|
+
# Grid inputs for true regular grid
|
|
192
|
+
dims = [x.size, y.size]
|
|
193
|
+
starts = np.array([x[0], y[0]])
|
|
194
|
+
steps = np.array([x[1] - x[0], y[1] - y[0]])
|
|
195
|
+
|
|
196
|
+
# Observation points pointed back at the grid
|
|
197
|
+
obs = [xgrid.flatten(), ygrid.flatten()]
|
|
198
|
+
|
|
199
|
+
# Initialize
|
|
200
|
+
interpolator = interpn.MultilinearRegular.new(dims, starts, steps, zgrid.flatten())
|
|
201
|
+
|
|
202
|
+
# Interpolate
|
|
203
|
+
out = interpolator.eval(obs)
|
|
204
|
+
|
|
205
|
+
# Check result
|
|
206
|
+
assert np.allclose(out, zgrid.flatten(), rtol=1e-13)
|
|
207
|
+
|
|
208
|
+
# Serialize and deserialize
|
|
209
|
+
roundtrip_interpolator = interpn.MultilinearRegular.model_validate_json(
|
|
210
|
+
interpolator.model_dump_json()
|
|
211
|
+
)
|
|
212
|
+
out2 = roundtrip_interpolator.eval(obs)
|
|
213
|
+
|
|
214
|
+
# Check result from roundtrip serialized/deserialized interpolator
|
|
215
|
+
assert np.all(out == out2)
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
# License
|
|
220
|
+
|
|
221
|
+
Licensed under either of
|
|
222
|
+
|
|
223
|
+
- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
|
|
224
|
+
- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
|
|
225
|
+
|
|
226
|
+
at your option.
|
|
227
|
+
|
|
@@ -4,12 +4,13 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "interpn"
|
|
7
|
-
version = "0.6.
|
|
8
|
-
repository = "https://github.com/jlogan03/interpn"
|
|
9
|
-
documentation = "https://interpn.readthedocs.io/"
|
|
7
|
+
version = "0.6.3"
|
|
10
8
|
description = "N-dimensional interpolation/extrapolation methods"
|
|
11
9
|
authors = [{ name = "James Logan", email = "jlogan03@gmail.com" }]
|
|
12
|
-
|
|
10
|
+
readme = "README.md"
|
|
11
|
+
license = "MIT OR Apache-2.0"
|
|
12
|
+
license-files = ["LICENSE-MIT", "LICENSE-APACHE"]
|
|
13
|
+
requires-python = ">=3.9"
|
|
13
14
|
classifiers = [
|
|
14
15
|
"Programming Language :: Rust",
|
|
15
16
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
@@ -17,9 +18,13 @@ classifiers = [
|
|
|
17
18
|
]
|
|
18
19
|
dependencies = [
|
|
19
20
|
"numpy >= 2",
|
|
20
|
-
"pydantic >= 2.
|
|
21
|
+
"pydantic >= 2.12",
|
|
21
22
|
]
|
|
22
23
|
|
|
24
|
+
[project.urls]
|
|
25
|
+
repository = "https://github.com/jlogan03/interpn"
|
|
26
|
+
documentation = "https://interpn.readthedocs.io/"
|
|
27
|
+
|
|
23
28
|
[project.optional-dependencies]
|
|
24
29
|
test = [
|
|
25
30
|
"pytest >= 8.4.2",
|
|
@@ -71,9 +76,6 @@ include = [
|
|
|
71
76
|
[tool.pytest.ini_options]
|
|
72
77
|
addopts = "--cov=interpn --cov-report html --cov-fail-under=94"
|
|
73
78
|
|
|
74
|
-
[tool.ruff]
|
|
75
|
-
target-version = "py39"
|
|
76
|
-
|
|
77
79
|
[tool.ruff.lint]
|
|
78
80
|
select = [
|
|
79
81
|
# pycodestyle
|