MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / af_approx2_common

Function af_approx2_common

src/api/c/approx.cpp:164–240  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

162}
163
164void af_approx2_common(af_array *zo, const af_array zi, const af_array xo,
165 const int xdim, const double xi_beg,
166 const double xi_step, const af_array yo, const int ydim,
167 const double yi_beg, const double yi_step,
168 const af_interp_type method, const float offGrid,
169 bool allocate_zo) {
170 ARG_ASSERT(0, zo != 0); // *zo (the af_array) can be null, but not zo
171 ARG_ASSERT(1, zi != 0);
172 ARG_ASSERT(2, xo != 0);
173 ARG_ASSERT(6, yo != 0);
174
175 const ArrayInfo &zi_info = getInfo(zi);
176 const ArrayInfo &xo_info = getInfo(xo);
177 const ArrayInfo &yo_info = getInfo(yo);
178
179 dim4 zi_dims = zi_info.dims();
180 dim4 xo_dims = xo_info.dims();
181 dim4 yo_dims = yo_info.dims();
182
183 ARG_ASSERT(1, zi_info.isFloating()); // Only floating and complex types
184 ARG_ASSERT(2, xo_info.isRealFloating()); // Only floating types
185 ARG_ASSERT(4, yo_info.isRealFloating()); // Only floating types
186 ARG_ASSERT(2,
187 xo_info.getType() == yo_info.getType()); // Must have same type
188 ARG_ASSERT(1, zi_info.isSingle() ==
189 xo_info.isSingle()); // Must have same precision
190 ARG_ASSERT(1, zi_info.isDouble() ==
191 xo_info.isDouble()); // Must have same precision
192 DIM_ASSERT(2, xo_dims == yo_dims); // POS0 and POS1 must have same dims
193
194 ARG_ASSERT(3, xdim >= 0 && xdim < 4);
195 ARG_ASSERT(5, ydim >= 0 && ydim < 4);
196 ARG_ASSERT(7, xi_step != 0);
197 ARG_ASSERT(9, yi_step != 0);
198
199 // POS should either be (x, y, 1, 1) or (x, y, zi_dims[2], zi_dims[3])
200 if (xo_dims[xdim] * xo_dims[ydim] != xo_dims.elements()) {
201 for (int i = 0; i < 4; i++) {
202 if (xdim != i && ydim != i) {
203 DIM_ASSERT(2, xo_dims[i] == zi_dims[i]);
204 }
205 }
206 }
207
208 if (zi_dims.ndims() == 0 || xo_dims.ndims() == 0 || yo_dims.ndims() == 0) {
209 af_create_handle(zo, 0, nullptr, zi_info.getType());
210 return;
211 }
212
213 dim4 zo_dims = zi_info.dims();
214 zo_dims[xdim] = xo_info.dims()[xdim];
215 zo_dims[ydim] = xo_info.dims()[ydim];
216
217 if (allocate_zo) { *zo = createHandle(zo_dims, zi_info.getType()); }
218
219 DIM_ASSERT(0, getInfo(*zo).dims() == zo_dims);
220
221 switch (zi_info.getType()) {

Callers 4

af_approx2_uniformFunction · 0.85
af_approx2_uniform_v2Function · 0.85
af_approx2Function · 0.85
af_approx2_v2Function · 0.85

Calls 10

isFloatingMethod · 0.80
isRealFloatingMethod · 0.80
isSingleMethod · 0.80
isDoubleMethod · 0.80
af_create_handleFunction · 0.70
createHandleFunction · 0.70
dimsMethod · 0.45
getTypeMethod · 0.45
elementsMethod · 0.45
ndimsMethod · 0.45

Tested by

no test coverage detected