-
Notifications
You must be signed in to change notification settings - Fork 0
Compact Function Descriptions
We give compact descriptions of what every function in the repository does. For more complete descriptions run
help FunctionName
where FunctionName is the name of the function. This prints out the starting comments in the code of each function.
There is also a function call graph here. The arrows denote function calls and the boxes enclose our "main" functions. The dotted arrows denote implicit dependencies, i.e. the function at the start of the arrow usually needs the precomputed result of the one at the end of the arrow (although does not explicitly call it).
The graph was created using GraphViz.
This is the usual Smith Normal Form algorithm over Z that works via row and column elimination. MATLAB also includes a Smith Normal Form function, but it only works for square invertible matrices so it's completely useless for our purposes. Smithoptimal has been optimized for speed against random matrices. It works by first finding a nonzero entry that's minimum in absolute value, bringing it to the start and using it to eliminate, as much as possible, the corresponding row and column. The algorithm iterates until we get a diagonal matrix.
Very similar to Smithoptimal, the difference being that it does not perform the initial step to search for minimum entries. Instead it starts with the first element, using it to eliminate its row and column as much as possible, and swapping if a smaller element presents itself. For random matrices it is considerably slower than Smithoptimal, but for the matrices used in the C4 computation it comes out ahead. This is because those matrices are highly symmetric, so it's very likely that the starting element (or an element near it) is the minimum one and we are saving time by not searching.
Given matrices f,g, this function computes the homology groups Ker(f)/Im(g) and their generators (in the basis f is written in). This uses the Smith normal form.
Given an element in Ker(f), Homologyelement writes it as a linear combination of the generators given by Homology.
Given a matrix A and a positive integer n, blkdiagopt creates a block diagonal matrix with n blocks, all of them equal to A. This is a more convenient and faster version of blkdiag function provided by MATLAB.
Transfers the differential between free Mackey functors from the bottom level to a higher level. It's imperative that the differential is written with respect to equivariant bases and then the effect of transferring (taking fixed points) translates to summing certain columns and deleting certain rows in our matrix.
Given an element in some level of a free Mackey functor, the first two functions transfer/restrict it while the third computes the Weyl group action on it. If the element is Res(A) then invers returns A (restriction is injective in free Mackey functors).
Any level of a free Mackey functor is the sum of Z[C4]'s, Z[C2]'s and Z's; the rank of that level is then an array of 4's, 2's and 1's that correspond to how many Z[C4]'s, Z[C2]'s and Z's we have. Example: Z[C4]+Z[C2]+Z[C4]+Z has rank [4,2,4,1]. This rank is used to transfer differentials of box products correctly.
The first transfers the rank to higher levels, the second computes the rank of the tensor product of two modules and the third does the same but for chain complexes.
Computes our desired differential of the box product of chains of free Mackey functors on the bottom level (so box=tensor). It uses boxchangebasis and matrixmixer to achieve that.
Recall that the differential of the tensor product is d(x⊗ y)=dx⊗ y+(-1)|x|x⊗ dy. The "left differential" is dx⊗ y and the "right differential" is (-1)|x|x⊗ dy. The matrixmixer function assembles the left and right differentials into the (total) differential.
If we have bases for modules A,B then A⊗B can be canonically given two lexicographical bases, that we call left and right convenient bases. But if A,B are the bottom levels of free Mackey functors then they have equivariant bases and the tensor product also gets an equivariant basis, called the canonical one. The left and right convenient bases are used to write the left and right differentials in a simple manner (hence their designation as convenient). The canonical bases are used to transfer.
Produces the permutations that define the change of bases matrices from the left and right convenient bases to the canonical one, given the ranks of the Mackey functors being tensored. To do that it uses the changeofbasis function.
Given two bases, one of which is a permutation of the other, produces that permutation.
Given two chain complexes C,D of Mackey functors and generators GC,GD in the homology of C,D resp and in the same level, this function takes their product GC*GD and writes it in terms of the generators in the homology of C⊗D. The idea is to first restrict to the bottom level, then take the box product and finally use invres to cancel out the restriction.
Returns the i-th differential and -ith rank of the bottom level of the standard chains for an (n,m) sphere where n,m have the same signs. These standard chains are based on the usual equivariant decomposition.
Produces the bottom level of the chains for any (n,m) sphere. If n,m have the same signs it just calls C4StandardDiff and otherwise it uses BoxDiff to box the chains given by C4Standard.
Computes the homology and generators of an equivariant sphere at all levels. This is done by using transferdifferential on the answer given by C4Diff and then applying Homology.
Computes the k homology of the (n,m) sphere as a Mackey functor. It takes the generators given by C4Homology and applies transfergenerator, restrict, action on them; the resulting elements are then compared with the other generators using Homologyelement. Finally using the Mackey_List (see below), every Mackey functor is assigned a Name.
Multiplies two generators of the C4 homology and returns the result as a linear combination of the generators. It uses Multiply to do that.
Reindexes the homology index k so that it is always between 0 and abs(n)+2*abs(m). Due to our indexing of chains always starting at 1, this is necessary so as to have the same index k no matter the sign of n,m. See Conventions.
Stores the C4 homology that is not zero, to be used in the formation of the multiplication table
Creates a multiplication table of all generators multiplied by any subset of them (the Euler+Orientation classes for example).
Writes the C4MackeyList variable in the C4_Mackey_List.mat file. This list is a dictionary between our notation of a Mackey functor and its Lewis diagram (i.e. its three levels, transfers, restrictions and Weyl group actions).
Writes the ChangeBasis variable in the C4_Change_Basis.mat file. This is a lookup table of the change of basis matrices produced by boxchangebasis (see The Lookup Table for more details).
Does the same as write_Look_Up but now multithreaded (see the Parallel Processing page of the wiki)
Enumerates the arrays used in the lookup table (it's the function f in The Lookup Table)
Runs all the write functions.
Loads all the written variables as fields of a single struct type variable. This is then fed as an input to many of our functions (the Data variable).
Factorizes any given generator given the multiplication table. To do that it uses a recursion FactorizationHub
Manages the recursion by deciding whether to try and factorize numerators or denominators, calling the FactorizeNum and FactorizeDen respectively.
Factorizes "numerators" in the sense that given an element x it tries to write it as y*z for y,z products of the MoreIrreducibles (eg. the Euler+orientation classes, w3,x11 and s3). It recurses within itself until it finds a factorization or no such factorization is possible in the range of the table. In the second case, it calls FactorizationHub to assign FactorizeDen the job.
Factorizes "denominators" in the sense that given an element x it tries to write it as y/z for y,z products of the MoreIrreducibles. Its behavior is similar to FactorizeNum.
Used to optimize the recursions FactorizeNum and FactorizeDen by computing the distances to the Basic Irreducibles and sorting them. In this way, FactorizeNum and FactorizeDen can hopefully complete their recursion quicker
Writes down the answer provided by Factorization in a more user friendly way, using names such as asigma etc.
The two "answer" functions contain the the Green functor structure from our paper. The test functions then compute the answer independently using the functions of the other folders and compare it to the one from our papers, throwing out errors if there is a discrepancy.