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

◆ syzygy()

void PolyRingQuotient::syzygy ( const ring_elem a,
const ring_elem b,
ring_elem & x,
ring_elem & y ) const
virtual

Implements Ring.

Definition at line 381 of file polyquotient.cpp.

385{
386 MatrixConstructor mat(make_FreeModule(1), 2);
387 mat.set_entry(0, 0, a);
388 mat.set_entry(0, 1, b);
389 Matrix *m = mat.to_matrix(); // {a,b}
390 M2_arrayint weights = M2_makearrayint(n_vars());
391 for (int i = 0; i < n_vars(); i++) weights->array[i] = 1;
392 GBComputation *G = GBComputation::choose_gb(m,
393 true, // collect syz
394 -1, // keep all rows
395 weights,
396 false,
397 -1,
398 0,
399 0,
400 0 // TBB numThreads
401 /* , max_reduction_count */
402 );
403 G->set_stop_conditions(false,
404 nullptr,
405 -1,
406 1, // syzygy limit
407 -1,
408 -1,
409 -1,
410 false,
411 nullptr);
412 G->start_computation();
413 const Matrix *s = G->get_syzygies();
414
415 // Now extract the two pieces of info
416 x = s->elem(0, 0);
417 y = s->elem(1, 0);
418 ring_elem c = preferred_associate(x);
419 ring_elem x1 = mult(c, x);
420 ring_elem y1 = mult(c, y);
421 x = x1;
422 y = y1;
423}
static GBComputation * choose_gb(const Matrix *m, M2_bool collect_syz, int n_rows_to_keep, M2_arrayint gb_weights, M2_bool use_max_degree, int max_degree, int algorithm, int strategy, int numThreads, int max_reduction_count=10)
Definition comp-gb.cpp:39
virtual ring_elem preferred_associate(ring_elem f) const
virtual ring_elem mult(const ring_elem f, const ring_elem g) const
int n_vars() const
Definition polyring.hpp:196
virtual FreeModule * make_FreeModule() const
Definition ring.cpp:53
#define Matrix
Definition factory.cpp:14
void size_t s
Definition m2-mem.cpp:271
M2_arrayint M2_makearrayint(int n)
Definition m2-types.cpp:6
volatile int x
tbb::flow::graph G

References GBComputation::choose_gb(), G, M2_makearrayint(), Ring::make_FreeModule(), Matrix, mult(), PolynomialRing::n_vars(), preferred_associate(), s, MatrixConstructor::set_entry(), MatrixConstructor::to_matrix(), and x.