import numpy as np
from termcolor import colored

# reading the input file

vir_iris_data = np.genfromtxt('irisfile1.csv', delimiter=',')
random_iris_data = np.random.permutation(vir_iris_data)
test_data = random_iris_data[0:10, :4]
train_data = random_iris_data[10:, :4]
test_lbl = random_iris_data[0:10, 4:]
train_lbl = random_iris_data[10:, 4:]


def euclidean_distance(p1, p2):
    d = 0.0
    for i in range(len(p1)):
        a = float(p1[i])
        b = float(p2[i])
        d += np.power((a - b), 2)
    d = np.sqrt(d)
    return d


def KNN(train, test, lbl, K):
    distances = []
    for t, l in zip(train, lbl):
        dist = euclidean_distance(test, t)
        distances.append((t, dist, l[0]))
    distances.sort(key=lambda dist: dist[1])
    NN = []
    for i in range(K):
        NN.append(distances[i])
    return NN


def predict(train, test, lbl, K):
    neighbors = KNN(train, test, lbl, K)
    out = [row[-1] for row in neighbors]
    return max(set(out), key=out.count)


# main
for i in range(len(test_data)):
    p = predict(train_data, test_data[i], train_lbl, 1)
    print("test_lbl:", colored(test_lbl[i], 'green'), "prediction: ", colored(p, 'green'))