My Project
Loading...
Searching...
No Matches
kInline.h File Reference
#include "omalloc/omalloc.h"
#include "misc/options.h"
#include "polys/monomials/p_polys.h"
#include "polys/kbuckets.h"
#include "kernel/polys.h"
#include "polys/shiftop.h"

Go to the source code of this file.

Macros

#define HAVE_TAIL_BIN

Functions

KINLINE TSet initT ()
KINLINE TObject ** initR ()
KINLINE unsigned long * initsevT ()
KINLINE poly k_LmInit_currRing_2_tailRing (poly p, ring tailRing, omBin tailBin)
KINLINE poly k_LmInit_tailRing_2_currRing (poly t_p, ring tailRing, omBin lmBin)
KINLINE poly k_LmShallowCopyDelete_currRing_2_tailRing (poly p, ring tailRing, omBin tailBin)
KINLINE poly k_LmShallowCopyDelete_tailRing_2_currRing (poly p, ring tailRing, omBin lmBin)
KINLINE poly k_LmInit_currRing_2_tailRing (poly p, ring tailRing)
KINLINE poly k_LmInit_tailRing_2_currRing (poly p, ring tailRing)
KINLINE poly k_LmShallowCopyDelete_currRing_2_tailRing (poly p, ring tailRing)
KINLINE poly k_LmShallowCopyDelete_tailRing_2_currRing (poly p, ring tailRing)
KINLINE BOOLEAN k_GetLeadTerms (const poly p1, const poly p2, const ring p_r, poly &m1, poly &m2, const ring m_r)
KINLINE void k_GetStrongLeadTerms (const poly p1, const poly p2, const ring leadRing, poly &m1, poly &m2, poly &lcm, const ring tailRing)
KINLINE int ksReducePolyTailLC_Z (LObject *PR, TObject *PW, LObject *Red)
KINLINE int ksReducePolyTail_Z (LObject *PR, TObject *PW, LObject *Red)
KINLINE int ksReducePolyTail (LObject *PR, TObject *PW, LObject *Red)
KINLINE poly ksOldSpolyRed (poly p1, poly p2, poly spNoether)
KINLINE poly ksOldSpolyRedNew (poly p1, poly p2, poly spNoether)
KINLINE poly ksOldCreateSpoly (poly p1, poly p2, poly spNoether, ring r)
void ksOldSpolyTail (poly p1, poly q, poly q2, poly spNoether, ring r)
KINLINE poly redtailBba (poly p, int pos, kStrategy strat, BOOLEAN normalize)
KINLINE poly redtailBbaBound (poly p, int pos, kStrategy strat, int bound, BOOLEAN normalize)
KINLINE poly redtailBba_Ring (poly p, int pos, kStrategy strat)
KINLINE poly redtailBba_Z (poly p, int pos, kStrategy strat)
KINLINE void clearS (poly p, unsigned long p_sev, int *at, int *k, kStrategy strat)
KINLINE BOOLEAN arriRewDummy (poly, unsigned long, poly, kStrategy, int)

Macro Definition Documentation

◆ HAVE_TAIL_BIN

#define HAVE_TAIL_BIN

Definition at line 32 of file kInline.h.

Function Documentation

◆ arriRewDummy()

KINLINE BOOLEAN arriRewDummy ( poly sig,
unsigned long not_sevSig,
poly lm,
kStrategy strat,
int start )

Definition at line 1258 of file kInline.h.

1259{
1260 return FALSE;
1261}
#define FALSE
Definition auxiliary.h:97

◆ clearS()

KINLINE void clearS ( poly p,
unsigned long p_sev,
int * at,
int * k,
kStrategy strat )

Definition at line 1235 of file kInline.h.

1237{
1238 assume(p_sev == pGetShortExpVector(p));
1239 if (strat->noClearS) return;
1241 {
1242 if (!pLmShortDivisibleBy(p,p_sev, strat->S[*at], ~ strat->sevS[*at]))
1243 return;
1244 if(!n_DivBy(pGetCoeff(strat->S[*at]), pGetCoeff(p), currRing->cf))
1245 return;
1246 }
1247 else
1248 {
1249 if (!pLmShortDivisibleBy(p,p_sev, strat->S[*at], ~ strat->sevS[*at])) return;
1250 }
1251 deleteInS((*at),strat);
1252 (*at)--;
1253 (*k)--;
1254}
int p
Definition cfModGcd.cc:4086
polyset S
Definition kutil.h:305
char noClearS
Definition kutil.h:399
unsigned long * sevS
Definition kutil.h:321
static FORCE_INLINE BOOLEAN n_DivBy(number a, number b, const coeffs r)
test whether 'a' is divisible 'b'; for r encoding a field: TRUE iff 'b' does not represent zero in Z:...
Definition coeffs.h:747
void deleteInS(int i, kStrategy strat)
Definition kutil.cc:1132
#define assume(x)
Definition mod2.h:389
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
Definition monomials.h:44
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition polys.cc:13
#define pLmShortDivisibleBy(a, sev_a, b, not_sev_b)
Divisibility tests based on Short Exponent vectors sev_a == pGetShortExpVector(a) not_sev_b == ~ pGet...
Definition polys.h:147
#define pGetShortExpVector(a)
returns the "Short Exponent Vector" – used to speed up divisibility tests (see polys-impl....
Definition polys.h:153
#define rField_is_Ring(R)
Definition ring.h:491

◆ initR()

KINLINE TObject ** initR ( )

Definition at line 95 of file kInline.h.

96{
97 return (TObject**) omAlloc0(setmaxT*sizeof(TObject*));
98}
#define setmaxT
Definition kutil.h:34
class sTObject TObject
Definition kutil.h:58
#define omAlloc0(size)

◆ initsevT()

KINLINE unsigned long * initsevT ( )

Definition at line 100 of file kInline.h.

101{
102 return (unsigned long*) omAlloc0(setmaxT*sizeof(unsigned long));
103}

◆ initT()

KINLINE TSet initT ( )

Definition at line 84 of file kInline.h.

85{
86 TSet T = (TSet)omAlloc0(setmaxT*sizeof(TObject));
87 for (int i=setmaxT-1; i>=0; i--)
88 {
89 T[i].tailRing = currRing;
90 T[i].i_r = -1;
91 }
92 return T;
93}
int i
Definition cfEzgcd.cc:132
STATIC_VAR jList * T
Definition janet.cc:30
TObject * TSet
Definition kutil.h:60

◆ k_GetLeadTerms()

KINLINE BOOLEAN k_GetLeadTerms ( const poly p1,
const poly p2,
const ring p_r,
poly & m1,
poly & m2,
const ring m_r )

Definition at line 1018 of file kInline.h.

1020{
1021 p_LmCheckPolyRing(p1, p_r);
1022 p_LmCheckPolyRing(p2, p_r);
1023
1024 int i;
1025 long x;
1026 m1 = p_Init(m_r,m_r->PolyBin);
1027 m2 = p_Init(m_r,m_r->PolyBin);
1028
1029 for (i = p_r->N; i; i--)
1030 {
1031 x = p_GetExpDiff(p1, p2, i, p_r);
1032 if (x > 0)
1033 {
1034 if (x > (long) m_r->bitmask) goto false_return;
1035 p_SetExp(m2,i,x, m_r);
1036 p_SetExp(m1,i,0, m_r);
1037 }
1038 else
1039 {
1040 if (-x > (long) m_r->bitmask) goto false_return;
1041 p_SetExp(m1,i,-x, m_r);
1042 p_SetExp(m2,i,0, m_r);
1043 }
1044 }
1045
1046 p_Setm(m1, m_r);
1047 p_Setm(m2, m_r);
1048 return TRUE;
1049
1050 false_return:
1051 p_LmFree(m1, m_r);
1052 p_LmFree(m2, m_r);
1053 m1 = m2 = NULL;
1054 return FALSE;
1055}
#define TRUE
Definition auxiliary.h:101
Variable x
Definition cfModGcd.cc:4090
#define NULL
Definition omList.c:12
static long p_GetExpDiff(poly p1, poly p2, int i, ring r)
Definition p_polys.h:637
BOOLEAN p_LmCheckPolyRing(poly p, ring r)
Definition pDebug.cc:123
static unsigned long p_SetExp(poly p, const unsigned long e, const unsigned long iBitmask, const int VarOffset)
set a single variable exponent @Note: VarOffset encodes the position in p->exp
Definition p_polys.h:490
static void p_Setm(poly p, const ring r)
Definition p_polys.h:235
static void p_LmFree(poly p, ring)
Definition p_polys.h:685
static poly p_Init(const ring r, omBin bin)
Definition p_polys.h:1341

◆ k_GetStrongLeadTerms()

KINLINE void k_GetStrongLeadTerms ( const poly p1,
const poly p2,
const ring leadRing,
poly & m1,
poly & m2,
poly & lcm,
const ring tailRing )

Definition at line 1060 of file kInline.h.

1062{
1063 p_LmCheckPolyRing(p1, leadRing);
1064 p_LmCheckPolyRing(p2, leadRing);
1065
1066 int i;
1067 int x;
1068 int e1;
1069 int e2;
1070 int s;
1071 m1 = p_Init(tailRing,tailRing->PolyBin);
1072 m2 = p_Init(tailRing,tailRing->PolyBin);
1073 lcm = p_Init(leadRing,leadRing->PolyBin);
1074
1075 for (i = leadRing->N; i>=0; i--)
1076 {
1077 e1 = p_GetExp(p1,i,leadRing);
1078 e2 = p_GetExp(p2,i,leadRing);
1079 x = e1 - e2;
1080 if (x > 0)
1081 {
1082 p_SetExp(m2,i,x, tailRing);
1083 //p_SetExp(m1,i,0, tailRing); // done by p_Init
1084 s = e1;
1085 }
1086 else if (x<0)
1087 {
1088 p_SetExp(m1,i,-x, tailRing);
1089 //p_SetExp(m2,i,0, tailRing); // done by p_Init
1090 s = e2;
1091 }
1092 else
1093 s = e1; // e1==e2
1094 p_SetExp(lcm,i,s, leadRing);
1095 }
1096
1097 p_Setm(m1, tailRing);
1098 p_Setm(m2, tailRing);
1099 p_Setm(lcm, leadRing);
1100}
const CanonicalForm int s
Definition facAbsFact.cc:51
int lcm(unsigned long *l, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
Definition minpoly.cc:709
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent @Note: the integer VarOffset encodes:
Definition p_polys.h:471

◆ k_LmInit_currRing_2_tailRing() [1/2]

KINLINE poly k_LmInit_currRing_2_tailRing ( poly p,
ring tailRing )

Definition at line 991 of file kInline.h.

992{
993 return k_LmInit_currRing_2_tailRing(p, tailRing, tailRing->PolyBin);
994}
KINLINE poly k_LmInit_currRing_2_tailRing(poly p, ring tailRing, omBin tailBin)
Definition kInline.h:959

◆ k_LmInit_currRing_2_tailRing() [2/2]

KINLINE poly k_LmInit_currRing_2_tailRing ( poly p,
ring tailRing,
omBin tailBin )

Definition at line 959 of file kInline.h.

960{
961
962 poly t_p = p_LmInit(p, currRing, tailRing, tailBin);
963 pNext(t_p) = pNext(p);
964 pSetCoeff0(t_p, pGetCoeff(p));
965 return t_p;
966}
#define pNext(p)
Definition monomials.h:36
#define pSetCoeff0(p, n)
Definition monomials.h:59
static poly p_LmInit(poly p, const ring r)
Definition p_polys.h:1356

◆ k_LmInit_tailRing_2_currRing() [1/2]

KINLINE poly k_LmInit_tailRing_2_currRing ( poly p,
ring tailRing )

Definition at line 996 of file kInline.h.

997{
998 return k_LmInit_tailRing_2_currRing(p, tailRing, currRing->PolyBin);
999}
KINLINE poly k_LmInit_tailRing_2_currRing(poly t_p, ring tailRing, omBin lmBin)
Definition kInline.h:968

◆ k_LmInit_tailRing_2_currRing() [2/2]

KINLINE poly k_LmInit_tailRing_2_currRing ( poly t_p,
ring tailRing,
omBin lmBin )

Definition at line 968 of file kInline.h.

969{
970 poly p = p_LmInit(t_p, tailRing, currRing, lmBin);
971 pNext(p) = pNext(t_p);
972 pSetCoeff0(p, pGetCoeff(t_p));
973 return p;
974}

◆ k_LmShallowCopyDelete_currRing_2_tailRing() [1/2]

KINLINE poly k_LmShallowCopyDelete_currRing_2_tailRing ( poly p,
ring tailRing )

Definition at line 1001 of file kInline.h.

1002{
1003 return k_LmShallowCopyDelete_currRing_2_tailRing(p, tailRing, tailRing->PolyBin);
1004}
KINLINE poly k_LmShallowCopyDelete_currRing_2_tailRing(poly p, ring tailRing, omBin tailBin)
Definition kInline.h:977

◆ k_LmShallowCopyDelete_currRing_2_tailRing() [2/2]

KINLINE poly k_LmShallowCopyDelete_currRing_2_tailRing ( poly p,
ring tailRing,
omBin tailBin )

Definition at line 977 of file kInline.h.

978{
979 poly np = k_LmInit_currRing_2_tailRing(p, tailRing, tailBin);
981 return np;
982}

◆ k_LmShallowCopyDelete_tailRing_2_currRing() [1/2]

KINLINE poly k_LmShallowCopyDelete_tailRing_2_currRing ( poly p,
ring tailRing )

Definition at line 1006 of file kInline.h.

1007{
1008 return k_LmShallowCopyDelete_tailRing_2_currRing(p, tailRing, currRing->PolyBin);
1009}
KINLINE poly k_LmShallowCopyDelete_tailRing_2_currRing(poly p, ring tailRing, omBin lmBin)
Definition kInline.h:984

◆ k_LmShallowCopyDelete_tailRing_2_currRing() [2/2]

KINLINE poly k_LmShallowCopyDelete_tailRing_2_currRing ( poly p,
ring tailRing,
omBin lmBin )

Definition at line 984 of file kInline.h.

985{
986 poly np = k_LmInit_tailRing_2_currRing(p, tailRing, lmBin);
987 p_LmFree(p, tailRing);
988 return np;
989}

◆ ksOldCreateSpoly()

KINLINE poly ksOldCreateSpoly ( poly p1,
poly p2,
poly spNoether,
ring r )

Definition at line 1194 of file kInline.h.

1195{
1196 LObject L(r);
1197 L.p1 = p1;
1198 L.p2 = p2;
1199
1200 ksCreateSpoly(&L, spNoether);
1201 return L.GetLmCurrRing();
1202}
void ksCreateSpoly(LObject *Pair, poly spNoether, int use_buckets, ring tailRing, poly m1, poly m2, TObject **R)
Definition kspoly.cc:1203
class sLObject LObject
Definition kutil.h:59

◆ ksOldSpolyRed()

KINLINE poly ksOldSpolyRed ( poly p1,
poly p2,
poly spNoether )

Definition at line 1174 of file kInline.h.

1175{
1176 LObject L(p2);
1177 TObject T(p1);
1178
1179 ksReducePoly(&L, &T, spNoether);
1180
1181 return L.GetLmCurrRing();
1182}
int ksReducePoly(LObject *PR, TObject *PW, poly spNoether, number *coef, poly *mon, kStrategy strat, BOOLEAN reduce)
Definition kspoly.cc:187

◆ ksOldSpolyRedNew()

KINLINE poly ksOldSpolyRedNew ( poly p1,
poly p2,
poly spNoether )

Definition at line 1184 of file kInline.h.

1185{
1186 LObject L(p_Copy(p2, currRing));
1187 TObject T(p1);
1188
1189 ksReducePoly(&L, &T, spNoether);
1190
1191 return L.GetLmCurrRing();
1192}
static poly p_Copy(poly p, const ring r)
returns a copy of p
Definition p_polys.h:848

◆ ksOldSpolyTail()

void ksOldSpolyTail ( poly p1,
poly q,
poly q2,
poly spNoether,
ring r )

Definition at line 1204 of file kInline.h.

1205{
1206 LObject L(q, currRing, r);
1207 TObject T(p1, currRing, r);
1208
1209 ksReducePolyTail(&L, &T, q2, spNoether);
1210}
KINLINE int ksReducePolyTail(LObject *PR, TObject *PW, LObject *Red)
Definition kInline.h:1147

◆ ksReducePolyTail()

KINLINE int ksReducePolyTail ( LObject * PR,
TObject * PW,
LObject * Red )

Definition at line 1147 of file kInline.h.

1148{
1149 BOOLEAN ret;
1150 number coef;
1151
1152 assume(PR->GetLmCurrRing() != PW->GetLmCurrRing());
1153 Red->HeadNormalize();
1154 ret = ksReducePoly(Red, PW, NULL, &coef);
1155
1156 if (!ret)
1157 {
1158 if (! n_IsOne(coef, currRing->cf))
1159 {
1160 PR->Mult_nn(coef);
1161 // HANNES: mark for Normalize
1162 }
1163 n_Delete(&coef, currRing->cf);
1164 }
1165 return ret;
1166}
int BOOLEAN
Definition auxiliary.h:88
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
Definition coeffs.h:461
static FORCE_INLINE BOOLEAN n_IsOne(number n, const coeffs r)
TRUE iff 'n' represents the one element.
Definition coeffs.h:474

◆ ksReducePolyTail_Z()

KINLINE int ksReducePolyTail_Z ( LObject * PR,
TObject * PW,
LObject * Red )

Definition at line 1125 of file kInline.h.

1126{
1127 BOOLEAN ret;
1128 number coef=NULL;
1129
1130 assume(PR->GetLmCurrRing() != PW->GetLmCurrRing());
1131 ret = ksReducePoly(Red, PW, NULL, &coef, NULL,NULL,TRUE);
1132
1133#if 0 // shlould not happen
1134 if (!ret)
1135 {
1136 if (! n_IsOne(coef, currRing->cf))
1137 {
1138 PR->Mult_nn(coef);
1139 // HANNES: mark for Normalize
1140 }
1141 }
1142#endif
1143 n_Delete(&coef, currRing->cf);
1144 return ret;
1145}

◆ ksReducePolyTailLC_Z()

KINLINE int ksReducePolyTailLC_Z ( LObject * PR,
TObject * PW,
LObject * Red )

Definition at line 1107 of file kInline.h.

1108{
1109 BOOLEAN ret;
1110 number mult, rest;
1111 TObject red = *PW;
1112 red.Copy();
1113 rest = n_QuotRem(pGetCoeff(Red->p), pGetCoeff(red.p),
1114 &mult, currRing->cf);
1115 red.Mult_nn(rest);
1116
1117 assume(PR->GetLmCurrRing() != red.GetLmCurrRing());
1118 ret = ksReducePolyLC(Red, &red, NULL, &mult);
1119 red.Delete();
1120 red.Clear();
1121
1122 return ret;
1123}
static FORCE_INLINE number n_QuotRem(number a, number b, number *q, const coeffs r)
Definition coeffs.h:684
int ksReducePolyLC(LObject *PR, TObject *PW, poly spNoether, number *coef, kStrategy strat)
Definition kspoly.cc:477
void mult(unsigned long *result, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
Definition minpoly.cc:647

◆ redtailBba()

KINLINE poly redtailBba ( poly p,
int pos,
kStrategy strat,
BOOLEAN normalize )

Definition at line 1212 of file kInline.h.

1213{
1214 LObject L(p);
1215 return redtailBba(&L, pos, strat,FALSE, normalize);
1216}
KINLINE poly redtailBba(poly p, int pos, kStrategy strat, BOOLEAN normalize)
Definition kInline.h:1212
static poly normalize(poly next_p, ideal add_generators, syStrategy syzstr, int *g_l, int *p_l, int crit_comp)
Definition syz3.cc:1027

◆ redtailBba_Ring()

KINLINE poly redtailBba_Ring ( poly p,
int pos,
kStrategy strat )

Definition at line 1224 of file kInline.h.

1225{
1226 LObject L(p, currRing, strat->tailRing);
1227 return redtailBba_Ring(&L, pos, strat);
1228}
ring tailRing
Definition kutil.h:342
KINLINE poly redtailBba_Ring(poly p, int pos, kStrategy strat)
Definition kInline.h:1224

◆ redtailBba_Z()

KINLINE poly redtailBba_Z ( poly p,
int pos,
kStrategy strat )

Definition at line 1229 of file kInline.h.

1230{
1231 LObject L(p, currRing, strat->tailRing);
1232 return redtailBba_Z(&L, pos, strat);
1233}
KINLINE poly redtailBba_Z(poly p, int pos, kStrategy strat)
Definition kInline.h:1229

◆ redtailBbaBound()

KINLINE poly redtailBbaBound ( poly p,
int pos,
kStrategy strat,
int bound,
BOOLEAN normalize )

Definition at line 1218 of file kInline.h.

1219{
1220 LObject L(p, currRing, strat->tailRing); // ? L(p); ??
1221 return redtailBbaBound(&L, pos, strat,bound, FALSE, normalize);
1222}
static CanonicalForm bound(const CFMatrix &M)
Definition cf_linsys.cc:460
KINLINE poly redtailBbaBound(poly p, int pos, kStrategy strat, int bound, BOOLEAN normalize)
Definition kInline.h:1218