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

◆ CheckMatrix()

bool BIBasis::Launcher::CheckMatrix ( const Matrix * matrix) const
private

Definition at line 50 of file launcher.cpp.

51 {
52 if (!matrix)
53 {
54 ERROR("BIBasis::CheckMatrix(): no input matrix.");
55 return false;
56 }
57
58 const Ring* matrixRing = matrix->get_ring();
59 if (!matrixRing)
60 {
61 ERROR("BIBasis::CheckMatrix(): failed to get input matrix ring.");
62 return false;
63 }
64
65 if (matrixRing->characteristic() != 2)
66 {
67 ERROR("BIBasis::CheckMatrix(): input matrix ring is not ZZ/2.");
68 return false;
69 }
70
71 const PolynomialRing* polynomialRing = matrixRing->cast_to_PolynomialRing();
72 if (!polynomialRing)
73 {
74 ERROR("BIBasis::CheckMatrix(): failed to cast matrix ring to polynomial ring.");
75 return false;
76 }
77
78 const Ring* coefficientRing = polynomialRing->getCoefficientRing();
79 if (!coefficientRing)
80 {
81 ERROR("BIBasis::CheckMatrix(): failed to get coefficient ring.");
82 return false;
83 }
84
85 if (!coefficientRing->isFinitePrimeField())
86 {
87 ERROR("BIBasis::CheckMatrix(): coefficient ring is not ZZ/2.");
88 return false;
89 }
90
91 const Monoid* monoid = polynomialRing->getMonoid();
92 if (!monoid)
93 {
94 ERROR("BIBasis::CheckMatrix(): failed to get monoid.");
95 return false;
96 }
97
98 const MonomialOrdering* monomialOrdering = monoid->getMonomialOrdering();
99 if (!monomialOrdering)
100 {
101 ERROR("BIBasis::CheckMatrix(): failed to get monomial ordering.");
102 return false;
103 }
104
105 if (!monomialOrdering->array[0])
106 {
107 ERROR("BIBasis::CheckMatrix(): monomial ordering is unknown.");
108 return false;
109 }
110
111 switch(monomialOrdering->array[0]->type)
112 {
113 case MO_LEX:
115 break;
116 case MO_GREVLEX:
118 break;
119 case MO_WEIGHTS:
121 break;
122 default:
123 ERROR("BIBasis::CheckMatrix(): monomial ordering is unsupported: %d.", monomialOrdering->array[0]->type);
124 return false;
125 }
126
128
129 return true;
130 }
short int Integer
Definition monom.hpp:72
void SetMonomialOrder(Monom::Order order)
void SetNumberOfVariables(Monom::Integer numberOfVariables)
const Ring * get_ring() const
Definition matrix.hpp:134
const MonomialOrdering * getMonomialOrdering() const
Definition monoid.hpp:173
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 const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
long characteristic() const
Definition ring.hpp:159
virtual bool isFinitePrimeField() const
Definition ring.hpp:169
const int ERROR
Definition m2-mem.cpp:55
@ MO_LEX
@ MO_GREVLEX
@ MO_WEIGHTS
SettingsManager & GetSettingsManager()

References MonomialOrdering::array, Ring::cast_to_PolynomialRing(), Ring::characteristic(), BIBasis::Monom::DegLex, BIBasis::Monom::DegRevLex, ERROR, Matrix::get_ring(), PolynomialRing::getCoefficientRing(), PolynomialRing::getMonoid(), Monoid::getMonomialOrdering(), BIBasis::GetSettingsManager(), Ring::isFinitePrimeField(), BIBasis::Monom::Lex, Matrix, MO_GREVLEX, MO_LEX, MO_WEIGHTS, PolynomialRing::n_vars(), BIBasis::SettingsManager::SetMonomialOrder(), and BIBasis::SettingsManager::SetNumberOfVariables().

Referenced by GetBIBasisMatrix().