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

◆ rawIdealReorder()

M2_arrayintOrNull rawIdealReorder ( const Matrix * M)

Definition at line 752 of file factory.cpp.

753{
754 const bool inExtension = false;
755 try
756 {
757 init_seeds();
759 if (P == nullptr)
760 {
761 ERROR("expected polynomial ring");
762 return nullptr;
763 }
764 const int N = P->n_vars();
765
766 struct enter_factory foo(P);
767 if (foo.mode == modeError) return nullptr;
768 if (foo.mode == modeGF)
769 {
770 ERROR("not implemented yet");
771 return nullptr;
772 }
773
774 CFList I;
775 int i;
776 for (i = 0; i < M->n_rows(); i++)
777 {
778 for (int j = 0; j < M->n_cols(); j++)
779 {
780 const RingElement *g;
781 {
782 g = RingElement::make_raw(P, M->elem(i, j));
783 }
784 I.append(convertToFactory(*g, inExtension));
785 }
786 }
787
788 if (I.length() == 0) {
789 ERROR("expected at least one generator");
790 return nullptr;
791 }
792
793 List<int> t = neworderint(I);
794
795 int n = t.length();
796 gc_vector<int> u(N);
797 ListIterator<int> ii(t);
798 for (i = 0; ii.hasItem(); ii++, i++)
799 u[i] = (n - 1) - (ii.getItem() - 1); // REVERSE!
800 std::reverse(u.begin(), u.begin() + n);
801 for (i = n; i < N; i++) u[i] = i;
803 } catch (const exc::engine_error& e)
804 {
805 ERROR(e.what());
806 return nullptr;
807 }
808}
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
int n_vars() const
Definition polyring.hpp:196
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
@ modeGF
Definition factory.cpp:48
@ modeError
Definition factory.cpp:44
static CanonicalForm convertToFactory(mpz_srcptr p)
Definition factory.cpp:312
static void init_seeds()
Definition factory.cpp:74
const int ERROR
Definition m2-mem.cpp:55
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
M2_arrayint stdvector_to_M2_arrayint(const std::vector< T > &v)
Definition util.hpp:79

References Ring::cast_to_PolynomialRing(), convertToFactory(), Matrix::elem(), ERROR, Matrix::get_ring(), init_seeds(), RingElement::make_raw(), Matrix, enter_factory::mode, modeError, modeGF, Matrix::n_cols(), Matrix::n_rows(), PolynomialRing::n_vars(), and stdvector_to_M2_arrayint().