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

◆ dimension1()

int Matrix::dimension1 ( ) const

Definition at line 1978 of file matrix.cpp.

1979{
1980 const PolynomialRing *P = get_ring()->cast_to_PolynomialRing();
1981 const Ring *K = (P != nullptr ? P->getCoefficientRing() : get_ring());
1982 bool is_ZZ = K->is_ZZ();
1983 int base = (is_ZZ ? 1 : 0);
1984 int result = -1;
1985 if (P != nullptr)
1986 {
1987 int n = P->n_vars();
1988 for (int i = 0; i < n_rows(); i++)
1989 {
1990 MonomialIdeal *mi = make_monideal(i);
1991 AssociatedPrimes ap(mi);
1992 int d = n - ap.codimension();
1993 if (d > result) result = d;
1994 }
1995 if (result != -1) result += base;
1996 return result;
1997 }
1998 else
1999 {
2000 // This handles the case when the coefficients are a field, or ZZ
2001 int i, j;
2002 int *dims = newarray_atomic(int, n_rows());
2003 for (i = 0; i < n_rows(); i++) dims[i] = base;
2004 for (j = 0; j < n_cols(); j++)
2005 {
2006 vec f = elem(j);
2007 if (f == nullptr) continue;
2008 if (dims[f->comp] == -1) continue;
2009 if (K->is_unit(f->coeff))
2010 dims[f->comp] = -1;
2011 else
2012 dims[f->comp] = 0;
2013 }
2014 for (i = 0; i < n_rows(); i++)
2015 if (dims[i] > result) result = dims[i];
2016 freemem(dims);
2017 return result;
2018 }
2019}
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
MonomialIdeal * make_monideal(int n, bool use_only_monomials_with_unit_coeffs=false) const
Definition matrix.cpp:1925
const Ring * getCoefficientRing() const
Definition polyring.hpp:200
int n_vars() const
Definition polyring.hpp:196
virtual bool is_ZZ() const
Definition ring.hpp:171
virtual bool is_unit(const ring_elem f) const =0
virtual const PolynomialRing * cast_to_PolynomialRing() const
Definition ring.hpp:243
static CanonicalForm base
Definition factory.cpp:289
void freemem(void *s)
Definition m2-mem.cpp:103
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define newarray_atomic(T, len)
Definition newdelete.hpp:91

References base, AssociatedPrimes::codimension(), dimension1(), elem(), freemem(), get_ring(), PolynomialRing::getCoefficientRing(), Ring::is_unit(), Ring::is_ZZ(), make_monideal(), n_cols(), n_rows(), PolynomialRing::n_vars(), newarray_atomic, and result().

Referenced by auto_reduce(), and dimension1().