Interface to LiE¶
LiE is a software package under development at CWI since January 1988. Its purpose is to enable mathematicians and physicists to obtain on-line information as well as to interactively perform computations of a Lie group theoretic nature. It focuses on the representation theory of complex semisimple (reductive) Lie groups and algebras, and on the structure of their Weyl groups and root systems.
Type lie.[tab]
for a list of all the functions available
from your LiE install. Type lie.[tab]?
for LiE’s
help about a given function. Type lie(...)
to create
a new LiE object, and lie.eval(...)
to run a string
using LiE (and get the result back as a string).
To access the LiE interpreter directly, run lie_console().
EXAMPLES:
sage: a4 = lie('A4') # optional - lie
sage: lie.diagram('A4') # optional - lie
O---O---O---O
1 2 3 4
A4
sage: lie.diagram(a4) # optional - lie
O---O---O---O
1 2 3 4
A4
sage: a4.diagram() # optional - lie
O---O---O---O
1 2 3 4
A4
sage: a4.Cartan() # optional - lie
[[ 2,-1, 0, 0]
,[-1, 2,-1, 0]
,[ 0,-1, 2,-1]
,[ 0, 0,-1, 2]
]
sage: lie.LR_tensor([3,1],[2,2]) # optional - lie
1X[5,3]
Tutorial¶
The following examples are taken from Section 2.1 of the LiE manual.
You can perform basic arithmetic operations in LiE.
sage: lie.eval('19+68') # optional - lie
'87'
sage: a = lie('1111111111*1111111111') # optional - lie
sage: a # optional - lie
1234567900987654321
sage: a/1111111111 # optional - lie
1111111111
sage: a = lie('345') # optional - lie
sage: a^2+3*a-5 # optional - lie
120055
sage: _ / 7*a # optional - lie
5916750
Vectors in LiE are created using square brackets. Notice that the indexing in LiE is 1-based, unlike Python/Sage which is 0-based.
sage: v = lie('[3,2,6873,-38]') # optional - lie
sage: v # optional - lie
[3,2,6873,-38]
sage: v[3] # optional - lie
6873
sage: v+v # optional - lie
[6,4,13746,-76]
sage: v*v # optional - lie
47239586
sage: v+234786 # optional - lie
[3,2,6873,-38,234786]
sage: v-3 # optional - lie
[3,2,-38]
sage: v^v # optional - lie
[3,2,6873,-38,3,2,6873,-38]
You can also work with matrices in LiE.
sage: m = lie('[[1,0,3,3],[12,4,-4,7],[-1,9,8,0],[3,-5,-2,9]]') # optional - lie
sage: m # optional - lie
[[ 1, 0, 3,3]
,[12, 4,-4,7]
,[-1, 9, 8,0]
,[ 3,-5,-2,9]
]
sage: print(lie.eval('*'+m._name)) # optional - lie
[[1,12,-1, 3]
,[0, 4, 9,-5]
,[3,-4, 8,-2]
,[3, 7, 0, 9]
]
sage: m^3 # optional - lie
[[ 220, 87, 81, 375]
,[-168,-1089, 13,1013]
,[1550, 357,-55,1593]
,[-854, -652, 98,-170]
]
sage: v*m # optional - lie
[-6960,62055,55061,-319]
sage: m*v # optional - lie
[20508,-27714,54999,-14089]
sage: v*m*v # optional - lie
378549605
sage: m+v # optional - lie
[[ 1, 0, 3, 3]
,[12, 4, -4, 7]
,[-1, 9, 8, 0]
,[ 3,-5, -2, 9]
,[ 3, 2,6873,-38]
]
sage: m-2 # optional - lie
[[ 1, 0, 3,3]
,[-1, 9, 8,0]
,[ 3,-5,-2,9]
]
LiE handles multivariate (Laurent) polynomials.
sage: lie('X[1,2]') # optional - lie
1X[1,2]
sage: -3*_ # optional - lie
-3X[1,2]
sage: _ + lie('4X[-1,4]') # optional - lie
4X[-1,4] - 3X[ 1,2]
sage: _^2 # optional - lie
16X[-2,8] - 24X[ 0,6] + 9X[ 2,4]
sage: lie('(4X[-1,4]-3X[1,2])*(X[2,0]-X[0,-4])') # optional - lie
-4X[-1, 0] + 3X[ 1,-2] + 4X[ 1, 4] - 3X[ 3, 2]
sage: _ - _ # optional - lie
0X[0,0]
You can call LiE’s built-in functions using lie.functionname
.
sage: lie.partitions(6) # optional - lie
[[6,0,0,0,0,0]
,[5,1,0,0,0,0]
,[4,2,0,0,0,0]
,[4,1,1,0,0,0]
,[3,3,0,0,0,0]
,[3,2,1,0,0,0]
,[3,1,1,1,0,0]
,[2,2,2,0,0,0]
,[2,2,1,1,0,0]
,[2,1,1,1,1,0]
,[1,1,1,1,1,1]
]
sage: lie.diagram('E8') # optional - lie
O 2
|
|
O---O---O---O---O---O---O
1 3 4 5 6 7 8
E8
You can define your own functions in LiE using lie.eval . Once you’ve defined a function (say f), you can call it using lie.f ; however, user-defined functions do not show up when using tab-completion.
sage: lie.eval('f(int x) = 2*x') # optional - lie
''
sage: lie.f(984) # optional - lie
1968
sage: lie.eval('f(int n) = a=3*n-7; if a < 0 then a = -a fi; 7^a+a^3-4*a-57') # optional - lie
''
sage: lie.f(2) # optional - lie
-53
sage: lie.f(5) # optional - lie
5765224
LiE’s help can be accessed through lie.help(‘functionname’) where functionname is the function you want to receive help for.
sage: print(lie.help('diagram')) # optional - lie
diagram(g). Prints the Dynkin diagram of g, also indicating
the type of each simple component printed, and labeling the nodes as
done by Bourbaki (for the second and further simple components the
labels are given an offset so as to make them disjoint from earlier
labels). The labeling of the vertices of the Dynkin diagram prescribes
the order of the coordinates of root- and weight vectors used in LiE.
This can also be accessed with lie.functionname? .
With the exception of groups, all LiE data types can be converted into native Sage data types by calling the .sage() method.
Integers:
sage: a = lie('1234') # optional - lie
sage: b = a.sage(); b # optional - lie
1234
sage: type(b) # optional - lie
<type 'sage.rings.integer.Integer'>
Vectors:
sage: a = lie('[1,2,3]') # optional - lie
sage: b = a.sage(); b # optional - lie
[1, 2, 3]
sage: type(b) # optional - lie
<... 'list'>
Matrices:
sage: a = lie('[[1,2],[3,4]]') # optional - lie
sage: b = a.sage(); b # optional - lie
[1 2]
[3 4]
sage: type(b) # optional - lie
<type 'sage.matrix.matrix_integer_dense.Matrix_integer_dense'>
Polynomials:
sage: a = lie('X[1,2] - 2*X[2,1]') # optional - lie
sage: b = a.sage(); b # optional - lie
-2*x0^2*x1 + x0*x1^2
sage: type(b) # optional - lie
<type 'sage.rings.polynomial.multi_polynomial_libsingular.MPolynomial_libsingular'>
Text:
sage: a = lie('"text"') # optional - lie
sage: b = a.sage(); b # optional - lie
'text'
sage: type(b) # optional - lie
<... 'str'>
LiE can be programmed using the Sage interface as well. Section 5.1.5 of the manual gives an example of a function written in LiE’s language which evaluates a polynomial at a point. Below is a (roughly) direct translation of that program into Python / Sage.
sage: def eval_pol(p, pt): # optional - lie
....: s = 0
....: for i in range(1,p.length().sage()+1):
....: m = 1
....: for j in range(1,pt.size().sage()+1):
....: m *= pt[j]^p.expon(i)[j]
....: s += p.coef(i)*m
....: return s
sage: a = lie('X[1,2]') # optional - lie
sage: b1 = lie('[1,2]') # optional - lie
sage: b2 = lie('[2,3]') # optional - lie
sage: eval_pol(a, b1) # optional - lie
4
sage: eval_pol(a, b2) # optional - lie
18
AUTHORS:
Mike Hansen 2007-08-27
William Stein (template)
-
class
sage.interfaces.lie.
LiE
(maxread=None, script_subdirectory=None, logfile=None, server=None)¶ Bases:
sage.interfaces.tab_completion.ExtraTabCompletion
,sage.interfaces.expect.Expect
Interface to the LiE interpreter.
Type
lie.[tab]
for a list of all the functions available from your LiE install. Typelie.[tab]?
for LiE’s help about a given function. Typelie(...)
to create a new LiE object, andlie.eval(...)
to run a string using LiE (and get the result back as a string).-
console
()¶ Spawn a new LiE command-line session.
EXAMPLES:
sage: lie.console() # not tested LiE version 2.2.2 created on Sep 26 2007 at 18:13:19 Authors: Arjeh M. Cohen, Marc van Leeuwen, Bert Lisser. Free source code distribution ...
-
eval
(code, strip=True, **kwds)¶ EXAMPLES:
sage: lie.eval('2+2') # optional - lie '4'
-
function_call
(function, args=None, kwds=None)¶ EXAMPLES:
sage: lie.function_call("diagram", args=['A4']) # optional - lie O---O---O---O 1 2 3 4 A4
-
get
(var)¶ Get the value of the variable var.
EXAMPLES:
sage: lie.set('x', '2') # optional - lie sage: lie.get('x') # optional - lie '2'
-
get_using_file
(var)¶ EXAMPLES:
sage: lie.get_using_file('x') Traceback (most recent call last): ... NotImplementedError
-
help
(command)¶ Returns a string of the LiE help for command.
EXAMPLES:
sage: lie.help('diagram') # optional - lie 'diagram(g)...'
-
read
(filename)¶ EXAMPLES:
sage: filename = tmp_filename() sage: f = open(filename, 'w') sage: _ = f.write('x = 2\n') sage: f.close() sage: lie.read(filename) # optional - lie sage: lie.get('x') # optional - lie '2' sage: import os sage: os.unlink(filename)
-
set
(var, value)¶ Set the variable var to the given value.
EXAMPLES:
sage: lie.set('x', '2') # optional - lie sage: lie.get('x') # optional - lie '2'
-
version
()¶ EXAMPLES:
sage: lie.version() # optional - lie '2.1'
-
-
class
sage.interfaces.lie.
LiEElement
(parent, value, is_name=False, name=None)¶ Bases:
sage.interfaces.tab_completion.ExtraTabCompletion
,sage.interfaces.expect.ExpectElement
-
type
()¶ EXAMPLES:
sage: m = lie('[[1,0,3,3],[12,4,-4,7],[-1,9,8,0],[3,-5,-2,9]]') # optional - lie sage: m.type() # optional - lie 'mat'
-
-
class
sage.interfaces.lie.
LiEFunction
(parent, name)¶
-
class
sage.interfaces.lie.
LiEFunctionElement
(obj, name)¶
-
sage.interfaces.lie.
is_LiEElement
(x)¶ EXAMPLES:
sage: from sage.interfaces.lie import is_LiEElement sage: l = lie(2) # optional - lie sage: is_LiEElement(l) # optional - lie True sage: is_LiEElement(2) False
-
sage.interfaces.lie.
lie_console
()¶ Spawn a new LiE command-line session.
EXAMPLES:
sage: from sage.interfaces.lie import lie_console sage: lie_console() # not tested LiE version 2.2.2 created on Sep 26 2007 at 18:13:19 Authors: Arjeh M. Cohen, Marc van Leeuwen, Bert Lisser. Free source code distribution ...
-
sage.interfaces.lie.
lie_version
()¶ EXAMPLES:
sage: from sage.interfaces.lie import lie_version sage: lie_version() # optional - lie '2.1'
-
sage.interfaces.lie.
reduce_load_lie
()¶ EXAMPLES:
sage: from sage.interfaces.lie import reduce_load_lie sage: reduce_load_lie() LiE Interpreter