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

◆ matrix_lift()

M2_bool GaussElimComputation::matrix_lift ( const Matrix * m,
const Matrix ** result_remainder,
const Matrix ** result_quotient )
virtual

Implements GBComputation.

Definition at line 368 of file gauss.cpp.

372{
373 if (m->get_ring() != R)
374 {
375 ERROR("encountered different rings");
376 *result_remainder = nullptr;
377 *result_quotient = nullptr;
378 return false;
379 }
380 if (m->n_rows() != gens->rows()->rank())
381 {
382 ERROR("expected matrices to have same number of rows");
383 *result_remainder = nullptr;
384 *result_quotient = nullptr;
385 return false;
386 }
387 MatrixConstructor mat_remainder(m->rows(), m->cols(), m->degree_shift());
388 MatrixConstructor mat_quotient(Fsyz, m->cols(), nullptr);
389 bool all_zeroes = true;
390 for (int i = 0; i < m->n_cols(); i++)
391 {
392 vec f = R->copy_vec(m->elem(i));
393 vec fsyz = nullptr;
394
395 reduce(f, fsyz);
396 R->negate_vec_to(fsyz);
397 if (f != nullptr) all_zeroes = false;
398 mat_remainder.set_column(i, f);
399 mat_quotient.set_column(i, fsyz);
400 }
401 *result_remainder = mat_remainder.to_matrix();
402 *result_quotient = mat_quotient.to_matrix();
403 return all_zeroes;
404}
const Matrix * gens
Definition gauss.hpp:67
void reduce(gm_elem *&p, gm_elem *q)
Definition gauss.cpp:130
const Ring * R
Definition gauss.hpp:66
const FreeModule * Fsyz
Definition gauss.hpp:68
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
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

References Matrix::cols(), Matrix::degree_shift(), Matrix::elem(), ERROR, Fsyz, gens, Matrix::get_ring(), Matrix, Matrix::n_cols(), Matrix::n_rows(), R, reduce(), Matrix::rows(), MatrixConstructor::set_column(), and MatrixConstructor::to_matrix().