Macaulay2 Engine
Loading...
Searching...
No Matches
schur.hpp
Go to the documentation of this file.
1// Copyright 1996-2011 Michael E. Stillman
2
3#ifndef _Schurring_hh_
4#define _Schurring_hh_
5
36
37#include <vector>
38#include "poly.hpp"
39
40const int SCHUR_MAX_WT = 100;
41const int LARGE_NUMBER = 32000;
42
44{
45 friend class SchurRing;
46
47 int dim;
48 int maxwt;
49 int wt;
50 int *lambda; // A partition vector 0..nvars-1
51 int *p; // A partition vector 0..nvars-1
52 int *xloc; // array 1..|p|-|lambda| of the horizontal location
53 // of this number in the skew table
54 int *yloc; // array 1..|p|-|lambda| of the vertical location
55 // of this number in the skew table
56
57 void initialize(int nvars);
60 void resize(int max_wt);
61
62 int elem(int x, int y) const;
63 void fill(int *lamb, int *pp);
64 void display() const;
65};
66
81class SchurRing : public PolyRing
82{
83 private:
84 // These are variables that are used in the recursive routine
85 // SM(), which is called from skew_schur().
91
92 void to_partition(const int *m, int *exp) const;
93 // exp[1]..exp[nvars] are set
94 void from_partition(const int *exp, int *m) const;
95
96 void bounds(int &lo, int &hi);
97 void SM();
98 Nterm *skew_schur(int *lambda, int *p);
99 ring_elem mult_monomials(const int *m, const int *n);
100
101 protected:
102 bool initialize_schur();
104 virtual ~SchurRing() {}
105 public:
106 static SchurRing *create(const PolynomialRing *R);
107
108 static SchurRing *create(const Ring *A, int n);
109
110 static SchurRing *createInfinite(const Ring *A);
111
112 virtual const SchurRing *cast_to_SchurRing() const { return this; }
113 virtual SchurRing *cast_to_SchurRing() { return this; }
114 virtual void text_out(buffer &o) const;
115 virtual void elem_text_out(buffer &o,
116 const ring_elem f,
117 bool p_one = true,
118 bool p_plus = false,
119 bool p_parens = false) const;
120
121 void dimension(const int *exp, mpz_t result) const;
122 ring_elem dimension(const ring_elem f) const;
123
124 virtual ring_elem mult_by_term(const ring_elem f,
125 const ring_elem c,
126 const int *m) const;
127
128 ring_elem power(const ring_elem f, mpz_srcptr n) const;
129 ring_elem power(const ring_elem f, int n) const;
130};
131
132#endif
133
134// Local Variables:
135// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
136// indent-tabs-mode: nil
137// End:
PolyRing()
Definition poly.hpp:82
Abstract base for the engine's polynomial-ring hierarchy.
Definition polyring.hpp:96
xxx xxx xxx
Definition ring.hpp:102
Nterm * skew_schur(int *lambda, int *p)
Definition schur.cpp:215
int _SMcurrent
Definition schur.hpp:88
ring_elem mult_monomials(const int *m, const int *n)
Definition schur.cpp:233
static SchurRing * create(const PolynomialRing *R)
Definition schur.cpp:87
tableau _SMtab
Definition schur.hpp:86
tableau _SMfilled
Definition schur.hpp:87
void to_partition(const int *m, int *exp) const
Definition schur.cpp:120
void SM()
Definition schur.cpp:176
void bounds(int &lo, int &hi)
Definition schur.cpp:137
virtual ~SchurRing()
Definition schur.hpp:104
virtual void text_out(buffer &o) const
Definition schur.cpp:111
void from_partition(const int *exp, int *m) const
Definition schur.cpp:129
SchurRing()
Definition schur.hpp:103
virtual ring_elem mult_by_term(const ring_elem f, const ring_elem c, const int *m) const
Definition schur.cpp:266
void dimension(const int *exp, mpz_t result) const
Definition schur.cpp:314
static SchurRing * createInfinite(const Ring *A)
Definition schur.cpp:104
ring_elem power(const ring_elem f, mpz_srcptr n) const
Exponentiation. This is the default function, if a class doesn't define this.
Definition schur.cpp:288
virtual const SchurRing * cast_to_SchurRing() const
Definition schur.hpp:112
virtual SchurRing * cast_to_SchurRing()
Definition schur.hpp:113
bool initialize_schur()
Definition schur.cpp:75
Nterm * _SMresult
Definition schur.hpp:90
virtual void elem_text_out(buffer &o, const ring_elem f, bool p_one=true, bool p_plus=false, bool p_parens=false) const
Definition schur.cpp:351
int _SMfinalwt
Definition schur.hpp:89
PolyRing subclass implementing the Schur (symmetric-function) ring whose monomials are partitions and...
Definition schur.hpp:82
int dim
Definition schur.hpp:47
int wt
Definition schur.hpp:49
int * yloc
Definition schur.hpp:54
int maxwt
Definition schur.hpp:48
int * xloc
Definition schur.hpp:52
void resize(int max_wt)
Definition schur.cpp:20
int elem(int x, int y) const
Definition schur.cpp:31
void display() const
Definition schur.cpp:63
tableau()
Definition schur.hpp:58
void initialize(int nvars)
Definition schur.cpp:9
int * lambda
Definition schur.hpp:50
~tableau()
Definition schur.hpp:59
void fill(int *lamb, int *pp)
Definition schur.cpp:42
int * p
Definition schur.hpp:51
friend class SchurRing
Definition schur.hpp:45
int p
VALGRIND_MAKE_MEM_DEFINED & result(result)
volatile int x
Concrete commutative PolyRing — standard polynomial ring inheriting from PolyRingFlat.
const int SCHUR_MAX_WT
Definition schur.hpp:40
const int LARGE_NUMBER
Definition schur.hpp:41
Singly linked-list node carrying one term of a polynomial-ring element.
Definition ringelem.hpp:156