From 01f4f03822ac3374bea8a32b56ad67e667597e8d Mon Sep 17 00:00:00 2001 From: Marek Kaluba Date: Tue, 14 Nov 2023 15:35:58 +0100 Subject: [PATCH] derive _int_type of ActionHomomorphisms from action (which is easily user-definable) * also bump the default to UInt32, as we are hitting the limits of UInt16 already ;) --- src/ext_homomorphisms.jl | 15 +++++++++------ test/action_permutation.jl | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/ext_homomorphisms.jl b/src/ext_homomorphisms.jl index f103534..a3f6170 100644 --- a/src/ext_homomorphisms.jl +++ b/src/ext_homomorphisms.jl @@ -17,11 +17,14 @@ PermutationGroups.degree(hom::InducedActionHomomorphism) = length(basis(hom)) coeff_type(hom::InducedActionHomomorphism) = coeff_type(action(hom)) _int_type(::Type{<:StarAlgebras.AbstractBasis{T,I}}) where {T,I} = I -_int_type(hom::InducedActionHomomorphism) = _int_type(typeof(basis(hom))) +_int_type(basis::StarAlgebras.AbstractBasis) = _int_type(typeof(basis)) +_int_type(hom::InducedActionHomomorphism) = _int_type(basis(hom)) + +# Exceeding typemax(UInt32) here would mean e.g. that you're trying to block-diagonalize +# an SDP constraint of size 4_294_967_295 × 4_294_967_295, which is highly unlikely ;) +_int_type(::Type{<:Action}) = UInt32 +_int_type(ac::Action) = _int_type(typeof(ac)) -# Exceeding typemax(UInt16) here would mean e.g. that you're trying to block-diagonalize -# an SDP constraint of size 65535×65535, which is highly unlikely ;) -_int_type(::Type{<:InducedActionHomomorphism}) = UInt16 function induce(hom::InducedActionHomomorphism, g::GroupElement) return induce(action(hom), hom, g) @@ -43,7 +46,7 @@ end function ExtensionHomomorphism(action::Action, basis) return ExtensionHomomorphism( - _int_type(ExtensionHomomorphism), + _int_type(action), action, basis, ) @@ -104,7 +107,7 @@ function CachedExtensionHomomorphism( precompute = false, ) return CachedExtensionHomomorphism( - _int_type(ExtensionHomomorphism), + _int_type(action), G, action, basis; diff --git a/test/action_permutation.jl b/test/action_permutation.jl index f80dec5..ba7e0bb 100644 --- a/test/action_permutation.jl +++ b/test/action_permutation.jl @@ -68,7 +68,7 @@ end precompute = true, ) @test all(g ∈ keys(ehom.cache) for g in G) # we actually cached - @test typeof(SymbolicWedderburn.induce(ehom, one(G))) == Perm{UInt16} + @test typeof(SymbolicWedderburn.induce(ehom, one(G))) == Perm{UInt32} # the default ψ = SymbolicWedderburn.action_character(ehom, tbl) @test SymbolicWedderburn.constituents(ψ) == [40, 22, 18]