53 void casadi_tensor_ttv(T1* ret, casadi_int dim, casadi_int n_dims,
54 const T1* all_w,
const casadi_int* w_offset,
55 const casadi_int* starts,
const casadi_int* strides,
56 const T1* c, casadi_int m,
57 T1 weight, casadi_int offset) {
61 n_w = w_offset[dim+1] - w_offset[dim];
62 w = all_w + w_offset[dim];
65 const T1* coeff = c + offset + starts[0]*m;
66 for (i = 0; i < n_w; ++i) {
67 T1 ww = weight * w[i];
68 for (j = 0; j < m; ++j)
69 ret[j] += ww * coeff[i*m + j];
73 for (i = 0; i < n_w; ++i) {
74 casadi_tensor_ttv(ret, dim-1, n_dims, all_w, w_offset,
75 starts, strides, c, m,
77 offset + (starts[dim]+i)*strides[dim]);