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

◆ lift_up()

void LocalRing::lift_up ( const Ring * R,
const Matrix * m,
Matrix *& result ) const
virtual

Definition at line 227 of file localring.cpp.

228{
229 (void) R;
230 const RingElement *a, *b, *d;
231 MatrixConstructor mat(mRing->make_FreeModule(m->n_rows()), m->n_cols());
232 Matrix::column_iterator i(m), end(m);
233 for (int c = 0; c < m->n_cols(); c++)
234 {
235 // TODO: make this into a routine for vector LCM
236 a = RingElement::make_raw(mRing, mRing->from_long(1));
237 for (i = Matrix::column_iterator(m, c); i != end; ++i)
238 {
239 const local_elem * f = ((*i)->coeff).get_local_elem();
241 d = rawGCDRingElement(a, b, nullptr, false);
242#if 0 // FIXME: GCD(8,2)=1 apparently ...
243 // see https://github.com/Macaulay2/M2/issues/1958
244 drelem(a);
245 std::cout<<" ";
246 drelem(b);
247 std::cout<<" ";
248 drelem(d);
249 std::cout<<std::endl;
250#endif
251 d = *b / *d;
252 a = *a * *d;
253 }
254 for (i = Matrix::column_iterator(m, c); i != end; ++i)
255 {
256 const local_elem * f = ((*i)->coeff).get_local_elem();
257 mat.set_entry(
258 (*i)->comp,
259 c,
260 mRing->mult(f->numer, mRing->divide(a->get_value(), f->denom)));
261 }
262 }
263 mat.compute_column_degrees();
264 result = mat.to_matrix();
265}
const PolyRing * mRing
Definition localring.hpp:69
int n_cols() const
Definition matrix.hpp:147
int n_rows() const
Definition matrix.hpp:146
ring_elem get_value() const
Definition relem.hpp:79
static RingElement * make_raw(const Ring *R, ring_elem f)
Definition relem.cpp:20
void drelem(const RingElement *f)
Definition debug.cpp:59
const RingElement * rawGCDRingElement(const RingElement *f, const RingElement *g, const RingElement *mipo, const M2_bool inExtension)
Definition factory.cpp:488
VALGRIND_MAKE_MEM_DEFINED & result(result)
TermIterator< Nterm > end(Nterm *)
Definition ringelem.cpp:5
ring_elem numer
Definition localring.hpp:48
ring_elem denom
Definition localring.hpp:49

References MatrixConstructor::compute_column_degrees(), local_elem::denom, drelem(), end(), RingElement::get_value(), RingElement::make_raw(), Matrix, mRing, Matrix::n_cols(), Matrix::n_rows(), local_elem::numer, rawGCDRingElement(), result(), Ring::Ring(), MatrixConstructor::set_entry(), and MatrixConstructor::to_matrix().

Referenced by rawLiftLocalMatrix().