def row_reduce()

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])