MCPcopy Create free account
hub / github.com/Singular/Singular / multring

Function multring

Singular/dyn_modules/Order/nforder.cpp:553–604  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

551
552#ifdef HAVE_RINGS
553number multring(bigintmat *nbase, nforder *o, number p) {
554 coeffs R = o->basecoeffs();
555 number divi;
556 int n = o->getDim();
557
558 bigintmat *inv = new bigintmat(n, n, R);
559 divi = nbase->pseudoinv(inv);
560
561 // Zusammenbau der "langen" Matrix
562 bigintmat *lon = new bigintmat(n, 0, R);
563 bigintmat *oldlon;
564 bigintmat *mm = new bigintmat(n, n, R);
565 bigintmat *temp = new bigintmat(n, 1, R);
566 bigintmat *nochnetemp = new bigintmat(n, n, R);
567
568 for (int i=1; i<=n; i++) {
569 nbase->getcol(i, temp);
570 o->multmap(temp, mm);
571 bimMult(inv, mm, nochnetemp);
572 mm->copy(nochnetemp);
573 mm->inpTranspose();
574 oldlon = lon;
575 lon = new bigintmat(n, (i)*n, o->basecoeffs());
576 lon->concatcol(oldlon, mm);
577 delete oldlon;
578 }
579
580 lon->skaldiv(divi);
581
582 bigintmat * red;
583 if (1) {
584 bigintmat * cmp = lon->modhnf(p, o->basecoeffs());
585 red = cmp;
586 } else {
587 lon->hnf();
588 red = new bigintmat(n, n, o->basecoeffs());
589 lon->getColRange((n-1)*n+1, n, red);
590 }
591 delete lon;
592 red->inpTranspose();
593
594 number divisor = red->pseudoinv(nbase);
595 nbase->hnf();
596
597 delete inv;
598 delete mm;
599 delete temp;
600 delete red;
601 delete nochnetemp;
602 n_Delete(&divi, o->basecoeffs());
603 return divisor;
604}
605#endif
606
607#ifdef HAVE_RINGS

Callers 1

onestepFunction · 0.85

Calls 14

bimMultFunction · 0.85
n_DeleteFunction · 0.85
getDimMethod · 0.80
pseudoinvMethod · 0.80
getcolMethod · 0.80
multmapMethod · 0.80
inpTransposeMethod · 0.80
concatcolMethod · 0.80
skaldivMethod · 0.80
modhnfMethod · 0.80
hnfMethod · 0.80
getColRangeMethod · 0.80

Tested by

no test coverage detected