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

◆ createF4GB()

GBComputation * createF4GB ( const Matrix * m,
M2_bool collect_syz,
int n_rows_to_keep,
M2_arrayint gb_weights,
int strategy,
M2_bool use_max_degree,
int max_degree,
int numThreads )

Definition at line 25 of file f4-computation.cpp.

33{
35 if (R == nullptr)
36 {
37 ERROR("internal error: expected a polynomial ring for `Algorithm => LinearAlgebra` groebner basis");
38 return nullptr;
39 }
40 const Ring *K = R->getCoefficients();
41
42 // TODO: code here used to detect whether R, K is a valid ring here
43 if (not R->is_commutative_ring())
44 {
45 ERROR("expected commutative polynomial ring for `Algorithm => LinearAlgebra` groebner basis");
46 return nullptr;
47 }
48 if (R->is_quotient_ring())
49 {
50 ERROR("can't use quotient polynomial rings with `Algorithm => LinearAlgebra` groebner basis");
51 return nullptr;
52 }
53 if (not m->is_homogeneous())
54 {
55 ERROR("expected homogeneous input for `Algorithm => LinearAlgebra` groebner basis");
56 return nullptr;
57 }
58 if (not K->isFinitePrimeField() and not K->isGaloisField())
59 {
60 ERROR("expected coefficient ring to be a finite field for `Algorithm => LinearAlgebra` groebner basis");
61 return nullptr;
62 }
63 auto vectorArithmetic = new VectorArithmetic(K);
64
65 return new F4Computation(vectorArithmetic,
66 m,
67 collect_syz,
68 n_rows_to_keep,
69 gb_weights,
70 strategy,
71 use_max_degree,
72 max_degree,
73 numThreads);
74}
GBComputation subclass that drives an F4GB engine instance from the engine-side computation API.
const Ring * get_ring() const
Definition matrix.hpp:134
bool is_homogeneous() const
Definition matrix.cpp:332
virtual bool is_commutative_ring() const
Definition polyring.hpp:242
bool is_quotient_ring() const
Definition polyring.hpp:235
virtual const Ring * getCoefficients() const
Definition polyring.hpp:277
Abstract base for the engine's polynomial-ring hierarchy.
Definition polyring.hpp:96
virtual bool isGaloisField() const
Definition ring.hpp:170
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
virtual bool isFinitePrimeField() const
Definition ring.hpp:169
xxx xxx xxx
Definition ring.hpp:102
Runtime dispatcher that hides the concrete coefficient ring behind a std::variant of ConcreteVectorAr...
const int ERROR
Definition m2-mem.cpp:55

References Ring::cast_to_PolynomialRing(), ERROR, Matrix::get_ring(), Ring::is_commutative_ring(), Matrix::is_homogeneous(), Ring::is_quotient_ring(), Ring::isFinitePrimeField(), Ring::isGaloisField(), Matrix, and RingElement::R.

Referenced by GBComputation::choose_gb().