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

Function af_approx1_common

src/api/c/approx.cpp:48–114  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

46}
47
48void af_approx1_common(af_array *yo, const af_array yi, const af_array xo,
49 const int xdim, const double xi_beg,
50 const double xi_step, const af_interp_type method,
51 const float offGrid, const bool allocate_yo) {
52 ARG_ASSERT(0, yo != 0); // *yo (the af_array) can be null, but not yo
53 ARG_ASSERT(1, yi != 0);
54 ARG_ASSERT(2, xo != 0);
55
56 const ArrayInfo &yi_info = getInfo(yi);
57 const ArrayInfo &xo_info = getInfo(xo);
58
59 const dim4 &yi_dims = yi_info.dims();
60 const dim4 &xo_dims = xo_info.dims();
61 dim4 yo_dims = yi_dims;
62 yo_dims[xdim] = xo_dims[xdim];
63
64 ARG_ASSERT(1, yi_info.isFloating()); // Only floating and complex types
65 ARG_ASSERT(2, xo_info.isRealFloating()); // Only floating types
66 ARG_ASSERT(1, yi_info.isSingle() ==
67 xo_info.isSingle()); // Must have same precision
68 ARG_ASSERT(1, yi_info.isDouble() ==
69 xo_info.isDouble()); // Must have same precision
70 ARG_ASSERT(3, xdim >= 0 && xdim < 4);
71
72 // POS should either be (x, 1, 1, 1) or (1, yi_dims[1], yi_dims[2],
73 // yi_dims[3])
74 if (xo_dims[xdim] != xo_dims.elements()) {
75 for (int i = 0; i < 4; i++) {
76 if (xdim != i) { DIM_ASSERT(2, xo_dims[i] == yi_dims[i]); }
77 }
78 }
79
80 ARG_ASSERT(5, xi_step != 0);
81 ARG_ASSERT(
82 6, (method == AF_INTERP_CUBIC || method == AF_INTERP_CUBIC_SPLINE ||
83 method == AF_INTERP_LINEAR || method == AF_INTERP_LINEAR_COSINE ||
84 method == AF_INTERP_LOWER || method == AF_INTERP_NEAREST));
85
86 if (yi_dims.ndims() == 0 || xo_dims.ndims() == 0) {
87 af_create_handle(yo, 0, nullptr, yi_info.getType());
88 return;
89 }
90
91 if (allocate_yo) { *yo = createHandle(yo_dims, yi_info.getType()); }
92
93 DIM_ASSERT(0, getInfo(*yo).dims() == yo_dims);
94
95 switch (yi_info.getType()) {
96 case f32:
97 approx1<float, float>(yo, yi, xo, xdim, xi_beg, xi_step, method,
98 offGrid);
99 break;
100 case f64:
101 approx1<double, double>(yo, yi, xo, xdim, xi_beg, xi_step, method,
102 offGrid);
103 break;
104 case c32:
105 approx1<cfloat, float>(yo, yi, xo, xdim, xi_beg, xi_step, method,

Callers 4

af_approx1_uniformFunction · 0.85
af_approx1_uniform_v2Function · 0.85
af_approx1Function · 0.85
af_approx1_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
elementsMethod · 0.45
ndimsMethod · 0.45
getTypeMethod · 0.45

Tested by

no test coverage detected