DeRhamComputation/as_covers/as_auxilliary.sage
2023-09-23 13:33:58 +00:00

26 lines
987 B
Python

def magma_module_decomposition(A, B, text = False, prefix="", sufix=""):
"""Find decomposition of Z/p^2-module given by matrices A, B into indecomposables using magma.
If text = True, print the command for Magma. Else - return the output of Magma free."""
q = parent(A).base_ring().order()
p = q.factor()[0][0]
n = A.dimensions()[0]
A = str(list(A))
B = str(list(B))
A = A.replace("(", "")
A = A.replace(")", "")
B = B.replace("(", "")
B = B.replace(")", "")
result = prefix
if q != p:
result += "F<a> := GF(" + str(q) + ");"
result += "A := MatrixAlgebra<GF("+str(q) + "),"+ str(n) + "|"
result += A + "," + B
result += ">;"
result += "M := RModule(RSpace(GF("+str(q)+")," + str(n) + "), A);"
result += "L := IndecomposableSummands(M); L;"
result += "for i in [1 .. #L] do print(Generators(Action(L[i]))); end for;"
result += sufix
if text:
return result
return(magma_free(result))