36 #define UPMATELEM(i,j,nVar) ( (nVar * ((i)-1) - ((i) * ((i)-1))/2 + (j)-1)-(i) )
106 short iFirstAltVar, iLastAltVar;
170 return (
p->ncRingType());
221 const poly,
const ring r);
226 const int,
const ring r);
236 return r->GetNC()->p_Procs.mm_Mult_pp(
m,
p, r);
246 return r->GetNC()->p_Procs.mm_Mult_p(
m,
p, r);
254 return r->GetNC()->p_Procs.SPoly(p1, p2, r);
266 assume(r->GetNC()->p_Procs.ReduceSPoly!=
NULL);
270 return r->GetNC()->p_Procs.ReduceSPoly(p1, p2, r);
286 const ring r =
b->bucket_ring;
291 assume(r->GetNC()->p_Procs.BucketPolyRed!=
NULL);
292 return r->GetNC()->p_Procs.BucketPolyRed(
b,
p, c);
297 const ring r =
b->bucket_ring;
302 assume(r->GetNC()->p_Procs.BucketPolyRed_Z!=
NULL);
303 return r->GetNC()->p_Procs.BucketPolyRed_Z(
b,
p, c);
308 poly
nc_pSubst(poly
p,
int n, poly e,
const ring r);
317 bool dummy_ring =
false
327 bool nc_rCopy(ring
res,
const ring r,
bool bSetupQuotient);
329 poly
pOppose(ring Rop_src, poly
p,
const ring Rop_dst);
330 ideal
idOppose(ring Rop_src, ideal I,
const ring Rop_dst);
336 static const bool bNoPluralMultiplication =
false;
338 static const bool bNoFormula =
true;
339 static const bool bNoCache =
false;
364 #ifdef PLURAL_INTERNAL_DECLARATIONS
375 static inline poly
GetC(
const ring r,
int i,
int j )
382 return ( C->
m[
ncols * ((
i)-1) + (
j)-1] );
386 static inline poly
GetD(
const ring r,
int i,
int j )
391 const int ncols =
D->ncols;
393 return (
D->m[
ncols * ((
i)-1) + (
j)-1] );
void(* bucket_Proc_Ptr)(kBucket_pt b, poly p, number *c)
bucket_Proc_Ptr BucketPolyRed
static poly nc_mm_Mult_pp(const poly m, const poly p, const ring r)
poly(* mm_Mult_pp_Proc_Ptr)(const poly m, const poly p, const ring r)
mm_Mult_pp_Proc_Ptr mm_Mult_pp
static void nc_kBucketPolyRed(kBucket_pt b, poly p, number *c)
static bool rIsSCA(const ring r)
static poly nc_CreateSpoly(const poly p1, const poly p2, const ring r)
ideal idOppose(ring Rop_src, ideal I, const ring Rop_dst)
opposes a module I from Rop to currRing(dst)
void nc_p_ProcsSet(ring rGR, p_Procs_s *p_Procs)
poly pOppose(ring Rop_src, poly p, const ring Rop_dst)
opposes a vector p from Rop to currRing (dst!)
static poly GetD(const ring r, int i, int j)
void * GB
From "gb_hack.h".
void nc_PolyPolyRed(poly &b, poly p, number *c, const ring r)
poly nc_pSubst(poly p, int n, poly e, const ring r)
substitute the n-th variable by e in p destroy p e is not a constant
poly(* SPoly_Proc_Ptr)(const poly p1, const poly p2, const ring r)
poly(* mm_Mult_p_Proc_Ptr)(const poly m, poly p, const ring r)
poly nc_CreateShortSpoly(poly p1, poly p2, const ring r)
bool nc_rCopy(ring res, const ring r, bool bSetupQuotient)
bool ncExtensions(int iMask)
BOOLEAN nc_rComplete(const ring src, ring dest, bool bSetupQuotient=true)
bool nc_SetupQuotient(ring rGR, const ring rG=NULL, bool bCopy=false)
poly(* SPolyReduce_Proc_Ptr)(const poly p1, poly p2, const ring r)
static poly nc_mm_Mult_p(const poly m, poly p, const ring r)
SPolyReduce_Proc_Ptr ReduceSPoly
static poly GetC(const ring r, int i, int j)
int setNCExtensions(int iMask)
BOOLEAN rIsLikeOpposite(ring rBase, ring rCandidate)
checks whether rings rBase and rCandidate could be opposite to each other returns TRUE if it is so
poly nc_p_Plus_mm_Mult_qq(poly p, const poly m, const poly q, int &lp, const int, const ring r)
static poly nc_ReduceSpoly(const poly p1, poly p2, const ring r)
mm_Mult_p_Proc_Ptr mm_Mult_p
BOOLEAN nc_CheckSubalgebra(poly PolyVar, ring r)
BOOLEAN nc_CallPlural(matrix cc, matrix dd, poly cn, poly dn, ring r, bool bSetupQuotient, bool bCopyInput, bool bBeQuiet, ring curr, bool dummy_ring=false)
returns TRUE if there were errors analyze inputs, check them for consistency detects nc_type,...
static void nc_BucketPolyRed_Z(kBucket_pt b, poly p, number *c)
poly nc_p_Bracket_qq(poly p, const poly q, const ring r)
returns [p,q], destroys p
poly _nc_pp_Mult_qq(const poly p, const poly q, const ring r)
general NC-multiplication without destruction
poly _nc_p_Mult_q(poly p, poly q, const ring r)
general NC-multiplication with destruction
static nc_type & ncRingType(nc_struct *p)
void nc_rKill(ring r)
complete destructor
bucket_Proc_Ptr BucketPolyRed_Z
poly nc_p_Minus_mm_Mult_qq(poly p, const poly m, const poly q, int &lp, const poly, const ring r)
for p_Minus_mm_Mult_qq in pInline2.h
static nc_struct *& GetNC(ring r)
matrix nc_PrintMat(int a, int b, ring r, int metric)
returns matrix with the info on noncomm multiplication
struct p_Procs_s p_Procs_s
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
CGlobalMultiplier *& GetGlobalMultiplier()
CFormulaPowerMultiplier *& GetFormulaPowerMultiplier()
nc_type ncRingType() const
CFormulaPowerMultiplier * m_PowerMultiplier
short FirstAltVar() const
CFormulaPowerMultiplier * GetFormulaPowerMultiplier() const
CGlobalMultiplier * m_Multiplier
CGlobalMultiplier * GetGlobalMultiplier() const