36 #define UPMATELEM(i,j,nVar) ( (nVar * ((i)-1) - ((i) * ((i)-1))/2 + (j)-1)-(i) )
98 short iFirstAltVar, iLastAltVar;
162 return (
p->ncRingType());
213 const poly,
const ring r);
218 const int,
const ring r);
228 return r->p_Procs->pp_mm_Mult(
p,
m, r);
237 return r->p_Procs->p_mm_Mult(
p,
m, r);
245 return r->GetNC()->p_Procs.SPoly(p1, p2, r);
257 assume(r->GetNC()->p_Procs.ReduceSPoly!=
NULL);
261 return r->GetNC()->p_Procs.ReduceSPoly(p1, p2, r);
277 const ring r =
b->bucket_ring;
282 assume(r->GetNC()->p_Procs.BucketPolyRed_NF!=
NULL);
283 return r->GetNC()->p_Procs.BucketPolyRed_NF(
b,
p, c);
288 const ring r =
b->bucket_ring;
293 assume(r->GetNC()->p_Procs.BucketPolyRed_Z!=
NULL);
294 return r->GetNC()->p_Procs.BucketPolyRed_Z(
b,
p, c);
299 poly
nc_pSubst(poly
p,
int n, poly e,
const ring r);
308 bool dummy_ring =
false
318 bool nc_rCopy(ring
res,
const ring r,
bool bSetupQuotient);
320 poly
pOppose(ring Rop_src, poly
p,
const ring Rop_dst);
321 ideal
idOppose(ring Rop_src, ideal I,
const ring Rop_dst);
327 static const bool bNoPluralMultiplication =
false;
329 static const bool bNoFormula =
true;
330 static const bool bNoCache =
false;
355 #ifdef PLURAL_INTERNAL_DECLARATIONS
366 static inline poly
GetC(
const ring r,
int i,
int j )
373 return ( C->
m[
ncols * ((
i)-1) + (
j)-1] );
377 static inline poly
GetD(
const ring r,
int i,
int j )
382 const int ncols =
D->ncols;
384 return (
D->m[
ncols * ((
i)-1) + (
j)-1] );
void(* bucket_Proc_Ptr)(kBucket_pt b, poly p, number *c)
static poly nc_mm_Mult_pp(const poly m, const poly p, const ring r)
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 nc_CreateShortSpoly(poly p1, poly p2, const ring r)
bool nc_rCopy(ring res, const ring r, bool bSetupQuotient)
bucket_Proc_Ptr BucketPolyRed_NF
static void nc_kBucketPolyRed_Z(kBucket_pt b, poly p, number *c)
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)
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_kBucketPolyRed_NF(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!
static BOOLEAN rIsNCRing(const ring r)
CGlobalMultiplier *& GetGlobalMultiplier()
CFormulaPowerMultiplier *& GetFormulaPowerMultiplier()
nc_type ncRingType() const
CFormulaPowerMultiplier * m_PowerMultiplier
short FirstAltVar() const
CFormulaPowerMultiplier * GetFormulaPowerMultiplier() const
CGlobalMultiplier * m_Multiplier
CGlobalMultiplier * GetGlobalMultiplier() const