27#define PLURAL_INTERNAL_DECLARATIONS
53 PrintS(
"ncInitSpecialPowersMultiplication(ring), ring: \n");
62 if( r->GetNC()->GetFormulaPowerMultiplier() !=
NULL )
64 WarnS(
"Already defined!");
85 Print(
"AreCommutingVariables(ring, k: %d, i: %d)!\n",
j,
i);
104 const poly d =
GetD(r,
i,
j);
136 Print(
"AnalyzePair(ring, i: %d, j: %d):\n",
i,
j);
146 const poly c =
GetC(r,
i,
j);
148 const poly d =
GetD(r,
i,
j);
190 }
else if (
exp == 2 &&
k!=
i &&
k !=
j)
209 PrintS(
"====>>>>_ncSA_notImplemented\n");
219 PrintS(
"CFormulaPowerMultiplier::CFormulaPowerMultiplier(ring)!");
236 PrintS(
"CFormulaPowerMultiplier::~CFormulaPowerMultiplier()!");
262 Print(
"ncSA_1xy0x0y0(var(%d)^{%d}, var(%d)^{%d}, r)!\n",
j,
m,
i, n);
279 Print(
"ncSA_{M = -1}xy0x0y0(var(%d)^{%d}, var(%d)^{%d}, r)!\n",
j,
m,
i, n);
282 const int sign = 1 - ((n & (
m & 1)) << 1);
298 Print(
"ncSA_Qxy0x0y0(var(%d)^{%d}, var(%d)^{%d}, Q, r)!\n",
j,
m,
i, n);
347 Print(
"ncSA_1xy0x0yG(var(%d)^{%d}, var(%d)^{%d}, G, r)!\n",
j,
m,
i, n);
385 c =
n_Div(c, t, r->cf);
424 c =
n_Div(c, t, r->cf);
446 Print(
"ncSA_1xy0x0yT2(var(%d)^{%d}, var(%d)^{%d}, t: var(%d), r)!\n",
j,
m,
i, n, m_k);
483 c =
n_Div(c, t, r->cf);
524 c =
n_Div(c, t, r->cf);
581 c =
n_Div(c, t, r->cf);
605 c =
n_Div(c, t, r->cf);
628 Print(
"ncSA_1xyAx0y0(var(%d)^{%d}, var(%d)^{%d}, A, r)!\n",
j,
m,
i, n);
640 Print(
"ncSA_1xy0xBy0(var(%d)^{%d}, var(%d)^{%d}, B, r)!\n",
j,
m,
i, n);
657 Print(
"ncSA_Multiply(type: %d, ring, (var(%d)^{%d} * var(%d)^{%d}, r)!\n", (
int)type,
j,
m,
i, n);
664 return ::ncSA_1xy0x0y0(
i,
j, n,
m, r);
667 return ::ncSA_Mxy0x0y0(
i,
j, n,
m, r);
672 return ::ncSA_Qxy0x0y0(
i,
j, n,
m, q, r);
675 const poly d =
GetD(r,
i,
j);
679 return ::ncSA_1xy0x0yG(
i,
j, n,
m,
g, r);
685 return ::ncSA_1xyAx0y0(
i,
j, n,
m,
g, r);
688 return ::ncSA_1xy0xBy0(
i,
j, n,
m,
g, r);
704 return ::AnalyzePairType( r,
i,
j);
717 return ::ncSA_1xy0x0y0(
i,
j, n,
m, r);
722 return ::ncSA_Mxy0x0y0(
i,
j, n,
m, r);
727 return ::ncSA_Qxy0x0y0(
i,
j, n,
m, m_q, r);
732 return ::ncSA_1xy0x0yG(
i,
j, n,
m, m_g, r);
737 return ::ncSA_1xy0x0yT2(
i,
j, n,
m,
k, r);
742 return ::ncSA_1xyAx0y0(
i,
j, n,
m, m_shiftCoef, r);
747 return ::ncSA_1xy0xBy0(
i,
j, n,
m, m_shiftCoef, r);
static int si_min(const int a, const int b)
const CanonicalForm CFMap CFMap & N
static FORCE_INLINE number n_Copy(number n, const coeffs r)
return a copy of 'n'
static FORCE_INLINE BOOLEAN n_IsMOne(number n, const coeffs r)
TRUE iff 'n' represents the additive inverse of the one element, i.e. -1.
static FORCE_INLINE void n_Power(number a, int b, number *res, const coeffs r)
fill res with the power a^b
static FORCE_INLINE number n_Div(number a, number b, const coeffs r)
return the quotient of 'a' and 'b', i.e., a/b; raises an error if 'b' is not invertible in r exceptio...
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
static FORCE_INLINE void n_Write(number n, const coeffs r, const BOOLEAN bShortOut=TRUE)
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
static FORCE_INLINE void n_InpMult(number &a, number b, const coeffs r)
multiplication of 'a' and 'b'; replacement of 'a' by the product a*b
static FORCE_INLINE BOOLEAN n_IsOne(number n, const coeffs r)
TRUE iff 'n' represents the one element.
CanonicalForm reverse(const CanonicalForm &F, int d)
static int min(int a, int b)
static int max(int a, int b)
static bool rIsSCA(const ring r)
static poly GetD(const ring r, int i, int j)
static poly GetC(const ring r, int i, int j)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
gmp_float exp(const gmp_float &a)
#define omFreeSize(addr, size)
int p_IsPurePower(const poly p, const ring r)
return i, if head depends only on var(i)
poly p_ISet(long i, const ring r)
returns the poly representing the integer i
poly p_NSet(number n, const ring r)
returns the poly representing the number n, destroys n
void p_Write(poly p, ring lmRing, ring tailRing)
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
static void p_Setm(poly p, const ring r)
static poly pReverse(poly p)
static BOOLEAN p_LmIsConstantComp(const poly p, const ring r)
static int p_LmCmp(poly p, poly q, const ring r)
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent @Note: the integer VarOffset encodes:
static poly pLast(poly a, int &length)
returns the length of a polynomial (numbers of monomials) respect syzComp
void PrintS(const char *s)
void rWrite(ring r, BOOLEAN details)
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!