import numpy as np
from scipy import spatial

from sklearn.metrics.pairwise import cosine_similarity

############### using pure python ###################
List1 = [ 4, 45,  8,  4,5,100]
List2=[12, 123,  6,  4,0,1]
numerator=0
denominator=0
Euclidean_norm_List1=0
Sum_A_i_2=0
Sum_B_i_2=0
for i in range(0,len(List1)):
    numerator=numerator+List1[i]*List2[i]
    Sum_A_i_2=Sum_A_i_2+(List1[i])**2
    Sum_B_i_2=Sum_B_i_2+(List2[i])**2
denominator=Sum_A_i_2**0.5 * Sum_B_i_2**0.5
Cosine_Similarity=numerator/denominator
print("Pure python: ",Cosine_Similarity)
################## Using scipy #################
List1 = [ 4, 45,  8,  4]
List2=[2, 23,  6,  4]
List3 = [2, 54, 13, 15]
result = 1 - spatial.distance.cosine(List1, List2)
result1 = 1 - spatial.distance.cosine(List1, List3)
result2 = 1 - spatial.distance.cosine(List2, List1)
result3 = 1 - spatial.distance.cosine(List3, List1)
print("Cosine Similarity using scipy.")
print("Cosine Similarity between List1 and List2: ",result)
print("Cosine Similarity between List1 and List3: ",result1)
print("Cosine Similarity between List1 and List2: ",result2)
print("Cosine Similarity between List1 and List3: ",result3)

######################### sklearn ##############################

array_vec_1 = np.array([ [ 4, 45,  8,  4]])
array_vec_2 = np.array([[2, 23,  6,  4]])
print(cosine_similarity(array_vec_1, array_vec_2))
