From 1a51a8777131c4e5c50aff2bfbfd0d5d429a40d7 Mon Sep 17 00:00:00 2001 From: Marek Kaluba Date: Sat, 26 Aug 2023 10:16:19 +0200 Subject: [PATCH] update to PermutationGroups-0.4 --- Project.toml | 2 +- src/constructions/wreath_product.jl | 28 ++++++++++++++++++---------- test/AutSigma3.jl | 7 ++++--- test/group_constructions.jl | 10 +++++----- 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/Project.toml b/Project.toml index 56b31ae..87d449b 100644 --- a/Project.toml +++ b/Project.toml @@ -17,7 +17,7 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" GroupsCore = "0.4" KnuthBendix = "0.4" OrderedCollections = "1" -PermutationGroups = "0.3" +PermutationGroups = "0.4" StaticArrays = "1" julia = "1.6" diff --git a/src/constructions/wreath_product.jl b/src/constructions/wreath_product.jl index bb4fa57..cf0608a 100644 --- a/src/constructions/wreath_product.jl +++ b/src/constructions/wreath_product.jl @@ -1,5 +1,7 @@ import PermutationGroups: - AbstractPermutationGroup, AbstractPerm, degree, SymmetricGroup + AbstractPermutationGroup, + AbstractPermutation, + degree """ WreathProduct(G::Group, P::AbstractPermutationGroup) <: Group @@ -27,7 +29,7 @@ end struct WreathProductElement{ DPEl<:DirectPowerElement, - PEl<:AbstractPerm, + PEl<:AbstractPermutation, Wr<:WreathProduct, } <: GroupsCore.GroupElement n::DPEl @@ -36,7 +38,7 @@ struct WreathProductElement{ function WreathProductElement( n::DirectPowerElement, - p::AbstractPerm, + p::AbstractPermutation, W::WreathProduct, ) return new{typeof(n),typeof(p),typeof(W)}(n, p, W) @@ -53,16 +55,19 @@ function Base.iterate(G::WreathProduct) itr = Iterators.product(G.N, G.P) res = iterate(itr) @assert res !== nothing - elt = WreathProductElement(first(res)..., G) - return elt, (iterator = itr, state = last(res)) + ab, st = res + (a, b) = ab + elt = WreathProductElement(a, b, G) + return elt, (itr, st) end function Base.iterate(G::WreathProduct, state) - itr, st = state.iterator, state.state + itr, st = state res = iterate(itr, st) res === nothing && return nothing - elt = WreathProductElement(first(res)..., G) - return elt, (iterator = itr, state = last(res)) + (a::eltype(G.N), b::eltype(G.P)), st = res + elt = WreathProductElement(a, b, G) + return elt, (itr, st) end function Base.IteratorSize(::Type{<:WreathProduct{DP,PGr}}) where {DP,PGr} @@ -118,8 +123,11 @@ function Base.deepcopy_internal(g::WreathProductElement, stackdict::IdDict) ) end -function _act(p::AbstractPerm, n::DirectPowerElement) - return DirectPowerElement(n.elts^p, parent(n)) +function _act(p::AbstractPermutation, n::DirectPowerElement) + return DirectPowerElement( + ntuple(i -> n.elts[i^p], length(n.elts)), + parent(n), + ) end function Base.inv(g::WreathProductElement) diff --git a/test/AutSigma3.jl b/test/AutSigma3.jl index 8905342..179c441 100644 --- a/test/AutSigma3.jl +++ b/test/AutSigma3.jl @@ -5,7 +5,7 @@ @test contains(sprint(print, π₁Σ), "surface") - Groups.PermRightAut(p::Perm) = Groups.PermRightAut(p.d) + Groups.PermRightAut(p::Perm) = Groups.PermRightAut([i^p for i in 1:2genus]) # Groups.PermLeftAut(p::Perm) = Groups.PermLeftAut(p.d) autπ₁Σ = let autπ₁Σ = AutomorphismGroup(π₁Σ) pauts = let p = perm"(1,3,5)(2,4,6)" @@ -50,8 +50,9 @@ @test π₁Σ.(word.(z)) == Groups.domain(first(S)) d = Groups.domain(first(S)) p = perm"(1,3,5)(2,4,6)" - @test Groups.evaluate!(deepcopy(d), τ) == d^inv(p) - @test Groups.evaluate!(deepcopy(d), τ^2) == d^p + @test Groups.evaluate!(deepcopy(d), τ) == + ntuple(i -> d[i^inv(p)], length(d)) + @test Groups.evaluate!(deepcopy(d), τ^2) == ntuple(i -> d[i^p], length(d)) E, sizes = Groups.wlmetric_ball(S, radius=3) @test sizes == [49, 1813, 62971] diff --git a/test/group_constructions.jl b/test/group_constructions.jl index 09edc11..9c4a74d 100644 --- a/test/group_constructions.jl +++ b/test/group_constructions.jl @@ -1,9 +1,10 @@ @testset "GroupConstructions" begin + symmetric_group(n) = PermGroup(perm"(1,2)", Perm([2:n; 1])) + @testset "DirectProduct" begin GH = - let G = PermutationGroups.SymmetricGroup(3), - H = PermutationGroups.SymmetricGroup(4) + let G = symmetric_group(3), H = symmetric_group(4) Groups.Constructions.DirectProduct(G, H) end @@ -17,7 +18,7 @@ @testset "DirectPower" begin GGG = Groups.Constructions.DirectPower{3}( - PermutationGroups.SymmetricGroup(3), + symmetric_group(3), ) test_Group_interface(GGG) test_GroupElement_interface(rand(GGG, 2)...) @@ -28,8 +29,7 @@ end @testset "WreathProduct" begin W = - let G = PermutationGroups.SymmetricGroup(2), - P = PermutationGroups.SymmetricGroup(4) + let G = symmetric_group(2), P = symmetric_group(4) Groups.Constructions.WreathProduct(G, P) end