Macaulay2 Engine
Loading...
Searching...
No Matches

◆ rawCharSeries()

engine_RawMatrixArrayOrNull rawCharSeries ( const Matrix * M)

Definition at line 810 of file factory.cpp.

811{
812 const bool inExtension = false;
813 try
814 {
816 if (P == nullptr)
817 {
818 ERROR("expected polynomial ring");
819 return nullptr;
820 }
821
822 init_seeds();
823
824 struct enter_factory foo(P);
825 if (foo.mode == modeError) return nullptr;
826 if (foo.mode == modeGF)
827 {
828 ERROR("not implemented yet");
829 return nullptr;
830 }
831
832 CFList I;
833 for (int i = 0; i < M->n_rows(); i++)
834 {
835 for (int j = 0; j < M->n_cols(); j++)
836 {
837 const RingElement *g;
838 {
839 g = RingElement::make_raw(P, M->elem(i, j));
840 }
841 I.append(convertToFactory(*g, inExtension));
842 }
843 }
844
845 List<CFList> t = irrCharSeries(I);
846
847 engine_RawMatrixArray result =
848 getmemarraytype(engine_RawMatrixArray, t.length());
849 result->len = t.length();
850
851 int next = 0;
852 for (ListIterator<List<CanonicalForm> > ii = t; ii.hasItem(); ii++)
853 {
854 CFList u = ii.getItem();
855 engine_RawRingElementArray result1 =
856 getmemarraytype(engine_RawRingElementArray, u.length());
857 result1->len = u.length();
858 int next1 = 0;
859 for (ListIterator<CanonicalForm> j = u; j.hasItem(); j++)
860 {
861 result1->array[next1++] = convertToM2(P, j.getItem());
862 if (error()) return nullptr;
863 }
864 result->array[next++] =
865 IM2_Matrix_make1(M->rows(), u.length(), result1, false);
866 }
867
868 return result;
869 } catch (const exc::engine_error& e)
870 {
871 ERROR(e.what());
872 return nullptr;
873 }
874}
const Ring * get_ring() const
Definition matrix.hpp:134
ring_elem elem(int i, int j) const
Definition matrix.cpp:307
int n_cols() const
Definition matrix.hpp:147
int n_rows() const
Definition matrix.hpp:146
const FreeModule * rows() const
Definition matrix.hpp:144
Abstract base for the engine's polynomial-ring hierarchy.
Definition polyring.hpp:96
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
static RingElement * make_raw(const Ring *R, ring_elem f)
Definition relem.cpp:20
Front-end-visible "ring element" value: an engine ring_elem paired with the Ring* that gives it meani...
Definition relem.hpp:67
int error()
Definition error.c:48
@ modeGF
Definition factory.cpp:48
@ modeError
Definition factory.cpp:44
static const RingElement * convertToM2(const PolynomialRing *R, CanonicalForm h)
Definition factory.cpp:214
static CanonicalForm convertToFactory(mpz_srcptr p)
Definition factory.cpp:312
static void init_seeds()
Definition factory.cpp:74
const Matrix * IM2_Matrix_make1(const FreeModule *target, int ncols, const engine_RawRingElementArray M, int preference)
Definition matrix.cpp:159
const int ERROR
Definition m2-mem.cpp:55
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define getmemarraytype(S, len)
Definition m2-mem.h:142

References Ring::cast_to_PolynomialRing(), convertToFactory(), convertToM2(), Matrix::elem(), ERROR, error(), Matrix::get_ring(), getmemarraytype, IM2_Matrix_make1(), init_seeds(), RingElement::make_raw(), Matrix, enter_factory::mode, modeError, modeGF, Matrix::n_cols(), Matrix::n_rows(), result(), and Matrix::rows().