MeatAxe  2.4
Programs for working with modular representations
File Formats

Binary Data Files

Binary data files contain a sequence of objects. Each object consists of a 12 byte header, followed by the data part. The object header consists of three 32-bit integers, T, R, and C, which are are stored in little-endian format. The first number, T, specifies which kind of object follows. R and C carry additional information about the object. Their exact meaning depends on the object type:

T   | Type of object   | R             |  C 
> 1 | Matrix over GF(T)| no. of rows   | no. of columns
-1  | Permutation      | no. of points | no. of permutations
-2  | Polynomial       | field         | degree
-3  | Bit string       | size          | 0
-8  | Integer matrix   | no. of rows   | no. of columns

Note: most MeatAxe programs expect their input objects in separate files rather than reading multiple objects from a single file. This is true, for example, for the set of generators that is used by programs like zsp - Spin Up or chop - Find Irreducible Constituents. For this reason, most data files contain only a single object.


Matrices are stored as a sequence of rows in the internal format (see Finite Fields), but the rows are truncated to their actual length. For example, a row with 17 entries over GF(125) on a machine with sizeof(long)=4 would occupy 20 bytes in memory but only 17 bytes in a data file. As specified in UNDEFINED:kernel.ff, unused bits in the last byte of each row are always filled with zeroes.


A permutation of degree N is stored as N 32-bit integers in little-endian format, the i-th number being the image of i (for i = 0...N-1).

For example, the permutation (1 2)(3 4 5) on five points is represented as (0 1)(2 3 4). The following hexdump shows the corresponding data file:

Offset  Content
0000000 ff ff ff ff     Header T = -1 (Permutation)
0000004 05 00 00 00     Header R = 5 (degree)
0000008 01 00 00 00     Header C = 1 (number of permutations)
000000c 01 00 00 00     p(0) = 1
0000010 00 00 00 00     p(1) = 0
0000014 03 00 00 00     p(2) = 3
0000018 04 00 00 00     p(3) = 4
000001c 02 00 00 00     p(4) = 2

For compatibility with older MeatAxe versions, the program can also read a different format where the points are numbered from 1 to N.


A polynomial of degree n, p(x)=anxn+...+a1x+a0, over GF(q) is stored with the header (-2,n,q). The header is followd by one row of size n+1 containing the coefficients in ascendig order: (a0,a0,

Integer matrices

An r-by-c matrix is stored with the header (-8,r,c), followed by the marks in theit "natural" order, i.e., starting with a11 and ending with arc<. The marks are stored in 32-bit little-endian format.

Bit strings

A bit string of length n is stored with the header (-3,n,0), followed by k 32-bit little-endian numbers, where k is chosen such that 32k ≤ n < 32k+1. The least significant bit of the first number is the first bit of the string.

MeatAxe 2.4 documentation, generated on Wed Jan 7 2015 08:38:36