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

◆ IM2_Ring_quotient()

const Ring * IM2_Ring_quotient ( const Ring * R,
const Matrix * I )

Definition at line 388 of file ring.cpp.

389{
390 try
391 {
392 if (I->get_ring() != R)
393 {
394 ERROR("expected matrix to be over the same ring");
395 }
396 if (I->n_rows() != 1)
397 {
398 ERROR("expected a one row matrix of quotient elements");
399 return nullptr;
400 }
402 if (P != nullptr)
403 {
406 return result;
407 }
408 const M2FreeAlgebra *A = R->cast_to_M2FreeAlgebra();
409 if (A != nullptr)
410 {
411 auto result = M2FreeAlgebraQuotient::create(*A, I, -1);
412 return result;
413 }
414 ERROR("expected a polynomial ring or free algebra");
415 return nullptr;
416 } catch (const exc::engine_error& e)
417 {
418 ERROR(e.what());
419 return nullptr;
420 }
421}
Concrete Ring wrapper around an owned FreeAlgebra (no quotient).
static M2FreeAlgebraQuotient * create(const M2FreeAlgebra &F, const Matrix *GB, int maxdeg)
const Ring * get_ring() const
Definition matrix.hpp:134
int n_rows() const
Definition matrix.hpp:146
static PolynomialRing * create_quotient(const PolynomialRing *R, VECTOR(Nterm *) &elems)
Definition polyring.cpp:79
Abstract base for the engine's polynomial-ring hierarchy.
Definition polyring.hpp:96
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
virtual const M2FreeAlgebra * cast_to_M2FreeAlgebra() const
Definition ring.hpp:256
void intern_polyring(const PolynomialRing *G)
Definition finalize.cpp:81
const int ERROR
Definition m2-mem.cpp:55
VALGRIND_MAKE_MEM_DEFINED & result(result)

References Ring::cast_to_M2FreeAlgebra(), Ring::cast_to_PolynomialRing(), M2FreeAlgebraQuotient::create(), PolynomialRing::create_quotient(), ERROR, Matrix::get_ring(), intern_polyring(), Matrix, Matrix::n_rows(), and result().