need to be merge

This commit is contained in:
maoake
2026-04-02 12:36:10 +02:00
parent 732cf25a57
commit 53316f4e32
+1 -250
View File
@@ -1,250 +1 @@
# A Maze Ing
Un générateur et solveur de labyrinthe en Python avec interface MLX (2D pixels), accompagné de code robuste, tests et typage statique.
## Description
A Maze Ing vise à implémenter un ensemble de fonctionnalités complètes pour la génération, représentation et résolution dun labyrinthe, dans un contexte pédagogique :
- génération de labyrinthe avec deux algorithmes classiques (`DepthFirstSearch` et `Kruskal`);
- représentation textuelle et structurelle de la grille via `Cell` et `Maze`;
- solveurs (`DepthFirstSearchSolver`, `AStar`) pour retrouver un chemin source/target;
- interface graphique avec `mlx` pour visualiser en temps réel.
Le but est de coder un moteur de maze complet, testable et maintenable, tout en appliquant des pratiques modernes (typing, tests, CI via Makefile).
## Objectifs
- comprendre et placer les algorithmes de génération dans un pipeline complet
- offrir un usage reproductible via config + API
- démontrer la compatibilité avec `pytest` et `mypy`
- fournir un produit avec UI interactive et animation de chemin
## Instructions
### Prérequis
- Python 3.10+
- Numpy, Pydantic, Pytest, Mypyc/ Mypy, Flake8, mlx (via distribution locale `mlx-2.2-py3-none-any.whl`)
### Installation
```
git clone <url> amazing
cd amazing
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip setuptools
pip install -r requirements.txt # si présent, sinon :
pip install pydantic numpy pytest mypy
pip install mlx-2.2-py3-none-any.whl
```
### Exécution
- Direct :
```
PYTHONPATH=src python3 a_maze_ing.py config.txt
```
- Make :
```sh
make run
```
### Tests
```
PYTHONPATH=src pytest
```
### Lint / mypy
```
make lint
make lint-strict
```
ou
```
PYTHONPATH=src python3 -m mypy --warn-return-any --warn-unused-ignores --ignore-missing-imports --disallow-untyped-defs --check-untyped-defs -p mazegen -p AMazeIng
```
## Structure du projet
- `a_maze_ing.py` : point dentrée CLI / application MLX.
- `src/AMazeIng.py` : modèle Pydantic + orchestration `Maze`/`MazeGenerator`/`MazeSolver`.
- `src/mazegen/Cell.py` : classe `Cell` (int bitmask) + méthodes accès.
- `src/mazegen/Maze.py` : stockage et opérations sur la grille.
- `src/mazegen/MazeGenerator.py` : interfaces + `DepthFirstSearch`, `Kruskal`.
- `src/mazegen/MazeSolver.py` : `DepthFirstSearchSolver`, `AStar`.
- `src/parsing/Parsing.py` : lecture et validation du `config.txt`.
- `tests/` : tests unitaires.
- `Makefile` : cibles build/install/run/lint.
## Config file (complète)
- `config.txt` doit contenir au moins :
- largeur/hauteur
- entrée et sortie (coordonnées 1-based)
- nom du solveur, nom du générateur
- paramètres de visualisation.
(Le parser `src/parsing/Parsing.py` gère la validation et erreur 1/2/3 etc.)
## Algorithme de génération choisi
- `Kruskal` (fusion densembles) comme méthode principale.
- `DepthFirstSearch` (backtracking) complémentaire.
### Pourquoi Kruskal
- génère un labyrinthe parfait, totalement plein sans cycles, très lisible.
- bonne base pour `unperfect_maze` (possibilité de briser des murs).
- facile à tester et à raisonner, code modulaire.
## Reusable code
- `Cell` et `Maze` peuvent servir à nimporte quelle appli de grille / labyrinthes.
- `MazeGenerator` / `MazeSolver` sont des interfaces réutilisables pour autres implémentations.
- `Parsing` est un parser général de config (validation Pydantic).
## Usage / features avancées
- supports `perfect` ou `imperfect` (avec openning randomisé)
- render loop avec maj dynamique et chemins animés
- switch generator/solver à lexécution
- couleur de chemin et patterns (42)
## Resources
- Documentation python : https://docs.python.org/3/
- Mypy : https://mypy.readthedocs.io/
- Pydantic : https://docs.pydantic.dev/
- Algorithme labyrinthe : https://en.wikipedia.org/wiki/Maze_generation_algorithm
- A* : https://en.wikipedia.org/wiki/A*_search_algorithm
- Tutoriel DFS / Kruskal maze : https://weblog.jamisbuck.org/2011/1/16/maze-generation-depth-first-search
### IA utilisée
- Copilot Chat (Raptor mini) : aide à :
- correction derreurs `mypy` / import module
- refactorisation import `from mazegen.Cell import Cell`
- création du README complet
- recommandations de workflow et tests
## Équipe et gestion de projet
- Dev unique ou équipe réduite (à préciser) :
- Rôles : dev, tests, doc, releases.
- Planning anticipé :
- 1 semaine : structure + model
- 1 semaine : générateur + solveur
- 1 semaine : interface MLX + tests
- 1 semaine : typage / CI / docs
- Ce qui a bien marché :
- architecture modulaire, tests automatisés
- apprentissage sur typage et mypy
- Améliorations possibles :
- ajout dune UI web/SDL
- stubs type pour `mlx`
- config utilisateur plus riche / JSON
## Outils
- Python 3.10
- pytest, mypy, flake8
- uv/make
- Mlx (graphique)
- Git + GitHub
---
> Carte de sortie : ce README inclut toutes les parties demandées et est orienté projet complet A-Z.
## 🚀 Installation
1. Cloner le dépôt :
```sh
git clone <url> amazing
cd amazing
```
2. Créer un environnement :
```sh
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip setuptools
pip install -r requirements.txt # si présent ; sinon pip install pydantic numpy pytest mypy
```
## ▶️ Exécution
- Mode commande :
```sh
PYTHONPATH=src python3 a_maze_ing.py config.txt
```
- Avec Makefile :
```sh
make run
```
Le programme ouvre une fenêtre MLX et affiche le labyrinthe généré ; contrôles :
- 1 : regénérer
- 2 : afficher le chemin
- 3 : changer la couleur
- 4 : quitter
## 🧪 Tests
- Lancer tous les tests :
```sh
PYTHONPATH=src pytest
```
- Fichiers de tests existants :
- `tests/test_Cell.py`
- `tests/test_Depth.py`
- `tests/test_Maze.py`
- `tests/test_MazeGenerator.py`
- `tests/test_MazeSolver.py`
- `tests/test_parsing.py`
## 🧹 Lint / typage
- Flake8 + MyPy (configuration dans Makefile)
```sh
make lint
make lint-strict
```
- Sur le projet, utilisez ces commandes :
```sh
PYTHONPATH=src python3 -m mypy --warn-return-any --warn-unused-ignores --ignore-missing-imports --disallow-untyped-defs --check-untyped-defs -p mazegen -p AMazeIng
```
### Problèmes connus
- `mypy` en mode strict détecte :
- `mlx` non typé, donc `no-untyped-call` (bibliothèque native sans stub)
- `AMazeIng` identifié comme module installé sans `py.typed` pour lautocomplétion stricte.
## 🛠️ Architecture
- `Cell` : gestion binaire des murs (N, E, S, W).
- `MazeGenerator.DepthFirstSearch` : génération récursive avec backtracking.
- `MazeGenerator.Kruskal` : génération via graphe densembles disjoints.
- `MazeSolver.DepthFirstSearchSolver` : recherche DFS.
- `MazeSolver.AStar` : recherche A* avec heuristique Manhattan.
## 📝 Notes
- Préférer des imports relatifs depuis `src` :
- `from mazegen.Cell import Cell` plutôt que `from mazegen import Cell` pour éviter les conflits `module is not valid as type`.
- `from parsing.Parsing import DataMaze` pour la configuration.
- Le code est déjà prêt pour packaging avec `pyproject.toml` / `setup.cfg`.
## 📦 Distribution
- Makefile contient cible `build` générant 1 roue `.whl` via `uv build`.
- `install`|`run` sont inclus.
---
Projet maintenu en mode éducatif. Contribution bienvenue via issues et PR.
SITULITUPU