def gauss2(A): U = matrix(QQ,A.nrows(),A.nrows()) for i in range(A.nrows()): U[i,i]=1 U1 = deepcopy(U) k = 1 for j in range(1, A.ncols()+1): i=k while(i <= A.nrows() and A[i-1,j-1] == 0): i = i+1 if (i <= A.nrows() ): U.swap_rows(k-1,i-1) U1.swap_columns(k-1,i-1) A.swap_rows(k-1,i-1) U.rescale_row(k-1, 1/A[k-1,j-1]) U1.rescale_col(k-1, A[k-1,j-1]) A.rescale_row(k-1, 1/A[k-1,j-1]) for i in range(k+1,A.nrows()+1): U1.add_multiple_of_column(k-1,i-1,A[i-1,j-1]) U.add_multiple_of_row(i-1,k-1,-A[i-1,j-1]) A.add_multiple_of_row(i-1,k-1,-A[i-1,j-1]) for i in range(1,k): U1.add_multiple_of_column(k-1,i-1,A[i-1,j-1]) U.add_multiple_of_row(i-1,k-1,-A[i-1,j-1]) A.add_multiple_of_row(i-1,k-1,-A[i-1,j-1]) k = k+1 return (U,U1)