'Pad a possibly non-square matrix to make it square.
:Parameters:
matrix : list of lists
matrix to pad
pad_value : int
value to use to pad the matrix
:rtype: list of lists
:return: a new, possibly padded, matrix'

def pad_matrix(self, matrix, pad_value=0):

    max_columns = 0
    total_rows = len(matrix)
    for row in matrix:
        max_columns = max(max_columns, len(row))
    total_rows = max(max_columns, total_rows)
    new_matrix = []
    for row in matrix:
        row_len = len(row)
        new_row = row[:]
        if (total_rows > row_len):
            new_row += ([0] * (total_rows - row_len))
        new_matrix += [new_row]
    while (len(new_matrix) < total_rows):
        new_matrix += [([0] * total_rows)]
    return new_matrix
