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

◆ direct_sum()

Matrix * Matrix::direct_sum ( const Matrix * m) const

const_monomial deg; if (EQ == R->degree_monoid()->compare(degree_shift(), m->degree_shift())) deg = degree_shift(); else deg = nullptr;

Definition at line 629 of file matrix.cpp.

630{
631 auto R = get_ring();
632 if (R != m->get_ring())
633 {
634 ERROR("concat: different base rings");
635 return nullptr;
636 }
637
638 // direct_sum ignores the degree shift of each summand.
644
645 const FreeModule *F = rows()->direct_sum(m->rows());
646 const FreeModule *G = cols()->direct_sum(m->cols());
647
648 MatrixConstructor mat(F, G, nullptr);
649
650 int i;
651 int nr = n_rows();
652 int nc = n_cols();
653 for (i = 0; i < nc; i++) mat.set_column(i, R->copy_vec(elem(i)));
654 for (i = 0; i < m->n_cols(); i++)
655 mat.set_column(nc + i, R->component_shift(nr, m->elem(i)));
656 return mat.to_matrix();
657}
FreeModule * direct_sum(const FreeModule *G) const
Definition freemod.cpp:244
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
const int ERROR
Definition m2-mem.cpp:55
tbb::flow::graph G

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

Referenced by direct_sum().