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
poly LM(const poly pTerm, const ring r, int i=1) const
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)
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)
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 rIsPluralRing(const ring r)
we must always have this test!
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()
CSpecialPairMultiplier * GetPair(int i, int j) const
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)
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)