diff --git a/lib/ctblpope.gi b/lib/ctblpope.gi index 0730dfa9e8..c751c1ab32 100644 --- a/lib/ctblpope.gi +++ b/lib/ctblpope.gi @@ -1599,7 +1599,7 @@ end ); ############################################################################# ## #F PermCandidatesFaithful( , , , , -#F , , )' +#F , , [, ] ) ## # `PermCandidatesFaithful'\\ # ` ( tbl, chars, norm\_subgrp, nonfaithful, lower, upper, torso )' @@ -1815,9 +1815,10 @@ end ); # `evaluate', but for `erase' it is global (realized as `[ rest ]'). ## InstallGlobalFunction( PermCandidatesFaithful, - function( tbl, chars, norm_subgrp, nonfaithful, upper, lower, torso ) - - local tbl_classes, # attribute of `tbl' + function( tbl, chars, norm_subgrp, nonfaithful, upper, lower, torso, + arg... ) + local ratirr, + tbl_classes, # attribute of `tbl' tbl_size, # attribute of `tbl' tbl_orders, # attribute of `tbl' tbl_centralizers, # attribute of `tbl' @@ -1831,6 +1832,15 @@ InstallGlobalFunction( PermCandidatesFaithful, min_class, evaluate, step, first, descendclass, oldrows, newmatrix, row; + chars:= List( chars, ValuesOfClassFunction ); + if Length( arg ) = 1 and arg[1] = true then + # The given list contains all rational irreducible characters. + ratirr:= chars; + else + # The given list is not known to be complete. + ratirr:= RationalizedMat( List( Irr( tbl ), ValuesOfClassFunction ) ); + fi; + # # step 1: Try to improve the input data # @@ -2109,7 +2119,7 @@ InstallGlobalFunction( PermCandidatesFaithful, local cand; cand:= List( [ 1 .. Length( gencharacter ) ], i -> gencharacter[i] * tbl_classes[i] ); - return ForAll( chars, chi -> 0 <= cand * chi ); + return ForAll( ratirr, chi -> 0 <= cand * chi ); end; # # and a bigger function: @@ -2469,7 +2479,8 @@ InstallGlobalFunction( PermChars, function( arg ) lower:= 0; fi; return PermCandidatesFaithful( tbl, chars, arec.normalsubgroup, - arec.nonfaithful, upper, lower, arec.torso); + arec.nonfaithful, upper, lower, arec.torso, + not "chars" in names ); elif "torso" in names then diff --git a/tst/testextra/ctblpope.tst b/tst/testextra/ctblpope.tst new file mode 100644 index 0000000000..a74453af15 --- /dev/null +++ b/tst/testextra/ctblpope.tst @@ -0,0 +1,64 @@ +############################################################################# +## +#W ctblpope.tst GAP tests Thomas Breuer +## +#Y Copyright (C) 2017 +## +## excluded from 'testinstall.g' as it takes considerable time +## + +gap> START_TEST( "ctblpope.tst" ); + +## +gap> if IsPackageMarkedForLoading( "ctbllib", "" ) then +> m:= CharacterTable( "M" );; +> torso:= [ 512372707698741056749515292734375, 405589064025344574375, +> 29628786742129575, 658201521662685, 215448838605, 0, 121971774375, +> 28098354375, 335229607, 108472455, 164587500, 4921875,,,,,, 0, +> 437325, 0,,,,,,, 6561, 6561, 177100, 7660, 6875, 315, 275, 0,,,, 0,, +> ,,,, 0, 0, 0, 3885, 525, 0,,,, 0,,,, 28, 81, 189, 9, 9, 9, 0, 540, +> 300, 175, 20, 15, 7,, 0, 0, 0, 0, 0, 0, 0,,,,, 0,,,,, 0, 0, 0, 0, +> 0, 0, 77, 45, 13, 0, 0,,,,, 0,,,,,,, 0, 0, 4, 0, 0, 9, 9, 3, 1, 0, +> 0, 0, 0, 0, 0, 4, 1, 1, 0,, 0, 0, 0, 0, 0,, 0, 0, 0, 0, 0, 0,, 0,, +> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,,,,,, 0,,, 0, 0, 0, 0, 0, 0, 0, 0, 0, +> 0, 0, 0,, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +> 0 ];; +> lower:= [ 512372707698741056749515292734375, 102893356234868574375, +> 2045161610873834, 47672538696202, 3040608610, 0, 8009187743, +> 783427000, 7075556, 2277590, 11945867, 18679, 52124902, 49314, +> 451068, 32739, 1790, 0, 7469, 0, 789, 3826, 827, 176, 212, 63, 133, +> 25, 3540, 131, 27, 2, 2, 0, 1032, 131, 444, 0, 38, 9, 4, 3, 3, 0, +> 0, 0, 19, 6, 0, 20, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0, 4, 2, 1, +> 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, +> 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, +> 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, +> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, +> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];; +> rat:= RationalizedMat( Irr( m ) );; +> constit:= rat{ [ 1, 2, 4, 5, 7, 8, 9, 10, 11, 14, 15, 16, 17, 18, +> 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, +> 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, +> 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, +> 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, +> 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, +> 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, +> 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, +> 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, +> 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, +> 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172 ] };; +> cand:= PermChars( m, rec( torso:= torso, chars:= constit, +> lower:= lower, normalsubgroup:= [ 1 .. NrConjugacyClasses( m ) ], +> nonfaithful:= TrivialCharacter( m ) ) );; +> if Length( cand ) <> 1 then +> Error( "PermChars test failed" ); +> fi; +> fi; + +## +gap> STOP_TEST( "ctblpope.tst", 1 ); + +############################################################################# +## +#E +