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 // #include <ncSAFormula.h> // for CFormulaPowerMultiplier and enum Enum_ncSAType
9 
10 // //////////////////////////////////////////////////////////////////////// //
11 
12 #include <polys/monomials/ring.h>
13 #include <polys/nc/nc.h>
14 
16 
18 {
20  _ncSA_1xy0x0y0 = 0x00, // commutative
21  _ncSA_Mxy0x0y0 = 0x01, // anti-commutative
22  _ncSA_Qxy0x0y0 = 0x02, // quasi-commutative
23  _ncSA_1xyAx0y0 = 0x10, // shift 1
24  _ncSA_1xy0xBy0 = 0x20, // shift 2
25  _ncSA_1xy0x0yG = 0x30, // Weyl
26  _ncSA_1xy0x0yT2 = 0x100 // homogenized Weyl algebra?
27 };
28 
30 {
31  private:
32  Enum_ncSAType* m_SAPairTypes; // upper triangular submatrix of pairs 1 <= i < j <= N of a N x N matrix.
33 
34  const int m_NVars;
35  const ring m_BaseRing;
36 
37 
38 
39  public:
40  inline int NVars() const { return m_NVars; }
41  inline ring GetBasering() const { return m_BaseRing; }
42 
44  virtual ~CFormulaPowerMultiplier();
45 
46  inline Enum_ncSAType GetPair(int i, int j) const
47  {
48  assume( m_SAPairTypes != NULL );
49  assume( i > 0 );
50  assume( i < j );
51  assume( j <= NVars() );
52 
53  return m_SAPairTypes[( (NVars() * ((i)-1) - ((i) * ((i)-1))/2 + (j)-1) - (i) )];
54  }
55 
56  inline Enum_ncSAType& GetPair(int i, int j)
57  {
58  assume( m_SAPairTypes != NULL );
59  assume( i > 0 );
60  assume( i < j );
61  assume( j <= NVars() );
62 
63  return m_SAPairTypes[( (NVars() * ((i)-1) - ((i) * ((i)-1))/2 + (j)-1) - (i) )];
64  }
65 
66  // Lowest level routines!
67  static Enum_ncSAType AnalyzePair(const ring r, int i, int j);
68  static poly Multiply( Enum_ncSAType type, const int i, const int j, const int n, const int m, const ring r);
69 
70  static poly ncSA_1xy0x0y0(const int i, const int j, const int n, const int m, const ring r);
71  static poly ncSA_Mxy0x0y0(const int i, const int j, const int n, const int m, const ring r);
72 
73  static poly ncSA_Qxy0x0y0(const int i, const int j, const int n, const int m, const number m_q, const ring r);
74 
75  static poly ncSA_1xy0x0yG(const int i, const int j, const int n, const int m, const number m_g, const ring r);
76  static poly ncSA_1xy0x0yT2(const int i, const int j, const int n, const int m, const int k, const ring r);
77 
78  static poly ncSA_1xyAx0y0(const int i, const int j, const int n, const int m, const number m_shiftCoef, const ring r);
79  static poly ncSA_1xy0xBy0(const int i, const int j, const int n, const int m, const number m_shiftCoef, const ring r);
80 
81 
82 
83  // Higher level abstraction for keeping track of all the pair types!
84  poly Multiply( int i, int j, const int n, const int m);
85 
86  private: // no copy constuctors!
90 
91 
92 };
93 
94 
96 {
97  return r->GetNC()->GetFormulaPowerMultiplier();
98 }
99 
100 
101 
102 
103 #endif // HAVE_PLURAL :(
104 #endif //
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:740
static poly ncSA_Mxy0x0y0(const int i, const int j, const int n, const int m, const ring r)
Definition: ncSAFormula.cc:730
static CFormulaPowerMultiplier * GetFormulaPowerMultiplier(const ring r)
Definition: ncSAFormula.h:95
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:750
Enum_ncSAType GetPair(int i, int j) const
Definition: ncSAFormula.h:46
bool ncInitSpecialPowersMultiplication(ring r)
Definition: ncSAFormula.cc:51
const CanonicalForm CFMap CFMap int &both_non_zero int n
Definition: cfEzgcd.cc:52
virtual ~CFormulaPowerMultiplier()
Definition: ncSAFormula.cc:236
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:755
int k
Definition: cfEzgcd.cc:93
static poly Multiply(Enum_ncSAType type, const int i, const int j, const int n, const int m, const ring r)
Definition: ncSAFormula.cc:706
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:735
static Enum_ncSAType AnalyzePair(const ring r, int i, int j)
Definition: ncSAFormula.cc:712
Enum_ncSAType & GetPair(int i, int j)
Definition: ncSAFormula.h:56
const ring r
Definition: syzextra.cc:208
int j
Definition: myNF.cc:70
#define assume(x)
Definition: mod2.h:405
Enum_ncSAType * m_SAPairTypes
Definition: ncSAFormula.h:32
int m
Definition: cfEzgcd.cc:119
int i
Definition: cfEzgcd.cc:123
CFormulaPowerMultiplier & operator=(const CFormulaPowerMultiplier &)
#define NULL
Definition: omList.c:10
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:745
ring GetBasering() const
Definition: ncSAFormula.h:41
polyrec * poly
Definition: hilb.h:10
static poly ncSA_1xy0x0y0(const int i, const int j, const int n, const int m, const ring r)
Definition: ncSAFormula.cc:725
Enum_ncSAType
Definition: ncSAFormula.h:17