From 7b211014e3e8aac0ac1e9db1989dfc4dc1b3ed08 Mon Sep 17 00:00:00 2001 From: kalmarek Date: Tue, 24 Mar 2020 23:47:50 +0100 Subject: [PATCH] create and use uniform API for GSymbols --- src/AutGroup.jl | 4 ---- src/FPGroups.jl | 6 ------ src/FreeGroup.jl | 6 ------ src/Groups.jl | 13 ++++++++++++- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/AutGroup.jl b/src/AutGroup.jl index 09ed682..1c007a7 100644 --- a/src/AutGroup.jl +++ b/src/AutGroup.jl @@ -304,8 +304,6 @@ function change_pow(s::AutSymbol, n::Integer) end end -length(s::AutSymbol) = abs(s.pow) - ############################################################################### # # String I/O @@ -329,8 +327,6 @@ end # ############################################################################### -inv(f::AutSymbol) = change_pow(f, -f.pow) - ############################################################################### # # Misc diff --git a/src/FPGroups.jl b/src/FPGroups.jl index ef5b036..53b2ca7 100644 --- a/src/FPGroups.jl +++ b/src/FPGroups.jl @@ -95,10 +95,6 @@ end # ############################################################################### -change_pow(s::FPSymbol, n::Int) = FPSymbol(s.id, n) - -length(s::FPSymbol) = abs(s.pow) - ############################################################################### # # String I/O @@ -127,8 +123,6 @@ end # ############################################################################### -inv(s::FPSymbol) = change_pow(s, -s.pow) - ############################################################################### # # Binary operations diff --git a/src/FreeGroup.jl b/src/FreeGroup.jl index 5f77479..eab073a 100644 --- a/src/FreeGroup.jl +++ b/src/FreeGroup.jl @@ -80,10 +80,6 @@ end # ############################################################################### -change_pow(s::FreeSymbol, n::Int) = FreeSymbol(s.id, n) - -length(s::FreeSymbol) = abs(s.pow) - ############################################################################### # # String I/O @@ -106,5 +102,3 @@ end # Inversion # ############################################################################### - -inv(s::FreeSymbol) = change_pow(s, -s.pow) diff --git a/src/Groups.jl b/src/Groups.jl index 64d4e25..d9a5391 100644 --- a/src/Groups.jl +++ b/src/Groups.jl @@ -33,7 +33,18 @@ Base.one(G::Generic.PermGroup) = G(collect(1:G.n), false) """ abstract type GSymbol end -abstract type GWord{T<:GSymbol} <:GroupElem end +Base.iterate(s::GS, i=1) where GS<:GSymbol = i <= abs(s.pow) ? (GS(s.id, sign(s.pow)), i+1) : nothing +Base.length(s::GSymbol) = abs(s.pow) +Base.size(s::GSymbol) = (length(s), ) +Base.eltype(s::GS) where GS<:GSymbol = GS +Base.isone(s::GSymbol) = iszero(s.pow) + +change_pow(s::S, n::Integer) where S<:GSymbol = S(s.id, n) +Base.inv(s::GSymbol) = change_pow(s, -s.pow) + +hash(s::S, h::UInt) where S<:GSymbol = hash(s.id, hash(s.pow, hash(S, h))) + +abstract type GWord{T<:GSymbol} <: GroupElem end @doc doc""" W::GroupWord{T} <: GWord{T<:GSymbol} <:GroupElem