in tutorials/LinearAlgebra/testing.py [0:0]
def row_reduce(mat):
n = len(mat)
m = len(mat[0])
for i in range(n):
row = mat[i]
if row[i] == approx(0) and i == n-1:
row[i] = 0
return
while row[i] == approx(0):
row[i] = 0
mat.append(row)
mat.pop(i)
row = mat[i]
factor = 1 / row[i]
for j in range(m):
row[j] *= factor
for j in range(i+1, n):
row_add(mat[j], row, -mat[j][i])
for i in range(n-1, -1, -1):
for j in range(i):
row_add(mat[j], mat[i], -mat[j][i])