34 # define PLURAL_INTERNAL_DECLARATIONS
63 PrintS(
"VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ggnc_pp_Mult_mm(p, m) VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ");
77 poly pMonom = pMultiplier->
LM(m, r);
90 PrintS(
"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ");
98 static poly ggnc_p_Mult_mm(
poly p,
const poly m,
const ring r)
109 PrintS(
"VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ggnc_p_Mult_mm(p, m) VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ");
126 poly pMonom = pMultiplier->
LM(m, r);
139 PrintS(
"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ");
147 static poly ggnc_mm_Mult_p(
const poly m,
poly p,
const ring r)
161 PrintS(
"VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ggnc_mm_Mult_p(m, p) VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ");
176 poly pMonom = pMultiplier->
LM(m, r);
189 PrintS(
"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ");
196 static poly ggnc_mm_Mult_pp(
const poly m,
const poly p,
const ring r)
209 PrintS(
"VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ggnc_mm_Mult_pp(m, p) VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ");
224 poly pMonom = pMultiplier->
LM(m, r);
237 PrintS(
"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ");
244 static void ggnc_p_ProcsSet(ring rGR,
p_Procs_s* p_Procs)
247 PrintS(
"|ggnc_p_ProcsSet()");
254 p_Procs->p_Mult_mm = rGR->p_Procs->p_Mult_mm = ggnc_p_Mult_mm;
255 p_Procs->pp_Mult_mm = rGR->p_Procs->pp_Mult_mm = ggnc_pp_Mult_mm;
257 p_Procs->p_Minus_mm_Mult_qq = rGR->p_Procs->p_Minus_mm_Mult_qq =
NULL;
260 rGR->GetNC()->p_Procs.mm_Mult_p = ggnc_mm_Mult_p;
261 rGR->GetNC()->p_Procs.mm_Mult_pp = ggnc_mm_Mult_pp;
270 PrintS(
"ncInitSpecialPairMultiplication(ring), ring: \n");
281 if( r->GetNC()->GetGlobalMultiplier() !=
NULL )
283 WarnS(
"Already defined!");
289 ggnc_p_ProcsSet(r, r->p_Procs);
298 PrintS(
"CGlobalMultiplier::CGlobalMultiplier(ring)!");
310 PrintS(
"CGlobalMultiplier::~CGlobalMultiplier()!");
330 PrintS(
"CGlobalMultiplier::MultiplyEE(expLeft, expRight)!");
355 while( (i < j) && !((ej != 0) && (ei != 0)) )
366 PrintS(
"<CGlobalMultiplier::MultiplyEE>");
368 Print(
"i: %d, j: %d", i, j);
370 Print(
"ei: %d, ej: %d", ei, ej);
383 product =
p_Head(expRight, r);
405 const int e =
p_GetExp(expLeft, i, r);
431 PrintS(
"<CGlobalMultiplier::MultiplyEE> ==> ");
433 Print(
"i: %d, j: %d", i, j);
435 Print(
"ei: %d, ej: %d", ei, ej);
443 while( (product !=
NULL) && !((i ==
NVars()) && (j == 1)) )
452 while( (ei == 0) && (i <
NVars()) )
463 while( (ej == 0) && (1 < j) )
472 PrintS(
"<CGlobalMultiplier::MultiplyEE> ==> ");
474 Print(
"i: %d, j: %d", i, j);
476 Print(
"ei: %d, ej: %d", ei, ej);
496 PrintS(
"CGlobalMultiplier::MultiplyME(monom, expR)!");
509 PrintS(
"CGlobalMultiplier::MultiplyEM(expL, monom)!");
527 Print(
"CCommutativeSpecialPairMultiplier::CCommutativeSpecialPairMultiplier(ring, i: %d, j: %d)!", i, j);
536 PrintS(
"CCommutativeSpecialPairMultiplier::~CCommutativeSpecialPairMultiplier()");
545 Print(
"CCommutativeSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
559 Print(
"CAntiCommutativeSpecialPairMultiplier::CAntiCommutativeSpecialPairMultiplier(ring, i: %d, j: %d)!", i, j);
568 PrintS(
"CAntiCommutativeSpecialPairMultiplier::~CAntiCommutativeSpecialPairMultiplier()");
577 Print(
"CAntiCommutativeSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
591 Print(
"CQuasiCommutativeSpecialPairMultiplier::CQuasiCommutativeSpecialPairMultiplier(ring, i: %d, j: %d, q)!", i, j);
602 PrintS(
"CQuasiCommutativeSpecialPairMultiplier::~CQuasiCommutativeSpecialPairMultiplier()");
611 Print(
"CQuasiCommutativeSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
626 Print(
"CWeylSpecialPairMultiplier::CWeylSpecialPairMultiplier(ring, i: %d, j: %d, g)!", i, j);
637 PrintS(
"CWeylSpecialPairMultiplier::~CWeylSpecialPairMultiplier()");
646 Print(
"CWeylSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
654 assume( expLeft*expRight > 0 );
664 Print(
"CHWeylSpecialPairMultiplier::CHWeylSpecialPairMultiplier(ring, i: %d, j: %d, k: %d)!", i, j, k);
673 PrintS(
"CHWeylSpecialPairMultiplier::~CHWeylSpecialPairMultiplier()");
682 Print(
"CHWeylSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
690 assume( expLeft*expRight > 0 );
701 Print(
"CShiftSpecialPairMultiplier::CShiftSpecialPairMultiplier(ring, i: %d, j: %d, s: %d, c)!", i, j, s);
711 PrintS(
"CShiftSpecialPairMultiplier::~CShiftSpecialPairMultiplier()");
720 Print(
"CShiftSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
725 assume( expLeft*expRight > 0 );
743 Print(
"CExternalSpecialPairMultiplier::CExternalSpecialPairMultiplier(ring, i: %d, j: %d, type: %d, c)!", i, j, (
int)type);
752 PrintS(
"CExternalSpecialPairMultiplier::~CExternalSpecialPairMultiplier()");
761 Print(
"CExternalSpecialPairMultiplier::MultiplyEE(var(%d)^{%d}, var(%d)^{%d})!",
GetJ(), expLeft,
GetI(), expRight);
766 assume( expLeft*expRight > 0 );
782 Print(
"AnalyzePair(ring, i: %d, j: %d)!", i, j);
836 PrintS(
"CPowerMultiplier::CPowerMultiplier(ring)!");
851 PrintS(
"CPowerMultiplier::~CPowerMultiplier()!");
863 const int j = expRight.
Var;
864 const int n = expRight.
Power;
869 Print(
"CPowerMultiplier::MultiplyME(monom * var(%d)^{%d})!", j, n);
883 while((v > j) && (e == 0))
916 PrintS(
"CPowerMultiplier::MultiplyME() ===> ");
930 const int j = expLeft.
Var;
931 const int n = expLeft.
Power;
934 Print(
"CPowerMultiplier::MultiplyEM(var(%d)^{%d} * monom)!", j, n);
948 while((v < j) && (e == 0))
981 PrintS(
"CPowerMultiplier::MultiplyEM() ===> ");
995 PrintS(
"CPowerMultiplier::MultiplyEE)!");
999 const int i = expRight.
Var,
j = expLeft.
Var;
1000 const int ei = expRight.
Power, ej = expLeft.
Power;
1003 Print(
"Input: var(%d)^{%d} * var(%d)^{%d}",
j, ej, i, ei);
1034 if( pSpecialMultiplier !=
NULL )
1040 return pSpecialMultiplier->
MultiplyEE(ej, ei);
1046 WerrorS(
"Sorry the general case is not implemented this way yet!!!");
1065 Print(
"CSpecialPairMultiplier::CSpecialPairMultiplier(ring, i: %d, j: %d)!", i, j);
1078 PrintS(
"CSpecialPairMultiplier::~CSpecialPairMultiplier()!");
1089 Print(
"CSpecialPairMultiplier::MultiplyME(monom, var(%d)^{%d})!",
GetI(), expRight);
1101 Print(
"CSpecialPairMultiplier::MultiplyEM(var(%d)^{%d}, monom)!",
GetJ(), expLeft);
CSpecialPairMultiplier * AnalyzePair(const ring r, int i, int j)
CAntiCommutativeSpecialPairMultiplier(ring r, int i, int j)
const CanonicalForm int s
virtual ~CWeylSpecialPairMultiplier()
virtual poly MultiplyME(const poly pMonom, const CExponent expRight)
virtual poly MultiplyEE(const int expLeft, const int expRight)
CSpecialPairMultiplier ** m_specialpairs
struct p_Procs_s p_Procs_s
static poly pp_Mult_nn(poly p, number n, const ring r)
#define omFreeSize(addr, size)
CWeylSpecialPairMultiplier(ring r, int i, int j, number g)
const CanonicalForm CFMap CFMap int &both_non_zero int n
poly MultiplyEPDestroy(const CExponent expLeft, poly pPoly)
virtual poly MultiplyEM(const CExponent expLeft, const poly pMonom)
virtual ~CQuasiCommutativeSpecialPairMultiplier()
const CFormulaPowerMultiplier * m_RingFormulaMultiplier
poly MultiplyPEDestroy(poly pPoly, const CExponent expRight)
CShiftSpecialPairMultiplier(ring r, int i, int j, int s, number c)
void WerrorS(const char *s)
static bool rIsPluralRing(const ring r)
we must always have this test!
CSpecialPairMultiplier * GetPair(int i, int j) const
CPowerMultiplier * m_powers
virtual ~CAntiCommutativeSpecialPairMultiplier()
CSpecialPairMultiplier(ring r, int i, int j)
virtual poly MultiplyME(const poly pMonom, const CExponent expRight)
static poly p_Head(poly p, const ring r)
virtual poly MultiplyEM(const CExponent expLeft, const poly pMonom)
virtual ~CShiftSpecialPairMultiplier()
poly MultiplyPEDestroy(poly pPoly, const CExponent expRight)
const CanonicalForm CFMap CFMap & N
virtual poly MultiplyEE(const int expLeft, const int expRight)
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent : the integer VarOffset encodes:
virtual poly MultiplyEE(const int expLeft, const int expRight)
CGlobalMultiplier(ring r)
static BOOLEAN p_IsConstant(const poly p, const ring r)
poly MultiplyEP(const CExponent expLeft, const poly pPoly)
virtual ~CGlobalMultiplier()
virtual poly MultiplyEE(const CExponent expLeft, const CExponent expRight)
static FORCE_INLINE void n_Write(number &n, const coeffs r, const BOOLEAN bShortOut=TRUE)
CCommutativeSpecialPairMultiplier(ring r, int i, int j)
void PrintS(const char *s)
static poly p_Mult_nn(poly p, number n, const ring r)
CHWeylSpecialPairMultiplier(ring r, int i, int j, int k)
void rWrite(ring r, BOOLEAN details)
virtual poly MultiplyEE(const int expLeft, const int expRight)
virtual ~CPowerMultiplier()
static void p_Delete(poly *p, const ring r)
const Variable & v
< [in] a sqrfree bivariate poly
static unsigned long p_SetExp(poly p, const unsigned long e, const unsigned long iBitmask, const int VarOffset)
set a single variable exponent : VarOffset encodes the position in p->exp
int p_IsPurePower(const poly p, const ring r)
return i, if head depends only on var(i)
virtual poly MultiplyEE(const CExponent expLeft, const CExponent expRight)=0
virtual poly MultiplyEE(const int expLeft, const int expRight)
virtual ~CSpecialPairMultiplier()
static bool rIsSCA(const ring r)
BOOLEAN ncInitSpecialPairMultiplication(ring r)
CQuasiCommutativeSpecialPairMultiplier(ring r, int i, int j, number q)
static void p_Setm(poly p, const ring r)
virtual ~CCommutativeSpecialPairMultiplier()
virtual poly MultiplyEE(const CExponent expLeft, const CExponent expRight)
static poly GetC(const ring r, int i, int j)
poly LM(const poly pTerm, const ring r, int i=1) const
virtual poly MultiplyEM(const CExponent expLeft, const poly pMonom)
poly MultiplyEPDestroy(const CExponent expLeft, poly pPoly)
void p_Write(poly p, ring lmRing, ring tailRing)
poly MultiplyPE(const poly pPoly, const CExponent expRight)
virtual poly MultiplyEE(const int expLeft, const int expRight)
virtual ~CExternalSpecialPairMultiplier()
virtual poly MultiplyME(const poly pMonom, const CExponent expRight)
virtual poly MultiplyEE(const int expLeft, const int expRight)
virtual ~CHWeylSpecialPairMultiplier()
CExternalSpecialPairMultiplier(ring r, int i, int j, Enum_ncSAType type)
static poly GetD(const ring r, int i, int j)