Macaulay2 Engine
Loading...
Searching...
No Matches
freemod.hpp
Go to the documentation of this file.
1// Copyright 1995 Michael E. Stillman
2
3#ifndef _FreeModule_hh_
4#define _FreeModule_hh_
5
42
43#include "ring.hpp"
44#include "schorder.hpp"
45
46class Matrix;
47class GBMatrix;
48
49// an include file under mingw32 defines a macro with the name FreeModule:
50#undef FreeModule
51
66{
67 friend class Ring;
68 friend class ResF4toM2Interface;
69 FreeModule(const Ring *R, int n, bool has_schreyer_order);
70
71 protected:
72 gc_vector<monomial> components; // Degrees of each component
73 SchreyerOrder *schreyer; // NULL, if not a Schreyer order...
74
75 const Ring *R;
76
77 protected:
78 virtual unsigned int computeHashValue() const;
79
80 void initialize(const Ring *RR);
81
82 virtual FreeModule *new_free() const;
83
84 public:
85 static FreeModule *make_schreyer(const Matrix *m);
86 static FreeModule *make_schreyer(const GBMatrix *m);
87
89
90 virtual ~FreeModule();
91
92 public:
93 void append(const_monomial d);
95 const_monomial base_monom,
96 int compare_num); // append to a Schreyer order.
97 // WARNING: change_degree modifies the degree, and should only be used during
98 // the construction of a free module (or matrix).
99 void change_degree(int i, const_monomial deg);
100
101 public:
102 const Ring *get_ring() const { return R; }
103 const SchreyerOrder *get_schreyer_order() const { return schreyer; }
104 const_monomial degree(int i) const { return components[i]; }
105 int rank() const { return components.size(); }
106 int primary_degree(int i) const;
107
108 bool is_equal(const FreeModule *F) const;
109
110 FreeModule *sub_space(int n) const;
112 FreeModule *transpose() const;
113 FreeModule *direct_sum(const FreeModule *G) const;
115 FreeModule *tensor(const FreeModule *G) const;
117 FreeModule *exterior(int p) const;
118 FreeModule *symm(int p) const;
119
121 M2_arrayintOrNull hi) const;
122
123 void direct_sum_to(const FreeModule *G);
124 int lowest_primary_degree() const;
125 int highest_primary_degree() const;
126
127 void text_out(buffer &o) const;
128};
129
130#endif
131
132// Local Variables:
133// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
134// indent-tabs-mode: nil
135// End:
EngineObject()
Definition hash.hpp:66
virtual ~FreeModule()
Definition freemod.cpp:120
FreeModule * transpose() const
Definition freemod.cpp:227
M2_arrayintOrNull select_by_degrees(M2_arrayintOrNull lo, M2_arrayintOrNull hi) const
Definition freemod.cpp:415
virtual FreeModule * new_free() const
Definition freemod.cpp:125
FreeModule * tensor(const FreeModule *G) const
Definition freemod.cpp:271
const Ring * get_ring() const
Definition freemod.hpp:102
SchreyerOrder * schreyer
Definition freemod.hpp:73
const_monomial degree(int i) const
Definition freemod.hpp:104
gc_vector< monomial > components
Definition freemod.hpp:72
void initialize(const Ring *RR)
Definition freemod.cpp:16
void change_degree(int i, const_monomial deg)
Definition freemod.cpp:145
void append(const_monomial d)
Definition freemod.cpp:130
FreeModule * exterior(int p) const
Definition freemod.cpp:296
void direct_sum_to(const FreeModule *G)
Definition freemod.cpp:263
FreeModule * symm(int p) const
Definition freemod.cpp:395
FreeModule(const Ring *R, int n, bool has_schreyer_order)
Definition freemod.cpp:32
bool is_equal(const FreeModule *F) const
Definition freemod.cpp:154
FreeModule * shift(const_monomial d) const
Definition freemod.cpp:178
virtual unsigned int computeHashValue() const
Definition freemod.cpp:22
int primary_degree(int i) const
Definition freemod.cpp:440
const Ring * R
Definition freemod.hpp:75
Matrix * get_induced_order() const
Definition freemod.cpp:100
friend class ResF4toM2Interface
Definition freemod.hpp:68
FreeModule * sub_space(int n) const
Definition freemod.cpp:197
int lowest_primary_degree() const
Definition freemod.cpp:447
void append_schreyer(const_monomial d, const_monomial base_monom, int compare_num)
Definition freemod.cpp:137
FreeModule * schur(const_monomial m) const
friend class Ring
Definition freemod.hpp:67
FreeModule * direct_sum(const FreeModule *G) const
Definition freemod.cpp:244
const SchreyerOrder * get_schreyer_order() const
Definition freemod.hpp:103
int highest_primary_degree() const
Definition freemod.cpp:459
int rank() const
Definition freemod.hpp:105
static FreeModule * make_schreyer(const Matrix *m)
Definition freemod.cpp:53
void text_out(buffer &o) const
Definition freemod.cpp:471
Engine-side free module R^n over a Ring.
Definition freemod.hpp:66
Per-component tie-breaker data for a Schreyer monomial order on a FreeModule.
Definition schorder.hpp:68
#define Matrix
Definition factory.cpp:14
int p
const int * const_monomial
Definition imonorder.hpp:45
M2_arrayint M2_arrayintOrNull
Definition m2-types.h:99
typename std::vector< T, gc_allocator< T > > gc_vector
a version of the STL vector, which allocates its backing memory with gc.
Definition newdelete.hpp:76
tbb::flow::graph G
Ring — the legacy abstract base class for every coefficient and polynomial ring.
SchreyerOrder — per-basis-element data backing the Schreyer order on a free module.
gbvector-side matrix: a target FreeModule plus a list of gbvector* columns living in it.
Definition Eschreyer.hpp:54