homology

Usage

use homology;
var hypergraph = new AdjListHyperGraph(4, 3, new unmanaged Cyclic(startIdx = 0))
var _vtxSubsetSet = new set(string)
iter processVtxSubset(vtxSubset)
proc doProcessVertices(verticesSet)

Generate the permutation

var setContent = AppendExpr.Call08

Verify the set by printing

var _sz = 0
var kCellMap = new intmapstringlisttrue

bin k-cells, with key as the length of the list and value is a list with all the k-cells

class kCellsArray
var numKCells: int
var D = {1..numKCells}
var A: [D] string
proc init(_N: int)
proc findCellIndex(s: string)
var numBins = kCellMap.size-1
var kCellsArrayMap: [0..numBins] owned nilable kCellsArray
var kCellKeys = AppendExpr.Call08
record Comparator
proc Comparator.compare(a: string, b: string): int
var absComparator: Comparator
class Matrix

Start of the construction of boundary matrices.

var N: int
var M: int
var matrix: [1..N, 1..M] int
proc init(_N: int, _M: int)
var K = kCellMap.size-1
var boundaryMaps: [1..K] owned nilable Matrix
var i: int = 1
var vs = new set(string)
iter processVtxSubset2(vtxSubset)
proc doProcessVertices2(verticesSet)

Generate the permutation

proc printBoundaryMap(boundaryMap)
proc printmatrix(M)
proc IdentityMatrix(n)
class Matrix2D
var N: int
var M: int
var _arr: [1..N, 1..M] int
proc init(row: int, col: int)
proc _get_next_pivot(M, s1, in s2: int = 0)
proc swap_rows(i, j, M)
proc swap_columns(i, j, M)
proc add_to_row(M, i, j, ri = 1, rj = 1, mod = 2)
proc add_to_column(M, i, j, ci = 1, cj = 1, mod = 2)
proc matmultmod2(M, N, mod = 2)
proc matmultmod3(M, N, mod = 2)
proc matmultmod(M, N, mod = 2)
type listType = unmanaged nilable Matrix2Dlisttrue
proc matmulreduce(arr: listType, reverse = false, mod = 2)
proc calculateRank(M)
proc smithNormalForm(b)
var computedMatrices = smithNormalForm(boundaryMaps(1).matrix)
var computedMatrices2 = smithNormalForm(boundaryMaps(2).matrix)
var L1 = computedMatrices(1)
var R1 = computedMatrices(2)
var S1 = computedMatrices(3)
var L1invF = computedMatrices(4)
var R1invF = computedMatrices(5)
var L2 = computedMatrices2(1)
var R2 = computedMatrices2(2)
var S2 = computedMatrices2(3)
var L2invF = computedMatrices2(4)
var R2invF = computedMatrices2(5)
var rank1 = calculateRank(S1)
var rank2 = calculateRank(S2)
var nullity1 = AppendExpr.Call08-rank1
var betti1 = AppendExpr.Call08-rank1-rank2
var cokernel2_dim = AppendExpr.Call08-rank2
var nr1 = AppendExpr.Call08-rank1
var ker1: [1..AppendExpr.Call08, 1..nr1] int = ..R1rank1+1..
var im2: [1..AppendExpr.Call08, 1..rank2] int = ..L2invF1..rank2
var nr2 = AppendExpr.Call08-rank2
var cokernel2: [1..AppendExpr.Call08, 1..nr2] int = ..L2invFrank2+1..
var LKernel = new unmanaged nilable Matrix2Dlisttrue
var _L2 = new unmanaged AppendExpr.Call08Matrix2DAppendExpr.Call08
var _ker1 = new unmanaged AppendExpr.Call08Matrix2DAppendExpr.Call08
var result = matmulreduce(LKernel)
var slc = AppendExpr.Call08-rank2
var proj: [1..slc, 1..AppendExpr.Call08] int = rank2+1..result..
var L2invKernel = new unmanaged nilable Matrix2Dlisttrue
var _L2inv = new unmanaged AppendExpr.Call08Matrix2Dnr2
var _proj = new unmanaged AppendExpr.Call08Matrix2DAppendExpr.Call08
var proj2 = matmulreduce(L2invKernel)
proc reducedRowEchelonForm(b)