34 # define PLURAL_INTERNAL_DECLARATIONS
53 static poly ggnc_pp_Mult_mm(
const poly
p,
const poly
m,
const ring r)
61 PrintS(
"VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ggnc_pp_Mult_mm(p, m) VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ");
75 poly pMonom = pMultiplier->
LM(
m, r);
88 PrintS(
"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ");
96 static poly ggnc_p_Mult_mm(poly
p,
const poly
m,
const ring r)
107 PrintS(
"VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ggnc_p_Mult_mm(p, m) VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ");
124 poly pMonom = pMultiplier->
LM(
m, r);
137 PrintS(
"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ");
145 static poly ggnc_mm_Mult_p(
const poly
m, poly
p,
const ring r)
159 PrintS(
"VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ggnc_mm_Mult_p(m, p) VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ");
174 poly pMonom = pMultiplier->
LM(
m, r);
187 PrintS(
"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ");
194 static poly ggnc_mm_Mult_pp(
const poly
m,
const poly
p,
const ring r)
207 PrintS(
"VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ggnc_mm_Mult_pp(m, p) VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ");
222 poly pMonom = pMultiplier->
LM(
m, r);
235 PrintS(
"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ");
242 static void ggnc_p_ProcsSet(ring rGR,
p_Procs_s* p_Procs)
245 PrintS(
"|ggnc_p_ProcsSet()");
252 p_Procs->p_Mult_mm = rGR->p_Procs->p_Mult_mm = ggnc_p_Mult_mm;
253 p_Procs->pp_Mult_mm = rGR->p_Procs->pp_Mult_mm = ggnc_pp_Mult_mm;
255 p_Procs->p_Minus_mm_Mult_qq = rGR->p_Procs->p_Minus_mm_Mult_qq =
NULL;
258 rGR->GetNC()->p_Procs.mm_Mult_p = ggnc_mm_Mult_p;
259 rGR->GetNC()->p_Procs.mm_Mult_pp = ggnc_mm_Mult_pp;
268 PrintS(
"ncInitSpecialPairMultiplication(ring), ring: \n");
279 if( r->GetNC()->GetGlobalMultiplier() !=
NULL )
281 WarnS(
"Already defined!");
287 ggnc_p_ProcsSet(r, r->p_Procs);
296 PrintS(
"CGlobalMultiplier::CGlobalMultiplier(ring)!");
308 PrintS(
"CGlobalMultiplier::~CGlobalMultiplier()!");
328 PrintS(
"CGlobalMultiplier::MultiplyEE(expLeft, expRight)!");
353 while( (
i <
j) && !((ej != 0) && (ei != 0)) )
364 PrintS(
"<CGlobalMultiplier::MultiplyEE>");
368 Print(
"ei: %d, ej: %d", ei, ej);
381 product =
p_Head(expRight, r);
429 PrintS(
"<CGlobalMultiplier::MultiplyEE> ==> ");
433 Print(
"ei: %d, ej: %d", ei, ej);
441 while( (product !=
NULL) && !((
i ==
NVars()) && (
j == 1)) )
450 while( (ei == 0) && (
i <
NVars()) )
461 while( (ej == 0) && (1 <
j) )
470 PrintS(
"<CGlobalMultiplier::MultiplyEE> ==> ");
474 Print(
"ei: %d, ej: %d", ei, ej);
494 PrintS(
"CGlobalMultiplier::MultiplyME(monom, expR)!");
507 PrintS(
"CGlobalMultiplier::MultiplyEM(expL, monom)!");
525 Print(
"CCommutativeSpecialPairMultiplier::CCommutativeSpecialPairMultiplier(ring, i: %d, j: %d)!",
i,
j);
534 PrintS(
"CCommutativeSpecialPairMultiplier::~CCommutativeSpecialPairMultiplier()");
543 Print(
"CCommutativeSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
557 Print(
"CAntiCommutativeSpecialPairMultiplier::CAntiCommutativeSpecialPairMultiplier(ring, i: %d, j: %d)!",
i,
j);
566 PrintS(
"CAntiCommutativeSpecialPairMultiplier::~CAntiCommutativeSpecialPairMultiplier()");
575 Print(
"CAntiCommutativeSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
589 Print(
"CQuasiCommutativeSpecialPairMultiplier::CQuasiCommutativeSpecialPairMultiplier(ring, i: %d, j: %d, q)!",
i,
j);
600 PrintS(
"CQuasiCommutativeSpecialPairMultiplier::~CQuasiCommutativeSpecialPairMultiplier()");
609 Print(
"CQuasiCommutativeSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
624 Print(
"CWeylSpecialPairMultiplier::CWeylSpecialPairMultiplier(ring, i: %d, j: %d, g)!",
i,
j);
635 PrintS(
"CWeylSpecialPairMultiplier::~CWeylSpecialPairMultiplier()");
644 Print(
"CWeylSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
652 assume( expLeft*expRight > 0 );
662 Print(
"CHWeylSpecialPairMultiplier::CHWeylSpecialPairMultiplier(ring, i: %d, j: %d, k: %d)!",
i,
j,
k);
671 PrintS(
"CHWeylSpecialPairMultiplier::~CHWeylSpecialPairMultiplier()");
680 Print(
"CHWeylSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
688 assume( expLeft*expRight > 0 );
699 Print(
"CShiftSpecialPairMultiplier::CShiftSpecialPairMultiplier(ring, i: %d, j: %d, s: %d, c)!",
i,
j,
s);
709 PrintS(
"CShiftSpecialPairMultiplier::~CShiftSpecialPairMultiplier()");
718 Print(
"CShiftSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
723 assume( expLeft*expRight > 0 );
741 Print(
"CExternalSpecialPairMultiplier::CExternalSpecialPairMultiplier(ring, i: %d, j: %d, type: %d, c)!",
i,
j, (
int)type);
750 PrintS(
"CExternalSpecialPairMultiplier::~CExternalSpecialPairMultiplier()");
759 Print(
"CExternalSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
764 assume( expLeft*expRight > 0 );
780 Print(
"AnalyzePair(ring, i: %d, j: %d)!",
i,
j);
805 const poly d =
GetD(r,
i,
j);
834 PrintS(
"CPowerMultiplier::CPowerMultiplier(ring)!");
849 PrintS(
"CPowerMultiplier::~CPowerMultiplier()!");
861 const int j = expRight.
Var;
862 const int n = expRight.
Power;
867 Print(
"CPowerMultiplier::MultiplyME(monom * var(%d)^{%d})!",
j, n);
881 while((
v >
j) && (e == 0))
914 PrintS(
"CPowerMultiplier::MultiplyME() ===> ");
928 const int j = expLeft.
Var;
929 const int n = expLeft.
Power;
932 Print(
"CPowerMultiplier::MultiplyEM(var(%d)^{%d} * monom)!",
j, n);
946 while((
v <
j) && (e == 0))
979 PrintS(
"CPowerMultiplier::MultiplyEM() ===> ");
993 PrintS(
"CPowerMultiplier::MultiplyEE)!");
997 const int i = expRight.
Var,
j = expLeft.
Var;
998 const int ei = expRight.
Power, ej = expLeft.
Power;
1001 Print(
"Input: var(%d)^{%d} * var(%d)^{%d}",
j, ej,
i, ei);
1016 poly product =
p_One(r);
1032 if( pSpecialMultiplier !=
NULL )
1038 return pSpecialMultiplier->
MultiplyEE(ej, ei);
1044 WerrorS(
"Sorry the general case is not implemented this way yet!!!");
1063 Print(
"CSpecialPairMultiplier::CSpecialPairMultiplier(ring, i: %d, j: %d)!",
i,
j);
1076 PrintS(
"CSpecialPairMultiplier::~CSpecialPairMultiplier()!");
1087 Print(
"CSpecialPairMultiplier::MultiplyME(monom, var(%d)^{%d})!",
GetI(), expRight);
1099 Print(
"CSpecialPairMultiplier::MultiplyEM(var(%d)^{%d}, monom)!",
GetJ(), expLeft);
const CanonicalForm CFMap CFMap & N
CAntiCommutativeSpecialPairMultiplier(ring r, int i, int j)
virtual poly MultiplyEE(const int expLeft, const int expRight)
virtual ~CAntiCommutativeSpecialPairMultiplier()
virtual ~CCommutativeSpecialPairMultiplier()
CCommutativeSpecialPairMultiplier(ring r, int i, int j)
virtual poly MultiplyEE(const int expLeft, const int expRight)
virtual poly MultiplyEE(const int expLeft, const int expRight)
virtual ~CExternalSpecialPairMultiplier()
CExternalSpecialPairMultiplier(ring r, int i, int j, Enum_ncSAType type)
poly MultiplyPEDestroy(poly pPoly, const CExponent expRight)
poly MultiplyEPDestroy(const CExponent expLeft, poly pPoly)
virtual poly MultiplyME(const poly pMonom, const CExponent expRight)
CPowerMultiplier * m_powers
poly MultiplyEP(const CExponent expLeft, const poly pPoly)
virtual poly MultiplyEE(const CExponent expLeft, const CExponent expRight)
poly MultiplyPE(const poly pPoly, const CExponent expRight)
CGlobalMultiplier(ring r)
const CFormulaPowerMultiplier * m_RingFormulaMultiplier
virtual poly MultiplyEM(const CExponent expLeft, const poly pMonom)
virtual ~CGlobalMultiplier()
virtual poly MultiplyEE(const int expLeft, const int expRight)
CHWeylSpecialPairMultiplier(ring r, int i, int j, int k)
virtual ~CHWeylSpecialPairMultiplier()
poly LM(const poly pTerm, const ring r, int i=1) const
virtual ~CPowerMultiplier()
virtual poly MultiplyEE(const CExponent expLeft, const CExponent expRight)
virtual poly MultiplyME(const poly pMonom, const CExponent expRight)
virtual poly MultiplyEM(const CExponent expLeft, const poly pMonom)
poly MultiplyPEDestroy(poly pPoly, const CExponent expRight)
poly MultiplyEPDestroy(const CExponent expLeft, poly pPoly)
CSpecialPairMultiplier ** m_specialpairs
CSpecialPairMultiplier * GetPair(int i, int j) const
CQuasiCommutativeSpecialPairMultiplier(ring r, int i, int j, number q)
virtual ~CQuasiCommutativeSpecialPairMultiplier()
virtual poly MultiplyEE(const int expLeft, const int expRight)
CShiftSpecialPairMultiplier(ring r, int i, int j, int s, number c)
virtual poly MultiplyEE(const int expLeft, const int expRight)
virtual ~CShiftSpecialPairMultiplier()
CSpecialPairMultiplier(ring r, int i, int j)
virtual poly MultiplyEM(const CExponent expLeft, const poly pMonom)
virtual poly MultiplyME(const poly pMonom, const CExponent expRight)
virtual ~CSpecialPairMultiplier()
virtual poly MultiplyEE(const CExponent expLeft, const CExponent expRight)=0
virtual poly MultiplyEE(const int expLeft, const int expRight)
CWeylSpecialPairMultiplier(ring r, int i, int j, number g)
virtual ~CWeylSpecialPairMultiplier()
static FORCE_INLINE void n_Write(number n, const coeffs r, const BOOLEAN bShortOut=TRUE)
const CanonicalForm int s
const Variable & v
< [in] a sqrfree bivariate poly
void WerrorS(const char *s)
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)
CSpecialPairMultiplier * AnalyzePair(const ring r, int i, int j)
BOOLEAN ncInitSpecialPairMultiplication(ring r)
#define omFreeSize(addr, size)
int p_IsPurePower(const poly p, const ring r)
return i, if head depends only on var(i)
static poly p_Head(poly p, const ring r)
#define __pp_Mult_nn(p, n, r)
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 long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent @Note: the integer VarOffset encodes:
static BOOLEAN p_IsConstant(const poly p, const ring r)
static void p_Delete(poly *p, const ring r)
#define __p_Mult_nn(p, n, r)
void PrintS(const char *s)
void rWrite(ring r, BOOLEAN details)
struct p_Procs_s p_Procs_s
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!