Skip to content

Preparing data for GAP

main()

Main function to process directories and files containing automorphism group data. Converts the .gaut files into .gap format and saves them in a specific output directory.

Source code in dsdp-lumping/gaut2gap.py
 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
def main():
    """
    Main function to process directories and files containing automorphism group data.
    Converts the .gaut files into .gap format and saves them in a specific output directory.
    """
    # Running individual directories
    stub = os.path.join(base_path,'data','processed','saucy_output')

    count=1

    firstfile=True
    for dirpath, dirlist, files in os.walk(stub):
        dname = os.path.join(base_path,'data','processed','gap_output')        
        for file in files:
            foutname=os.path.join(dname,file[:-5])+'.gap'
            # Check file type and whether it exists already
            if file[-4:]=='gaut' and file[0]!='.' and not os.path.isfile(foutname):
                # Make directory if it doesn't exist
                if len(dname)>0 and not os.path.exists(dname):
                    print('Making directory: '+dname)
                    os.makedirs(dname)
                # Source file stubs
                fname=os.path.join(dirpath,file[:-5])

                print(count,foutname)
                count+=1

                # Generators
                N,generators=readautomorphismgroup(fname)

                # Write generators to file
                if len(generators)>0:
                    fout=open(foutname,'w')

                    fout.write('N:={0};;\n'.format(N))
                    fout.write('z:=[')

                    first=True
                    for generator in generators:    
                        if first:
                            first=False
                        else:
                            fout.write(',')
                    # Write cycle                
                        for cycle in generator:
                            fout.write('(')
                            firstvertex=True                    
                            for vertex in cycle:
                                if firstvertex:
                                    firstvertex=False
                                else:
                                    fout.write(',')
                                fout.write('{0}'.format(vertex+1))
                            fout.write(')')

                    fout.write('];;\n')
                    fout.write('g:=Group(z);')
                    fout.close()
    return

readautomorphismgroup(fname)

Reads the automorphism group data from the .log and .gaut files generated by SCY.

fname (str): The file stub for the SCY output. It is expected to have corresponding .log and .gaut files in the same directory.

tuple: - int: The number of vertices in the graph. - list: A list of generator permutations represented as lists of two-cycles.

Source code in dsdp-lumping/gaut2gap.py
 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
def readautomorphismgroup(fname):
    """
    Reads the automorphism group data from the .log and .gaut files generated by SCY.

    Parameters:
    fname (str): The file stub for the SCY output. It is expected to have corresponding
                 `.log` and `.gaut` files in the same directory.

    Returns:
    tuple:
        - int: The number of vertices in the graph.
        - list: A list of generator permutations represented as lists of two-cycles.
    """

    # fname should be the stub for the output from scy
    # You should therefore have two files:
    # fname.log, and
    # fname.gaut

    # Get the number of vertices from the log file
    flog = open(fname+'.log','r')
    for line in flog:
        if line[0:8]=='vertices':
            N=int(line.lstrip('vertices = '))
            break
    flog.close()

    # Store the generator permutations in a list
    generators=[]

    # Get generators from gaut file
    fgaut = open(fname+'.gaut','r')
    for gstring in fgaut:
        # Remove brackets and split up into twocycles
        gstringlist=gstring.lstrip('(').rstrip(')\n').split(')(')
        # Turn the cycle strings into lists
        g=[[int(num) for num in x.split()] for x in gstringlist]
        generators.append(g)
    fgaut.close()
    return N,generators