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

◆ betti_minimal()

M2_arrayint gbres_comp::betti_minimal ( ) const

Definition at line 326 of file res-a2.cpp.

328{
329 int lev, i, d;
330 int lo = nodes[0]->output_free_module()->lowest_primary_degree();
331 if (n_nodes >= 2)
332 {
333 int lo1 = nodes[1]->output_free_module()->lowest_primary_degree() - 1;
334 if (lo1 < lo) lo = lo1;
335 }
336 if (n_nodes >= 3)
337 {
338 int lo2 = nodes[2]->output_free_module()->lowest_primary_degree() - 2;
339 if (lo2 < lo) lo = lo2;
340 }
341 int hi = lo;
342 int len = 1;
343
344 // Set the hi degree, and len
345 for (lev = 0; lev < n_nodes; lev++)
346 {
347 const FreeModule *F = free_module(lev);
348 if (F->rank() > 0) len = lev;
349
350 for (i = 0; i < F->rank(); i++)
351 {
352 d = F->primary_degree(i) - lev;
353 if (d > hi) hi = d;
354 }
355 }
356
357 int *bettis;
358 betti_init(lo, hi, len, bettis);
359
360 for (lev = 0; lev <= len; lev++)
361 {
362 const FreeModule *F = free_module(lev);
363
364 for (i = 0; i < F->rank(); i++)
365 {
366 d = F->primary_degree(i) - lev - lo;
367 bettis[lev + (len + 1) * d]++;
368 }
369 }
370 M2_arrayint result = betti_make(lo, hi, len, bettis);
371 freemem(bettis);
372 return result;
373}
int primary_degree(int i) const
Definition freemod.cpp:440
int rank() const
Definition freemod.hpp:105
static void betti_init(int lo, int hi, int len, int *&bettis)
Definition comp-res.cpp:151
static M2_arrayint betti_make(int lo, int hi, int len, int *bettis)
Definition comp-res.cpp:157
int n_nodes
Definition res-a2.hpp:253
gb_node ** nodes
Definition res-a2.hpp:254
const FreeModule * free_module(int level) const
Definition res-a2.cpp:274
void freemem(void *s)
Definition m2-mem.cpp:103
VALGRIND_MAKE_MEM_DEFINED & result(result)

References ResolutionComputation::betti_init(), ResolutionComputation::betti_make(), free_module(), freemem(), n_nodes, nodes, FreeModule::primary_degree(), FreeModule::rank(), and result().

Referenced by get_betti().