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

◆ module_tensor()

Matrix * Matrix::module_tensor ( const Matrix * m) const

Definition at line 686 of file matrix.cpp.

687{
688 auto R = get_ring();
689 if (R != m->get_ring())
690 {
691 ERROR("module tensor: different base rings");
692 return nullptr;
693 }
694 FreeModule *F = rows()->tensor(m->rows());
695 FreeModule *G = rows()->tensor(m->cols());
696 FreeModule *G1 = m->rows()->tensor(cols());
697 G->direct_sum_to(G1);
698 freemem(G1);
699
700 MatrixConstructor mat(F, G, nullptr);
701
702 int i, j, next = 0;
703
704 for (i = 0; i < n_rows(); i++)
705 for (j = 0; j < m->n_cols(); j++)
706 mat.set_column(next++, R->component_shift(i * m->n_rows(), m->elem(j)));
707
708 for (i = 0; i < m->n_rows(); i++)
709 for (j = 0; j < n_cols(); j++)
710 mat.set_column(next++, R->tensor_shift(m->n_rows(), i, elem(j)));
711 return mat.to_matrix();
712}
FreeModule * tensor(const FreeModule *G) const
Definition freemod.cpp:271
void direct_sum_to(const FreeModule *G)
Definition freemod.cpp:263
friend class FreeModule
Definition matrix.hpp:73
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
int n_rows() const
Definition matrix.hpp:146
const FreeModule * rows() const
Definition matrix.hpp:144
const FreeModule * cols() const
Definition matrix.hpp:145
void freemem(void *s)
Definition m2-mem.cpp:103
const int ERROR
Definition m2-mem.cpp:55
tbb::flow::graph G

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

Referenced by module_tensor(), and rawModuleTensor().