GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
#(C) Graham Ellis, 2005-2006
#####################################################################
InstallGlobalFunction(IntegralHomologyOfChainComplex,
function(C,n)
local
M1, M2, DimKerd1, Smith, TorsionCoefficients, Dimension, Boundary,
i;
if n <0 then return false; fi;
Dimension:=C!.dimension;
Boundary:=C!.boundary;
########################
if n=0 then
DimKerd1:=Dimension(n);
else
M1:=[];
for i in [1..Dimension(n)] do
M1[i]:=Boundary(n,i);
od;
if Dimension(n-1)=0 then M1:=List(M1,x->[0]); fi;
ConvertToMatrixRep(M1);
if Length(M1)=0 then
DimKerd1:=0;
else
DimKerd1:=Length(M1)-Rank(M1);
fi;
M1:=0;
fi;
#######################
#######################
M2:=[];
for i in [1..Dimension(n+1)] do
M2[i]:=Boundary(n+1,i);
od;
if Dimension(n)=0 then M2:=List(M2,x->[0]); fi;
ConvertToMatrixRep(M2);
Smith:= SmithNormalFormIntegerMat(M2);
M2:=0;
#######################
TorsionCoefficients:=[];
for i in [1..DimKerd1] do
if i<=Length(Smith) then
TorsionCoefficients[i]:=Smith[i][i];
else
TorsionCoefficients[i]:=0;
fi;
od;
return Filtered(TorsionCoefficients, i-> not (i=1)) ;
end);
#####################################################################
#####################################################################
#####################################################################
InstallGlobalFunction(HomologyPrimePart,
function(C,n,p)
local
M2, Smith, Divs, Dimension, Boundary,
i;
if n <0 then return false; fi;
Dimension:=C!.dimension;
Boundary:=C!.boundary;
#######################
M2:=[];
for i in [1..Dimension(n+1)] do
M2[i]:=Boundary(n+1,i);
od;
ConvertToMatrixRep(M2);
Divs:=ElementaryDivisorsPPartRk(M2,p);
M2:=0;
Smith:=[];
for i in [1..Length(Divs)-1] do
Append(Smith,ListWithIdenticalEntries(Divs[i]-Divs[i+1] ,p^i));
od;
#######################
return Smith ;
end);
#####################################################################
#####################################################################