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

◆ remake() [2/2]

const Matrix * Matrix::remake ( const FreeModule * target,
const FreeModule * source,
M2_arrayint deg ) const

Definition at line 228 of file matrix.cpp.

231{
232 if (n_rows() != target->rank() || n_cols() != source->rank())
233 {
234 ERROR("wrong number of rows or columns");
235 return nullptr;
236 }
237 const Ring *R = get_ring();
238 auto D = R->degree_monoid();
239 if (deg->len != D->n_vars())
240 {
241 ERROR("degree for matrix has the wrong length");
242 return nullptr;
243 }
244 const Ring *Rtarget = target->get_ring();
245 const Ring *Rsource = source->get_ring();
246 if (R != Rtarget || Rtarget != Rsource)
247 {
248 ERROR("expected same ring");
249 return nullptr;
250 }
251
252 monomial degshift = D->make_one();
253 D->from_expvector(deg->array, degshift);
254 MatrixConstructor mat(target, source, degshift);
255 for (int i = 0; i < source->rank(); i++)
256 mat.set_column(i, R->copy_vec(mEntries[i]));
257 return mat.to_matrix();
258}
const Ring * get_ring() const
Definition freemod.hpp:102
int rank() const
Definition freemod.hpp:105
const Ring * get_ring() const
Definition matrix.hpp:134
friend class MatrixConstructor
Definition matrix.hpp:76
int n_cols() const
Definition matrix.hpp:147
int n_rows() const
Definition matrix.hpp:146
vec copy_vec(const vecterm *v) const
Definition ring-vecs.cpp:91
const Monoid * degree_monoid() const
Definition ring.cpp:13
#define monomial
Definition gb-toric.cpp:11
const int ERROR
Definition m2-mem.cpp:55

References Ring::copy_vec(), Ring::degree_monoid(), ERROR, FreeModule, FreeModule::get_ring(), get_ring(), Matrix(), MatrixConstructor, mEntries, monomial, n_cols(), n_rows(), FreeModule::rank(), remake(), MatrixConstructor::set_column(), and MatrixConstructor::to_matrix().

Referenced by IM2_Matrix_remake1(), IM2_Matrix_remake2(), MatrixConstructor, remake(), and remake().