File: script.g

package info (click to toggle)
lie 2.2.2%2Bdfsg-4
  • links: PTS
  • area: main
  • in suites: trixie
  • size: 1,036 kB
  • sloc: ansic: 12,761; yacc: 395; makefile: 111; sh: 4
file content (87 lines) | stat: -rw-r--r-- 3,439 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
GenerateFunction := function( l, n )
    local   cmd,  cmd2,  cmd3,  f,  i,  j,  m;
    
    cmd := "#############################################################################";
    Append( cmd, "\n##\n" );
    cmd2 := "#F  ";
    Append( cmd2, "Lie" );
    Append( cmd2, n );
    cmd3 := "call the LiE function \"";
    Append( cmd3, n );
    Append( cmd3, "\"" );
    Append( cmd2, " " );
    if Length(cmd2) mod 2 = 0  then
        Append( cmd2, " " );
    fi;
    while Length(cmd3)+Length(cmd2) < 76  do
        Append( cmd2, ". " );
    od;
    if Length(cmd3)+Length(cmd2) = 76  then
        Append( cmd2, " " );
    fi;
    Append( cmd, cmd2 );
    Append( cmd, cmd3 );
    Append( cmd, "\n##\n" );
    f := Filtered( l, x -> x[1] = n );
    cmd := Concatenation( cmd, "Lie" );
    Append( cmd, n );
    Append( cmd, " := function( arg )\n    local   res;\n\n" );
    for i  in [ 1 .. Length(f) ]  do
        m := [ 1 .. Length(f[i])-2 ];
        if f[i][Length(f[i])] = GRPDFT  then
            f[i] := Copy(f[i]);
            f[i]{[4..Length(f[i])]} := f[i]{[3..Length(f[i])-1]};
            f[i][3] := GRPDFT;
            m := Concatenation( [2..Length(f[i])-2], [1] );
        fi;
        if i = 1  then
            Append( cmd, "    if " );
        else
            Append( cmd, "    elif " );
        fi;
        cmd := Concatenation( cmd, " Length(arg) = ", String(Length(f[i])-2) );
        for j  in [ 3  .. Length(f[i]) ]  do
            Append( cmd, "\n        and " );
            if f[i][j] = MATRIX  then
                cmd := Concatenation( cmd, "IsMatrix(arg[",String(j-2),"])" );
            elif f[i][j] = GRPDFT  then
                cmd := Concatenation( cmd, "IsLieGroup(arg[",String(j-2),"])" );
            elif f[i][j] = INTEGER  then
                cmd := Concatenation( cmd, "IsInt(arg[",String(j-2),"])" );
            elif f[i][j] = VECTOR  then
                cmd := Concatenation( cmd, "IsVector(arg[",String(j-2),"])" );
            elif f[i][j] = POLY  then
                cmd := Concatenation( cmd, "IsLiePolynomial(arg[",String(j-2),"])" );
            elif f[i][j] = GROUP  then
                cmd := Concatenation( cmd, "IsLieGroup(arg[",String(j-2),"])" );
            fi;
        od;
        cmd := Concatenation( cmd, "\n    then\n" );
        cmd := Concatenation( cmd, "        # return type: " );
        if f[i][2] = MATRIX  then
            cmd := Concatenation( cmd, "MATRIX\n" );
        elif f[i][2] = VECTOR  then
            cmd := Concatenation( cmd, "VECTOR\n" );
        elif  f[i][2] = POLY  then
            cmd := Concatenation( cmd, "POLY\n" );
        elif  f[i][2] = INTEGER  then
            cmd := Concatenation( cmd, "INTEGER\n" );
        elif  f[i][2] = GROUP  then
            cmd := Concatenation( cmd, "GROUP\n" );
        fi;
        cmd := Concatenation( cmd, "        res := CallLie(\"", n, "\"" );
        for j   in [ 3 .. Length(f[i]) ]  do
            cmd := Concatenation( cmd, ", " );
            cmd := Concatenation( cmd, "arg[", String(m[j-2]), "]" );
        od;
        cmd := Concatenation( cmd, ");\n" );
    od;
    cmd := Concatenation( cmd, "    else\n        Error( \"" );
    cmd := Concatenation( cmd, "LiE has no function \\\"", n, "\\\"",
                          " for these types" );
    cmd := Concatenation( cmd, "\" );\n    fi;\n    return res;" );
    cmd := Concatenation( cmd, "\n\nend;\n\n\n" );
    return cmd;
    
end;