Galimat-IA

#Coup de gueule #IA #Python

Évaluer le code d’un projet d’étudiant peut parfois demander des contorsions mentales importantes pour tenter de comprendre au monde ce que les étudiants ont voulu faire.

C’était déjà le cas, mais il faut reconnaître que l’apparition de ChatGPT et autres Copilot permet, de ce point de vue, de changer radicalement d’univers.

Fini les codes un peu trop compliqués, vivent les chefs-d’oeuvre de pur non-sens des IAs (dé)génératives!

Voici sur quoi je suis tombé aujourd’hui, en évaluant des travaux pour le module python du CAS IDD de la HE-Arc. Je vous met le code tel quel, avec les commentaires qui constituent déjà une énigme à eux seuls.

# Pour l'apprentissage classe retourné par une IA (sauf la partie pour supprimmer la première variable et rejouter une variable a la fin de la liste)
# Crée une dictionnaire avec clé et une liste sur laquelle nous pouvons rajouter des variable et supprime la première variable de la liste si elle dépasse une certaine limite.
class MetaIterable(type):
    def __new__(cls, name, bases, dct):
        dct['add_to_list'] = lambda self, key, value: self.data.setdefault(key, []).append(value) if not key in self.data.keys() else \
            self.data.setdefault(key, []).append(value) if len(self.data[key]) < self.limit else (self.data[key].pop(0), self.data.setdefault(key, []).append(value))
        return super().__new__(cls, name, bases, dct)
        return super().__new__(cls, name, bases, dct)

# Pour l'apprentissage méthode retourné par une IA
# Methode qui additionne les valeurs d'une liste
def add_sum_method(cls):
    def sum_elements(self, key):
        return sum(self.data.get(key, []))
    cls.sum_elements = sum_elements
    return cls

# Pour l'apprentissage classe retourné par une IA (sauf la partie limit de la fonction)
# Classe pour itérer sur la class MetaIterable
@add_sum_method
class IterableDict(metaclass=MetaIterable):
    def __init__(self, limit):
        self.data = {}
        self.limit = limit

    # methode pour iterer sur le dictionaire
    def __iter__(self):
        for key, values in self.data.items():
            yield key, values

Une classe qui contient deux méthodes, dont une qui tente (et échoue, le code est faux) de reproduire le comportement qu’on a déjà gratuitement avec un dict. Puis on y ajoute une troisième méthode par un décorateur de classe, puis une quatrième par une métaclasse. Bien entendu les méthodes ajoutées de cette manière ne sont utilisées nulle part ailleurs. De plus, j’offre un café à celui qui arrive à comprendre en moins de 5 minutes ce que cherche à faire la quatrième méthode, définie dans l’inénarrable lambda-expression (qui, soit dit en passant, est fausse également).

Les experts apprécieront.

Pour les autres, disons que c’est un peu comme si un étudiant à qui vous demandez comment chauffer de l’eau vous répondait: “Alors j’ai demandé à une IA, il suffit d’affréter une fusée interstellaire et de l’envoyer en direction de Proxima du Centaure. Lorsque vous ne serez plus qu’à quelques millions de kilomètres, sortez un litre d’eau dans un récipient pressurisé et exposez-le au rayonnement de l’étoile jusqu’à obtention de la température désirée. Puis rapatriez le récipient sur terre”.