-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
123 lines (100 loc) · 4.46 KB
/
Makefile
File metadata and controls
123 lines (100 loc) · 4.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# ========================================================================================
# Makefile - Automatisation pour le projet ft_linear_regression
# Objectifs :
# - Simplifier l’installation et la gestion de l’environnement (Poetry / venv)
# - Automatiser les vérifications (lint, format, type-check, tests, coverage, mutation)
# - Fournir des commandes pratiques pour l’entraînement et la prédiction du modèle
# ========================================================================================
.PHONY: install lint format type test cov mut train predict-nocheck viz tv-bench-all tv-bench-% activate deactivate
VENV = .venv
VENV_BIN = $(VENV)/bin/activate
# --- Benchmarks ---------------------------------------------------------------
BENCH_DIR := data/benchmarks
BENCH_CSVS := $(wildcard $(BENCH_DIR)/*.csv)
# Utilisation raccourcie de Poetry
POETRY = poetry run
# Paramètres par défaut (surchargables : make train DATA=... THETA=... ALPHA=... ITERS=...)
DATA ?= data/samples/data.csv
THETA ?= theta.json
ALPHA ?= 0.1
ITERS ?= 1000
# ----------------------------------------------------------------------------------------
# Installation des dépendances (dev inclus)
# ----------------------------------------------------------------------------------------
install:
poetry install --with dev
# ----------------------------------------------------------------------------------------
# Vérifications de qualité du code
# ----------------------------------------------------------------------------------------
# Linting avec Ruff (analyse statique rapide)
lint:
$(POETRY) ruff check .
# Formatage + correction auto avec Ruff
format:
$(POETRY) ruff format . && $(POETRY) ruff check --fix .
# Vérification des types avec Mypy
type:
$(POETRY) mypy src
# ----------------------------------------------------------------------------------------
# Tests et couverture
# ----------------------------------------------------------------------------------------
# Exécution des tests unitaires
test:
$(POETRY) pytest -vv
# Analyse de la couverture avec rapport JSON, HTML et console (100% requis)
cov:
$(POETRY) coverage run -m pytest && \
$(POETRY) coverage json -o coverage.json && \
$(POETRY) coverage html --skip-empty --show-contexts && \
$(POETRY) coverage report --fail-under=100
# Mutation testing avec Mutmut (robustesse des tests)
mut:
$(POETRY) mutmut run
$(POETRY) mutmut results > mutmut-results.txt
# ----------------------------------------------------------------------------------------
# Commandes liées au modèle (Poetry)
# ----------------------------------------------------------------------------------------
# Entraînement du modèle : génère le fichier theta.json
train:
$(POETRY) train --data $(DATA) --alpha $(ALPHA) --iters $(ITERS) --theta $(THETA)
# Prédiction du prix pour une valeur donnée (km)
predict-nocheck:
@$(POETRY) predict --theta $(THETA) $(filter-out $@,$(MAKECMDGOALS)) || true
# Visualisation des données + droite (theta0 + theta1 * x)
viz:
$(POETRY) python -m src.viz --data $(DATA) --theta $(THETA) --show-residuals --confidence --show-eq --show-median
# Tous les CSV de benchmarks : train + viz pour chacun
tv-bench-all:
@set -e; \
for f in $(BENCH_CSVS); do \
b=$$(basename "$$f" .csv); \
theta="theta_$${b}.json"; \
echo "==> $$b"; \
$(POETRY) train --data "$$f" --alpha $(ALPHA) --iters $(ITERS) --theta "$$theta"; \
$(POETRY) python -m src.viz --data "$$f" --theta "$$theta" --show-residuals --confidence; \
done
# Un dataset précis par nom de fichier sans extension
tv-bench-%:
@set -e; \
f="$(BENCH_DIR)/$*.csv"; \
test -f "$$f" || { echo "absent: $$f"; exit 1; }; \
theta="theta_$*.json"; \
echo "==> $*"; \
$(POETRY) train --data "$$f" --alpha $(ALPHA) --iters $(ITERS) --theta "$$theta"; \
$(POETRY) python -m src.viz --data "$$f" --theta "$$theta" --show-residuals --confidence
# Affiche la commande pour activer le venv
activate:
@echo "Chemin de l'environnement Poetry :"
@poetry env info -p
@echo
@echo "Pour activer manuellement cet environnement :"
@echo " source $$(poetry env info -p)/bin/activate"
# Affiche la commande pour désactiver le venv
deactivate:
@echo "Pour quitter l'environnement :"
@echo " deactivate"
# ----------------------------------------------------------------------------------------
# Règle générique pour ignorer les cibles numériques (ex. make predict-nocheck 23000)
# ----------------------------------------------------------------------------------------
%:
@: