#ifndef INCLUDE_GUARD_MLM_H #define INCLUDE_GUARD_MLM_H /** * Multi Linear Multiplication * * C = alpha A x_modes[0] op(Bs[0]) ... x_modes[nrhs] op(Bs[nrhs]) + beta C * * @param trans boolean vector of length `nrhs` indicating if `i`th RHS matrix * is to be transposed. That is `op(Bs[i])` is the transposed of `Bs[i]` iff * `trans[i]` is true, otherwise no-op on `Bs[i]`. Can be `NULL`, then `op` is * always the identity. * @param modes integer vector of length `nrhs` specifying the product modes. * * @todo TODO: continue doc. !!! * * @param alpha scaling factor * @param beta scaling factor * @param C output memory addr. * * @param work_mem NULL or temporary working memory of size * `2 * prod(pmax(dim(A), dim(C))) + ord` */ int mlm( /* options */ const int* trans, const int* modes, const int nrhs, /* dims */ const int* dimA, const int* dimC, const int ord, /* scalars */ const double alpha, /* tensor */ const double* A, /* matrices */ const double** Bs, const int* ldBs, /* scalar */ const double beta, /* tensor */ double* C, double* work_mem ); #endif /* INCLUDE_GUARD_MLM_H */