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;
280 assume(r->GetNC()->p_Procs.BucketPolyRed_NF!=
NULL);
281 return r->GetNC()->p_Procs.BucketPolyRed_NF(
b,
p, c,
reduce);
286 const ring r =
b->bucket_ring;
289 assume(r->GetNC()->p_Procs.BucketPolyRed_Z!=
NULL);
290 return r->GetNC()->p_Procs.BucketPolyRed_Z(
b,
p, c,
reduce);
295poly
nc_pSubst(poly
p,
int n, poly e,
const ring r);
304 bool dummy_ring =
false
314bool nc_rCopy(ring
res,
const ring r,
bool bSetupQuotient);
316poly
pOppose(ring Rop_src, poly
p,
const ring Rop_dst);
317ideal
idOppose(ring Rop_src, ideal I,
const ring Rop_dst);
323static const bool bNoPluralMultiplication =
false;
325static const bool bNoFormula =
true;
326static const bool bNoCache =
false;
351#ifdef PLURAL_INTERNAL_DECLARATIONS
362static inline poly
GetC(
const ring r,
int i,
int j )
369 return ( C->
m[
ncols * ((
i)-1) + (
j)-1] );
373static inline poly
GetD(
const ring r,
int i,
int j )
378 const int ncols =
D->ncols;
380 return (
D->m[
ncols * ((
i)-1) + (
j)-1] );
static nc_struct *& GetNC(ring r)
static void nc_kBucketPolyRed_Z(kBucket_pt b, poly p, number *c, BOOLEAN reduce)
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)
static void nc_kBucketPolyRed_NF(kBucket_pt b, poly p, number *c, BOOLEAN reduce)
bool nc_rCopy(ring res, const ring r, bool bSetupQuotient)
bucket_Proc_Ptr BucketPolyRed_NF
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)
static nc_type & ncRingType(nc_struct *p)
void(* bucket_Proc_Ptr)(kBucket_pt b, poly p, number *c, BOOLEAN reduce)
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,...
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
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
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() const
CFormulaPowerMultiplier * GetFormulaPowerMultiplier() const
CGlobalMultiplier *& GetGlobalMultiplier()
nc_type ncRingType() const
CFormulaPowerMultiplier *& GetFormulaPowerMultiplier()
CFormulaPowerMultiplier * m_PowerMultiplier
short FirstAltVar() const
CGlobalMultiplier * m_Multiplier