Frobby
0.9.5
|
Invariant: either the slice is a trivial base case, or removeDoubleLcm returns false. More...
#include <MsmSlice.h>
Public Member Functions | |
MsmSlice (MsmStrategy &strategy) | |
MsmSlice (MsmStrategy &strategy, const Ideal &ideal, const Ideal &subtract, const Term &multiply, TermConsumer *consumer) | |
TermConsumer * | getConsumer () |
virtual bool | baseCase (bool simplified) |
Returns true if this slice is a base case slice, and in that case produces output in a derivative-specific way. More... | |
virtual Slice & | operator= (const Slice &slice) |
Performs a deep copy of slice into this object. More... | |
virtual bool | simplifyStep () |
Like simplify(), except that only one simplification step is performed. More... | |
void | setToProjOf (const MsmSlice &slice, const Projection &projection, TermConsumer *consumer) |
void | swap (MsmSlice &slice) |
virtual bool | innerSlice (const Term &pivot) |
Sets this object to the inner slice according to pivot. More... | |
virtual void | outerSlice (const Term &pivot) |
Sets this object to the outer slice according to pivot. More... | |
Public Member Functions inherited from Slice | |
Slice (SliceStrategy &strategy) | |
Construct the slice in a ring of zero variables. More... | |
Slice (SliceStrategy &strategy, const Ideal &ideal, const Ideal &subtract, const Term &multiply) | |
Construct the slice . More... | |
virtual | ~Slice () |
size_t | getVarCount () const |
Returns the number of variables in the ambient ring. More... | |
const Ideal & | getIdeal () const |
Returns for a slice . More... | |
Ideal & | getSubtract () |
Returns for a slice . More... | |
const Ideal & | getSubtract () const |
Returns for a slice . More... | |
Term & | getMultiply () |
Returns for a slice . More... | |
const Term & | getMultiply () const |
Returns for a slice . More... | |
const Term & | getLcm () const |
Returns the least common multiple of the generators of getIdeal(). More... | |
void | print (FILE *file) const |
Write a text representation of this object to file in a format appropriate for debugging. More... | |
void | resetAndSetVarCount (size_t varCount) |
Resets this slice to in an ambient polynomial ring of varCount variables. More... | |
void | clearIdealAndSubtract () |
Clears getIdeal() and getSubtract() and does not change getMultiply(). More... | |
void | singleDegreeSortIdeal (size_t var) |
Calls Ideal::singleDegreeSort on getIdeal(). More... | |
bool | normalize () |
Removes those generators of getIdeal() that are strictly divisible by some generator of getSubtract(). More... | |
bool | adjustMultiply () |
Ensure that for each var, var appears to the first power in some generator of getIdeal(). More... | |
virtual bool | simplify () |
Simplifies this object such that it may become simpler without changing the content. More... | |
virtual void | run (TaskEngine &tasks) |
Does whatever work this task represents. More... | |
virtual void | dispose () |
Called when the task is no longer used but run has not and will not be called. More... | |
Public Member Functions inherited from Task | |
virtual | ~Task () |
Private Member Functions | |
bool | removeDoubleLcm () |
virtual bool | getLowerBound (Term &bound, size_t var) const |
Calculates a lower bound that depends on var. More... | |
void | twoVarBaseCase () |
void | oneMoreGeneratorBaseCase () |
bool | twoNonMaxBaseCase () |
Private Attributes | |
TermConsumer * | _consumer |
Additional Inherited Members | |
Protected Member Functions inherited from Slice | |
void | setToProjOf (const Slice &slice, const Projection &projection) |
Set this object to be the projection of slice according to projection. More... | |
void | swap (Slice &slice) |
Simultaneously set the value of this object to that of slice and vice versa. More... | |
bool | pruneSubtract () |
Removes those generators of subtract that do not strictly divide the lcm of getIdeal(), or that belong to getIdeal(). More... | |
bool | applyLowerBound () |
Calculates a lower bound on the content of the slice using getLowerBound() and calls innerSlice with that lower bound. More... | |
Protected Attributes inherited from Slice | |
Ideal | _ideal |
The of a slice . More... | |
Ideal | _subtract |
The of a slice . More... | |
Term | _multiply |
The of a slice . More... | |
size_t | _varCount |
The number of variables in the ambient polynomial ring. More... | |
Term | _lcm |
The lcm of getIdeal() if _lcmUpdated is true, and otherwise the value is undefind. More... | |
bool | _lcmUpdated |
Indicates whether _lcm is correct. More... | |
size_t | _lowerBoundHint |
A hint that starting simplification through a lower bound at the variable indicated by _lowerBoundHint is likely to yield a simplification, or at least more likely than a random other variable. More... | |
SliceStrategy & | _strategy |
Invariant: either the slice is a trivial base case, or removeDoubleLcm returns false.
Definition at line 33 of file MsmSlice.h.
MsmSlice::MsmSlice | ( | MsmStrategy & | strategy | ) |
Definition at line 23 of file MsmSlice.cpp.
MsmSlice::MsmSlice | ( | MsmStrategy & | strategy, |
const Ideal & | ideal, | ||
const Ideal & | subtract, | ||
const Term & | multiply, | ||
TermConsumer * | consumer | ||
) |
Definition at line 28 of file MsmSlice.cpp.
|
virtual |
Returns true if this slice is a base case slice, and in that case produces output in a derivative-specific way.
If simplified is true, then the slice must be fully simplified when calling baseCase(), while otherwise there is no such requirement.
Implements Slice.
Definition at line 40 of file MsmSlice.cpp.
|
inline |
Definition at line 42 of file MsmSlice.h.
|
privatevirtual |
Calculates a lower bound that depends on var.
To be precise, the lower bound that is calculated is
where is var. Note that the real functionality is slightly more sophisticated. Returns false and does not set bound if a base case is detected (a base case is not guaranteed to be detected).
rename lower bound to divisor.
describe how the real functionality is slightly more sophisticated.
Implements Slice.
Definition at line 213 of file MsmSlice.cpp.
|
virtual |
Sets this object to the inner slice according to pivot.
To be precise, the slice is replaced by where is the pivot, and the slice is then normalized (see normalize).
Returns true if any of the colon operations and were non-trivial in the sense that it changed the support of any minimal generator.
Reimplemented from Slice.
Definition at line 143 of file MsmSlice.cpp.
|
private |
Definition at line 280 of file MsmSlice.cpp.
Performs a deep copy of slice into this object.
Implements Slice.
Definition at line 114 of file MsmSlice.cpp.
|
virtual |
Sets this object to the outer slice according to pivot.
To be precise, the slice is replaced by where is the pivot, and the slice is then normalized (see normalize).
Note that if pivot is a pure power, then pivot is not actually inserted into since doing so has no effect on the content after the normalization.
Reimplemented from Slice.
Definition at line 155 of file MsmSlice.cpp.
|
private |
Definition at line 195 of file MsmSlice.cpp.
void MsmSlice::setToProjOf | ( | const MsmSlice & | slice, |
const Projection & | projection, | ||
TermConsumer * | consumer | ||
) |
Definition at line 134 of file MsmSlice.cpp.
|
virtual |
Like simplify(), except that only one simplification step is performed.
If the return value is true, then the Slice may not be fully simplified yet. Iterating simplifyStep() has the same result as calling simplify(), though the performance characteristics can be worse.
Implements Slice.
Definition at line 122 of file MsmSlice.cpp.
void MsmSlice::swap | ( | MsmSlice & | slice | ) |
Definition at line 165 of file MsmSlice.cpp.
|
private |
Definition at line 343 of file MsmSlice.cpp.
|
private |
Definition at line 244 of file MsmSlice.cpp.
|
private |
Definition at line 98 of file MsmSlice.h.