import numpy as np

"""
Had some difficulties getting the levenshtein package to work, so implemented the code from here:
https://stackabuse.com/levenshtein-distance-and-text-similarity-in-python/
Calculates the Levenshtein distance of 2 input strings
Levenshtein distance = The number of changes required to make 2 strings the same
"""

def levenshtein(seq1, seq2):
    size_x = len(seq1) + 1
    size_y = len(seq2) + 1
    matrix = np.zeros((size_x, size_y))
    for x in range(size_x):
        matrix[x, 0] = x
    for y in range(size_y):
        matrix[0, y] = y

    for x in range(1, size_x):
        for y in range(1, size_y):
            if seq1[x - 1] == seq2[y - 1]:
                matrix[x, y] = min(
                    matrix[x - 1, y] + 1,
                    matrix[x - 1, y - 1],
                    matrix[x, y - 1] + 1
                )
            else:
                matrix[x, y] = min(
                    matrix[x - 1, y] + 1,
                    matrix[x - 1, y - 1] + 1,
                    matrix[x, y - 1] + 1
                )
    return matrix[size_x - 1, size_y - 1]


if __name__ == '__main__':
    print(levenshtein('abc def', 'abcdjf'))
