92 virtual ~iterator() {}
93 virtual void set(
size_t col) = 0;
94 virtual void next() = 0;
95 virtual bool valid() = 0;
96 virtual size_t row() = 0;
97 virtual void copy_ring_elem(ring_elem &a) = 0;
102 virtual iterator *
begin()
const = 0;
133 engine_RawRingElementArray values);
138 template <
typename MatType>
144 template <
typename MatType>
150 template <
typename MatT>
154 if (P == 0)
return 0;
158 template <
typename MatT>
162 if (P == 0)
return 0;
301 bool is_symm_or_hermitian)
const = 0;
305 bool is_symm_or_hermitian)
const = 0;
310 bool use_divide_and_conquer)
const = 0;
314 bool assume_full_rank)
const = 0;
346 virtual size_t rank()
const = 0;
406 int nOutputs)
const = 0;
MutableEngineObject wrapper holding a raw SLEvaluator*.
MutableEngineObject wrapper that owns an SLProgram via unique_ptr.
virtual size_t n_rows() const =0
virtual engine_RawArrayIntPairOrNull LQUPFactorizationInPlace(bool transpose)
LU decomposition routines /////.
virtual bool dot_product(size_t i, size_t j, ring_elem &result) const =0
virtual const RingElement * determinant() const =0
virtual MutableMatrix * copy(bool prefer_dense) const =0
virtual MutableMatrix * nullSpace() const =0
virtual void triangularSolve(MutableMatrix *x, int m, int strategy)=0
virtual bool column2by2(size_t c1, size_t c2, ring_elem a1, ring_elem a2, ring_elem b1, ring_elem b2)=0
MutableMat< MatType > * cast_to_MutableMat()
const MutableMat< MatType > * cast_to_MutableMat() const
virtual MutableMatrix * mult(const RingElement *f) const =0
virtual Matrix * to_matrix() const =0
virtual bool row_op(size_t i, ring_elem r, size_t j)=0
virtual bool scale_column(size_t i, ring_elem r)=0
virtual size_t n_cols() const =0
virtual bool interchange_rows(size_t i, size_t j)=0
virtual bool interchange_columns(size_t i, size_t j)=0
virtual bool QR(MutableMatrix *Q, MutableMatrix *R, bool return_QR) const =0
virtual size_t lead_row(size_t col) const =0
virtual bool is_equal(const MutableMatrix *B) const =0
virtual bool divide_row(size_t i, ring_elem r)=0
virtual bool get_entry(size_t r, size_t c, ring_elem &result) const =0
virtual void addMultipleTo(const MutableMatrix *A, const MutableMatrix *B)=0
virtual size_t rank() const =0
Fast linear algebra routines (well, fast for some rings).
virtual M2_arrayintOrNull rankProfile(bool row_profile) const =0
virtual bool SVD(MutableMatrix *Sigma, MutableMatrix *U, MutableMatrix *Vt, bool use_divide_and_conquer) const =0
virtual MutableMatrix * invert() const =0
virtual gmp_RRorNull norm() const =0
virtual bool eigenvectors(MutableMatrix *eigenvals, MutableMatrix *eigenvecs, bool is_symm_or_hermitian) const =0
static MutableMatrix * zero_matrix(const Ring *R, size_t nrows, size_t ncols, bool dense)
virtual bool is_zero() const =0
static MutableMatrix * from_matrix(const Matrix *N, bool is_dense)
virtual size_t lead_row(size_t col, ring_elem &result) const =0
virtual bool row2by2(size_t r1, size_t r2, ring_elem a1, ring_elem a2, ring_elem b1, ring_elem b2)=0
virtual bool column_permute(size_t start_col, M2_arrayint perm)=0
virtual MutableMatrix * solveInvertible(const MutableMatrix *B) const =0
virtual bool is_dense() const =0
virtual bool delete_rows(size_t i, size_t j)=0
virtual void reduce_by_pivots()=0
void text_out(buffer &o) const
virtual MutableMatrix * transpose() const =0
virtual bool scale_row(size_t i, ring_elem r)=0
virtual MutableMatrix * submatrix(M2_arrayint rows, M2_arrayint cols) const =0
bool set_values(M2_arrayint rows, M2_arrayint cols, engine_RawRingElementArray values)
virtual MutableMatrix * negate() const =0
virtual bool insert_columns(size_t i, size_t n_to_add)=0
virtual bool eigenvalues(MutableMatrix *eigenvals, bool is_symm_or_hermitian) const =0
virtual MutableMatrix * submatrix(M2_arrayint cols) const =0
virtual bool column_op(size_t i, ring_elem r, size_t j)=0
virtual bool row_permute(size_t start_row, M2_arrayint perm)=0
virtual const Ring * get_ring() const =0
virtual void clean(gmp_RR epsilon)=0
virtual MutableMatrix * subtract(const MutableMatrix *B) const =0
virtual bool insert_rows(size_t i, size_t n_to_add)=0
virtual void subtractMultipleTo(const MutableMatrix *A, const MutableMatrix *B)=0
virtual M2_arrayintOrNull LU(MutableMatrix *L, MutableMatrix *U) const =0
virtual bool delete_columns(size_t i, size_t j)=0
virtual MutableMatrix * mult(const MutableMatrix *B) const =0
virtual M2SLEvaluator * createSLEvaluator(M2SLProgram *P, M2_arrayint constsPos, M2_arrayint varsPos) const =0
virtual M2_arrayintOrNull LUincremental(std::vector< size_t > &P, const MutableMatrix *v, int m)=0
virtual bool set_entry(size_t r, size_t c, const ring_elem a)=0
virtual bool least_squares(const MutableMatrix *b, MutableMatrix *x, bool assume_full_rank) const =0
virtual MutableMatrix * solveLinear(const MutableMatrix *B) const =0
virtual M2SLEvaluator * createCompiledSLEvaluator(M2_string libName, int nInputs, int nOutputs) const =0
const MatT * coerce_const() const
virtual bool divide_column(size_t i, ring_elem r)=0
virtual MutableMatrix * add(const MutableMatrix *B) const =0
virtual MutableMatrix * rowReducedEchelonForm() const =0
static MutableMatrix * identity(const Ring *R, size_t nrows, bool dense)
Front-end-visible "ring element" value: an engine ring_elem paired with the Ring* that gives it meani...
namespace exc — internal C++ exception types and the TRY / CATCH macro pair.
EngineObject / MutableEngineObject — shared bases that supply the hash an M2 interpreter object expec...
VALGRIND_MAKE_MEM_DEFINED & result(result)
M2_arrayint M2_arrayintOrNull
engine_RawArrayIntPair engine_RawArrayIntPairOrNull
void set(DMat< RT > &A, MatrixWindow wA, const DMat< RT > &B, MatrixWindow wB)
RingElement — tagged (Ring*, ring_elem) pair, the engine's universal element type.
TermIterator< Nterm > begin(Nterm *ptr)