A = matrix([[0,1,2],[1,2,0],[2,0,1]])
def semi(n,A):
c = True
for i in range(n):
for j in range(n):
for k in range(n):
a = A[i, j]
b = A[j, k]
c = (A[a, k] == A[i, b]) and c
return c
def id(n,A):
c = True
d = False
for i in range(n):
for j in range(n):
k = (i+j) % n
c = (k == A[k, i]) and (k == A[i, k]) and c
d = c or d
return d
def group(n,id,A):
c = False
d = True
for i in range(n):
for j in range(n):
c = ((id == A[j, i]) and (id == A[i, j])) or c
d = c and d
return d
def abel(n,A):
d = True
for i in range(n):
for j in xrange(i,n):
c = A[j, i] == A[i, j]
d = c and d
return d
print semi(3,A)
print id(3,A)
print group(3,0,A)
print abel(3,A)