def syntheseVote(sondage):
    pass

def vainqueur(sondage):
    pass

sondageTest = [("A",0.5),("C",1.2),("A",2.52),("A",7.7),("B",0.3),("C",0.12),("A",0.4),("B",1.1),("C",4.5),("B",0.5),("C",0.5)]

def distCarre(X1,X2):
    pass



def kPlusProches(Y,listeX,k):
    #vous pouvez faire une sous procédure
    pass

def testGrille(Y):
    pass

def prediction(Y,XRef,etiqRef,k):
    pass
    
def proportionValide(etiqTest,etiqPred):
    pass
    
def matriceConfusion(nbClasses,etiqTest,etiqPred):
    pass  
    
def testCodePerso(XRef,k,etiqRef,XTest,nbClasses):
    etiqPred=[prediction(y,XRef,etiqRef,k) for y in XTest]
    s=proportionValide(etiqTest,etiqPred)
    print("Version perso ; score de prédiction",s)
    print(matriceConfusion(nbClasses,etiqTest,etiqPred))

def testModuleKNN(XRef,k,etiqRef,XTest,nbClasses):
    #test sur la version toute faite
    from sklearn.neighbors import KNeighborsClassifier
    kVoisins=KNeighborsClassifier(n_neighbors=k)
    kVoisins.fit(XRef,etiqRef)
    etiqPred=kVoisins.predict(XTest)
    s=proportionValide(etiqTest,etiqPred)
    print("Version préprogrammée ; score de prédiction",s)
    print(matriceConfusion(nbClasses,etiqTest,etiqPred))


#récupération d'un jeu de données
from sklearn.datasets import load_iris
iris=load_iris()

#séparation jeu d'apprentissage / jeu de test
from sklearn.model_selection import train_test_split
XRef,XTest,etiqRef,etiqTest=train_test_split(iris['data'],iris['target'])   


#test sur la version maison et la version préimplantée
#testCodePerso(XRef,13,etiqRef,XTest,3)
#testModuleKNN(XRef,13,etiqRef,XTest,3)



def bouleEnglobante(listeX,indices):
    pass
    
def coupeEnDeux(listeX,indices):
    d=len(listeX[0])
    n=len(indices)
    listeX2=listeX[indices]
    dimMax=np.argmax(np.max(listeX2,0)-np.min(listeX2,0))
    ordrIndices=np.argsort(listeX2[:, dimMax])
    m=(n+1)//2 #partie entière supérieure de n/2
    i1=indices[ordrIndices[:m]]
    i2=indices[ordrIndices[m:]]
    return i1,i2
    
def creerBallTree(listeX):
    pass
    

