Macaulay2 Engine
Loading...
Searching...
No Matches

◆ tensor()

Matrix * Matrix::tensor ( const Matrix * m) const

Definition at line 780 of file matrix.cpp.

781{
782 auto R = get_ring();
783 if (R != m->get_ring())
784 {
785 ERROR("matrix tensor: different base rings");
786 return nullptr;
787 }
788
789 const FreeModule *F = rows()->tensor(m->rows());
790 const FreeModule *G = cols()->tensor(m->cols());
791
792 auto D = R->degree_monoid();
793 monomial deg = D->make_new(degree_shift());
794 D->mult(deg, m->degree_shift(), deg);
795
796 MatrixConstructor mat(F, G, deg);
797 D->remove(deg);
798 int i, j, next = 0;
799 for (i = 0; i < n_cols(); i++)
800 for (j = 0; j < m->n_cols(); j++)
801 mat.set_column(next++, R->tensor(rows(), elem(i), m->rows(), (*m)[j]));
802 return mat.to_matrix();
803}
FreeModule * tensor(const FreeModule *G) const
Definition freemod.cpp:271
friend class FreeModule
Definition matrix.hpp:73
const_monomial degree_shift() const
Definition matrix.hpp:149
const Ring * get_ring() const
Definition matrix.hpp:134
ring_elem elem(int i, int j) const
Definition matrix.cpp:307
friend class MatrixConstructor
Definition matrix.hpp:76
int n_cols() const
Definition matrix.hpp:147
const FreeModule * rows() const
Definition matrix.hpp:144
const FreeModule * cols() const
Definition matrix.hpp:145
#define monomial
Definition gb-toric.cpp:11
const int ERROR
Definition m2-mem.cpp:55
tbb::flow::graph G

References cols(), degree_shift(), elem(), ERROR, FreeModule, G, get_ring(), Matrix(), MatrixConstructor, monomial, n_cols(), rows(), MatrixConstructor::set_column(), tensor(), and MatrixConstructor::to_matrix().

Referenced by IM2_Matrix_tensor(), and tensor().