Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add is_atlas_character_table #4416

Merged
merged 2 commits into from
Jan 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/src/Groups/group_characters.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ conjugacy_classes(tbl::GAPGroupCharacterTable)
decomposition_matrix
identifier(tbl::GAPGroupCharacterTable)
induced_cyclic(tbl::GAPGroupCharacterTable)
is_atlas_character_table
is_duplicate_table
maxes
names_of_fusion_sources
Expand Down
35 changes: 35 additions & 0 deletions gap/OscarInterface/gap/OscarInterface.gi
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,38 @@ Perform( Oscar._GAP_deserializations,
[ JuliaToGAP( IsString, entry[1] ), "IsObject", "IsObject" ],
Julia.GAP.WrapJuliaFunc( entry[2] ) );
end );

############################################################################

# The following can be removed as soon as the CTblLib package provides it
# (not yet in CTblLib v1.3.9).
if not IsBound( IsAtlasCharacterTable ) then
DeclareProperty( "IsAtlasCharacterTable", IsNearlyCharacterTable );

InstallMethod( IsAtlasCharacterTable,
[ "IsOrdinaryTable" ],
tbl -> PositionSublist( InfoText( tbl ),
"origin: ATLAS of finite groups" ) <> fail );

InstallMethod( IsAtlasCharacterTable,
[ "IsBrauerTable" ],
tbl -> IsAtlasCharacterTable( OrdinaryCharacterTable( tbl ) ) );

AddSet( CTblLib.SupportedAttributes, "IsAtlasCharacterTable" );

DatabaseAttributeAddX( CTblLib.Data.IdEnumerator, rec(
identifier:= "IsAtlasCharacterTable",
type:= "values",
name:= "IsAtlasCharacterTable",
neededAttributes:= [ "InfoText" ],
create:= function( attr, id )
local infotext;

infotext:= attr.idenumerator.attributes.InfoText;
return PositionSublist( infotext.attributeValue( infotext, id ),
"origin: ATLAS of finite groups" ) <> fail;
end,
) );

CTblLib.ExtendAttributeOfIdEnumeratorExt( "IsAtlasCharacterTable", true );
fi;
1 change: 1 addition & 0 deletions src/GAP/wrappers.jl
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ GAP.@wrap IsAlmostSimpleGroup(x::Any)::Bool
GAP.@wrap IsAlternatingForm(x::Any)::Bool
GAP.@wrap IsAlternatingGroup(x::Any)::Bool
GAP.@wrap IsAssocWord(x::Any)::Bool
GAP.@wrap IsAtlasCharacterTable(x::GapObj)::Bool
GAP.@wrap IsBiCoset(x::Any)::Bool
GAP.@wrap IsBijective(x::Any)::Bool
GAP.@wrap IsBool(x::Any)::Bool
Expand Down
29 changes: 29 additions & 0 deletions src/Groups/group_characters.jl
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,35 @@ function Base.hash(tbl::GAPGroupCharacterTable, h::UInt)
end
end

"""
is_atlas_character_table(tbl::GAPGroupCharacterTable)

Return whether `tbl` is either an ordinary character table
that belongs to the ATLAS of Finite Groups [CCNPW85](@cite)
or a Brauer table whose underlying ordinary table
belongs to the ATLAS of Finite Groups.

One application of this function is to restrict the search with
[`all_character_table_names`](@ref) to ATLAS tables.

# Examples
```jldoctest
julia> tbl = character_table("A5");

julia> is_atlas_character_table(tbl)
true

julia> is_atlas_character_table(mod(tbl, 2))
true

julia> is_atlas_character_table(character_table("A4"))
false
```
"""
function is_atlas_character_table(tbl::GAPGroupCharacterTable)
return GAPWrap.IsAtlasCharacterTable(GapObj(tbl))
end


##############################################################################
#
Expand Down
1 change: 1 addition & 0 deletions src/Groups/libraries/libraries.jl
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ function __init_group_libraries()

copy!(_ctbl_filter_attrs, _group_filter_attrs)
_add_bool_attr(_ctbl_filter_attrs, is_duplicate_table, GAP.Globals.IsDuplicateTable)
_add_bool_attr(_ctbl_filter_attrs, is_atlas_character_table, GAP.Globals.IsAtlasCharacterTable)

empty!(_atlas_group_filter_attrs)
_atlas_group_filter_attrs[degree] = (_IntOrIntVec, GAP.Globals.NrMovedPoints, nothing)
Expand Down
1 change: 1 addition & 0 deletions src/exports.jl
Original file line number Diff line number Diff line change
Expand Up @@ -804,6 +804,7 @@ export is_almost_simple, has_is_almost_simple, set_is_almost_simple
export is_alternating
export is_ample
export is_archimedean_solid
export is_atlas_character_table
export is_ball
export is_basepoint_free
export is_bicoset
Expand Down
6 changes: 6 additions & 0 deletions test/Groups/libraries.jl
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,12 @@ end
@test order(H) == 720
end

@testset "Library of character tables" begin
l1 = all_character_table_names(is_atlas_character_table, !is_duplicate_table)
l2 = all_character_table_names(is_atlas_character_table)
@test l1 == l2
end

@testset "Groups with few conjugacy classes" begin
@testset for n in 1:14
@test has_groups_with_class_number(n)
Expand Down
Loading