#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Jan 11 00:15:48 2024

@author: vincentleprince
"""


import matplotlib.pyplot as plt
import numpy as np

# importation des données 


from sklearn.datasets import load_digits
digits = load_digits()


#pour visualiser ces données
plt.gray()
plt.matshow(digits.images[67])
plt.show()


# détails utiles sur ces données 
print(digits.target[67])
print(type(digits.images[67]))

print(np.shape(digits.images[67]))

#On divise l'ensemble des images en (1797 images en tout) en :
#   un sous-ensemble d'images d'apprentissage
images_app = digits.images[:1000]
#   un sous-ensemble d'images test
images_test = digits.images[1000:]


## MISE EN PLACE DE LA MÉTHODE

def dist(Im1,Im2):
    """renvoie le carré de la distance entre deux images,
    représentées par des tableaux numpy de même taille"""
    #à compléter

#test
print(dist(images_app[0],images_app[1]))

def kNN(Im,images_app,k):
    """renvoie les indices des k plus proches voisins de l'image Im 
        dans l'ensemble des images d'apprentissage.
        (sans utiliser de tri)
    """
    n = len(images_app)
    l = [] #liste des indices des k images les plus proches de Im
    #à compléter
    return l

#test
Im  = digits.images[1000]
print(kNN(Im,images_app,5))


def argMax(l):
    """
    l est une liste ;
    renvoie l'indice où la valeur est maximale
    """
    #à compléter

def typekNN(Im,images_app,k):
    """renvoie le type (parmi les 10 chiffres) de l'image Im 
    détecté selon la méthode des k plus proches voisins,
    appliquée avec comme jeu de donnees la liste images_app.
    En cas d'égalité, la fonction renvoie une liste de plusieurs éléments"""
    listekNN = kNN(Im,images_app,k)
    #on récupère les chiffres apparaissant dans la liste de ces kNN
    chiffreskNN = [digits.target[i] for i in listekNN]
    #on détermine le nombre de fois où chaque chiffre apparaît :
    nombreChiffres = [0 for chiffre in range(10)]
    #à compléter
    
    #puis le chiffre qui apparaît le plus souvent :
    chiffreMax = #à compléter
    return chiffreMax

# test sur 10 images
for i in range(1000,1010):
    print(typekNN(digits.images[i],images_app,10))
    print(digits.target[i])
    
        