My Project  debian-1:4.1.1-p2+ds-4build2
ncSAFormula.h
Go to the documentation of this file.
1 #ifndef GRING_SA_MULT_FORMULA_H
2 #define GRING_SA_MULT_FORMULA_H
3 /*****************************************
4  * Computer Algebra System SINGULAR *
5  *****************************************/
6 #ifdef HAVE_PLURAL
7 
8 // //////////////////////////////////////////////////////////////////////// //
9 
10 #include "polys/monomials/ring.h"
11 #include "polys/nc/nc.h"
12 
14 
16 {
18  _ncSA_1xy0x0y0 = 0x00, // commutative
19  _ncSA_Mxy0x0y0 = 0x01, // anti-commutative
20  _ncSA_Qxy0x0y0 = 0x02, // quasi-commutative
21  _ncSA_1xyAx0y0 = 0x10, // shift 1
22  _ncSA_1xy0xBy0 = 0x20, // shift 2
23  _ncSA_1xy0x0yG = 0x30, // Weyl
24  _ncSA_1xy0x0yT2 = 0x100 // homogenized Weyl algebra?
25 };
26 
28 {
29  private:
30  Enum_ncSAType* m_SAPairTypes; // upper triangular submatrix of pairs 1 <= i < j <= N of a N x N matrix.
31 
32  const int m_NVars;
33  const ring m_BaseRing;
34 
35 
36 
37  public:
38  inline int NVars() const { return m_NVars; }
39  inline ring GetBasering() const { return m_BaseRing; }
40 
42  virtual ~CFormulaPowerMultiplier();
43 
44  inline Enum_ncSAType GetPair(int i, int j) const
45  {
47  assume( i > 0 );
48  assume( i < j );
49  assume( j <= NVars() );
50 
51  return m_SAPairTypes[( (NVars() * ((i)-1) - ((i) * ((i)-1))/2 + (j)-1) - (i) )];
52  }
53 
54  inline Enum_ncSAType& GetPair(int i, int j)
55  {
57  assume( i > 0 );
58  assume( i < j );
59  assume( j <= NVars() );
60 
61  return m_SAPairTypes[( (NVars() * ((i)-1) - ((i) * ((i)-1))/2 + (j)-1) - (i) )];
62  }
63 
64  // Lowest level routines!
65  static Enum_ncSAType AnalyzePair(const ring r, int i, int j);
66  static poly Multiply( Enum_ncSAType type, const int i, const int j, const int n, const int m, const ring r);
67 
68  static poly ncSA_1xy0x0y0(const int i, const int j, const int n, const int m, const ring r);
69  static poly ncSA_Mxy0x0y0(const int i, const int j, const int n, const int m, const ring r);
70 
71  static poly ncSA_Qxy0x0y0(const int i, const int j, const int n, const int m, const number m_q, const ring r);
72 
73  static poly ncSA_1xy0x0yG(const int i, const int j, const int n, const int m, const number m_g, const ring r);
74  static poly ncSA_1xy0x0yT2(const int i, const int j, const int n, const int m, const int k, const ring r);
75 
76  static poly ncSA_1xyAx0y0(const int i, const int j, const int n, const int m, const number m_shiftCoef, const ring r);
77  static poly ncSA_1xy0xBy0(const int i, const int j, const int n, const int m, const number m_shiftCoef, const ring r);
78 
79 
80 
81  // Higher level abstraction for keeping track of all the pair types!
82  poly Multiply( int i, int j, const int n, const int m);
83 
84  private: // no copy constuctors!
88 
89 
90 };
91 
92 
94 {
95  return r->GetNC()->GetFormulaPowerMultiplier();
96 }
97 
98 
99 
100 
101 #endif // HAVE_PLURAL :(
102 #endif //
CFormulaPowerMultiplier::NVars
int NVars() const
Definition: ncSAFormula.h:38
j
int j
Definition: facHensel.cc:105
k
int k
Definition: cfEzgcd.cc:92
CFormulaPowerMultiplier::m_BaseRing
const ring m_BaseRing
Definition: ncSAFormula.h:33
CFormulaPowerMultiplier::ncSA_Mxy0x0y0
static poly ncSA_Mxy0x0y0(const int i, const int j, const int n, const int m, const ring r)
Definition: ncSAFormula.cc:720
CFormulaPowerMultiplier::ncSA_1xy0x0yG
static poly ncSA_1xy0x0yG(const int i, const int j, const int n, const int m, const number m_g, const ring r)
Definition: ncSAFormula.cc:730
_ncSA_notImplemented
@ _ncSA_notImplemented
Definition: ncSAFormula.h:17
CFormulaPowerMultiplier::ncSA_1xyAx0y0
static poly ncSA_1xyAx0y0(const int i, const int j, const int n, const int m, const number m_shiftCoef, const ring r)
Definition: ncSAFormula.cc:740
CFormulaPowerMultiplier::Multiply
static poly Multiply(Enum_ncSAType type, const int i, const int j, const int n, const int m, const ring r)
Definition: ncSAFormula.cc:696
CFormulaPowerMultiplier::ncSA_Qxy0x0y0
static poly ncSA_Qxy0x0y0(const int i, const int j, const int n, const int m, const number m_q, const ring r)
Definition: ncSAFormula.cc:725
CFormulaPowerMultiplier::AnalyzePair
static Enum_ncSAType AnalyzePair(const ring r, int i, int j)
Definition: ncSAFormula.cc:702
CFormulaPowerMultiplier::ncSA_1xy0xBy0
static poly ncSA_1xy0xBy0(const int i, const int j, const int n, const int m, const number m_shiftCoef, const ring r)
Definition: ncSAFormula.cc:745
Enum_ncSAType
Enum_ncSAType
Definition: ncSAFormula.h:15
CFormulaPowerMultiplier
Definition: ncSAFormula.h:27
CFormulaPowerMultiplier::~CFormulaPowerMultiplier
virtual ~CFormulaPowerMultiplier()
Definition: ncSAFormula.cc:233
i
int i
Definition: cfEzgcd.cc:125
CFormulaPowerMultiplier::GetPair
Enum_ncSAType & GetPair(int i, int j)
Definition: ncSAFormula.h:54
CFormulaPowerMultiplier::GetPair
Enum_ncSAType GetPair(int i, int j) const
Definition: ncSAFormula.h:44
CFormulaPowerMultiplier::operator=
CFormulaPowerMultiplier & operator=(const CFormulaPowerMultiplier &)
_ncSA_1xy0x0y0
@ _ncSA_1xy0x0y0
Definition: ncSAFormula.h:18
_ncSA_Qxy0x0y0
@ _ncSA_Qxy0x0y0
Definition: ncSAFormula.h:20
CFormulaPowerMultiplier::GetBasering
ring GetBasering() const
Definition: ncSAFormula.h:39
_ncSA_1xyAx0y0
@ _ncSA_1xyAx0y0
Definition: ncSAFormula.h:21
CFormulaPowerMultiplier::m_NVars
const int m_NVars
Definition: ncSAFormula.h:32
CFormulaPowerMultiplier::m_SAPairTypes
Enum_ncSAType * m_SAPairTypes
Definition: ncSAFormula.h:30
ring.h
nc.h
_ncSA_Mxy0x0y0
@ _ncSA_Mxy0x0y0
Definition: ncSAFormula.h:19
GetFormulaPowerMultiplier
static CFormulaPowerMultiplier * GetFormulaPowerMultiplier(const ring r)
Definition: ncSAFormula.h:93
m
int m
Definition: cfEzgcd.cc:121
assume
#define assume(x)
Definition: mod2.h:390
NULL
#define NULL
Definition: omList.c:10
CFormulaPowerMultiplier::ncSA_1xy0x0yT2
static poly ncSA_1xy0x0yT2(const int i, const int j, const int n, const int m, const int k, const ring r)
Definition: ncSAFormula.cc:735
_ncSA_1xy0x0yG
@ _ncSA_1xy0x0yG
Definition: ncSAFormula.h:23
CFormulaPowerMultiplier::CFormulaPowerMultiplier
CFormulaPowerMultiplier()
_ncSA_1xy0x0yT2
@ _ncSA_1xy0x0yT2
Definition: ncSAFormula.h:24
_ncSA_1xy0xBy0
@ _ncSA_1xy0xBy0
Definition: ncSAFormula.h:22
CFormulaPowerMultiplier::ncSA_1xy0x0y0
static poly ncSA_1xy0x0y0(const int i, const int j, const int n, const int m, const ring r)
Definition: ncSAFormula.cc:715
ncInitSpecialPowersMultiplication
bool ncInitSpecialPowersMultiplication(ring r)
Definition: ncSAFormula.cc:50