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

various improvements for characters #2519

Merged
merged 5 commits into from
Jul 25, 2023
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
14 changes: 11 additions & 3 deletions docs/src/Groups/group_characters.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,14 @@ of ``G`` (or the `j`-th conjugacy class of ``p``-regular elements
in the case of Brauer tables).

Ordinary and ``p``-modular Brauer tables in OSCAR are distinguished by
the field `characteristic`; its value is `0` for ordinary tables and
``p`` otherwise.
their [`characteristic(tbl::GAPGroupCharacterTable)`](@ref);
its value is `0` for ordinary tables and ``p`` otherwise.

```@docs
GAPGroupCharacterTable
character_table
Base.show(io::IO, ::MIME"text/plain", tbl::GAPGroupCharacterTable)
characteristic(tbl::GAPGroupCharacterTable)
Base.mod(tbl::GAPGroupCharacterTable, p::Int)
all_character_table_names
```
Expand All @@ -101,16 +103,19 @@ indicator
is_faithful(chi::GAPGroupClassFunction)
is_rational(chi::GAPGroupClassFunction)
is_irreducible(chi::GAPGroupClassFunction)
schur_index
schur_index(chi::GAPGroupClassFunction, recurse::Bool = true)
det(chi::GAPGroupClassFunction)
order(chi::GAPGroupClassFunction)
order_field_of_definition(chi::GAPGroupClassFunction)
```

## Attributes of character tables

```@docs
character_parameters
class_names(tbl::GAPGroupCharacterTable)
class_parameters
conjugacy_classes(tbl::GAPGroupCharacterTable)
decomposition_matrix
identifier
induced_cyclic(tbl::GAPGroupCharacterTable)
Expand All @@ -120,6 +125,7 @@ names_of_fusion_sources
class_lengths
orders_centralizers
orders_class_representatives
ordinary_table(tbl::GAPGroupCharacterTable)
trivial_character(tbl::GAPGroupCharacterTable)
```

Expand All @@ -128,6 +134,8 @@ trivial_character(tbl::GAPGroupCharacterTable)
```@docs
natural_character(G::PermGroup)
natural_character(G::Union{MatrixGroup{QQFieldElem}, MatrixGroup{nf_elem}})
natural_character(G::MatrixGroup{T, MT}) where T <: FinFieldElem where MT
natural_character(rho::GAPGroupHomomorphism)
trivial_character(G::GAPGroup)
```

Expand Down
14 changes: 3 additions & 11 deletions experimental/GModule/GModule.jl
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,6 @@ function __init__()
set_verbose_level(:MinField, 0)
end

function Hecke.number_field(::QQField, chi::Oscar.GAPGroupClassFunction; cached::Bool = false)
return number_field(QQ, map(x->GAP.gap_to_julia(QQAbElem, x), chi.values), cached = cached)
end

function irreducible_modules(G::Oscar.GAPGroup)
im = GAP.Globals.IrreducibleRepresentations(G.X)
IM = GModule[]
Expand Down Expand Up @@ -362,16 +358,16 @@ function Oscar.character(C::GModule{<:Any, <:Generic.FreeModule{nf_elem}})
QQAb = abelian_closure(QQ)[1]
K = cyclotomic_field(QQAb, Int(c))[1]
fl, em = is_subfield(k, K)
return Oscar.group_class_function(group(C), [QQAb(em(preimage(mkK, x[2]))) for x = chr])
return Oscar.class_function(group(C), [QQAb(em(preimage(mkK, x[2]))) for x = chr])
end

function Oscar.character(C::GModule{<:Any, <:Generic.FreeModule{QQFieldElem}})
QQAb = abelian_closure(QQ)[1]
return Oscar.group_class_function(group(C), [QQAb(x[2]) for x = _character(C)])
return Oscar.class_function(group(C), [QQAb(x[2]) for x = _character(C)])
end

function Oscar.character(C::GModule{<:Any, <:Generic.FreeModule{<:AbstractAlgebra.FieldElem}})
return Oscar.group_class_function(group(C), [base_ring(C)(x[2]) for x = _character(C)])
return Oscar.class_function(group(C), [base_ring(C)(x[2]) for x = _character(C)])
end


Expand Down Expand Up @@ -1161,10 +1157,6 @@ function Oscar.abelian_group(M::Generic.FreeModule{fqPolyRepFieldElem})
return A, MapFromFunc(A, M, to_M, to_A)
end

function Oscar.group(chi::Oscar.GAPGroupClassFunction)
return chi.table.GAPGroup
end

function Oscar.gmodule(chi::Oscar.GAPGroupClassFunction)
f = GAP.Globals.IrreducibleAffordingRepresentation(chi.values)
K = abelian_closure(QQ)[1]
Expand Down
1 change: 0 additions & 1 deletion experimental/GModule/Misc.jl
Original file line number Diff line number Diff line change
Expand Up @@ -172,5 +172,4 @@ end
Base.getindex(::QQField, a::QQAbElem) = number_field(QQ, a)
Base.getindex(::QQField, a::Vector{QQAbElem}) = number_field(QQ, a)
Base.getindex(::QQField, a::QQAbElem...) = number_field(QQ, [x for x =a])
Base.getindex(::QQField, chi::Oscar.GAPGroupClassFunction) = number_field(QQ, chi)

2 changes: 1 addition & 1 deletion experimental/SymmetricIntersections/src/representations.jl
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ function character_representation(RR::RepRing{S, T}, f::GAPGroupHomomorphism{T,
b = f(representative(h))
push!(coll, Q(trace(b)))
end
c = Oscar.group_class_function(character_table_underlying_group(RR), coll)
c = Oscar.class_function(character_table_underlying_group(RR), coll)
return c
end

Expand Down
44 changes: 44 additions & 0 deletions src/GAP/wrappers.jl
Original file line number Diff line number Diff line change
Expand Up @@ -14,50 +14,75 @@ using GAP

GAP.@wrap AlgExtElm(x::GapObj, y::GAP.Obj)::GapObj
GAP.@wrap AlgebraicExtension(x::GapObj, y::GapObj)::GapObj
GAP.@wrap AntiSymmetricParts(x::GapObj, y::GapObj, z::GapInt)::GapObj
GAP.@wrap AsList(x::GapObj)::GapObj
GAP.@wrap AsSet(x::GapObj)::GapObj
GAP.@wrap AtlasIrrationality(x::GapObj)::GAP.Obj
GAP.@wrap Basis(x::GapObj)::GapObj
GAP.@wrap Basis(x::GapObj, y::GapObj)::GapObj
GAP.@wrap BasisNC(x::GapObj, y::GapObj)::GapObj
GAP.@wrap CanonicalBasis(x::GapObj)::GapObj
GAP.@wrap CentreOfCharacter(x::GapObj, y::GapObj)::GapObj
GAP.@wrap CF(x::Any, y::Any)::GapObj
GAP.@wrap CF(x::Any)::GapObj
GAP.@wrap CHAR_FFE_DEFAULT(x::Any)::GapInt
GAP.@wrap Characteristic(x::Any)::GapInt
GAP.@wrap CharacterParameters(x::GapObj)::GapObj
GAP.@wrap CharacterTable(x::GapObj)::GapObj
GAP.@wrap CharacterTable(x::GapObj, y::GAP.Obj)::GapObj
GAP.@wrap CharacterTableWreathSymmetric(x::GapObj, y::GapInt)::GapObj
GAP.@wrap ClassFunction(x::GapObj, y::GapObj)::GapObj
GAP.@wrap ClassNames(x::GapObj)::GapObj
GAP.@wrap ClassMultiplicationCoefficient(x::GapObj, y::Int, z::Int, t::Int)::GAP.Obj
GAP.@wrap ClassPositionsOfCentre(x::GapObj)::GapObj
GAP.@wrap ClassPositionsOfPCore(x::GapObj, y::GAP.Obj)::GapObj
GAP.@wrap ClassParameters(x::GapObj)::GapObj
GAP.@wrap Coefficients(x::Any, y::Any)::GapObj
GAP.@wrap CoefficientsFamily(x::GapObj)::GapObj
GAP.@wrap CoefficientsOfUnivariatePolynomial(x::GapObj)::GapObj
GAP.@wrap CoeffsCyc(x::GAP.Obj, y::Int)::GapObj
GAP.@wrap ComputedPowerMaps(x::GapObj)::GapObj
GAP.@wrap Conductor(x::Any)::GapInt
GAP.@wrap ConjugacyClasses(x::GapObj)::GapObj
GAP.@wrap CycList(x::GapObj)::GapInt
GAP.@wrap CyclotomicPol(x::Int)::GapObj
GAP.@wrap Decomposition(x::GapObj, y::GapObj, z::GAP.Obj)::GapObj
GAP.@wrap DecompositionMatrix(x::GapObj)::GapObj
GAP.@wrap DefiningPolynomial(x::GapObj)::GapObj
GAP.@wrap DegreeFFE(x::Any)::Int
GAP.@wrap DegreeOfLaurentPolynomial(x::GapObj)::GapInt
GAP.@wrap DegreeOverPrimeField(x::GapObj)::Int
GAP.@wrap DenominatorCyc(x::Any)::GapInt
GAP.@wrap DenominatorRat(x::Any)::GapInt
GAP.@wrap DescriptionOfRootOfUnity(x::Any)::GapObj
GAP.@wrap DeterminantOfCharacter(x::GapObj)::GapObj
GAP.@wrap Dimension(x::GapObj)::Int
GAP.@wrap E(x::Any)::GapInt
GAP.@wrap EigenvaluesChar(x::GapObj, y::GAP.Obj)::GapObj
GAP.@wrap Elements(x::GapObj)::GapObj
GAP.@wrap ElementsFamily(x::GapObj)::GapObj
GAP.@wrap ELMS_LIST(x::GapObj, y::GapObj)::GapObj
GAP.@wrap ExtRepOfObj(x::GapObj)::GapObj
GAP.@wrap ExtRepPolynomialRatFun(x::GapObj)::GapObj
GAP.@wrap FamilyObj(x::GAP.Obj)::GapObj
GAP.@wrap Field(x::Any)::GapObj
GAP.@wrap FreeAbelianGroup(x::Int)::GapObj
GAP.@wrap FreeGeneratorsOfFpGroup(x::GapObj)::GapObj
GAP.@wrap FreeGroupOfFpGroup(x::GapObj)::GapObj
GAP.@wrap FusionConjugacyClasses(x::GapObj, y::GapObj)::GapObj
GAP.@wrap GaloisCyc(x::GAP.Obj, GapInt)::GAP.Obj
GAP.@wrap GeneratorsOfField(x::GapObj)::GapObj
GAP.@wrap GeneratorsOfGroup(x::GapObj)::GapObj
GAP.@wrap GetFusionMap(x::GapObj, y::GapObj)::GapObj
GAP.@wrap GF(x::Any, y::Any)::GapObj
GAP.@wrap GF(x::Any)::GapObj
GAP.@wrap GroupHomomorphismByFunction(x1, x2, x3)::GapObj
GAP.@wrap GroupHomomorphismByFunction(x1, x2, x3, x4)::GapObj
GAP.@wrap GroupHomomorphismByFunction(x1, x2, x3, x4, x5)::GapObj
GAP.@wrap HasCharacterParameters(x::GapObj)::Bool
GAP.@wrap HasClassParameters(x::GapObj)::Bool
GAP.@wrap HasMaximalAbelianQuotient(x::Any)::Bool
GAP.@wrap HasMaxes(x::GapObj)::Bool
GAP.@wrap HasSize(x::Any)::Bool
GAP.@wrap Image(x::Any, y::Any)::GapObj
GAP.@wrap Image(x::Any)::GapObj
Expand All @@ -67,6 +92,10 @@ GAP.@wrap Indeterminate(x::GapObj)::GapObj
GAP.@wrap Indeterminate(x::GapObj, y::GAP.Obj)::GapObj
GAP.@wrap IndeterminateNumberOfUnivariateRationalFunction(x::GapObj)::Int
GAP.@wrap IndeterminatesOfPolynomialRing(x::GapObj)::GapObj
GAP.@wrap Indicator(x::GapObj, y::GapObj, z::GapInt)::GapObj
GAP.@wrap InducedClassFunctionsByFusionMap(x::GapObj, y::GapObj, z::GapObj, t::GapObj)::GapObj
GAP.@wrap InducedClassFunction(x::GapObj, y::GapObj)::GapObj
GAP.@wrap InducedCyclic(x::GapObj)::GapObj
GAP.@wrap INT_FFE_DEFAULT(x::Any)::GapInt
GAP.@wrap IntFFE(x::Any)::GapInt
GAP.@wrap Inverse(x::GapObj)::GapObj
Expand Down Expand Up @@ -171,14 +200,18 @@ GAP.@wrap IsZero(x::Any)::Bool
GAP.@wrap IsZmodnZObj(x::Any)::Bool
GAP.@wrap IsZmodnZObjNonprimeCollection(x::Any)::Bool
GAP.@wrap Iterator(x::Any)::GapObj
GAP.@wrap KernelOfCharacter(x::GapObj, y::GapObj)::GapObj
GAP.@wrap LargestMovedPoint(x::Any)::Int
GAP.@wrap LeftActingDomain(x::GapObj)::GapObj
GAP.@wrap LinearCombination(x::GapObj, y::GapObj)::GapObj
GAP.@wrap MatScalarProducts(x::GapObj, y::GapObj, z::GapObj)::GapObj
GAP.@wrap Maxes(x::GapObj)::GapObj
GAP.@wrap MinimalPolynomial(x::GapObj, y::GAP.Obj)::GapObj
GAP.@wrap MinimalGeneratingSet(x::GapObj)::GapObj
GAP.@wrap mod(x::Any, y::Any)::GAP.Obj
GAP.@wrap NamesOfFusionSources(x::GapObj)::GapObj
GAP.@wrap NextIterator(x::GapObj)::Any
GAP.@wrap NormalSubgroupClasses(x::GapObj, y::GAP.Obj)::GapObj
GAP.@wrap NrCols(x::GapObj)::Int
GAP.@wrap NrConjugacyClasses(x::Any)::GapInt
GAP.@wrap NrRows(x::GapObj)::Int
Expand All @@ -193,29 +226,40 @@ GAP.@wrap OnSets(x::GapObj, y::GapObj)::GapObj
GAP.@wrap OnSetsSets(x::GapObj, y::GapObj)::GapObj
GAP.@wrap OnTuples(x::GapObj, y::GapObj)::GapObj
GAP.@wrap Order(x::Any)::GapInt
GAP.@wrap OrthogonalComponents(x::GapObj, y::GapObj, z::GapInt)::GapObj
GAP.@wrap OrthogonalDiscriminants(x::GapObj)::GapObj
GAP.@wrap Permuted(x::GapObj, y::GapObj)::GapObj
GAP.@wrap PolynomialByExtRep(x::GapObj, y::GapObj)::GapObj
GAP.@wrap PolynomialRing(x::GapObj)::GapObj
GAP.@wrap PolynomialRing(x::GapObj, y::Int)::GapObj
GAP.@wrap PossibleClassFusions(x::GapObj, y::GapObj)::GapObj
GAP.@wrap PrimePGroup(x::GapObj)::GapInt
GAP.@wrap PrimitiveElement(x::GapObj)::GapObj
GAP.@wrap Range(x::GapObj)::GapObj
GAP.@wrap ReduceCoeffs(x::GapObj, y::GapObj)
GAP.@wrap RelatorsOfFpGroup(x::GapObj)::GapObj
GAP.@wrap Representative(x::GapObj)::GAP.Obj
GAP.@wrap ScalarProduct(x::GapObj, y::GapObj, z::GapObj)::GAP.Obj
GAP.@wrap SchurIndexByCharacter(x::GapObj, y::GapObj, z::GapObj)::GAP.Obj
GAP.@wrap SetMaximalAbelianQuotient(x::Any, y::Any)::Nothing
GAP.@wrap SetSize(x::Any, y::Any)::Nothing
GAP.@wrap Size(x::Any)::GapInt
GAP.@wrap SizeOfFieldOfDefinition(x::GapObj, y::GapInt)::GapInt
GAP.@wrap SizesCentralizers(x::GapObj)::GapObj
GAP.@wrap SizesConjugacyClasses(x::GapObj)::GapObj
GAP.@wrap Source(x::GapObj)::GapObj
GAP.@wrap Sqrt(x::Int64)::GAP.Obj
GAP.@wrap StringViewObj(x::Any)::GapObj
GAP.@wrap SymmetricParts(x::GapObj, y::GapObj, z::GapInt)::GapObj
GAP.@wrap Symmetrizations(x::GapObj, y::GapObj, z::GapInt)::GapObj
GAP.@wrap SymplecticComponents(x::GapObj, y::GapObj, z::GapInt)::GapObj
GAP.@wrap UnderlyingElement(x::GapObj)::GapObj
GAP.@wrap UnderlyingRingElement(x::GapObj)::GapObj
GAP.@wrap UnivariatePolynomialByCoefficients(x::GapObj, y::GapObj, z::Int)::GapObj
GAP.@wrap Value(x::GapObj, y::Any)::Any
GAP.@wrap Value(x::GapObj, y::Any, z::Any)::Any
GAP.@wrap Value(x::GapObj, y::GapObj, z::GapObj, a::Any)::Any
GAP.@wrap ValuesOfClassFunction(x::GapObj)::GapObj
GAP.@wrap Z(x::Any)::GAP.Obj
GAP.@wrap Zero(x::Any)::GAP.Obj

Expand Down
18 changes: 16 additions & 2 deletions src/Groups/MatrixDisplay.jl
Original file line number Diff line number Diff line change
Expand Up @@ -419,8 +419,22 @@ function labelled_matrix_formatted(io::IO, mat::Matrix{String})
end

# footer (vector of strings)
for line in footer
write(io, line, "\n")
if length(footer) > 0
if TeX
write(io, "\n\\begin{array}{l}\n")
# Omit a separating empty line.
if footer[1] != ""
write(io, footer[1], " \\\\\n")
end
for line in footer[2:end]
write(io, line, " \\\\\n")
end
write(io, "\\end{array}\n")
else
for line in footer
write(io, line, "\n")
end
end
end
end

Loading