From 3e7fed4e412771a255f933405882d4066f447614 Mon Sep 17 00:00:00 2001 From: kalmar Date: Tue, 25 Jul 2017 14:44:37 +0200 Subject: [PATCH] totally pm-free multiplication! --- src/GroupRings.jl | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/GroupRings.jl b/src/GroupRings.jl index e26667d..3c84fe3 100644 --- a/src/GroupRings.jl +++ b/src/GroupRings.jl @@ -365,19 +365,30 @@ function mul!{T}(result::GroupRingElem{T}, X::GroupRingElem, Y::GroupRingElem) RG = parent(X) - s = size(RG.pm) + if isdefined(RG, :pm) + s = size(RG.pm) - for j::Int in eachindex(Y.coeffs) - if Y.coeffs[j] != z - j <= s[2] || throw("Element in Y outside of support of RG.pm") - for i::Int in eachindex(X.coeffs) - if X.coeffs[i] != z - i <= s[1] || throw("Element in X outside of support of RG.pm") - if RG.pm[i,j] == 0 - g::elem_type(parent(X).group) = RG.basis[i]*RG.basis[j] - RG.pm[i,j] = RG.basis_dict[g] + for j::Int in 1:length(Y.coeffs) + if Y.coeffs[j] != z + j <= s[2] || throw("Element in Y outside of support of RG.pm") + for i::Int in 1:length(X.coeffs) + if X.coeffs[i] != z + i <= s[1] || throw("Element in X outside of support of RG.pm") + if RG.pm[i,j] == 0 + RG.pm[i,j] = RG.basis_dict[RG.basis[i]*RG.basis[j]] + end + result.coeffs[RG.pm[i,j]] += X[i]*Y[j] + end + end + end + end + else + for j::Int in 1:length(Y.coeffs) + if Y.coeffs[j] != z + for i::Int in 1:length(X.coeffs) + if X.coeffs[i] != z + result[RG.basis[i]*RG.basis[j]] += X[i]*Y[j] end - result.coeffs[RG.pm[i,j]] += X[i]*Y[j] end end end