Skip to content

Commit caced2e

Browse files
committed
fix: update ndarray usage to mark as read-only in grid and test files
1 parent 6bd018d commit caced2e

File tree

2 files changed

+39
-39
lines changed

2 files changed

+39
-39
lines changed

cxx/include/pyinterp/pybind/grid.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,11 +211,11 @@ class Grid {
211211
using math_axis_value_t = typename math_axis_t<I>::value_type;
212212

213213
/// N-dimensional array type.
214-
using array_t = nanobind::ndarray<nanobind::numpy, DataType,
214+
using array_t = nanobind::ndarray<nanobind::numpy, nanobind::ro, DataType,
215215
nanobind::ndim<kNDim>, nanobind::c_contig>;
216216

217217
/// N-dimensional array view type.
218-
using view_t = nanobind::ndarray_view<DataType, kNDim, 'C'>;
218+
using view_t = nanobind::ndarray_view<const DataType, kNDim, 'C'>;
219219

220220
/// Constructor.
221221
/// @param[in] axes Axes of the grid.
@@ -823,7 +823,7 @@ auto grid_factory(detail::pybind_axes_tuple_t<MathAxes...>&& axes,
823823
// Helper to create the grid with the correct DataType
824824
auto create_grid = [&]<typename DataType>() -> GridHolder {
825825
// Cast the Python object to the specific DataType array
826-
using array_t = nanobind::ndarray<nanobind::numpy, DataType,
826+
using array_t = nanobind::ndarray<nanobind::numpy, nanobind::ro, DataType,
827827
nanobind::ndim<sizeof...(MathAxes)>,
828828
nanobind::c_contig>;
829829

cxx/tests/math/interpolate/geometric/multivariate.cpp

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -61,49 +61,49 @@ TEST(GeometryMultivariate, TrivariateLinearCorners) {
6161
// Corner (0,0,0) -> q000 = 1.0
6262
auto result = trivariate(
6363
SpatialPoint3D<Point2D, double>{Point2D<double>{0.0, 0.0}, 0.0}, p0, p1,
64-
data, &bilinear, z_interpolator);
64+
data, bilinear, z_interpolator);
6565
EXPECT_DOUBLE_EQ(result, 1.0);
6666

6767
// Corner (0,1,0) -> q010 = 2.0
6868
result = trivariate(
6969
SpatialPoint3D<Point2D, double>{Point2D<double>{0.0, 1.0}, 0.0}, p0, p1,
70-
data, &bilinear, z_interpolator);
70+
data, bilinear, z_interpolator);
7171
EXPECT_DOUBLE_EQ(result, 2.0);
7272

7373
// Corner (1,0,0) -> q100 = 3.0
7474
result = trivariate(
7575
SpatialPoint3D<Point2D, double>{Point2D<double>{1.0, 0.0}, 0.0}, p0, p1,
76-
data, &bilinear, z_interpolator);
76+
data, bilinear, z_interpolator);
7777
EXPECT_DOUBLE_EQ(result, 3.0);
7878

7979
// Corner (1,1,0) -> q110 = 4.0
8080
result = trivariate(
8181
SpatialPoint3D<Point2D, double>{Point2D<double>{1.0, 1.0}, 0.0}, p0, p1,
82-
data, &bilinear, z_interpolator);
82+
data, bilinear, z_interpolator);
8383
EXPECT_DOUBLE_EQ(result, 4.0);
8484

8585
// Corner (0,0,1) -> q001 = 5.0
8686
result = trivariate(
8787
SpatialPoint3D<Point2D, double>{Point2D<double>{0.0, 0.0}, 1.0}, p0, p1,
88-
data, &bilinear, z_interpolator);
88+
data, bilinear, z_interpolator);
8989
EXPECT_DOUBLE_EQ(result, 5.0);
9090

9191
// Corner (0,1,1) -> q011 = 6.0
9292
result = trivariate(
9393
SpatialPoint3D<Point2D, double>{Point2D<double>{0.0, 1.0}, 1.0}, p0, p1,
94-
data, &bilinear, z_interpolator);
94+
data, bilinear, z_interpolator);
9595
EXPECT_DOUBLE_EQ(result, 6.0);
9696

9797
// Corner (1,0,1) -> q101 = 7.0
9898
result = trivariate(
9999
SpatialPoint3D<Point2D, double>{Point2D<double>{1.0, 0.0}, 1.0}, p0, p1,
100-
data, &bilinear, z_interpolator);
100+
data, bilinear, z_interpolator);
101101
EXPECT_DOUBLE_EQ(result, 7.0);
102102

103103
// Corner (1,1,1) -> q111 = 8.0
104104
result = trivariate(
105105
SpatialPoint3D<Point2D, double>{Point2D<double>{1.0, 1.0}, 1.0}, p0, p1,
106-
data, &bilinear, z_interpolator);
106+
data, bilinear, z_interpolator);
107107
EXPECT_DOUBLE_EQ(result, 8.0);
108108
}
109109

@@ -121,7 +121,7 @@ TEST(GeometryMultivariate, TrivariateLinearCenter) {
121121

122122
auto result = trivariate(
123123
SpatialPoint3D<Point2D, double>{Point2D<double>{0.5, 0.5}, 0.5}, p0, p1,
124-
data, &bilinear, z_interpolator);
124+
data, bilinear, z_interpolator);
125125

126126
// Center should be the average: (1+2+3+4+5+6+7+8)/8 = 4.5
127127
EXPECT_DOUBLE_EQ(result, 4.5);
@@ -141,13 +141,13 @@ TEST(GeometryMultivariate, TrivariateLinearMidplanes) {
141141
// Test at (0, 0, 0.5): interpolate between q000 and q001
142142
auto result = trivariate(
143143
SpatialPoint3D<Point2D, double>{Point2D<double>{0.0, 0.0}, 0.5}, p0, p1,
144-
data, &bilinear, z_interpolator);
144+
data, bilinear, z_interpolator);
145145
EXPECT_DOUBLE_EQ(result, 20.0); // (0 + 40) / 2
146146

147147
// Test at (1, 1, 0.5): interpolate between q110 and q111
148148
result = trivariate(
149149
SpatialPoint3D<Point2D, double>{Point2D<double>{1.0, 1.0}, 0.5}, p0, p1,
150-
data, &bilinear, z_interpolator);
150+
data, bilinear, z_interpolator);
151151
EXPECT_DOUBLE_EQ(result, 50.0); // (30 + 70) / 2
152152
}
153153

@@ -165,19 +165,19 @@ TEST(GeometryMultivariate, TrivariateNearestCorners) {
165165
// Point close to (0, 0, 0) -> should return 1.0
166166
auto result = trivariate(
167167
SpatialPoint3D<Point2D, double>{Point2D<double>{0.1, 0.1}, 0.1}, p0, p1,
168-
data, &nearest, z_interpolator);
168+
data, nearest, z_interpolator);
169169
EXPECT_DOUBLE_EQ(result, 1.0);
170170

171171
// Point close to (1, 1, 1) -> should return 8.0
172172
result = trivariate(
173173
SpatialPoint3D<Point2D, double>{Point2D<double>{0.9, 0.9}, 0.9}, p0, p1,
174-
data, &nearest, z_interpolator);
174+
data, nearest, z_interpolator);
175175
EXPECT_DOUBLE_EQ(result, 8.0);
176176

177177
// Point close to (0, 1, 0) -> should return 2.0
178178
result = trivariate(
179179
SpatialPoint3D<Point2D, double>{Point2D<double>{0.1, 0.9}, 0.1}, p0, p1,
180-
data, &nearest, z_interpolator);
180+
data, nearest, z_interpolator);
181181
EXPECT_DOUBLE_EQ(result, 2.0);
182182
}
183183

@@ -197,14 +197,14 @@ TEST(GeometryMultivariate, TrivariateMixedInterpolation) {
197197
// Since z=0.3 is closer to 0 than 1, should return 25
198198
auto result = trivariate(
199199
SpatialPoint3D<Point2D, double>{Point2D<double>{0.5, 0.5}, 0.3}, p0, p1,
200-
data, &bilinear, z_interpolator);
200+
data, bilinear, z_interpolator);
201201
EXPECT_DOUBLE_EQ(result, 25.0);
202202

203203
// At (0.5, 0.5, 0.7): spatial center, z closer to 1
204204
// z=1 plane center: (50+60+70+80)/4 = 65
205205
result = trivariate(
206206
SpatialPoint3D<Point2D, double>{Point2D<double>{0.5, 0.5}, 0.7}, p0, p1,
207-
data, &bilinear, z_interpolator);
207+
data, bilinear, z_interpolator);
208208
EXPECT_DOUBLE_EQ(result, 65.0);
209209
}
210210

@@ -221,7 +221,7 @@ TEST(GeometryMultivariate, TrivariateWithDifferentAxisType) {
221221
// At z=5 (midpoint), spatial (0.5, 0.5)
222222
auto result = trivariate(
223223
SpatialPoint3D<Point2D, double, int>{Point2D<double>{0.5, 0.5}, 5}, p0,
224-
p1, data, &bilinear, z_interpolator);
224+
p1, data, bilinear, z_interpolator);
225225
EXPECT_DOUBLE_EQ(result, 450.0); // Average of all corners
226226
}
227227

@@ -246,31 +246,31 @@ TEST(GeometryMultivariate, QuadrivariateLinearCorners) {
246246
// Test corner (0,0,0,0) -> q0000 = 1.0
247247
auto result = quadrivariate(
248248
SpatialPoint4D<Point2D, double>{Point2D<double>{0.0, 0.0}, 0.0, 0.0}, p0,
249-
p1, data, &bilinear, z_interpolator, u_interpolator);
249+
p1, data, bilinear, z_interpolator, u_interpolator);
250250
EXPECT_DOUBLE_EQ(result, 1.0);
251251

252252
// Test corner (1,1,1,1) -> q1111 = 16.0
253253
result = quadrivariate(
254254
SpatialPoint4D<Point2D, double>{Point2D<double>{1.0, 1.0}, 1.0, 1.0}, p0,
255-
p1, data, &bilinear, z_interpolator, u_interpolator);
255+
p1, data, bilinear, z_interpolator, u_interpolator);
256256
EXPECT_DOUBLE_EQ(result, 16.0);
257257

258258
// Test corner (0,1,0,0) -> q0100 = 2.0
259259
result = quadrivariate(
260260
SpatialPoint4D<Point2D, double>{Point2D<double>{0.0, 1.0}, 0.0, 0.0}, p0,
261-
p1, data, &bilinear, z_interpolator, u_interpolator);
261+
p1, data, bilinear, z_interpolator, u_interpolator);
262262
EXPECT_DOUBLE_EQ(result, 2.0);
263263

264264
// Test corner (1,0,1,0) -> q1010 = 7.0
265265
result = quadrivariate(
266266
SpatialPoint4D<Point2D, double>{Point2D<double>{1.0, 0.0}, 1.0, 0.0}, p0,
267-
p1, data, &bilinear, z_interpolator, u_interpolator);
267+
p1, data, bilinear, z_interpolator, u_interpolator);
268268
EXPECT_DOUBLE_EQ(result, 7.0);
269269

270270
// Test corner (0,0,1,1) -> q0011 = 13.0
271271
result = quadrivariate(
272272
SpatialPoint4D<Point2D, double>{Point2D<double>{0.0, 0.0}, 1.0, 1.0}, p0,
273-
p1, data, &bilinear, z_interpolator, u_interpolator);
273+
p1, data, bilinear, z_interpolator, u_interpolator);
274274
EXPECT_DOUBLE_EQ(result, 13.0);
275275
}
276276

@@ -291,7 +291,7 @@ TEST(GeometryMultivariate, QuadrivariateLinearCenter) {
291291

292292
auto result = quadrivariate(
293293
SpatialPoint4D<Point2D, double>{Point2D<double>{0.5, 0.5}, 0.5, 0.5}, p0,
294-
p1, data, &bilinear, z_interpolator, u_interpolator);
294+
p1, data, bilinear, z_interpolator, u_interpolator);
295295

296296
// Center should be the average: (1+2+...+16)/16 = 8.5
297297
EXPECT_DOUBLE_EQ(result, 8.5);
@@ -315,15 +315,15 @@ TEST(GeometryMultivariate, QuadrivariateFixedU) {
315315
// At u=0, center of spatial and z
316316
auto result = quadrivariate(
317317
SpatialPoint4D<Point2D, double>{Point2D<double>{0.5, 0.5}, 0.5, 0.0}, p0,
318-
p1, data, &bilinear, z_interpolator, u_interpolator);
318+
p1, data, bilinear, z_interpolator, u_interpolator);
319319

320320
// Should be average of first 8 values: (10+20+30+40+50+60+70+80)/8 = 45
321321
EXPECT_DOUBLE_EQ(result, 45.0);
322322

323323
// At u=1, center of spatial and z
324324
result = quadrivariate(
325325
SpatialPoint4D<Point2D, double>{Point2D<double>{0.5, 0.5}, 0.5, 1.0}, p0,
326-
p1, data, &bilinear, z_interpolator, u_interpolator);
326+
p1, data, bilinear, z_interpolator, u_interpolator);
327327

328328
// Should be average of last 8 values: (100+110+120+130+140+150+160+170)/8 =
329329
// 135
@@ -347,19 +347,19 @@ TEST(GeometryMultivariate, QuadrivariateNearestCorner) {
347347
// Point close to (0, 0, 0, 0) -> should return 1.0
348348
auto result = quadrivariate(
349349
SpatialPoint4D<Point2D, double>{Point2D<double>{0.1, 0.1}, 0.1, 0.1}, p0,
350-
p1, data, &nearest, z_interpolator, u_interpolator);
350+
p1, data, nearest, z_interpolator, u_interpolator);
351351
EXPECT_DOUBLE_EQ(result, 1.0);
352352

353353
// Point close to (1, 1, 1, 1) -> should return 16.0
354354
result = quadrivariate(
355355
SpatialPoint4D<Point2D, double>{Point2D<double>{0.9, 0.9}, 0.9, 0.9}, p0,
356-
p1, data, &nearest, z_interpolator, u_interpolator);
356+
p1, data, nearest, z_interpolator, u_interpolator);
357357
EXPECT_DOUBLE_EQ(result, 16.0);
358358

359359
// Point close to (1, 0, 1, 0) -> should return 7.0
360360
result = quadrivariate(
361361
SpatialPoint4D<Point2D, double>{Point2D<double>{0.9, 0.1}, 0.9, 0.1}, p0,
362-
p1, data, &nearest, z_interpolator, u_interpolator);
362+
p1, data, nearest, z_interpolator, u_interpolator);
363363
EXPECT_DOUBLE_EQ(result, 7.0);
364364
}
365365

@@ -382,14 +382,14 @@ TEST(GeometryMultivariate, QuadrivariateMixedInterpolation) {
382382
// u=0: center of spatial+z: (10+20+30+40+50+60+70+80)/8 = 45
383383
auto result = quadrivariate(
384384
SpatialPoint4D<Point2D, double>{Point2D<double>{0.5, 0.5}, 0.5, 0.3}, p0,
385-
p1, data, &bilinear, z_interpolator, u_interpolator);
385+
p1, data, bilinear, z_interpolator, u_interpolator);
386386
EXPECT_DOUBLE_EQ(result, 45.0);
387387

388388
// At (0.5, 0.5, 0.5, 0.7): spatial center, z center, u closer to 1
389389
// u=1: center of spatial+z: (100+110+120+130+140+150+160+170)/8 = 135
390390
result = quadrivariate(
391391
SpatialPoint4D<Point2D, double>{Point2D<double>{0.5, 0.5}, 0.5, 0.7}, p0,
392-
p1, data, &bilinear, z_interpolator, u_interpolator);
392+
p1, data, bilinear, z_interpolator, u_interpolator);
393393
EXPECT_DOUBLE_EQ(result, 135.0);
394394
}
395395

@@ -413,7 +413,7 @@ TEST(GeometryMultivariate, QuadrivariateWithDifferentAxisTypes) {
413413
auto result = quadrivariate(
414414
SpatialPoint4D<Point2D, double, int, float>{Point2D<double>{0.5, 0.5}, 5,
415415
0.5f},
416-
p0, p1, data, &bilinear, z_interpolator, u_interpolator);
416+
p0, p1, data, bilinear, z_interpolator, u_interpolator);
417417

418418
// Should be average of all 16 values: (0+10+...+150)/16 = 75
419419
EXPECT_DOUBLE_EQ(result, 75.0);
@@ -437,7 +437,7 @@ TEST(GeometryMultivariate, QuadrivariateAsymmetricValues) {
437437
// Test at (1.0, 1.0, 1.0, 1.0) - exact center
438438
auto result = quadrivariate(
439439
SpatialPoint4D<Point2D, double>{Point2D<double>{1.0, 1.0}, 1.0, 1.0}, p0,
440-
p1, data, &bilinear, z_interpolator, u_interpolator);
440+
p1, data, bilinear, z_interpolator, u_interpolator);
441441

442442
double expected =
443443
(1.0 + 5.0 + 10.0 + 20.0 + 30.0 + 40.0 + 50.0 + 60.0 + 100.0 + 110.0 +
@@ -526,7 +526,7 @@ TEST(GeometryMultivariate, TrivariateAllSameValues) {
526526

527527
auto result = trivariate(
528528
SpatialPoint3D<Point2D, double>{Point2D<double>{0.3, 0.7}, 0.5}, p0, p1,
529-
data, &bilinear, z_interpolator);
529+
data, bilinear, z_interpolator);
530530
EXPECT_DOUBLE_EQ(result, 42.0);
531531
}
532532

@@ -546,7 +546,7 @@ TEST(GeometryMultivariate, QuadrivariateAllSameValues) {
546546

547547
auto result = quadrivariate(
548548
SpatialPoint4D<Point2D, double>{Point2D<double>{0.3, 0.7}, 0.5, 0.8}, p0,
549-
p1, data, &bilinear, z_interpolator, u_interpolator);
549+
p1, data, bilinear, z_interpolator, u_interpolator);
550550
EXPECT_DOUBLE_EQ(result, 99.0);
551551
}
552552

@@ -564,7 +564,7 @@ TEST(GeometryMultivariate, TrivariateWithIDW) {
564564
// At corner (exact match), should return corner value
565565
auto result = trivariate(
566566
SpatialPoint3D<Point2D, double>{Point2D<double>{0.0, 0.0}, 0.5}, p0, p1,
567-
data, &idw, z_interpolator);
567+
data, idw, z_interpolator);
568568
EXPECT_DOUBLE_EQ(result, 20.0); // Interpolate between q000=0 and q001=40
569569
}
570570

@@ -586,7 +586,7 @@ TEST(GeometryMultivariate, QuadrivariateWithIDW) {
586586
// At spatial corner (exact match), should return interpolated along z and u
587587
auto result = quadrivariate(
588588
SpatialPoint4D<Point2D, double>{Point2D<double>{0.0, 0.0}, 0.5, 0.5}, p0,
589-
p1, data, &idw, z_interpolator, u_interpolator);
589+
p1, data, idw, z_interpolator, u_interpolator);
590590

591591
// At (0,0): z0_u0=0, z1_u0=40, z0_u1=80, z1_u1=120
592592
// At z=0.5: u0=(0+40)/2=20, u1=(80+120)/2=100

0 commit comments

Comments
 (0)