2025-11-31 : rappel feuille de route 2025

Le plan des séances est parfois changé après que celles-ci ont eu lieu.

Notebooks écrits en séances : 2025 : notebooks créés en séances.

Suggestions de sujets pour les séances.

Séance 1

  • introduction aux classes

  • attributs et méthodes

  • constructeur __init__

  • méthodes spéciales __str__, __add__

  • propriété @property

  • package dataclass

@dataclass
class SerieTelevisee:
    duree_episode: float
    n_episodes: int
    n_saisons: int
    categorie: str

    def __post_init__(self):
        self.duree_total = self.duree_episode * self.n_episodes * self.n_saisons

Utilisation de ChatGPT, Gemini, LeChat, … pour convertir un code sans classe en un code avec des classes et réciproquement.

Séance 2

  • héritage

  • itérateurs

  • tests unitaires

Ecriture de tests unitaires avec ChatGPT, Gemini, LeChat, …

Séance 3

  • numpy, broadcasting

  • implémentation d’un chi-deux sans boucle

  • comment implémenter la fonction repeat_interleave avec numpy et sans boucle ? En particulier cet exemple torch.repeat_interleave(y, torch.tensor([1, 2]), dim=0)

Un problème… que fait la fonction suivante ?

def reshape_keep0(arr, new_shape):
    orig_shape = arr.shape
    final_shape = []

    for i, dim in enumerate(new_shape):
        if dim == 0:
            final_shape.append(orig_shape[i])  # garder dimension originale
        else:
            final_shape.append(dim)
    return arr.reshape(tuple(final_shape))

Comment construire une fonction qui retourne l’argument new_shape quand on connaît les dimensions de départ et d’arrivée ? La fonction doit valider les exemples suivants, chaque dimension sous forme de chaîne de caractères peut prendre n’importe quelle valeur.

self.assertEqual((0, 1024, -1),     align(("d1", 4, 256, "d2"), ("d1", 1024, "d2")))
self.assertEqual((0, 0, 1024),      align(("d1", "d2", 4, 256), ("d1", "d2", 1024)))
self.assertEqual((6, -1),           align((2, 3, "d1"), ("a", "d1")))
self.assertEqual((6, -1),           align((2, 3, "d1"), (6, "d1")))
self.assertEqual((-1, 12, 196, 64), align(("d1", 196, 64), ("d2", 12, 196, 64)))
self.assertEqual((-1, 196, 64),     align(("d1", 196, 64), ("d2", 196, 64)))
self.assertEqual((32, 196, 64),     align((32, 196, 64), (32, 196, 64)))
self.assertEqual((4, 8, 196, 64),   align((32, 196, 64), (4, 8, 196, 64)))
self.assertEqual((32, 196, 64),     align((4, 8, 196, 64), (32, 196, 64)))
self.assertEqual((0, 196, 64),      align(("d1", 196, 64), ("d1", 196, 64)))
self.assertEqual((0, 196, 2, 32),   align(("d1", 196, 64), ("d1", 196, 2, 32)))

Séance 4

  • plus court chemin dans un graphe

  • voyageur de commerce

  • distance d’édition (si le temps le permet)

Séance 5

Séance 6

Expressions régulières, Modules, fichiers, expression régulières

Séance 7

Exemple d’assemblage d’algorithme avec le problème du postier chinois.

Révision avec un TD noté. Utilisation de ChatGPT, LeChat, Gemini après quelques minutes.

Séance 8

Quelques rappels en préparation du TD noté.

TD noté 1h30 en seconde partie. Classes et un algorithme. Enoncés des années précédentes : Séances minutées.