|
| 1 | +const _APL = MP.AbstractPolynomialLike |
| 2 | +# We don't define it for all `AlgebraElement` as this would be type piracy |
| 3 | +const _AE = SA.AlgebraElement{<:Algebra} |
| 4 | + |
| 5 | +Base.:(+)(p::_APL, q::_AE) = +(p, MP.polynomial(q)) |
| 6 | +Base.:(+)(p::_AE, q::_APL) = +(MP.polynomial(p), q) |
| 7 | +Base.:(-)(p::_APL, q::_AE) = -(p, MP.polynomial(q)) |
| 8 | +Base.:(-)(p::_AE, q::_APL) = -(MP.polynomial(p), q) |
| 9 | + |
| 10 | +Base.:(+)(p, q::_AE) = +(constant_algebra_element(typeof(SA.basis(q)), p), q) |
| 11 | +function Base.:(+)(p::_AE, q) |
| 12 | + return +(MP.polynomial(p), constant_algebra_element(typeof(SA.basis(p)), q)) |
| 13 | +end |
| 14 | +function Base.:(-)(p, q::_AE) |
| 15 | + return -(constant_algebra_element(typeof(SA.basis(q)), p), MP.polynomial(q)) |
| 16 | +end |
| 17 | +function Base.:(-)(p::_AE, q) |
| 18 | + return -(MP.polynomial(p), constant_algebra_element(typeof(SA.basis(p)), q)) |
| 19 | +end |
| 20 | + |
| 21 | +function Base.:(+)(p::_AE, q::_AE) |
| 22 | + return MA.operate_to!(SA._preallocate_output(+, p, q), +, p, q) |
| 23 | +end |
| 24 | + |
| 25 | +function Base.:(-)(p::_AE, q::_AE) |
| 26 | + return MA.operate_to!(SA._preallocate_output(-, p, q), -, p, q) |
| 27 | +end |
0 commit comments