atlas Library · Script File
affine.at
<outer.at
Definitions in source order
cutoff
L10
cutoff = 10000terminate calculation after cutoff steps
affine_verbose
L12
affine_verbose = falsehighest_short_roots
L16
highest_short_roots(RootDatum rd) = [vec]highest short roots, obtained as dual to highest root of the dual
highest_short_root
L19
highest_short_root(RootDatum rd) = vecfrom basic.at: reflect: left action of root on X^* (add multiple of root) coreflect: right action of root on X_* (add multiple of coroot)L23
Affine root datum: (vec alpha^v,RootDatum rd,vec alpha) alpha should be a positive root, and alpha^v the corresponding coroot this acts on either X^* or X_* (\otimes Q) in this file: wt will always be an element of X^*\otimes Q cwt will always be an element of X_*\otimes Q Action on X_*: affine reflection is cwt -> s_alpha(cwt)+\alpha^v =cwt-<cwt,alpha>alpha^v + alpha^v =cwt-(<cwt,alpha>-1)alpha^v Action on X^*: affine reflection is wt -> s_alpha(wt)+\alpha =wt-<wt,alpha^v>alpha + alpha =wt-(<gamma,alpha^v>-1)alphaL28
AffineDatum type
L49
set_type AffineDatum = ([vec] affine_coroots,RootDatum rd,[vec] affine_roots)
Fields: affine_coroots, rd, affine_roots
rank
L50
rank(AffineDatum ad) = intalso defined in basic.at, combinatorics.at, sommers.at, character_tables.at
ss_rank
L51
ss_rank(AffineDatum ad) = intalso defined in misc.at
is_simple
L52
is_simple(AffineDatum ad) = boolalso defined in basic.at
is_one_factor 2 overloads
L53
is_one_factor(RootDatum rd) = boolL54
is_one_factor(AffineDatum ad) = boolnumber_factors
L56
number_factors(AffineDatum ad) = intaffine_root_sum
L57
affine_root_sum(AffineDatum ad)affine_coroot_sum
L58
affine_coroot_sum(AffineDatum ad)an affine root datum ad is obtained by "folding" from a pair
(root datum,distinguished automorphism)=(rd,delta)
each delta orbit of simple factors of rd contributes a single
simple factor of ad
1) delta trivial on a simple factor rd_i ->
-> (rd_i, highest long root)
folding_order =1
2) order delta=2 or 3 on a simple factor rd_i ->
-> (folded(rd_i), highest short root)
folding_order =2 or 3
3) delta permutes r simple factors rd_f
delta^r is an automorphism of the first one, of order 1,2,3
apply 1 or 2 to (rd_i,delta^r)
folding_order = 1,2 or 3 accordinglyL60basic affine datum uses highest root, folding_order=1 other affine data come from an automorphism of a simple root system rd_0 of order 2 or 3, in which case the underlying root datum rd is the "folded" one, and the affine root is the highest short root. In this case the order of the fold is ||highest root rd||/||highest short root of rd|| Conclusion: the order of the fold is always: ||highest root of rd||/||affine_root of rd||L77
folding_order
L88
folding_order(AffineDatum ad) = intfolding_orders
L94
folding_orders(AffineDatum ad) = [int]apply folding_order to each simple factor
AffineWeylElt type
L106
set_type AffineWeylElt = (AffineDatum ad, [int] w)
Fields: ad, w
the affine reflections are labeled -1,-2,...
inverse
L108
inverse(AffineWeylElt omega) = AffineWeylEltalso defined in basic.at, combinatorics.at, ratmat.at, parameters.at, tits.at, cyclotomic.at, Gaussian_elim.at, cyclotomic_Gaussian_elim.at, lazy_lists.at
affine_datum 2 overloads
L111
affine_datum(RootDatum rd,vec alpha) = AffineDatummake affine datum from a root, simple case
L116
affine_datum(RootDatum rd) = AffineDatumdefault affine datum, simple case: use the highest root
also defined in twisted_root_datum.at
default affine datum general case:L120
bad definition, see twisted_root_datum.atL121
reflect 6 overloads
L131
reflect((AffineDatum ad, vec beta), ratvec wt) = ratvecordinary reflections beta is a root, acting on from left on X^* or from right on X_*
Note: need the extra parentheses here to avoid ambiguity
L133
reflect((AffineDatum ad, int i), ratvec wt) = ratvecL135
reflect(AffineDatum ad) = ((vec,ratvec)->ratvec)L137
reflect(AffineDatum ad) = ((int,ratvec)->ratvec)L140
reflect(ratvec cwt,(AffineDatum ad, vec beta)) = ratvecaction from right implies coreflection, even though calling it |reflect|
L142
reflect(ratvec cwt,(AffineDatum ad, int i)) = ratvecalso defined in basic.at
coreflect 4 overloads
L146
coreflect(ratvec cwt, (AffineDatum ad, vec beta)) = ratvecor you can call it |coreflect|, but always write acting value on the right
L148
coreflect(ratvec cwt, (AffineDatum ad, int i)) = ratvecL150
coreflect(AffineDatum ad) = ((ratvec,vec)->ratvec)L152
coreflect(AffineDatum ad) = ((ratvec,int)->ratvec)also defined in basic.at
affine reflectionsL155
affine_reflect 2 overloads
L158
affine_reflect (AffineDatum ad,int i,ratvec wt) = ratvecaffine reflection on X^*: i is the number of the simple factor
L161
affine_reflect(AffineDatum ad) = ((int,ratvec)->ratvec)affine_coreflect 2 overloads
L165
affine_coreflect (ratvec cwt,AffineDatum ad,int i) = ratvecaffine (co)reflection on X_*
L168
affine_coreflect (AffineDatum ad) = ((ratvec,int)->ratvec)labels
L177
labels(AffineDatum ad)labels: defined for an affine datum, multiplicity of each simple root in affine root(s) more than one affine root: all multiplicities are 0 except 1 compute this by taking the <sum of affine roots,fundamental_coweight[i]>
co_labels
L178
co_labels(AffineDatum ad)affine_labels
L179
affine_labels(AffineDatum ad) = vecco_affine_labels
L180
co_affine_labels(AffineDatum ad) = vecfor plain RootDatum, use |simple_root_labels| (or coroot) from basic.atL182
reflect_or_affine_reflect
L188
reflect_or_affine_reflect ((AffineDatum ad,int i), ratvec wt) = ratvecordinary or affine reflection acting on X^*, indexed by integers 0<= i <ss_rank(rd): ordinary reflection ss_rank(rd) <= i < ss_rank(rd)+r: affine reflections
coreflect_or_affine_coreflect
L201
coreflect_or_affine_coreflect (ratvec cwt,(AffineDatum ad,int i)) = ratvecordinary or affine coreflection acting on X_*
coreflect_or_coaffine_reflect
L207
coreflect_or_coaffine_reflect (AffineDatum ad) = ((ratvec,int)->ratvec)affine_coordinates 7 overloads
L221
affine_coordinates (AffineDatum ad, ratvec wt) = (ratvec,ratvec)wt\in X^*\otimes Q
affine coordinates: a pair (v,w) of ratvecs
v=[a_0,...,a_{n-1}]
n=semisimple rank, a_i=inner product with simple coroot
w=[b_0,...,b_{r-1}]
r=#simple factors
b_i=<affine_coroots[i],lambda>-1/folding_orders[i]
\sum_{i=0}^{n-1} a_i +\sum_{j=0}^{r-1}b_j=r
fundamental alcove: [a_0,...,a_{n-1}],[b_0,...,b_{r-1}]
0\le a_i,b_j\le 1 all i,j
L228
affine_coordinates(RootDatum rd, ratvec wt) = (ratvec,ratvec)default affine coordinates
L231
affine_coordinates(AffineDatum ad, vec wt) = (vec,vec)in case of vec argument, return vec result
L234
affine_coordinates(RootDatum rd, vec wt) = (vec,vec)L237
affine_coordinates(ratvec cwt,AffineDatum ad) = (ratvec,ratvec)affine coordinates: X_*\otimes Q case
L243
affine_coordinates(vec cwt,AffineDatum ad) = (vec,vec)L247
affine_coordinates(vec cwt,RootDatum rd) = (vec,vec)confirm 2 overloads
L253
confirm(AffineDatum ad,ratvec coordinates) = voidtest: affine_coordinates(ad,wt)*co_affine_labels(ad)=1 affine_coordinates(cwt,ad)*affine_labels(ad)=1
L256
confirm(ratvec coordinates,AffineDatum ad) = voidin_fundamental_alcove 2 overloads
L259
in_fundamental_alcove(AffineDatum ad,ratvec wt) = boolL262
in_fundamental_alcove(ratvec cwt,AffineDatum ad) = boolaffine_non_dominant_index
L271
affine_non_dominant_index (AffineDatum ad, ratvec wt) = intwt\in X^* \otimes Q
v=[a_1,...,a_n] n=ss_rank
w=[b_1,...,b_r] r=#simple_factors
v##w=[a_1,...,a_n,b_1,...,b_r]
[0, ,...,n-1,n,..., ,n+r-1] (indices from 0 to n+r-1)
also in this file at line 276
is_affine_dominant
L273
is_affine_dominant(AffineDatum ad,ratvec wt) = boolalso in this file at line 278
affine_non_dominant_index
L276
affine_non_dominant_index (ratvec cwt,AffineDatum ad) = intcwt case
also in this file at line 271
is_affine_dominant
L278
is_affine_dominant(ratvec cwt,AffineDatum ad) = boolalso in this file at line 273
affine_make_dominant
L281
affine_make_dominant (AffineDatum ad, ratvec wt) = (ratvec,AffineWeylElt)wt\in X^* \otimes Q
affine_co_make_dominant 2 overloads
L301
affine_co_make_dominant (AffineDatum ad,ratvec cwt) = (ratvec,AffineWeylElt)wt\in X_* \otimes Q
L319
affine_co_make_dominant (AffineDatum ad) = (ratvec->ratvec,AffineWeylElt)Commented-out code, lines 322–347 (23 lines)
set *(AffineWeylElt omega,ratvec v)=ratvec:
for i in reverse(omega.w) do
v:=reflect_or_affine_reflect(omega.ad,i,v) od;v
set *(ratvec v,AffineWeylElt omega)=ratvec:
for i in reverse(omega.w) do
v:=reflect_or_affine_reflect(omega.ad,i,v) od;v
{to be consistent with other naming conventions in basic.at}
{v \in X^* \otimes Q, returns (w,omega) such that omega*w=v}
set affine_from_dominant(AffineDatum ad, ratvec wt)=(ratvec,AffineWeylElt):
affine_make_dominant(ad,wt)
set affine_dominant(AffineDatum ad, ratvec wt)=ratvec:
let (v,)=affine_from_dominant(ad,wt) in v
{v \in X_* \otimes Q, returns (w,omega) such that omega*w=v}
set affine_from_dominant(ratvec cwt,AffineDatum ad)=(ratvec,AffineWeylElt):
affine_make_dominant(ad,cwt)
set affine_dominant(ratvec cwt,RootDatum rd)=ratvec:
let (v,)=affine_from_dominant(cwt,affine_datum(rd)) in vco_usual_coordinates
L350
co_usual_coordinates(RootDatum rd, ratvec v)v\in X^*_Q, in co_affine coordinates
is_affine_conjugate 2 overloads
L354
is_affine_conjugate(AffineDatum ad,ratvec wt_1,ratvec wt_2) = boolL358
is_affine_conjugate(ratvec cwt_1,ratvec cwt_2,AffineDatum ad) = boolaction_fundamental_group
L363
action_fundamental_group (ratvec cwt,AffineDatum ad)action of fundamental group on fundamental alcove
Generated from atlas-scripts at commit 648506c (2026-10-13).
Commented-out code, lines 122–125 (3 lines)