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

◆ matrixToStream()

template<typename T>
void matrixToStream ( const Matrix * M,
T & stream )

Definition at line 139 of file matrix-stream.hpp.

140{
141 const Ring* R = M->get_ring();
142 const PolyRing* P = R->cast_to_PolyRing();
143 assert(P != 0);
144 const Ring* KK = P->getCoefficientRing();
145 size_t nvars = P->n_vars();
146 size_t ncols = M->n_cols();
147 int charac = static_cast<int>(P->characteristic());
148 assert(charac > 0);
150 ALLOCATE_EXPONENTS(EXPONENT_BYTE_SIZE(nvars)); // allocated on stack
151 stream.idealBegin(ncols);
152 Matrix::iterator i(M);
153 for (int c = 0; c < ncols; c++)
154 {
155 i.set(c);
156 // We need the length of this column, in number of monomials
157 size_t nterms = 0;
158 for (; i.valid(); i.next())
159 {
160 Nterm* t = i.entry();
161 for ([[maybe_unused]] Nterm& s : t) nterms++;
162 }
163 stream.appendPolynomialBegin(nterms);
164
165 i.set(c);
166 // Now we process each column, sending it to the stream
167 for (; i.valid(); i.next())
168 {
169 Nterm* t = i.entry();
170 for (Nterm& s : t)
171 {
172 P->getMonoid()->to_expvector(s.monom, exp);
173 stream.appendTermBegin(i.row());
174 for (size_t j = 0; j < nvars; j++)
175 if (exp[j] != 0) stream.appendExponent(j, exp[j]);
176 std::pair<bool, long> b = KK->coerceToLongInteger(s.coeff);
177 assert(b.first);
178 int a = static_cast<int>(
179 b.second); // This will fit, as the charac fits into an int
180 if (a < 0) a += charac;
181 stream.appendTermDone(a);
182 }
183 }
184 stream.appendPolynomialDone();
185 }
186 stream.idealDone();
187}
exponents::Exponents exponents_t
const Ring * get_ring() const
Definition matrix.hpp:134
int n_cols() const
Definition matrix.hpp:147
void to_expvector(const_monomial m, exponents_t result_exp) const
Definition monoid.cpp:747
Concrete PolyRingFlat subclass implementing ordinary commutative polynomial rings K[x_1,...
Definition poly.hpp:64
const Ring * getCoefficientRing() const
Definition polyring.hpp:200
virtual const Monoid * getMonoid() const
Definition polyring.hpp:282
int n_vars() const
Definition polyring.hpp:196
virtual std::pair< bool, long > coerceToLongInteger(ring_elem a) const
Definition ring.cpp:236
virtual const PolyRing * cast_to_PolyRing() const
Definition ring.hpp:245
long characteristic() const
Definition ring.hpp:159
xxx xxx xxx
Definition ring.hpp:102
void size_t s
Definition m2-mem.cpp:271
#define ALLOCATE_EXPONENTS(byte_len)
Definition monoid.hpp:62
#define EXPONENT_BYTE_SIZE(nvars)
Definition monoid.hpp:63
const mpreal exp(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2298
Singly linked-list node carrying one term of a polynomial-ring element.
Definition ringelem.hpp:156

References ALLOCATE_EXPONENTS, Ring::cast_to_PolyRing(), Ring::characteristic(), Ring::coerceToLongInteger(), Matrix::iterator::entry(), EXPONENT_BYTE_SIZE, Matrix::get_ring(), PolynomialRing::getCoefficientRing(), PolynomialRing::getMonoid(), Matrix, Matrix::n_cols(), PolynomialRing::n_vars(), Matrix::iterator::next(), Matrix::iterator::row(), s, Matrix::iterator::set(), T, Monoid::to_expvector(), and Matrix::iterator::valid().

Referenced by newf4::GBF4Computation::initializeWithMatrix(), rawDisplayMatrixStream(), and rawMGB().