from sklearn.metrics import jaccard_score
from scipy.spatial import distance

#######################################################
# Name ## Gender # Fever # Cough # T1 # T2 # T3 # T4 ##
#######################################################
# Jack ##  M     #   Y   #   N   #  P # N  # N  # N  ##
# Mary ##  F     #   Y   #   N   #  P # N  # P  # N  ##
# Jim  ##  M     #   Y   #   P   #  N # N  # N  # N  ##
#######################################################

# Gender is a symmetric attribute
#The remaining attributes are asymmetric binary
#Let the values Y and P be 1, and the value N be 0

Jack=[1,0,1,0,0,0]
Mary=[1,0,1,0,1,0]
Jim =[1,1,0,0,0,0]

########################## Using Pure Python ##################
# We calculate the numbers q, r, s, t 
#
##########################################
#Actual####### Predicted ################# 
##########   1 ####  0  ##### sum ########
#  1    ##################################
##########  q  ####  r  ####  q+r ########
#  0    ##  s  ####  t  ####  s+t ########
##########################################

# J(i,j)= q/(q+r+s)

######################### Using pure python ############
def Jaccard_index_calc(arr1,arr2):
    q,r,s,t=0,0,0,0
    for i in range (0,len(arr1)):
        if((arr1[i]==1) and (arr2[i]==1)):
            q=q+1
        elif ((arr1[i]==1) and (arr2[i]==0)):
            r=r+1
        elif ((arr1[i]==0) and (arr2[i]==1)):
            s=s+1
        elif ((arr1[i]==0) and (arr2[i]==0)):
            t=t+1
    print("q: ",q," r: ",r," s: ",s," t: ",t)
    Jaccard_index_dist=(r+s)/(q+r+s)
    return Jaccard_index_dist

print("d(jack,mary)= ",Jaccard_index_calc(Jack, Mary))
print()
print("d(jack,jim)= ",Jaccard_index_calc(Jim, Jim))
print()
print("d(jim,mary)= ",Jaccard_index_calc(Jim, Mary))
print()

# Using sklearn and scipy for the calculation of jaccard similarity and jaccard distance respectively. #####################
print("jacard similarity(jack,mary) = ",jaccard_score(Jack, Mary, average="binary"))
print("jacard distance(jack,mary) = ",distance.jaccard(Jack,Mary))
print()
print("jacard similarity(jack,jim) = ",jaccard_score(Jim, Jim, average="binary"))
print("jacard distance(jack,jim) = ",distance.jaccard(Jim,Jim))
print()
print("jacard similarity(jim,mary) = ",jaccard_score(Jim, Mary, average="binary"))
print("jacard distance(jim,mary) = ",distance.jaccard(Jim,Mary))