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

◆ rawHilbertBasis()

const Matrix * rawHilbertBasis ( const Matrix * C)

Definition at line 60 of file cone.cpp.

61{
62 try
63 {
64 // TODO: Check that C is over ZZ
65 // TODO: for cones over QQ, lift to ZZ first
66 // TODO: Normaliz also supports algebraic cones defined over
67 // algebraic number fields embedded in RR
68 const Ring *R = C->get_ring();
69 const size_t c = C->n_cols(); // rank of ambient lattice
70 const size_t r = C->n_rows(); // number of cone rays
71
72 auto rays = libnormaliz::Matrix<Integer>(r, c);
73 for (size_t i = 0; i < r; i++)
74 for (size_t j = 0; j < c; j++)
75 rays[i][j] = static_cast<Integer>(C->elem(i, j).get_mpz());
76
77 auto cone = libnormaliz::Cone<Integer>(libnormaliz::Type::cone, rays);
78 // cone.compute(libnormaliz::ConeProperty::HilbertBasis,
79 // libnormaliz::ConeProperty::DefaultMode);
80 auto HB = cone.getHilbertBasis();
81 size_t n = HB.size(); // number of basis elements
82
84 for (size_t i = 0; i < n; i++)
85 for (size_t j = 0; j < c; j++)
86 {
87 mpz_ptr z = newitem(__mpz_struct);
88 mpz_init_set(z, HB[i][j].get_mpz_t());
90 mat.set_entry(i, j, ring_elem(z));
91 }
92
93 return mat.to_matrix();
94 } catch (const exc::engine_error &e)
95 {
96 ERROR(e.what());
97 return nullptr;
98 }
99}
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
Mutable builder used to assemble an immutable Matrix one column (or one term) at a time.
virtual FreeModule * make_FreeModule() const
Definition ring.cpp:53
xxx xxx xxx
Definition ring.hpp:102
mpz_class Integer
Definition cone.cpp:17
void mpz_reallocate_limbs(mpz_ptr _z)
Definition gmp-util.h:46
const int ERROR
Definition m2-mem.cpp:55
#define newitem(T)
Definition newdelete.hpp:86
mpz_srcptr get_mpz() const
Definition ringelem.hpp:127

References Matrix::elem(), ERROR, ring_elem::get_mpz(), Matrix::get_ring(), Ring::make_FreeModule(), Matrix, mpz_reallocate_limbs(), Matrix::n_cols(), Matrix::n_rows(), newitem, MatrixConstructor::set_entry(), and MatrixConstructor::to_matrix().