1
0
mirror of https://github.com/kalmarek/Groups.jl.git synced 2024-12-26 02:20:30 +01:00

move from G() to Base.one(G)

This commit is contained in:
kalmarek 2019-11-14 09:21:11 +01:00
parent 32e968a79b
commit dd4ed1497c
No known key found for this signature in database
GPG Key ID: 8BF1A3855328FC15
10 changed files with 45 additions and 44 deletions

View File

@ -192,7 +192,7 @@ SAut(G::Group) = AutGroup(G, special=true)
Automorphism{N}(s::AutSymbol) where N = Automorphism{N}(AutSymbol[s]) Automorphism{N}(s::AutSymbol) where N = Automorphism{N}(AutSymbol[s])
function (G::AutGroup{N})() where N function Base.one(G::AutGroup{N}) where N
id = Automorphism{N}(id_autsymbol()) id = Automorphism{N}(id_autsymbol())
id.parent = G id.parent = G
return id return id

View File

@ -96,8 +96,8 @@ end
(G::DirectPowerGroup{N})(a::Vararg{GrEl, N}) where {N, GrEl} = DirectPowerGroupElem(G.group.(a)) (G::DirectPowerGroup{N})(a::Vararg{GrEl, N}) where {N, GrEl} = DirectPowerGroupElem(G.group.(a))
function (G::DirectPowerGroup{N})() where N function Base.one(G::DirectPowerGroup{N}) where N
return DirectPowerGroupElem(ntuple(i->G.group(),N)) return DirectPowerGroupElem(ntuple(i->one(G.group),N))
end end
(G::DirectPowerGroup)(g::DirectPowerGroupElem) = G(g.elts) (G::DirectPowerGroup)(g::DirectPowerGroupElem) = G(g.elts)

View File

@ -58,7 +58,7 @@ FPGroup(H::FreeGroup) = FPGroup([FPSymbol(s) for s in H.gens])
# #
############################################################################### ###############################################################################
function (G::FPGroup)() function Base.one(G::FPGroup)
id = FPGroupElem(FPSymbol[]) id = FPGroupElem(FPSymbol[])
id.parent = G id.parent = G
return id return id
@ -66,7 +66,7 @@ end
function (G::FPGroup)(w::GWord) function (G::FPGroup)(w::GWord)
if length(w) == 0 if length(w) == 0
return G() return one(G)
end end
if eltype(w.symbols) == FreeSymbol if eltype(w.symbols) == FreeSymbol
@ -175,7 +175,7 @@ function /(G::FPGroup, newrels::Vector{FPGroupElem})
"Can not form quotient group: $r is not an element of $G")) "Can not form quotient group: $r is not an element of $G"))
end end
H = deepcopy(G) H = deepcopy(G)
newrels = Dict(H(r) => H() for r in newrels) newrels = Dict(H(r) => one(H) for r in newrels)
add_rels!(H, newrels) add_rels!(H, newrels)
return H return H
end end
@ -186,6 +186,6 @@ function /(G::FreeGroup, rels::Vector{FreeGroupElem})
"Can not form quotient group: $r is not an element of $G")) "Can not form quotient group: $r is not an element of $G"))
end end
H = FPGroup(G) H = FPGroup(G)
H.rels = Dict(H(rel) => H() for rel in unique(rels)) H.rels = Dict(H(rel) => one(H) for rel in unique(rels))
return H return H
end end

View File

@ -52,7 +52,7 @@ FreeGroup(a::Vector) = FreeGroup(FreeSymbol.(a))
# #
############################################################################### ###############################################################################
function (G::FreeGroup)() function Base.one(G::FreeGroup)
id = FreeGroupElem(FreeSymbol[]) id = FreeGroupElem(FreeSymbol[])
id.parent = G id.parent = G
return id return id

View File

@ -15,6 +15,8 @@ export elements
using LinearAlgebra using LinearAlgebra
using Markdown using Markdown
Base.one(G::Generic.PermGroup) = G(collect(1:G.n), false)
############################################################################### ###############################################################################
# #
# ParentType / ObjectType definition # ParentType / ObjectType definition
@ -280,7 +282,7 @@ function power_by_squaring(W::GWord, p::Integer)
if p < 0 if p < 0
return power_by_squaring(inv(W), -p) return power_by_squaring(inv(W), -p)
elseif p == 0 elseif p == 0
return parent(W)() return one(parent(W))
elseif p == 1 elseif p == 1
return W return W
elseif p == 2 elseif p == 2
@ -425,7 +427,7 @@ end
# #
############################################################################### ###############################################################################
function generate_balls(S::AbstractVector{T}, Id::T=parent(first(S))(); function generate_balls(S::AbstractVector{T}, Id::T=one(parent(first(S)));
radius=2, op=*) where T<:GroupElem radius=2, op=*) where T<:GroupElem
sizes = Int[] sizes = Int[]
B = [Id] B = [Id]

View File

@ -75,20 +75,20 @@ end
""" """
(G::WreathProduct)(n::DirectPowerGroupElem, p::Generic.Perm) = WreathProductElem(n,p) (G::WreathProduct)(n::DirectPowerGroupElem, p::Generic.Perm) = WreathProductElem(n,p)
(G::WreathProduct)() = WreathProductElem(G.N(), G.P(), false) Base.one(G::WreathProduct) = WreathProductElem(one(G.N), one(G.P), false)
@doc doc""" @doc doc"""
(G::WreathProduct)(p::Generic.Perm) (G::WreathProduct)(p::Generic.Perm)
> Returns the image of permutation `p` in `G` via embedding `p -> (id,p)`. > Returns the image of permutation `p` in `G` via embedding `p -> (id,p)`.
""" """
(G::WreathProduct)(p::Generic.Perm) = G(G.N(), p) (G::WreathProduct)(p::Generic.Perm) = G(one(G.N), p)
@doc doc""" @doc doc"""
(G::WreathProduct)(n::DirectPowerGroupElem) (G::WreathProduct)(n::DirectPowerGroupElem)
> Returns the image of `n` in `G` via embedding `n -> (n,())`. This is the > Returns the image of `n` in `G` via embedding `n -> (n,())`. This is the
> embedding that makes the sequence `1 -> N -> G -> P -> 1` exact. > embedding that makes the sequence `1 -> N -> G -> P -> 1` exact.
""" """
(G::WreathProduct)(n::DirectPowerGroupElem) = G(n, G.P()) (G::WreathProduct)(n::DirectPowerGroupElem) = G(n, one(G.P))
(G::WreathProduct)(n,p) = G(G.N(n), G.P(p)) (G::WreathProduct)(n,p) = G(G.N(n), G.P(p))

View File

@ -140,12 +140,12 @@
= Groups.r_multiply(A(f), [f], reduced=false) = Groups.r_multiply(A(f), [f], reduced=false)
@test Groups.simplifyperms!() == false @test Groups.simplifyperms!() == false
@test ^2 == A() @test ^2 == one(A)
a = A(Groups.rmul_autsymbol(1,2))*Groups.flip_autsymbol(2) a = A(Groups.rmul_autsymbol(1,2))*Groups.flip_autsymbol(2)
b = Groups.flip_autsymbol(2)*A(inv(Groups.rmul_autsymbol(1,2))) b = Groups.flip_autsymbol(2)*A(inv(Groups.rmul_autsymbol(1,2)))
@test a*b == b*a @test a*b == b*a
@test a^3 * b^3 == A() @test a^3 * b^3 == one(A)
g,h = Groups.gens(A)[[1,8]] # (g, h) = (ϱ₁₂, ϱ₃₂) g,h = Groups.gens(A)[[1,8]] # (g, h) = (ϱ₁₂, ϱ₃₂)
@test Groups.domain(A) == NTuple{4, FreeGroupElem}(gens(A.objectGroup)) @test Groups.domain(A) == NTuple{4, FreeGroupElem}(gens(A.objectGroup))
@ -201,7 +201,7 @@
G = AutGroup(FreeGroup(N), special=true) G = AutGroup(FreeGroup(N), special=true)
S = gens(G) S = gens(G)
S_inv = [G(), S..., [inv(s) for s in S]...] S_inv = [one(G), S..., [inv(s) for s in S]...]
S_inv = unique(S_inv) S_inv = unique(S_inv)
B_2 = [i*j for (i,j) in Base.product(S_inv, S_inv)] B_2 = [i*j for (i,j) in Base.product(S_inv, S_inv)]
@test length(B_2) == 2401 @test length(B_2) == 2401
@ -214,8 +214,8 @@
S = unique([gens(G); inv.(gens(G))]) S = unique([gens(G); inv.(gens(G))])
R = 3 R = 3
@test Groups.linear_repr(G()) isa Matrix{Int} @test Groups.linear_repr(one(G)) isa Matrix{Int}
@test Groups.linear_repr(G()) == Matrix{Int}(I, N, N) @test Groups.linear_repr(one(G)) == Matrix{Int}(I, N, N)
M = Matrix{Int}(I, N, N) M = Matrix{Int}(I, N, N)
M[1,2] = 1 M[1,2] = 1

View File

@ -13,12 +13,12 @@
@test (G×G)×G == (G×G)×G @test (G×G)×G == (G×G)×G
GG = DirectPowerGroup(G,2) GG = DirectPowerGroup(G,2)
@test (G×G)() isa GroupElem @test one(G×G) isa GroupElem
@test (G×G)((G(), G())) isa GroupElem @test (G×G)((one(G), one(G))) isa GroupElem
@test (G×G)([G(), G()]) isa GroupElem @test (G×G)([one(G), one(G)]) isa GroupElem
@test Groups.DirectPowerGroupElem((G(), G())) == (G×G)() @test Groups.DirectPowerGroupElem((one(G), one(G))) == one(G×G)
@test GG(G(), G()) == (G×G)() @test GG(one(G), one(G)) == one(G×G)
g = perm"(1,2,3)" g = perm"(1,2,3)"
@ -37,8 +37,8 @@
@test h[1] == g @test h[1] == g
@test h[2] == g^2 @test h[2] == g^2
h = GG(g, G()) h = GG(g, one(G))
@test h == GG(g, G()) @test h == GG(g, one(G))
end end
@testset "Basic arithmetic" begin @testset "Basic arithmetic" begin
@ -51,17 +51,17 @@
k = GG(g^3, g^2) k = GG(g^3, g^2)
@test h^2 == GG(g^2,g) @test h^2 == GG(g^2,g)
@test h^6 == GG() @test h^6 == one(GG)
@test h*h == h^2 @test h*h == h^2
@test h*k == GG(g,g) @test h*k == GG(g,g)
@test h*inv(h) == (G×G)() @test h*inv(h) == one(G×G)
w = GG(g,i)*GG(i,g) w = GG(g,i)*GG(i,g)
@test w == GG(perm"(1,2)(3)", perm"(2,3)") @test w == GG(perm"(1,2)(3)", perm"(2,3)")
@test w == inv(w) @test w == inv(w)
@test w^2 == w*w == GG() @test w^2 == w*w == one(GG)
end end
@testset "elem/parent_types" begin @testset "elem/parent_types" begin
@ -83,7 +83,7 @@
elts = vec(collect(GG)) elts = vec(collect(GG))
@test length(elts) == 216 @test length(elts) == 216
@test all([g*inv(g) == GG() for g in elts]) @test all([g*inv(g) == one(GG) for g in elts])
@test all(inv(g*h) == inv(h)*inv(g) for g in elts for h in elts) @test all(inv(g*h) == inv(h)*inv(g) for g in elts for h in elts)
end end
end end

View File

@ -1,4 +1,3 @@
@testset "Groups.FreeSymbols" begin @testset "Groups.FreeSymbols" begin
s = Groups.FreeSymbol(:s) s = Groups.FreeSymbol(:s)
t = Groups.FreeSymbol(:t) t = Groups.FreeSymbol(:t)
@ -45,7 +44,7 @@ end
G = FreeGroup(["s", "t"]) G = FreeGroup(["s", "t"])
@testset "elements constructors" begin @testset "elements constructors" begin
@test isa(G(), FreeGroupElem) @test isa(one(G), FreeGroupElem)
@test eltype(G.gens) == Groups.FreeSymbol @test eltype(G.gens) == Groups.FreeSymbol
@test length(G.gens) == 2 @test length(G.gens) == 2
@test eltype(gens(G)) == FreeGroupElem @test eltype(gens(G)) == FreeGroupElem
@ -76,17 +75,17 @@ end
end end
@testset "reductions" begin @testset "reductions" begin
@test length(G().symbols) == 0 @test length(one(G).symbols) == 0
@test length((G()*G()).symbols) == 0 @test length((one(G)*one(G)).symbols) == 0
@test G() == G()*G() @test one(G) == one(G)*one(G)
w = deepcopy(s) w = deepcopy(s)
push!(w.symbols, (s^-1).symbols[1]) push!(w.symbols, (s^-1).symbols[1])
@test Groups.reduce!(w) == parent(w)() @test Groups.reduce!(w) == one(parent(w))
o = (t*s)^3 o = (t*s)^3
@test o == t*s*t*s*t*s @test o == t*s*t*s*t*s
p = (t*s)^-3 p = (t*s)^-3
@test p == s^-1*t^-1*s^-1*t^-1*s^-1*t^-1 @test p == s^-1*t^-1*s^-1*t^-1*s^-1*t^-1
@test o*p == parent(o*p)() @test o*p == one(parent(o*p))
w = FreeGroupElem([o.symbols..., p.symbols...]) w = FreeGroupElem([o.symbols..., p.symbols...])
w.parent = G w.parent = G
@test Groups.reduce!(w).symbols ==Vector{Groups.FreeSymbol}([]) @test Groups.reduce!(w).symbols ==Vector{Groups.FreeSymbol}([])
@ -123,7 +122,7 @@ end
@test findfirst(c*t, c) == 0 @test findfirst(c*t, c) == 0
w = s*t*s^-1 w = s*t*s^-1
subst = Dict{FreeGroupElem, FreeGroupElem}(w => s^1, s*t^-1 => t^4) subst = Dict{FreeGroupElem, FreeGroupElem}(w => s^1, s*t^-1 => t^4)
@test Groups.replace(c, 1, s*t, G()) == s^-1*t^-1 @test Groups.replace(c, 1, s*t, one(G)) == s^-1*t^-1
@test Groups.replace(c, 1, w, subst[w]) == s*t^-1 @test Groups.replace(c, 1, w, subst[w]) == s*t^-1
@test Groups.replace(s*c*t^-1, 1, w, subst[w]) == s^2*t^-2 @test Groups.replace(s*c*t^-1, 1, w, subst[w]) == s^2*t^-2
@test Groups.replace(t*c*t, 2, w, subst[w]) == t*s @test Groups.replace(t*c*t, 2, w, subst[w]) == t*s

View File

@ -24,8 +24,8 @@
@test B3(aa, b) == Groups.WreathProductElem(aa, b) @test B3(aa, b) == Groups.WreathProductElem(aa, b)
w = B3(aa, b) w = B3(aa, b)
@test B3(w) == w @test B3(w) == w
@test B3(b) == Groups.WreathProductElem(B3.N(), b) @test B3(b) == Groups.WreathProductElem(one(B3.N), b)
@test B3(aa) == Groups.WreathProductElem(aa, S_3()) @test B3(aa) == Groups.WreathProductElem(aa, one(S_3))
@test B3((a^0 ,a, a^2), b) isa WreathProductElem @test B3((a^0 ,a, a^2), b) isa WreathProductElem
@ -37,10 +37,10 @@
@test elem_type(B3) == Groups.WreathProductElem{3, Generic.Perm{Int}, Generic.Perm{Int}} @test elem_type(B3) == Groups.WreathProductElem{3, Generic.Perm{Int}, Generic.Perm{Int}}
@test parent_type(typeof(B3())) == Groups.WreathProduct{3, parent_type(typeof(B3.N.group())), Generic.PermGroup{Int}} @test parent_type(typeof(one(B3))) == Groups.WreathProduct{3, parent_type(typeof(one(B3.N.group))), Generic.PermGroup{Int}}
@test parent(B3()) == Groups.WreathProduct(S_2,S_3) @test parent(one(B3)) == Groups.WreathProduct(S_2,S_3)
@test parent(B3()) == B3 @test parent(one(B3)) == B3
end end
@testset "Basic operations on WreathProductElem" begin @testset "Basic operations on WreathProductElem" begin
@ -91,7 +91,7 @@
@test order(Wr) == 2^4*factorial(4) @test order(Wr) == 2^4*factorial(4)
@test length(elts) == order(Wr) @test length(elts) == order(Wr)
@test all([g*inv(g) == Wr() for g in elts]) @test all((g*inv(g) == one(Wr) for g in elts))
@test all(inv(g*h) == inv(h)*inv(g) for g in elts for h in elts) @test all(inv(g*h) == inv(h)*inv(g) for g in elts for h in elts)
end end