
import numpy
from classifier import KNN

def distilling(data, labels):
	# Init S and G
	S = data[:1].copy()
	S_labels = list(labels[:1])

	G = data[1:].copy()
	G_labels = list(labels[1:])

	c = KNN(1)

	stabilized = False
	while not stabilized:
		print 'Distilling', len(S)
		stabilized = True

		k = 0
		for i in range(len(G)):
			label = c.train(S, S_labels).process([G[k]])[0]
			if G_labels[k] != label:
				stabilized = False
				# Move Gi -> S
				S = numpy.append(S, [G[k]], 0)
				G = numpy.delete(G, k, 0)

				S_labels.append(G_labels[k])
				G_labels.pop(k)
			else:
				k += 1

	return S, S_labels
