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¶
profiling
Recherche à base de préfixes en terme algorithmique.
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.