Documentation contents

atlas Library · Script File

weak_packets.at

computing weak unipotent Arthur packets
Source
atlas-scripts/weak_packets.at (736 lines)
Definitions
59
Loads
Loaded by
stable.at weak_packets_precomputed_cell_traces.at

Definitions in source order

parameters 3 overloads

L21parameters([(int,int,Param)] triples) = [Param]
extract just the parameters from [(int,int,Param)]
L24parameters(([([Param],[WCell])],[(int,int,Param)]) (,triples)) = [Param]
extract just the parameters from output of weak_packet(..)
L28parameters([([([Param],[WCell])],[(int,int,Param)])] data) = [Param]
extract just the parameters from output of weak_packets(..)

also defined in stable.at, cells.at

cells

L32cells(([([Param],[WCell])],[(int,int,Param)]) (pairs,)) = [[int]]
extract just the cells (parameter indices) from output of weak_packet(...)

also in this file at line 228, line 229

SpringerTable: table of Springer data, see springer_tables.at
 NOTE: this must be the SpringerTable for the integral root system
 ComplexNilpotent: complex orbit for dual group
 [Param]: list of parameters, should be all_parameters_gamma(G,gamma) where
   gamma is regular and differs from gamma_target by X^*
 ratvec gamma_target: target infinitesimal character, probably O.H/2
result: ([list of parameters],[(int,int,Param)]=[(block number, cell number, parameter)])
L35

weak_packet_int 2 overloads

L45weak_packet_int (SpringerTable st_int ,ComplexNilpotent O_check ,[Param] params ,ratvec gamma_target) = ([([Param],[WCell])],[(int,int,Param)])
weak_packet, given Springer table for the integrality datum of O_check.H/2,
a list of parameters at regular infinitesimal character, and a target infinitesimal character
L100weak_packet_int (SpringerTable st_int,ComplexNilpotent O_check,RealForm G) = ([([Param],[WCell])],[(int,int,Param)])
this calls weak_packet_int(st_int,O_check,G,params,gamma_target)
and is typically called as follows:
params=all_parameters_gamma(G,O_check.H/2+2*rho(G))
gamma_target=O_check.H/2
st_int = integrality_datum(G,gamma_target)

also defined in weak_packets_precomputed_cell_traces.at

weak_packet 2 overloads

L120weak_packet (ComplexNilpotent O_check,RealForm G,ratvec shift) = ( [ [Param],[WCell] ] , [int,int,Param] )
This is the primary weak_packet function: weak Arthur packet(O_check,G)
|G| is a RealForm, |O_check| is a nilpotent orbit for |G.root_datum.dual|
for example O_check can be chosen from |dual_orbits(G)|
We allow a central shift |shift| to the infinitesimal character to be given
L143weak_packet (ComplexNilpotent O_check,RealForm G) = ( [ [Param],[WCell] ] , [int,int,Param] )

also defined in weak_packets_precomputed_cell_traces.at

weak_packets 3 overloads

L148weak_packets ([ComplexNilpotent] dual_orbits,RealForm G,ratvec shift) = [ [[Param],[WCell]] , [int,int,Param] ]
run over a set of dual orbits; check if dual(O_check) intersects \g^(-theta)
L171weak_packets ([ComplexNilpotent] dual_orbits,RealForm G) = [ [[Param],[WCell]] , [int,int,Param] ]
L178weak_packets (RealForm G) = [ [[Param],[WCell]] , [int,int,Param] ]
given just a RealForm G, compute the dual orbits then compute all weak packets
as you run over these dual orbits

also in this file at line 633; also defined in weak_packets_precomputed_cell_traces.at

weak_packets_even

L183weak_packets_even (RealForm G ) = [ [[Param],[WCell]] , [int,int,Param] ]
given just a RealForm G, compute the dual orbits, then
all weak packets as you run over these dual orbits
reporting functions
L186

mult 2 overloads

L188mult([[(int,int,Param)]] packet) = ((int,int,int)->int)
L194mult([(int,int,Param)] packet) = ((int,int)->int)

also in this file at line 254

parameters_map 2 overloads

L200parameters_map([[(int,int,Param)]] packet) = ((int,int,int)->[Param])
L206parameters_map([(int,int,Param)] packet) = ((int,int)->[Param])

mult_block

L213mult_block([(int,int,Param)] packet) = (int->int)
number of time given block appears, i.e. number of parameters in this block

mult_orbit_block

L221mult_orbit_block([[(int,int,Param)]] packet) = ((int,int)->int)
number of times the (orbit,block) pairs appears, in other words number of parameters
in given pair

blocks

L227blocks([(int,int,Param)] packet) = [int]

also in this file at line 230; also defined in basic.at, cells.at

cells 2 overloads

L228cells([(int,int,Param)] packet) = [int]
L229cells([[(int,int,Param)]] packets) = [int]

also in this file at line 32

blocks

L230blocks([[(int,int,Param)]] packets) = [int]

also in this file at line 227; also defined in basic.at, cells.at

unipotent_representations

L232unipotent_representations(RealForm G) = [Param]
G.weak_packets.parameters

also in this file at line 659

unipotents

L252unipotents(RealForm G) = [Param]

also in this file at line 660

mult

L254mult([[(int,int,Param)]] packet) = ((int,int,int)->int)

also in this file at line 188, line 194

output routines: show_...
L260

show_short 2 overloads

L262show_short([([([Param],[WCell])],[(int,int,Param)])] blocks_and_cells_and_packets) = void
L277show_short(([([Param],[WCell])],[(int,int,Param)]) blocks_and_cells_and_packet) = void

also defined in sub_cells.at

show 2 overloads

L280show( ([([Param],[WCell])],[(int,int,Param)]) blocks_and_cells_and_packet) = void
L303show( [([([Param],[WCell])],[(int,int,Param)])] blocks_and_cells_and_packets) = void

also in this file at line 696; also defined in modules.at, K_Nilpotent.at, good_W_representatives.at, arthur_parameters.at, sub_cells.at, associated_variety_annihilator.at, geck_generic.at, L_packet.at, ratmat.at, Levi_subgroups.at, nilpotent_orbits.at, subgroups.at, poset.at, cyclotomic.at, polynomial.at, character_tables.at, springer_tables.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, exceptional.at, nilpotent_posets.at, lazy_lists.at

show_long 2 overloads

L327show_long(([([Param],[WCell])],[(int,int,Param)]) blocks_and_cells_and_packet) = void
L352show_long([([([Param],[WCell])],[(int,int,Param)])] blocks_and_cells_and_packets) = void

also in this file at line 403, line 428; also defined in character_tables.at, springer_tables.at, hodgeParamLaurentPol.at, hodgeParamPol.at, cyclotomic_Lie_algebra.at, bracket.at, exceptional.at

export

L380export([Param] parameters) = void

also defined in sub_cells.at

inducing unipotents L390

induced_unipotents

L394induced_unipotents(RealForm G) = [Param]
run over all maximal real parabolics P, all
unipotent representations of P.Levi, and induced up to G

show_long 2 overloads

L403show_long(( ( [([Param],[WCell])], [(int,int,Param)] ), [Param]) data) = void
show long, including flag to mark induced unipotents
wp
[(int,int,Param)]
induced_unipotents
L428show_long(( [( [([Param],[WCell])], [(int,int,Param)] )], [Param]) data) = void
wp
[(int,int,Param)]
induced_unipotents

also in this file at line 327, line 352; also defined in character_tables.at, springer_tables.at, hodgeParamLaurentPol.at, hodgeParamPol.at, cyclotomic_Lie_algebra.at, bracket.at, exceptional.at

induced_unipotents_long

L456induced_unipotents_long(RealForm G) = ([Param],[Param],[Param])
(induced unipotents, unipotents of G, complement of first in second)
the remainder of this file was copied (and modified) from unipotent_conjecture.at
L466

include information about dual_Aq cells L468

packets_disjoint

L473packets_disjoint( ([([Param],[WCell])],[(int,int,Param)]) blocks_and_cells_and_packet) = bool
this applies to output of weak_packet(...) or each entry
of output of weak_packets(...)
returns true if each cell which occurs satisfies is_dual_Aq(cell)

simply_connected_dual_orbits

L487simply_connected_dual_orbits(RootDatum rd) = [ComplexNilpotent]
dual nilpotents with A(O)=1

number_unipotents_guess

L505number_unipotents_guess(ComplexNilpotent O_check) = (int,[int],int)
if A(O^vee)=1 and all Arthur packets for O^vee are disjoint
then there is a guess for the size of the weak packet of O^vee
based just conjugacy classes of elements of H=Cent(O^vee)
of order 1 or 2
see notesOnUnipotentParameters.pdf in Dropbox
return value:
(int a,[int] v ,int c)
a=#conjugacy classes of H), if it isn't 1 we don't care
v=data for computing the guess
c=guess for order of Pi(Psi)
this is only reasonable if A(O^vee)=1 (which is included in the output)
and the packets for O^vee are disjoint (which is not, since this depends
on actually computing the weak packet

test_conjecture

L526test_conjecture([([([Param],[WCell])],[(int,int,Param)])] wp,RealForm G) = [(int,[int],int,int,bool,int)]
test the conjectural formula for order of Pi(Psi) is correct
returns:
int: #conjugacy classes of H), if it isn't 1 we don't care
[int]: data for computing the guess
int: guess for order of Pi(Psi)
int: number of real forms of unipotent
bool: Arthur packets are disjoint
int: 0 (conjecture doesn't apply) or \pm 1 (conjecture true/false)
mainly used as input to teste_conjecture_report

test_conjecture_report 3 overloads

L538test_conjecture_report([([([Param],[WCell])],[(int,int,Param)])] wp,RealForm G) = void
L558test_conjecture_report(RealForm G) = void
L561test_conjecture_report([RealForm] groups) = void
reports
L568

weak_packet_report

L576weak_packet_report(RealForm G) = [([([Param],[WCell])],[(int,int,Param)])]
compute all weak packets for G, and display tables of the result
 does not include information about induced unipotents

(diagram,dim,BC Levi,cent,Z(cent_0),C_2,orders of classes of A(O), #real orbits for all forms in inner class,arthur packets)

weak_packet_report_ind

L603weak_packet_report_ind(RealForm G) = [([([Param],[WCell])],[(int,int,Param)])]

more output routines: running over real forms L631

weak_packets

L633weak_packets([RealForm] list) = [([([Param],[WCell])],[(int,int,Param)])]

also in this file at line 148, line 171, line 178; also defined in weak_packets_precomputed_cell_traces.at

weak_packets_all_forms

L639weak_packets_all_forms(RealForm G) = [([([Param],[WCell])],[(int,int,Param)])]

show_weak_packets_all_forms

L641show_weak_packets_all_forms(RealForm G) = void

show_weak_packets_all_forms_long

L647show_weak_packets_all_forms_long([RealForm] groups) = void

moved from theta_induced_unipotents.at L655

unipotent_representations

L659unipotent_representations(RealForm G,ratvec shift) = [Param]
allow a central shift

also in this file at line 232

unipotents

L660unipotents(RealForm G,ratvec shift) = [Param]

also in this file at line 252

theta_induced_unipotents

L662theta_induced_unipotents(RealForm G) = [Param]

theta_induced_unipotents_long

L672theta_induced_unipotents_long(RealForm G) = ([Param],[Param],[Param])

all_induced_unipotents_long

L681all_induced_unipotents_long(RealForm G)

show

L696show([Param] real_ind,[Param] theta_ind,[Param] all_ind,[Param] unipotents,[Param] non_ind) = void

also in this file at line 280, line 303; also defined in modules.at, K_Nilpotent.at, good_W_representatives.at, arthur_parameters.at, sub_cells.at, associated_variety_annihilator.at, geck_generic.at, L_packet.at, ratmat.at, Levi_subgroups.at, nilpotent_orbits.at, subgroups.at, poset.at, cyclotomic.at, polynomial.at, character_tables.at, springer_tables.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, exceptional.at, nilpotent_posets.at, lazy_lists.at

test_weak_packets

L712test_weak_packets(int n)
all simple simply connected or adjoint groups up to rank n
compute weak_packet_report, which includes computing
weak_packets for all Levi factors of real maximal parabolics,
so this is long list of many non-semisimple groups
Commented-out code, lines 719–726 (6 lines)
set x(ComplexNilpotent O_check)=
let rd=O_check.root_datum.dual in
KGB_elt(integrality_datum(rd,O_check.H/2).dual,id_mat(rd.rank),O_check.H/2)

set central_invariant(ComplexNilpotent O_check)=(RootDatum,int):
let rd=make_x(O_check).real_form in (rd,central_invariant(rd))

show_tempered

L728show_tempered([([([Param],[WCell])],[(int,int,Param)])] wp) = void

show_unipotent_tempered

L732show_unipotent_tempered(RealForm G) = void

unipotent_representations_by_orbit

L735unipotent_representations_by_orbit(RealForm G) = [[Param]]

Generated from atlas-scripts at commit 648506c (2026-10-13).