20#ifndef _res_schreyer_frame_hpp_
21#define _res_schreyer_frame_hpp_
157 friend class DependencyGraph;
177 void show(
int len)
const;
187 void getBounds(
int& loDegree,
int& hiDegree,
int& length)
const;
210 return level(lev)[component].mMonom;
215 int rank(
int slanted_degree,
int lev);
218 template<
typename Gen>
221 template<
typename Gen>
224 template<
typename Gen>
234 int top_slanted_degree,
270 return level(lev)[component].mDegree;
276 return mFrame.mLevels[lev].mSchreyerOrder;
280 return mFrame.mLevels[lev].mSchreyerOrder;
283 std::vector<FrameElement>&
level(
int lev)
285 return mFrame.mLevels[lev].mElements;
287 const std::vector<FrameElement>&
level(
int lev)
const
289 return mFrame.mLevels[lev].mElements;
380 mtbb::task_arena mScheduler;
381 DependencyGraph mDepGraph;
383 mtbb::task_arena& getScheduler() {
return mScheduler; }
BettiDisplay — engine-side container and renderer for the Betti table of a free resolution.
Engine-side Betti table: a (degree, homological level) rectangle of integers.
F4-style engine that computes one (level, degree) slice of a free resolution into the host SchreyerFr...
The polynomial-ring view the F4 resolution engine reduces against: coefficient arithmetic plus the en...
Polynomial type used by the F4 resolution engine: parallel coefficient vector and concatenated monomi...
int degree(int lev, component_index component) const
int rankUsingDenseMatrixFlint(Gen &D, bool transposed=true)
std::vector< std::pair< int, int > > mMinimalizeTODO
void computeSyzygies(int slanted_degree, int maxlevel)
int rankUsingSparseMatrix(Gen &D)
void computeRanks(int slanted_degree, int maxlevel)
SchreyerFrame(const ResPolyRing &R, int max_level, int numThreads, bool parallelizeByDegree)
void computeRank(int slanted_degree, int lev)
bool mParallelizeByDegree
SchreyerFrameTypes::FrameElement FrameElement
BettiDisplay minimalBettiNumbers(bool stop_after_degree, int top_slanted_degree, int length_limit)
void setSchreyerOrder(int lev)
BettiDisplay mBettiMinimal
const ResSchreyerOrder & schreyerOrder(int lev) const
int rank(int slanted_degree, int lev)
enum SchreyerFrame::@107076371201376153077324375251043314133302145334 mState
M2_arrayint getBettiFrame() const
const std::vector< FrameElement > & level(int lev) const
component_index insertElements(int lev, component_index elem)
void insertLevelZero(res_packed_monomial monom, int degree, int maxdeglevel0)
component_index computeNextLevel()
const ResMonoid & monoid() const
ResMemoryBlock< res_monomial_word > & monomialBlock()
double timeResetHashTable
component_index computeIdealQuotient(int lev, component_index begin, component_index elem)
bool insertLevelOne(res_packed_monomial monom, int degree, ResPolynomial &syzygy)
ResMemoryBlock< PreElement > mPreElements
ResMemoryBlock< res_varpower_word > mVarpowers
void start_computation(StopConditions &stop)
BettiDisplay mComputationStatus
M2_arrayint getBetti(int type)
SchreyerFrameTypes::PreElement PreElement
std::vector< FrameElement > & level(int lev)
void insertBasic(int lev, res_packed_monomial monom, int degree)
const ResPolyRing & ring() const
PreElement * createQuotientElement(res_packed_monomial m1, res_packed_monomial m)
const ResPolyRing & mRing
double timeComputeSparseRanks
const VectorArithmetic & vectorArithmetic() const
ResMemoryBlock< res_monomial_word > mMonomialSpace
void getBounds(int &loDegree, int &hiDegree, int &length) const
void showMemoryUsage() const
BettiDisplay mBettiNonminimal
res_packed_monomial monomial(int lev, component_index component)
bool debugCheckOrderAll() const
int rankUsingDenseMatrix(Gen &D, bool transposed=true)
ResSchreyerOrder & schreyerOrder(int lev)
void fillinSyzygies(int slanted_deg, int lev)
std::unique_ptr< F4Res > mComputer
bool debugCheckOrder(int lev) const
Runtime dispatcher that hides the concrete coefficient ring behind a std::variant of ConcreteVectorAr...
Engine-to-interpreter type vocabulary across the C++ / .dd boundary.
Engine TBB shim — single point of inclusion for every parallel primitive.
DependencyGraph — TBB flow-graph over (level, slanted-degree) cells of a Schreyer-frame resolution.
ResMemoryBlock<T, NSLAB> — resolution-side templated slab bump allocator.
ResMonoid dispatcher — single typedef switch between ResMonoidDense and ResMonoidSparse.
res_varpower_word * res_varpower_monomial
res_monomial_word * res_packed_monomial
Typed-monomial vocabulary shared by ResMonoid, ResPolyRing, SchreyerFrame, and F4Res.
ResPolyRing and ResPolynomial — resolution-tuned polynomial-ring view and value type.
ResSchreyerOrder — per-free-module-summand data implementing the Schreyer order on the next level.
TermIterator< Nterm > begin(Nterm *ptr)
Per-level Schreyer-order data attached to a SchreyerFrame::Level.
std::vector< Level > mLevels
The full frame: a vector of Levels indexed by homological degree.
std::vector< FrameElement > mElements
ResSchreyerOrder mSchreyerOrder
One homological level of the frame: the FrameElements living at that level plus the Schreyer order us...
FrameElement(res_packed_monomial monom)
res_packed_monomial mMonom
FrameElement(res_packed_monomial monom, int deg)
One generator within a SchreyerFrame::Level.
Lightweight (varpower_monomial, degree) pair used during the pre-sort phase that feeds SchreyerFrame:...
Bundle of optional early-termination knobs the front end can attach to a long-running Computation.