MeatAxe
2.4
Programs for working with modular representations

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 32bit integers, T, R, and C, which are are stored in littleendian 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 32bit integers in littleendian format, the ith number being the image of i (for i = 0...N1).
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)=a_{n}x^{n}+...+a_{1}x+a_{0}, 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: (a_{0},a_{0},...a_{n}).
An rbyc matrix is stored with the header (8,r,c), followed by the marks in theit "natural" order, i.e., starting with a_{11} and ending with a_{rc<}. The marks are stored in 32bit littleendian format.
A bit string of length n is stored with the header (3,n,0), followed by k 32bit littleendian 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.