 |
My Project
UNKNOWN_GIT_VERSION
|
Go to the documentation of this file.
29 #include "factory/factory.h"
51 #define STICKYPROT(msg) if (BTEST1(OPT_PROT)) Print(msg)
52 #define PROT2(msg,arg)
53 #define STICKYPROT2(msg,arg) if (BTEST1(OPT_PROT)) Print(msg,arg)
54 #define fglmASSERT(ignore1,ignore2)
92 void map( ring source );
127 for ( row= colp->
size-1, elemp= colp->
elems; row >= 0; row--, elemp++ )
159 for ( var= 0; var <
_nfunc; var ++ ) {
160 for ( col= 0, colp=
func[var]; col <
_size; col++, colp++ ) {
162 for ( row= colp->
size-1, elemp= colp->
elems; row >= 0;
167 elemp->
elem= newelem;
171 temp[ perm[var+1]-1 ]=
func[var];
194 fglmASSERT( 0 < divisors[0] && divisors[0] <=
_nfunc,
"wrong number of divisors" );
200 for (
k= divisors[0];
k > 0;
k-- ) {
215 fglmASSERT( 0 < divisors[0] && divisors[0] <=
_nfunc,
"wrong number of divisors" );
221 if ( numElems > 0 ) {
223 for (
k= 1,
l= 1, elemp= elems;
k <= numElems;
k++, elemp++ ) {
232 for (
k= divisors[0];
k > 0;
k-- ) {
235 colp->
size= numElems;
250 int vsize =
v.size();
253 for (
k= 1, colp=
func[var-1];
k <= vsize;
k++, colp++ ) {
256 for (
l= colp->
size-1, elemp= colp->
elems;
l >= 0;
l--, elemp++ ) {
258 number newelem=
nAdd(
result.getconstelem( elemp->
row ), temp );
277 for (
k= 1, colp=
func[var-1];
k <=
_size;
k++, colp++ ) {
280 for (
l= colp->
size-1, elemp= colp->
elems;
l >= 0;
l--, elemp++ ) {
282 number newelem=
nAdd(
result.getconstelem( elemp->
row ), temp );
309 #ifndef HAVE_EXPLICIT_CONSTR
396 #ifndef HAVE_EXPLICIT_CONSTR
411 #ifndef HAVE_EXPLICIT_CONSTR
447 #ifndef HAVE_EXPLICIT_CONSTR
460 #ifndef HAVE_EXPLICIT_CONSTR
486 poly newmonom =
NULL;
496 while ( list.
hasItem() && (!done) )
550 while (
m !=
NULL ) {
553 fglmASSERT(
num > 0,
"Error(1) in fglmSdata::getVectorRep" );
643 l.insertCols( candidate.
divisors, basis );
650 fglmASSERT( var > 0,
"this should never happen" );
658 l.endofConstruction();
679 return ( data.
state() );
692 return ( data.
state() );
731 #ifndef HAVE_EXPLICIT_CONSTR
740 #ifndef HAVE_EXPLICIT_CONSTR
741 void insertElem(
const fglmVector newv,
const fglmVector newp, number & newpdenom, number & newfac )
801 #ifndef HAVE_EXPLICIT_CONSTR
829 #ifndef HAVE_EXPLICIT_CONSTR
868 number
pivot=
v.getconstelem(
k );
885 #ifndef HAVE_EXPLICIT_CONSTR
896 poly newmonom =
NULL;
906 while ( list.
hasItem() && (!done) )
964 if ( !
nIsZero(
p.getconstelem(
k ) ) ) {
986 fglmASSERT( pdenom ==
NULL,
"pdenom in gaussreduce should be NULL" );
988 number vdenom =
v.clearDenom();
990 p.setelem(
p.size(), vdenom );
995 number
gcd =
v.gcd();
1006 if ( !
v.elemIsZero(
perm[
k] ) ) {
1009 v.nihilate( fac1, fac2,
gauss[
k].
v );
1011 temp=
nMult( fac2, pdenom );
1014 p.nihilate( fac1, fac2,
gauss[
k].
p );
1021 number
gcd =
v.gcd();
1061 if ( iv.isZero() ) {
1072 number nOne =
nInit( 1 );
1088 number pdenom =
NULL;
1148 number
gcd=
p.gcd();
1157 for (
k=
p.size();
k > 0;
k-- )
1159 number n =
nCopy(
p.getconstelem(
k ) );
1184 v=
l.multiply(
v,
i );
1206 if ( deleteIdeal ==
TRUE )
1209 if ( fglmok ==
TRUE )
1211 L.
map( sourceRing );
1214 if ( (switchBack) && (
currRing != initialRing) )
1220 fglmquot( ideal sourceIdeal, poly quot, ideal & destIdeal)
1230 if ( fglmok ==
TRUE ) {
1244 if ( fglmok ==
TRUE ) {
#define pDivisibleBy(a, b)
returns TRUE, if leading monom of a divides leading monom of b i.e., if there exists a expvector c > ...
fglmDelem nextCandidate()
fglmDelem(poly &m, fglmVector mv, int v)
The new basis.
void newGroebnerPoly(fglmVector &v, poly &p)
bool isZero(const CFArray &A)
checks if entries of A are zero
void pNorm(poly p, const ring R=currRing)
#define idDelete(H)
delete an ideal
void rChangeCurrRing(ring r)
BOOLEAN reduce(fglmVector v)
#define pGetExp(p, i)
Exponent.
void pEnlargeSet(poly **p, int l, int increment)
void newBorderElem(poly &m, fglmVector v)
#define STICKYPROT2(msg, arg)
borderElem(poly p, fglmVector n)
fglmSelem(poly p, int var)
Compatiblity layer for legacy polynomial operations (over currRing)
void newBasisElem(poly &m, fglmVector v, fglmVector p, number &denom)
fglmVector getVectorRep(const poly m)
fglmVector multiply(const fglmVector v, int var) const
void updateCandidates(poly m, const fglmVector v)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
static short rVar(const ring r)
#define rVar(r) (r->N)
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
void setelem(int i, number &n)
void internalCalculateFunctionals(const ideal, idealFunctionals &l, fglmSdata &data)
#define omFreeSize(addr, size)
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
int numNonZeroElems() const
fglmSdata(const ideal thisIdeal)
poly getSpanPoly(int number) const
oldGaussElem(const fglmVector newv, const fglmVector newp, number &newpdenom, number &newfac)
int newBasisElem(poly &p)
bool pivot(const matrix aMat, const int r1, const int r2, const int c1, const int c2, int *bestR, int *bestC, const ring R)
This code computes a score for each non-zero matrix entry in aMat[r1..r2, c1..c2].
void gaussreduce(fglmVector &v, fglmVector &p, number &denom)
void insertCols(int *divisors, int to)
static ideal FindUnivariatePolys(const idealFunctionals &l)
BOOLEAN fglmquot(ideal sourceIdeal, poly quot, ideal &destIdeal)
BOOLEAN isBasisOrEdge() const
int getEdgeNumber(const poly m) const
fglmVector getBorderDiv(const poly m, int &var) const
fglmVector getDependence()
#define pSetCoeff(p, n)
deletes old coeff before setting the new one
BOOLEAN dimension(leftv res, leftv args)
#define fglmASSERT(ignore1, ignore2)
fglmVector addCols(const int var, int basisSize, const fglmVector v) const
idealFunctionals(int blockSize, int numFuncs)
BOOLEAN FindUnivariateWrapper(ideal source, ideal &destIdeal)
ideal idInit(int idsize, int rank)
initialise an ideal / module
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
void maFindPerm(char const *const *const preim_names, int preim_n, char const *const *const preim_par, int preim_p, char const *const *const names, int n, char const *const *const par, int nop, int *perm, int *par_perm, n_coeffType ch)
number getconstelem(int i) const
static FORCE_INLINE number n_SubringGcd(number a, number b, const coeffs r)
static ideal GroebnerViaFunctionals(const idealFunctionals &l, fglmVector iv=fglmVector())
const Variable & v
< [in] a sqrfree bivariate poly
BOOLEAN isBasisOrEdge() const
static BOOLEAN CalculateFunctionals(const ideal &theIdeal, idealFunctionals &l)
fglmSelem nextCandidate()
BOOLEAN candidatesLeft() const
#define pCopy(p)
return a copy of the poly
static FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
int comp(const CanonicalForm &A, const CanonicalForm &B)
compare polynomials
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
matHeader * grow(int var)
BOOLEAN fglmzero(ring sourceRing, ideal &sourceIdeal, ring destRing, ideal &destIdeal, BOOLEAN switchBack, BOOLEAN deleteIdeal)
static intvec * idSort(ideal id, BOOLEAN nolex=TRUE)
#define pCmp(p1, p2)
pCmp: args may be NULL returns: (p2==NULL ? 1 : (p1 == NULL ? -1 : p_LmCmp(p1, p2)))
BOOLEAN candidatesLeft() const
#define omReallocSize(addr, o_size, size)
#define idMaxIdeal(D)
initialise the maximal ideal (at 0)