mirror of
https://github.com/kalmarek/GroupRings.jl.git
synced 2024-12-29 11:00:28 +01:00
minor changes
This commit is contained in:
parent
31cf3b552d
commit
002954f5de
@ -21,7 +21,7 @@ mutable struct GroupRing{Gr<:GroupOrNCRing, T<:GroupOrNCRingElem} <: NCRing
|
|||||||
group::Gr
|
group::Gr
|
||||||
basis::Vector{T}
|
basis::Vector{T}
|
||||||
basis_dict::Dict{T, Int}
|
basis_dict::Dict{T, Int}
|
||||||
pm::Array{Int,2}
|
pm::Matrix{Int}
|
||||||
|
|
||||||
function GroupRing(G::Gr, basis::Vector{T};
|
function GroupRing(G::Gr, basis::Vector{T};
|
||||||
cachedmul::Bool=false) where {Gr, T}
|
cachedmul::Bool=false) where {Gr, T}
|
||||||
@ -75,7 +75,7 @@ function GroupRing(G::Generic.SymmetricGroup; cachedmul::Bool=false)
|
|||||||
return GroupRing(G, vec(collect(G)), cachedmul=cachedmul)
|
return GroupRing(G, vec(collect(G)), cachedmul=cachedmul)
|
||||||
end
|
end
|
||||||
|
|
||||||
function GroupRing(G::Group, basis::Vector, pm::Array{Int,2})
|
function GroupRing(G::Group, basis::AbstractVector, pm::AbstractMatrix{<:Integer})
|
||||||
size(pm,1) == size(pm,2) || throw("pm must be square, got $(size(pm))")
|
size(pm,1) == size(pm,2) || throw("pm must be square, got $(size(pm))")
|
||||||
eltype(basis) == elem_type(G) || throw("Basis must consist of elements of $G")
|
eltype(basis) == elem_type(G) || throw("Basis must consist of elements of $G")
|
||||||
return GroupRing(G, basis, reverse_dict(basis), pm)
|
return GroupRing(G, basis, reverse_dict(basis), pm)
|
||||||
@ -95,9 +95,7 @@ parent(g::GroupRingElem) = g.parent
|
|||||||
|
|
||||||
parent_type(X::GroupRingElem) = typeof(parent(X))
|
parent_type(X::GroupRingElem) = typeof(parent(X))
|
||||||
|
|
||||||
import Base.promote_rule
|
Base.promote_rule(::Type{GroupRingElem{T}}, ::Type{GroupRingElem{S}}) where {T,S} =
|
||||||
|
|
||||||
promote_rule(::Type{GroupRingElem{T}}, ::Type{GroupRingElem{S}}) where {T,S} =
|
|
||||||
GroupRingElem{promote_type(T,S)}
|
GroupRingElem{promote_type(T,S)}
|
||||||
|
|
||||||
function convert(::Type{T}, X::GroupRingElem) where T<:Number
|
function convert(::Type{T}, X::GroupRingElem) where T<:Number
|
||||||
@ -297,16 +295,8 @@ function mul!(a::T, X::GroupRingElem{T}) where T
|
|||||||
return X
|
return X
|
||||||
end
|
end
|
||||||
|
|
||||||
mul(a::T, X::GroupRingElem{T}) where T = GroupRingElem(a*X.coeffs, parent(X))
|
Base.:*(a::Number, X::GroupRingElem) = GroupRingElem(a*X.coeffs, parent(X))
|
||||||
|
Base.:*(X::GroupRingElem, a::Number) = a*X
|
||||||
function mul(a::T, X::GroupRingElem{S}) where {T<:Number, S}
|
|
||||||
TT = promote_type(T,S)
|
|
||||||
TT == S || @warn("Scalar and coeffs are in different rings! Promoting result to $(TT)")
|
|
||||||
return GroupRingElem(a.*X.coeffs, parent(X))
|
|
||||||
end
|
|
||||||
|
|
||||||
(*)(a::Number, X::GroupRingElem) = mul(a, X)
|
|
||||||
(*)(X::GroupRingElem, a::Number) = mul(a, X)
|
|
||||||
|
|
||||||
# disallow Rings to hijack *(::, ::GroupRingElem)
|
# disallow Rings to hijack *(::, ::GroupRingElem)
|
||||||
*(a::Union{AbstractFloat, Integer, RingElem, Rational}, X::GroupRingElem) = mul(a, X)
|
*(a::Union{AbstractFloat, Integer, RingElem, Rational}, X::GroupRingElem) = mul(a, X)
|
||||||
@ -425,7 +415,7 @@ function mul!(result::GroupRingElem, X::GroupRingElem, Y::GroupRingElem)
|
|||||||
if isdefined(RG, :pm)
|
if isdefined(RG, :pm)
|
||||||
s = size(RG.pm)
|
s = size(RG.pm)
|
||||||
k = findprev(!iszero, X.coeffs, lX)
|
k = findprev(!iszero, X.coeffs, lX)
|
||||||
(k == nothing ? 0 : k) <= s[1] || throw("Element in X outside of support of parents product")
|
(k == nothing ? 0 : k) <= s[1] || throw("Element in X outside of support of parents product: $k $(RG.basis[k])")
|
||||||
k = findprev(!iszero, Y.coeffs, lY)
|
k = findprev(!iszero, Y.coeffs, lY)
|
||||||
(k == nothing ? 0 : k) <= s[2] || throw("Element in Y outside of support of parents product")
|
(k == nothing ? 0 : k) <= s[2] || throw("Element in Y outside of support of parents product")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user