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

◆ reduce()

Matrix * gbres_comp::reduce ( const Matrix * m,
Matrix *& lift )

Definition at line 239 of file res-a2.cpp.

240{
241 const FreeModule *F = nodes[0]->output_free_module();
242 if (m->n_rows() != F->rank())
243 {
244 ERROR("expected matrices to have same number of rows");
245 return nullptr;
246 }
247 MatrixConstructor mat_red(m->rows(), m->cols(), m->degree_shift());
248 MatrixConstructor mat_lift(nodes[1]->output_free_module(), m->cols(), nullptr);
249
250 for (int i = 0; i < m->n_cols(); i++)
251 {
252 const FreeModule *Fsyz = nodes[1]->output_free_module();
253
254 ring_elem denom;
255 gbvector *f = originalR->translate_gbvector_from_vec(F, (*m)[i], denom);
256 gbvector *fsyz = GR->gbvector_zero();
257
258 nodes[1]->reduce(f, fsyz);
259
260 vec fv = originalR->translate_gbvector_to_vec_denom(F, f, denom);
261 GR->get_flattened_coefficients()->negate_to(denom);
262 vec fsyzv = originalR->translate_gbvector_to_vec_denom(Fsyz, fsyz, denom);
263 mat_red.set_column(i, fv);
264 mat_lift.set_column(i, fsyzv);
265 }
266 lift = mat_lift.to_matrix();
267 return mat_red.to_matrix();
268}
int rank() const
Definition freemod.hpp:105
const_monomial degree_shift() const
Definition matrix.hpp:149
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
gb_node ** nodes
Definition res-a2.hpp:254
const PolynomialRing * originalR
Definition res-a2.hpp:250
GBRing * GR
Definition res-a2.hpp:252
const int ERROR
Definition m2-mem.cpp:55

References Matrix::cols(), Matrix::degree_shift(), ERROR, GR, Matrix, Matrix::n_cols(), Matrix::n_rows(), nodes, originalR, FreeModule::rank(), Matrix::rows(), MatrixConstructor::set_column(), and MatrixConstructor::to_matrix().