Skip to content

Commit 52da825

Browse files
author
peng.li24
committed
feat: update geometry_py.h and base.h; add test_all.py and report.csv
1 parent fa4edf3 commit 52da825

4 files changed

Lines changed: 1332 additions & 24 deletions

File tree

pycpp/geometry_py.h

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,13 @@ inline Point<double> point(const py::array_t<double>& arr) {
113113
const double* p = static_cast<const double*>(buf.ptr);
114114
return Point<double>(buf.size > 0 ? p[0] : 0, buf.size > 1 ? p[1] : 0);
115115
}
116-
inline Point<float> point(const py::array_t<float>& arr) {
116+
// float32 auto-upcast: prevent GEOS precision mismatch vs Python shapely
117+
inline Point<double> point(const py::array_t<float>& arr) {
117118
auto buf = arr.request();
118119
ensure_c_contiguous(buf);
119120
const float* p = static_cast<const float*>(buf.ptr);
120-
return Point<float>(buf.size > 0 ? p[0] : 0, buf.size > 1 ? p[1] : 0);
121+
return Point<double>(buf.size > 0 ? static_cast<double>(p[0]) : 0,
122+
buf.size > 1 ? static_cast<double>(p[1]) : 0);
121123
}
122124
// auto-double: accept any dtype (int, unknown), always produce Point<double>
123125
// Handles 1D [x,y] and 2D (N,≥2) arrays — takes first 2 elements.
@@ -143,10 +145,11 @@ inline LineString<double> linestring(const py::array_t<double>& arr) {
143145
ensure_c_contiguous(buf);
144146
return LineString<double>(static_cast<const double*>(buf.ptr), buf.shape[0], buf.shape[1]);
145147
}
146-
inline LineString<float> linestring(const py::array_t<float>& arr) {
147-
auto buf = arr.request();
148-
ensure_c_contiguous(buf);
149-
return LineString<float>(static_cast<const float*>(buf.ptr), buf.shape[0], buf.shape[1]);
148+
// float32 auto-upcast: prevent GEOS precision mismatch vs Python shapely
149+
inline LineString<double> linestring(const py::array_t<float>& arr) {
150+
py::ssize_t n = arr.request().shape[0];
151+
auto tmp = array_to_double_vec(arr);
152+
return LineString<double>(tmp.data(), static_cast<size_t>(n), 2);
150153
}
151154
inline LineString<double> linestring(const py::array& arr) {
152155
py::ssize_t n = arr.request().shape[0];
@@ -173,10 +176,11 @@ inline Polygon<double> polygon(const py::array_t<double>& arr) {
173176
ensure_c_contiguous(buf);
174177
return Polygon<double>(static_cast<const double*>(buf.ptr), buf.shape[0], buf.shape[1]);
175178
}
176-
inline Polygon<float> polygon(const py::array_t<float>& arr) {
177-
auto buf = arr.request();
178-
ensure_c_contiguous(buf);
179-
return Polygon<float>(static_cast<const float*>(buf.ptr), buf.shape[0], buf.shape[1]);
179+
// float32 auto-upcast: prevent GEOS precision mismatch vs Python shapely
180+
inline Polygon<double> polygon(const py::array_t<float>& arr) {
181+
py::ssize_t n = arr.request().shape[0];
182+
auto tmp = array_to_double_vec(arr);
183+
return Polygon<double>(tmp.data(), static_cast<size_t>(n), 2);
180184
}
181185
inline Polygon<double> polygon(const py::array& arr) {
182186
py::ssize_t n = arr.request().shape[0];
@@ -202,10 +206,11 @@ inline MultiPoint<double> multipoint(const py::array_t<double>& arr) {
202206
ensure_c_contiguous(buf);
203207
return MultiPoint<double>(static_cast<const double*>(buf.ptr), buf.shape[0], buf.shape[1]);
204208
}
205-
inline MultiPoint<float> multipoint(const py::array_t<float>& arr) {
206-
auto buf = arr.request();
207-
ensure_c_contiguous(buf);
208-
return MultiPoint<float>(static_cast<const float*>(buf.ptr), buf.shape[0], buf.shape[1]);
209+
// float32 auto-upcast: prevent GEOS precision mismatch vs Python shapely
210+
inline MultiPoint<double> multipoint(const py::array_t<float>& arr) {
211+
py::ssize_t n = arr.request().shape[0];
212+
auto tmp = array_to_double_vec(arr);
213+
return MultiPoint<double>(tmp.data(), static_cast<size_t>(n), 2);
209214
}
210215
inline MultiPoint<double> multipoint(const py::array& arr) {
211216
py::ssize_t n = arr.request().shape[0];
@@ -223,12 +228,13 @@ inline MultiLineString<double> multilinestring(const std::vector<py::array_t<dou
223228
}
224229
return mls;
225230
}
226-
inline MultiLineString<float> multilinestring(const std::vector<py::array_t<float>>& arrays) {
227-
MultiLineString<float> mls;
231+
// float32 auto-upcast: prevent GEOS precision mismatch vs Python shapely
232+
inline MultiLineString<double> multilinestring(const std::vector<py::array_t<float>>& arrays) {
233+
MultiLineString<double> mls;
228234
for (auto& arr : arrays) {
229-
auto buf = arr.request();
230-
ensure_c_contiguous(buf);
231-
mls.add_line(static_cast<const float*>(buf.ptr), buf.shape[0], buf.shape[1]);
235+
py::ssize_t n = arr.request().shape[0];
236+
auto tmp = array_to_double_vec(arr);
237+
mls.add_line(tmp.data(), static_cast<size_t>(n), 2);
232238
}
233239
return mls;
234240
}
@@ -252,12 +258,13 @@ inline MultiPolygon<double> multipolygon(const std::vector<py::array_t<double>>&
252258
}
253259
return mp;
254260
}
255-
inline MultiPolygon<float> multipolygon(const std::vector<py::array_t<float>>& arrays) {
256-
MultiPolygon<float> mp;
261+
// float32 auto-upcast: prevent GEOS precision mismatch vs Python shapely
262+
inline MultiPolygon<double> multipolygon(const std::vector<py::array_t<float>>& arrays) {
263+
MultiPolygon<double> mp;
257264
for (auto& arr : arrays) {
258-
auto buf = arr.request();
259-
ensure_c_contiguous(buf);
260-
mp.add_polygon(static_cast<const float*>(buf.ptr), buf.shape[0], buf.shape[1]);
265+
py::ssize_t n = arr.request().shape[0];
266+
auto tmp = array_to_double_vec(arr);
267+
mp.add_polygon(tmp.data(), static_cast<size_t>(n), 2);
261268
}
262269
return mp;
263270
}

shapely/geometry/base.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ namespace detail {
4040
inline std::string geos_to_wkt(const geos::geom::Geometry* g) {
4141
if (!g || g->isEmpty()) return "GEOMETRYCOLLECTION EMPTY";
4242
geos::io::WKTWriter writer;
43+
writer.setTrim(true); // match Python shapely's default trimmed output
44+
writer.setOutputDimension(2); // drop Z if present, match shapely 2D default
4345
return writer.write(g);
4446
}
4547

tests/report.csv

Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
category,api,mode,dtype,feature,result,ulp
2+
factories,point,unknown,f64,origin,PASS,0
3+
factories,point,unknown,f64,pi,PASS,0
4+
factories,point,unknown,f64,large,PASS,0
5+
factories,point,unknown,f64,neg,PASS,0
6+
factories,linestring,unknown,f64,h,PASS,0
7+
factories,linestring,unknown,f64,v,PASS,0
8+
factories,linestring,unknown,f64,d,PASS,0
9+
factories,linestring,unknown,f64,3pt,PASS,0
10+
factories,linestring,unknown,f64,n3,PASS,0
11+
factories,polygon,unknown,f64,sq,PASS,0
12+
factories,polygon,unknown,f64,tri,PASS,0
13+
factories,linearring,unknown,f64,sq,PASS,0
14+
factories,linearring,unknown,f64,tri,PASS,0
15+
factories,multipoint,unknown,f64,3pt,PASS,0
16+
factories,multilinestring,unknown,f64,2lines,PASS,0
17+
factories,multipolygon,unknown,f64,2sq,PASS,0
18+
accessors,class.pt.area,unknown,f64,origin,PASS,0
19+
accessors,class.pt.length,unknown,f64,origin,PASS,0
20+
accessors,class.pt.bounds,unknown,f64,origin,PASS,0
21+
accessors,class.pt.coords,unknown,f64,origin,PASS,0
22+
accessors,class.pt.is_empty,unknown,f64,origin,PASS,0
23+
accessors,class.pt.is_simple,unknown,f64,origin,PASS,0
24+
accessors,class.pt.is_valid,unknown,f64,origin,PASS,0
25+
accessors,class.pt.has_z,unknown,f64,origin,PASS,0
26+
accessors,class.pt.wkt,unknown,f64,origin,PASS,0
27+
accessors,class.pt.wkb_hex,unknown,f64,origin,PASS,0
28+
accessors,class.pt.geom_type,unknown,f64,origin,PASS,0
29+
accessors,class.pt.type,unknown,f64,origin,PASS,0
30+
accessors,class.pt.area,unknown,f64,pi,PASS,0
31+
accessors,class.pt.length,unknown,f64,pi,PASS,0
32+
accessors,class.pt.bounds,unknown,f64,pi,PASS,0
33+
accessors,class.pt.coords,unknown,f64,pi,PASS,0
34+
accessors,class.pt.is_empty,unknown,f64,pi,PASS,0
35+
accessors,class.pt.is_simple,unknown,f64,pi,PASS,0
36+
accessors,class.pt.is_valid,unknown,f64,pi,PASS,0
37+
accessors,class.pt.has_z,unknown,f64,pi,PASS,0
38+
accessors,class.pt.wkt,unknown,f64,pi,PASS,0
39+
accessors,class.pt.wkb_hex,unknown,f64,pi,PASS,0
40+
accessors,class.pt.geom_type,unknown,f64,pi,PASS,0
41+
accessors,class.pt.type,unknown,f64,pi,PASS,0
42+
accessors,class.pt.area,unknown,f64,large,PASS,0
43+
accessors,class.pt.length,unknown,f64,large,PASS,0
44+
accessors,class.pt.bounds,unknown,f64,large,PASS,0
45+
accessors,class.pt.coords,unknown,f64,large,PASS,0
46+
accessors,class.pt.is_empty,unknown,f64,large,PASS,0
47+
accessors,class.pt.is_simple,unknown,f64,large,PASS,0
48+
accessors,class.pt.is_valid,unknown,f64,large,PASS,0
49+
accessors,class.pt.has_z,unknown,f64,large,PASS,0
50+
accessors,class.pt.wkt,unknown,f64,large,PASS,0
51+
accessors,class.pt.wkb_hex,unknown,f64,large,PASS,0
52+
accessors,class.pt.geom_type,unknown,f64,large,PASS,0
53+
accessors,class.pt.type,unknown,f64,large,PASS,0
54+
accessors,class.ls.area,unknown,f64,h,PASS,0
55+
accessors,class.ls.length,unknown,f64,h,PASS,0
56+
accessors,class.ls.bounds,unknown,f64,h,PASS,0
57+
accessors,class.ls.coords,unknown,f64,h,PASS,0
58+
accessors,class.ls.is_empty,unknown,f64,h,PASS,0
59+
accessors,class.ls.is_simple,unknown,f64,h,PASS,0
60+
accessors,class.ls.is_valid,unknown,f64,h,PASS,0
61+
accessors,class.ls.has_z,unknown,f64,h,PASS,0
62+
accessors,class.ls.is_closed,unknown,f64,h,PASS,0
63+
accessors,class.ls.is_ring,unknown,f64,h,PASS,0
64+
accessors,class.ls.wkt,unknown,f64,h,PASS,0
65+
accessors,class.ls.wkb_hex,unknown,f64,h,PASS,0
66+
accessors,class.ls.geom_type,unknown,f64,h,PASS,0
67+
accessors,class.ls.type,unknown,f64,h,PASS,0
68+
accessors,class.ls.area,unknown,f64,v,PASS,0
69+
accessors,class.ls.length,unknown,f64,v,PASS,0
70+
accessors,class.ls.bounds,unknown,f64,v,PASS,0
71+
accessors,class.ls.coords,unknown,f64,v,PASS,0
72+
accessors,class.ls.is_empty,unknown,f64,v,PASS,0
73+
accessors,class.ls.is_simple,unknown,f64,v,PASS,0
74+
accessors,class.ls.is_valid,unknown,f64,v,PASS,0
75+
accessors,class.ls.has_z,unknown,f64,v,PASS,0
76+
accessors,class.ls.is_closed,unknown,f64,v,PASS,0
77+
accessors,class.ls.is_ring,unknown,f64,v,PASS,0
78+
accessors,class.ls.wkt,unknown,f64,v,PASS,0
79+
accessors,class.ls.wkb_hex,unknown,f64,v,PASS,0
80+
accessors,class.ls.geom_type,unknown,f64,v,PASS,0
81+
accessors,class.ls.type,unknown,f64,v,PASS,0
82+
accessors,class.ls.area,unknown,f64,3pt,PASS,0
83+
accessors,class.ls.length,unknown,f64,3pt,PASS,0
84+
accessors,class.ls.bounds,unknown,f64,3pt,PASS,0
85+
accessors,class.ls.coords,unknown,f64,3pt,PASS,0
86+
accessors,class.ls.is_empty,unknown,f64,3pt,PASS,0
87+
accessors,class.ls.is_simple,unknown,f64,3pt,PASS,0
88+
accessors,class.ls.is_valid,unknown,f64,3pt,PASS,0
89+
accessors,class.ls.has_z,unknown,f64,3pt,PASS,0
90+
accessors,class.ls.is_closed,unknown,f64,3pt,PASS,0
91+
accessors,class.ls.is_ring,unknown,f64,3pt,PASS,0
92+
accessors,class.ls.wkt,unknown,f64,3pt,PASS,0
93+
accessors,class.ls.wkb_hex,unknown,f64,3pt,PASS,0
94+
accessors,class.ls.geom_type,unknown,f64,3pt,PASS,0
95+
accessors,class.ls.type,unknown,f64,3pt,PASS,0
96+
accessors,class.poly.area,unknown,f64,sq,PASS,0
97+
accessors,class.poly.length,unknown,f64,sq,PASS,0
98+
accessors,class.poly.bounds,unknown,f64,sq,PASS,0
99+
accessors,class.poly.coords,unknown,f64,sq,PASS,0
100+
accessors,class.poly.is_empty,unknown,f64,sq,PASS,0
101+
accessors,class.poly.is_simple,unknown,f64,sq,PASS,0
102+
accessors,class.poly.is_valid,unknown,f64,sq,PASS,0
103+
accessors,class.poly.has_z,unknown,f64,sq,PASS,0
104+
accessors,class.poly.wkt,unknown,f64,sq,PASS,0
105+
accessors,class.poly.wkb_hex,unknown,f64,sq,PASS,0
106+
accessors,class.poly.geom_type,unknown,f64,sq,PASS,0
107+
accessors,class.poly.type,unknown,f64,sq,PASS,0
108+
accessors,class.poly.area,unknown,f64,tri,PASS,0
109+
accessors,class.poly.length,unknown,f64,tri,PASS,0
110+
accessors,class.poly.bounds,unknown,f64,tri,PASS,0
111+
accessors,class.poly.coords,unknown,f64,tri,PASS,0
112+
accessors,class.poly.is_empty,unknown,f64,tri,PASS,0
113+
accessors,class.poly.is_simple,unknown,f64,tri,PASS,0
114+
accessors,class.poly.is_valid,unknown,f64,tri,PASS,0
115+
accessors,class.poly.has_z,unknown,f64,tri,PASS,0
116+
accessors,class.poly.wkt,unknown,f64,tri,PASS,0
117+
accessors,class.poly.wkb_hex,unknown,f64,tri,PASS,0
118+
accessors,class.poly.geom_type,unknown,f64,tri,PASS,0
119+
accessors,class.poly.type,unknown,f64,tri,PASS,0
120+
accessors,class.ring.area,unknown,f64,sq,PASS,0
121+
accessors,class.ring.length,unknown,f64,sq,PASS,0
122+
accessors,class.ring.bounds,unknown,f64,sq,PASS,0
123+
accessors,class.ring.coords,unknown,f64,sq,PASS,0
124+
accessors,class.ring.is_empty,unknown,f64,sq,PASS,0
125+
accessors,class.ring.is_simple,unknown,f64,sq,PASS,0
126+
accessors,class.ring.is_valid,unknown,f64,sq,PASS,0
127+
accessors,class.ring.has_z,unknown,f64,sq,PASS,0
128+
accessors,class.ring.is_closed,unknown,f64,sq,PASS,0
129+
accessors,class.ring.is_ring,unknown,f64,sq,PASS,0
130+
accessors,class.ring.is_ccw,unknown,f64,sq,PASS,0
131+
accessors,class.ring.wkt,unknown,f64,sq,PASS,0
132+
accessors,class.ring.wkb_hex,unknown,f64,sq,PASS,0
133+
accessors,class.ring.geom_type,unknown,f64,sq,PASS,0
134+
accessors,class.ring.type,unknown,f64,sq,PASS,0
135+
accessors,class.ring.area,unknown,f64,tri,PASS,0
136+
accessors,class.ring.length,unknown,f64,tri,PASS,0
137+
accessors,class.ring.bounds,unknown,f64,tri,PASS,0
138+
accessors,class.ring.coords,unknown,f64,tri,PASS,0
139+
accessors,class.ring.is_empty,unknown,f64,tri,PASS,0
140+
accessors,class.ring.is_simple,unknown,f64,tri,PASS,0
141+
accessors,class.ring.is_valid,unknown,f64,tri,PASS,0
142+
accessors,class.ring.has_z,unknown,f64,tri,PASS,0
143+
accessors,class.ring.is_closed,unknown,f64,tri,PASS,0
144+
accessors,class.ring.is_ring,unknown,f64,tri,PASS,0
145+
accessors,class.ring.is_ccw,unknown,f64,tri,PASS,0
146+
accessors,class.ring.wkt,unknown,f64,tri,PASS,0
147+
accessors,class.ring.wkb_hex,unknown,f64,tri,PASS,0
148+
accessors,class.ring.geom_type,unknown,f64,tri,PASS,0
149+
accessors,class.ring.type,unknown,f64,tri,PASS,0
150+
distance,class.pt.distance,unknown,f64,3-4-5,PASS,0
151+
distance,class.pt.distance,unknown,f64,zero,PASS,0
152+
distance,class.pt.distance,unknown,f64,5.0,PASS,0
153+
distance,class.ls.distance,unknown,f64,parallel,PASS,0
154+
distance,class.ls.distance,unknown,f64,crossing,PASS,0
155+
distance,class.poly.distance,unknown,f64,disjoint,PASS,0
156+
distance,class.poly.distance,unknown,f64,overlap,PASS,0
157+
distance,distance_point_linestring,unknown,f64,near_v,PASS,0
158+
distance,distance_point_linestring,unknown,f64,disjoint,PASS,0
159+
distance,distance_point_linestring,unknown,f64,on_line,PASS,0
160+
distance,distance_point_polygon,unknown,f64,inside,PASS,0
161+
distance,distance_point_polygon,unknown,f64,outside,PASS,0
162+
distance,distance_point_polygon,unknown,f64,on_edge,PASS,0
163+
distance,distance_linestring_polygon,unknown,f64,touch,PASS,0
164+
distance,distance_linestring_polygon,unknown,f64,outside,PASS,0
165+
distance,distance_linestring_polygon,unknown,f64,cross,PASS,0
166+
distance,distance_polygon_linestring,unknown,f64,touch_rev,PASS,0
167+
predicates,pt_contains_pt,unknown,f64,same,PASS,0
168+
predicates,pt_within_pt,unknown,f64,diff,PASS,0
169+
predicates,pt_disjoint_pt,unknown,f64,same,PASS,0
170+
predicates,pt_touches_pt,unknown,f64,same,PASS,0
171+
predicates,pt_intersects_pt,unknown,f64,diff,PASS,0
172+
predicates,pt_equals_pt,unknown,f64,same,PASS,0
173+
predicates,pt_covers_pt,unknown,f64,same,PASS,0
174+
predicates,pt_crosses_pt,unknown,f64,diff,PASS,0
175+
predicates,pt_overlaps_pt,unknown,f64,diff,PASS,0
176+
predicates,pt_hausdorff_distance_pt,unknown,f64,3-4-5,PASS,0
177+
predicates,pt_within_poly,unknown,f64,inside,PASS,0
178+
predicates,pt_disjoint_poly,unknown,f64,outside,PASS,0
179+
predicates,pt_touches_poly,unknown,f64,edge,PASS,0
180+
predicates,pt_intersects_poly,unknown,f64,inside,PASS,0
181+
predicates,pt_intersects_poly,unknown,f64,outside,PASS,0
182+
predicates,pt_contains_poly,unknown,f64,inside_pt,PASS,0
183+
predicates,pt_covers_poly,unknown,f64,inside_tri,PASS,0
184+
predicates,pt_within_ls,unknown,f64,on,PASS,0
185+
predicates,pt_disjoint_ls,unknown,f64,off,PASS,0
186+
predicates,pt_intersects_ls,unknown,f64,on,PASS,0
187+
predicates,ls_contains_pt,unknown,f64,on,PASS,0
188+
predicates,ls_intersects_pt,unknown,f64,on,PASS,0
189+
predicates,ls_disjoint_pt,unknown,f64,off,PASS,0
190+
predicates,ls_crosses_ls,unknown,f64,cross,PASS,0
191+
predicates,ls_disjoint_ls,unknown,f64,parallel,PASS,0
192+
predicates,ls_intersects_ls,unknown,f64,cross,PASS,0
193+
predicates,ls_intersects_poly,unknown,f64,cross,PASS,0
194+
predicates,ls_intersects_poly,unknown,f64,outside,PASS,0
195+
predicates,ls_disjoint_poly,unknown,f64,outside,PASS,0
196+
predicates,ls_crosses_poly,unknown,f64,cross,PASS,0
197+
predicates,poly_contains_pt,unknown,f64,inside,PASS,0
198+
predicates,poly_covers_pt,unknown,f64,vertex,PASS,0
199+
predicates,poly_intersects_pt,unknown,f64,inside,PASS,0
200+
predicates,poly_disjoint_pt,unknown,f64,outside,PASS,0
201+
predicates,poly_intersects_ls,unknown,f64,cross,PASS,0
202+
predicates,poly_crosses_ls,unknown,f64,cross,PASS,0
203+
predicates,poly_disjoint_ls,unknown,f64,outside,PASS,0
204+
predicates,poly_overlaps_poly,unknown,f64,overlap,PASS,0
205+
predicates,poly_disjoint_poly,unknown,f64,disjoint,PASS,0
206+
predicates,poly_touches_poly,unknown,f64,overlap,PASS,0
207+
predicates,poly_intersects_poly,unknown,f64,overlap,PASS,0
208+
predicates,poly_intersects_poly,unknown,f64,disjoint,PASS,0
209+
predicates,poly_contains_poly,unknown,f64,contains,PASS,0
210+
predicates,poly_covers_poly,unknown,f64,equal,PASS,0
211+
ops,class.pt.buffer,unknown,f64,pt_r1,PASS,0
212+
ops,class.pt.buffer,unknown,f64,pt_r5,PASS,0
213+
ops,class.pt.buffer,unknown,f64,pt_r0,PASS,0
214+
ops,class.ls.buffer,unknown,f64,ls_r1,PASS,0
215+
ops,class.ls.buffer,unknown,f64,ls_r0,PASS,0
216+
ops,class.poly.buffer,unknown,f64,poly_r2,PASS,0
217+
ops,class.poly.buffer,unknown,f64,poly_r0,PASS,0
218+
ops,intersects_polygon_polygon,unknown,f64,overlap,PASS,0
219+
ops,intersects_polygon_polygon,unknown,f64,disjoint,PASS,0
220+
ops,intersects_polygon_polygon,unknown,f64,contains,PASS,0
221+
ops,intersects_linestring_polygon,unknown,f64,cross,PASS,0
222+
ops,intersects_linestring_polygon,unknown,f64,outside,PASS,0
223+
ops,intersects_polygon_linestring,unknown,f64,cross_rev,PASS,0
224+
ops,project_linestring_point,unknown,f64,h_mid_above,PASS,0
225+
ops,project_linestring_point,unknown,f64,v_mid_right,PASS,0
226+
ops,project_linestring_point,unknown,f64,h_start,PASS,0
227+
ops,project_linestring_point,unknown,f64,h_end,PASS,0
228+
ops,interpolate_linestring,unknown,f64,h_mid,PASS,0
229+
ops,interpolate_linestring,unknown,f64,v_mid,PASS,0
230+
ops,interpolate_linestring,unknown,f64,h_start,PASS,0
231+
ops,interpolate_linestring,unknown,f64,h_end,PASS,0
232+
ops,interpolate_linestring,unknown,f64,v3pt,PASS,0
233+
ops,centroid_point,unknown,f64,3-4,PASS,0
234+
ops,centroid_point,unknown,f64,neg,PASS,0
235+
ops,centroid_linestring,unknown,f64,d,PASS,0
236+
ops,centroid_linestring,unknown,f64,v,PASS,0
237+
ops,centroid_polygon,unknown,f64,sq,PASS,0
238+
ops,centroid_polygon,unknown,f64,tri,PASS,0
239+
ops,intersection_area_polygon_polygon,unknown,f64,overlap,PASS,0
240+
ops,intersection_area_polygon_polygon,unknown,f64,disjoint,PASS,0
241+
ops,polygon_exterior,unknown,f64,sq,PASS,0
242+
ops,polygon_exterior,unknown,f64,tri,PASS,0
243+
ops,nearest_points,unknown,f64,poly_ls_touch,PASS,0
244+
ops,nearest_points,unknown,f64,poly_ls_near,PASS,0
245+
ops,nearest_points_ls_pt,unknown,f64,ls_pt_above,PASS,0
246+
ops,nearest_points_ls_pt,unknown,f64,ls_pt_endpoint,PASS,0

0 commit comments

Comments
 (0)