From 9a62cc2444f518c31ea3c431895cce37a194d659 Mon Sep 17 00:00:00 2001 From: kalmarek Date: Sun, 27 Aug 2017 18:29:38 +0200 Subject: [PATCH] threaded minimalprojections --- src/Projections.jl | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/Projections.jl b/src/Projections.jl index 00d5e43..0f1a5be 100644 --- a/src/Projections.jl +++ b/src/Projections.jl @@ -112,7 +112,7 @@ end function minimalprojections(G::PermutationGroup, T::Type=Rational{Int}) if G.n == 1 - return [(one(GroupRing(G), T), one(GroupRing(G), T))] + return [one(GroupRing(G), T)] elseif G.n < 8 RG = GroupRing(G, fastm=true) else @@ -120,16 +120,22 @@ function minimalprojections(G::PermutationGroup, T::Type=Rational{Int}) end RGidems = idempotents(RG, T) - chars = [PropertyT.PermCharacter(p) for p in Partitions(G.n)] + l = length(Partitions(G.n)) - return [ - (rankOne_projection(chi, RGidems), PropertyT.central_projection(RG, chi)) - for chi in chars] + parts = collect(Partitions(G.n)) + chars = [PropertyT.PermCharacter(p) for p in parts] + min_projs = Vector{eltype(RGidems)}(l) + + Threads.@threads for i in 1:l + chi = PropertyT.PermCharacter(parts[i]) + min_projs[i] = rankOne_projection(chi,RGidems)*central_projection(RG,chi) + end + + return min_projs end function rankOne_projections(G::PermutationGroup, T::Type=Rational{Int}) - mps = minimalprojections(G, T) - return [idem*cproj for (idem, cproj) in mps] + return minimalprojections(G, T) end function rankOne_projections(BN::WreathProduct, T::Type=Rational{Int})