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

◆ antipode()

ring_elem SkewPolynomialRing::antipode ( const ring_elem f) const
virtual

Reimplemented from Ring.

Definition at line 37 of file skewpoly.cpp.

38{
39 Nterm head;
40 Nterm *inresult = &head;
41
43
44 for (Nterm& s : f)
45 {
46 M_->to_expvector(s.monom, EXP);
47 int deg = skew_.skew_degree(EXP);
48 // sign is (-1)^ (binomial(deg,2))
49 // deg = 0: sign is 1
50 // deg = 1: sign is 1
51 // deg = 2: sign is -1
52 // deg = 3: sign is -1
53 // deg = 4: sign is 1, and so on
54 int mod4 = deg % 4;
55 int sign = sign4[mod4];
56 Nterm *t = new_term();
57 t->next = nullptr;
58 t->coeff = (sign == 1 ? s.coeff : K_->negate(s.coeff));
59 M_->copy(s.monom, t->monom);
60 inresult->next = t;
61 inresult = inresult->next;
62 }
63 inresult->next = nullptr;
64 return head.next;
65}
exponents::Exponents exponents_t
Nterm * new_term() const
Definition poly.cpp:146
SkewMultiplication skew_
Definition polyring.hpp:104
const Ring * K_
Definition polyring.hpp:123
const Monoid * M_
Definition polyring.hpp:124
void size_t s
Definition m2-mem.cpp:271
#define ALLOCATE_EXPONENTS(byte_len)
Definition monoid.hpp:62
static int sign4[4]
Definition skewpoly.cpp:35
Nterm * next
Definition ringelem.hpp:157
ring_elem coeff
Definition ringelem.hpp:158
int monom[1]
Definition ringelem.hpp:160

References ALLOCATE_EXPONENTS, Nterm::coeff, PolynomialRing::exp_size, PolynomialRing::K_, PolynomialRing::M_, Nterm::monom, PolyRing::new_term(), Nterm::next, s, sign4, and PolynomialRing::skew_.